From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12438 invoked by alias); 25 Aug 2009 00:48:54 -0000 Received: (qmail 12422 invoked by uid 22791); 25 Aug 2009 00:48:48 -0000 X-SWARE-Spam-Status: No, hits=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_37,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 25 Aug 2009 00:48:38 +0000 Received: from spaceape12.eur.corp.google.com (spaceape12.eur.corp.google.com [172.28.16.146]) by smtp-out.google.com with ESMTP id n7P0mYLi012558 for ; Tue, 25 Aug 2009 01:48:34 +0100 Received: from ywh13 (ywh13.prod.google.com [10.192.8.13]) by spaceape12.eur.corp.google.com with ESMTP id n7P0mV9E021659 for ; Mon, 24 Aug 2009 17:48:31 -0700 Received: by ywh13 with SMTP id 13so3419602ywh.15 for ; Mon, 24 Aug 2009 17:48:31 -0700 (PDT) MIME-Version: 1.0 Received: by 10.150.254.19 with SMTP id b19mr9424790ybi.6.1251161310622; Mon, 24 Aug 2009 17:48:30 -0700 (PDT) In-Reply-To: References: <7e6c8d660907081308r13bff580rdcf4822c77df8403@mail.gmail.com> <200907082146.40513.pedro@codesourcery.com> Date: Tue, 25 Aug 2009 03:00:00 -0000 Message-ID: Subject: Re: [RFA] Use data cache for stack accesses From: Doug Evans To: Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd245bc79f38c0471ecb1e2 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-08/txt/msg00403.txt.bz2 --000e0cd245bc79f38c0471ecb1e2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 3675 On Thu, Aug 20, 2009 at 11:00 PM, Doug Evans wrote: > On Wed, Jul 8, 2009 at 1:46 PM, Pedro Alves wrote: >> On Wednesday 08 July 2009 21:08:00, Jacob Potter write: >>> --- a/gdb/thread.c >>> +++ b/gdb/thread.c >>> @@ -848,6 +848,9 @@ switch_to_thread (ptid_t ptid) >>> =A0 =A0if (ptid_equal (ptid, inferior_ptid)) >>> =A0 =A0 =A0return; >>> >>> + =A0if (ptid_get_pid (ptid) !=3D ptid_get_pid (inferior_ptid)) >>> + =A0 =A0dcache_invalidate (target_dcache); >>> + >> >> I'm not sure this would be 100% multi-address space safe. >> >> Do we not have places where we switch inferior_ptid temporarily >> before calling reading memory, with save_inferior_ptid, without >> going through the high level switch_to_thread ? > > Yeah. > >> What if we do this within dcache itself, similarly >> to get_thread_regcache? =A0That would be probably in [dcache_xfer_partia= l]. > > It seems that given that we can temporarily change inferiors without > giving subsystems notice of the change, and given vfork, then we need > to have intelligence in dcache to handle this (and then it's not clear > if we should keep one dcache per inferior). > > How about having memory_xfer_partial notify dcache of every > write/read, and then dcache could keep just one copy of the cache and > flush it appropriately? > Something like this? 2009-08-24 Jacob Potter Doug Evans Implement TARGET_OBJECT_STACK_MEMORY. * NEWS: Add note on new "set stack-cache" option. * corefile.c (read_stack): New function. * dcache.c (dcache_struct): New member ptid. (dcache_enable_p): Mark as obsolete. (stack_cache_enabled_p): New static global. (show_dcache_enabled_p): Flag option as deprecated. (show_stack_cache_enabled_p): New function. (dcache_invalidate): Update ptid. (dcache_read_line): No longer check cacheable attribute, stack accesses get cached despite attribute. (dcache_init): Set ptid. (dcache_xfer_memory): Flush cache if from different ptid than befor= e. (dcache_update): New function. (dcache_info): Report ptid. (_initialize_dcache): Update text for `remotecache' to indicate it is obsolete. Install new option `stack-cache'. * dcache.h (dcache_update): Declare. (stack_cache_enabled_p): Declare. * dwarf2loc.c (dwarf2_evaluate_loc_desc): Mark values on stack with set_value_stack. * frame-unwind.c (frame_unwind_got_memory): Ditto. * gdbcore.h (read_stack): Declare. * target.c (memory_xfer_partial): New arg object, all callers updat= ed. Check for existing inferior before calling dcache routines. When writing non-TARGET_OBJECT_STACK_MEMORY, notify dcache. (target_xfer_partial): Call memory_xfer_partial for TARGET_OBJECT_STACK_MEMORY. (target_read_stack): New function. * target.h (enum target_object): New value TARGET_OBJECT_STACK_MEMO= RY. (target_read_stack): Declare. * valops.c (get_value_at): New function. (value_at): Guts moved to get_value_at. (value_at_lazy): Similarly. (value_fetch_lazy): Call read_stack for stack values. * value.c (struct value): New member `stack'. (value_stack, set_value_stack): New functions. * value.h (value_stack, set_value_stack): Declare. * doc/gdb.texinfo (Caching Data of Remote Targets): Update text. (set remotecache): Mark option as obsolete. (set stack-cache): Document new option. (info dcache): Update text. --000e0cd245bc79f38c0471ecb1e2 Content-Type: text/plain; charset=US-ASCII; name="090824-jdpotter-stack-cache-3.patch.txt" Content-Disposition: attachment; filename="090824-jdpotter-stack-cache-3.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fyrx4dey0 Content-length: 31627 MjAwOS0wOC0yNCAgSmFjb2IgUG90dGVyICA8amRwb3R0ZXJAZ29vZ2xlLmNv bT4KCSAgICBEb3VnIEV2YW5zICA8ZGplQGdvb2dsZS5jb20+CgoJSW1wbGVt ZW50IFRBUkdFVF9PQkpFQ1RfU1RBQ0tfTUVNT1JZLgoJKiBORVdTOiBBZGQg bm90ZSBvbiBuZXcgInNldCBzdGFjay1jYWNoZSIgb3B0aW9uLgoJKiBjb3Jl ZmlsZS5jIChyZWFkX3N0YWNrKTogTmV3IGZ1bmN0aW9uLgoJKiBkY2FjaGUu YyAoZGNhY2hlX3N0cnVjdCk6IE5ldyBtZW1iZXIgcHRpZC4KCShkY2FjaGVf ZW5hYmxlX3ApOiBNYXJrIGFzIG9ic29sZXRlLgoJKHN0YWNrX2NhY2hlX2Vu YWJsZWRfcCk6IE5ldyBzdGF0aWMgZ2xvYmFsLgoJKHNob3dfZGNhY2hlX2Vu YWJsZWRfcCk6IEZsYWcgb3B0aW9uIGFzIGRlcHJlY2F0ZWQuCgkoc2hvd19z dGFja19jYWNoZV9lbmFibGVkX3ApOiBOZXcgZnVuY3Rpb24uCgkoZGNhY2hl X2ludmFsaWRhdGUpOiBVcGRhdGUgcHRpZC4KCShkY2FjaGVfcmVhZF9saW5l KTogTm8gbG9uZ2VyIGNoZWNrIGNhY2hlYWJsZSBhdHRyaWJ1dGUsIHN0YWNr CglhY2Nlc3NlcyBnZXQgY2FjaGVkIGRlc3BpdGUgYXR0cmlidXRlLgoJKGRj YWNoZV9pbml0KTogU2V0IHB0aWQuCgkoZGNhY2hlX3hmZXJfbWVtb3J5KTog Rmx1c2ggY2FjaGUgaWYgZnJvbSBkaWZmZXJlbnQgcHRpZCB0aGFuIGJlZm9y ZS4KCShkY2FjaGVfdXBkYXRlKTogTmV3IGZ1bmN0aW9uLgoJKGRjYWNoZV9p bmZvKTogUmVwb3J0IHB0aWQuCgkoX2luaXRpYWxpemVfZGNhY2hlKTogVXBk YXRlIHRleHQgZm9yIGByZW1vdGVjYWNoZScgdG8gaW5kaWNhdGUgaXQKCWlz IG9ic29sZXRlLiAgSW5zdGFsbCBuZXcgb3B0aW9uIGBzdGFjay1jYWNoZScu CgkqIGRjYWNoZS5oIChkY2FjaGVfdXBkYXRlKTogRGVjbGFyZS4KCShzdGFj a19jYWNoZV9lbmFibGVkX3ApOiBEZWNsYXJlLgoJKiBkd2FyZjJsb2MuYyAo ZHdhcmYyX2V2YWx1YXRlX2xvY19kZXNjKTogTWFyayB2YWx1ZXMgb24gc3Rh Y2sgd2l0aAoJc2V0X3ZhbHVlX3N0YWNrLgoJKiBmcmFtZS11bndpbmQuYyAo ZnJhbWVfdW53aW5kX2dvdF9tZW1vcnkpOiBEaXR0by4KCSogZ2RiY29yZS5o IChyZWFkX3N0YWNrKTogRGVjbGFyZS4KCSogdGFyZ2V0LmMgKG1lbW9yeV94 ZmVyX3BhcnRpYWwpOiBOZXcgYXJnIG9iamVjdCwgYWxsIGNhbGxlcnMgdXBk YXRlZC4KCUNoZWNrIGZvciBleGlzdGluZyBpbmZlcmlvciBiZWZvcmUgY2Fs bGluZyBkY2FjaGUgcm91dGluZXMuCglXaGVuIHdyaXRpbmcgbm9uLVRBUkdF VF9PQkpFQ1RfU1RBQ0tfTUVNT1JZLCBub3RpZnkgZGNhY2hlLgoJKHRhcmdl dF94ZmVyX3BhcnRpYWwpOiBDYWxsIG1lbW9yeV94ZmVyX3BhcnRpYWwgZm9y CglUQVJHRVRfT0JKRUNUX1NUQUNLX01FTU9SWS4KCSh0YXJnZXRfcmVhZF9z dGFjayk6IE5ldyBmdW5jdGlvbi4KCSogdGFyZ2V0LmggKGVudW0gdGFyZ2V0 X29iamVjdCk6IE5ldyB2YWx1ZSBUQVJHRVRfT0JKRUNUX1NUQUNLX01FTU9S WS4KCSh0YXJnZXRfcmVhZF9zdGFjayk6IERlY2xhcmUuCgkqIHZhbG9wcy5j IChnZXRfdmFsdWVfYXQpOiBOZXcgZnVuY3Rpb24uCgkodmFsdWVfYXQpOiBH dXRzIG1vdmVkIHRvIGdldF92YWx1ZV9hdC4KCSh2YWx1ZV9hdF9sYXp5KTog U2ltaWxhcmx5LgoJKHZhbHVlX2ZldGNoX2xhenkpOiBDYWxsIHJlYWRfc3Rh Y2sgZm9yIHN0YWNrIHZhbHVlcy4KCSogdmFsdWUuYyAoc3RydWN0IHZhbHVl KTogTmV3IG1lbWJlciBgc3RhY2snLgoJKHZhbHVlX3N0YWNrLCBzZXRfdmFs dWVfc3RhY2spOiBOZXcgZnVuY3Rpb25zLgoJKiB2YWx1ZS5oICh2YWx1ZV9z dGFjaywgc2V0X3ZhbHVlX3N0YWNrKTogRGVjbGFyZS4KCgkqIGRvYy9nZGIu dGV4aW5mbyAoQ2FjaGluZyBEYXRhIG9mIFJlbW90ZSBUYXJnZXRzKTogVXBk YXRlIHRleHQuCgkoc2V0IHJlbW90ZWNhY2hlKTogTWFyayBvcHRpb24gYXMg b2Jzb2xldGUuCgkoc2V0IHN0YWNrLWNhY2hlKTogRG9jdW1lbnQgbmV3IG9w dGlvbi4KCShpbmZvIGRjYWNoZSk6IFVwZGF0ZSB0ZXh0LgoKSW5kZXg6IE5F V1MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMv c3JjL2dkYi9ORVdTLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMyNgpkaWZm IC11IC1wIC1yMS4zMjYgTkVXUwotLS0gTkVXUwkyMCBBdWcgMjAwOSAxODow Mjo0NyAtMDAwMAkxLjMyNgorKysgTkVXUwkyNSBBdWcgMjAwOSAwMDoyMzox OCAtMDAwMApAQCAtMzk1LDYgKzM5NSwxMiBAQCBzaG93IHNjaGVkdWxlLW11 bHRpcGxlCiAgIEFsbG93IEdEQiB0byByZXN1bWUgYWxsIHRocmVhZHMgb2Yg YWxsIHByb2Nlc3NlcyBvciBvbmx5IHRocmVhZHMgb2YKICAgdGhlIGN1cnJl bnQgcHJvY2Vzcy4KIAorc2V0IHN0YWNrLWNhY2hlCitzaG93IHN0YWNrLWNh Y2hlCisgIFVzZSBtb3JlIGFnZ3Jlc3NpdmUgY2FjaGluZyBmb3IgYWNjZXNz ZXMgdG8gdGhlIHN0YWNrLiBUaGlzIGltcHJvdmVzCisgIHBlcmZvcm1hbmNl IG9mIHJlbW90ZSBkZWJ1Z2dpbmcgKHBhcnRpY3VsYXJseSBiYWNrdHJhY2Vz KSB3aXRob3V0CisgIGFmZmVjdGluZyBjb3JyZWN0bmVzcy4KKwogKiBSZW1v dmVkIGNvbW1hbmRzCiAKIGluZm8gZm9ya3MKSW5kZXg6IGNvcmVmaWxlLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9jb3JlZmlsZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU0CmRp ZmYgLXUgLXAgLXIxLjU0IGNvcmVmaWxlLmMKLS0tIGNvcmVmaWxlLmMJMiBK dWwgMjAwOSAxNzoyNTo1MyAtMDAwMAkxLjU0CisrKyBjb3JlZmlsZS5jCTI1 IEF1ZyAyMDA5IDAwOjIzOjE4IC0wMDAwCkBAIC0yMjgsNiArMjI4LDcgQEAg bWVtb3J5X2Vycm9yIChpbnQgc3RhdHVzLCBDT1JFX0FERFIgbWVtYQogfQog CiAvKiBTYW1lIGFzIHRhcmdldF9yZWFkX21lbW9yeSwgYnV0IHJlcG9ydCBh biBlcnJvciBpZiBjYW4ndCByZWFkLiAgKi8KKwogdm9pZAogcmVhZF9tZW1v cnkgKENPUkVfQUREUiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRyLCBpbnQg bGVuKQogewpAQCAtMjM3LDYgKzIzOCwxNyBAQCByZWFkX21lbW9yeSAoQ09S RV9BRERSIG1lbWFkZHIsIGdkYl9ieXRlCiAgICAgbWVtb3J5X2Vycm9yIChz dGF0dXMsIG1lbWFkZHIpOwogfQogCisvKiBTYW1lIGFzIHRhcmdldF9yZWFk X3N0YWNrLCBidXQgcmVwb3J0IGFuIGVycm9yIGlmIGNhbid0IHJlYWQuICAq LworCit2b2lkCityZWFkX3N0YWNrIChDT1JFX0FERFIgbWVtYWRkciwgZ2Ri X2J5dGUgKm15YWRkciwgaW50IGxlbikKK3sKKyAgaW50IHN0YXR1czsKKyAg c3RhdHVzID0gdGFyZ2V0X3JlYWRfc3RhY2sgKG1lbWFkZHIsIG15YWRkciwg bGVuKTsKKyAgaWYgKHN0YXR1cyAhPSAwKQorICAgIG1lbW9yeV9lcnJvciAo c3RhdHVzLCBtZW1hZGRyKTsKK30KKwogLyogQXJndW1lbnQgLyByZXR1cm4g cmVzdWx0IHN0cnVjdCBmb3IgdXNlIHdpdGgKICAgIGRvX2NhcHR1cmVkX3Jl YWRfbWVtb3J5X2ludGVnZXIoKS4gIE1FTUFERFIgYW5kIExFTiBhcmUgZmls bGVkIGluCiAgICBieSBnZGJfcmVhZF9tZW1vcnlfaW50ZWdlcigpLiAgUkVT VUxUIGlzIHRoZSBjb250ZW50cyB0aGF0IHdlcmUKSW5kZXg6IGRjYWNoZS5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy9nZGIvZGNhY2hlLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlm ZiAtdSAtcCAtcjEuMzUgZGNhY2hlLmMKLS0tIGRjYWNoZS5jCTIwIEF1ZyAy MDA5IDIzOjMwOjE1IC0wMDAwCTEuMzUKKysrIGRjYWNoZS5jCTI1IEF1ZyAy MDA5IDAwOjIzOjE4IC0wMDAwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVk ZSAiZ2RiX3N0cmluZy5oIgogI2luY2x1ZGUgImdkYmNvcmUuaCIKICNpbmNs dWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgogI2luY2x1 ZGUgInNwbGF5LXRyZWUuaCIKIAogLyogVGhlIGRhdGEgY2FjaGUgY291bGQg bGVhZCB0byBpbmNvcnJlY3QgcmVzdWx0cyBiZWNhdXNlIGl0IGRvZXNuJ3QK QEAgLTEwMyw2ICsxMDQsOSBAQCBzdHJ1Y3QgZGNhY2hlX3N0cnVjdAogCiAg IC8qIFRoZSBudW1iZXIgb2YgaW4tdXNlIGxpbmVzIGluIHRoZSBjYWNoZS4g ICovCiAgIGludCBzaXplOworCisgIC8qIFRoZSBwdGlkIG9mIGxhc3QgaW5m ZXJpb3IgdG8gdXNlIGNhY2hlIG9yIG51bGxfcHRpZC4gICovCisgIHB0aWRf dCBwdGlkOwogfTsKIAogc3RhdGljIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRj YWNoZV9oaXQgKERDQUNIRSAqZGNhY2hlLCBDT1JFX0FERFIgYWRkcik7CkBA IC0xMTcsMTUgKzEyMSwyMyBAQCBzdGF0aWMgdm9pZCBkY2FjaGVfaW5mbyAo Y2hhciAqZXhwLCBpbnQgCiAKIHZvaWQgX2luaXRpYWxpemVfZGNhY2hlICh2 b2lkKTsKIAotc3RhdGljIGludCBkY2FjaGVfZW5hYmxlZF9wID0gMDsKK3N0 YXRpYyBpbnQgZGNhY2hlX2VuYWJsZWRfcCA9IDA7IC8qIE9CU09MRVRFICov CisKK2ludCBzdGFja19jYWNoZV9lbmFibGVkX3AgPSAxOwogCiBzdGF0aWMg dm9pZAogc2hvd19kY2FjaGVfZW5hYmxlZF9wIChzdHJ1Y3QgdWlfZmlsZSAq ZmlsZSwgaW50IGZyb21fdHR5LAogCQkgICAgICAgc3RydWN0IGNtZF9saXN0 X2VsZW1lbnQgKmMsIGNvbnN0IGNoYXIgKnZhbHVlKQogewotICBmcHJpbnRm X2ZpbHRlcmVkIChmaWxlLCBfKCJDYWNoZSB1c2UgZm9yIHJlbW90ZSB0YXJn ZXRzIGlzICVzLlxuIiksIHZhbHVlKTsKKyAgZnByaW50Zl9maWx0ZXJlZCAo ZmlsZSwgXygiRGVwcmVjYXRlZCByZW1vdGVjYWNoZSBmbGFnIGlzICVzLlxu IiksIHZhbHVlKTsKIH0KIAorc3RhdGljIHZvaWQKK3Nob3dfc3RhY2tfY2Fj aGVfZW5hYmxlZF9wIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21f dHR5LAorCQkJICAgIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjLCBjb25z dCBjaGFyICp2YWx1ZSkKK3sKKyAgZnByaW50Zl9maWx0ZXJlZCAoZmlsZSwg XygiQ2FjaGUgdXNlIGZvciBzdGFjayBhY2Nlc3NlcyBpcyAlcy5cbiIpLCB2 YWx1ZSk7Cit9CiAKIHN0YXRpYyBEQ0FDSEUgKmxhc3RfY2FjaGU7IC8qIFVz ZWQgYnkgaW5mbyBkY2FjaGUgKi8KIApAQCAtMTUyLDYgKzE2NCw3IEBAIGRj YWNoZV9pbnZhbGlkYXRlIChEQ0FDSEUgKmRjYWNoZSkKICAgZGNhY2hlLT5v bGRlc3QgPSBOVUxMOwogICBkY2FjaGUtPm5ld2VzdCA9IE5VTEw7CiAgIGRj YWNoZS0+c2l6ZSA9IDA7CisgIGRjYWNoZS0+cHRpZCA9IG51bGxfcHRpZDsK IH0KIAogLyogSWYgYWRkciBpcyBwcmVzZW50IGluIHRoZSBkY2FjaGUsIHJl dHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgYmxvY2sKQEAgLTE5OCw4ICsyMTEs OSBAQCBkY2FjaGVfcmVhZF9saW5lIChEQ0FDSEUgKmRjYWNoZSwgc3RydWN0 CiAgICAgICBlbHNlCiAJcmVnX2xlbiA9IHJlZ2lvbi0+aGkgLSBtZW1hZGRy OwogCi0gICAgICAvKiBTa2lwIG5vbi1jYWNoZWFibGUvbm9uLXJlYWRhYmxl IHJlZ2lvbnMuICAqLwotICAgICAgaWYgKCFyZWdpb24tPmF0dHJpYi5jYWNo ZSB8fCByZWdpb24tPmF0dHJpYi5tb2RlID09IE1FTV9XTykKKyAgICAgIC8q IFNraXAgbm9uLXJlYWRhYmxlIHJlZ2lvbnMuICBUaGUgY2FjaGUgYXR0cmli dXRlIGNhbiBiZSBpZ25vcmVkLAorICAgICAgICAgc2luY2Ugd2UgbWF5IGJl IGxvYWRpbmcgdGhpcyBmb3IgYSBzdGFjayBhY2Nlc3MuICAqLworICAgICAg aWYgKHJlZ2lvbi0+YXR0cmliLm1vZGUgPT0gTUVNX1dPKQogCXsKIAkgIG1l bWFkZHIgKz0gcmVnX2xlbjsKIAkgIG15YWRkciAgKz0gcmVnX2xlbjsKQEAg LTMzOCw2ICszNTIsNyBAQCBkY2FjaGVfaW5pdCAodm9pZCkKICAgZGNhY2hl LT5uZXdlc3QgPSBOVUxMOwogICBkY2FjaGUtPmZyZWVsaXN0ID0gTlVMTDsK ICAgZGNhY2hlLT5zaXplID0gMDsKKyAgZGNhY2hlLT5wdGlkID0gbnVsbF9w dGlkOwogICBsYXN0X2NhY2hlID0gZGNhY2hlOwogCiAgIHJldHVybiBkY2Fj aGU7CkBAIC0zNzgsNiArMzkzLDE1IEBAIGRjYWNoZV94ZmVyX21lbW9yeSAo c3RydWN0IHRhcmdldF9vcHMgKm8KICAgaW50ICgqeGZ1bmMpIChEQ0FDSEUg KmRjYWNoZSwgQ09SRV9BRERSIGFkZHIsIGdkYl9ieXRlICpwdHIpOwogICB4 ZnVuYyA9IHNob3VsZF93cml0ZSA/IGRjYWNoZV9wb2tlX2J5dGUgOiBkY2Fj aGVfcGVla19ieXRlOwogCisgIC8qIElmIHRoaXMgaXMgYSBkaWZmZXJlbnQg aW5mZXJpb3IgZnJvbSB3aGF0IHdlJ3ZlIHJlY29yZGVkLAorICAgICBmbHVz aCB0aGUgY2FjaGUuICAqLworCisgIGlmICghIHB0aWRfZXF1YWwgKGluZmVy aW9yX3B0aWQsIGRjYWNoZS0+cHRpZCkpCisgICAgeworICAgICAgZGNhY2hl X2ludmFsaWRhdGUgKGRjYWNoZSk7CisgICAgICBkY2FjaGUtPnB0aWQgPSBp bmZlcmlvcl9wdGlkOworICAgIH0KKwogICAvKiBEbyB3cml0ZS10aHJvdWdo IGZpcnN0LCBzbyB0aGF0IGlmIGl0IGZhaWxzLCB3ZSBkb24ndCB3cml0ZSB0 bwogICAgICB0aGUgY2FjaGUgYXQgYWxsLiAgKi8KIApAQCAtNDA3LDYgKzQz MSwxOCBAQCBkY2FjaGVfeGZlcl9tZW1vcnkgKHN0cnVjdCB0YXJnZXRfb3Bz ICpvCiAgICAibG9naWNhbGx5IiBjb25uZWN0ZWQgYnV0IG5vdCBhY3R1YWxs eSBhIHNpbmdsZSBjYWxsIHRvIG9uZSBvZiB0aGUKICAgIG1lbW9yeSB0cmFu c2ZlciBmdW5jdGlvbnMuICAqLwogCisvKiBKdXN0IHVwZGF0ZSBhbnkgY2Fj aGUgbGluZXMgd2hpY2ggYXJlIGFscmVhZHkgcHJlc2VudC4gIFRoaXMgaXMg Y2FsbGVkCisgICBieSBtZW1vcnlfeGZlcl9wYXJ0aWFsIGluIGNhc2VzIHdo ZXJlIHRoZSBhY2Nlc3Mgd291bGQgb3RoZXJ3aXNlIG5vdCBnbworICAgdGhy b3VnaCB0aGUgY2FjaGUuICAqLworCit2b2lkCitkY2FjaGVfdXBkYXRlIChE Q0FDSEUgKmRjYWNoZSwgQ09SRV9BRERSIG1lbWFkZHIsIGdkYl9ieXRlICpt eWFkZHIsIGludCBsZW4pCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBp IDwgbGVuOyBpKyspCisgICAgZGNhY2hlX3Bva2VfYnl0ZSAoZGNhY2hlLCBt ZW1hZGRyICsgaSwgbXlhZGRyICsgaSk7Cit9CisKIHN0YXRpYyB2b2lkCiBk Y2FjaGVfcHJpbnRfbGluZSAoaW50IGluZGV4KQogewpAQCAtNDc0LDEyICs1 MTAsMTUgQEAgZGNhY2hlX2luZm8gKGNoYXIgKmV4cCwgaW50IHR0eSkKICAg cHJpbnRmX2ZpbHRlcmVkIChfKCJEY2FjaGUgbGluZSB3aWR0aCAlZCwgbWF4 aW11bSBzaXplICVkXG4iKSwKIAkJICAgTElORV9TSVpFLCBEQ0FDSEVfU0la RSk7CiAKLSAgaWYgKCFsYXN0X2NhY2hlKQorICBpZiAoIWxhc3RfY2FjaGUg fHwgcHRpZF9lcXVhbCAobGFzdF9jYWNoZS0+cHRpZCwgbnVsbF9wdGlkKSkK ICAgICB7CiAgICAgICBwcmludGZfZmlsdGVyZWQgKF8oIk5vIGRhdGEgY2Fj aGUgYXZhaWxhYmxlLlxuIikpOwogICAgICAgcmV0dXJuOwogICAgIH0KIAor ICBwcmludGZfZmlsdGVyZWQgKF8oIkNvbnRhaW5zIGRhdGEgZm9yICVzXG4i KSwKKwkJICAgdGFyZ2V0X3BpZF90b19zdHIgKGxhc3RfY2FjaGUtPnB0aWQp KTsKKwogICByZWZjb3VudCA9IDA7CiAKICAgbiA9IHNwbGF5X3RyZWVfbWlu IChsYXN0X2NhY2hlLT50cmVlKTsKQEAgLTUwNywxNSArNTQ2LDI1IEBAIF9p bml0aWFsaXplX2RjYWNoZSAodm9pZCkKIAkJCSAgICZkY2FjaGVfZW5hYmxl ZF9wLCBfKCJcCiBTZXQgY2FjaGUgdXNlIGZvciByZW1vdGUgdGFyZ2V0cy4i KSwgXygiXAogU2hvdyBjYWNoZSB1c2UgZm9yIHJlbW90ZSB0YXJnZXRzLiIp LCBfKCJcCi1XaGVuIG9uLCB1c2UgZGF0YSBjYWNoaW5nIGZvciByZW1vdGUg dGFyZ2V0cy4gIEZvciBtYW55IHJlbW90ZSB0YXJnZXRzXG5cCi10aGlzIG9w dGlvbiBjYW4gb2ZmZXIgYmV0dGVyIHRocm91Z2hwdXQgZm9yIHJlYWRpbmcg dGFyZ2V0IG1lbW9yeS5cblwKLVVuZm9ydHVuYXRlbHksIGdkYiBkb2VzIG5v dCBjdXJyZW50bHkga25vdyBhbnl0aGluZyBhYm91dCB2b2xhdGlsZVxuXAot cmVnaXN0ZXJzIGFuZCB0aHVzIGRhdGEgY2FjaGluZyB3aWxsIHByb2R1Y2Ug aW5jb3JyZWN0IHJlc3VsdHMgd2l0aFxuXAotdm9sYXRpbGUgcmVnaXN0ZXJz IGFyZSBpbiB1c2UuICBCeSBkZWZhdWx0LCB0aGlzIG9wdGlvbiBpcyBvZmYu IiksCitUaGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBkYXRhIGNhY2hlIGZvciBy ZW1vdGUgdGFyZ2V0cy4gIFRoZSBjYWNoZVxuXAorZnVuY3Rpb25hbGl0eSBp cyBub3cgY29udHJvbGxlZCBieSB0aGUgbWVtb3J5IHJlZ2lvbiBzeXN0ZW0g YW5kIHRoZVxuXAorXCJzdGFjay1jYWNoZVwiIGZsYWc7IFwicmVtb3RlY2Fj aGVcIiBub3cgZG9lcyBub3RoaW5nIGFuZFxuXAorZXhpc3RzIG9ubHkgZm9y IGNvbXBhdGliaWxpdHkgcmVhc29ucy4iKSwKIAkJCSAgIE5VTEwsCiAJCQkg ICBzaG93X2RjYWNoZV9lbmFibGVkX3AsCiAJCQkgICAmc2V0bGlzdCwgJnNo b3dsaXN0KTsKIAorICBhZGRfc2V0c2hvd19ib29sZWFuX2NtZCAoInN0YWNr LWNhY2hlIiwgY2xhc3Nfc3VwcG9ydCwKKwkJCSAgICZzdGFja19jYWNoZV9l bmFibGVkX3AsIF8oIlwKK1NldCBjYWNoZSB1c2UgZm9yIHN0YWNrIGFjY2Vz cy4iKSwgXygiXAorU2hvdyBjYWNoZSB1c2UgZm9yIHN0YWNrIGFjY2Vzcy4i KSwgXygiXAorV2hlbiBvbiwgdXNlIHRoZSBkYXRhIGNhY2hlIGZvciBhbGwg c3RhY2sgYWNjZXNzLCByZWdhcmRsZXNzIG9mIGFueVxuXAorY29uZmlndXJl ZCBtZW1vcnkgcmVnaW9ucy4gIFRoaXMgaW1wcm92ZXMgcmVtb3RlIHBlcmZv cm1hbmNlIHNpZ25pZmljYW50bHkuXG5cCitCeSBkZWZhdWx0LCBjYWNoaW5n IGZvciBzdGFjayBhY2Nlc3MgaXMgb24uIiksCisJCQkgICBOVUxMLAorCQkJ ICAgc2hvd19zdGFja19jYWNoZV9lbmFibGVkX3AsCisJCQkgICAmc2V0bGlz dCwgJnNob3dsaXN0KTsKKwogICBhZGRfaW5mbyAoImRjYWNoZSIsIGRjYWNo ZV9pbmZvLAogCSAgICBfKCJcCiBQcmludCBpbmZvcm1hdGlvbiBvbiB0aGUg ZGNhY2hlIHBlcmZvcm1hbmNlLlxuXApJbmRleDogZGNhY2hlLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9k Y2FjaGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNQpkaWZmIC11IC1w IC1yMS4xNSBkY2FjaGUuaAotLS0gZGNhY2hlLmgJMjAgQXVnIDIwMDkgMjI6 MzA6MTIgLTAwMDAJMS4xNQorKysgZGNhY2hlLmgJMjUgQXVnIDIwMDkgMDA6 MjM6MTggLTAwMDAKQEAgLTM4LDQgKzM4LDEwIEBAIHZvaWQgZGNhY2hlX2Zy ZWUgKERDQUNIRSAqKTsKIGludCBkY2FjaGVfeGZlcl9tZW1vcnkgKHN0cnVj dCB0YXJnZXRfb3BzICpvcHMsIERDQUNIRSAqY2FjaGUsIENPUkVfQUREUiBt ZW0sCiAJCQlnZGJfYnl0ZSAqbXksIGludCBsZW4sIGludCBzaG91bGRfd3Jp dGUpOwogCit2b2lkIGRjYWNoZV91cGRhdGUgKERDQUNIRSAqZGNhY2hlLCBD T1JFX0FERFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwKKwkJICAgIGlu dCBsZW4pOworCisvKiBTaG91bGQgd2UgdXNlIHRoZSBkY2FjaGUgZm9yIHN0 YWNrIGFjY2Vzcz8gKi8KK2V4dGVybiBpbnQgc3RhY2tfY2FjaGVfZW5hYmxl ZF9wOworCiAjZW5kaWYgLyogRENBQ0hFX0ggKi8KSW5kZXg6IGR3YXJmMmxv Yy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvZHdhcmYybG9jLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NjMKZGlmZiAtdSAtcCAtcjEuNjMgZHdhcmYybG9jLmMKLS0tIGR3YXJmMmxv Yy5jCTExIEF1ZyAyMDA5IDIwOjM2OjQ5IC0wMDAwCTEuNjMKKysrIGR3YXJm MmxvYy5jCTI1IEF1ZyAyMDA5IDAwOjIzOjE4IC0wMDAwCkBAIC0yODAsNiAr MjgwLDcgQEAgZHdhcmYyX2V2YWx1YXRlX2xvY19kZXNjIChzdHJ1Y3Qgc3lt Ym9sIAogICAgICAgcmV0dmFsID0gYWxsb2NhdGVfdmFsdWUgKFNZTUJPTF9U WVBFICh2YXIpKTsKICAgICAgIFZBTFVFX0xWQUwgKHJldHZhbCkgPSBsdmFs X21lbW9yeTsKICAgICAgIHNldF92YWx1ZV9sYXp5IChyZXR2YWwsIDEpOwor ICAgICAgc2V0X3ZhbHVlX3N0YWNrIChyZXR2YWwsIDEpOwogICAgICAgc2V0 X3ZhbHVlX2FkZHJlc3MgKHJldHZhbCwgYWRkcmVzcyk7CiAgICAgfQogCklu ZGV4OiBmcmFtZS11bndpbmQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2ZyYW1lLXVud2luZC5jLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjI2CmRpZmYgLXUgLXAgLXIxLjI2IGZyYW1l LXVud2luZC5jCi0tLSBmcmFtZS11bndpbmQuYwkyIEp1bCAyMDA5IDE3OjI1 OjUzIC0wMDAwCTEuMjYKKysrIGZyYW1lLXVud2luZC5jCTI1IEF1ZyAyMDA5 IDAwOjIzOjE4IC0wMDAwCkBAIC0xNTMsOCArMTUzLDEwIEBAIHN0cnVjdCB2 YWx1ZSAqCiBmcmFtZV91bndpbmRfZ290X21lbW9yeSAoc3RydWN0IGZyYW1l X2luZm8gKmZyYW1lLCBpbnQgcmVnbnVtLCBDT1JFX0FERFIgYWRkcikKIHsK ICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBmcmFtZV91bndpbmRfYXJj aCAoZnJhbWUpOworICBzdHJ1Y3QgdmFsdWUgKnYgPSB2YWx1ZV9hdF9sYXp5 IChyZWdpc3Rlcl90eXBlIChnZGJhcmNoLCByZWdudW0pLCBhZGRyKTsKIAot ICByZXR1cm4gdmFsdWVfYXRfbGF6eSAocmVnaXN0ZXJfdHlwZSAoZ2RiYXJj aCwgcmVnbnVtKSwgYWRkcik7CisgIHNldF92YWx1ZV9zdGFjayAodiwgMSk7 CisgIHJldHVybiB2OwogfQogCiAvKiBSZXR1cm4gYSB2YWx1ZSB3aGljaCBp bmRpY2F0ZXMgdGhhdCBGUkFNRSdzIHNhdmVkIHZlcnNpb24gb2YKSW5kZXg6 IGdkYmNvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ2RiL2dkYmNvcmUuaCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBnZGJjb3JlLmgKLS0tIGdkYmNv cmUuaAkyIEp1bCAyMDA5IDE3OjI1OjUzIC0wMDAwCTEuMzUKKysrIGdkYmNv cmUuaAkyNSBBdWcgMjAwOSAwMDoyMzoxOCAtMDAwMApAQCAtNDcsNiArNDcs MTAgQEAgZXh0ZXJuIHZvaWQgbWVtb3J5X2Vycm9yIChpbnQgc3RhdHVzLCBD TwogCiBleHRlcm4gdm9pZCByZWFkX21lbW9yeSAoQ09SRV9BRERSIG1lbWFk ZHIsIGdkYl9ieXRlICpteWFkZHIsIGludCBsZW4pOwogCisvKiBMaWtlIHRh cmdldF9yZWFkX3N0YWNrLCBidXQgcmVwb3J0IGFuIGVycm9yIGlmIGNhbid0 IHJlYWQuICAqLworCitleHRlcm4gdm9pZCByZWFkX3N0YWNrIChDT1JFX0FE RFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwgaW50IGxlbik7CisKIC8q IFJlYWQgYW4gaW50ZWdlciBmcm9tIGRlYnVnZ2VkIG1lbW9yeSwgZ2l2ZW4g YWRkcmVzcyBhbmQgbnVtYmVyIG9mCiAgICBieXRlcy4gICovCiAKSW5kZXg6 IHRhcmdldC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j dnMvc3JjL3NyYy9nZGIvdGFyZ2V0LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMjIxCmRpZmYgLXUgLXAgLXIxLjIyMSB0YXJnZXQuYwotLS0gdGFyZ2V0 LmMJMjAgQXVnIDIwMDkgMjI6MzA6MTIgLTAwMDAJMS4yMjEKKysrIHRhcmdl dC5jCTI1IEF1ZyAyMDA5IDAwOjIzOjE4IC0wMDAwCkBAIC0yMTAsNiArMjEw LDcgQEAgc2hvd190YXJnZXRkZWJ1ZyAoc3RydWN0IHVpX2ZpbGUgKmZpbGUs IAogCiBzdGF0aWMgdm9pZCBzZXR1cF90YXJnZXRfZGVidWcgKHZvaWQpOwog CisvKiBDYWNoZSBvZiBtZW1vcnkgb3BlcmF0aW9ucywgdG8gc3BlZWQgdXAg cmVtb3RlIGFjY2Vzcy4gICovCiBEQ0FDSEUgKnRhcmdldF9kY2FjaGU7CiAK IC8qIFRoZSB1c2VyIGp1c3QgdHlwZWQgJ3RhcmdldCcgd2l0aG91dCB0aGUg bmFtZSBvZiBhIHRhcmdldC4gICovCkBAIC0xMTQzLDEyICsxMTQ0LDE0IEBA IHRhcmdldF9zZWN0aW9uX2J5X2FkZHIgKHN0cnVjdCB0YXJnZXRfb3AKICAg IHZhbHVlIGFyZSBqdXN0IGFzIGZvciB0YXJnZXRfeGZlcl9wYXJ0aWFsLiAg Ki8KIAogc3RhdGljIExPTkdFU1QKLW1lbW9yeV94ZmVyX3BhcnRpYWwgKHN0 cnVjdCB0YXJnZXRfb3BzICpvcHMsIHZvaWQgKnJlYWRidWYsIGNvbnN0IHZv aWQgKndyaXRlYnVmLAotCQkgICAgIFVMT05HRVNUIG1lbWFkZHIsIExPTkdF U1QgbGVuKQorbWVtb3J5X3hmZXJfcGFydGlhbCAoc3RydWN0IHRhcmdldF9v cHMgKm9wcywgZW51bSB0YXJnZXRfb2JqZWN0IG9iamVjdCwKKwkJICAgICB2 b2lkICpyZWFkYnVmLCBjb25zdCB2b2lkICp3cml0ZWJ1ZiwgVUxPTkdFU1Qg bWVtYWRkciwKKwkJICAgICBMT05HRVNUIGxlbikKIHsKICAgTE9OR0VTVCBy ZXM7CiAgIGludCByZWdfbGVuOwogICBzdHJ1Y3QgbWVtX3JlZ2lvbiAqcmVn aW9uOworICBzdHJ1Y3QgaW5mZXJpb3IgKmluZjsKIAogICAvKiBaZXJvIGxl bmd0aCByZXF1ZXN0cyBhcmUgb2sgYW5kIHJlcXVpcmUgbm8gd29yay4gICov CiAgIGlmIChsZW4gPT0gMCkKQEAgLTEyMjMsNyArMTIyNiwxMSBAQCBtZW1v cnlfeGZlcl9wYXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0X29wcyAqCiAgICAgICBy ZXR1cm4gLTE7CiAgICAgfQogCi0gIGlmIChyZWdpb24tPmF0dHJpYi5jYWNo ZSkKKyAgaW5mID0gZmluZF9pbmZlcmlvcl9waWQgKHB0aWRfZ2V0X3BpZCAo aW5mZXJpb3JfcHRpZCkpOworCisgIGlmIChpbmYKKyAgICAgICYmIChyZWdp b24tPmF0dHJpYi5jYWNoZQorCSAgfHwgKHN0YWNrX2NhY2hlX2VuYWJsZWRf cCAmJiBvYmplY3QgPT0gVEFSR0VUX09CSkVDVF9TVEFDS19NRU1PUlkpKSkK ICAgICB7CiAgICAgICBpZiAocmVhZGJ1ZiAhPSBOVUxMKQogCXJlcyA9IGRj YWNoZV94ZmVyX21lbW9yeSAob3BzLCB0YXJnZXRfZGNhY2hlLCBtZW1hZGRy LCByZWFkYnVmLApAQCAtMTI0NSw2ICsxMjUyLDE5IEBAIG1lbW9yeV94ZmVy X3BhcnRpYWwgKHN0cnVjdCB0YXJnZXRfb3BzICoKIAl9CiAgICAgfQogCisg IC8qIE1ha2Ugc3VyZSB0aGUgY2FjaGUgZ2V0cyB1cGRhdGVkIG5vIG1hdHRl ciB3aGF0IC0gaWYgd2UgYXJlIHdyaXRpbmcKKyAgICAgdG8gdGhlIHN0YWNr LCBldmVuIGlmIHRoaXMgd3JpdGUgaXMgbm90IHRhZ2dlZCBhcyBzdWNoLCB3 ZSBzdGlsbCBuZWVkCisgICAgIHRvIHVwZGF0ZSB0aGUgY2FjaGUuICovCisK KyAgaWYgKGluZgorICAgICAgJiYgcmVhZGJ1ZiA9PSBOVUxMCisgICAgICAm JiAhcmVnaW9uLT5hdHRyaWIuY2FjaGUKKyAgICAgICYmIHN0YWNrX2NhY2hl X2VuYWJsZWRfcAorICAgICAgJiYgb2JqZWN0ICE9IFRBUkdFVF9PQkpFQ1Rf U1RBQ0tfTUVNT1JZKQorICAgIHsKKyAgICAgIGRjYWNoZV91cGRhdGUgKHRh cmdldF9kY2FjaGUsIG1lbWFkZHIsICh2b2lkICopIHdyaXRlYnVmLCByZWdf bGVuKTsKKyAgICB9CisKICAgLyogSWYgbm9uZSBvZiB0aG9zZSBtZXRob2Rz IGZvdW5kIHRoZSBtZW1vcnkgd2Ugd2FudGVkLCBmYWxsIGJhY2sKICAgICAg dG8gYSB0YXJnZXQgcGFydGlhbCB0cmFuc2Zlci4gIE5vcm1hbGx5IGEgc2lu Z2xlIGNhbGwgdG8KICAgICAgdG9feGZlcl9wYXJ0aWFsIGlzIGVub3VnaDsg aWYgaXQgZG9lc24ndCByZWNvZ25pemUgYW4gb2JqZWN0CkBAIC0xMzA4LDgg KzEzMjgsOSBAQCB0YXJnZXRfeGZlcl9wYXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0 X29wcyAqCiAgIC8qIElmIHRoaXMgaXMgYSBtZW1vcnkgdHJhbnNmZXIsIGxl dCB0aGUgbWVtb3J5LXNwZWNpZmljIGNvZGUKICAgICAgaGF2ZSBhIGxvb2sg YXQgaXQgaW5zdGVhZC4gIE1lbW9yeSB0cmFuc2ZlcnMgYXJlIG1vcmUKICAg ICAgY29tcGxpY2F0ZWQuICAqLwotICBpZiAob2JqZWN0ID09IFRBUkdFVF9P QkpFQ1RfTUVNT1JZKQotICAgIHJldHZhbCA9IG1lbW9yeV94ZmVyX3BhcnRp YWwgKG9wcywgcmVhZGJ1Ziwgd3JpdGVidWYsIG9mZnNldCwgbGVuKTsKKyAg aWYgKG9iamVjdCA9PSBUQVJHRVRfT0JKRUNUX01FTU9SWSB8fCBvYmplY3Qg PT0gVEFSR0VUX09CSkVDVF9TVEFDS19NRU1PUlkpCisgICAgcmV0dmFsID0g bWVtb3J5X3hmZXJfcGFydGlhbCAob3BzLCBvYmplY3QsIHJlYWRidWYsCisJ CQkJICB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4pOwogICBlbHNlCiAgICAgewog ICAgICAgZW51bSB0YXJnZXRfb2JqZWN0IHJhd19vYmplY3QgPSBvYmplY3Q7 CkBAIC0xMzkxLDYgKzE0MTIsMjMgQEAgdGFyZ2V0X3JlYWRfbWVtb3J5IChD T1JFX0FERFIgbWVtYWRkciwgZwogICAgIHJldHVybiBFSU87CiB9CiAKKy8q IExpa2UgdGFyZ2V0X3JlYWRfbWVtb3J5LCBidXQgc3BlY2lmeSBleHBsaWNp dGx5IHRoYXQgdGhpcyBpcyBhIHJlYWQgZnJvbQorICAgdGhlIHRhcmdldCdz IHN0YWNrLiBUaGlzIG1heSB0cmlnZ2VyIGRpZmZlcmVudCBjYWNoZSBiZWhh dmlvci4gKi8KKworaW50Cit0YXJnZXRfcmVhZF9zdGFjayAoQ09SRV9BRERS IG1lbWFkZHIsIGdkYl9ieXRlICpteWFkZHIsIGludCBsZW4pCit7CisgIC8q IERpc3BhdGNoIHRvIHRoZSB0b3Btb3N0IHRhcmdldCwgbm90IHRoZSBmbGF0 dGVuZWQgY3VycmVudF90YXJnZXQuCisgICAgIE1lbW9yeSBhY2Nlc3NlcyBj aGVjayB0YXJnZXQtPnRvX2hhc18oYWxsXyltZW1vcnksIGFuZCB0aGUKKyAg ICAgZmxhdHRlbmVkIHRhcmdldCBkb2Vzbid0IGluaGVyaXQgdGhvc2UuICAq LworCisgIGlmICh0YXJnZXRfcmVhZCAoY3VycmVudF90YXJnZXQuYmVuZWF0 aCwgVEFSR0VUX09CSkVDVF9TVEFDS19NRU1PUlksIE5VTEwsCisJCSAgIG15 YWRkciwgbWVtYWRkciwgbGVuKSA9PSBsZW4pCisgICAgcmV0dXJuIDA7Cisg IGVsc2UKKyAgICByZXR1cm4gRUlPOworfQorCiBpbnQKIHRhcmdldF93cml0 ZV9tZW1vcnkgKENPUkVfQUREUiBtZW1hZGRyLCBjb25zdCBnZGJfYnl0ZSAq bXlhZGRyLCBpbnQgbGVuKQogewpJbmRleDogdGFyZ2V0LmgKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi90YXJn ZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjIKZGlmZiAtdSAtcCAt cjEuMTYyIHRhcmdldC5oCi0tLSB0YXJnZXQuaAkzMSBKdWwgMjAwOSAxNToy ODoyNyAtMDAwMAkxLjE2MgorKysgdGFyZ2V0LmgJMjUgQXVnIDIwMDkgMDA6 MjM6MTggLTAwMDAKQEAgLTIwMyw2ICsyMDMsMTAgQEAgZW51bSB0YXJnZXRf b2JqZWN0CiAgICAgIFRhcmdldCBpbXBsZW1lbnRhdGlvbnMgb2YgdG9feGZl cl9wYXJ0aWFsIG5ldmVyIG5lZWQgdG8gaGFuZGxlCiAgICAgIHRoaXMgb2Jq ZWN0LCBhbmQgbW9zdCBjYWxsZXJzIHNob3VsZCBub3QgdXNlIGl0LiAgKi8K ICAgVEFSR0VUX09CSkVDVF9SQVdfTUVNT1JZLAorICAvKiBNZW1vcnkga25v d24gdG8gYmUgcGFydCBvZiB0aGUgdGFyZ2V0J3Mgc3RhY2suIFRoaXMgaXMg Y2FjaGVkIGV2ZW4KKyAgICAgaWYgaXQgaXMgbm90IGluIGEgcmVnaW9uIG1h cmtlZCBhcyBzdWNoLCBzaW5jZSBpdCBpcyBrbm93biB0byBiZQorICAgICAi bm9ybWFsIiBSQU0uICAqLworICBUQVJHRVRfT0JKRUNUX1NUQUNLX01FTU9S WSwKICAgLyogS2VybmVsIFVud2luZCBUYWJsZS4gIFNlZSAiaWE2NC10ZGVw LmMiLiAgKi8KICAgVEFSR0VUX09CSkVDVF9VTldJTkRfVEFCTEUsCiAgIC8q IFRyYW5zZmVyIGF1eGlsbGlhcnkgdmVjdG9yLiAgKi8KQEAgLTY3Nyw2ICs2 ODEsOCBAQCBleHRlcm4gaW50IHRhcmdldF9yZWFkX3N0cmluZyAoQ09SRV9B RERSCiAKIGV4dGVybiBpbnQgdGFyZ2V0X3JlYWRfbWVtb3J5IChDT1JFX0FE RFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwgaW50IGxlbik7CiAKK2V4 dGVybiBpbnQgdGFyZ2V0X3JlYWRfc3RhY2sgKENPUkVfQUREUiBtZW1hZGRy LCBnZGJfYnl0ZSAqbXlhZGRyLCBpbnQgbGVuKTsKKwogZXh0ZXJuIGludCB0 YXJnZXRfd3JpdGVfbWVtb3J5IChDT1JFX0FERFIgbWVtYWRkciwgY29uc3Qg Z2RiX2J5dGUgKm15YWRkciwKIAkJCQlpbnQgbGVuKTsKIApJbmRleDogdmFs b3BzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9z cmMvc3JjL2dkYi92YWxvcHMuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y MjQKZGlmZiAtdSAtcCAtcjEuMjI0IHZhbG9wcy5jCi0tLSB2YWxvcHMuYwky MSBKdWwgMjAwOSAxODoxNTozMiAtMDAwMAkxLjIyNAorKysgdmFsb3BzLmMJ MjUgQXVnIDIwMDkgMDA6MjM6MTggLTAwMDAKQEAgLTU2NSw2ICs1NjUsMzIg QEAgdmFsdWVfb25lIChzdHJ1Y3QgdHlwZSAqdHlwZSwgZW51bSBsdmFsXwog ICByZXR1cm4gdmFsOwogfQogCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHZh bHVlX2F0LCB2YWx1ZV9hdF9sYXp5LCBhbmQgdmFsdWVfYXRfbGF6eV9zdGFj ay4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdmFsdWUgKgorZ2V0X3ZhbHVlX2F0 IChzdHJ1Y3QgdHlwZSAqdHlwZSwgQ09SRV9BRERSIGFkZHIsIGludCBsYXp5 KQoreworICBzdHJ1Y3QgdmFsdWUgKnZhbDsKKworICBpZiAoVFlQRV9DT0RF IChjaGVja190eXBlZGVmICh0eXBlKSkgPT0gVFlQRV9DT0RFX1ZPSUQpCisg ICAgZXJyb3IgKF8oIkF0dGVtcHQgdG8gZGVyZWZlcmVuY2UgYSBnZW5lcmlj IHBvaW50ZXIuIikpOworCisgIGlmIChsYXp5KQorICAgIHsKKyAgICAgIHZh bCA9IGFsbG9jYXRlX3ZhbHVlX2xhenkgKHR5cGUpOworICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIHZhbCA9IGFsbG9jYXRlX3ZhbHVlICh0eXBlKTsK KyAgICAgIHJlYWRfbWVtb3J5IChhZGRyLCB2YWx1ZV9jb250ZW50c19hbGxf cmF3ICh2YWwpLCBUWVBFX0xFTkdUSCAodHlwZSkpOworICAgIH0KKworICBW QUxVRV9MVkFMICh2YWwpID0gbHZhbF9tZW1vcnk7CisgIHNldF92YWx1ZV9h ZGRyZXNzICh2YWwsIGFkZHIpOworCisgIHJldHVybiB2YWw7Cit9CisKIC8q IFJldHVybiBhIHZhbHVlIHdpdGggdHlwZSBUWVBFIGxvY2F0ZWQgYXQgQURE Ui4KIAogICAgQ2FsbCB2YWx1ZV9hdCBvbmx5IGlmIHRoZSBkYXRhIG5lZWRz IHRvIGJlIGZldGNoZWQgaW1tZWRpYXRlbHk7CkBAIC01ODAsMTkgKzYwNiw3 IEBAIHZhbHVlX29uZSAoc3RydWN0IHR5cGUgKnR5cGUsIGVudW0gbHZhbF8K IHN0cnVjdCB2YWx1ZSAqCiB2YWx1ZV9hdCAoc3RydWN0IHR5cGUgKnR5cGUs IENPUkVfQUREUiBhZGRyKQogewotICBzdHJ1Y3QgdmFsdWUgKnZhbDsKLQot ICBpZiAoVFlQRV9DT0RFIChjaGVja190eXBlZGVmICh0eXBlKSkgPT0gVFlQ RV9DT0RFX1ZPSUQpCi0gICAgZXJyb3IgKF8oIkF0dGVtcHQgdG8gZGVyZWZl cmVuY2UgYSBnZW5lcmljIHBvaW50ZXIuIikpOwotCi0gIHZhbCA9IGFsbG9j YXRlX3ZhbHVlICh0eXBlKTsKLQotICByZWFkX21lbW9yeSAoYWRkciwgdmFs dWVfY29udGVudHNfYWxsX3JhdyAodmFsKSwgVFlQRV9MRU5HVEggKHR5cGUp KTsKLQotICBWQUxVRV9MVkFMICh2YWwpID0gbHZhbF9tZW1vcnk7Ci0gIHNl dF92YWx1ZV9hZGRyZXNzICh2YWwsIGFkZHIpOwotCi0gIHJldHVybiB2YWw7 CisgIHJldHVybiBnZXRfdmFsdWVfYXQgKHR5cGUsIGFkZHIsIDApOwogfQog CiAvKiBSZXR1cm4gYSBsYXp5IHZhbHVlIHdpdGggdHlwZSBUWVBFIGxvY2F0 ZWQgYXQgQUREUiAoY2YuIHZhbHVlX2F0KS4gICovCkBAIC02MDAsMTcgKzYx NCw3IEBAIHZhbHVlX2F0IChzdHJ1Y3QgdHlwZSAqdHlwZSwgQ09SRV9BRERS IGEKIHN0cnVjdCB2YWx1ZSAqCiB2YWx1ZV9hdF9sYXp5IChzdHJ1Y3QgdHlw ZSAqdHlwZSwgQ09SRV9BRERSIGFkZHIpCiB7Ci0gIHN0cnVjdCB2YWx1ZSAq dmFsOwotCi0gIGlmIChUWVBFX0NPREUgKGNoZWNrX3R5cGVkZWYgKHR5cGUp KSA9PSBUWVBFX0NPREVfVk9JRCkKLSAgICBlcnJvciAoXygiQXR0ZW1wdCB0 byBkZXJlZmVyZW5jZSBhIGdlbmVyaWMgcG9pbnRlci4iKSk7Ci0KLSAgdmFs ID0gYWxsb2NhdGVfdmFsdWVfbGF6eSAodHlwZSk7Ci0KLSAgVkFMVUVfTFZB TCAodmFsKSA9IGx2YWxfbWVtb3J5OwotICBzZXRfdmFsdWVfYWRkcmVzcyAo dmFsLCBhZGRyKTsKLQotICByZXR1cm4gdmFsOworICByZXR1cm4gZ2V0X3Zh bHVlX2F0ICh0eXBlLCBhZGRyLCAxKTsKIH0KIAogLyogQ2FsbGVkIG9ubHkg ZnJvbSB0aGUgdmFsdWVfY29udGVudHMgYW5kIHZhbHVlX2NvbnRlbnRzX2Fs bCgpCkBAIC02NTYsNyArNjYwLDEyIEBAIHZhbHVlX2ZldGNoX2xhenkgKHN0 cnVjdCB2YWx1ZSAqdmFsKQogICAgICAgaW50IGxlbmd0aCA9IFRZUEVfTEVO R1RIIChjaGVja190eXBlZGVmICh2YWx1ZV9lbmNsb3NpbmdfdHlwZSAodmFs KSkpOwogCiAgICAgICBpZiAobGVuZ3RoKQotCXJlYWRfbWVtb3J5IChhZGRy LCB2YWx1ZV9jb250ZW50c19hbGxfcmF3ICh2YWwpLCBsZW5ndGgpOworCXsK KwkgIGlmICh2YWx1ZV9zdGFjayAodmFsKSkKKwkgICAgcmVhZF9zdGFjayAo YWRkciwgdmFsdWVfY29udGVudHNfYWxsX3JhdyAodmFsKSwgbGVuZ3RoKTsK KwkgIGVsc2UKKwkgICAgcmVhZF9tZW1vcnkgKGFkZHIsIHZhbHVlX2NvbnRl bnRzX2FsbF9yYXcgKHZhbCksIGxlbmd0aCk7CisJfQogICAgIH0KICAgZWxz ZSBpZiAoVkFMVUVfTFZBTCAodmFsKSA9PSBsdmFsX3JlZ2lzdGVyKQogICAg IHsKSW5kZXg6IHZhbHVlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi92YWx1ZS5jLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjkzCmRpZmYgLXUgLXAgLXIxLjkzIHZhbHVlLmMKLS0tIHZh bHVlLmMJMTkgQXVnIDIwMDkgMTM6MDA6MjggLTAwMDAJMS45MworKysgdmFs dWUuYwkyNSBBdWcgMjAwOSAwMDoyMzoxOCAtMDAwMApAQCAtMTk2LDYgKzE5 NiwxMCBAQCBzdHJ1Y3QgdmFsdWUKICAgLyogSWYgdmFsdWUgaXMgYSB2YXJp YWJsZSwgaXMgaXQgaW5pdGlhbGl6ZWQgb3Igbm90LiAgKi8KICAgaW50IGlu aXRpYWxpemVkOwogCisgIC8qIElmIHZhbHVlIGlzIGZyb20gdGhlIHN0YWNr LiAgSWYgdGhpcyBpcyBzZXQsIHJlYWRfc3RhY2sgd2lsbCBiZQorICAgICB1 c2VkIGluc3RlYWQgb2YgcmVhZF9tZW1vcnkgdG8gZW5hYmxlIGV4dHJhIGNh Y2hpbmcuICAqLworICBpbnQgc3RhY2s7CisKICAgLyogQWN0dWFsIGNvbnRl bnRzIG9mIHRoZSB2YWx1ZS4gIFRhcmdldCBieXRlLW9yZGVyLiAgTlVMTCBv ciBub3QKICAgICAgdmFsaWQgaWYgbGF6eSBpcyBub256ZXJvLiAgKi8KICAg Z2RiX2J5dGUgKmNvbnRlbnRzOwpAQCAtNDI0LDYgKzQyOCwxOCBAQCBzZXRf dmFsdWVfbGF6eSAoc3RydWN0IHZhbHVlICp2YWx1ZSwgaW50CiAgIHZhbHVl LT5sYXp5ID0gdmFsOwogfQogCitpbnQKK3ZhbHVlX3N0YWNrIChzdHJ1Y3Qg dmFsdWUgKnZhbHVlKQoreworICByZXR1cm4gdmFsdWUtPnN0YWNrOworfQor Cit2b2lkCitzZXRfdmFsdWVfc3RhY2sgKHN0cnVjdCB2YWx1ZSAqdmFsdWUs IGludCB2YWwpCit7CisgIHZhbHVlLT5zdGFjayA9IHZhbDsKK30KKwogY29u c3QgZ2RiX2J5dGUgKgogdmFsdWVfY29udGVudHMgKHN0cnVjdCB2YWx1ZSAq dmFsdWUpCiB7CkluZGV4OiB2YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvdmFsdWUuaCx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4xNDgKZGlmZiAtdSAtcCAtcjEuMTQ4IHZhbHVl LmgKLS0tIHZhbHVlLmgJMTMgQXVnIDIwMDkgMTg6Mzk6MjAgLTAwMDAJMS4x NDgKKysrIHZhbHVlLmgJMjUgQXVnIDIwMDkgMDA6MjM6MTggLTAwMDAKQEAg LTIxNSw2ICsyMTUsOSBAQCBleHRlcm4gdm9pZCAqdmFsdWVfY29tcHV0ZWRf Y2xvc3VyZSAoc3RyCiBleHRlcm4gaW50IHZhbHVlX2xhenkgKHN0cnVjdCB2 YWx1ZSAqKTsKIGV4dGVybiB2b2lkIHNldF92YWx1ZV9sYXp5IChzdHJ1Y3Qg dmFsdWUgKnZhbHVlLCBpbnQgdmFsKTsKIAorZXh0ZXJuIGludCB2YWx1ZV9z dGFjayAoc3RydWN0IHZhbHVlICopOworZXh0ZXJuIHZvaWQgc2V0X3ZhbHVl X3N0YWNrIChzdHJ1Y3QgdmFsdWUgKnZhbHVlLCBpbnQgdmFsKTsKKwogLyog dmFsdWVfY29udGVudHMoKSBhbmQgdmFsdWVfY29udGVudHNfcmF3KCkgYm90 aCByZXR1cm4gdGhlIGFkZHJlc3MKICAgIG9mIHRoZSBnZGIgYnVmZmVyIHVz ZWQgdG8gaG9sZCBhIGNvcHkgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBsdmFs LgogICAgdmFsdWVfY29udGVudHMoKSBpcyB1c2VkIHdoZW4gdGhlIGNvbnRl bnRzIG9mIHRoZSBidWZmZXIgYXJlIG5lZWRlZApJbmRleDogZG9jL2dkYi50 ZXhpbmZvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv c3JjL3NyYy9nZGIvZG9jL2dkYi50ZXhpbmZvLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjYxNgpkaWZmIC11IC1wIC1yMS42MTYgZ2RiLnRleGluZm8KLS0t IGRvYy9nZGIudGV4aW5mbwkyMCBBdWcgMjAwOSAxODowMjo0OCAtMDAwMAkx LjYxNgorKysgZG9jL2dkYi50ZXhpbmZvCTI1IEF1ZyAyMDA5IDAwOjIzOjE5 IC0wMDAwCkBAIC04Mzk4LDMyICs4Mzk4LDQ3IEBAIGNoYXJhY3Rlci4KIEBz ZWN0aW9uIENhY2hpbmcgRGF0YSBvZiBSZW1vdGUgVGFyZ2V0cwogQGNpbmRl eCBjYWNoaW5nIGRhdGEgb2YgcmVtb3RlIHRhcmdldHMKIAotQHZhbHVle0dE Qk59IGNhbiBjYWNoZSBkYXRhIGV4Y2hhbmdlZCBiZXR3ZWVuIHRoZSBkZWJ1 Z2dlciBhbmQgYQorQHZhbHVle0dEQk59IGNhY2hlcyBkYXRhIGV4Y2hhbmdl ZCBiZXR3ZWVuIHRoZSBkZWJ1Z2dlciBhbmQgYQogcmVtb3RlIHRhcmdldCAo QHB4cmVme1JlbW90ZSBEZWJ1Z2dpbmd9KS4gIFN1Y2ggY2FjaGluZyBnZW5l cmFsbHkgaW1wcm92ZXMKIHBlcmZvcm1hbmNlLCBiZWNhdXNlIGl0IHJlZHVj ZXMgdGhlIG92ZXJoZWFkIG9mIHRoZSByZW1vdGUgcHJvdG9jb2wgYnkKLWJ1 bmRsaW5nIG1lbW9yeSByZWFkcyBhbmQgd3JpdGVzIGludG8gbGFyZ2UgY2h1 bmtzLiAgVW5mb3J0dW5hdGVseSwKLUB2YWx1ZXtHREJOfSBkb2VzIG5vdCBj dXJyZW50bHkga25vdyBhbnl0aGluZyBhYm91dCB2b2xhdGlsZQotcmVnaXN0 ZXJzLCBhbmQgdGh1cyBkYXRhIGNhY2hpbmcgd2lsbCBwcm9kdWNlIGluY29y cmVjdCByZXN1bHRzIHdoZW4KLXZvbGF0aWxlIHJlZ2lzdGVycyBhcmUgaW4g dXNlLgorYnVuZGxpbmcgbWVtb3J5IHJlYWRzIGFuZCB3cml0ZXMgaW50byBs YXJnZSBjaHVua3MuICBVbmZvcnR1bmF0ZWx5LCBzaW1wbHkKK2NhY2hpbmcg ZXZlcnl0aGluZyB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCByZXN1bHRzLCBz aW5jZSBAdmFsdWV7R0RCTn0gCitkb2VzIG5vdCBuZWNlc3NhcmlseSBrbm93 IGFueXRoaW5nIGFib3V0IHZvbGF0aWxlIHZhbHVlcywgbWVtb3J5LW1hcHBl ZCBJL08KK2FkZHJlc3NlcywgZXRjLiAgVGhlcmVmb3JlLCBieSBkZWZhdWx0 LCBAdmFsdWV7R0RCTn0gb25seSBjYWNoZXMgZGF0YQora25vd24gdG8gYmUg b24gdGhlIHN0YWNrLiAgT3RoZXIgcmVnaW9ucyBvZiBtZW1vcnkgY2FuIGJl IGV4cGxpY2l0bHkgbWFya2VkCitjYWNoZWFibGU7IHNlZSBAcHhyZWZ7TWVt b3J5IFJlZ2lvbiBBdHRyaWJ1dGVzfS4KIAogQHRhYmxlIEBjb2RlCiBAa2lu ZGV4IHNldCByZW1vdGVjYWNoZQogQGl0ZW0gc2V0IHJlbW90ZWNhY2hlIG9u CiBAaXRlbXggc2V0IHJlbW90ZWNhY2hlIG9mZgotU2V0IGNhY2hpbmcgc3Rh dGUgZm9yIHJlbW90ZSB0YXJnZXRzLiAgV2hlbiBAY29kZXtPTn0sIHVzZSBk YXRhCi1jYWNoaW5nLiAgQnkgZGVmYXVsdCwgdGhpcyBvcHRpb24gaXMgQGNv ZGV7T0ZGfS4KK1RoaXMgb3B0aW9uIG5vIGxvbmdlciBkb2VzIGFueXRoaW5n OyBpdCBleGlzdHMgZm9yIGNvbXBhdGliaWxpdHkKK3dpdGggb2xkIHNjcmlw dHMuCiAKIEBraW5kZXggc2hvdyByZW1vdGVjYWNoZQogQGl0ZW0gc2hvdyBy ZW1vdGVjYWNoZQotU2hvdyB0aGUgY3VycmVudCBzdGF0ZSBvZiBkYXRhIGNh Y2hpbmcgZm9yIHJlbW90ZSB0YXJnZXRzLgorU2hvdyB0aGUgY3VycmVudCBz dGF0ZSBvZiB0aGUgb2Jzb2xldGUgcmVtb3RlY2FjaGUgZmxhZy4KKworQGtp bmRleCBzZXQgc3RhY2stY2FjaGUKK0BpdGVtIHNldCBzdGFjay1jYWNoZSBv bgorQGl0ZW14IHNldCBzdGFjay1jYWNoZSBvZmYKK0VuYWJsZSBvciBkaXNh YmxlIGNhY2hpbmcgb2Ygc3RhY2sgYWNjZXNzZXMuICBXaGVuIEBjb2Rle09O fSwgdXNlCitjYWNoaW5nLiAgQnkgZGVmYXVsdCwgdGhpcyBvcHRpb24gaXMg QGNvZGV7T059LgorCitAa2luZGV4IHNob3cgc3RhY2stY2FjaGUKK0BpdGVt IHNob3cgc3RhY2stY2FjaGUKK1Nob3cgdGhlIGN1cnJlbnQgc3RhdGUgb2Yg ZGF0YSBjYWNoaW5nIGZvciBtZW1vcnkgYWNjZXNzZXMuCiAKIEBraW5kZXgg aW5mbyBkY2FjaGUKLUBpdGVtIGluZm8gZGNhY2hlCitAaXRlbSBpbmZvIGRj YWNoZSBAcntbfWxpbmVAcntdfQogUHJpbnQgdGhlIGluZm9ybWF0aW9uIGFi b3V0IHRoZSBkYXRhIGNhY2hlIHBlcmZvcm1hbmNlLiAgVGhlCi1pbmZvcm1h dGlvbiBkaXNwbGF5ZWQgaW5jbHVkZXM6IHRoZSBkY2FjaGUgd2lkdGggYW5k IGRlcHRoOyBhbmQgZm9yCi1lYWNoIGNhY2hlIGxpbmUsIGhvdyBtYW55IHRp bWVzIGl0IHdhcyByZWZlcmVuY2VkLCBhbmQgaXRzIGRhdGEgYW5kCi1zdGF0 ZSAoaW52YWxpZCwgZGlydHksIHZhbGlkKS4gIFRoaXMgY29tbWFuZCBpcyB1 c2VmdWwgZm9yIGRlYnVnZ2luZwotdGhlIGRhdGEgY2FjaGUgb3BlcmF0aW9u LgoraW5mb3JtYXRpb24gZGlzcGxheWVkIGluY2x1ZGVzIHRoZSBkY2FjaGUg d2lkdGggYW5kIGRlcHRoLCBhbmQgZm9yCitlYWNoIGNhY2hlIGxpbmUsIGl0 cyBudW1iZXIsIGFkZHJlc3MsIGFuZCBob3cgbWFueSB0aW1lcyBpdCB3YXMK K3JlZmVyZW5jZWQuICBUaGlzIGNvbW1hbmQgaXMgdXNlZnVsIGZvciBkZWJ1 Z2dpbmcgdGhlIGRhdGEgY2FjaGUKK29wZXJhdGlvbi4KKworSWYgYSBsaW5l IG51bWJlciBpcyBzcGVjaWZpZWQsIHRoZSBjb250ZW50cyBvZiB0aGF0IGxp bmUgd2lsbCBiZQorcHJpbnRlZCBpbiBoZXguCiBAZW5kIHRhYmxlCiAKIEBu b2RlIFNlYXJjaGluZyBNZW1vcnkK --000e0cd245bc79f38c0471ecb1e2--