From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31019 invoked by alias); 21 Jul 2012 00:28:28 -0000 Received: (qmail 31010 invoked by uid 22791); 21 Jul 2012 00:28:24 -0000 X-SWARE-Spam-Status: No, hits=-0.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,T_RP_MATCHES_RCVD,URIBL_RED X-Spam-Check-By: sourceware.org Received: from mail-ob0-f169.google.com (HELO mail-ob0-f169.google.com) (209.85.214.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 21 Jul 2012 00:28:05 +0000 Received: by obhx4 with SMTP id x4so7036349obh.0 for ; Fri, 20 Jul 2012 17:28:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :x-system-of-record:x-gm-message-state; bh=ka2THq7ZUt1SBym+XV+yRswwXMYbD6C6NXvukUQRBBw=; b=aT0koadaWB+V8NZCCmOTlVL8oGzyFxRj2as6cCm+fDGCiam1ELaWqtDBkR0w9NanRw L+LuXHh4PwxO3fSi3DPssiMtoUORykPFkx47do4JKvB8idR5/8FGDHWaKvVWNI7gV78M vMnqRdIL2smkneM1xYldL7guWCoz62lB/q0l2y0gt851lX1cCDyF+X2HW39PawQyCXOZ pYhvW23e611sj7lNIFsgruGNXubvWIXvatqKHQgYOAfwelXXuEszApO+//QBG+SUwxRy 0ptqIwggwTVEv5suQPyd/RC7hVq+iXsyDq+BQy4ioDUIVl9zqRvgpgthMjE+z143JdbB NRBg== Received: by 10.182.16.3 with SMTP id b3mr9506409obd.72.1342830483527; Fri, 20 Jul 2012 17:28:03 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.16.3 with SMTP id b3mr9506395obd.72.1342830483306; Fri, 20 Jul 2012 17:28:03 -0700 (PDT) Received: by 10.182.45.231 with HTTP; Fri, 20 Jul 2012 17:28:03 -0700 (PDT) Date: Sat, 21 Jul 2012 00:28:00 -0000 Message-ID: Subject: [patch] Gold linker patch to provide plugin support for mapping some text sections to an unique ELF segment. From: Sriraman Tallam To: binutils , Ian Lance Taylor , Cary Coutant Content-Type: multipart/mixed; boundary=f46d04462f66f3787c04c54c15ca X-System-Of-Record: true X-Gm-Message-State: ALoCoQmTT1W4P+GSrJdCws8bBVRSEHztYvavXfjKmn8Dkzu5qNOu9p0iG09/kGeTagXCu2F94Rl5EBbXG5swG9WG/Hjk1apKs5PT3ujSPcSaZLYIQaycbq3w/IVlwMiH/A2A/GIyyLgoriyeQw6ROhfU/eaAkvSvF/nuCfoMJhLuJQcWkyl6wInXfEEBxUpe6aTiwI/Cz8my X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2012-07/txt/msg00153.txt.bz2 --f46d04462f66f3787c04c54c15ca Content-Type: text/plain; charset=ISO-8859-1 Content-length: 989 Hi, This patch allows plugins to specify that a subset of sections are to be mapped to an unique segment. This is useful, for instance, when a set of functions that are determined to be hot can be placed in an unique segment which can then be mapped to huge text pages. It has been found for some Google applications that mapping functions to huge pages, along with function layout, provides a significant performance benefit and this feature can take this further by only mapping certain functions to huge pages, which requires that they be placed in an unique segment. The plugin needs to specify a list of sections that have to mapped to an unique segment. The plugin can also specify any additional segment flags to be set. The segment flag bits 3 to 19 seem to be available and can be set to mark some segments which can later be mapped to huge pages. The flags which would be set by default, bits 0-2, cannot be unset by the plugin. Thoughts? Patch attached. Thanks, -Sri. --f46d04462f66f3787c04c54c15ca Content-Type: text/plain; charset=US-ASCII; name="segment_patch.txt" Content-Disposition: attachment; filename="segment_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h4vyks6m0 Content-length: 58682 VGhpcyBwYXRjaCBhbGxvd3MgcGx1Z2lucyB0byBzcGVjaWZ5IHRoYXQgYSBz dWJzZXQgb2Ygc2VjdGlvbnMgYXJlIHRvIGJlIG1hcHBlZCB0byBhbiB1bmlx dWUgc2VnbWVudC4gIFRoaXMgaXMgdXNlZnVsLCBmb3IgaW5zdGFuY2UsIHdo ZW4gYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgYXJlIGRldGVybWluZWQgdG8g YmUgaG90IGNhbiBiZSBwbGFjZWQgaW4gYW4gdW5pcXVlIHNlZ21lbnQgd2hp Y2ggY2FuIHRoZW4gYmUgbWFwcGVkIHRvIGh1Z2UgdGV4dCBwYWdlcy4gSXQg aGFzIGJlZW4gZm91bmQgZm9yIHNvbWUgR29vZ2xlIGFwcGxpY2F0aW9ucyB0 aGF0IG1hcHBpbmcgZnVuY3Rpb25zIHRvIGh1Z2UgcGFnZXMsIGFsb25nIHdp dGggZnVuY3Rpb24gbGF5b3V0LCBwcm92aWRlcyBhIHNpZ25pZmljYW50IHBl cmZvcm1hbmNlIGJlbmVmaXQgYW5kIHRoaXMgZmVhdHVyZSBjYW4gdGFrZSB0 aGlzIGZ1cnRoZXIgYnkgb25seSBtYXBwaW5nIGNlcnRhaW4gZnVuY3Rpb25z IHRvIGh1Z2UgcGFnZXMsIHdoaWNoIHJlcXVpcmVzIHRoYXQgdGhleSBiZSBw bGFjZWQgaW4gYW4gdW5pcXVlIHNlZ21lbnQuCgpUaGUgcGx1Z2luIG5lZWRz IHRvIHNwZWNpZnkgYSBsaXN0IG9mIHNlY3Rpb25zIHRoYXQgaGF2ZSB0byBt YXBwZWQgdG8gYW4gdW5pcXVlIHNlZ21lbnQuICBUaGUgcGx1Z2luIGNhbiBh bHNvIHNwZWNpZnkgYW55IGFkZGl0aW9uYWwgc2VnbWVudCBmbGFncyB0byBi ZSBzZXQuIFRoZSBzZWdtZW50IGZsYWcgYml0cyAzIHRvIDE5IHNlZW0gdG8g YmUgYXZhaWxhYmxlIGFuZCBjYW4gYmUgc2V0IHRvIG1hcmsgc29tZSBzZWdt ZW50cyB3aGljaCBjYW4gbGF0ZXIgYmUgbWFwcGVkIHRvIGh1Z2UgcGFnZXMu ICBUaGUgZmxhZ3Mgd2hpY2ggd291bGQgYmUgc2V0IGJ5IGRlZmF1bHQsIGJp dHMgMC0yLCBjYW5ub3QgYmUgdW5zZXQgYnkgdGhlIHBsdWdpbi4KCgoJKiBw bHVnaW4tYXBpLmggKGxkX3BsdWdpbl9hbGxvd191bmlxdWVfc2VnbWVudF9m b3Jfc2VjdGlvbnMpOgoJTmV3IGludGVyZmFjZS4KCShsZF9wbHVnaW5fdW5p cXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zKTogTmV3IGludGVyZmFjZS4KCShM RFBUX0FMTE9XX1VOSVFVRV9TRUdNRU5UX0ZPUl9TRUNUSU9OUyk6IE5ldyBl bnVtIHZhbC4KCShMRFBUX1VOSVFVRV9TRUdNRU5UX0ZPUl9TRUNUSU9OUyk6 IE5ldyBlbnVtIHZhbC4KCSh0dl9hbGxvd191bmlxdWVfc2VnbWVudF9mb3Jf c2VjdGlvbnMpOiBOZXcgbWVtYmVyLgoJKHR2X3VuaXF1ZV9zZWdtZW50X2Zv cl9zZWN0aW9ucyk6IE5ldyBtZW1iZXIuCgoJKiBnb2xkLmNjIChxdWV1ZV9t aWRkbGVfdGFza3MpOiBDYWxsIGxheW91dCBhZ2FpbiB3aGVuIHVuaXF1ZQoJ c2VnbWVudHMgZm9yIHNlY3Rpb25zIGlzIGRlc2lyZWQuCgkqIGxheW91dC5j YyAoTGF5b3V0OjpMYXlvdXQpOiBJbml0aWFsaXplIG5ldyBtZW1iZXJzLgoJ KGNob29zZV9vdXRwdXRfc2VjdGlvbik6IE5ldyBwYXJhbWV0ZXIuCglNb2Rp ZnkgY2FsbCB0byBvdXRwdXRfc2VjdGlvbl9uYW1lLgoJKG91dHB1dF9zZWN0 aW9uX25hbWUpOiBOZXcgcGFyYW1ldGVyLgoJQ2hlY2sgaWYgaW5wdXQgc2Vj dGlvbiBuZWVkcyB0byBiZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgb3V0cHV0 CglzZWN0aW9uLgoJKExheW91dDo6bGF5b3V0KTogTW9kaWZ5IGNhbGwgdG8g Y2hvb3NlX291dHB1dF9zZWN0aW9uLgoJTWFyayBvdXRwdXQgc2VjdGlvbiBm b3IgbWFwcGluZyB0byBhbiB1bmlxdWUgc2VnbWVudC4KCShMYXlvdXQ6Omxh eW91dF9yZWxvYyk6IE1vZGlmeSBjYWxsIHRvIGNob29zZV9vdXRwdXRfc2Vj dGlvbi4KCShMYXlvdXQ6Om1ha2VfZWhfZnJhbWVfc2VjdGlvbik6IE1vZGlm eSBjYWxsIHRvIGNob29zZV9vdXRwdXRfc2VjdGlvbi4KCShMYXlvdXQ6OmFk ZF90b19nZGJfaW5kZXgpOiBNb2RpZnkgY2FsbCB0byBjaG9vc2Vfb3V0cHV0 X3NlY3Rpb24uCgkoTGF5b3V0OjphZGRfb3V0cHV0X3NlY3Rpb25fZGF0YSk6 IE1vZGlmeSBjYWxsIHRvCgljaG9vc2Vfb3V0cHV0X3NlY3Rpb24uCgkoTGF5 b3V0OjphdHRhY2hfYWxsb2NhdGVkX3NlY3Rpb25fdG9fc2VnbWVudCk6IFNl dCBleHRyYSBzZWdtZW50IGZsYWdzLgoJTWFwIHRvIHVuaXF1ZSBzZWdtZW50 IGlmIG5lY2Vzc2FyeS4KCShMYXlvdXQ6OmNyZWF0ZV9pbml0aWFsX2R5bmFt aWNfc2VjdGlvbnMpOiBNb2RpZnkgY2FsbCB0bwoJY2hvb3NlX291dHB1dF9z ZWN0aW9uLgoJKExheW91dDo6Y3JlYXRlX2R5bmFtaWNfc3ltdGFiKTogTW9k aWZ5IGNhbGwgdG8KCWNob29zZV9vdXRwdXRfc2VjdGlvbi4KCShMYXlvdXQ6 OnNpemVkX2NyZWF0ZV92ZXJzaW9uX3NlY3Rpb25zKTogTW9kaWZ5IGNhbGwg dG8KCWNob29zZV9vdXRwdXRfc2VjdGlvbi4KCShMYXlvdXQ6OmNyZWF0ZV9p bnRlcnApOiBNb2RpZnkgY2FsbCB0bwoJY2hvb3NlX291dHB1dF9zZWN0aW9u LiAKCSogbGF5b3V0LmggKExheW91dDo6Z2V0X3NlY3Rpb25fc2VnbWVudF9t YXApOiBOZXcgZnVuY3Rpb24uCgkoTGF5b3V0OjpnZXRfb3V0cHV0X3NlY3Rp b25fZmxhZ3NfbWFwKTogTmV3IGZ1bmN0aW9uLgoJKExheW91dDo6aXNfdW5p cXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zX3NwZWNpZmllZCk6IE5ldyBmdW5j dGlvbi4KCShMYXlvdXQ6OnNldF91bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlv bnNfc3BlY2lmaWVkKTogTmV3IGZ1bmN0aW9uLgoJKExheW91dDo6b3V0cHV0 X3NlY3Rpb25fbmFtZSk6IEFkZCBwYXJhbWV0ZXIuCgkoTGF5b3V0Ojp1bmlx dWVfc2VnbWVudF9mb3Jfc2VjdGlvbnNfc3BlY2lmaWVkXyk6IE5ldyBtZW1i ZXIuCgkoTGF5b3V0OjpzZWN0aW9uX3NlZ21lbnRfbWFwXyk6IE5ldyBtZW1i ZXIuCgkoTGF5b3V0OjpvdXRwdXRfc2VjdGlvbl9mbGFnc19tYXBfKTogTmV3 IG1lbWJlci4KCSogb2JqZWN0LmNjIChTaXplZF9yZWxvYmpfZmlsZTxzaXpl LCBiaWdfZW5kaWFuPjo6ZG9fbGF5b3V0KToKCVJlbmFtZSBpc19nY19wYXNz X29uZSB0byBpc19wYXNzX29uZS4KCVJlbmFtZSBpc19nY19wYXNzX3R3byB0 byBpc19wYXNzX3R3by4KCVJlbmFtZSBpc19nY19vcl9pY2YgdG8gaXNfdHdv X3Bhc3MuCglDaGVjayBmb3Igd2hpY2ggcGFzcyBiYXNlZCBvbiB3aGV0aGVy IHN5bWJvbHMgZGF0YSBpcyBwcmVzZW50LgoJTWFrZSBpdCB0d28gcGFzcyB3 aGVuIHVuaXF1ZSBzZWdtZW50cyBmb3Igc2VjdGlvbnMgaXMgZGVzaXJlZC4K CSogb3V0cHV0LmNjIChPdXRwdXRfc2VjdGlvbjo6T3V0cHV0X3NlY3Rpb24p OiBJbml0aWFsaXplIG5ldwoJbWVtYmVyIGlzX3VuaXF1ZV9zZWdtZW50LgoJ KiBvdXRwdXQuaCAoT3V0cHV0X3NlY3Rpb246OmlzX3VuaXF1ZV9zZWdtZW50 KTogTmV3IGZ1bmN0aW9uLgoJKE91dHB1dF9zZWN0aW9uOjpzZXRfaXNfdW5p cXVlX3NlZ21lbnQpOiBOZXcgZnVuY3Rpb24uCgkoT3V0cHV0X3NlY3Rpb246 OmlzX3VuaXF1ZV9zZWdtZW50KTogTmV3IG1lbWJlci4KCSogcGx1Z2luLmNj IChhbGxvd191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMpOiBOZXcgZnVu Y3Rpb24uCgkodW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zKTogTmV3IGZ1 bmN0aW9uLgoJKFBsdWdpbjo6bG9hZCk6IEFkZCBuZXcgZnVuY3Rpb25zIHRv IHRyYW5zZmVyIHZlY3Rvci4KCSogTWFrZWZpbGUuYW0gKHBsdWdpbl9maW5h bF9sYXlvdXQucmVhZGVsZi5zdGRvdXQpOiBBZGQgcmVhZGVsZiBvdXRwdXQu CgkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgoJKiB0ZXN0c3VpdGUvcGx1 Z2luX2ZpbmFsX2xheW91dC5zaDogQ2hlY2sgaWYgdW5pcXVlIHNlZ21lbnQK CWZ1bmN0aW9uYWxpdHkgd29ya3MuCgkqIHRlc3RzdWl0ZS9wbHVnaW5fc2Vj dGlvbl9vcmRlci5jIChvbmxvYWQpOiBDaGVjayBpZiBuZXcgaW50ZXJmYWNl cwoJYXJlIGF2YWlsYWJsZS4KCShhbGxvd191bmlxdWVfc2VnbWVudF9mb3Jf c2VjdGlvbnMpOiBOZXcgZ2xvYmFsLgoJKHVuaXF1ZV9zZWdtZW50X2Zvcl9z ZWN0aW9ucyk6IE5ldyBnbG9iYWwuCgkoY2xhaW1fZmlsZV9ob29rKTogQ2Fs bCBhbGxvd191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMuCgkoYWxsX3N5 bWJvbHNfcmVhZF9ob29rKTogQ2FsbCB1bmlxdWVfc2VnbWVudF9mb3Jfc2Vj dGlvbnMuCgoKSW5kZXg6IGdvbGQvZ29sZC5jYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ29sZC9nb2xkLmNjLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjEwMApkaWZmIC11IC11IC1wIC1yMS4x MDAgZ29sZC5jYwotLS0gZ29sZC9nb2xkLmNjCTE2IEp1bCAyMDEyIDE5OjAw OjE4IC0wMDAwCTEuMTAwCisrKyBnb2xkL2dvbGQuY2MJMjAgSnVsIDIwMTIg MjI6NTE6NDkgLTAwMDAKQEAgLTUzMCwxMSArNTMwLDEzIEBAIHF1ZXVlX21p ZGRsZV90YXNrcyhjb25zdCBHZW5lcmFsX29wdGlvbnMKIAogICAvLyBDYWxs IE9iamVjdDo6bGF5b3V0IGZvciB0aGUgc2Vjb25kIHRpbWUgdG8gZGV0ZXJt aW5lIHRoZQogICAvLyBvdXRwdXRfc2VjdGlvbnMgZm9yIGFsbCByZWZlcmVu Y2VkIGlucHV0IHNlY3Rpb25zLiAgV2hlbgotICAvLyAtLWdjLXNlY3Rpb25z IG9yIC0taWNmIGlzIHR1cm5lZCBvbiwgT2JqZWN0OjpsYXlvdXQgaXMKLSAg Ly8gY2FsbGVkIHR3aWNlLiAgSXQgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1l IHdoZW4gdGhlCi0gIC8vIHN5bWJvbHMgYXJlIGFkZGVkLgorICAvLyAtLWdj LXNlY3Rpb25zIG9yIC0taWNmIGlzIHR1cm5lZCBvbiwgb3Igd2hlbiBjZXJ0 YWluIGlucHV0CisgIC8vIHNlY3Rpb25zIGhhdmUgdG8gYmUgbWFwcGVkIHRv IHVuaXF1ZSBzZWdtZW50cywgT2JqZWN0OjpsYXlvdXQKKyAgLy8gaXMgY2Fs bGVkIHR3aWNlLiAgSXQgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lIHdoZW4g c3ltYm9scworICAvLyBhcmUgYWRkZWQuCiAgIGlmIChwYXJhbWV0ZXJzLT5v cHRpb25zKCkuZ2Nfc2VjdGlvbnMoKQotICAgICAgfHwgcGFyYW1ldGVycy0+ b3B0aW9ucygpLmljZl9lbmFibGVkKCkpCisgICAgICB8fCBwYXJhbWV0ZXJz LT5vcHRpb25zKCkuaWNmX2VuYWJsZWQoKQorICAgICAgfHwgbGF5b3V0LT5p c191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnNfc3BlY2lmaWVkKCkpCiAg ICAgewogICAgICAgZm9yIChJbnB1dF9vYmplY3RzOjpSZWxvYmpfaXRlcmF0 b3IgcCA9IGlucHV0X29iamVjdHMtPnJlbG9ial9iZWdpbigpOwogCSAgIHAg IT0gaW5wdXRfb2JqZWN0cy0+cmVsb2JqX2VuZCgpOwpJbmRleDogZ29sZC9s YXlvdXQuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2 cy9zcmMvc3JjL2dvbGQvbGF5b3V0LmNjLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjIzMQpkaWZmIC11IC11IC1wIC1yMS4yMzEgbGF5b3V0LmNjCi0tLSBn b2xkL2xheW91dC5jYwkyMiBKdW4gMjAxMiAxODowMjoyNCAtMDAwMAkxLjIz MQorKysgZ29sZC9sYXlvdXQuY2MJMjAgSnVsIDIwMTIgMjI6NTE6NDkgLTAw MDAKQEAgLTQwOCwxMiArNDA4LDE1IEBAIExheW91dDo6TGF5b3V0KGludCBu dW1iZXJfb2ZfaW5wdXRfZmlsZXMKICAgICByZXNpemVkX3NpZ25hdHVyZXNf KGZhbHNlKSwKICAgICBoYXZlX3N0YWJzdHJfc2VjdGlvbl8oZmFsc2UpLAog ICAgIHNlY3Rpb25fb3JkZXJpbmdfc3BlY2lmaWVkXyhmYWxzZSksCisgICAg dW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zX3NwZWNpZmllZF8oZmFsc2Up LAogICAgIGluY3JlbWVudGFsX2lucHV0c18oTlVMTCksCiAgICAgcmVjb3Jk X291dHB1dF9zZWN0aW9uX2RhdGFfZnJvbV9zY3JpcHRfKGZhbHNlKSwKICAg ICBzY3JpcHRfb3V0cHV0X3NlY3Rpb25fZGF0YV9saXN0XygpLAogICAgIHNl Z21lbnRfc3RhdGVzXyhOVUxMKSwKICAgICByZWxheGF0aW9uX2RlYnVnX2No ZWNrXyhOVUxMKSwKICAgICBzZWN0aW9uX29yZGVyX21hcF8oKSwKKyAgICBz ZWN0aW9uX3NlZ21lbnRfbWFwXygpLAorICAgIG91dHB1dF9zZWN0aW9uX2Zs YWdzX21hcF8oKSwKICAgICBpbnB1dF9zZWN0aW9uX3Bvc2l0aW9uXygpLAog ICAgIGlucHV0X3NlY3Rpb25fZ2xvYl8oKSwKICAgICBpbmNyZW1lbnRhbF9i YXNlXyhOVUxMKSwKQEAgLTgwNiwxNSArODA5LDE3IEBAIExheW91dDo6Z2V0 X291dHB1dF9zZWN0aW9uKGNvbnN0IGNoYXIqIG4KIH0KIAogLy8gUGljayB0 aGUgb3V0cHV0IHNlY3Rpb24gdG8gdXNlIGZvciBzZWN0aW9uIE5BTUUsIGlu IGlucHV0IGZpbGUKLS8vIFJFTE9CSiwgd2l0aCB0eXBlIFRZUEUgYW5kIGZs YWdzIEZMQUdTLiAgUkVMT0JKIG1heSBiZSBOVUxMIGZvciBhCi0vLyBsaW5r ZXIgY3JlYXRlZCBzZWN0aW9uLiAgSVNfSU5QVVRfU0VDVElPTiBpcyB0cnVl IGlmIHdlIGFyZQotLy8gY2hvb3NpbmcgYW4gb3V0cHV0IHNlY3Rpb24gZm9y IGFuIGlucHV0IHNlY3Rpb24gZm91bmQgaW4gYSBpbnB1dAotLy8gZmlsZS4g IE9SREVSIGlzIHdoZXJlIHRoaXMgc2VjdGlvbiBzaG91bGQgYXBwZWFyIGlu IHRoZSBvdXRwdXQKLS8vIHNlY3Rpb25zLiAgSVNfUkVMUk8gaXMgdHJ1ZSBm b3IgYSByZWxybyBzZWN0aW9uLiAgVGhpcyB3aWxsIHJldHVybgotLy8gTlVM TCBpZiB0aGUgaW5wdXQgc2VjdGlvbiBzaG91bGQgYmUgZGlzY2FyZGVkLgor Ly8gUkVMT0JKLCB3aXRoIGluZGV4IFNITkRYLCB3aXRoIHR5cGUgVFlQRSBh bmQgZmxhZ3MgRkxBR1MuCisvLyBSRUxPQkogbWF5IGJlIE5VTEwgZm9yIGEg bGlua2VyIGNyZWF0ZWQgc2VjdGlvbi4KKy8vIElTX0lOUFVUX1NFQ1RJT04g aXMgdHJ1ZSBpZiB3ZSBhcmUgY2hvb3NpbmcgYW4gb3V0cHV0IHNlY3Rpb24K Ky8vIGZvciBhbiBpbnB1dCBzZWN0aW9uIGZvdW5kIGluIGEgaW5wdXQgZmls ZS4gIE9SREVSIGlzIHdoZXJlIHRoaXMKKy8vIHNlY3Rpb24gc2hvdWxkIGFw cGVhciBpbiB0aGUgb3V0cHV0IHNlY3Rpb25zLiAgSVNfUkVMUk8gaXMgdHJ1 ZQorLy8gZm9yIGEgcmVscm8gc2VjdGlvbi4gIFRoaXMgd2lsbCByZXR1cm4g TlVMTCBpZiB0aGUgaW5wdXQgc2VjdGlvbgorLy8gc2hvdWxkIGJlIGRpc2Nh cmRlZC4KIAogT3V0cHV0X3NlY3Rpb24qCi1MYXlvdXQ6OmNob29zZV9vdXRw dXRfc2VjdGlvbihjb25zdCBSZWxvYmoqIHJlbG9iaiwgY29uc3QgY2hhciog bmFtZSwKK0xheW91dDo6Y2hvb3NlX291dHB1dF9zZWN0aW9uKGNvbnN0IFJl bG9iaiogcmVsb2JqLCB1bnNpZ25lZCBpbnQgc2huZHgsCisJCQkgICAgICBj b25zdCBjaGFyKiBuYW1lLAogCQkJICAgICAgZWxmY3BwOjpFbGZfV29yZCB0 eXBlLCBlbGZjcHA6OkVsZl9Yd29yZCBmbGFncywKIAkJCSAgICAgIGJvb2wg aXNfaW5wdXRfc2VjdGlvbiwgT3V0cHV0X3NlY3Rpb25fb3JkZXIgb3JkZXIs CiAJCQkgICAgICBib29sIGlzX3JlbHJvKQpAQCAtOTM5LDcgKzk0NCw4IEBA IExheW91dDo6Y2hvb3NlX291dHB1dF9zZWN0aW9uKGNvbnN0IFJlbG8KICAg aWYgKGlzX2lucHV0X3NlY3Rpb24KICAgICAgICYmICF0aGlzLT5zY3JpcHRf b3B0aW9uc18tPnNhd19zZWN0aW9uc19jbGF1c2UoKQogICAgICAgJiYgIXBh cmFtZXRlcnMtPm9wdGlvbnMoKS5yZWxvY2F0YWJsZSgpKQotICAgIG5hbWUg PSBMYXlvdXQ6Om91dHB1dF9zZWN0aW9uX25hbWUocmVsb2JqLCBuYW1lLCAm bGVuKTsKKyAgICBuYW1lID0gTGF5b3V0OjpvdXRwdXRfc2VjdGlvbl9uYW1l KHJlbG9iaiwgc2huZHgsIG5hbWUsICZsZW4sCisJCQkJICAgICAgICZ0aGlz LT5zZWN0aW9uX3NlZ21lbnRfbWFwXyk7CiAKICAgU3RyaW5ncG9vbDo6S2V5 IG5hbWVfa2V5OwogICBuYW1lID0gdGhpcy0+bmFtZXBvb2xfLmFkZF93aXRo X2xlbmd0aChuYW1lLCBsZW4sIHRydWUsICZuYW1lX2tleSk7CkBAIC0xMDI4 LDExICsxMDM0LDE4IEBAIExheW91dDo6bGF5b3V0KFNpemVkX3JlbG9ial9m aWxlPHNpemUsIGIKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBvcyA9 IHRoaXMtPmNob29zZV9vdXRwdXRfc2VjdGlvbihvYmplY3QsIG5hbWUsIHNo X3R5cGUsCisgICAgICBvcyA9IHRoaXMtPmNob29zZV9vdXRwdXRfc2VjdGlv bihvYmplY3QsIHNobmR4LCBuYW1lLCBzaF90eXBlLAogCQkJCSAgICAgICBz aGRyLmdldF9zaF9mbGFncygpLCB0cnVlLAogCQkJCSAgICAgICBPUkRFUl9J TlZBTElELCBmYWxzZSk7CiAgICAgICBpZiAob3MgPT0gTlVMTCkKIAlyZXR1 cm4gTlVMTDsKKworICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvdXRwdXQgc2Vj dGlvbiBuZWVkcyB0byBiZSBtYXBwZWQgdG8gYW4gdW5pcXVlIHNlZ21lbnQu CisgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB1c2luZyBwbHVnaW5z LgorICAgICAgaWYgKCFvcy0+aXNfdW5pcXVlX3NlZ21lbnQoKQorCSAgJiYg KHRoaXMtPnNlY3Rpb25fc2VnbWVudF9tYXBfLmZpbmQoQ29uc3Rfc2VjdGlv bl9pZChvYmplY3QsIHNobmR4KSkKKwkgICAgICAhPSB0aGlzLT5zZWN0aW9u X3NlZ21lbnRfbWFwXy5lbmQoKSkpCisJb3MtPnNldF9pc191bmlxdWVfc2Vn bWVudCgpOwogICAgIH0KIAogICAvLyBCeSBkZWZhdWx0IHRoZSBHTlUgbGlu a2VyIHNvcnRzIGlucHV0IHNlY3Rpb25zIHdob3NlIG5hbWVzIG1hdGNoCkBA IC0xMTE5LDcgKzExMzIsNyBAQCBMYXlvdXQ6OmxheW91dF9yZWxvYyhTaXpl ZF9yZWxvYmpfZmlsZTxzCiAgIE91dHB1dF9zZWN0aW9uKiBvczsKICAgaWYg KCFwYXJhbWV0ZXJzLT5vcHRpb25zKCkucmVsb2NhdGFibGUoKQogICAgICAg fHwgKGRhdGFfc2VjdGlvbi0+ZmxhZ3MoKSAmIGVsZmNwcDo6U0hGX0dST1VQ KSA9PSAwKQotICAgIG9zID0gdGhpcy0+Y2hvb3NlX291dHB1dF9zZWN0aW9u KG9iamVjdCwgbmFtZS5jX3N0cigpLCBzaF90eXBlLAorICAgIG9zID0gdGhp cy0+Y2hvb3NlX291dHB1dF9zZWN0aW9uKG9iamVjdCwgMCwgbmFtZS5jX3N0 cigpLCBzaF90eXBlLAogCQkJCSAgICAgc2hkci5nZXRfc2hfZmxhZ3MoKSwg ZmFsc2UsCiAJCQkJICAgICBPUkRFUl9JTlZBTElELCBmYWxzZSk7CiAgIGVs c2UKQEAgLTEyOTEsNyArMTMwNCw3IEBAIExheW91dDo6bWFrZV9laF9mcmFt ZV9zZWN0aW9uKGNvbnN0IFJlbG8KIHsKICAgLy8gRklYTUU6IE9uIHg4Nl82 NCwgdGhpcyBjb3VsZCB1c2UgU0hUX1g4Nl82NF9VTldJTkQgcmF0aGVyIHRo YW4KICAgLy8gU0hUX1BST0dCSVRTLgotICBPdXRwdXRfc2VjdGlvbiogb3Mg PSB0aGlzLT5jaG9vc2Vfb3V0cHV0X3NlY3Rpb24ob2JqZWN0LCAiLmVoX2Zy YW1lIiwKKyAgT3V0cHV0X3NlY3Rpb24qIG9zID0gdGhpcy0+Y2hvb3NlX291 dHB1dF9zZWN0aW9uKG9iamVjdCwgMCwgIi5laF9mcmFtZSIsCiAJCQkJCQkg ICBlbGZjcHA6OlNIVF9QUk9HQklUUywKIAkJCQkJCSAgIGVsZmNwcDo6U0hG X0FMTE9DLCBmYWxzZSwKIAkJCQkJCSAgIE9SREVSX0VIRlJBTUUsIGZhbHNl KTsKQEAgLTEzMDgsNyArMTMyMSw3IEBAIExheW91dDo6bWFrZV9laF9mcmFt ZV9zZWN0aW9uKGNvbnN0IFJlbG8KICAgICAgIGlmIChwYXJhbWV0ZXJzLT5v cHRpb25zKCkuZWhfZnJhbWVfaGRyKCkgJiYgIXBhcmFtZXRlcnMtPmluY3Jl bWVudGFsKCkpCiAJewogCSAgT3V0cHV0X3NlY3Rpb24qIGhkcl9vcyA9Ci0J ICAgIHRoaXMtPmNob29zZV9vdXRwdXRfc2VjdGlvbihOVUxMLCAiLmVoX2Zy YW1lX2hkciIsCisJICAgIHRoaXMtPmNob29zZV9vdXRwdXRfc2VjdGlvbihO VUxMLCAwLCAiLmVoX2ZyYW1lX2hkciIsCiAJCQkJCWVsZmNwcDo6U0hUX1BS T0dCSVRTLAogCQkJCQllbGZjcHA6OlNIRl9BTExPQywgZmFsc2UsCiAJCQkJ CU9SREVSX0VIRlJBTUUsIGZhbHNlKTsKQEAgLTEzNzcsNyArMTM5MCw3IEBA IExheW91dDo6YWRkX3RvX2dkYl9pbmRleChib29sIGlzX3R5cGVfdW4KIHsK ICAgaWYgKHRoaXMtPmdkYl9pbmRleF9kYXRhXyA9PSBOVUxMKQogICAgIHsK LSAgICAgIE91dHB1dF9zZWN0aW9uKiBvcyA9IHRoaXMtPmNob29zZV9vdXRw dXRfc2VjdGlvbihOVUxMLCAiLmdkYl9pbmRleCIsCisgICAgICBPdXRwdXRf c2VjdGlvbiogb3MgPSB0aGlzLT5jaG9vc2Vfb3V0cHV0X3NlY3Rpb24oTlVM TCwgMCwgIi5nZGJfaW5kZXgiLAogCQkJCQkJICAgICAgIGVsZmNwcDo6U0hU X1BST0dCSVRTLCAwLAogCQkJCQkJICAgICAgIGZhbHNlLCBPUkRFUl9JTlZB TElELAogCQkJCQkJICAgICAgIGZhbHNlKTsKQEAgLTE0MDMsNyArMTQxNiw3 IEBAIExheW91dDo6YWRkX291dHB1dF9zZWN0aW9uX2RhdGEoY29uc3QgY2gK IAkJCQlPdXRwdXRfc2VjdGlvbl9kYXRhKiBwb3NkLAogCQkJCU91dHB1dF9z ZWN0aW9uX29yZGVyIG9yZGVyLCBib29sIGlzX3JlbHJvKQogewotICBPdXRw dXRfc2VjdGlvbiogb3MgPSB0aGlzLT5jaG9vc2Vfb3V0cHV0X3NlY3Rpb24o TlVMTCwgbmFtZSwgdHlwZSwgZmxhZ3MsCisgIE91dHB1dF9zZWN0aW9uKiBv cyA9IHRoaXMtPmNob29zZV9vdXRwdXRfc2VjdGlvbihOVUxMLCAwLCBuYW1l LCB0eXBlLCBmbGFncywKIAkJCQkJCSAgIGZhbHNlLCBvcmRlciwgaXNfcmVs cm8pOwogICBpZiAob3MgIT0gTlVMTCkKICAgICBvcy0+YWRkX291dHB1dF9z ZWN0aW9uX2RhdGEocG9zZCk7CkBAIC0xNjkyLDYgKzE3MDUsMTIgQEAgTGF5 b3V0OjphdHRhY2hfYWxsb2NhdGVkX3NlY3Rpb25fdG9fc2VnbQogCiAgIGVs ZmNwcDo6RWxmX1dvcmQgc2VnX2ZsYWdzID0gTGF5b3V0OjpzZWN0aW9uX2Zs YWdzX3RvX3NlZ21lbnQoZmxhZ3MpOwogCisgIC8vIElmIHRoaXMgb3V0cHV0 IHNlY3Rpb24ncyBzZWdtZW50IGhhcyBleHRyYSBmbGFncyB0aGF0IG5lZWQg dG8gYmUgc2V0LAorICAvLyBmcm9tIGEgbGlua2VyIHBsdWdpbiwgY2hlY2sg dGhhdC4KKyAgaWYgKHRoaXMtPm91dHB1dF9zZWN0aW9uX2ZsYWdzX21hcF8u ZmluZChzdGQ6OnN0cmluZyhvcy0+bmFtZSgpKSkKKyAgICAgICE9IHRoaXMt Pm91dHB1dF9zZWN0aW9uX2ZsYWdzX21hcF8uZW5kKCkpCisgICAgc2VnX2Zs YWdzIHw9IHRoaXMtPm91dHB1dF9zZWN0aW9uX2ZsYWdzX21hcF9bc3RkOjpz dHJpbmcob3MtPm5hbWUoKSldOworCiAgIC8vIENoZWNrIGZvciAtLXNlY3Rp b24tc3RhcnQuCiAgIHVpbnQ2NF90IGFkZHI7CiAgIGJvb2wgaXNfYWRkcmVz c19zZXQgPSBwYXJhbWV0ZXJzLT5vcHRpb25zKCkuc2VjdGlvbl9zdGFydChv cy0+bmFtZSgpLCAmYWRkcik7CkBAIC0xNzA4LDYgKzE3MjcsOSBAQCBMYXlv dXQ6OmF0dGFjaF9hbGxvY2F0ZWRfc2VjdGlvbl90b19zZWdtCiAgICAgICAg cCAhPSB0aGlzLT5zZWdtZW50X2xpc3RfLmVuZCgpOwogICAgICAgICsrcCkK ICAgICB7CisgICAgICAvLyBObyBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGxv b3AgaWYgYW4gdW5pcXVlIHNlZ21lbnQgaXMgbmVlZGVkLgorICAgICAgaWYg KG9zLT5pc191bmlxdWVfc2VnbWVudCgpKQorICAgICAgICBicmVhazsKICAg ICAgIGlmICgoKnApLT50eXBlKCkgIT0gZWxmY3BwOjpQVF9MT0FEKQogCWNv bnRpbnVlOwogICAgICAgaWYgKCFwYXJhbWV0ZXJzLT5vcHRpb25zKCkub21h Z2ljKCkKQEAgLTE3NDIsNyArMTc2NCw4IEBAIExheW91dDo6YXR0YWNoX2Fs bG9jYXRlZF9zZWN0aW9uX3RvX3NlZ20KICAgICAgIGJyZWFrOwogICAgIH0K IAotICBpZiAocCA9PSB0aGlzLT5zZWdtZW50X2xpc3RfLmVuZCgpKQorICBp ZiAocCA9PSB0aGlzLT5zZWdtZW50X2xpc3RfLmVuZCgpCisgICAgICB8fCBv cy0+aXNfdW5pcXVlX3NlZ21lbnQoKSkKICAgICB7CiAgICAgICBPdXRwdXRf c2VnbWVudCogb3NlZyA9IHRoaXMtPm1ha2Vfb3V0cHV0X3NlZ21lbnQoZWxm Y3BwOjpQVF9MT0FELAogCQkJCQkJICAgICAgIHNlZ19mbGFncyk7CkBAIC0x OTA4LDcgKzE5MzEsNyBAQCBMYXlvdXQ6OmNyZWF0ZV9pbml0aWFsX2R5bmFt aWNfc2VjdGlvbnMoCiAgIGlmIChwYXJhbWV0ZXJzLT5kb2luZ19zdGF0aWNf bGluaygpKQogICAgIHJldHVybjsKIAotICB0aGlzLT5keW5hbWljX3NlY3Rp b25fID0gdGhpcy0+Y2hvb3NlX291dHB1dF9zZWN0aW9uKE5VTEwsICIuZHlu YW1pYyIsCisgIHRoaXMtPmR5bmFtaWNfc2VjdGlvbl8gPSB0aGlzLT5jaG9v c2Vfb3V0cHV0X3NlY3Rpb24oTlVMTCwgMCwgIi5keW5hbWljIiwKIAkJCQkJ CSAgICAgICBlbGZjcHA6OlNIVF9EWU5BTUlDLAogCQkJCQkJICAgICAgIChl bGZjcHA6OlNIRl9BTExPQwogCQkJCQkJCXwgZWxmY3BwOjpTSEZfV1JJVEUp LApAQCAtMjY2NCw3ICsyNjg3LDcgQEAgTGF5b3V0OjpjcmVhdGVfbm90ZShj b25zdCBjaGFyKiBuYW1lLCBpbgogICAgICAgZmxhZ3MgPSBlbGZjcHA6OlNI Rl9BTExPQzsKICAgICAgIG9yZGVyID0gT1JERVJfUk9fTk9URTsKICAgICB9 Ci0gIE91dHB1dF9zZWN0aW9uKiBvcyA9IHRoaXMtPmNob29zZV9vdXRwdXRf c2VjdGlvbihOVUxMLCBzZWN0aW9uX25hbWUsCisgIE91dHB1dF9zZWN0aW9u KiBvcyA9IHRoaXMtPmNob29zZV9vdXRwdXRfc2VjdGlvbihOVUxMLCAwLCBz ZWN0aW9uX25hbWUsCiAJCQkJCQkgICBlbGZjcHA6OlNIVF9OT1RFLAogCQkJ CQkJICAgZmxhZ3MsIGZhbHNlLCBvcmRlciwgZmFsc2UpOwogICBpZiAob3Mg PT0gTlVMTCkKQEAgLTMwOTUsOSArMzExOCwxMSBAQCBMYXlvdXQ6OnNlZ21l bnRfcHJlY2VkZXMoY29uc3QgT3V0cHV0X3NlCiAKICAgLy8gV2Ugc2hvdWxk bid0IGdldCBoZXJlLS13ZSBzaG91bGRuJ3QgY3JlYXRlIHNlZ21lbnRzIHdo aWNoIHdlCiAgIC8vIGNhbid0IGRpc3Rpbmd1aXNoLiAgVW5sZXNzIG9mIGNv dXJzZSB3ZSBhcmUgdXNpbmcgYSB3ZWlyZCBsaW5rZXIKLSAgLy8gc2NyaXB0 IG9yIG92ZXJsYXBwaW5nIC0tc2VjdGlvbi1zdGFydCBvcHRpb25zLgorICAv LyBzY3JpcHQgb3Igb3ZlcmxhcHBpbmcgLS1zZWN0aW9uLXN0YXJ0IG9wdGlv bnMuICBXZSBjb3VsZCBhbHNvIGdldAorICAvLyBoZXJlIGlmIHBsdWdpbnMg d2FudCB1bmlxdWUgc2VnbWVudHMgZm9yIHN1YnNldHMgb2Ygc2VjdGlvbnMu CiAgIGdvbGRfYXNzZXJ0KHRoaXMtPnNjcmlwdF9vcHRpb25zXy0+c2F3X3Bo ZHJzX2NsYXVzZSgpCi0JICAgICAgfHwgcGFyYW1ldGVycy0+b3B0aW9ucygp LmFueV9zZWN0aW9uX3N0YXJ0KCkpOworCSAgICAgIHx8IHBhcmFtZXRlcnMt Pm9wdGlvbnMoKS5hbnlfc2VjdGlvbl9zdGFydCgpCisJICAgICAgfHwgdGhp cy0+aXNfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zX3NwZWNpZmllZCgp KTsKICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zOTM3LDcgKzM5NjIsNyBA QCBMYXlvdXQ6OmNyZWF0ZV9keW5hbWljX3N5bXRhYihjb25zdCBJbnB1CiAK ICAgLy8gQ3JlYXRlIHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZSBzZWN0aW9u LgogCi0gIE91dHB1dF9zZWN0aW9uKiBkeW5zeW0gPSB0aGlzLT5jaG9vc2Vf b3V0cHV0X3NlY3Rpb24oTlVMTCwgIi5keW5zeW0iLAorICBPdXRwdXRfc2Vj dGlvbiogZHluc3ltID0gdGhpcy0+Y2hvb3NlX291dHB1dF9zZWN0aW9uKE5V TEwsIDAsICIuZHluc3ltIiwKIAkJCQkJCSAgICAgICBlbGZjcHA6OlNIVF9E WU5TWU0sCiAJCQkJCQkgICAgICAgZWxmY3BwOjpTSEZfQUxMT0MsCiAJCQkJ CQkgICAgICAgZmFsc2UsCkBAIC0zOTc2LDcgKzQwMDEsNyBAQCBMYXlvdXQ6 OmNyZWF0ZV9keW5hbWljX3N5bXRhYihjb25zdCBJbnB1CiAgIGlmICh0aGlz LT5hbGxvY2F0ZWRfb3V0cHV0X3NlY3Rpb25fY291bnQoKSA+PSBlbGZjcHA6 OlNITl9MT1JFU0VSVkUpCiAgICAgewogICAgICAgT3V0cHV0X3NlY3Rpb24q IGR5bnN5bV94aW5kZXggPQotCXRoaXMtPmNob29zZV9vdXRwdXRfc2VjdGlv bihOVUxMLCAiLmR5bnN5bV9zaG5keCIsCisJdGhpcy0+Y2hvb3NlX291dHB1 dF9zZWN0aW9uKE5VTEwsIDAsICIuZHluc3ltX3NobmR4IiwKIAkJCQkgICAg ZWxmY3BwOjpTSFRfU1lNVEFCX1NITkRYLAogCQkJCSAgICBlbGZjcHA6OlNI Rl9BTExPQywKIAkJCQkgICAgZmFsc2UsIE9SREVSX0RZTkFNSUNfTElOS0VS LCBmYWxzZSk7CkBAIC00MDAyLDcgKzQwMjcsNyBAQCBMYXlvdXQ6OmNyZWF0 ZV9keW5hbWljX3N5bXRhYihjb25zdCBJbnB1CiAKICAgLy8gQ3JlYXRlIHRo ZSBkeW5hbWljIHN0cmluZyB0YWJsZSBzZWN0aW9uLgogCi0gIE91dHB1dF9z ZWN0aW9uKiBkeW5zdHIgPSB0aGlzLT5jaG9vc2Vfb3V0cHV0X3NlY3Rpb24o TlVMTCwgIi5keW5zdHIiLAorICBPdXRwdXRfc2VjdGlvbiogZHluc3RyID0g dGhpcy0+Y2hvb3NlX291dHB1dF9zZWN0aW9uKE5VTEwsIDAsICIuZHluc3Ry IiwKIAkJCQkJCSAgICAgICBlbGZjcHA6OlNIVF9TVFJUQUIsCiAJCQkJCQkg ICAgICAgZWxmY3BwOjpTSEZfQUxMT0MsCiAJCQkJCQkgICAgICAgZmFsc2Us CkBAIC00MDM5LDcgKzQwNjQsNyBAQCBMYXlvdXQ6OmNyZWF0ZV9keW5hbWlj X3N5bXRhYihjb25zdCBJbnB1CiAJCQkJICAgICZwaGFzaCwgJmhhc2hsZW4p OwogCiAgICAgICBPdXRwdXRfc2VjdGlvbiogaGFzaHNlYyA9Ci0JdGhpcy0+ Y2hvb3NlX291dHB1dF9zZWN0aW9uKE5VTEwsICIuaGFzaCIsIGVsZmNwcDo6 U0hUX0hBU0gsCisJdGhpcy0+Y2hvb3NlX291dHB1dF9zZWN0aW9uKE5VTEws IDAsICIuaGFzaCIsIGVsZmNwcDo6U0hUX0hBU0gsCiAJCQkJICAgIGVsZmNw cDo6U0hGX0FMTE9DLCBmYWxzZSwKIAkJCQkgICAgT1JERVJfRFlOQU1JQ19M SU5LRVIsIGZhbHNlKTsKIApAQCAtNDA3MCw3ICs0MDk1LDcgQEAgTGF5b3V0 OjpjcmVhdGVfZHluYW1pY19zeW10YWIoY29uc3QgSW5wdQogCQkJCSAgICAm cGhhc2gsICZoYXNobGVuKTsKIAogICAgICAgT3V0cHV0X3NlY3Rpb24qIGhh c2hzZWMgPQotCXRoaXMtPmNob29zZV9vdXRwdXRfc2VjdGlvbihOVUxMLCAi LmdudS5oYXNoIiwgZWxmY3BwOjpTSFRfR05VX0hBU0gsCisJdGhpcy0+Y2hv b3NlX291dHB1dF9zZWN0aW9uKE5VTEwsIDAsICIuZ251Lmhhc2giLCBlbGZj cHA6OlNIVF9HTlVfSEFTSCwKIAkJCQkgICAgZWxmY3BwOjpTSEZfQUxMT0Ms IGZhbHNlLAogCQkJCSAgICBPUkRFUl9EWU5BTUlDX0xJTktFUiwgZmFsc2Up OwogCkBAIC00MTc5LDcgKzQyMDQsNyBAQCBMYXlvdXQ6OnNpemVkX2NyZWF0 ZV92ZXJzaW9uX3NlY3Rpb25zKAogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN5 bWJvbCo+JiBkeW5hbWljX3N5bWJvbHMsCiAgICAgY29uc3QgT3V0cHV0X3Nl Y3Rpb24qIGR5bnN0cikKIHsKLSAgT3V0cHV0X3NlY3Rpb24qIHZzZWMgPSB0 aGlzLT5jaG9vc2Vfb3V0cHV0X3NlY3Rpb24oTlVMTCwgIi5nbnUudmVyc2lv biIsCisgIE91dHB1dF9zZWN0aW9uKiB2c2VjID0gdGhpcy0+Y2hvb3NlX291 dHB1dF9zZWN0aW9uKE5VTEwsIDAsICIuZ251LnZlcnNpb24iLAogCQkJCQkJ ICAgICBlbGZjcHA6OlNIVF9HTlVfdmVyc3ltLAogCQkJCQkJICAgICBlbGZj cHA6OlNIRl9BTExPQywKIAkJCQkJCSAgICAgZmFsc2UsCkBAIC00MjEyLDcg KzQyMzcsNyBAQCBMYXlvdXQ6OnNpemVkX2NyZWF0ZV92ZXJzaW9uX3NlY3Rp b25zKAogICBpZiAodmVyc2lvbnMtPmFueV9kZWZzKCkpCiAgICAgewogICAg ICAgT3V0cHV0X3NlY3Rpb24qIHZkc2VjOwotICAgICAgdmRzZWMgPSB0aGlz LT5jaG9vc2Vfb3V0cHV0X3NlY3Rpb24oTlVMTCwgIi5nbnUudmVyc2lvbl9k IiwKKyAgICAgIHZkc2VjID0gdGhpcy0+Y2hvb3NlX291dHB1dF9zZWN0aW9u KE5VTEwsIDAsICIuZ251LnZlcnNpb25fZCIsCiAJCQkJCSAgZWxmY3BwOjpT SFRfR05VX3ZlcmRlZiwKIAkJCQkJICBlbGZjcHA6OlNIRl9BTExPQywKIAkJ CQkJICBmYWxzZSwgT1JERVJfRFlOQU1JQ19MSU5LRVIsIGZhbHNlKTsKQEAg LTQyNDQsNyArNDI2OSw3IEBAIExheW91dDo6c2l6ZWRfY3JlYXRlX3ZlcnNp b25fc2VjdGlvbnMoCiAgIGlmICh2ZXJzaW9ucy0+YW55X25lZWRzKCkpCiAg ICAgewogICAgICAgT3V0cHV0X3NlY3Rpb24qIHZuc2VjOwotICAgICAgdm5z ZWMgPSB0aGlzLT5jaG9vc2Vfb3V0cHV0X3NlY3Rpb24oTlVMTCwgIi5nbnUu dmVyc2lvbl9yIiwKKyAgICAgIHZuc2VjID0gdGhpcy0+Y2hvb3NlX291dHB1 dF9zZWN0aW9uKE5VTEwsIDAsICIuZ251LnZlcnNpb25fciIsCiAJCQkJCSAg ZWxmY3BwOjpTSFRfR05VX3Zlcm5lZWQsCiAJCQkJCSAgZWxmY3BwOjpTSEZf QUxMT0MsCiAJCQkJCSAgZmFsc2UsIE9SREVSX0RZTkFNSUNfTElOS0VSLCBm YWxzZSk7CkBAIC00MjkyLDcgKzQzMTcsNyBAQCBMYXlvdXQ6OmNyZWF0ZV9p bnRlcnAoY29uc3QgVGFyZ2V0KiB0YXJnCiAKICAgT3V0cHV0X3NlY3Rpb25f ZGF0YSogb2RhdGEgPSBuZXcgT3V0cHV0X2RhdGFfY29uc3QoaW50ZXJwLCBs ZW4sIDEpOwogCi0gIE91dHB1dF9zZWN0aW9uKiBvc2VjID0gdGhpcy0+Y2hv b3NlX291dHB1dF9zZWN0aW9uKE5VTEwsICIuaW50ZXJwIiwKKyAgT3V0cHV0 X3NlY3Rpb24qIG9zZWMgPSB0aGlzLT5jaG9vc2Vfb3V0cHV0X3NlY3Rpb24o TlVMTCwgMCwgIi5pbnRlcnAiLAogCQkJCQkJICAgICBlbGZjcHA6OlNIVF9Q Uk9HQklUUywKIAkJCQkJCSAgICAgZWxmY3BwOjpTSEZfQUxMT0MsCiAJCQkJ CQkgICAgIGZhbHNlLCBPUkRFUl9JTlRFUlAsCkBAIC00NjkzLDggKzQ3MTgs MTAgQEAgY29uc3QgaW50IExheW91dDo6c2VjdGlvbl9uYW1lX21hcHBpbmdf YwogLy8gbGVuZ3RoIG9mIE5BTUUuCiAKIGNvbnN0IGNoYXIqCi1MYXlvdXQ6 Om91dHB1dF9zZWN0aW9uX25hbWUoY29uc3QgUmVsb2JqKiByZWxvYmosIGNv bnN0IGNoYXIqIG5hbWUsCi0JCQkgICAgc2l6ZV90KiBwbGVuKQorTGF5b3V0 OjpvdXRwdXRfc2VjdGlvbl9uYW1lKGNvbnN0IFJlbG9iaiogcmVsb2JqLCB1 bnNpZ25lZCBpbnQgc2huZHgsCisJCQkgICAgY29uc3QgY2hhciogbmFtZSwg c2l6ZV90KiBwbGVuLAorCQkJICAgIHN0ZDo6bWFwPENvbnN0X3NlY3Rpb25f aWQsIGNvbnN0IGNoYXIqPioKKwkJCSAgICAgIHNlY3Rpb25fc2VnbWVudF9t YXApCiB7CiAgIC8vIGdjYyA0LjMgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcg c29ydHMgb2Ygc2VjdGlvbiBuYW1lcyB3aGVuIGl0CiAgIC8vIG5lZWRzIGEg c2VjdGlvbiBuYW1lIHNwZWNpZmljIHRvIGEgZnVuY3Rpb246CkBAIC00NzMx LDYgKzQ3NTgsMTcgQEAgTGF5b3V0OjpvdXRwdXRfc2VjdGlvbl9uYW1lKGNv bnN0IFJlbG9iagogICAvLyBub3QgZm91bmQgaW4gdGhlIHRhYmxlLCB3ZSBz aW1wbHkgdXNlIGl0IGFzIHRoZSBvdXRwdXQgc2VjdGlvbgogICAvLyBuYW1l LgogCisKKyAgLy8gQ2hlY2sgaWYgdGhpcyBpbnB1dCBzZWN0aW9uIGlzIGV4 cGxpY2l0bHkgYXNrZWQgdG8gYmUgbWFwcGVkIHRvIGEKKyAgLy8gZGlmZmVy ZW50IG91dHB1dCBzZWN0aW9uIGJ5IGEgbGlua2VyIHBsdWdpbi4KKyAgc3Rk OjptYXA8Q29uc3Rfc2VjdGlvbl9pZCwgY29uc3QgY2hhcio+OjppdGVyYXRv ciBpdAorICAgID0gc2VjdGlvbl9zZWdtZW50X21hcC0+ZmluZChDb25zdF9z ZWN0aW9uX2lkKHJlbG9iaiwgc2huZHgpKTsKKyAgaWYgKGl0ICE9IHNlY3Rp b25fc2VnbWVudF9tYXAtPmVuZCgpKQorICAgIHsKKyAgICAgICpwbGVuID0g c3RybGVuIChpdC0+c2Vjb25kKTsKKyAgICAgIHJldHVybiBpdC0+c2Vjb25k OworICAgIH0KKwogICBjb25zdCBTZWN0aW9uX25hbWVfbWFwcGluZyogcHNu bSA9IHNlY3Rpb25fbmFtZV9tYXBwaW5nOwogICBmb3IgKGludCBpID0gMDsg aSA8IHNlY3Rpb25fbmFtZV9tYXBwaW5nX2NvdW50OyArK2ksICsrcHNubSkK ICAgICB7CkluZGV4OiBnb2xkL2xheW91dC5oCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nb2xkL2xheW91dC5oLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjEwMwpkaWZmIC11IC11IC1wIC1yMS4x MDMgbGF5b3V0LmgKLS0tIGdvbGQvbGF5b3V0LmgJMiBNYXkgMjAxMiAyMToz NzoyMyAtMDAwMAkxLjEwMworKysgZ29sZC9sYXlvdXQuaAkyMCBKdWwgMjAx MiAyMjo1MTo0OSAtMDAwMApAQCAtNTI3LDYgKzUyNywxNCBAQCBjbGFzcyBM YXlvdXQKICAgc3RkOjptYXA8U2VjdGlvbl9pZCwgdW5zaWduZWQgaW50PioK ICAgZ2V0X3NlY3Rpb25fb3JkZXJfbWFwKCkKICAgeyByZXR1cm4gJnRoaXMt PnNlY3Rpb25fb3JkZXJfbWFwXzsgfQorICAKKyAgc3RkOjptYXA8Q29uc3Rf c2VjdGlvbl9pZCwgY29uc3QgY2hhcio+KgorICBnZXRfc2VjdGlvbl9zZWdt ZW50X21hcCgpCisgIHsgcmV0dXJuICZ0aGlzLT5zZWN0aW9uX3NlZ21lbnRf bWFwXzsgfQorCisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCB1aW50NjRfdD4q CisgIGdldF9vdXRwdXRfc2VjdGlvbl9mbGFnc19tYXAoKQorICB7IHJldHVy biAmdGhpcy0+b3V0cHV0X3NlY3Rpb25fZmxhZ3NfbWFwXzsgfQogCiAgIGJv b2wKICAgaXNfc2VjdGlvbl9vcmRlcmluZ19zcGVjaWZpZWQoKQpAQCAtNTM2 LDYgKzU0NCwxNCBAQCBjbGFzcyBMYXlvdXQKICAgc2V0X3NlY3Rpb25fb3Jk ZXJpbmdfc3BlY2lmaWVkKCkKICAgeyB0aGlzLT5zZWN0aW9uX29yZGVyaW5n X3NwZWNpZmllZF8gPSB0cnVlOyB9CiAKKyAgYm9vbAorICBpc191bmlxdWVf c2VnbWVudF9mb3Jfc2VjdGlvbnNfc3BlY2lmaWVkKCkKKyAgeyByZXR1cm4g dGhpcy0+dW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zX3NwZWNpZmllZF87 IH0KKworICB2b2lkCisgIHNldF91bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlv bnNfc3BlY2lmaWVkKCkKKyAgeyB0aGlzLT51bmlxdWVfc2VnbWVudF9mb3Jf c2VjdGlvbnNfc3BlY2lmaWVkXyA9IHRydWU7IH0KKwogICAvLyBGb3IgaW5j cmVtZW50YWwgdXBkYXRlcywgYWxsb2NhdGUgYSBibG9jayBvZiBtZW1vcnkg ZnJvbSB0aGUKICAgLy8gZnJlZSBsaXN0LiAgRmluZCBhIGJsb2NrIHN0YXJ0 aW5nIGF0IG9yIGFmdGVyIE1JTk9GRi4KICAgb2ZmX3QKQEAgLTEwNTMsNyAr MTA2OSw4IEBAIGNsYXNzIExheW91dAogICAvLyBuYW1lLiAgU2V0ICpQTEVO IHRvIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUuICAqUExFTiBtdXN0IGJlCiAg IC8vIGluaXRpYWxpemVkIHRvIHRoZSBsZW5ndGggb2YgTkFNRS4KICAgc3Rh dGljIGNvbnN0IGNoYXIqCi0gIG91dHB1dF9zZWN0aW9uX25hbWUoY29uc3Qg UmVsb2JqKiwgY29uc3QgY2hhciogbmFtZSwgc2l6ZV90KiBwbGVuKTsKKyAg b3V0cHV0X3NlY3Rpb25fbmFtZShjb25zdCBSZWxvYmoqLCB1bnNpZ25lZCBp bnQgc2huZHgsIGNvbnN0IGNoYXIqIG5hbWUsCisJCSAgICAgIHNpemVfdCog cGxlbiwgc3RkOjptYXA8Q29uc3Rfc2VjdGlvbl9pZCwgY29uc3QgY2hhcio+ KiBzc21hcCk7CiAKICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYWxsb2Nh dGVkIG91dHB1dCBzZWN0aW9ucy4KICAgc2l6ZV90CkBAIC0xMDY3LDcgKzEw ODQsOCBAQCBjbGFzcyBMYXlvdXQKIAogICAvLyBDaG9vc2UgdGhlIG91dHB1 dCBzZWN0aW9uIGZvciBOQU1FIGluIFJFTE9CSi4KICAgT3V0cHV0X3NlY3Rp b24qCi0gIGNob29zZV9vdXRwdXRfc2VjdGlvbihjb25zdCBSZWxvYmoqIHJl bG9iaiwgY29uc3QgY2hhciogbmFtZSwKKyAgY2hvb3NlX291dHB1dF9zZWN0 aW9uKGNvbnN0IFJlbG9iaiogcmVsb2JqLCB1bnNpZ25lZCBpbnQgc2huZHgs CisJCQljb25zdCBjaGFyKiBuYW1lLAogCQkJZWxmY3BwOjpFbGZfV29yZCB0 eXBlLCBlbGZjcHA6OkVsZl9Yd29yZCBmbGFncywKIAkJCWJvb2wgaXNfaW5w dXRfc2VjdGlvbiwgT3V0cHV0X3NlY3Rpb25fb3JkZXIgb3JkZXIsCiAJCQli b29sIGlzX3JlbHJvKTsKQEAgLTEzMzEsNiArMTM0OSw5IEBAIGNsYXNzIExh eW91dAogICAvLyBUcnVlIGlmIHRoZSBpbnB1dCBzZWN0aW9ucyBpbiB0aGUg b3V0cHV0IHNlY3Rpb25zIHNob3VsZCBiZSBzb3J0ZWQKICAgLy8gYXMgc3Bl Y2lmaWVkIGluIGEgc2VjdGlvbiBvcmRlcmluZyBmaWxlLgogICBib29sIHNl Y3Rpb25fb3JkZXJpbmdfc3BlY2lmaWVkXzsKKyAgLy8gVHJ1ZSBpZiBzb21l IGlucHV0IHNlY3Rpb25zIG5lZWQgdG8gYmUgbWFwcGVkIHRvIGFuIHVuaXF1 ZSBzZWdtZW50LAorICAvLyBhZnRlciBiZWluZyBtYXBwZWQgdG8gYSB1bmlx dWUgT3V0cHV0X3NlY3Rpb24uCisgIGJvb2wgdW5pcXVlX3NlZ21lbnRfZm9y X3NlY3Rpb25zX3NwZWNpZmllZF87CiAgIC8vIEluIGluY3JlbWVudGFsIGJ1 aWxkLCBob2xkcyBpbmZvcm1hdGlvbiBjaGVjayB0aGUgaW5wdXRzIGFuZCBi dWlsZCB0aGUKICAgLy8gLmdudV9pbmNyZW1lbnRhbF9pbnB1dHMgc2VjdGlv bi4KICAgSW5jcmVtZW50YWxfaW5wdXRzKiBpbmNyZW1lbnRhbF9pbnB1dHNf OwpAQCAtMTM0NSw2ICsxMzY2LDE1IEBAIGNsYXNzIExheW91dAogICAvLyBQ bHVnaW5zIHNwZWNpZnkgc2VjdGlvbl9vcmRlcmluZyB1c2luZyB0aGlzIG1h cC4gIFRoaXMgaXMgc2V0IGluCiAgIC8vIHVwZGF0ZV9zZWN0aW9uX29yZGVy IGluIHBsdWdpbi5jYwogICBzdGQ6Om1hcDxTZWN0aW9uX2lkLCB1bnNpZ25l ZCBpbnQ+IHNlY3Rpb25fb3JkZXJfbWFwXzsKKyAgLy8gVGhpcyBtYXBzIGFu IGlucHV0IHNlY3Rpb24gdG8gYSBwYXJ0aWN1bGFyIG91dHB1dCBzZWN0aW9u IG5hbWUuIFN1Y2gKKyAgLy8gb3V0cHV0IHNlY3Rpb25zIGFyZSB0aGVuIG1h cHBlZCB0byB1bmlxdWUgc2VnbWVudHMuCisgIHN0ZDo6bWFwPENvbnN0X3Nl Y3Rpb25faWQsIGNvbnN0IGNoYXIqPiBzZWN0aW9uX3NlZ21lbnRfbWFwXzsK KyAgLy8gVGhpcyBtYXBzIGFuIG91dHB1dCBzZWN0aW9uIG5hbWUgdG8gYSBm bGFncyB2YWx1ZS4gIFRoZSBiaXRzIHNldCBpbiB0aGUKKyAgLy8gZmxhZ3Mg dmFsdWUgc2hvdWxkIGFsc28gYmUgc2V0IGluIHRoZSBvdXRwdXQgc2VjdGlv biB3aXRoIHRoaXMgbmFtZS4KKyAgLy8gVGhpcyBpcyB1c2VkIHdoZW4gcGx1 Z2lucyBjcmVhdGUgdW5pcXVlIHNlZ21lbnRzIChoZW5jZSBvdXRwdXQgc2Vj dGlvbnMpCisgIC8vIGZvciBhIHN1YnNldCBvZiBzZWN0aW9ucyBhbmQgd2Fu dCB0byBzZXQgZXh0cmEgc2VnbWVudCBiaXRzIHRvIGlkZW50aWZ5CisgIC8v IHN1Y2ggc2VnbWVudHMgbGF0ZXIuCisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5n LCB1aW50NjRfdD4gb3V0cHV0X3NlY3Rpb25fZmxhZ3NfbWFwXzsKICAgLy8g SGFzaCBhIHBhdHRlcm4gdG8gaXRzIHBvc2l0aW9uIGluIHRoZSBzZWN0aW9u IG9yZGVyaW5nIGZpbGUuCiAgIFVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs IHVuc2lnbmVkIGludD4gaW5wdXRfc2VjdGlvbl9wb3NpdGlvbl87CiAgIC8v IFZlY3RvciBvZiBnbG9iIG9ubHkgcGF0dGVybnMgaW4gdGhlIHNlY3Rpb25f b3JkZXJpbmcgZmlsZS4KSW5kZXg6IGdvbGQvb2JqZWN0LmNjCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nb2xkL29i amVjdC5jYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTUKZGlmZiAtdSAt dSAtcCAtcjEuMTU1IG9iamVjdC5jYwotLS0gZ29sZC9vYmplY3QuY2MJMiBN YXkgMjAxMiAyMTozNzoyMyAtMDAwMAkxLjE1NQorKysgZ29sZC9vYmplY3Qu Y2MJMjAgSnVsIDIwMTIgMjI6NTE6NDkgLTAwMDAKQEAgLTExNjQsMTUgKzEx NjQsMTkgQEAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46 OmxheQogLy8gd2hldGhlciB0aGV5IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0 aGUgbGluay4gIElmIHRoZXkgc2hvdWxkLCB3ZQogLy8gcGFzcyB0aGVtIHRv IHRoZSBMYXlvdXQgb2JqZWN0LCB3aGljaCB3aWxsIHJldHVybiBhbiBvdXRw dXQgc2VjdGlvbgogLy8gYW5kIGFuIG9mZnNldC4KLS8vIER1cmluZyBnYXJi YWdlIGNvbGxlY3Rpb24gKC0tZ2Mtc2VjdGlvbnMpIGFuZCBpZGVudGljYWwg Y29kZSBmb2xkaW5nCi0vLyAoLS1pY2YpLCB0aGlzIGZ1bmN0aW9uIGlzIGNh bGxlZCB0d2ljZS4gIFdoZW4gaXQgaXMgY2FsbGVkIHRoZSBmaXJzdAotLy8g dGltZSwgaXQgaXMgZm9yIHNldHRpbmcgdXAgc29tZSBzZWN0aW9ucyBhcyBy b290cyB0byBhIHdvcmstbGlzdCBmb3IKLS8vIC0tZ2Mtc2VjdGlvbnMgYW5k IHRvIGRvIGNvbWRhdCBwcm9jZXNzaW5nLiAgQWN0dWFsIGxheW91dCBoYXBw ZW5zIHRoZQotLy8gc2Vjb25kIHRpbWUgYXJvdW5kIGFmdGVyIGFsbCB0aGUg cmVsZXZhbnQgc2VjdGlvbnMgaGF2ZSBiZWVuIGRldGVybWluZWQuCi0vLyBU aGUgZmlyc3QgdGltZSwgaXNfd29ya2xpc3RfcmVhZHkgb3IgaXNfaWNmX3Jl YWR5IGlzIGZhbHNlLiBJdCBpcyB0aGVuCi0vLyBzZXQgdG8gdHJ1ZSBhZnRl ciB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmtsaXN0IG9yIGlkZW50aWNh bCBjb2RlCi0vLyBmb2xkaW5nIGlzIHByb2Nlc3NlZCBhbmQgdGhlIHJlbGV2 YW50IHNlY3Rpb25zIHRvIGJlIGtlcHQgYXJlCi0vLyBkZXRlcm1pbmVkLiAg VGhlbiwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4gdG8gbGF5b3V0 IHRoZSBzZWN0aW9ucy4KKy8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHR3 aWNlIHNvbWV0aW1lcywgdHdvIHBhc3Nlcywgd2hlbiBtYXBwaW5nCisvLyBv ZiBpbnB1dCBzZWN0aW9ucyB0byBvdXRwdXQgc2VjdGlvbnMgbXVzdCBiZSBk ZWxheWVkLgorLy8gVGhpcyBpcyB0cnVlIGZvciB0aGUgZm9sbG93aW5nIDoK Ky8vICogR2FyYmFnZSBjb2xsZWN0aW9uICgtLWdjLXNlY3Rpb25zKTogU29t ZSBpbnB1dCBzZWN0aW9ucyB3aWxsIGJlCisvLyBkaXNjYXJkZWQgYW5kIGhl bmNlIHRoZSBhc3NpZ25tZW50IG11c3Qgd2FpdCB1bnRpbCB0aGUgc2Vjb25k IHBhc3MuCisvLyBJbiB0aGUgZmlyc3QgcGFzcywgIGl0IGlzIGZvciBzZXR0 aW5nIHVwIHNvbWUgc2VjdGlvbnMgYXMgcm9vdHMgdG8KKy8vIGEgd29yay1s aXN0IGZvciAtLWdjLXNlY3Rpb25zIGFuZCB0byBkbyBjb21kYXQgcHJvY2Vz c2luZy4KKy8vICogSWRlbnRpY2FsIENvZGUgRm9sZGluZyAoLS1pY2Y9PHNh ZmUsYWxsPik6IFNvbWUgaW5wdXQgc2VjdGlvbnMKKy8vIHdpbGwgYmUgZm9s ZGVkIGFuZCBoZW5jZSB0aGUgYXNzaWdubWVudCBtdXN0IHdhaXQuCisvLyAq IFVzaW5nIHBsdWdpbnMgdG8gbWFwIHNvbWUgc2VjdGlvbnMgdG8gdW5pcXVl IHNlZ21lbnRzOiBNYXBwaW5nCisvLyBzb21lIHNlY3Rpb25zIHRvIHVuaXF1 ZSBzZWdtZW50cyByZXF1aXJlcyBtYXBwaW5nIHRoZW0gdG8gdW5pcXVlCisv LyBvdXRwdXQgc2VjdGlvbnMgdG9vLiAgVGhpcyBjYW4gYmUgZG9uZSB2aWEg cGx1Z2lucyBub3cgYW5kIHRoZQorLy8gb3V0cHV0IHNlY3Rpb24gaW5mb3Jt YXRpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgZmlyc3QgcGFzcy4KIAog dGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KIHZvaWQKQEAg LTExODEsMjYgKzExODUsNDIgQEAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwg YmlnX2VuZGlhbj46OmRvXwogCQkJCQkgICAgICAgUmVhZF9zeW1ib2xzX2Rh dGEqIHNkKQogewogICBjb25zdCB1bnNpZ25lZCBpbnQgc2hudW0gPSB0aGlz LT5zaG51bSgpOwotICBib29sIGlzX2djX3Bhc3Nfb25lID0gKChwYXJhbWV0 ZXJzLT5vcHRpb25zKCkuZ2Nfc2VjdGlvbnMoKQotCQkJICAmJiAhc3ltdGFi LT5nYygpLT5pc193b3JrbGlzdF9yZWFkeSgpKQotCQkJIHx8IChwYXJhbWV0 ZXJzLT5vcHRpb25zKCkuaWNmX2VuYWJsZWQoKQotCQkJICAgICAmJiAhc3lt dGFiLT5pY2YoKS0+aXNfaWNmX3JlYWR5KCkpKTsKLQotICBib29sIGlzX2dj X3Bhc3NfdHdvID0gKChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuZ2Nfc2VjdGlv bnMoKQotCQkJICAmJiBzeW10YWItPmdjKCktPmlzX3dvcmtsaXN0X3JlYWR5 KCkpCi0JCQkgfHwgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5pY2ZfZW5hYmxl ZCgpCi0JCQkgICAgICYmIHN5bXRhYi0+aWNmKCktPmlzX2ljZl9yZWFkeSgp KSk7CiAKLSAgYm9vbCBpc19nY19vcl9pY2YgPSAocGFyYW1ldGVycy0+b3B0 aW9ucygpLmdjX3NlY3Rpb25zKCkKLQkJICAgICAgIHx8IHBhcmFtZXRlcnMt Pm9wdGlvbnMoKS5pY2ZfZW5hYmxlZCgpKTsKLQotICAvLyBCb3RoIGlzX2dj X3Bhc3Nfb25lIGFuZCBpc19nY19wYXNzX3R3byBzaG91bGQgbm90IGJlIHRy dWUuCi0gIGdvbGRfYXNzZXJ0KCEoaXNfZ2NfcGFzc19vbmUgICYmIGlzX2dj X3Bhc3NfdHdvKSk7CisgIC8qIFNob3VsZCB0aGlzIGZ1bmN0aW9uIGJlIGNh bGxlZCB0d2ljZT8gICovCisgIGJvb2wgaXNfdHdvX3Bhc3MgPSAocGFyYW1l dGVycy0+b3B0aW9ucygpLmdjX3NlY3Rpb25zKCkKKwkJICAgICAgfHwgcGFy YW1ldGVycy0+b3B0aW9ucygpLmljZl9lbmFibGVkKCkKKwkJICAgICAgfHwg bGF5b3V0LT5pc191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnNfc3BlY2lm aWVkKCkpOworCisgIGJvb2wgaXNfcGFzc19vbmUgPSBmYWxzZTsKKyAgYm9v bCBpc19wYXNzX3R3byA9IGZhbHNlOworCisgIC8qIENoZWNrIGlmIGRvX2xh eW91dCBuZWVkcyB0byBiZSB0d28tcGFzcy4gIElmIHNvLCBmaW5kIG91dCB3 aGljaCBwYXNzCisgICAgIHNob3VsZCBoYXBwZW4uICBJbiB0aGUgZmlyc3Qg cGFzcywgdGhlIGRhdGEgaW4gc2QgaXMgc2F2ZWQgdG8gYmUgdXNlZAorICAg ICBsYXRlciBpbiB0aGUgc2Vjb25kIHBhc3MuICAqLworICBpZiAoaXNfdHdv X3Bhc3MpCisgICAgeworICAgICAgaWYgKCF0aGlzLT5nZXRfc3ltYm9sc19k YXRhKCkpCisJeworCSAgZ29sZF9hc3NlcnQgKHNkICE9IE5VTEwpOworCSAg aXNfcGFzc19vbmUgPSB0cnVlOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBp ZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLmdjX3NlY3Rpb25zKCkpCisJICAg IGdvbGRfYXNzZXJ0KHN5bXRhYi0+Z2MoKS0+aXNfd29ya2xpc3RfcmVhZHko KSk7CisJICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLmljZl9lbmFibGVk KCkpCisJICAgIGdvbGRfYXNzZXJ0KHN5bXRhYi0+aWNmKCktPmlzX2ljZl9y ZWFkeSgpKTsgCisJICBpc19wYXNzX3R3byA9IHRydWU7CisJfQorICAgIH0K KyAgICAKKyAgLy8gQm90aCBpc19wYXNzX29uZSBhbmQgaXNfcGFzc190d28g c2hvdWxkIG5vdCBiZSB0cnVlLgorICBnb2xkX2Fzc2VydCghKGlzX3Bhc3Nf b25lICAmJiBpc19wYXNzX3R3bykpOwogCiAgIGlmIChzaG51bSA9PSAwKQog ICAgIHJldHVybjsKICAgU3ltYm9sc19kYXRhKiBnY19zZCA9IE5VTEw7Ci0g IGlmIChpc19nY19wYXNzX29uZSkKKyAgaWYgKGlzX3Bhc3Nfb25lKQogICAg IHsKICAgICAgIC8vIER1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24gc2F2ZSB0 aGUgc3ltYm9scyBkYXRhIHRvIHVzZSBpdCB3aGVuCiAgICAgICAvLyByZS1l bnRlcmluZyB0aGlzIGZ1bmN0aW9uLgpAQCAtMTIwOCw3ICsxMjI4LDcgQEAg U2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwogICAg ICAgdGhpcy0+Y29weV9zeW1ib2xzX2RhdGEoZ2Nfc2QsIHNkLCBUaGlzOjpz aGRyX3NpemUgKiBzaG51bSk7CiAgICAgICB0aGlzLT5zZXRfc3ltYm9sc19k YXRhKGdjX3NkKTsKICAgICB9Ci0gIGVsc2UgaWYgKGlzX2djX3Bhc3NfdHdv KQorICBlbHNlIGlmIChpc19wYXNzX3R3bykKICAgICB7CiAgICAgICBnY19z ZCA9IHRoaXMtPmdldF9zeW1ib2xzX2RhdGEoKTsKICAgICB9CkBAIC0xMjIw LDcgKzEyNDAsNyBAQCBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5k aWFuPjo6ZG9fCiAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHN5bWJvbF9uYW1l c19kYXRhID0gTlVMTDsKICAgc2VjdGlvbl9zaXplX3R5cGUgc3ltYm9sX25h bWVzX3NpemU7CiAKLSAgaWYgKGlzX2djX29yX2ljZikKKyAgaWYgKGlzX3R3 b19wYXNzKQogICAgIHsKICAgICAgIHNlY3Rpb25faGVhZGVyc19kYXRhID0g Z2Nfc2QtPnNlY3Rpb25faGVhZGVyc19kYXRhOwogICAgICAgc2VjdGlvbl9u YW1lc19zaXplID0gZ2Nfc2QtPnNlY3Rpb25fbmFtZXNfc2l6ZTsKQEAgLTEy NDYsNyArMTI2Niw3IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19l bmRpYW4+Ojpkb18KICAgY29uc3QgdW5zaWduZWQgY2hhciogcHNoZHJzOwog CiAgIC8vIEdldCB0aGUgc2VjdGlvbiBuYW1lcy4KLSAgY29uc3QgdW5zaWdu ZWQgY2hhciogcG5hbWVzdSA9IChpc19nY19vcl9pY2YpCisgIGNvbnN0IHVu c2lnbmVkIGNoYXIqIHBuYW1lc3UgPSAoaXNfdHdvX3Bhc3MpCiAJCQkJID8g Z2Nfc2QtPnNlY3Rpb25fbmFtZXNfZGF0YQogCQkJCSA6IHNkLT5zZWN0aW9u X25hbWVzLT5kYXRhKCk7CiAKQEAgLTEyOTgsNyArMTMxOCw3IEBAIFNpemVk X3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KICAgT3V0cHV0 X3NlY3Rpb25zJiBvdXRfc2VjdGlvbnModGhpcy0+b3V0cHV0X3NlY3Rpb25z KCkpOwogICBzdGQ6OnZlY3RvcjxBZGRyZXNzPiYgb3V0X3NlY3Rpb25fb2Zm c2V0cyh0aGlzLT5zZWN0aW9uX29mZnNldHMoKSk7CiAKLSAgaWYgKCFpc19n Y19wYXNzX3R3bykKKyAgaWYgKCFpc19wYXNzX3R3bykKICAgICB7CiAgICAg ICBvdXRfc2VjdGlvbnMucmVzaXplKHNobnVtKTsKICAgICAgIG91dF9zZWN0 aW9uX29mZnNldHMucmVzaXplKHNobnVtKTsKQEAgLTEzMDgsNyArMTMyOCw3 IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18K ICAgLy8gZG8gaGVyZS4KICAgaWYgKHRoaXMtPmlucHV0X2ZpbGUoKS0+anVz dF9zeW1ib2xzKCkpCiAgICAgewotICAgICAgaWYgKCFpc19nY19wYXNzX3R3 bykKKyAgICAgIGlmICghaXNfcGFzc190d28pCiAJewogCSAgZGVsZXRlIHNk LT5zZWN0aW9uX2hlYWRlcnM7CiAJICBzZC0+c2VjdGlvbl9oZWFkZXJzID0g TlVMTDsKQEAgLTEzNjAsNyArMTM4MCw3IEBAIFNpemVkX3JlbG9ial9maWxl PHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KIAogICAgICAgY29uc3QgY2hhciog bmFtZSA9IHBuYW1lcyArIHNoZHIuZ2V0X3NoX25hbWUoKTsKIAotICAgICAg aWYgKCFpc19nY19wYXNzX3R3bykKKyAgICAgIGlmICghaXNfcGFzc190d28p CiAJewogCSAgaWYgKHRoaXMtPmhhbmRsZV9nbnVfd2FybmluZ19zZWN0aW9u KG5hbWUsIGksIHN5bXRhYikpCiAJICAgIHsKQEAgLTE0MzQsNyArMTQ1NCw3 IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18K IAkgICAgfQogCX0KIAotICAgICAgaWYgKGlzX2djX3Bhc3Nfb25lICYmIHBh cmFtZXRlcnMtPm9wdGlvbnMoKS5nY19zZWN0aW9ucygpKQorICAgICAgaWYg KGlzX3Bhc3Nfb25lICYmIHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5nY19zZWN0 aW9ucygpKQogCXsKIAkgIGlmICh0aGlzLT5pc19zZWN0aW9uX25hbWVfaW5j bHVkZWQobmFtZSkKIAkgICAgICB8fCBzaGRyLmdldF9zaF90eXBlKCkgPT0g ZWxmY3BwOjpTSFRfSU5JVF9BUlJBWQpAQCAtMTQ3OSw3ICsxNDk5LDcgQEAg U2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwogCSAg JiYgc3RyY21wKG5hbWUsICIuZWhfZnJhbWUiKSA9PSAwCiAJICAmJiB0aGlz LT5jaGVja19laF9mcmFtZV9mbGFncygmc2hkcikpCiAJewotCSAgaWYgKGlz X2djX3Bhc3Nfb25lKQorCSAgaWYgKGlzX3Bhc3Nfb25lKQogCSAgICB7CiAJ ICAgICAgb3V0X3NlY3Rpb25zW2ldID0gcmVpbnRlcnByZXRfY2FzdDxPdXRw dXRfc2VjdGlvbio+KDEpOwogCSAgICAgIG91dF9zZWN0aW9uX29mZnNldHNb aV0gPSBpbnZhbGlkX2FkZHJlc3M7CkBAIC0xNDk0LDcgKzE1MTQsNyBAQCBT aXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAJICBj b250aW51ZTsKIAl9CiAKLSAgICAgIGlmIChpc19nY19wYXNzX3R3byAmJiBw YXJhbWV0ZXJzLT5vcHRpb25zKCkuZ2Nfc2VjdGlvbnMoKSkKKyAgICAgIGlm IChpc19wYXNzX3R3byAmJiBwYXJhbWV0ZXJzLT5vcHRpb25zKCkuZ2Nfc2Vj dGlvbnMoKSkKIAl7CiAJICAvLyBUaGlzIGlzIGV4ZWN1dGVkIGR1cmluZyB0 aGUgc2Vjb25kIHBhc3Mgb2YgZ2FyYmFnZQogCSAgLy8gY29sbGVjdGlvbi4g ZG9fbGF5b3V0IGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUgYW5kIHNvbWUKQEAg LTE1MTksNyArMTUzOSw3IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJp Z19lbmRpYW4+Ojpkb18KIAkgICAgICB9CiAJfQogCi0gICAgICBpZiAoaXNf Z2NfcGFzc190d28gJiYgcGFyYW1ldGVycy0+b3B0aW9ucygpLmljZl9lbmFi bGVkKCkpCisgICAgICBpZiAoaXNfcGFzc190d28gJiYgcGFyYW1ldGVycy0+ b3B0aW9ucygpLmljZl9lbmFibGVkKCkpCiAJewogCSAgaWYgKG91dF9zZWN0 aW9uc1tpXSA9PSBOVUxMKQogCSAgICB7CkBAIC0xNTUzLDcgKzE1NzMsNyBA QCBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAg ICAgICAvLyBzaG91bGRfZGVmZXJfbGF5b3V0IHNob3VsZCBiZSBmYWxzZS4K ICAgICAgIGlmIChzaG91bGRfZGVmZXJfbGF5b3V0ICYmIChzaGRyLmdldF9z aF9mbGFncygpICYgZWxmY3BwOjpTSEZfQUxMT0MpKQogCXsKLQkgIGdvbGRf YXNzZXJ0KCFpc19nY19wYXNzX3R3byk7CisJICBnb2xkX2Fzc2VydCghaXNf cGFzc190d28pOwogCSAgdGhpcy0+ZGVmZXJyZWRfbGF5b3V0Xy5wdXNoX2Jh Y2soRGVmZXJyZWRfbGF5b3V0KGksIG5hbWUsCiAJCQkJCQkJICAgcHNoZHJz LAogCQkJCQkJCSAgIHJlbG9jX3NobmR4W2ldLApAQCAtMTU2OCwxMSArMTU4 OCwxMSBAQCBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6 ZG9fCiAgICAgICAvLyBEdXJpbmcgZ2NfcGFzc190d28gaWYgYSBzZWN0aW9u IHRoYXQgd2FzIHByZXZpb3VzbHkgZGVmZXJyZWQgaXMKICAgICAgIC8vIGZv dW5kLCBkbyBub3QgbGF5b3V0IHRoZSBzZWN0aW9uIGFzIGxheW91dF9kZWZl cnJlZF9zZWN0aW9ucyB3aWxsCiAgICAgICAvLyBkbyBpdCBsYXRlciBmcm9t IGdvbGQuY2MuCi0gICAgICBpZiAoaXNfZ2NfcGFzc190d28KKyAgICAgIGlm IChpc19wYXNzX3R3bwogCSAgJiYgKG91dF9zZWN0aW9uc1tpXSA9PSByZWlu dGVycHJldF9jYXN0PE91dHB1dF9zZWN0aW9uKj4oMikpKQogCWNvbnRpbnVl OwogCi0gICAgICBpZiAoaXNfZ2NfcGFzc19vbmUpCisgICAgICBpZiAoaXNf cGFzc19vbmUpCiAJewogCSAgLy8gVGhpcyBpcyBkdXJpbmcgZ2FyYmFnZSBj b2xsZWN0aW9uLiBUaGUgb3V0X3NlY3Rpb25zIGFyZQogCSAgLy8gYXNzaWdu ZWQgaW4gdGhlIHNlY29uZCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCkBAIC0x NjAzLDcgKzE2MjMsNyBAQCBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdf ZW5kaWFuPjo6ZG9fCiAJfQogICAgIH0KIAotICBpZiAoIWlzX2djX3Bhc3Nf dHdvKQorICBpZiAoIWlzX3Bhc3NfdHdvKQogICAgIGxheW91dC0+bGF5b3V0 X2dudV9zdGFjayhzZWVuX2dudV9zdGFjaywgZ251X3N0YWNrX2ZsYWdzLCB0 aGlzKTsKIAogICAvLyBXaGVuIGRvaW5nIGEgcmVsb2NhdGFibGUgbGluayBo YW5kbGUgdGhlIHJlbG9jIHNlY3Rpb25zIGF0IHRoZQpAQCAtMTYxMiw3ICsx NjMyLDcgQEAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46 OmRvXwogICBpZiAoZW1pdF9yZWxvY3MpCiAgICAgdGhpcy0+c2l6ZV9yZWxv Y2F0YWJsZV9yZWxvY3MoKTsKIAotICBnb2xkX2Fzc2VydCghKGlzX2djX29y X2ljZikgfHwgcmVsb2Nfc2VjdGlvbnMuZW1wdHkoKSk7CisgIGdvbGRfYXNz ZXJ0KCEoaXNfdHdvX3Bhc3MpIHx8IHJlbG9jX3NlY3Rpb25zLmVtcHR5KCkp OwogCiAgIGZvciAoc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50Pjo6Y29uc3Rf aXRlcmF0b3IgcCA9IHJlbG9jX3NlY3Rpb25zLmJlZ2luKCk7CiAgICAgICAg cCAhPSByZWxvY19zZWN0aW9ucy5lbmQoKTsKQEAgLTE2NTksNyArMTY3OSw3 IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18K ICAgICB9CiAKICAgLy8gSGFuZGxlIHRoZSAuZWhfZnJhbWUgc2VjdGlvbnMg YXQgdGhlIGVuZC4KLSAgZ29sZF9hc3NlcnQoIWlzX2djX3Bhc3Nfb25lIHx8 IGVoX2ZyYW1lX3NlY3Rpb25zLmVtcHR5KCkpOworICBnb2xkX2Fzc2VydCgh aXNfcGFzc19vbmUgfHwgZWhfZnJhbWVfc2VjdGlvbnMuZW1wdHkoKSk7CiAg IGZvciAoc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50Pjo6Y29uc3RfaXRlcmF0 b3IgcCA9IGVoX2ZyYW1lX3NlY3Rpb25zLmJlZ2luKCk7CiAgICAgICAgcCAh PSBlaF9mcmFtZV9zZWN0aW9ucy5lbmQoKTsKICAgICAgICArK3ApCkBAIC0x NjgyLDcgKzE3MDIsNyBAQCBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdf ZW5kaWFuPjo6ZG9fCiAKICAgLy8gV2hlbiBidWlsZGluZyBhIC5nZGJfaW5k ZXggc2VjdGlvbiwgc2NhbiB0aGUgLmRlYnVnX2luZm8gYW5kCiAgIC8vIC5k ZWJ1Z190eXBlcyBzZWN0aW9ucy4KLSAgZ29sZF9hc3NlcnQoIWlzX2djX3Bh c3Nfb25lCisgIGdvbGRfYXNzZXJ0KCFpc19wYXNzX29uZQogCSAgICAgIHx8 IChkZWJ1Z19pbmZvX3NlY3Rpb25zLmVtcHR5KCkgJiYgZGVidWdfdHlwZXNf c2VjdGlvbnMuZW1wdHkoKSkpOwogICBmb3IgKHN0ZDo6dmVjdG9yPHVuc2ln bmVkIGludD46OmNvbnN0X2l0ZXJhdG9yIHAKIAkgICA9IGRlYnVnX2luZm9f c2VjdGlvbnMuYmVnaW4oKTsKQEAgLTE3MDMsNyArMTcyMyw3IEBAIFNpemVk X3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KIAkJCSAgICAg ICBpLCByZWxvY19zaG5keFtpXSwgcmVsb2NfdHlwZVtpXSk7CiAgICAgfQog Ci0gIGlmIChpc19nY19wYXNzX3R3bykKKyAgaWYgKGlzX3Bhc3NfdHdvKQog ICAgIHsKICAgICAgIGRlbGV0ZVtdIGdjX3NkLT5zZWN0aW9uX2hlYWRlcnNf ZGF0YTsKICAgICAgIGRlbGV0ZVtdIGdjX3NkLT5zZWN0aW9uX25hbWVzX2Rh dGE7CkluZGV4OiBnb2xkL291dHB1dC5jYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ29sZC9vdXRwdXQuY2Msdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTY3CmRpZmYgLXUgLXUgLXAgLXIxLjE2 NyBvdXRwdXQuY2MKLS0tIGdvbGQvb3V0cHV0LmNjCTYgSnVuIDIwMTIgMjI6 MTI6NDcgLTAwMDAJMS4xNjcKKysrIGdvbGQvb3V0cHV0LmNjCTIwIEp1bCAy MDEyIDIyOjUxOjQ5IC0wMDAwCkBAIC0yMjQ1LDYgKzIyNDUsNyBAQCBPdXRw dXRfc2VjdGlvbjo6T3V0cHV0X3NlY3Rpb24oY29uc3QgY2hhCiAgICAgYWx3 YXlzX2tlZXBzX2lucHV0X3NlY3Rpb25zXyhmYWxzZSksCiAgICAgaGFzX2Zp eGVkX2xheW91dF8oZmFsc2UpLAogICAgIGlzX3BhdGNoX3NwYWNlX2FsbG93 ZWRfKGZhbHNlKSwKKyAgICBpc191bmlxdWVfc2VnbWVudF8oZmFsc2UpLAog ICAgIHRsc19vZmZzZXRfKDApLAogICAgIGNoZWNrcG9pbnRfKE5VTEwpLAog ICAgIGxvb2t1cF9tYXBzXyhuZXcgT3V0cHV0X3NlY3Rpb25fbG9va3VwX21h cHMpLApJbmRleDogZ29sZC9vdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ29sZC9vdXRwdXQuaCx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4xMzUKZGlmZiAtdSAtdSAtcCAtcjEuMTM1 IG91dHB1dC5oCi0tLSBnb2xkL291dHB1dC5oCTEwIEp1bCAyMDEyIDE0OjU0 OjI5IC0wMDAwCTEuMTM1CisrKyBnb2xkL291dHB1dC5oCTIwIEp1bCAyMDEy IDIyOjUxOjQ5IC0wMDAwCkBAIC0zMjQ5LDYgKzMyNDksMTQgQEAgY2xhc3Mg T3V0cHV0X3NlY3Rpb24gOiBwdWJsaWMgT3V0cHV0X2RhdAogICByZXF1aXJl c19wb3N0cHJvY2Vzc2luZygpIGNvbnN0CiAgIHsgcmV0dXJuIHRoaXMtPnJl cXVpcmVzX3Bvc3Rwcm9jZXNzaW5nXzsgfQogCisgIGJvb2wKKyAgaXNfdW5p cXVlX3NlZ21lbnQoKSBjb25zdAorICB7IHJldHVybiB0aGlzLT5pc191bmlx dWVfc2VnbWVudF87IH0KKworICB2b2lkCisgIHNldF9pc191bmlxdWVfc2Vn bWVudCgpCisgIHsgdGhpcy0+aXNfdW5pcXVlX3NlZ21lbnRfID0gdHJ1ZTsg fQorCiAgIC8vIElmIGEgc2VjdGlvbiByZXF1aXJlcyBwb3N0cHJvY2Vzc2lu ZywgcmV0dXJuIHRoZSBidWZmZXIgdG8gdXNlLgogICB1bnNpZ25lZCBjaGFy KgogICBwb3N0cHJvY2Vzc2luZ19idWZmZXIoKSBjb25zdApAQCAtNDIwMCw2 ICs0MjA4LDggQEAgY2xhc3MgT3V0cHV0X3NlY3Rpb24gOiBwdWJsaWMgT3V0 cHV0X2RhdAogICBib29sIGhhc19maXhlZF9sYXlvdXRfIDogMTsKICAgLy8g VHJ1ZSBpZiB3ZSBjYW4gYWRkIHBhdGNoIHNwYWNlIHRvIHRoaXMgc2VjdGlv bi4KICAgYm9vbCBpc19wYXRjaF9zcGFjZV9hbGxvd2VkXyA6IDE7CisgIC8v IFRydWUgaWYgdGhpcyBvdXRwdXQgc2VjdGlvbiBnb2VzIGludG8gYW4gdW5p cXVlIHNlZ21lbnQuCisgIGJvb2wgaXNfdW5pcXVlX3NlZ21lbnRfIDogMTsK ICAgLy8gRm9yIFNIVF9UTFMgc2VjdGlvbnMsIHRoZSBvZmZzZXQgb2YgdGhp cyBzZWN0aW9uIHJlbGF0aXZlIHRvIHRoZSBiYXNlCiAgIC8vIG9mIHRoZSBU TFMgc2VnbWVudC4KICAgdWludDY0X3QgdGxzX29mZnNldF87CkluZGV4OiBn b2xkL3BsdWdpbi5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ29sZC9wbHVnaW4uY2MsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuNTQKZGlmZiAtdSAtdSAtcCAtcjEuNTQgcGx1Z2luLmNjCi0t LSBnb2xkL3BsdWdpbi5jYwkxMiBKdW4gMjAxMiAyMjo1Mjo0MSAtMDAwMAkx LjU0CisrKyBnb2xkL3BsdWdpbi5jYwkyMCBKdWwgMjAxMiAyMjo1MTo0OSAt MDAwMApAQCAtMTE1LDYgKzExNSwxMyBAQCB1cGRhdGVfc2VjdGlvbl9vcmRl cihjb25zdCBzdHJ1Y3QgbGRfcGx1CiBzdGF0aWMgZW51bSBsZF9wbHVnaW5f c3RhdHVzCiBhbGxvd19zZWN0aW9uX29yZGVyaW5nKCk7CiAKK3N0YXRpYyBl bnVtIGxkX3BsdWdpbl9zdGF0dXMKK2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zv cl9zZWN0aW9ucygpOworCitzdGF0aWMgZW51bSBsZF9wbHVnaW5fc3RhdHVz Cit1bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMoY29uc3QgY2hhciogc2Vn bWVudF9uYW1lLCB1aW50NjRfdCBmbGFncywKKwkJCSAgICBjb25zdCBzdHJ1 Y3QgbGRfcGx1Z2luX3NlY3Rpb24gKnNlY3Rpb25fbGlzdCwKKwkJCSAgICB1 bnNpZ25lZCBpbnQgbnVtX3NlY3Rpb25zKTsKIH07CiAKICNlbmRpZiAvLyBF TkFCTEVfUExVR0lOUwpAQCAtMTU5LDcgKzE2Niw3IEBAIFBsdWdpbjo6bG9h ZCgpCiAgIHNzY2FuZih2ZXIsICIlZC4lZCIsICZtYWpvciwgJm1pbm9yKTsK IAogICAvLyBBbGxvY2F0ZSBhbmQgcG9wdWxhdGUgYSB0cmFuc2ZlciB2ZWN0 b3IuCi0gIGNvbnN0IGludCB0dl9maXhlZF9zaXplID0gMjQ7CisgIGNvbnN0 IGludCB0dl9maXhlZF9zaXplID0gMjY7CiAKICAgaW50IHR2X3NpemUgPSB0 aGlzLT5hcmdzXy5zaXplKCkgKyB0dl9maXhlZF9zaXplOwogICBsZF9wbHVn aW5fdHYqIHR2ID0gbmV3IGxkX3BsdWdpbl90dlt0dl9zaXplXTsKQEAgLTI3 Myw2ICsyODAsMTUgQEAgUGx1Z2luOjpsb2FkKCkKICAgdHZbaV0udHZfdS50 dl9hbGxvd19zZWN0aW9uX29yZGVyaW5nID0gYWxsb3dfc2VjdGlvbl9vcmRl cmluZzsKIAogICArK2k7CisgIHR2W2ldLnR2X3RhZyA9IExEUFRfQUxMT1df VU5JUVVFX1NFR01FTlRfRk9SX1NFQ1RJT05TOworICB0dltpXS50dl91LnR2 X2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucworICAgID0gYWxs b3dfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zOworCisgICsraTsKKyAg dHZbaV0udHZfdGFnID0gTERQVF9VTklRVUVfU0VHTUVOVF9GT1JfU0VDVElP TlM7CisgIHR2W2ldLnR2X3UudHZfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rp b25zID0gdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zOworCisgICsraTsK ICAgdHZbaV0udHZfdGFnID0gTERQVF9OVUxMOwogICB0dltpXS50dl91LnR2 X3ZhbCA9IDA7CiAKQEAgLTE2ODUsNiArMTcwMSw2NCBAQCBhbGxvd19zZWN0 aW9uX29yZGVyaW5nKCkKICAgcmV0dXJuIExEUFNfT0s7CiB9CiAKKy8vIExl dCB0aGUgbGlua2VyIGtub3cgdGhhdCBhIHN1YnNldCBvZiBzZWN0aW9ucyBj b3VsZCBiZSBtYXBwZWQKKy8vIHRvIGEgdW5pcXVlIHNlZ21lbnQuCisKK3N0 YXRpYyBlbnVtIGxkX3BsdWdpbl9zdGF0dXMKK2FsbG93X3VuaXF1ZV9zZWdt ZW50X2Zvcl9zZWN0aW9ucygpCit7CisgIGdvbGRfYXNzZXJ0KHBhcmFtZXRl cnMtPm9wdGlvbnMoKS5oYXNfcGx1Z2lucygpKTsKKyAgTGF5b3V0KiBsYXlv dXQgPSBwYXJhbWV0ZXJzLT5vcHRpb25zKCkucGx1Z2lucygpLT5sYXlvdXQo KTsKKyAgbGF5b3V0LT5zZXRfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25z X3NwZWNpZmllZCgpOworICByZXR1cm4gTERQU19PSzsKK30KKworLy8gVGhp cyBmdW5jdGlvbiBzaG91bGQgbWFwIHRoZSBsaXN0IG9mIHNlY3Rpb25zIHNw ZWNpZmllZCBpbiB0aGUKKy8vIFNFQ1RJT05fTElTVCB0byBhbiB1bmlxdWUg c2VnbWVudC4gIEVMRiBzZWdtZW50cyBkbyBub3QgaGF2ZSBuYW1lcworLy8g YW5kIHRoZSBOQU1FIGlzIHVzZWQgdG8gaWRlbnRpZnkgT3V0cHV0IFNlY3Rp b24gd2hpY2ggc2hvdWxkIGNvbnRhaW4KKy8vIHRoZSBsaXN0IG9mIHNlY3Rp b25zLiAgVGhpcyBPdXRwdXQgU2VjdGlvbiB3aWxsIHRoZW4gYmUgbWFwcGVk IHRvCisvLyBhbiB1bmlxdWUgc2VnbWVudC4gIEZMQUdTIGlzIHVzZWQgdG8g c3BlY2lmeSBpZiBhbnkgYWRkaXRpb25hbCBzZWdtZW50CisvLyBmbGFncyBu ZWVkIHRvIGJlIHNldC4gIEZvciBpbnN0YW5jZSwgYSBzcGVjaWZpYyBzZWdt ZW50IGZsYWcgY2FuIGJlCisvLyBzZXQgdG8gaWRlbnRpZnkgdGhpcyBzZWdt ZW50LiAgVW5zZXR0aW5nIHNlZ21lbnQgZmxhZ3MgaXMgbm90IHBvc3NpYmxl Lgorc3RhdGljIGVudW0gbGRfcGx1Z2luX3N0YXR1cwordW5pcXVlX3NlZ21l bnRfZm9yX3NlY3Rpb25zKGNvbnN0IGNoYXIqIHNlZ21lbnRfbmFtZSwKKwkJ CSAgICB1aW50NjRfdCBmbGFncywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbGRf cGx1Z2luX3NlY3Rpb24qIHNlY3Rpb25fbGlzdCwKKwkJCSAgICB1bnNpZ25l ZCBpbnQgbnVtX3NlY3Rpb25zKQoreworICBnb2xkX2Fzc2VydChwYXJhbWV0 ZXJzLT5vcHRpb25zKCkuaGFzX3BsdWdpbnMoKSk7CisKKyAgaWYgKG51bV9z ZWN0aW9ucyA9PSAwKQorICAgIHJldHVybiBMRFBTX09LOworCisgIGlmIChz ZWN0aW9uX2xpc3QgPT0gTlVMTCkKKyAgICByZXR1cm4gTERQU19FUlI7CisK KyAgTGF5b3V0KiBsYXlvdXQgPSBwYXJhbWV0ZXJzLT5vcHRpb25zKCkucGx1 Z2lucygpLT5sYXlvdXQoKTsKKyAgZ29sZF9hc3NlcnQgKGxheW91dCAhPSBO VUxMKTsKKworICBzdGQ6Om1hcDxDb25zdF9zZWN0aW9uX2lkLCBjb25zdCBj aGFyKj4qIHNlY3Rpb25fc2VnbWVudF9tYXAKKyAgICA9IGxheW91dC0+Z2V0 X3NlY3Rpb25fc2VnbWVudF9tYXAoKTsKKworICBmb3IgKHVuc2lnbmVkIGlu dCBpID0gMDsgaSA8IG51bV9zZWN0aW9uczsgKytpKQorICAgIHsKKyAgICAg IE9iamVjdCogb2JqID0gcGFyYW1ldGVycy0+b3B0aW9ucygpLnBsdWdpbnMo KS0+Z2V0X2VsZl9vYmplY3QoCisgICAgICAgICAgc2VjdGlvbl9saXN0W2ld LmhhbmRsZSk7CisgICAgICBpZiAob2JqID09IE5VTEwpCisJcmV0dXJuIExE UFNfQkFEX0hBTkRMRTsKKyAgICAgIHVuc2lnbmVkIGludCBzaG5keCA9IHNl Y3Rpb25fbGlzdFtpXS5zaG5keDsKKyAgICAgIENvbnN0X3NlY3Rpb25faWQg c2Vjbl9pZChvYmosIHNobmR4KTsKKyAgICAgICgqc2VjdGlvbl9zZWdtZW50 X21hcClbc2Vjbl9pZF0gPSBzZWdtZW50X25hbWU7CisgICAgfQorICAKKyAg c3RkOjptYXA8c3RkOjpzdHJpbmcsIHVpbnQ2NF90Piogb3V0cHV0X3NlY3Rp b25fZmxhZ3NfbWFwCisgICAgPSBsYXlvdXQtPmdldF9vdXRwdXRfc2VjdGlv bl9mbGFnc19tYXAoKTsKKworICAoKm91dHB1dF9zZWN0aW9uX2ZsYWdzX21h cClbc3RkOjpzdHJpbmcoc2VnbWVudF9uYW1lKV0gPSBmbGFnczsKKworICBy ZXR1cm4gTERQU19PSzsKK30KKwogI2VuZGlmIC8vIEVOQUJMRV9QTFVHSU5T CiAKIC8vIEFsbG9jYXRlIGEgUGx1Z2lub2JqIG9iamVjdCBvZiB0aGUgYXBw cm9wcmlhdGUgc2l6ZSBhbmQgZW5kaWFubmVzcy4KSW5kZXg6IGdvbGQvdGVz dHN1aXRlL01ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9jdnMvc3JjL3NyYy9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5h bSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTQKZGlmZiAtdSAtdSAtcCAt cjEuMTk0IE1ha2VmaWxlLmFtCi0tLSBnb2xkL3Rlc3RzdWl0ZS9NYWtlZmls ZS5hbQkxOSBKdWwgMjAxMiAwMDoxOTozNCAtMDAwMAkxLjE5NAorKysgZ29s ZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0JMjAgSnVsIDIwMTIgMjI6NTE6NTAg LTAwMDAKQEAgLTE1MTksMTMgKzE1MTksMTUgQEAgdW51c2VkLmM6CiAJQGNw IC9kZXYvbnVsbCAkQAogCiBjaGVja19TQ1JJUFRTICs9IHBsdWdpbl9maW5h bF9sYXlvdXQuc2gKLWNoZWNrX0RBVEEgKz0gcGx1Z2luX2ZpbmFsX2xheW91 dC5zdGRvdXQKK2NoZWNrX0RBVEEgKz0gcGx1Z2luX2ZpbmFsX2xheW91dC5z dGRvdXQgcGx1Z2luX2ZpbmFsX2xheW91dC5yZWFkZWxmLnN0ZG91dAogcGx1 Z2luX2ZpbmFsX2xheW91dC5vOiBwbHVnaW5fZmluYWxfbGF5b3V0LmNjCiAJ JChDWFhDT01QSUxFKSAtTzAgLWMgLWZmdW5jdGlvbi1zZWN0aW9ucyAgLWZk YXRhLXNlY3Rpb25zIC1nIC1vICRAICQ8CiBwbHVnaW5fZmluYWxfbGF5b3V0 OiBwbHVnaW5fZmluYWxfbGF5b3V0Lm8gcGx1Z2luX3NlY3Rpb25fb3JkZXIu c28gZ2NjdGVzdGRpci9sZAogCSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAt V2wsLS1wbHVnaW4sIi4vcGx1Z2luX3NlY3Rpb25fb3JkZXIuc28iIHBsdWdp bl9maW5hbF9sYXlvdXQubwogcGx1Z2luX2ZpbmFsX2xheW91dC5zdGRvdXQ6 IHBsdWdpbl9maW5hbF9sYXlvdXQKIAkkKFRFU1RfTk0pIC1uIHBsdWdpbl9m aW5hbF9sYXlvdXQgPiBwbHVnaW5fZmluYWxfbGF5b3V0LnN0ZG91dAorcGx1 Z2luX2ZpbmFsX2xheW91dC5yZWFkZWxmLnN0ZG91dDogcGx1Z2luX2ZpbmFs X2xheW91dAorCSQoVEVTVF9SRUFERUxGKSAtbCBwbHVnaW5fZmluYWxfbGF5 b3V0ID4gcGx1Z2luX2ZpbmFsX2xheW91dC5yZWFkZWxmLnN0ZG91dAogCiBw bHVnaW5fc2VjdGlvbl9vcmRlci5zbzogcGx1Z2luX3NlY3Rpb25fb3JkZXIu bwogCSQoTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIHBsdWdpbl9zZWN0 aW9uX29yZGVyLm8KSW5kZXg6IGdvbGQvdGVzdHN1aXRlL3BsdWdpbl9maW5h bF9sYXlvdXQuc2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dvbGQvdGVzdHN1aXRlL3BsdWdpbl9maW5hbF9sYXlv dXQuc2gsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC11IC1w IC1yMS4xIHBsdWdpbl9maW5hbF9sYXlvdXQuc2gKLS0tIGdvbGQvdGVzdHN1 aXRlL3BsdWdpbl9maW5hbF9sYXlvdXQuc2gJMjkgU2VwIDIwMTEgMjM6NDU6 NTcgLTAwMDAJMS4xCisrKyBnb2xkL3Rlc3RzdWl0ZS9wbHVnaW5fZmluYWxf bGF5b3V0LnNoCTIwIEp1bCAyMDEyIDIyOjUxOjUwIC0wMDAwCkBAIC01Niw1 ICs1NiwzNSBAQCBFTkQgewogICAgIH0iICQxCiB9CiAKKyMgV2l0aCByZWFk ZWxmIC1sLCBhbiBFTEYgU2VjdGlvbiB0byBTZWdtZW50IG1hcHBpbmcgaXMg cHJpbnRlZCBhcyA6CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjICBTZWN0aW9uIHRvIFNlZ21lbnQgbWFwcGlu ZzoKKyMgIFNlZ21lbnQgU2VjdGlvbnMuLi4KKyMgIC4uLgorIyAgICAgMHgg ICAgIC50ZXh0LnBsdWdpbl9jcmVhdGVkX3VuaXF1ZQorIyAgLi4uCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IENoZWNrIG9mIC50ZXh0LnBsdWdpbl9jcmVhdGVkX3VuaXF1ZSBpcyB0aGUg b25seSBzZWN0aW9uIGluIHRoZSBzZWdtZW50LgorY2hlY2tfdW5pcXVlX3Nl Z21lbnQoKQoreworICAgIGF3ayAiCitCRUdJTiB7IHNhd19zZWN0aW9uID0g MDsgc2F3X3VuaXF1ZSA9IDA7IH0KKy8kMi8geyBzYXdfc2VjdGlvbiA9IDE7 IH0KKy9bIF0qMFswLTldWyBdKiQyWyBdKlwkLyB7IHNhd191bmlxdWUgPSAx OyB9CitFTkQgeworICAgICAgaWYgKCFzYXdfc2VjdGlvbikKKwl7CisJICBw cmludGYgXCJTZWN0aW9uICQyIG5vdCBzZWVuIGluIG91dHB1dFxcblwiOwor CSAgZXhpdCAxOworCX0KKyAgICAgIGVsc2UgaWYgKCFzYXdfdW5pcXVlKQor CXsKKwkgIHByaW50ZiBcIlVuaXF1ZSBzZWdtZW50IG5vdCBzZWVuIGZvcjog JDJcXG5cIjsKKwkgIGV4aXQgMTsKKwl9CisgICAgfSIgJDEKK30KKwogY2hl Y2sgcGx1Z2luX2ZpbmFsX2xheW91dC5zdGRvdXQgIl9aM2Zvb3YiICJfWjNi YXJ2IgogY2hlY2sgcGx1Z2luX2ZpbmFsX2xheW91dC5zdGRvdXQgIl9aM2Jh cnYiICJfWjNiYXp2IgorY2hlY2tfdW5pcXVlX3NlZ21lbnQgcGx1Z2luX2Zp bmFsX2xheW91dC5yZWFkZWxmLnN0ZG91dCAiLnRleHQucGx1Z2luX2NyZWF0 ZWRfdW5pcXVlIgpJbmRleDogZ29sZC90ZXN0c3VpdGUvcGx1Z2luX3NlY3Rp b25fb3JkZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ29sZC90ZXN0c3VpdGUvcGx1Z2luX3NlY3Rpb25fb3Jk ZXIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXUgLXAg LXIxLjEgcGx1Z2luX3NlY3Rpb25fb3JkZXIuYwotLS0gZ29sZC90ZXN0c3Vp dGUvcGx1Z2luX3NlY3Rpb25fb3JkZXIuYwkyOSBTZXAgMjAxMSAyMzo0NTo1 NyAtMDAwMAkxLjEKKysrIGdvbGQvdGVzdHN1aXRlL3BsdWdpbl9zZWN0aW9u X29yZGVyLmMJMjAgSnVsIDIwMTIgMjI6NTE6NTAgLTAwMDAKQEAgLTM2LDYg KzM2LDggQEAgc3RhdGljIGxkX3BsdWdpbl9nZXRfaW5wdXRfc2VjdGlvbl9u YW1lIAogc3RhdGljIGxkX3BsdWdpbl9nZXRfaW5wdXRfc2VjdGlvbl9jb250 ZW50cyBnZXRfaW5wdXRfc2VjdGlvbl9jb250ZW50cyA9IE5VTEw7CiBzdGF0 aWMgbGRfcGx1Z2luX3VwZGF0ZV9zZWN0aW9uX29yZGVyIHVwZGF0ZV9zZWN0 aW9uX29yZGVyID0gTlVMTDsKIHN0YXRpYyBsZF9wbHVnaW5fYWxsb3dfc2Vj dGlvbl9vcmRlcmluZyBhbGxvd19zZWN0aW9uX29yZGVyaW5nID0gTlVMTDsK K3N0YXRpYyBsZF9wbHVnaW5fYWxsb3dfdW5pcXVlX3NlZ21lbnRfZm9yX3Nl Y3Rpb25zIGFsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyA9IE5V TEw7CitzdGF0aWMgbGRfcGx1Z2luX3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0 aW9ucyB1bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMgPSBOVUxMOwogCiBl bnVtIGxkX3BsdWdpbl9zdGF0dXMgb25sb2FkKHN0cnVjdCBsZF9wbHVnaW5f dHYgKnR2KTsKIGVudW0gbGRfcGx1Z2luX3N0YXR1cyBjbGFpbV9maWxlX2hv b2soY29uc3Qgc3RydWN0IGxkX3BsdWdpbl9pbnB1dF9maWxlICpmaWxlLApA QCAtNzYsNiArNzgsMTEgQEAgb25sb2FkKHN0cnVjdCBsZF9wbHVnaW5fdHYg KnR2KQogCWNhc2UgTERQVF9BTExPV19TRUNUSU9OX09SREVSSU5HOgogCSAg YWxsb3dfc2VjdGlvbl9vcmRlcmluZyA9ICplbnRyeS0+dHZfdS50dl9hbGxv d19zZWN0aW9uX29yZGVyaW5nOwogCSAgYnJlYWs7CisJY2FzZSBMRFBUX0FM TE9XX1VOSVFVRV9TRUdNRU5UX0ZPUl9TRUNUSU9OUzoKKwkgIGFsbG93X3Vu aXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyA9ICplbnRyeS0+dHZfdS50dl9h bGxvd191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnM7CisJY2FzZSBMRFBU X1VOSVFVRV9TRUdNRU5UX0ZPUl9TRUNUSU9OUzoKKwkgIHVuaXF1ZV9zZWdt ZW50X2Zvcl9zZWN0aW9ucyA9ICplbnRyeS0+dHZfdS50dl91bmlxdWVfc2Vn bWVudF9mb3Jfc2VjdGlvbnM7CisJICBicmVhazsKICAgICAgICAgZGVmYXVs dDoKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODYsNyArOTMs OSBAQCBvbmxvYWQoc3RydWN0IGxkX3BsdWdpbl90diAqdHYpCiAgICAgICB8 fCBnZXRfaW5wdXRfc2VjdGlvbl9uYW1lID09IE5VTEwKICAgICAgIHx8IGdl dF9pbnB1dF9zZWN0aW9uX2NvbnRlbnRzID09IE5VTEwKICAgICAgIHx8IHVw ZGF0ZV9zZWN0aW9uX29yZGVyID09IE5VTEwKLSAgICAgIHx8IGFsbG93X3Nl Y3Rpb25fb3JkZXJpbmcgPT0gTlVMTCkKKyAgICAgIHx8IGFsbG93X3NlY3Rp b25fb3JkZXJpbmcgPT0gTlVMTAorICAgICAgfHwgYWxsb3dfdW5pcXVlX3Nl Z21lbnRfZm9yX3NlY3Rpb25zID09IE5VTEwKKyAgICAgIHx8IHVuaXF1ZV9z ZWdtZW50X2Zvcl9zZWN0aW9ucyA9PSBOVUxMKQogICAgIHsKICAgICAgIGZw cmludGYoc3RkZXJyLCAiU29tZSBpbnRlcmZhY2VzIGFyZSBtaXNzaW5nXG4i KTsKICAgICAgIHJldHVybiBMRFBTX0VSUjsKQEAgLTExNyw2ICsxMjYsOSBA QCBjbGFpbV9maWxlX2hvb2soY29uc3Qgc3RydWN0IGxkX3BsdWdpbl9pCiAg ICAgewogICAgICAgLyogSW5mb3JtIHRoZSBsaW5rZXIgdG8gcHJlcGFyZSBm b3Igc2VjdGlvbiByZW9yZGVyaW5nLiAgKi8KICAgICAgICgqYWxsb3dfc2Vj dGlvbl9vcmRlcmluZykoKTsKKyAgICAgIC8qIEluZm9ybSB0aGUgbGlua2Vy IHRvIHByZXBhcmUgdG8gbWFwIHNvbWUgc2VjdGlvbnMgdG8gdW5pcXVlCisJ IHNlZ21lbnRzLiAgKi8KKyAgICAgICgqYWxsb3dfdW5pcXVlX3NlZ21lbnRf Zm9yX3NlY3Rpb25zKSgpOyAKICAgICAgIGlzX29yZGVyaW5nX3NwZWNpZmll ZCA9IDE7CiAgICAgfQogCkBAIC0xNjAsNyArMTcyLDExIEBAIGVudW0gbGRf cGx1Z2luX3N0YXR1cwogYWxsX3N5bWJvbHNfcmVhZF9ob29rKHZvaWQpCiB7 CiAgIGlmIChudW1fZW50cmllcyA9PSAzKQotICAgIHVwZGF0ZV9zZWN0aW9u X29yZGVyKHNlY3Rpb25fbGlzdCwgbnVtX2VudHJpZXMpOworICAgIHsgCisg ICAgICB1cGRhdGVfc2VjdGlvbl9vcmRlcihzZWN0aW9uX2xpc3QsIG51bV9l bnRyaWVzKTsKKyAgICAgIHVuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyAo Ii50ZXh0LnBsdWdpbl9jcmVhdGVkX3VuaXF1ZSIsIDAsCisJCQkJICAgc2Vj dGlvbl9saXN0LCBudW1fZW50cmllcyk7CisgICAgfQogCiAgIHJldHVybiBM RFBTX09LOwogfQpJbmRleDogaW5jbHVkZS9wbHVnaW4tYXBpLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2luY2x1 ZGUvcGx1Z2luLWFwaS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRp ZmYgLXUgLXUgLXAgLXIxLjE5IHBsdWdpbi1hcGkuaAotLS0gaW5jbHVkZS9w bHVnaW4tYXBpLmgJMTIgSnVuIDIwMTIgMjI6NTA6NDQgLTAwMDAJMS4xOQor KysgaW5jbHVkZS9wbHVnaW4tYXBpLmgJMjAgSnVsIDIwMTIgMjI6NTE6NTAg LTAwMDAKQEAgLTMxOCw2ICszMTgsMjkgQEAgdHlwZWRlZgogZW51bSBsZF9w bHVnaW5fc3RhdHVzCiAoKmxkX3BsdWdpbl9hbGxvd19zZWN0aW9uX29yZGVy aW5nKSAodm9pZCk7CiAKKy8qIFRoZSBsaW5rZXIncyBpbnRlcmZhY2UgZm9y IHNwZWNpZnlpbmcgdGhhdCBhIHN1YnNldCBvZiBzZWN0aW9ucyBpcworICAg dG8gYmUgbWFwcGVkIHRvIGEgdW5pcXVlIHNlZ21lbnQuICBUaGlzIHNob3Vs ZCBiZSBpbnZva2VkIGJlZm9yZQorICAgdW5pcXVlX3NlZ21lbnRfZm9yX3Nl Y3Rpb25zLCBwcmVmZXJhYmx5IGluIHRoZSBjbGFpbV9maWxlIGhhbmRsZXIu ICAqLworCit0eXBlZGVmCitlbnVtIGxkX3BsdWdpbl9zdGF0dXMKKygqbGRf cGx1Z2luX2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucykgKHZv aWQpOworCisvKiBUaGUgbGlua2VyJ3MgaW50ZXJmYWNlIGZvciBzcGVjaWZ5 aW5nIHRoYXQgYSBzcGVjaWZpYyBzZXQgb2Ygc2VjdGlvbnMKKyAgIG11c3Qg YmUgbWFwcGVkIHRvIGFuIHVuaXF1ZSBzZWdtZW50LiAgRUxGIHNlZ21lbnRz IGRvIG5vdCBoYXZlIG5hbWVzCisgICBhbmQgdGhlIE5BTUUgaXMgdXNlZCBh cyBhbiBpZGVudGlmaWVyIG9ubHkuICAgRkxBR1MgaXMgdXNlZCB0byBzcGVj aWZ5CisgICBpZiBhbnkgYWRkaXRpb25hbCBzZWdtZW50IGZsYWdzIG5lZWQg dG8gYmUgc2V0LiAgRm9yIGluc3RhbmNlLCBhCisgICBzcGVjaWZpYyBzZWdt ZW50IGZsYWcgY2FuIGJlIHNldCB0byBpZGVudGlmeSB0aGlzIHNlZ21lbnQu ICBVbnNldHRpbmcKKyAgIHNlZ21lbnQgZmxhZ3MgdGhhdCB3b3VsZCBiZSBz ZXQgYnkgZGVmYXVsdCBpcyBub3QgcG9zc2libGUuICovCisKK3R5cGVkZWYK K2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fdW5pcXVlX3Nl Z21lbnRfZm9yX3NlY3Rpb25zKSAoY29uc3QgY2hhciogc2VnbWVudF9uYW1l LAorCQkJCQkgIHVpbnQ2NF90IHNlZ21lbnRfZmxhZ3MsCisJCQkJCSAgY29u c3Qgc3RydWN0IGxkX3BsdWdpbl9zZWN0aW9uICoKKwkJCQkJICAgIHNlY3Rp b25fbGlzdCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgbnVtX3NlY3Rpb25zKTsK KwogZW51bSBsZF9wbHVnaW5fbGV2ZWwKIHsKICAgTERQTF9JTkZPLApAQCAt MzU1LDcgKzM3OCw5IEBAIGVudW0gbGRfcGx1Z2luX3RhZwogICBMRFBUX0dF VF9JTlBVVF9TRUNUSU9OX0NPTlRFTlRTLAogICBMRFBUX1VQREFURV9TRUNU SU9OX09SREVSLAogICBMRFBUX0FMTE9XX1NFQ1RJT05fT1JERVJJTkcsCi0g IExEUFRfR0VUX1NZTUJPTFNfVjIKKyAgTERQVF9HRVRfU1lNQk9MU19WMiwK KyAgTERQVF9BTExPV19VTklRVUVfU0VHTUVOVF9GT1JfU0VDVElPTlMsCisg IExEUFRfVU5JUVVFX1NFR01FTlRfRk9SX1NFQ1RJT05TCiB9OwogCiAvKiBU aGUgcGx1Z2luIHRyYW5zZmVyIHZlY3Rvci4gICovCkBAIC0zODUsNiArNDEw LDggQEAgc3RydWN0IGxkX3BsdWdpbl90dgogICAgIGxkX3BsdWdpbl9nZXRf aW5wdXRfc2VjdGlvbl9jb250ZW50cyB0dl9nZXRfaW5wdXRfc2VjdGlvbl9j b250ZW50czsKICAgICBsZF9wbHVnaW5fdXBkYXRlX3NlY3Rpb25fb3JkZXIg dHZfdXBkYXRlX3NlY3Rpb25fb3JkZXI7CiAgICAgbGRfcGx1Z2luX2FsbG93 X3NlY3Rpb25fb3JkZXJpbmcgdHZfYWxsb3dfc2VjdGlvbl9vcmRlcmluZzsK KyAgICBsZF9wbHVnaW5fYWxsb3dfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rp b25zIHR2X2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9uczsgCisg ICAgbGRfcGx1Z2luX3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyB0dl91 bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnM7CiAgIH0gdHZfdTsKIH07CiAK --f46d04462f66f3787c04c54c15ca--