From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14404 invoked by alias); 23 Sep 2002 15:21:53 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 14338 invoked from network); 23 Sep 2002 15:21:52 -0000 Received: from unknown (HELO devserv.devel.redhat.com) (66.187.233.200) by sources.redhat.com with SMTP; 23 Sep 2002 15:21:52 -0000 Received: from localhost (alexl@localhost) by devserv.devel.redhat.com (8.11.6/8.11.0) with ESMTP id g8NFLpE02518; Mon, 23 Sep 2002 11:21:51 -0400 X-Authentication-Warning: devserv.devel.redhat.com: alexl owned process doing -bs Date: Mon, 23 Sep 2002 08:21:00 -0000 From: Alexander Larsson X-X-Sender: alexl@devserv.devel.redhat.com To: Elena Zannoni cc: gdb@sources.redhat.com, Jim Blandy Subject: Re: External debug symbols In-Reply-To: <15755.14989.816244.777522@localhost.redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="279707962-333282630-1032794511=:26936" X-SW-Source: 2002-09/txt/msg00351.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --279707962-333282630-1032794511=:26936 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-length: 3975 Here comes a new patch that fixes some issues. On Fri, 20 Sep 2002, Elena Zannoni wrote: > Does the reread_symbols() function still work? To see this you need > to run the inferior, then w/o quitting from gdb, modify the > executable/recompile and then issue a 'run' command. That would cause > the excutable and symbols to be reread. It walks the list of existing > objfiles and updates those that need it, but it doesn't call > symbol_file_add, so the crc check would not be done and the 2 files > could get out of sync. I fixed reread_symbols so that it won't ever use an incorrect debug file. It doesn't do a full search though, so if you change the file and keep using separate debug files you better leave the debug file in the same place. reread_symbols is pretty ugly in general though. For instance, what if the new file is relocated to a different place? It copies the old section_offsets, so that would break i think. > > diff --exclude '*~' --exclude '*.orig' --exclude '*.rej' --exclude '.#*' --exclude '*.o' --exclude CVS --exclude SCCS --exclude RCS --exclude '.*.flags' --exclude .cvsignore --exclude .depend -ur gdb-5.2.1/gdb/objfiles.h gdb-5.2.1.separate_debug_symbols/gdb/objfiles.h > > --- gdb-5.2.1/gdb/objfiles.h Sat Jun 29 00:05:47 2002 > > +++ gdb-5.2.1.separate_debug_symbols/gdb/objfiles.h Mon Sep 16 13:15:15 2002 > > @@ -409,6 +409,9 @@ > > ExportEntry *export_list; > > int export_list_size; > > > > + struct objfile *separate_debug_objfile; > > + struct objfile *separate_debug_objfile_backlink; > > + > > Could you add some comments, here and elsewhere? I added some. > > + debugfile = find_separate_debug_file (objfile, name); > > + if (debugfile) > > + { > > + printf_filtered ("loading separate debug info from '%s'\n", debugfile); > > + > > + objfile->separate_debug_objfile = symbol_file_add (debugfile, from_tty, (addrs != NULL) ? &orig_addrs : NULL, 0, flags); > > > Suggest using a simple conditional instead of a conditional expression. Done. > > + }; > > + unsigned char *end; > > + > > + crc = ~crc & 0xffffffff; > > + for (end = buf + len; buf < end; ++buf) > > + crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8); > > + return ~crc & 0xffffffff;; > > +} > > + > > I don't think this function belongs in this file. It is general enough > that it could be pushed into utils.c. Maybe even into some directory > outside of gdb? It could be useful to other tools as well. Put it in utils.c > For the below, in theory is Ok, but I would suggest looking at the > function openp() (in source.c) and how it is used in the solib_open() > function in solib.c. The tricky part is going to be assuring that the > filename is portable, i.e. working on windows/dos systems where the > directory separator is '\'. Look at IS_DIR_SEPARATOR, IS_ABSOLUTE_PATH > in the libiberty directory. I don't want to use openp() because i don't want the first availible file. I want the first one that matches the checksum. I can't see how i can use openp() to accomplish that. > Once this is done, this change would need to be documented in the gdb > manual, and a testcase added to the testsuite. I really tried to make a testcase. I promise. I was just completely crushed by expect/dejagnu and the testsuite setup. I have a small piece of code that can be used with objcopy --add-section to generate a .gnu_debuglink section to test this. I tried it manually, and it works well. If anyone is willing to do the testsuite work I promise to help as much as I can. -- -------------------------------------------------------------------------- Alexander Larsson Red Hat, Inc alexl@redhat.com alla@lysator.liu.se He's an otherworldly drug-addicted firefighter trapped in a world he never made. She's a cynical Buddhist museum curator with the power to see death. They fight crime! --279707962-333282630-1032794511=:26936 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="gdb_debug2.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="gdb_debug2.patch" Content-length: 24156 ZGlmZiAtLWV4Y2x1ZGUgJyp+JyAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNs dWRlICcqLnJlaicgLS1leGNsdWRlICcuIyonIC0tZXhjbHVkZSAnKi5vJyAt LWV4Y2x1ZGUgQ1ZTIC0tZXhjbHVkZSBTQ0NTIC0tZXhjbHVkZSBSQ1MgLS1l eGNsdWRlICcuKi5mbGFncycgLS1leGNsdWRlIC5jdnNpZ25vcmUgLS1leGNs dWRlIC5kZXBlbmQgLXVyIGdkYi01LjIuMS9nZGIvYWNjb25maWcuaCBnZGIt NS4yLjEuc2VwYXJhdGVfZGVidWdfc3ltYm9scy9nZGIvYWNjb25maWcuaA0K LS0tIGdkYi01LjIuMS9nZGIvYWNjb25maWcuaAlTYXQgSmFuICA1IDE5OjM2 OjMyIDIwMDINCisrKyBnZGItNS4yLjEuc2VwYXJhdGVfZGVidWdfc3ltYm9s cy9nZGIvYWNjb25maWcuaAlNb24gU2VwIDE2IDE1OjI4OjM3IDIwMDINCkBA IC0xNzMsMyArMTczLDcgQEANCiANCiAvKiBuYXRpdmVmaWxlICovDQogI3Vu ZGVmIEdEQl9OTV9GSUxFDQorDQorLyogZGVidWdkaXIgKi8NCisjdW5kZWYg REVCVUdESVINCisNCmRpZmYgLS1leGNsdWRlICcqficgLS1leGNsdWRlICcq Lm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIC0tZXhjbHVkZSAnLiMqJyAtLWV4 Y2x1ZGUgJyoubycgLS1leGNsdWRlIENWUyAtLWV4Y2x1ZGUgU0NDUyAtLWV4 Y2x1ZGUgUkNTIC0tZXhjbHVkZSAnLiouZmxhZ3MnIC0tZXhjbHVkZSAuY3Zz aWdub3JlIC0tZXhjbHVkZSAuZGVwZW5kIC11ciBnZGItNS4yLjEvZ2RiL2Fj aW5jbHVkZS5tNCBnZGItNS4yLjEuc2VwYXJhdGVfZGVidWdfc3ltYm9scy9n ZGIvYWNpbmNsdWRlLm00DQotLS0gZ2RiLTUuMi4xL2dkYi9hY2luY2x1ZGUu bTQJTW9uIEFwciAxNSAwNjoyODo0OSAyMDAyDQorKysgZ2RiLTUuMi4xLnNl cGFyYXRlX2RlYnVnX3N5bWJvbHMvZ2RiL2FjaW5jbHVkZS5tNAlNb24gQXVn IDI2IDExOjE2OjQwIDIwMDINCkBAIC05NzYsMyArOTc2LDE4IEBADQogICAq KSBDQz0iJENDICRhbV9jdl9wcm9nX2NjX3N0ZGMiIDs7DQogZXNhYw0KIF0p DQorDQorZG5sIHdyaXR0ZW4gYnkgR3VpZG8gRHJhaGVpbSA8Z3VpZG9kQGdt eC5kZT4sIG9yaWdpbmFsIGJ5IEFsZXhhbmRyZSBPbGl2YSANCitkbmwgVmVy c2lvbiAxLjMgKDIwMDEvMDMvMDIpDQorZG5sIHNvdXJjZSBodHRwOi8vd3d3 LmdudS5vcmcvc29mdHdhcmUvYWMtYXJjaGl2ZS9NaXNjZWxsYW5lb3VzL2Fj X2RlZmluZV9kaXIuaHRtbA0KKw0KK0FDX0RFRlVOKFtBQ19ERUZJTkVfRElS XSwgWw0KKyAgdGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSIk YWNfZGVmYXVsdF9wcmVmaXgiDQorICB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9 IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nDQorICBhY19kZWZp bmVfZGlyPWBldmFsIGVjaG8gWyRdJDJgDQorICBhY19kZWZpbmVfZGlyPWBl dmFsIGVjaG8gWyRdYWNfZGVmaW5lX2RpcmANCisgIGlmZWxzZSgkMywgLA0K KyAgICBBQ19ERUZJTkVfVU5RVU9URUQoJDEsICIkYWNfZGVmaW5lX2RpciIp LA0KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoJDEsICIkYWNfZGVmaW5lX2Rp ciIsICQzKSkNCitdKQ0KKw0KZGlmZiAtLWV4Y2x1ZGUgJyp+JyAtLWV4Y2x1 ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgLS1leGNsdWRlICcuIyon IC0tZXhjbHVkZSAnKi5vJyAtLWV4Y2x1ZGUgQ1ZTIC0tZXhjbHVkZSBTQ0NT IC0tZXhjbHVkZSBSQ1MgLS1leGNsdWRlICcuKi5mbGFncycgLS1leGNsdWRl IC5jdnNpZ25vcmUgLS1leGNsdWRlIC5kZXBlbmQgLXVyIGdkYi01LjIuMS9n ZGIvY29uZmlndXJlLmluIGdkYi01LjIuMS5zZXBhcmF0ZV9kZWJ1Z19zeW1i b2xzL2dkYi9jb25maWd1cmUuaW4NCi0tLSBnZGItNS4yLjEvZ2RiL2NvbmZp Z3VyZS5pbglUaHUgTWFyIDI4IDA1OjI4OjAwIDIwMDINCisrKyBnZGItNS4y LjEuc2VwYXJhdGVfZGVidWdfc3ltYm9scy9nZGIvY29uZmlndXJlLmluCU1v biBBdWcgMjYgMTc6MDI6NDggMjAwMg0KQEAgLTIzNCw2ICsyMzQsMTQgQEAN CiBBQ19DSEVDS19MSUIoc29ja2V0LCBzb2NrZXRwYWlyKQ0KIEFDX0NIRUNL X0ZVTkNTKHNvY2tldHBhaXIpDQogDQorZGVidWdkaXI9JHtsaWJkaXJ9L2Rl YnVnDQorCSANCitBQ19BUkdfV0lUSChzZXBhcmF0ZS1kZWJ1Zy1kaXIsDQor WyAgLS13aXRoLXNlcGFyYXRlLWRlYnVnLWRpcj1wYXRoICAgTG9vayBmb3Ig Z2xvYmFsIHNlcGFyYXRlIGRlYnVnIGluZm8gaW4gdGhpcyBwYXRoIFtMSUJE SVIvZGVidWddXSwNCitbZGVidWdkaXI9IiR7d2l0aHZhbH0iXSkNCisJDQor QUNfREVGSU5FX0RJUihERUJVR0RJUiwgZGVidWdkaXIpDQorI0FDX0RFRklO RV9VTlFVT1RFRChERUJVR0RJUiwgIiRkZWJ1Z2RpciIpLA0KIA0KIEJGRF9O RUVEX0RFQ0xBUkFUSU9OKG1hbGxvYykNCiBCRkRfTkVFRF9ERUNMQVJBVElP TihyZWFsbG9jKQ0KZGlmZiAtLWV4Y2x1ZGUgJyp+JyAtLWV4Y2x1ZGUgJyou b3JpZycgLS1leGNsdWRlICcqLnJlaicgLS1leGNsdWRlICcuIyonIC0tZXhj bHVkZSAnKi5vJyAtLWV4Y2x1ZGUgQ1ZTIC0tZXhjbHVkZSBTQ0NTIC0tZXhj bHVkZSBSQ1MgLS1leGNsdWRlICcuKi5mbGFncycgLS1leGNsdWRlIC5jdnNp Z25vcmUgLS1leGNsdWRlIC5kZXBlbmQgLXVyIGdkYi01LjIuMS9nZGIvZGVm cy5oIGdkYi01LjIuMS5zZXBhcmF0ZV9kZWJ1Z19zeW1ib2xzL2dkYi9kZWZz LmgNCi0tLSBnZGItNS4yLjEvZ2RiL2RlZnMuaAlNb24gTWFyIDI1IDE3OjUw OjIwIDIwMDINCisrKyBnZGItNS4yLjEuc2VwYXJhdGVfZGVidWdfc3ltYm9s cy9nZGIvZGVmcy5oCU1vbiBTZXAgMjMgMTI6Mzc6MjMgMjAwMg0KQEAgLTU3 Nyw2ICs1NzcsOCBAQA0KIA0KIGV4dGVybiBjaGFyICpnZGJfcmVhbHBhdGgg KGNvbnN0IGNoYXIgKik7DQogDQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY2Fs Y19jcmMzMiAodW5zaWduZWQgbG9uZyBjcmMsIHVuc2lnbmVkIGNoYXIgKmJ1 Ziwgc2l6ZV90IGxlbik7DQorDQogLyogRnJvbSBkZW1hbmdsZS5jICovDQog DQogZXh0ZXJuIHZvaWQgc2V0X2RlbWFuZ2xpbmdfc3R5bGUgKGNoYXIgKik7 DQpkaWZmIC0tZXhjbHVkZSAnKn4nIC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4 Y2x1ZGUgJyoucmVqJyAtLWV4Y2x1ZGUgJy4jKicgLS1leGNsdWRlICcqLm8n IC0tZXhjbHVkZSBDVlMgLS1leGNsdWRlIFNDQ1MgLS1leGNsdWRlIFJDUyAt LWV4Y2x1ZGUgJy4qLmZsYWdzJyAtLWV4Y2x1ZGUgLmN2c2lnbm9yZSAtLWV4 Y2x1ZGUgLmRlcGVuZCAtdXIgZ2RiLTUuMi4xL2dkYi9vYmpmaWxlcy5jIGdk Yi01LjIuMS5zZXBhcmF0ZV9kZWJ1Z19zeW1ib2xzL2dkYi9vYmpmaWxlcy5j DQotLS0gZ2RiLTUuMi4xL2dkYi9vYmpmaWxlcy5jCVRodSBEZWMgIDYgMjE6 NTk6MTEgMjAwMQ0KKysrIGdkYi01LjIuMS5zZXBhcmF0ZV9kZWJ1Z19zeW1i b2xzL2dkYi9vYmpmaWxlcy5jCU1vbiBTZXAgMjMgMTM6MDc6MjQgMjAwMg0K QEAgLTMyNSw2ICszMjUsMzAgQEANCiAgIHJldHVybiAob2JqZmlsZSk7DQog fQ0KIA0KKy8qIFB1dCBvbmUgb2JqZWN0IGZpbGUgYmVmb3JlIGEgc3BlY2lm aWVkIG9uIGluIHRoZSBnbG9iYWwgbGlzdC4NCisgICBUaGlzIGNhbiBiZSB1 c2VkIHRvIG1ha2Ugc3VyZSBhbiBvYmplY3QgZmlsZSBpcyBkZXN0cm95ZWQg YmVmb3JlDQorICAgYW5vdGhlciB3aGVuIHVzaW5nIEFMTF9PQkpGSUxFU19T QUZFIHRvIGZyZWUgYWxsIG9iamZpbGVzLiAqLw0KK3ZvaWQNCitwdXRfb2Jq ZmlsZV9iZWZvcmUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLCBzdHJ1Y3Qg b2JqZmlsZSAqYmVmb3JlX3RoaXMpDQorew0KKyAgc3RydWN0IG9iamZpbGUg KipvYmpwOw0KKw0KKyAgdW5saW5rX29iamZpbGUgKG9iamZpbGUpOw0KKyAg DQorICBmb3IgKG9ianAgPSAmb2JqZWN0X2ZpbGVzOyAqb2JqcCAhPSBOVUxM OyBvYmpwID0gJigoKm9ianApLT5uZXh0KSkNCisgICAgew0KKyAgICAgIGlm ICgqb2JqcCA9PSBiZWZvcmVfdGhpcykNCisJew0KKwkgIG9iamZpbGUtPm5l eHQgPSAqb2JqcDsNCisJICAqb2JqcCA9IG9iamZpbGU7DQorCSAgcmV0dXJu Ow0KKwl9DQorICAgIH0NCisgIA0KKyAgaW50ZXJuYWxfZXJyb3IgKF9fRklM RV9fLCBfX0xJTkVfXywNCisJCSAgInB1dF9vYmpmaWxlX2JlZm9yZTogYmVm b3JlIG9iamZpbGUgbm90IGluIGxpc3QiKTsNCit9DQorDQogLyogUHV0IE9C SkZJTEUgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0LiAgKi8NCiANCiB2b2lk DQpAQCAtMzk3LDYgKzQyMSwxOCBAQA0KIHZvaWQNCiBmcmVlX29iamZpbGUg KHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQ0KIHsNCisgIGlmIChvYmpmaWxl LT5zZXBhcmF0ZV9kZWJ1Z19vYmpmaWxlKQ0KKyAgICB7DQorICAgICAgZnJl ZV9vYmpmaWxlIChvYmpmaWxlLT5zZXBhcmF0ZV9kZWJ1Z19vYmpmaWxlKTsN CisgICAgfQ0KKyAgDQorICBpZiAob2JqZmlsZS0+c2VwYXJhdGVfZGVidWdf b2JqZmlsZV9iYWNrbGluaykNCisgICAgew0KKyAgICAgIC8qIFdlIGZyZWVk IHRoZSBzZXBhcmF0ZSBkZWJ1ZyBmaWxlLCBtYWtlIHN1cmUgdGhlIGJhc2Ug b2JqZmlsZQ0KKwkgZG9lc24ndCByZWZlcmVuY2UgaXQuICAqLw0KKyAgICAg IG9iamZpbGUtPnNlcGFyYXRlX2RlYnVnX29iamZpbGVfYmFja2xpbmstPnNl cGFyYXRlX2RlYnVnX29iamZpbGUgPSBOVUxMOw0KKyAgICB9DQorICANCiAg IC8qIEZpcnN0IGRvIGFueSBzeW1ib2wgZmlsZSBzcGVjaWZpYyBhY3Rpb25z IHJlcXVpcmVkIHdoZW4gd2UgYXJlDQogICAgICBmaW5pc2hlZCB3aXRoIGEg cGFydGljdWxhciBzeW1ib2wgZmlsZS4gIE5vdGUgdGhhdCBpZiB0aGUgb2Jq ZmlsZQ0KICAgICAgaXMgdXNpbmcgcmV1c2FibGUgc3ltYm9sIGluZm9ybWF0 aW9uICh2aWEgbW1hbGxvYykgdGhlbiBlYWNoIG9mDQpkaWZmIC0tZXhjbHVk ZSAnKn4nIC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyAt LWV4Y2x1ZGUgJy4jKicgLS1leGNsdWRlICcqLm8nIC0tZXhjbHVkZSBDVlMg LS1leGNsdWRlIFNDQ1MgLS1leGNsdWRlIFJDUyAtLWV4Y2x1ZGUgJy4qLmZs YWdzJyAtLWV4Y2x1ZGUgLmN2c2lnbm9yZSAtLWV4Y2x1ZGUgLmRlcGVuZCAt dXIgZ2RiLTUuMi4xL2dkYi9vYmpmaWxlcy5oIGdkYi01LjIuMS5zZXBhcmF0 ZV9kZWJ1Z19zeW1ib2xzL2dkYi9vYmpmaWxlcy5oDQotLS0gZ2RiLTUuMi4x L2dkYi9vYmpmaWxlcy5oCVNhdCBKdW4gMjkgMDA6MDU6NDcgMjAwMg0KKysr IGdkYi01LjIuMS5zZXBhcmF0ZV9kZWJ1Z19zeW1ib2xzL2dkYi9vYmpmaWxl cy5oCU1vbiBTZXAgMjMgMTM6MDI6NTMgMjAwMg0KQEAgLTQwOSw2ICs0MDks MTUgQEANCiAgICAgRXhwb3J0RW50cnkgKmV4cG9ydF9saXN0Ow0KICAgICBp bnQgZXhwb3J0X2xpc3Rfc2l6ZTsNCiANCisgICAgLyogTGluayB0byBvYmpm aWxlIHRoYXQgY29udGFpbnMgdGhlIGRlYnVnIHN5bWJvbHMgZm9yIHRoaXMg b25lLg0KKyAgICAgICBPbmUgaXMgbG9hZGVkIGlmIHRoaXMgZmlsZSBoYXMg YW4gZGVidWcgbGluayB0byBhbiBleGlzdGluZw0KKyAgICAgICBkZWJ1ZyBm aWxlIHdpdGggdGhlIHJpZ2h0IGNoZWNrc3VtICovDQorICAgIHN0cnVjdCBv YmpmaWxlICpzZXBhcmF0ZV9kZWJ1Z19vYmpmaWxlOw0KKw0KKyAgICAvKiBJ ZiB0aGlzIGlzIGEgc2VwYXJhdGUgZGVidWcgb2JqZWN0LCB0aGlzIGlzIHVz ZWQgYXMgYSBsaW5rIHRvIHRoZQ0KKyAgICAgICBhY3R1YWwgZXhlY3V0YWJs ZSBvYmpmaWxlLiAqLw0KKyAgICBzdHJ1Y3Qgb2JqZmlsZSAqc2VwYXJhdGVf ZGVidWdfb2JqZmlsZV9iYWNrbGluazsNCisgICAgDQogICAgIC8qIFBsYWNl IHRvIHN0YXNoIHZhcmlvdXMgc3RhdGlzdGljcyBhYm91dCB0aGlzIG9iamZp bGUgKi8NCiAgICAgICBPQkpTVEFUUzsNCiAgIH07DQpAQCAtNTAwLDYgKzUw OSw4IEBADQogDQogZXh0ZXJuIGludCBidWlsZF9vYmpmaWxlX3NlY3Rpb25f dGFibGUgKHN0cnVjdCBvYmpmaWxlICopOw0KIA0KK2V4dGVybiB2b2lkIHB1 dF9vYmpmaWxlX2JlZm9yZSAoc3RydWN0IG9iamZpbGUgKiwgc3RydWN0IG9i amZpbGUgKik7DQorDQogZXh0ZXJuIHZvaWQgb2JqZmlsZV90b19mcm9udCAo c3RydWN0IG9iamZpbGUgKik7DQogDQogZXh0ZXJuIHZvaWQgdW5saW5rX29i amZpbGUgKHN0cnVjdCBvYmpmaWxlICopOw0KZGlmZiAtLWV4Y2x1ZGUgJyp+ JyAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgLS1leGNs dWRlICcuIyonIC0tZXhjbHVkZSAnKi5vJyAtLWV4Y2x1ZGUgQ1ZTIC0tZXhj bHVkZSBTQ0NTIC0tZXhjbHVkZSBSQ1MgLS1leGNsdWRlICcuKi5mbGFncycg LS1leGNsdWRlIC5jdnNpZ25vcmUgLS1leGNsdWRlIC5kZXBlbmQgLXVyIGdk Yi01LjIuMS9nZGIvc3ltZmlsZS5jIGdkYi01LjIuMS5zZXBhcmF0ZV9kZWJ1 Z19zeW1ib2xzL2dkYi9zeW1maWxlLmMNCi0tLSBnZGItNS4yLjEvZ2RiL3N5 bWZpbGUuYwlTYXQgSnVuIDIyIDE4OjQ5OjMzIDIwMDINCisrKyBnZGItNS4y LjEuc2VwYXJhdGVfZGVidWdfc3ltYm9scy9nZGIvc3ltZmlsZS5jCU1vbiBT ZXAgMjMgMTQ6NDk6MDUgMjAwMg0KQEAgLTE2MCw2ICsxNjAsOCBAQA0KIA0K IHN0YXRpYyB2b2lkIGluZm9fZXh0X2xhbmdfY29tbWFuZCAoY2hhciAqYXJn cywgaW50IGZyb21fdHR5KTsNCiANCitzdGF0aWMgY2hhciAqZmluZF9zZXBh cmF0ZV9kZWJ1Z19maWxlIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwgY29u c3QgY2hhciAqbmFtZSk7DQorDQogc3RhdGljIHZvaWQgaW5pdF9maWxlbmFt ZV9sYW5ndWFnZV90YWJsZSAodm9pZCk7DQogDQogdm9pZCBfaW5pdGlhbGl6 ZV9zeW1maWxlICh2b2lkKTsNCkBAIC04MzYsNyArODM4LDEyIEBADQogew0K ICAgc3RydWN0IG9iamZpbGUgKm9iamZpbGU7DQogICBzdHJ1Y3QgcGFydGlh bF9zeW10YWIgKnBzeW10YWI7DQorICBjaGFyICpkZWJ1Z2ZpbGU7DQogICBi ZmQgKmFiZmQ7DQorICBzdHJ1Y3Qgc2VjdGlvbl9hZGRyX2luZm8gb3JpZ19h ZGRyczsNCisgIA0KKyAgaWYgKGFkZHJzKQ0KKyAgICBvcmlnX2FkZHJzID0g KmFkZHJzOw0KIA0KICAgLyogT3BlbiBhIGJmZCBmb3IgdGhlIGZpbGUsIGFu ZCBnaXZlIHVzZXIgYSBjaGFuY2UgdG8gYnVycCBpZiB3ZSdkIGJlDQogICAg ICBpbnRlcmFjdGl2ZWx5IHdpcGluZyBvdXQgYW55IGV4aXN0aW5nIHN5bWJv bHMuICAqLw0KQEAgLTkyNiw2ICs5MzMsMjggQEANCiAgIGlmICh0YXJnZXRf bmV3X29iamZpbGVfaG9vaykNCiAgICAgdGFyZ2V0X25ld19vYmpmaWxlX2hv b2sgKG9iamZpbGUpOw0KIA0KKyAgZGVidWdmaWxlID0gZmluZF9zZXBhcmF0 ZV9kZWJ1Z19maWxlIChvYmpmaWxlLCBuYW1lKTsNCisgIGlmIChkZWJ1Z2Zp bGUpDQorICAgIHsNCisgICAgICBwcmludGZfZmlsdGVyZWQgKCJsb2FkaW5n IHNlcGFyYXRlIGRlYnVnIGluZm8gZnJvbSAnJXMnXG4iLCBkZWJ1Z2ZpbGUp Ow0KKw0KKyAgICAgIGlmIChhZGRycyAhPSBOVUxMKQ0KKwl7DQorCSAgb2Jq ZmlsZS0+c2VwYXJhdGVfZGVidWdfb2JqZmlsZSA9IHN5bWJvbF9maWxlX2Fk ZCAoZGVidWdmaWxlLCBmcm9tX3R0eSwgJm9yaWdfYWRkcnMsIDAsIGZsYWdz KTsNCisJfQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIG9iamZpbGUtPnNlcGFy YXRlX2RlYnVnX29iamZpbGUgPSBzeW1ib2xfZmlsZV9hZGQgKGRlYnVnZmls ZSwgZnJvbV90dHksIE5VTEwsIDAsIGZsYWdzKTsNCisJfQ0KKyAgICAgIG9i amZpbGUtPnNlcGFyYXRlX2RlYnVnX29iamZpbGUtPnNlcGFyYXRlX2RlYnVn X29iamZpbGVfYmFja2xpbmsgPSBvYmpmaWxlOw0KKyAgICAgIA0KKyAgICAg IC8qIFB1dCB0aGUgc2VwYXJhdGUgZGVidWcgb2JqZWN0IGJlZm9yZSB0aGUg bm9ybWFsIG9uZSwgdGhpcyBpcyBzbyB0aGF0DQorICAgICAgICAgdXNhZ2Ug b2YgdGhlIEFMTF9PQkpGSUxFU19TQUZFIG1hY3JvIHdpbGwgc3RheSBzYWZl LiAqLw0KKyAgICAgIHB1dF9vYmpmaWxlX2JlZm9yZSAob2JqZmlsZS0+c2Vw YXJhdGVfZGVidWdfb2JqZmlsZSwgb2JqZmlsZSk7DQorICAgICAgDQorICAg ICAgeGZyZWUgKGRlYnVnZmlsZSk7DQorICAgIH0NCisgIA0KICAgcmV0dXJu IChvYmpmaWxlKTsNCiB9DQogDQpAQCAtOTg1LDYgKzEwMTQsMTQ2IEBADQog I2VuZGlmDQogfQ0KIA0KK3N0YXRpYyBjaGFyICoNCitnZXRfZGVidWdfbGlu a19pbmZvIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwgdW5zaWduZWQgbG9u ZyAqY3JjMzJfb3V0KQ0KK3sNCisgIGFzZWN0aW9uICpzZWN0Ow0KKyAgYmZk X3NpemVfdHlwZSBkZWJ1Z2xpbmtfc2l6ZTsNCisgIHVuc2lnbmVkIGxvbmcg Y3JjMzI7DQorICBjaGFyICpjb250ZW50czsNCisgIGludCBjcmNfb2Zmc2V0 Ow0KKyAgdW5zaWduZWQgY2hhciAqY3JjX2RhdGE7DQorICB1bnNpZ25lZCBj aGFyICpwOw0KKyAgDQorICBzZWN0ID0gYmZkX2dldF9zZWN0aW9uX2J5X25h bWUgKG9iamZpbGUtPm9iZmQsICIuZ251X2RlYnVnbGluayIpOw0KKw0KKyAg aWYgKHNlY3QgPT0gTlVMTCkNCisgICAgcmV0dXJuIE5VTEw7DQorDQorICBk ZWJ1Z2xpbmtfc2l6ZSA9IGJmZF9zZWN0aW9uX3NpemUgKG9iamZpbGUtPm9i ZmQsIHNlY3QpOw0KKyAgDQorICBjb250ZW50cyA9IHhtYWxsb2MgKGRlYnVn bGlua19zaXplKTsNCisgIGJmZF9nZXRfc2VjdGlvbl9jb250ZW50cyAob2Jq ZmlsZS0+b2JmZCwgc2VjdCwgY29udGVudHMsDQorCQkJICAgIChmaWxlX3B0 cikwLCAoYmZkX3NpemVfdHlwZSlkZWJ1Z2xpbmtfc2l6ZSk7DQorDQorICAv KiBDcmMgdmFsdWUgaXMgc3RvcmVkIGFmdGVyIHRoZSBmaWxlbmFtZSwgYWxp Z25lZCB1cCB0byA0IGJ5dGVzLiAqLw0KKyAgY3JjX29mZnNldCA9IHN0cmxl biAoY29udGVudHMpICsgMTsNCisgIGlmIChjcmNfb2Zmc2V0ICYgMykNCisg ICAgY3JjX29mZnNldCArPSA0IC0gKGNyY19vZmZzZXQgJiAzKTsNCisgIGNy Y19kYXRhID0gY29udGVudHMgKyBjcmNfb2Zmc2V0Ow0KKw0KKyAgY3JjMzIg PSAwOw0KKyAgaWYgKFRBUkdFVF9CWVRFX09SREVSID09IEJGRF9FTkRJQU5f QklHKQ0KKyAgICB7DQorICAgICAgZm9yIChwID0gY3JjX2RhdGE7IHAgPCBj cmNfZGF0YSArIDQ7ICsrcCkNCisJY3JjMzIgPSAoY3JjMzIgPDwgOCkgfCAq cDsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAgZm9yIChwID0g Y3JjX2RhdGEgKyA0IC0gMTsgcCA+PSBjcmNfZGF0YTsgLS1wKQ0KKwljcmMz MiA9IChjcmMzMiA8PCA4KSB8ICpwOw0KKyAgICB9DQorICANCisgICpjcmMz Ml9vdXQgPSBjcmMzMjsNCisgIHJldHVybiBjb250ZW50czsNCit9DQorDQor c3RhdGljIGludA0KK3NlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChjb25z dCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGNyYykNCit7DQorICB1bnNp Z25lZCBsb25nIGZpbGVfY3JjID0gMDsNCisgIGludCBmZDsNCisgIGNoYXIg YnVmZmVyWzgqMTAyNF07DQorICBpbnQgY291bnQ7DQorDQorICBmZCA9IG9w ZW4gKG5hbWUsIE9fUkRPTkxZKTsNCisgIGlmIChmZCA8IDApDQorICAgIHJl dHVybiAwOw0KKw0KKyAgd2hpbGUgKChjb3VudCA9IHJlYWQgKGZkLCBidWZm ZXIsIHNpemVvZiAoYnVmZmVyKSkpID4gMCkNCisgICAgZmlsZV9jcmMgPSBj YWxjX2NyYzMyIChmaWxlX2NyYywgYnVmZmVyLCBjb3VudCk7DQorDQorICBj bG9zZSAoZmQpOw0KKw0KKyAgcmV0dXJuIGNyYyA9PSBmaWxlX2NyYzsNCit9 DQorDQorc3RhdGljIGNoYXIgKmRlYnVnX2ZpbGVfc2VhcmNoX3BhdGggPSBO VUxMOw0KKw0KK3N0YXRpYyBjaGFyICoNCitmaW5kX3NlcGFyYXRlX2RlYnVn X2ZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLCBjb25zdCBjaGFyICpu YW1lKQ0KK3sNCisgIGFzZWN0aW9uICpzZWN0Ow0KKyAgY2hhciAqYmFzZW5h bWU7DQorICBjaGFyICpkaXI7DQorICBjaGFyICpkZWJ1Z2ZpbGU7DQorICBj aGFyICpuYW1lX2NvcHk7DQorICBiZmRfc2l6ZV90eXBlIGRlYnVnbGlua19z aXplOw0KKyAgdW5zaWduZWQgbG9uZyBjcmMzMjsNCisgIHVuc2lnbmVkIGNo YXIgKnA7DQorDQorICBiYXNlbmFtZSA9IGdldF9kZWJ1Z19saW5rX2luZm8g KG9iamZpbGUsICZjcmMzMik7DQorDQorICBpZiAoYmFzZW5hbWUgPT0gTlVM TCkNCisgICAgcmV0dXJuIE5VTEw7DQorICANCisgIGRpciA9IHhzdHJkdXAg KG5hbWUpOw0KKyAgcCA9IHN0cnJjaHIgKGRpciwgJy8nKTsNCisgIGlmIChw ICE9IE5VTEwpDQorICAgIHsNCisgICAgICAqKHArMSkgPSAwOw0KKyAgICB9 DQorICBlbHNlDQorICAgIHsNCisgICAgICAqZGlyID0gMDsNCisgICAgfQ0K Kw0KKyAgZGVidWdmaWxlID0gYWxsb2NhIChzdHJsZW4gKGRlYnVnX2ZpbGVf c2VhcmNoX3BhdGgpICsgMSArDQorCQkgICAgICBzdHJsZW4gKGRpcikgKyBz dHJsZW4gKCIuZGVidWcvIikgKyBzdHJsZW4gKGJhc2VuYW1lKSArIDEpOw0K Kw0KKyAgLyogRmlyc3QgdHJ5IGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0 aGUgb3JpZ2luYWwgZmlsZTogKi8NCisgIHN0cmNweSAoZGVidWdmaWxlLCBk aXIpOw0KKyAgc3RyY2F0IChkZWJ1Z2ZpbGUsIGJhc2VuYW1lKTsNCisNCisg IGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoZGVidWdmaWxlLCBj cmMzMikpDQorICAgIHsNCisgICAgICB4ZnJlZSAoYmFzZW5hbWUpOw0KKyAg ICAgIHhmcmVlIChkaXIpOw0KKyAgICAgIHJldHVybiB4c3RyZHVwIChkZWJ1 Z2ZpbGUpOw0KKyAgICB9DQorICANCisgIC8qIFRoZW4gdHJ5IGluIGEgc3Vi ZGlyZWN0b3J5IGNhbGxlZCAuZGVidWcgKi8NCisgIHN0cmNweSAoZGVidWdm aWxlLCBkaXIpOw0KKyAgc3RyY2F0IChkZWJ1Z2ZpbGUsICIuZGVidWcvIik7 DQorICBzdHJjYXQgKGRlYnVnZmlsZSwgYmFzZW5hbWUpOw0KKw0KKyAgaWYg KHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChkZWJ1Z2ZpbGUsIGNyYzMy KSkNCisgICAgew0KKyAgICAgIHhmcmVlIChiYXNlbmFtZSk7DQorICAgICAg eGZyZWUgKGRpcik7DQorICAgICAgcmV0dXJuIHhzdHJkdXAgKGRlYnVnZmls ZSk7DQorICAgIH0NCisgIA0KKyAgLyogVGhlbiB0cnkgaW4gdGhlIGdsb2Jh bCBkZWJ1Z2ZpbGUgZGlyZWN0b3J5ICovDQorICBzdHJjcHkgKGRlYnVnZmls ZSwgZGVidWdfZmlsZV9zZWFyY2hfcGF0aCk7DQorICBzdHJjYXQgKGRlYnVn ZmlsZSwgIi8iKTsNCisgIHN0cmNhdCAoZGVidWdmaWxlLCBkaXIpOw0KKyAg c3RyY2F0IChkZWJ1Z2ZpbGUsICIvIik7DQorICBzdHJjYXQgKGRlYnVnZmls ZSwgYmFzZW5hbWUpOw0KKw0KKyAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVf ZXhpc3RzIChkZWJ1Z2ZpbGUsIGNyYzMyKSkNCisgICAgew0KKyAgICAgIHhm cmVlIChiYXNlbmFtZSk7DQorICAgICAgeGZyZWUgKGRpcik7DQorICAgICAg cmV0dXJuIHhzdHJkdXAgKGRlYnVnZmlsZSk7DQorICAgIH0NCisgIA0KKyAg eGZyZWUgKGJhc2VuYW1lKTsNCisgIHhmcmVlIChkaXIpOw0KKyAgcmV0dXJu IE5VTEw7DQorfQ0KKw0KKw0KIC8qIFRoaXMgaXMgdGhlIHN5bWJvbC1maWxl IGNvbW1hbmQuICBSZWFkIHRoZSBmaWxlLCBhbmFseXplIGl0cw0KICAgIHN5 bWJvbHMsIGFuZCBhZGQgYSBzdHJ1Y3Qgc3ltdGFiIHRvIGEgc3ltdGFiIGxp c3QuICBUaGUgc3ludGF4IG9mDQogICAgdGhlIGNvbW1hbmQgaXMgcmF0aGVy IGJpemFycmUtLSgxKSBidWlsZGFyZ3YgaW1wbGVtZW50cyB2YXJpb3VzDQpA QCAtMTYzOSw2ICsxODA4LDggQEANCiAgIGxvbmcgbmV3X21vZHRpbWU7DQog ICBpbnQgcmVyZWFkX29uZSA9IDA7DQogICBzdHJ1Y3Qgc3RhdCBuZXdfc3Rh dGJ1ZjsNCisgIGNoYXIgKmRlYnVnX2ZpbGU7DQorICB1bnNpZ25lZCBsb25n IGNyYzMyOw0KICAgaW50IHJlczsNCiANCiAgIC8qIFdpdGggdGhlIGFkZGl0 aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXMsIHRoaXMgc2hvdWxkIGJlIG1vZGlm aWVkLA0KQEAgLTE4MjIsNiArMTk5MywzMCBAQA0KIAkgICAgICAgICBuZWVk cyB0byBrZWVwIHRyYWNrIG9mIChzdWNoIGFzIF9zaWd0cmFtcCwgb3Igd2hh dGV2ZXIpLiAgKi8NCiANCiAJICAgICAgVEFSR0VUX1NZTUZJTEVfUE9TVFJF QUQgKG9iamZpbGUpOw0KKw0KKwkgICAgICAvKiBWZXJpZnkgdGhlIGNoZWNr c3VtIG9mIGEgcHJldmlvdXNseSBsb2FkZWQgc2VwYXJhdGUgZGVidWcgZmls ZS4gKi8NCisJICAgICAgaWYgKG9iamZpbGUtPnNlcGFyYXRlX2RlYnVnX29i amZpbGUpDQorCQl7DQorCQkgIHByaW50ZiAoInJlcmVhZCBzZXAgZGVidWcg b2JqZmlsZVxuIik7DQorCQkgIGRlYnVnX2ZpbGUgPSBnZXRfZGVidWdfbGlu a19pbmZvIChvYmpmaWxlLCAmY3JjMzIpOw0KKwkJICBpZiAoZGVidWdfZmls ZSkNCisJCSAgICB7DQorCQkgICAgICBpZiAoIXNlcGFyYXRlX2RlYnVnX2Zp bGVfZXhpc3RzIChvYmpmaWxlLT5zZXBhcmF0ZV9kZWJ1Z19vYmpmaWxlLT5u YW1lLCBjcmMzMikpDQorCQkJew0KKwkJCSAgcHJpbnRmICgicmVtb3Zpbmcg aW52YWxpZCBzZXBhcmF0ZSBkZWJ1ZyBzeW1ib2xzXG4iKTsNCisJCQkgIC8q IFRoZSBvbGQgc2VwYXJhdGUgZGVidWcgc3ltYm9scyBmaWxlIGlzIGludmFs aWQgKi8NCisJCQkgIGZyZWVfb2JqZmlsZSAob2JqZmlsZS0+c2VwYXJhdGVf ZGVidWdfb2JqZmlsZSk7DQorCQkJfQ0KKwkJICAgICAgeGZyZWUgKGRlYnVn X2ZpbGUpOw0KKwkJICAgIH0NCisJCSAgZWxzZQ0KKwkJICAgIHsNCisJCSAg ICAgIHByaW50ZiAoInJlbW92aW5nIGRlYnVnIHN5bWJvbHMsIHNpbmNlIGkg Zm91bmQgbm8gZGVidWcgbGlua1xuIik7DQorCQkgICAgICAvKiBObyBtb3Jl IGRlYnVnIGxpbmssIGtpbGwgb2xkIHNlcGFyYXRlIGRlYnVnIHN5bWJvbHMg Ki8NCisJCSAgICAgIGZyZWVfb2JqZmlsZSAob2JqZmlsZS0+c2VwYXJhdGVf ZGVidWdfb2JqZmlsZSk7DQorCQkgICAgfQ0KKwkJfQ0KKwkgICAgICANCiAJ ICAgIH0NCiAJfQ0KICAgICB9DQpAQCAtMzMzNiw0ICszNTMxLDE3IEBADQog CQkgICJjYWNoZS5cbiIsDQogCQkgICZzZXRsaXN0KSwNCiAgICAgICZzaG93 bGlzdCk7DQorDQorICBkZWJ1Z19maWxlX3NlYXJjaF9wYXRoID0geHN0cmR1 cCAoREVCVUdESVIpOw0KKyAgYyA9IGFkZF9zZXRfY21kICgiZGVidWctZmls ZS1zZWFyY2gtcGF0aCIsIGNsYXNzX3N1cHBvcnQsIHZhcl9zdHJpbmcsDQor CQkgICAoY2hhciAqKSAmZGVidWdfZmlsZV9zZWFyY2hfcGF0aCwNCisJCSAg ICJTZXQgdGhlIHNlYXJjaCBwYXRoIGZvciBsb2FkaW5nIHNlcGFyYXRlIGRl YnVnIHN5bWJvbHMuXG4iDQorCQkgICAiU2VwYXJhdGUgZGVidWcgc3ltYm9s cyBhcmUgZmlyc3Qgc2VhcmNoZWQgZm9yIGluIHRoZSBzYW1lXG4iDQorCQkg ICAiZGlyZWN0b3J5IGFzIHRoZSBiaW5hcnksIHRoZW4gaW4gdGhlIC5kZWJ1 ZyBzdWJkaXJlY3RvcnksXG4iDQorCQkgICAiYW5kIGxhc3RseSBhdCB0aGUg cGF0aCBvZiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBiaW5hcnkgd2l0aFxuIg0K KwkJICAgInRoZSBnbG9iYWwgZGVidWctZmlsZSBzZWFyY2ggcGF0aCBwcmVw ZW5kZWRcbiIsDQorCQkgICAmc2V0bGlzdCk7DQorICBhZGRfc2hvd19mcm9t X3NldCAoYywgJnNob3dsaXN0KTsNCisgIGMtPmNvbXBsZXRlciA9IGZpbGVu YW1lX2NvbXBsZXRlcjsNCisNCiB9DQpkaWZmIC0tZXhjbHVkZSAnKn4nIC0t ZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyAtLWV4Y2x1ZGUg Jy4jKicgLS1leGNsdWRlICcqLm8nIC0tZXhjbHVkZSBDVlMgLS1leGNsdWRl IFNDQ1MgLS1leGNsdWRlIFJDUyAtLWV4Y2x1ZGUgJy4qLmZsYWdzJyAtLWV4 Y2x1ZGUgLmN2c2lnbm9yZSAtLWV4Y2x1ZGUgLmRlcGVuZCAtdXIgZ2RiLTUu Mi4xL2dkYi91dGlscy5jIGdkYi01LjIuMS5zZXBhcmF0ZV9kZWJ1Z19zeW1i b2xzL2dkYi91dGlscy5jDQotLS0gZ2RiLTUuMi4xL2dkYi91dGlscy5jCVRo dSBNYXIgMjggMDU6Mjg6MDEgMjAwMg0KKysrIGdkYi01LjIuMS5zZXBhcmF0 ZV9kZWJ1Z19zeW1ib2xzL2dkYi91dGlscy5jCU1vbiBTZXAgMjMgMTI6Mzc6 MDUgMjAwMg0KQEAgLTI1NjMsMyArMjU2Myw2OSBAQA0KICAgcmV0dXJuIHhz dHJkdXAgKGZpbGVuYW1lKTsNCiAjZW5kaWYNCiB9DQorDQordW5zaWduZWQg bG9uZw0KK2NhbGNfY3JjMzIgKHVuc2lnbmVkIGxvbmcgY3JjLCB1bnNpZ25l ZCBjaGFyICpidWYsIHNpemVfdCBsZW4pDQorew0KKyAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGxvbmcgY3JjMzJfdGFibGVbMjU2XSA9DQorICAgIHsNCisg ICAgICAweDAwMDAwMDAwLCAweDc3MDczMDk2LCAweGVlMGU2MTJjLCAweDk5 MDk1MWJhLCAweDA3NmRjNDE5LA0KKyAgICAgIDB4NzA2YWY0OGYsIDB4ZTk2 M2E1MzUsIDB4OWU2NDk1YTMsIDB4MGVkYjg4MzIsIDB4NzlkY2I4YTQsDQor ICAgICAgMHhlMGQ1ZTkxZSwgMHg5N2QyZDk4OCwgMHgwOWI2NGMyYiwgMHg3 ZWIxN2NiZCwgMHhlN2I4MmQwNywNCisgICAgICAweDkwYmYxZDkxLCAweDFk YjcxMDY0LCAweDZhYjAyMGYyLCAweGYzYjk3MTQ4LCAweDg0YmU0MWRlLA0K KyAgICAgIDB4MWFkYWQ0N2QsIDB4NmRkZGU0ZWIsIDB4ZjRkNGI1NTEsIDB4 ODNkMzg1YzcsIDB4MTM2Yzk4NTYsDQorICAgICAgMHg2NDZiYThjMCwgMHhm ZDYyZjk3YSwgMHg4YTY1YzllYywgMHgxNDAxNWM0ZiwgMHg2MzA2NmNkOSwN CisgICAgICAweGZhMGYzZDYzLCAweDhkMDgwZGY1LCAweDNiNmUyMGM4LCAw eDRjNjkxMDVlLCAweGQ1NjA0MWU0LA0KKyAgICAgIDB4YTI2NzcxNzIsIDB4 M2MwM2U0ZDEsIDB4NGIwNGQ0NDcsIDB4ZDIwZDg1ZmQsIDB4YTUwYWI1NmIs DQorICAgICAgMHgzNWI1YThmYSwgMHg0MmIyOTg2YywgMHhkYmJiYzlkNiwg MHhhY2JjZjk0MCwgMHgzMmQ4NmNlMywNCisgICAgICAweDQ1ZGY1Yzc1LCAw eGRjZDYwZGNmLCAweGFiZDEzZDU5LCAweDI2ZDkzMGFjLCAweDUxZGUwMDNh LA0KKyAgICAgIDB4YzhkNzUxODAsIDB4YmZkMDYxMTYsIDB4MjFiNGY0YjUs IDB4NTZiM2M0MjMsIDB4Y2ZiYTk1OTksDQorICAgICAgMHhiOGJkYTUwZiwg MHgyODAyYjg5ZSwgMHg1ZjA1ODgwOCwgMHhjNjBjZDliMiwgMHhiMTBiZTky NCwNCisgICAgICAweDJmNmY3Yzg3LCAweDU4Njg0YzExLCAweGMxNjExZGFi LCAweGI2NjYyZDNkLCAweDc2ZGM0MTkwLA0KKyAgICAgIDB4MDFkYjcxMDYs IDB4OThkMjIwYmMsIDB4ZWZkNTEwMmEsIDB4NzFiMTg1ODksIDB4MDZiNmI1 MWYsDQorICAgICAgMHg5ZmJmZTRhNSwgMHhlOGI4ZDQzMywgMHg3ODA3Yzlh MiwgMHgwZjAwZjkzNCwgMHg5NjA5YTg4ZSwNCisgICAgICAweGUxMGU5ODE4 LCAweDdmNmEwZGJiLCAweDA4NmQzZDJkLCAweDkxNjQ2Yzk3LCAweGU2NjM1 YzAxLA0KKyAgICAgIDB4NmI2YjUxZjQsIDB4MWM2YzYxNjIsIDB4ODU2NTMw ZDgsIDB4ZjI2MjAwNGUsIDB4NmMwNjk1ZWQsDQorICAgICAgMHgxYjAxYTU3 YiwgMHg4MjA4ZjRjMSwgMHhmNTBmYzQ1NywgMHg2NWIwZDljNiwgMHgxMmI3 ZTk1MCwNCisgICAgICAweDhiYmViOGVhLCAweGZjYjk4ODdjLCAweDYyZGQx ZGRmLCAweDE1ZGEyZDQ5LCAweDhjZDM3Y2YzLA0KKyAgICAgIDB4ZmJkNDRj NjUsIDB4NGRiMjYxNTgsIDB4M2FiNTUxY2UsIDB4YTNiYzAwNzQsIDB4ZDRi YjMwZTIsDQorICAgICAgMHg0YWRmYTU0MSwgMHgzZGQ4OTVkNywgMHhhNGQx YzQ2ZCwgMHhkM2Q2ZjRmYiwgMHg0MzY5ZTk2YSwNCisgICAgICAweDM0NmVk OWZjLCAweGFkNjc4ODQ2LCAweGRhNjBiOGQwLCAweDQ0MDQyZDczLCAweDMz MDMxZGU1LA0KKyAgICAgIDB4YWEwYTRjNWYsIDB4ZGQwZDdjYzksIDB4NTAw NTcxM2MsIDB4MjcwMjQxYWEsIDB4YmUwYjEwMTAsDQorICAgICAgMHhjOTBj MjA4NiwgMHg1NzY4YjUyNSwgMHgyMDZmODViMywgMHhiOTY2ZDQwOSwgMHhj ZTYxZTQ5ZiwNCisgICAgICAweDVlZGVmOTBlLCAweDI5ZDljOTk4LCAweGIw ZDA5ODIyLCAweGM3ZDdhOGI0LCAweDU5YjMzZDE3LA0KKyAgICAgIDB4MmVi NDBkODEsIDB4YjdiZDVjM2IsIDB4YzBiYTZjYWQsIDB4ZWRiODgzMjAsIDB4 OWFiZmIzYjYsDQorICAgICAgMHgwM2I2ZTIwYywgMHg3NGIxZDI5YSwgMHhl YWQ1NDczOSwgMHg5ZGQyNzdhZiwgMHgwNGRiMjYxNSwNCisgICAgICAweDcz ZGMxNjgzLCAweGUzNjMwYjEyLCAweDk0NjQzYjg0LCAweDBkNmQ2YTNlLCAw eDdhNmE1YWE4LA0KKyAgICAgIDB4ZTQwZWNmMGIsIDB4OTMwOWZmOWQsIDB4 MGEwMGFlMjcsIDB4N2QwNzllYjEsIDB4ZjAwZjkzNDQsDQorICAgICAgMHg4 NzA4YTNkMiwgMHgxZTAxZjI2OCwgMHg2OTA2YzJmZSwgMHhmNzYyNTc1ZCwg MHg4MDY1NjdjYiwNCisgICAgICAweDE5NmMzNjcxLCAweDZlNmIwNmU3LCAw eGZlZDQxYjc2LCAweDg5ZDMyYmUwLCAweDEwZGE3YTVhLA0KKyAgICAgIDB4 NjdkZDRhY2MsIDB4ZjliOWRmNmYsIDB4OGViZWVmZjksIDB4MTdiN2JlNDMs IDB4NjBiMDhlZDUsDQorICAgICAgMHhkNmQ2YTNlOCwgMHhhMWQxOTM3ZSwg MHgzOGQ4YzJjNCwgMHg0ZmRmZjI1MiwgMHhkMWJiNjdmMSwNCisgICAgICAw eGE2YmM1NzY3LCAweDNmYjUwNmRkLCAweDQ4YjIzNjRiLCAweGQ4MGQyYmRh LCAweGFmMGExYjRjLA0KKyAgICAgIDB4MzYwMzRhZjYsIDB4NDEwNDdhNjAs IDB4ZGY2MGVmYzMsIDB4YTg2N2RmNTUsIDB4MzE2ZThlZWYsDQorICAgICAg MHg0NjY5YmU3OSwgMHhjYjYxYjM4YywgMHhiYzY2ODMxYSwgMHgyNTZmZDJh MCwgMHg1MjY4ZTIzNiwNCisgICAgICAweGNjMGM3Nzk1LCAweGJiMGI0NzAz LCAweDIyMDIxNmI5LCAweDU1MDUyNjJmLCAweGM1YmEzYmJlLA0KKyAgICAg IDB4YjJiZDBiMjgsIDB4MmJiNDVhOTIsIDB4NWNiMzZhMDQsIDB4YzJkN2Zm YTcsIDB4YjVkMGNmMzEsDQorICAgICAgMHgyY2Q5OWU4YiwgMHg1YmRlYWUx ZCwgMHg5YjY0YzJiMCwgMHhlYzYzZjIyNiwgMHg3NTZhYTM5YywNCisgICAg ICAweDAyNmQ5MzBhLCAweDljMDkwNmE5LCAweGViMGUzNjNmLCAweDcyMDc2 Nzg1LCAweDA1MDA1NzEzLA0KKyAgICAgIDB4OTViZjRhODIsIDB4ZTJiODdh MTQsIDB4N2JiMTJiYWUsIDB4MGNiNjFiMzgsIDB4OTJkMjhlOWIsDQorICAg ICAgMHhlNWQ1YmUwZCwgMHg3Y2RjZWZiNywgMHgwYmRiZGYyMSwgMHg4NmQz ZDJkNCwgMHhmMWQ0ZTI0MiwNCisgICAgICAweDY4ZGRiM2Y4LCAweDFmZGE4 MzZlLCAweDgxYmUxNmNkLCAweGY2YjkyNjViLCAweDZmYjA3N2UxLA0KKyAg ICAgIDB4MThiNzQ3NzcsIDB4ODgwODVhZTYsIDB4ZmYwZjZhNzAsIDB4NjYw NjNiY2EsIDB4MTEwMTBiNWMsDQorICAgICAgMHg4ZjY1OWVmZiwgMHhmODYy YWU2OSwgMHg2MTZiZmZkMywgMHgxNjZjY2Y0NSwgMHhhMDBhZTI3OCwNCisg ICAgICAweGQ3MGRkMmVlLCAweDRlMDQ4MzU0LCAweDM5MDNiM2MyLCAweGE3 NjcyNjYxLCAweGQwNjAxNmY3LA0KKyAgICAgIDB4NDk2OTQ3NGQsIDB4M2U2 ZTc3ZGIsIDB4YWVkMTZhNGEsIDB4ZDlkNjVhZGMsIDB4NDBkZjBiNjYsDQor ICAgICAgMHgzN2Q4M2JmMCwgMHhhOWJjYWU1MywgMHhkZWJiOWVjNSwgMHg0 N2IyY2Y3ZiwgMHgzMGI1ZmZlOSwNCisgICAgICAweGJkYmRmMjFjLCAweGNh YmFjMjhhLCAweDUzYjM5MzMwLCAweDI0YjRhM2E2LCAweGJhZDAzNjA1LA0K KyAgICAgIDB4Y2RkNzA2OTMsIDB4NTRkZTU3MjksIDB4MjNkOTY3YmYsIDB4 YjM2NjdhMmUsIDB4YzQ2MTRhYjgsDQorICAgICAgMHg1ZDY4MWIwMiwgMHgy YTZmMmI5NCwgMHhiNDBiYmUzNywgMHhjMzBjOGVhMSwgMHg1YTA1ZGYxYiwN CisgICAgICAweDJkMDJlZjhkDQorICAgIH07DQorICB1bnNpZ25lZCBjaGFy ICplbmQ7DQorDQorICBjcmMgPSB+Y3JjICYgMHhmZmZmZmZmZjsNCisgIGZv ciAoZW5kID0gYnVmICsgbGVuOyBidWYgPCBlbmQ7ICsrYnVmKQ0KKyAgICBj cmMgPSBjcmMzMl90YWJsZVsoY3JjIF4gKmJ1ZikgJiAweGZmXSBeIChjcmMg Pj4gOCk7DQorICByZXR1cm4gfmNyYyAmIDB4ZmZmZmZmZmY7Ow0KK30NCg== --279707962-333282630-1032794511=:26936--