Full Disclosure mailing list archives

XXT version 2 - Trash talking challege version ;-)


From: full-disclosure () lists netsys com (full-disclosure () lists netsys com)
Date: Wed, 28 Aug 2002 04:55:39 -0700

  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.

---1062731517-1887128600-1030535739=:215259
Content-Type: TEXT/PLAIN; charset=US-ASCII

        A big thanks to all who participated in The Trash Talker Challenge
and helped me to make xxt a _much_ better piece of work. How many other
hacks like this can claim such a wide review *grin* ? My original
intention was to "call out" a few people who I thought were talent-less
loudmouths.  However, the people who contacted me about bugs or problems
both in private and on the list were very tactful and talented. Anyway I
wish to thank:

Rain Forest Puppy, Zen Parse (have fun with my 50 bucks!), Steven M.
Christey, Hank Leininger, Daniel Hartmeier, and anyone I forgot who
provided me with feedback, bugfixes, or pointed out errors in the original
release of xxt v1.

Attached is version 2.0 of xxt which has the following features and
changes over 1.0:

o Tried to mitigate race condition in -g by wiping the environment var as
  soon as it's copied. You'll be warned if you try to use -g but it will
  still work as before.

o Checked for NULL pointer when copying the environment variable data.

o Added use of O_EXCL for opening the output file.

o Fixed problem whereby the hash of the key was being reduced to 64bits
  since I was using a char array that was being populated with ascii hex
  values rather than just binary

o Moved the argv trashing loop up so that it happens before any file I/O
  thus a little more quickly. This only effects users who pass the
  keyphrase via the CLI option -k.

o Fixed an issue whereby someone may create a malicious xxt crypted file
  with a bad filesize header. Now I check to make sure the filesize jives
  with the stored header value.

o Checked for access to read & write to file in case someone is dumb
  enough to make this setuid root, also drop any permissions given to
  xxt via a SUID bit (probably superceeding the former).

o Added the -f functionality to use a whole file as the key. The file is
  hashed to a 128 bit key. This is the most secure option for providing a
  key and I would encourage it over -k or -g.

aliver

---1062731517-1887128600-1030535739=:215259
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="xxt.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SGI.4.44.0208280455390.215259@hexeris>
Content-Description: xxt.c - a file encryption utility.
Content-Disposition: attachment; filename="xxt.c"

LyogeHh0IGVuY3J5cHRvciBieSBhbGl2ZXIgICAgICAgICAgICAgICAqLw0K
LyogVmVyc2lvbiAyLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyogQW4gaW1wbGVtZW50YXRpb24gb2YgeHh0ZWEgZW5jcnlwdGlvbiAqLw0K
LyogQSB2ZXJ5IHNtYWxsIChjb2RlIHdpc2UpIHNlY3VyZSBibG9jayAqLw0K
LyogY2lwaGVyLiBTdXBwb3NlZGx5IGZhc3RlciB0aGFuIGJ0ZWEgICAqLw0K
LyogYW5kIGZvciBmaWxlcyBvZiBhbnkgbm9uLXRyaXZhbCBzaXplICAqLw0K
LyogaXQncyBnb25uYSBiZSB3YXkgZmFzdGVyIHRoYW4gVEVBIG9yICAqLw0K
LyogSURFQS4gQXQgd29yc3QgaXQncyBzb21ldGhpbmcgbGlrZSA0eCAqLw0K
LyogdGhlIHNwZWVkIG9mIERFUywgYW5kIG1vcmUgc2VjdXJlIGJ5ICAqLw0K
LyogYSBmYWN0b3Igb2YgMl43MiB+IDQuNyB4IDEwXjIxICAgICAgICAqLw0K
LyogTXkgdGVzdHMgc2VlbWVkIHRvIGluZGljYXRlIHRoYXQgeHh0ICAqLw0K
LyogaXMgYWJvdXQgM3ggdGhlIHNwZWVkIG9mIG1jcnlwdCB3aXRoICAqLw0K
LyogdGhlIHNhbWUgb3B0aW9ucy4gTm90IHRoYXQgbWNyeXB0IGlzICAqLw0K
Lyogbm90IGEgZ3JlYXQgcGllY2Ugb2Ygd29yay4gSXQgaXMuICAgICAqLw0K
LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyogVGhlIHh4dGVhIGFsZ29yaXRobSB3YXMgZGVzaWduZWQgYnk6ICAqLw0K
LyogRGF2aWQgV2hlZWxlciBhbmQgUm9nZXIgTmVlZGhhbS4gU29tZSAqLw0K
LyogY29kZSBmcm9tIHRoZWlyIHB1YmxpY2F0aW9ucyB3YXMgdXNlZCAqLw0K
LyogZm9yIHNvbWUgb2YgdGhlIGVuY3J5cHRpb24gcG9ydGlvbnMuICAqLw0K
LyogSG93ZXZlciBpdCB3YXMgYWx0ZXJlZCB0byBiZSA2NCBiaXQgICAqLw0K
LyogYXJjaGl0ZWN0dXJlIGZyaWVuZGx5LiAgICAgICAgICAgICAgICAqLw0K
LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyogTUQ1IEhhc2hpbmcgd2FzIGludmVudGVkIGJ5OiAgICAgICAgICAqLw0K
LyogUHJvZmVzc29yIFJvbmFsZCBSaXZlc3QgICAgICAgICAgICAgICAqLw0K
LyogSSB1c2UgTUQ1IHRvIGhhc2ggdGhlIGtleS4gVGhlIE1ENSAgICAqLw0K
LyogaW1wbGVtZW50YXRpb24gaGVyZSBpcyB1c2VzIGEgcHVibGljICAqLw0K
LyogZG9tYWluIFJGQzEzMjEgcmlwb2ZmIGltcGxlbWVudGF0aW9uICAqLw0K
LyogZnJvbTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyogTC4gUGV0ZXIgRGV1dHNjaCAgICAgICAgICAgICAgICAgICAgICAqLw0K
Lyogc28gdGhlIFJTQSBmb2xrcyBjYW4ndCBjbGFpbSBJIG93ZSAgICAqLw0K
LyogdGhlbSBhbnl0aGluZy4gICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0K
LyogSSdkIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBmb2xrcyAqLw0K
LyogUmFpbiBGb3Jlc3QgUHVwcHksIFplbiBQYXJzZSwgU3RldmVuICAqLw0K
LyogTS4gQ2hyaXN0ZXksIEhhbmsgTGVpbmluZ2VyLCBEYW5pZWwgICAqLw0K
LyogSGFydG1laWVyLCBhbmQgYW55b25lIEkgZm9yZ290IHdobyAgICAqLw0K
LyogcHJvdmlkZWQgbWUgd2l0aCBmZWVkYmFjaywgYnVnZml4ZXMsICAqLw0K
Lyogb3IgcG9pbnRlZCBvdXQgZXJyb3JzIGluIHRoZSBvcmlnaW5hbCAqLw0K
LyogcmVsZWFzZSBvZiB4eHQgICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0K
LyogQ0hBTkdFIExPRyAtIENIQU5HRSBMT0cgLSBDSEFOR0UgTE9HICAqLw0K
LyogVmVyc2lvbiAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyogbyBUcmllZCB0byBtaXRpZ2F0ZSByYWNlIGNvbmRpdGlvbiBpbiAqLw0K
LyogICAtZyBieSB3aXBpbmcgdGhlIGVudmlyb25tZW50IHZhciBhcyAqLw0K
LyogICBzb29uIGFzIGl0J3MgY29waWVkLiAgICAgICAgICAgICAgICAqLw0K
LyogbyBDaGVja2VkIGZvciBOVUxMIHBvaW50ZXIgb24gLWcgICAgICAqLw0K
LyogbyBBZGRlZCB1c2Ugb2YgT19FWENMIGZvciBvcGVuaW5nIHRoZSAqLw0K
LyogICBvdXRwdXQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAqLw0K
LyogbyBGaXhlZCBwcm9ibGVtIHdoZXJlYnkgdGhlIGhhc2ggb2YgICAqLw0K
LyogICB0aGUga2V5IHdhcyBiZWluZyByZWR1Y2VkIHRvIDY0Yml0cyAqLw0K
LyogICBzaW5jZSBJIHdhcyB1c2luZyBhIGNoYXIgYXJyYXkgdGhhdCAqLw0K
LyogICB3YXMgYmVpbmcgcG9wdWxhdGVkIHdpdGggYXNjaWkgaGV4ICAqLw0K
LyogICB2YWx1ZXMgcmF0aGVyIHRoYW4ganVzdCBiaW5hcnkgICAgICAqLw0K
LyogbyBNb3ZlZCB0aGUgYXJndiB0cmFzaGluZyBsb29wIHVwIHNvICAqLw0K
LyogICB0aGF0IGl0IGhhcHBlbnMgYmVmb3JlIGFueSBmaWxlIEkvTyAqLw0K
LyogbyBGaXhlZCBhbiBpc3N1ZSB3aGVyZWJ5IHNvbWVvbmUgbWF5ICAqLw0K
LyogICBjcmVhdGUgYSBtYWxpY2lvdXMgeHh0IGNyeXB0ZWQgZmlsZSAqLw0K
LyogICB3aXRoIGEgYmFkIGZpbGVzaXplIGhlYWRlci4gTm93IEkgICAqLw0K
LyogICBjaGVjayBmb3IgdGhpcy4gICAgICAgICAgICAgICAgICAgICAqLw0K
LyogbyBDaGVja2VkIGZvciBhY2Nlc3MgdG8gcmVhZCAmIHdyaXRlICAqLw0K
LyogICB0byBmaWxlIGluIGNhc2Ugc29tZW9uZSBpcyBkdW1iICAgICAqLw0K
LyogICBlbm91Z2ggdG8gbWFrZSB0aGlzIHNldHVpZCByb290ICAgICAqLw0K
LyogbyBBZGRlZCB0aGUgLWYgZnVuY3Rpb25hbGl0eSB0byB1c2UgYSAqLw0K
LyogICB3aG9sZSBmaWxlIGFzIHRoZSBrZXkuIFRoZSBmaWxlIGlzICAqLw0K
LyogICBoYXNoZWQgdG8gYSAxMjggYml0IGtleS4gICAgICAgICAgICAqLw0K
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0K
LyogQ29tcGlsZSB3aXRoIGNjIC1PMyAtbyB4eHQgeHh0LmMgICAgICAqLw0K
LyogInh4dCAtaCIgZm9yIGhlbHAsIGFmdGVyIHRoYXQgICAgICAgICAqLw0K
LyogdGVzdGVkIG9uIElSSVgsIFNvbGFyaXMsIExpbnV4ICAgICAgICAqLw0K
LyogTmV0QlNELCBhbmQgQUlYICAgICAgICAgICAgICAgICAgICAgICAqLw0K
DQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0K
I2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPGZjbnRsLmg+DQojaW5j
bHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3N0YXQuaD4NCiNp
bmNsdWRlIDxpbnR0eXBlcy5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2lu
Y2x1ZGUgPGVycm5vLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUg
PG5ldGluZXQvaW4uaD4NCg0KbG9uZyBidGVhKCBpbnQzMl90ICogdiwgaW50
MzJfdCBuICwgaW50MzJfdCAqIGsgKTsNCmNoYXIgKiBtZW1uY2F0KGNoYXIg
KmJpbnN0cl9hLGludCBzaXplX2EsY2hhciAqYmluc3RyX2IsaW50IHNpemVf
Yik7DQpjaGFyICogY25wKGNoYXIgKmJ5dGVzdHJlYW0sIGludCBibG9jaywg
aW50IHNpemUpOw0Kdm9pZCBzaG93aGVscCh2b2lkKTsNCg0KI2RlZmluZSBN
WCAoej4+NV55PDwyKSsoeT4+M156PDw0KV4oc3VtXnkpKyhrW3AmM15lXV56
KSA7DQoNCi8qIG1vc3Qgb2YgdGhlIE1ENSBoYXNoaW5nIHN0dWZmIGlzIGZy
b20gTC4gUGV0ZXIgRGV1dHNjaCAqLw0KLyogc2VlIGhpcyBub3RpY2UgYXQg
dGhlIGJvdHRvbSBhbG9uZyB3aXRoIHRoZSBhbGdvcml0aG0gICovDQojaWZu
ZGVmIG1kNV9JTkNMVURFRA0KI2RlZmluZSBtZDVfSU5DTFVERUQNCnR5cGVk
ZWYgdW5zaWduZWQgY2hhciBtZDVfYnl0ZV90OyAvKiA4LWJpdCBieXRlICov
DQp0eXBlZGVmIHVuc2lnbmVkIGludCBtZDVfd29yZF90OyAgLyogMzItYml0
IHdvcmQgKi8NCnR5cGVkZWYgc3RydWN0IG1kNV9zdGF0ZV9zIHsNCiAgICBt
ZDVfd29yZF90IGNvdW50WzJdOw0KICAgIG1kNV93b3JkX3QgYWJjZFs0XTsN
CiAgICBtZDVfYnl0ZV90IGJ1Zls2NF07DQp9DQptZDVfc3RhdGVfdDsNCg0K
dm9pZCBtZDVfaW5pdChtZDVfc3RhdGVfdCAqcG1zKTsNCnZvaWQgbWQ1X2Fw
cGVuZChtZDVfc3RhdGVfdCAqcG1zLCBjb25zdCBtZDVfYnl0ZV90ICpkYXRh
LCBpbnQgbmJ5dGVzKTsNCnZvaWQgbWQ1X2ZpbmlzaChtZDVfc3RhdGVfdCAq
cG1zLCBtZDVfYnl0ZV90IGRpZ2VzdFsxNl0pOw0KI2VuZGlmDQoNCi8qIHlv
dSBjYW4gZ2V0IHNvbWUgdHJpdmFsIHNwZWVkdXBzIHdpdGggTVNCIGlmIHlv
dSBkZWZpbmUgdGhpcyByaWdodCAqLw0KI3VuZGVmIEJZVEVfT1JERVIJLyog
MSA9IGJpZy1lbmRpYW4sIC0xID0gbGl0dGxlLWVuZGlhbiwgMCA9IHVua25v
d24gKi8NCiNpZmRlZiBBUkNIX0lTX0JJR19FTkRJQU4NCiMgIGRlZmluZSBC
WVRFX09SREVSIChBUkNIX0lTX0JJR19FTkRJQU4gPyAxIDogLTEpDQojZWxz
ZQ0KIyAgZGVmaW5lIEJZVEVfT1JERVIgMA0KI2VuZGlmDQoNCiNkZWZpbmUg
VF9NQVNLICgobWQ1X3dvcmRfdCl+MCkNCiNkZWZpbmUgVDEgLyogMHhkNzZh
YTQ3OCAqLyAoVF9NQVNLIF4gMHgyODk1NWI4NykNCiNkZWZpbmUgVDIgLyog
MHhlOGM3Yjc1NiAqLyAoVF9NQVNLIF4gMHgxNzM4NDhhOSkNCiNkZWZpbmUg
VDMgICAgMHgyNDIwNzBkYg0KI2RlZmluZSBUNCAvKiAweGMxYmRjZWVlICov
IChUX01BU0sgXiAweDNlNDIzMTExKQ0KI2RlZmluZSBUNSAvKiAweGY1N2Mw
ZmFmICovIChUX01BU0sgXiAweDBhODNmMDUwKQ0KI2RlZmluZSBUNiAgICAw
eDQ3ODdjNjJhDQojZGVmaW5lIFQ3IC8qIDB4YTgzMDQ2MTMgKi8gKFRfTUFT
SyBeIDB4NTdjZmI5ZWMpDQojZGVmaW5lIFQ4IC8qIDB4ZmQ0Njk1MDEgKi8g
KFRfTUFTSyBeIDB4MDJiOTZhZmUpDQojZGVmaW5lIFQ5ICAgIDB4Njk4MDk4
ZDgNCiNkZWZpbmUgVDEwIC8qIDB4OGI0NGY3YWYgKi8gKFRfTUFTSyBeIDB4
NzRiYjA4NTApDQojZGVmaW5lIFQxMSAvKiAweGZmZmY1YmIxICovIChUX01B
U0sgXiAweDAwMDBhNDRlKQ0KI2RlZmluZSBUMTIgLyogMHg4OTVjZDdiZSAq
LyAoVF9NQVNLIF4gMHg3NmEzMjg0MSkNCiNkZWZpbmUgVDEzICAgIDB4NmI5
MDExMjINCiNkZWZpbmUgVDE0IC8qIDB4ZmQ5ODcxOTMgKi8gKFRfTUFTSyBe
IDB4MDI2NzhlNmMpDQojZGVmaW5lIFQxNSAvKiAweGE2Nzk0MzhlICovIChU
X01BU0sgXiAweDU5ODZiYzcxKQ0KI2RlZmluZSBUMTYgICAgMHg0OWI0MDgy
MQ0KI2RlZmluZSBUMTcgLyogMHhmNjFlMjU2MiAqLyAoVF9NQVNLIF4gMHgw
OWUxZGE5ZCkNCiNkZWZpbmUgVDE4IC8qIDB4YzA0MGIzNDAgKi8gKFRfTUFT
SyBeIDB4M2ZiZjRjYmYpDQojZGVmaW5lIFQxOSAgICAweDI2NWU1YTUxDQoj
ZGVmaW5lIFQyMCAvKiAweGU5YjZjN2FhICovIChUX01BU0sgXiAweDE2NDkz
ODU1KQ0KI2RlZmluZSBUMjEgLyogMHhkNjJmMTA1ZCAqLyAoVF9NQVNLIF4g
MHgyOWQwZWZhMikNCiNkZWZpbmUgVDIyICAgIDB4MDI0NDE0NTMNCiNkZWZp
bmUgVDIzIC8qIDB4ZDhhMWU2ODEgKi8gKFRfTUFTSyBeIDB4Mjc1ZTE5N2Up
DQojZGVmaW5lIFQyNCAvKiAweGU3ZDNmYmM4ICovIChUX01BU0sgXiAweDE4
MmMwNDM3KQ0KI2RlZmluZSBUMjUgICAgMHgyMWUxY2RlNg0KI2RlZmluZSBU
MjYgLyogMHhjMzM3MDdkNiAqLyAoVF9NQVNLIF4gMHgzY2M4ZjgyOSkNCiNk
ZWZpbmUgVDI3IC8qIDB4ZjRkNTBkODcgKi8gKFRfTUFTSyBeIDB4MGIyYWYy
NzgpDQojZGVmaW5lIFQyOCAgICAweDQ1NWExNGVkDQojZGVmaW5lIFQyOSAv
KiAweGE5ZTNlOTA1ICovIChUX01BU0sgXiAweDU2MWMxNmZhKQ0KI2RlZmlu
ZSBUMzAgLyogMHhmY2VmYTNmOCAqLyAoVF9NQVNLIF4gMHgwMzEwNWMwNykN
CiNkZWZpbmUgVDMxICAgIDB4Njc2ZjAyZDkNCiNkZWZpbmUgVDMyIC8qIDB4
OGQyYTRjOGEgKi8gKFRfTUFTSyBeIDB4NzJkNWIzNzUpDQojZGVmaW5lIFQz
MyAvKiAweGZmZmEzOTQyICovIChUX01BU0sgXiAweDAwMDVjNmJkKQ0KI2Rl
ZmluZSBUMzQgLyogMHg4NzcxZjY4MSAqLyAoVF9NQVNLIF4gMHg3ODhlMDk3
ZSkNCiNkZWZpbmUgVDM1ICAgIDB4NmQ5ZDYxMjINCiNkZWZpbmUgVDM2IC8q
IDB4ZmRlNTM4MGMgKi8gKFRfTUFTSyBeIDB4MDIxYWM3ZjMpDQojZGVmaW5l
IFQzNyAvKiAweGE0YmVlYTQ0ICovIChUX01BU0sgXiAweDViNDExNWJiKQ0K
I2RlZmluZSBUMzggICAgMHg0YmRlY2ZhOQ0KI2RlZmluZSBUMzkgLyogMHhm
NmJiNGI2MCAqLyAoVF9NQVNLIF4gMHgwOTQ0YjQ5ZikNCiNkZWZpbmUgVDQw
IC8qIDB4YmViZmJjNzAgKi8gKFRfTUFTSyBeIDB4NDE0MDQzOGYpDQojZGVm
aW5lIFQ0MSAgICAweDI4OWI3ZWM2DQojZGVmaW5lIFQ0MiAvKiAweGVhYTEy
N2ZhICovIChUX01BU0sgXiAweDE1NWVkODA1KQ0KI2RlZmluZSBUNDMgLyog
MHhkNGVmMzA4NSAqLyAoVF9NQVNLIF4gMHgyYjEwY2Y3YSkNCiNkZWZpbmUg
VDQ0ICAgIDB4MDQ4ODFkMDUNCiNkZWZpbmUgVDQ1IC8qIDB4ZDlkNGQwMzkg
Ki8gKFRfTUFTSyBeIDB4MjYyYjJmYzYpDQojZGVmaW5lIFQ0NiAvKiAweGU2
ZGI5OWU1ICovIChUX01BU0sgXiAweDE5MjQ2NjFhKQ0KI2RlZmluZSBUNDcg
ICAgMHgxZmEyN2NmOA0KI2RlZmluZSBUNDggLyogMHhjNGFjNTY2NSAqLyAo
VF9NQVNLIF4gMHgzYjUzYTk5YSkNCiNkZWZpbmUgVDQ5IC8qIDB4ZjQyOTIy
NDQgKi8gKFRfTUFTSyBeIDB4MGJkNmRkYmIpDQojZGVmaW5lIFQ1MCAgICAw
eDQzMmFmZjk3DQojZGVmaW5lIFQ1MSAvKiAweGFiOTQyM2E3ICovIChUX01B
U0sgXiAweDU0NmJkYzU4KQ0KI2RlZmluZSBUNTIgLyogMHhmYzkzYTAzOSAq
LyAoVF9NQVNLIF4gMHgwMzZjNWZjNikNCiNkZWZpbmUgVDUzICAgIDB4NjU1
YjU5YzMNCiNkZWZpbmUgVDU0IC8qIDB4OGYwY2NjOTIgKi8gKFRfTUFTSyBe
IDB4NzBmMzMzNmQpDQojZGVmaW5lIFQ1NSAvKiAweGZmZWZmNDdkICovIChU
X01BU0sgXiAweDAwMTAwYjgyKQ0KI2RlZmluZSBUNTYgLyogMHg4NTg0NWRk
MSAqLyAoVF9NQVNLIF4gMHg3YTdiYTIyZSkNCiNkZWZpbmUgVDU3ICAgIDB4
NmZhODdlNGYNCiNkZWZpbmUgVDU4IC8qIDB4ZmUyY2U2ZTAgKi8gKFRfTUFT
SyBeIDB4MDFkMzE5MWYpDQojZGVmaW5lIFQ1OSAvKiAweGEzMDE0MzE0ICov
IChUX01BU0sgXiAweDVjZmViY2ViKQ0KI2RlZmluZSBUNjAgICAgMHg0ZTA4
MTFhMQ0KI2RlZmluZSBUNjEgLyogMHhmNzUzN2U4MiAqLyAoVF9NQVNLIF4g
MHgwOGFjODE3ZCkNCiNkZWZpbmUgVDYyIC8qIDB4YmQzYWYyMzUgKi8gKFRf
TUFTSyBeIDB4NDJjNTBkY2EpDQojZGVmaW5lIFQ2MyAgICAweDJhZDdkMmJi
DQojZGVmaW5lIFQ2NCAvKiAweGViODZkMzkxICovIChUX01BU0sgXiAweDE0
NzkyYzZlKQ0KDQoNCmludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltd
KSB7DQogICAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsNCiAgICBleHRlcm4gaW50
ICBvcHRpbmQ7DQogICAgZXh0ZXJuIGludCBlcnJubzsNCiAgICBpbnQgYzsN
CiAgICBpbnQgaTsNCiAgICBpbnQgajsNCiAgICBpbnQgc2w7DQogICAgaW50
IGRlYnVnID0gMDsNCiAgICBpbnQgdW5saW5raXQgPSAwOw0KICAgIGludCB1
c2Vfb3V0ID0gMDsNCiAgICBpbnQgdXNlX2twICA9IDA7DQogICAgaW50IHVz
ZV9rZSAgPSAwOw0KICAgIGludCBmaXJzdF9ibG9jayA9IDE7DQogICAgaW50
IGZkX2luOw0KICAgIGludCBmZF9vdXQ7DQogICAgaW50IGVuY3J5cHQgPSAw
Ow0KICAgIGludCBkZWNyeXB0ID0gMDsNCiAgICBpbnQgYmwgPSAwOw0KICAg
IGludCBieXRlc19yZWFkOw0KICAgIGludCBwYWQgPSAwOw0KICAgIGludCBu
b3VtYXNrID0gMDsNCiAgICBpbnQgdHJuZCA9IDA7DQogICAgaW50IHVpZDsN
CiAgICBpbnQgdXNlX2ZpbGUgPSAwOw0KICAgIHVpbnQzMl90IHJhbmRwYWRb
MTZdOw0KICAgIHVpbnQzMl90IGhhc2hbOF07DQogICAgdWludDMyX3QgZmls
ZXNpemUgPSAwOw0KICAgIHVpbnQzMl90IGZpbGVzaXplX21zYiA9IDA7DQog
ICAgdWludDMyX3QgcmVhZF9maWxlc2l6ZV9tc2IgPSAwOw0KICAgIHVpbnQz
Ml90IHJlYWRfZmlsZXNpemUgPSAwOw0KICAgIHVpbnQzMl90IGJzZiA9IDA7
DQogICAgY2hhciAqaW5fZmlsZSA9IE5VTEw7DQogICAgY2hhciAqb3V0X2Zp
bGUgPSBOVUxMOw0KICAgIGNoYXIgKmtleXBocmFzZSA9IE5VTEw7DQogICAg
Y2hhciAqa2V5ZW52ID0gTlVMTDsNCiAgICBjaGFyICprZXlmaWxlID0gTlVM
TDsNCiAgICBjaGFyICprZl9hbGwgPSBOVUxMOw0KICAgIGNoYXIgZmJfYnVm
ZmVyWzY0XTsNCiAgICAvKiB1X2NoYXIgKnBsYWludGV4dCA9IE5VTEw7ICov
DQogICAgdV9jaGFyIHBsYWludGV4dFs2NF07DQogICAgc3RydWN0IHN0YXQg
c3RhdGJ1ZjsNCiAgICBtZDVfc3RhdGVfdCBzdGF0ZTsNCiAgICBtZDVfYnl0
ZV90IGRpZ2VzdFszMl07DQoNCiAgICAvKiBkcm9wIGFueSBwcml2aWxlZ2Vz
IGdpdmVuIHRvIHVzIGJ5IHNvbWVvbmUgZHVtYiBlbm91Z2ggdG8gKi8NCiAg
ICAvKiBtYWtlIHh4dCBhIFNVSUQgcHJvZ3JhbSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKi8NCiAgICB1aWQgPSBnZXR1aWQoKTsNCiAg
ICBzZXR1aWQodWlkKTsNCg0KICAgIHdoaWxlKCAoYyA9IGdldG9wdChhcmdj
LGFyZ3YsImk6bzprOmc6ZjpoeGRldXYiKSkgIT0gLTEgKSB7DQogICAgICAg
IHN3aXRjaChjKSB7DQogICAgICAgIGNhc2UgJ2gnOg0KICAgICAgICAgICAg
c2hvd2hlbHAoKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNl
ICd2JzoNCiAgICAgICAgICAgIGRlYnVnID0gMTsNCiAgICAgICAgICAgIGJy
ZWFrOw0KICAgICAgICBjYXNlICdpJzoNCiAgICAgICAgICAgIGlmKE5VTEwg
PT0gKGluX2ZpbGUgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKG9wdGFyZykg
KyAyKSkpIHsNCiAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiRkFU
QUw6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkuXG4iKTsNCiAgICAgICAgICAg
ICAgICBleGl0KDEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc3Ry
bmNweShpbl9maWxlLG9wdGFyZyxzdHJsZW4ob3B0YXJnKSArIDEpOw0KICAg
ICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ28nOg0KICAgICAgICAg
ICAgdXNlX291dCA9IDE7DQogICAgICAgICAgICBpZihOVUxMID09IChvdXRf
ZmlsZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ob3B0YXJnKSArIDIpKSkg
ew0KICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogY2Fu
bm90IGFsbG9jYXRlIG1lbW9yeS5cbiIpOw0KICAgICAgICAgICAgICAgIGV4
aXQoMSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBzdHJuY3B5KG91
dF9maWxlLG9wdGFyZyxzdHJsZW4ob3B0YXJnKSArIDEpOw0KICAgICAgICAg
ICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ2YnOg0KICAgICAgICAgICAgdXNl
X2ZpbGUgPSAxOw0KICAgICAgICAgICAgaWYoTlVMTCA9PSAoa2V5ZmlsZSA9
IChjaGFyICopIG1hbGxvYyhzdHJsZW4ob3B0YXJnKSArIDIpKSkgew0KICAg
ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogY2Fubm90IGFs
bG9jYXRlIG1lbW9yeS5cbiIpOw0KICAgICAgICAgICAgICAgIGV4aXQoMSk7
DQogICAgICAgICAgICB9DQogICAgICAgICAgICBzdHJuY3B5KGtleWZpbGUs
b3B0YXJnLHN0cmxlbihvcHRhcmcpICsgMSk7DQogICAgICAgICAgICBicmVh
azsNCiAgICAgICAgY2FzZSAnayc6DQogICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwiV0FSTklORzogdXNpbmcgYSBrZXlwaHJhc2UgZnJvbSB0aGUgY29t
bWFuZCBsaW5lIGNhbiBiZSBpbnNlY3VyZS5cbiIpOw0KICAgICAgICAgICAg
dXNlX2twID0gMTsNCiAgICAgICAgICAgIGlmKE5VTEwgPT0gKGtleXBocmFz
ZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ob3B0YXJnKSArIDIpKSkgew0K
ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogY2Fubm90
IGFsbG9jYXRlIG1lbW9yeS5cbiIpOw0KICAgICAgICAgICAgICAgIGV4aXQo
MSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBzdHJuY3B5KGtleXBo
cmFzZSxvcHRhcmcsc3RybGVuKG9wdGFyZykgKyAxKTsNCiAgICAgICAgICAg
IGJyZWFrOw0KICAgICAgICBjYXNlICdnJzoNCiAgICAgICAgICAgIC8qIG15
IG92ZXJhbGwgb3BpbmlvbiBpcyB0aGF0IHVzaW5nIC1nIG9yIC1rIGNhbiBi
ZSAqLw0KICAgICAgICAgICAgLyogaW5zZWN1cmUuIEV2ZW4gdGhvdWdoIEkg
ZG8gbXkgYmVzdCB0byBtaXRpZ2F0ZSAgICovDQogICAgICAgICAgICAvKiB0
aGUgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoIHVzaW5nIGdldGVudigpIGhl
cmUgKi8NCiAgICAgICAgICAgIC8qIGJ5IHdpcGluZyB0aGUgZW52aXJvbm1l
bnQgdmFyIGFmdGVyd2FyZHMsIGl0J3MgICAqLw0KICAgICAgICAgICAgLyog
c3RpbGwgYSBsaXR0bGUgdnVsbmVyYWJsZSB0byBhIHJhY2UgY29uZGl0aW9u
ICAgICovDQogICAgICAgICAgICAvKiBTbywgSSB0aGluayBpdCdzIHBydWRl
bnQgdGhhdCBJIHdhcm4gdGhlIHVzZXIgb24gKi8NCiAgICAgICAgICAgIC8q
IHRoZSB1c2Ugb2YgdGhpcyBub3csIHRvby4gICAgICAgICAgICAgICAgICAg
ICAgICAqLw0KICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIldhcm5pbmc6
IHVzZSBvZiAtZyBjYW4gYmUgaW5zZWN1cmU7IHVzZSAtZiBpbnN0ZWFkLlxu
Iik7DQogICAgICAgICAgICB1c2Vfa2UgPSAxOw0KICAgICAgICAgICAgaWYo
TlVMTCA9PSAoa2V5ZW52ID0gZ2V0ZW52KG9wdGFyZykpKSB7DQogICAgICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBZb3VyIGVudmlyb25t
ZW50IHZhcmlhYmxlIHdhcyBudWxsLiBObyBrZXlwaHJhc2UgZm91bmQuXG4i
KTsNCiAgICAgICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICAgICAgfQ0K
ICAgICAgICAgICAgaWYoTlVMTCA9PSAoa2V5cGhyYXNlID0gKGNoYXIgKikg
bWFsbG9jKHN0cmxlbihrZXllbnYpICsgMikpKSB7DQogICAgICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBjYW5ub3QgYWxsb2NhdGUgbWVt
b3J5LlxuIik7DQogICAgICAgICAgICAgICAgZXhpdCgxKTsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgICAgIHN0cm5jcHkoa2V5cGhyYXNlLGtleWVudixz
dHJsZW4oa2V5ZW52KSArIDEpOw0KICAgICAgICAgICAgLyogZ2V0IHJpZCBv
ZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQVNBUCAqLw0KICAgICAgICAg
ICAgLyogc2luY2UgaXQgY2FuIGJlIHNlZW4gaW4gdGhlICdwcycgb3V0cHV0
ICAqLw0KICAgICAgICAgICAgdW5zZXRlbnYob3B0YXJnKTsNCiAgICAgICAg
ICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdkJzoNCiAgICAgICAgICAgIGRl
Y3J5cHQgPSAxOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2Ug
J2UnOg0KICAgICAgICAgICAgZW5jcnlwdCA9IDE7DQogICAgICAgICAgICBi
cmVhazsNCiAgICAgICAgY2FzZSAndSc6DQogICAgICAgICAgICB1bmxpbmtp
dCA9IDE7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAneCc6
DQogICAgICAgICAgICBub3VtYXNrID0gMTsNCiAgICAgICAgICAgIGJyZWFr
Ow0KICAgICAgICB9IC8qIGVuZCBvZiBzd2l0Y2goKSAqLw0KICAgIH0gLyog
ZW5kIG9mIHdoaWxlIGdldG9wdCgpICovDQoNCiAgICAvKiB0cnkgdG8gcHVs
bCBhIGZhc3Qgb25lIGFuZCB3aXBlIHRoZSBhcmd1bWVudHMgKi8NCiAgICAv
KiBhIHBlcnNvbiBjb3VsZCBzdGlsbCB0cnkgYW5kIHJhY2UgdG8gZ2V0IHRo
ZW0gKi8NCiAgICAvKiBidXQgaXQnZCBiZSBwcmV0dHkgdG91Z2ggKE5PVCBp
bXBvc3NpYmxlKSBJJ20gKi8NCiAgICAvKiBqdXN0IG1ha2luZyBpdCBoYXJk
ZXIsIGJ1dCBJJ20gbm90IGdvaW5nIHRvICAgKi8NCiAgICAvKiBzYXkgdGhh
dCB0aGlzIG1ha2VzIGl0IGEgdG90YWxseSBzZWN1cmUgd2F5ICAgKi8NCiAg
ICAvKiB0byBtYWtlIHBhc3NpbmcgdGhlIGtleSBvbiB0aGUgY29tbWFuZCBs
aW5lIGEgKi8NCiAgICAvKiBzYW5lIG9yIGdvb2QgaWRlYS4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKi8NCiAgICBmb3IgKGkgPSAxOyBpIDwgYXJn
YzsgKytpKSB7DQogICAgICAgIHNsID0gc3RybGVuKGFyZ3ZbaV0pOw0KICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgc2w7ICsraikNCiAgICAgICAgICAgIGFy
Z3ZbaV1bal0gPSAwOw0KICAgIH0NCg0KICAgIC8qIHlvdSBtdXN0IHVzZSBh
IGtleSBmaWxlIG9yIGEga2V5IHBocmFzZSBvciBhIGtleSB2YXJpYWJsZSAq
Lw0KICAgIGlmKCF1c2Vfa3AgJiYgIXVzZV9rZSAmJiAhdXNlX2ZpbGUpIHsN
CiAgICAgICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBJIHdvbnQgZW5jcnlw
dCB3aXRob3V0IGEga2V5IVxuXG4iKTsNCiAgICAgICAgc2hvd2hlbHAoKTsN
CiAgICAgICAgZXhpdCgxKTsNCiAgICB9DQoNCiAgICAvKiBvbmUgbW9kZSwg
YW5kIG9ubHkgb25lIG1vZGUuICovDQogICAgaWYoKGRlY3J5cHQgJiYgZW5j
cnlwdCkgfHwgKCFlbmNyeXB0ICYmICFkZWNyeXB0KSkgew0KICAgICAgICBm
cHJpbnRmKHN0ZGVyciwiRkFUQUw6IFlvdXIgZW5jcnlwdC9kZWNyeXB0IG9w
dGlvbnMgYXJlIG1pc3Npbmcgb3IgZG8gbm90IG1ha2Ugc2Vuc2UuXG4iKTsN
CiAgICAgICAgZXhpdCgxKTsNCiAgICB9DQoNCiAgICBpZihrZXlmaWxlICE9
IE5VTEwpIHsNCiAgICAgICAgaWYoLTEgPT0gKHN0YXQoa2V5ZmlsZSwmc3Rh
dGJ1ZikpKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiRkFUQUw6
IGNhbm5vdCBzdGF0IHRoZSBrZXkgZmlsZSFcbiIpOw0KICAgICAgICAgICAg
ZXhpdCgxKTsNCiAgICAgICAgfQ0KICAgICAgICBpZihzdGF0YnVmLnN0X3Np
emUgPT0gKG9mZl90KSAwKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwiRkFUQUw6IEtleWZpbGUgaXMgMCBieXRlcy4gVGhpcyB3aWxsIG5vdCBm
bHkuXG4iKTsNCiAgICAgICAgICAgIGV4aXQoMSk7DQogICAgICAgIH0NCiAg
ICAgICAgaWYoc3RhdGJ1Zi5zdF9zaXplID4gMTAwMDApIHsNCiAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCJOb3RpY2U6IHlvdXIga2V5ZmlsZSBpcyBs
YXJnZSBlbm91Z2ggdGhhdCBpdCB3aWxsIHNsb3cgZG93biB4eHRcbiIpOw0K
ICAgICAgICB9DQogICAgICAgIGlmKC0xID09IGFjY2VzcyhrZXlmaWxlLFJf
T0spKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiRkFUQUw6IGFj
Y2VzcyBkZW5pZWQgd2hpbGUgdHJ5aW5nIHRvIHJlYWQgJXM6ICVzXG4iDQog
ICAgICAgICAgICAgICAgICAgICxpbl9maWxlDQogICAgICAgICAgICAgICAg
ICAgICxzdHJlcnJvcihlcnJubykpOw0KICAgICAgICAgICAgZXhpdCgxKTsN
CiAgICAgICAgfQ0KICAgICAgICBpZighbm91bWFzaykNCiAgICAgICAgICAg
IHVtYXNrKDA3Nyk7DQogICAgICAgIGlmKC0xID09IChmZF9pbiA9IG9wZW4o
a2V5ZmlsZSxPX1JET05MWSkpKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwiRkFUQUw6IENhbm5vdCBvcGVuKCkgdGhlIGZpbGU6ICVzXG4iLHN0
cmVycm9yKGVycm5vKSk7DQogICAgICAgICAgICBleGl0KDEpOw0KICAgICAg
ICB9IGVsc2Ugew0KICAgICAgICAgICAgaWYoTlVMTCA9PSAoa2ZfYWxsID0g
KGNoYXIgKikgbWFsbG9jKHN0YXRidWYuc3Rfc2l6ZSkpKSB7DQogICAgICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBjYW5ub3QgYWxsb2Nh
dGUgbWVtb3J5IGZvciBrZXlmaWxlLiBUb28gYmlnP1xuIik7DQogICAgICAg
ICAgICB9DQogICAgICAgICAgICBpID0gcmVhZChmZF9pbiwga2ZfYWxsLCBz
dGF0YnVmLnN0X3NpemUpOw0KICAgICAgICAgICAgaWYoaSA9PSAoaW50KSBO
VUxMIHx8IGkgIT0gc3RhdGJ1Zi5zdF9zaXplKSB7DQogICAgICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiBTdHJhbmdlbHkgZW5vdWdoIEkg
Y291bGQgbm90IHJlYWQgdGhlIGtleWZpbGUgY29ycmVjdGx5LlxuIik7DQog
ICAgICAgICAgICAgICAgZXhpdCgxKTsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgfQ0KICAgICAgICBtZDVfaW5pdCgmc3RhdGUpOw0KICAgICAgICBtZDVf
YXBwZW5kKCZzdGF0ZSwgKGNvbnN0IG1kNV9ieXRlX3QgKikga2ZfYWxsLCBz
dHJsZW4oa2ZfYWxsKSk7DQogICAgICAgIG1kNV9maW5pc2goJnN0YXRlLCBk
aWdlc3QpOw0KICAgICAgICBtZW1jcHkoaGFzaCxkaWdlc3QsIDMyKTsNCiAg
ICAgICAgY2xvc2UoZmRfaW4pOw0KICAgICAgICAvKiBnZXQgdGhpcyBjbGVh
ciB0ZXh0IG91dCBvZiBtZW1vcnkgYXNhcCAqLw0KICAgICAgICBtZW1zZXQo
a2ZfYWxsLDAsc3RhdGJ1Zi5zdF9zaXplKTsNCiAgICAgICAgZnJlZShrZl9h
bGwpOw0KICAgIH0NCg0KICAgIC8qIFRoZXkgbXVzdCBnaXZlIHVzIGFuIGlu
cHV0IGZpbGUsIGFuZCBpdCBtdXN0ICovDQogICAgLyogYmUgc3RhdGFibGUg
YW5kIHJlYWRhYmxlIGJ5IHVzIG9yIHdlIGZhaWwgICAgKi8NCiAgICBpZihp
bl9maWxlICE9IE5VTEwpIHsNCiAgICAgICAgaWYoLTEgPT0gKHN0YXQoaW5f
ZmlsZSwmc3RhdGJ1ZikpKSB7DQogICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwiRkFUQUw6IGNhbm5vdCBzdGF0IHRoZSBpbnB1dCBmaWxlIVxuIik7DQog
ICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICB9DQogICAgICAgIGlmKHN0
YXRidWYuc3Rfc2l6ZSA9PSAob2ZmX3QpIDApIHsNCiAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCJGQVRBTDogV1RGIGFyZSB5b3UgZW5jcnlwdGluZyBh
biBlbXB0eSBmaWxlIGZvcj9cbiIpOw0KICAgICAgICAgICAgZXhpdCgxKTsN
CiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIChvZmZfdCkgZmlsZXNp
emUgPSBzdGF0YnVmLnN0X3NpemU7DQogICAgICAgICAgICBmaWxlc2l6ZV9t
c2IgPSBodG9ubChmaWxlc2l6ZSk7DQogICAgICAgIH0NCiAgICAgICAgaWYo
LTEgPT0gYWNjZXNzKGluX2ZpbGUsUl9PSykpIHsNCiAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCJGQVRBTDogYWNjZXNzIGRlbmllZCB3aGlsZSB0cnlp
bmcgdG8gcmVhZCAlczogJXNcbiINCiAgICAgICAgICAgICAgICAgICAgLGlu
X2ZpbGUNCiAgICAgICAgICAgICAgICAgICAgLHN0cmVycm9yKGVycm5vKSk7
DQogICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICB9DQogICAgICAgIGlm
KCFub3VtYXNrKQ0KICAgICAgICAgICAgdW1hc2soMDc3KTsNCiAgICAgICAg
aWYoLTEgPT0gKGZkX2luID0gb3Blbihpbl9maWxlLE9fUkRPTkxZKSkpIHsN
CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogQ2Fubm90IG9w
ZW4oKSB0aGUgZmlsZS5cblx0JXNcbiIsc3RyZXJyb3IoZXJybm8pKTsNCiAg
ICAgICAgICAgIGV4aXQoMSk7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0K
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwiRkFUQUw6IG5vIGlucHV0IGZpbGUh
XG4iKTsNCiAgICAgICAgZXhpdCgxKTsNCiAgICB9DQoNCiAgICAvKiBpZiB0
aGV5IGRpZG4ndCBwcm92aWRlIGFuIG91dCBmaWxlLCBsZXQncyB1c2UgKi8N
CiAgICAvKiBpbl9maWxlLnh4dCBhcyB0aGUgb3V0X2ZpbGUgbmFtZSAgICAg
ICAgICAgICAgKi8NCiAgICBpZihvdXRfZmlsZSA9PSBOVUxMKSB7DQogICAg
ICAgIHVzZV9vdXQgPSAxOw0KICAgICAgICBpZihOVUxMID09IChvdXRfZmls
ZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4oaW5fZmlsZSkgKyA2KSkpIHsN
CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJGQVRBTDogY2Fubm90IGFs
bG9jYXRlIG1lbW9yeS5cbiIpOw0KICAgICAgICAgICAgZXhpdCgxKTsNCiAg
ICAgICAgfQ0KICAgICAgICBzbnByaW50ZihvdXRfZmlsZSxzdHJsZW4oaW5f
ZmlsZSkgKyA2LCIlcy54eHQiLGluX2ZpbGUpOw0KICAgICAgICBpZighbm91
bWFzaykNCiAgICAgICAgICAgIHVtYXNrKDA3Nyk7DQogICAgICAgIGlmKC0x
ID09IChmZF9vdXQgPSBvcGVuKG91dF9maWxlLE9fV1JPTkxZfE9fQ1JFQVR8
T19FWENMLDAwNjAwKSkpIHsNCiAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCJGQVRBTDogY2Fubm90IG9wZW4gdGhlIG91dHB1dCBmaWxlICVzIGZvciB3
cml0aW5nLlxuXHQlc1xuIg0KICAgICAgICAgICAgICAgICAgICAsb3V0X2Zp
bGUNCiAgICAgICAgICAgICAgICAgICAgLHN0cmVycm9yKGVycm5vKSk7DQog
ICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsN
CiAgICAgICAgaWYoIW5vdW1hc2spDQogICAgICAgICAgICB1bWFzaygwNzcp
Ow0KICAgICAgICBpZigtMSA9PSAoZmRfb3V0ID0gb3BlbihvdXRfZmlsZSxP
X1dST05MWXxPX0NSRUFUfE9fRVhDTCwwMDYwMCkpKSB7DQogICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwiRkFUQUw6IGNhbm5vdCBvcGVuIHRoZSBvdXRw
dXQgZmlsZSAlcyBmb3Igd3JpdGluZy5cblx0JXNcbiINCiAgICAgICAgICAg
ICAgICAgICAgLG91dF9maWxlDQogICAgICAgICAgICAgICAgICAgICxzdHJl
cnJvcihlcnJubykpOw0KICAgICAgICAgICAgZXhpdCgxKTsNCiAgICAgICAg
fQ0KICAgIH0NCg0KICAgIC8qIGNyZWF0ZSBzb21lIHJhbmRvbSBieXRlcyB0
aGF0IHdlIG1heSB3YW50IHRvICovDQogICAgLyogdXNlIGxhdGVyIG9uIGZv
ciBwYWRkaW5nLCBkZXBlbmRpbmcgb24gdGhlICAgKi8NCiAgICAvKiBsZW5n
dGggb2YgdGhlIGlucHV0IGl0IG1heSBvciBtYXkgbm90IGdldCAgICAqLw0K
ICAgIC8qIHVzZWQuIFRoZSBtYXhpbXVtIHdlIG1heSBuZWVkIGZvciBwYWRk
aW5nIGlzICovDQogICAgLyogZ29pbmcgdG8gYmUgNjQgYnl0ZXMuICh0aGUg
YmxvY2sgc2l6ZSkgICAgICAgKi8NCiAgICBmb3IoaSA9IDA7IGkgPCAxNjsg
aSsrKSB7DQogICAgICAgIHNyYW5kKGkpOw0KICAgICAgICB0cm5kID0gcmFu
ZCgpOw0KICAgICAgICBzcmFuZCgoaW50KXRpbWUoMCkgKyBnZXRwaWQoKSAr
IGkgKyB0cm5kKTsNCiAgICAgICAgcmFuZHBhZFtpXSA9IHJhbmQoKTsNCiAg
ICB9DQoNCiAgICBpZighdXNlX2ZpbGUpIHsNCiAgICAgICAgbWVtc2V0KCZo
YXNoLDAsMzIpOw0KICAgICAgICAvKiBsZXRzIGhhc2ggdGhlIGtleXMuIFdl
IGdldCBhIDI1NiBiaXQgaGFzaCAgICAqLw0KICAgICAgICAvKiBmcm9tIG1k
NSwgYnV0IHh4dGVhIHRha2VzIGEgMTI4IGJpdCBrZXkgc28gICAqLw0KICAg
ICAgICAvKiB0aGUgaGFzaCB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgZmly
c3QgICAgICAqLw0KICAgICAgICAvKiBieSBuYXR1cmUgb2YgdGhlIGFsZ29y
aXRobSBpdHNlbGYgMTI4IGJpdHMgICAqLw0KICAgICAgICBtZDVfaW5pdCgm
c3RhdGUpOw0KICAgICAgICBtZDVfYXBwZW5kKCZzdGF0ZSwgKGNvbnN0IG1k
NV9ieXRlX3QgKikga2V5cGhyYXNlLCBzdHJsZW4oa2V5cGhyYXNlKSk7DQog
ICAgICAgIG1kNV9maW5pc2goJnN0YXRlLCBkaWdlc3QpOw0KICAgICAgICBt
ZW1jcHkoaGFzaCxkaWdlc3QsIDMyKTsNCiAgICB9DQogICAgLyogc2hvdyBh
IHN1bW1hcnkgb2YgYXJncyBpZiB3ZSBhcmUgaW4gdmVyYm9zZSBtb2RlICov
DQogICAgaWYoZGVidWcpIHsNCiAgICAgICAgcHJpbnRmKCItLS09WyAgWW91
ciBvcHRpb24gc3VtbWFyeSBdPS0tLSBcbiIpOw0KICAgICAgICBwcmludGYo
IklORklMRSAgICA9PSAlc1xuIixpbl9maWxlKTsNCiAgICAgICAgcHJpbnRm
KCJPVVRGSUxFICAgPT0gJXNcbiIsb3V0X2ZpbGUpOw0KICAgICAgICBwcmlu
dGYoIlVOTElOSyAgICA9PSAlZFxuIix1bmxpbmtpdCk7DQogICAgfQ0KDQog
ICAgaWYoZW5jcnlwdCkgew0KICAgICAgICB3aGlsZShmaXJzdF9ibG9jaykg
ew0KICAgICAgICAgICAgYnl0ZXNfcmVhZCA9IHJlYWQoZmRfaW4scGxhaW50
ZXh0LDYwKTsNCiAgICAgICAgICAgIGlmKGJ5dGVzX3JlYWQgPT0gLTEpIHsN
CiAgICAgICAgICAgICAgICBwcmludGYoIkZBVEFMOiAgUHJvYmxlbSByZWFk
aW5nIGlucHV0IGZpbGUuXG5cdCVzXG4iLHN0cmVycm9yKGVycm5vKSk7DQog
ICAgICAgICAgICAgICAgZXhpdCgxKTsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgIC8qIGlmIHRoZSBpbml0aWFsIGlucHV0IGlzbid0IGF0IGxlYXN0
IDYwIGJ5dGVzICovDQogICAgICAgICAgICAvKiB3ZSBhcmUgZ29pbmcgdG8g
aGF2ZSB0byBwYWQgaXQuICovDQogICAgICAgICAgICBpZihieXRlc19yZWFk
ICE9IDYwKSB7DQogICAgICAgICAgICAgICAgcGFkID0gNjAgLSBieXRlc19y
ZWFkIDsNCiAgICAgICAgICAgICAgICBtZW1jcHkocGxhaW50ZXh0K2J5dGVz
X3JlYWQscmFuZHBhZCxwYWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
ICAgbWVtY3B5KGZiX2J1ZmZlciwgJmZpbGVzaXplX21zYiwgNCk7DQogICAg
ICAgICAgICBtZW1jcHkoZmJfYnVmZmVyKzQsIHBsYWludGV4dCwgNjApOw0K
ICAgICAgICAgICAgYnRlYSgoaW50MzJfdCAqKSBmYl9idWZmZXIsIDE2LCAo
aW50MzJfdCAqKSBoYXNoKTsNCiAgICAgICAgICAgIHdyaXRlKGZkX291dCwo
Y2hhciAqKSBmYl9idWZmZXIsNjQpOw0KICAgICAgICAgICAgZmlyc3RfYmxv
Y2sgPSAwOw0KICAgICAgICB9DQogICAgICAgIHdoaWxlKCAoYnl0ZXNfcmVh
ZCA9IHJlYWQoZmRfaW4scGxhaW50ZXh0LDY0KSkgKSB7DQogICAgICAgICAg
ICBpZihieXRlc19yZWFkID09IDY0KSB7DQogICAgICAgICAgICAgICAgYnRl
YSgoaW50MzJfdCAqKSBwbGFpbnRleHQsIDE2LCAoaW50MzJfdCAqKSBoYXNo
KTsNCiAgICAgICAgICAgICAgICB3cml0ZShmZF9vdXQsKGNoYXIgKikgcGxh
aW50ZXh0LDY0KTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg
ICAgICAgcGFkID0gNjQgLSBieXRlc19yZWFkOw0KICAgICAgICAgICAgICAg
IG1lbWNweShwbGFpbnRleHQrYnl0ZXNfcmVhZCxyYW5kcGFkLHBhZCk7DQog
ICAgICAgICAgICAgICAgYnRlYSgoaW50MzJfdCAqKSBwbGFpbnRleHQsIDE2
LCAoaW50MzJfdCAqKSBoYXNoKTsNCiAgICAgICAgICAgICAgICB3cml0ZShm
ZF9vdXQsKGNoYXIgKikgcGxhaW50ZXh0LDY0KTsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgfQ0KICAgIH0gZWxzZSBpZihkZWNyeXB0KSB7DQogICAgICAg
IHdoaWxlKGZpcnN0X2Jsb2NrKSB7DQogICAgICAgICAgICByZWFkKGZkX2lu
LHBsYWludGV4dCw2NCk7DQogICAgICAgICAgICBidGVhKChpbnQzMl90ICop
IHBsYWludGV4dCwgLTE2LCAoaW50MzJfdCAqKSBoYXNoKTsNCiAgICAgICAg
ICAgIG1lbWNweSgmcmVhZF9maWxlc2l6ZV9tc2IscGxhaW50ZXh0LDQpOw0K
ICAgICAgICAgICAgcmVhZF9maWxlc2l6ZSA9IG50b2hsKHJlYWRfZmlsZXNp
emVfbXNiKTsNCiAgICAgICAgICAgIC8qIG5vdyB0aGF0IHdlIGtub3cgdGhl
IGZpbGVzaXplLiBMZXQncyBjYWxjdWxhdGUgaWYgdGhlICovDQogICAgICAg
ICAgICAvKiBpbiBmaWxlIGFjdHVhbGx5IG1hdGNoZXMgaXQuIFRoaXMgaXMg
YW4gYXR0ZW1wdCB0byAgICAqLw0KICAgICAgICAgICAgLyogYXZvaWQgc29t
ZW9uZSBtYWtpbmcgYW4gImV2aWwiIHh4dCBhbmQgY3JlYXRpbmcgZmlsZXMg
Ki8NCiAgICAgICAgICAgIC8qIHRvIGNyYXNoIHNvbWVvbmUgZWxzZXMgImdv
b2QiIHZlcnNpb24gYW5kL29yIGNyZWF0ZSAgICovDQogICAgICAgICAgICAv
KiBtb25zdGVyIGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLw0KICAgICAgICAgICAgcGFkID0gKDY0IC0gKHJlYWRf
ZmlsZXNpemUpICUgNjQpOw0KICAgICAgICAgICAgaWYocGFkIDwgNCkgew0K
ICAgICAgICAgICAgICAgIHBhZCArPSA2NDsNCiAgICAgICAgICAgICAgICBp
ID0gcmVhZF9maWxlc2l6ZSA7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAg
ICAgICAgICAgICAgIGkgPSByZWFkX2ZpbGVzaXplOw0KICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgaWYoZmlsZXNpemUgIT0gKGkgKyBwYWQpKSB7DQog
ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIkZBVEFMOiB0aGUgZmls
ZSBzaXplIGluIHRoZSBoZWFkZXIgaXMgbWlzbWF0Y2hlZCB3aXRoIHRoZSBh
Y3R1YWwgc2l6ZS5cbiIpOw0KICAgICAgICAgICAgICAgIGV4aXQoMSk7DQog
ICAgICAgICAgICB9DQogICAgICAgICAgICBpZihyZWFkX2ZpbGVzaXplID49
IDYwKSB7DQogICAgICAgICAgICAgICAgd3JpdGUoZmRfb3V0LChjaGFyICop
IHBsYWludGV4dCs0LDYwKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAg
ICAgICAgICAgICAgd3JpdGUoZmRfb3V0LChjaGFyICopIHBsYWludGV4dCs0
LHJlYWRfZmlsZXNpemUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
YnNmICs9IDY0Ow0KICAgICAgICAgICAgZmlyc3RfYmxvY2sgPSAwOw0KICAg
ICAgICB9DQogICAgICAgIHdoaWxlKDAgIT0gKGJ5dGVzX3JlYWQgPSByZWFk
KGZkX2luLHBsYWludGV4dCw2NCkpICkgew0KICAgICAgICAgICAgYnRlYSgo
aW50MzJfdCAqKSBwbGFpbnRleHQsIC0xNiwgKGludDMyX3QgKikgaGFzaCk7
DQogICAgICAgICAgICBic2YgKz0gNjQ7DQogICAgICAgICAgICBpZihic2Yg
PCAocmVhZF9maWxlc2l6ZSArIDQpICYmIHJlYWRfZmlsZXNpemUgPiA2NCkg
ew0KICAgICAgICAgICAgICAgIHdyaXRlKGZkX291dCwoY2hhciAqKSBwbGFp
bnRleHQsNjQpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg
ICAgICBibCA9IDY0IC0gKGJzZiAtIChyZWFkX2ZpbGVzaXplICsgNCkpOyAv
KiBjYWxjIGhvdyBtdWNoIGlzIHJlYWxseSBsZWZ0ICovDQogICAgICAgICAg
ICAgICAgd3JpdGUoZmRfb3V0LChjaGFyICopIHBsYWludGV4dCxibCk7DQog
ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKiBpZiB0
aGV5IHdhbnQgdG8gZGVsZXRlIHRoZSBpbmZpbGUgKi8NCiAgICBpZih1bmxp
bmtpdCkNCiAgICAgICAgdW5saW5rKGluX2ZpbGUpOw0KDQogICAgLyogZnJl
ZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGFuZCB6ZXJvIG91dCB0
aGUgY29udGVudHMgdG8gKi8NCiAgICAvKiB0cnkgdG8gbWFrZSByZWNvdmVy
eSBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHdlIGRpZCBoYXJkZXIgICAq
Lw0KICAgIG1lbXNldChpbl9maWxlLDAsc3RybGVuKGluX2ZpbGUpKTsNCiAg
ICBmcmVlKGluX2ZpbGUpOw0KICAgIGlmKHVzZV9rcCB8fCB1c2Vfa2UpIHsN
CiAgICAgICAgbWVtc2V0KGtleXBocmFzZSwwLHN0cmxlbihrZXlwaHJhc2Up
KTsNCiAgICAgICAgZnJlZShrZXlwaHJhc2UpOw0KICAgIH0NCiAgICBpZih1
c2Vfb3V0KSB7DQogICAgICAgIG1lbXNldChvdXRfZmlsZSwwLHN0cmxlbihv
dXRfZmlsZSkpOw0KICAgICAgICBmcmVlKG91dF9maWxlKTsNCiAgICB9DQog
ICAgaWYodXNlX2ZpbGUpIHsNCiAgICAgICAgbWVtc2V0KGtleWZpbGUsMCxz
dHJsZW4oa2V5ZmlsZSkpOw0KICAgICAgICBmcmVlKGtleWZpbGUpOw0KICAg
IH0NCiAgICBjbG9zZShmZF9vdXQpOw0KICAgIGNsb3NlKGZkX2luKTsNCiAg
ICByZXR1cm4oMCk7DQp9DQoNCnZvaWQgc2hvd2hlbHAodm9pZCkgew0KICAg
IHByaW50ZigiXG54eHQgLSBhbiB4eHRlYSBiYXNlZCB2YXJpYWJsZSBibG9j
ay1tb2RlIGZpbGUgZW5jcnlwdG9yLlxuIik7DQogICAgcHJpbnRmKCJieSBh
bGl2ZXJcblxuIik7DQogICAgcHJpbnRmKCIrLS0tPVsgT3B0aW9ucyBdPS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuIik7DQogICAgcHJpbnRmKCJ8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxu
Iik7DQogICAgcHJpbnRmKCJ8IC1oIHByaW50IGhlbHAgICAgICAgIC12IGJl
IHZlcmJvc2UgICAgICAgfFxuIik7DQogICAgcHJpbnRmKCJ8IC1pIGlucHV0
X2ZpbGUgICAgICAgIC1vIG91dHB1dF9maWxlICAgICAgfFxuIik7DQogICAg
cHJpbnRmKCJ8IC1rIGtleXBocmFzZSAgICAgICAgIC1nIGtleSBlbnZfdmFy
aWFibGUgfFxuIik7DQogICAgcHJpbnRmKCJ8IC11IHVubGluayBpbnB1dF9m
aWxlIGFmdGVyIGVuY3J5cHRpb24gICAgfFxuIik7DQogICAgcHJpbnRmKCJ8
IC14IGRvbnQgc2V0IHVtYXNrIHRvIGEgc2FmZSB2YWx1ZSAgICAgICAgfFxu
Iik7DQogICAgcHJpbnRmKCJ8IEV4YW1wbGU6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfFxuIik7DQogICAgcHJpbnRmKCJ8IFwieHh0IC1r
IHNlY3JldHBhc3MgLWkgdGVzdCAtdVwiICAgICAgICAgICB8XG4iKTsNCiAg
ICBwcmludGYoInwgWW91IGdldCBcInRlc3QueHh0XCIgYW5kIGRlbGV0ZXMg
XCJ0ZXN0XCIgICAgfFxuIik7DQogICAgcHJpbnRmKCJ8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuIik7DQogICAgcHJp
bnRmKCIrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tK1xuIik7DQoNCn0NCg0KDQovKiBuZWFybHkgYWxsIHRoZSBmb2xsb3dp
bmcgeHh0ZWEgY3J5cHRvICovDQovKiBjb2RlIGZyb20gdGhlIHBvc3Qgc2Ny
aXB0ICAgICAgICAgICAgICovDQovKiBieSBEYXZpZCBXaGVlbGVyIGFuZCBS
b2dlciBOZWVkaGFtICAgICovDQovKiBJJ3ZlIGFsdGVyZWQgaXQgdG8gYmUg
bW9yZSBwb3J0YWJsZSAgICovDQovKiBvbiA2NCBiaXQgcGxhdGZvcm1zIGJ5
IG1ha2luZyB1c2Ugb2YgICovDQovKiBkZWZpbml0aW9ucyBpbiBzdGRpbnQu
aCAgICAgICAgICAgICAgICovDQpsb25nIGJ0ZWEoIGludDMyX3QgKiB2LCBp
bnQzMl90IG4gLCBpbnQzMl90ICogayApIHsNCiAgICB1aW50MzJfdCB6PXZb
bi0xXSwgeT12WzBdLCBzdW09MCxlLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBERUxUQT0weDllMzc3OWI5IDsNCiAgICBpbnQzMl90
IHAsIHEgOw0KICAgIGlmICggbj4xKSB7DQogICAgICAgIC8qIENvZGluZyBQ
YXJ0ICovDQogICAgICAgIHEgPSA2KzUyL24gOw0KICAgICAgICB3aGlsZSAo
IHEtLSA+IDAgKSB7DQogICAgICAgICAgICBzdW0gKz0gREVMVEEgOw0KICAg
ICAgICAgICAgZSA9IHN1bSA+PiAyJjMgOw0KICAgICAgICAgICAgZm9yICgg
cCA9IDAgOyBwIDwgbi0xIDsgcCsrICkNCiAgICAgICAgICAgICAgICB5ID0g
dltwKzFdLA0KICAgICAgICAgICAgICAgICAgICB6ID0gdltwXSArPSBNWA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gdlswXSA7DQog
ICAgICAgICAgICB6ID0gdltuLTFdICs9IE1YDQogICAgICAgICAgICAgICAg
ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwIDsNCiAg
ICB9DQogICAgLyogRGVjb2RpbmcgUGFydCAqLw0KICAgIGVsc2UgaWYgKCBu
IDwtMSApIHsNCiAgICAgICAgbiA9IC1uIDsNCiAgICAgICAgcSA9IDYrNTIv
biA7DQogICAgICAgIHN1bSA9IHEqREVMVEEgOw0KICAgICAgICB3aGlsZSAo
c3VtICE9IDApIHsNCiAgICAgICAgICAgIGUgPSBzdW0+PjIgJiAzIDsNCiAg
ICAgICAgICAgIGZvciAocCA9IG4tMSA7IHAgPiAwIDsgcC0tICkNCiAgICAg
ICAgICAgICAgICB6ID0gdltwLTFdLA0KICAgICAgICAgICAgICAgICAgICB5
ID0gdltwXSAtPSBNWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB6ID0gdltuLTFdIDsNCiAgICAgICAgICAgIHkgPSB2WzBdIC09IE1YDQog
ICAgICAgICAgICAgICAgICAgICAgICBzdW0gLT0gREVMVEEgOw0KICAgICAg
ICB9DQogICAgICAgIHJldHVybiAwIDsNCiAgICB9DQogICAgcmV0dXJuIDEg
Ow0KfSAvKiBTaWduYWwgbj0wLDEsLTEgKi8NCg0KDQoNCi8qIE1ENSBhbGdv
cml0aG0gdXNlZCB0byBoYXNoIHRoZSBrZXlzIGdpdmVuIHRvIHh4dCAqLw0K
LyogVGhpcyBzb3VyY2UgY29kZSBoYXMgYmVlbiBhbHRlcmVkIHRvIGJldHRl
ciBzdWl0ICovDQovKiBteSBwdXJwb3NlcyAoc3BlZWQsIGFuZCBmb3JtYXR0
aW5nKSBhbmQgSSBhbSBub3cgKi8NCi8qIGRlY2xhcmluZyBpdCBzbyBub2Jv
ZHkgaGFzIGEgZml0IGFib3V0IGl0LiBOb3cgICAqLw0KLyogeW91IGNhbiBy
ZWFkIFBldGVyJ3Mgbm90aWNlIGJlbG93LiBJdCBvbmx5ICAgICAgICovDQov
KiBhcHBsaWVzIHRvIHRoZSBNRDUgaGFzaGluZyBwYXJ0IG9mIHh4dCAhICAg
ICAgICAgKi8NCg0KLyoNCiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAy
MDAyIEFsYWRkaW4gRW50ZXJwcmlzZXMuICBBbGwgcmlnaHRzIHJlc2VydmVk
Lg0KIA0KICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdp
dGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZA0KICB3YXJyYW50eS4gIElu
IG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9y
IGFueSBkYW1hZ2VzDQogIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMg
c29mdHdhcmUuDQogDQogIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlv
bmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLA0KICBp
bmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRl
ciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0DQogIGZyZWVseSwgc3ViamVjdCB0
byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoNCiANCiAgMS4gVGhlIG9y
aWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2Vu
dGVkOyB5b3UgbXVzdCBub3QNCiAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUg
dGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdh
cmUNCiAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0
aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlDQogICAgIGFwcHJl
Y2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuDQogIDIuIEFsdGVyZWQgc291
cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwg
YW5kIG11c3Qgbm90IGJlDQogICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5n
IHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4NCiAgMy4gVGhpcyBub3RpY2UgbWF5
IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRp
c3RyaWJ1dGlvbi4NCiANCiAgTC4gUGV0ZXIgRGV1dHNjaA0KICBnaG9zdEBh
bGFkZGluLmNvbQ0KIA0KICovDQoNCnN0YXRpYyB2b2lkIG1kNV9wcm9jZXNz
KG1kNV9zdGF0ZV90ICpwbXMsIGNvbnN0IG1kNV9ieXRlX3QgKmRhdGEgLypb
NjRdKi8pIHsNCiAgICBtZDVfd29yZF90DQogICAgYSA9IHBtcy0+YWJjZFsw
XSwgYiA9IHBtcy0+YWJjZFsxXSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgYyA9IHBtcy0+YWJjZFsyXSwgZCA9IHBtcy0+YWJjZFszXTsNCiAgICBt
ZDVfd29yZF90IHQ7DQojaWYgQllURV9PUkRFUiA+IDANCiAgICAvKiBEZWZp
bmUgc3RvcmFnZSBvbmx5IGZvciBiaWctZW5kaWFuIENQVXMuICovDQogICAg
bWQ1X3dvcmRfdCBYWzE2XTsNCiNlbHNlDQovKiBEZWZpbmUgc3RvcmFnZSBm
b3IgbGl0dGxlLWVuZGlhbiBvciBib3RoIHR5cGVzIG9mIENQVXMuICovDQog
ICAgbWQ1X3dvcmRfdCB4YnVmWzE2XTsNCiAgICBjb25zdCBtZDVfd29yZF90
ICpYOw0KI2VuZGlmDQoNCiAgICB7DQojaWYgQllURV9PUkRFUiA9PSAwDQog
ICAgICAgIC8qDQogICAgICAgICAqIERldGVybWluZSBkeW5hbWljYWxseSB3
aGV0aGVyIHRoaXMgaXMgYSBiaWctZW5kaWFuIG9yDQogICAgICAgICAqIGxp
dHRsZS1lbmRpYW4gbWFjaGluZSwgc2luY2Ugd2UgY2FuIHVzZSBhIG1vcmUg
ZWZmaWNpZW50DQogICAgICAgICAqIGFsZ29yaXRobSBvbiB0aGUgbGF0dGVy
Lg0KICAgICAgICAgKi8NCiAgICAgICAgc3RhdGljIGNvbnN0IGludCB3ID0g
MTsNCg0KICAgICAgICBpZiAoKigoY29uc3QgbWQ1X2J5dGVfdCAqKSZ3KSkg
LyogZHluYW1pYyBsaXR0bGUtZW5kaWFuICovDQojZW5kaWYNCiNpZiBCWVRF
X09SREVSIDw9IDAJCS8qIGxpdHRsZS1lbmRpYW4gKi8gDQp7DQogICAgICAg
ICAgICAvKg0KICAgICAgICAgICAgICogT24gbGl0dGxlLWVuZGlhbiBtYWNo
aW5lcywgd2UgY2FuIHByb2Nlc3MgcHJvcGVybHkgYWxpZ25lZA0KICAgICAg
ICAgICAgICogZGF0YSB3aXRob3V0IGNvcHlpbmcgaXQuDQogICAgICAgICAg
ICAgKi8NCiAgICAgICAgICAgIGlmICghKChkYXRhIC0gKGNvbnN0IG1kNV9i
eXRlX3QgKikwKSAmIDMpKSB7DQogICAgICAgICAgICAgICAgLyogZGF0YSBh
cmUgcHJvcGVybHkgYWxpZ25lZCAqLw0KICAgICAgICAgICAgICAgIFggPSAo
Y29uc3QgbWQ1X3dvcmRfdCAqKWRhdGE7DQogICAgICAgICAgICB9IGVsc2Ug
ew0KICAgICAgICAgICAgICAgIC8qIG5vdCBhbGlnbmVkICovDQogICAgICAg
ICAgICAgICAgbWVtY3B5KHhidWYsIGRhdGEsIDY0KTsNCiAgICAgICAgICAg
ICAgICBYID0geGJ1ZjsNCiAgICAgICAgICAgIH0NCiAgICB9DQojZW5kaWYN
CiNpZiBCWVRFX09SREVSID09IDANCiAgICBlbHNlCQkJLyogZHluYW1pYyBi
aWctZW5kaWFuICovDQojZW5kaWYNCiNpZiBCWVRFX09SREVSID49IDAJCS8q
IGJpZy1lbmRpYW4gKi8gDQp7DQogICAgICAgIC8qDQogICAgICAgICAqIE9u
IGJpZy1lbmRpYW4gbWFjaGluZXMsIHdlIG11c3QgYXJyYW5nZSB0aGUgYnl0
ZXMgaW4gdGhlDQogICAgICAgICAqIHJpZ2h0IG9yZGVyLg0KICAgICAgICAg
Ki8NCiAgICAgICAgY29uc3QgbWQ1X2J5dGVfdCAqeHAgPSBkYXRhOw0KICAg
IGludCBpOw0KDQojICBpZiBCWVRFX09SREVSID09IDANCiAgICBYID0geGJ1
ZjsJCS8qIChkeW5hbWljIG9ubHkpICovDQojICBlbHNlDQojICAgIGRlZmlu
ZSB4YnVmIFgJCS8qIChzdGF0aWMgb25seSkgKi8NCiMgIGVuZGlmDQogICAg
Zm9yIChpID0gMDsgaSA8IDE2OyArK2ksIHhwICs9IDQpDQogICAgICAgIHhi
dWZbaV0gPSB4cFswXSArICh4cFsxXSA8PCA4KSArICh4cFsyXSA8PCAxNikg
KyAoeHBbM10gPDwgMjQpOw0KfQ0KI2VuZGlmDQp9DQoNCiNkZWZpbmUgUk9U
QVRFX0xFRlQoeCwgbikgKCgoeCkgPDwgKG4pKSB8ICgoeCkgPj4gKDMyIC0g
KG4pKSkpDQoNCi8qIFJvdW5kIDEuICovDQovKiBMZXQgW2FiY2QgayBzIGld
IGRlbm90ZSB0aGUgb3BlcmF0aW9uDQogICBhID0gYiArICgoYSArIEYoYixj
LGQpICsgWFtrXSArIFRbaV0pIDw8PCBzKS4gKi8NCiNkZWZpbmUgRih4LCB5
LCB6KSAoKCh4KSAmICh5KSkgfCAofih4KSAmICh6KSkpDQojZGVmaW5lIFNF
VChhLCBiLCBjLCBkLCBrLCBzLCBUaSlcDQp0ID0gYSArIEYoYixjLGQpICsg
WFtrXSArIFRpO1wNCmEgPSBST1RBVEVfTEVGVCh0LCBzKSArIGINCi8qIERv
IHRoZSBmb2xsb3dpbmcgMTYgb3BlcmF0aW9ucy4gKi8NClNFVChhLCBiLCBj
LCBkLCAgMCwgIDcsICBUMSk7DQpTRVQoZCwgYSwgYiwgYywgIDEsIDEyLCAg
VDIpOw0KU0VUKGMsIGQsIGEsIGIsICAyLCAxNywgIFQzKTsNClNFVChiLCBj
LCBkLCBhLCAgMywgMjIsICBUNCk7DQpTRVQoYSwgYiwgYywgZCwgIDQsICA3
LCAgVDUpOw0KU0VUKGQsIGEsIGIsIGMsICA1LCAxMiwgIFQ2KTsNClNFVChj
LCBkLCBhLCBiLCAgNiwgMTcsICBUNyk7DQpTRVQoYiwgYywgZCwgYSwgIDcs
IDIyLCAgVDgpOw0KU0VUKGEsIGIsIGMsIGQsICA4LCAgNywgIFQ5KTsNClNF
VChkLCBhLCBiLCBjLCAgOSwgMTIsIFQxMCk7DQpTRVQoYywgZCwgYSwgYiwg
MTAsIDE3LCBUMTEpOw0KU0VUKGIsIGMsIGQsIGEsIDExLCAyMiwgVDEyKTsN
ClNFVChhLCBiLCBjLCBkLCAxMiwgIDcsIFQxMyk7DQpTRVQoZCwgYSwgYiwg
YywgMTMsIDEyLCBUMTQpOw0KU0VUKGMsIGQsIGEsIGIsIDE0LCAxNywgVDE1
KTsNClNFVChiLCBjLCBkLCBhLCAxNSwgMjIsIFQxNik7DQojdW5kZWYgU0VU
DQoNCi8qIFJvdW5kIDIuICovDQovKiBMZXQgW2FiY2QgayBzIGldIGRlbm90
ZSB0aGUgb3BlcmF0aW9uDQogICAgIGEgPSBiICsgKChhICsgRyhiLGMsZCkg
KyBYW2tdICsgVFtpXSkgPDw8IHMpLiAqLw0KI2RlZmluZSBHKHgsIHksIHop
ICgoKHgpICYgKHopKSB8ICgoeSkgJiB+KHopKSkNCiNkZWZpbmUgU0VUKGEs
IGIsIGMsIGQsIGssIHMsIFRpKVwNCnQgPSBhICsgRyhiLGMsZCkgKyBYW2td
ICsgVGk7XA0KYSA9IFJPVEFURV9MRUZUKHQsIHMpICsgYg0KLyogRG8gdGhl
IGZvbGxvd2luZyAxNiBvcGVyYXRpb25zLiAqLw0KU0VUKGEsIGIsIGMsIGQs
ICAxLCAgNSwgVDE3KTsNClNFVChkLCBhLCBiLCBjLCAgNiwgIDksIFQxOCk7
DQpTRVQoYywgZCwgYSwgYiwgMTEsIDE0LCBUMTkpOw0KU0VUKGIsIGMsIGQs
IGEsICAwLCAyMCwgVDIwKTsNClNFVChhLCBiLCBjLCBkLCAgNSwgIDUsIFQy
MSk7DQpTRVQoZCwgYSwgYiwgYywgMTAsICA5LCBUMjIpOw0KU0VUKGMsIGQs
IGEsIGIsIDE1LCAxNCwgVDIzKTsNClNFVChiLCBjLCBkLCBhLCAgNCwgMjAs
IFQyNCk7DQpTRVQoYSwgYiwgYywgZCwgIDksICA1LCBUMjUpOw0KU0VUKGQs
IGEsIGIsIGMsIDE0LCAgOSwgVDI2KTsNClNFVChjLCBkLCBhLCBiLCAgMywg
MTQsIFQyNyk7DQpTRVQoYiwgYywgZCwgYSwgIDgsIDIwLCBUMjgpOw0KU0VU
KGEsIGIsIGMsIGQsIDEzLCAgNSwgVDI5KTsNClNFVChkLCBhLCBiLCBjLCAg
MiwgIDksIFQzMCk7DQpTRVQoYywgZCwgYSwgYiwgIDcsIDE0LCBUMzEpOw0K
U0VUKGIsIGMsIGQsIGEsIDEyLCAyMCwgVDMyKTsNCiN1bmRlZiBTRVQNCg0K
LyogUm91bmQgMy4gKi8NCi8qIExldCBbYWJjZCBrIHMgdF0gZGVub3RlIHRo
ZSBvcGVyYXRpb24NCiAgICAgYSA9IGIgKyAoKGEgKyBIKGIsYyxkKSArIFhb
a10gKyBUW2ldKSA8PDwgcykuICovDQojZGVmaW5lIEgoeCwgeSwgeikgKCh4
KSBeICh5KSBeICh6KSkNCiNkZWZpbmUgU0VUKGEsIGIsIGMsIGQsIGssIHMs
IFRpKVwNCnQgPSBhICsgSChiLGMsZCkgKyBYW2tdICsgVGk7XA0KYSA9IFJP
VEFURV9MRUZUKHQsIHMpICsgYg0KLyogRG8gdGhlIGZvbGxvd2luZyAxNiBv
cGVyYXRpb25zLiAqLw0KU0VUKGEsIGIsIGMsIGQsICA1LCAgNCwgVDMzKTsN
ClNFVChkLCBhLCBiLCBjLCAgOCwgMTEsIFQzNCk7DQpTRVQoYywgZCwgYSwg
YiwgMTEsIDE2LCBUMzUpOw0KU0VUKGIsIGMsIGQsIGEsIDE0LCAyMywgVDM2
KTsNClNFVChhLCBiLCBjLCBkLCAgMSwgIDQsIFQzNyk7DQpTRVQoZCwgYSwg
YiwgYywgIDQsIDExLCBUMzgpOw0KU0VUKGMsIGQsIGEsIGIsICA3LCAxNiwg
VDM5KTsNClNFVChiLCBjLCBkLCBhLCAxMCwgMjMsIFQ0MCk7DQpTRVQoYSwg
YiwgYywgZCwgMTMsICA0LCBUNDEpOw0KU0VUKGQsIGEsIGIsIGMsICAwLCAx
MSwgVDQyKTsNClNFVChjLCBkLCBhLCBiLCAgMywgMTYsIFQ0Myk7DQpTRVQo
YiwgYywgZCwgYSwgIDYsIDIzLCBUNDQpOw0KU0VUKGEsIGIsIGMsIGQsICA5
LCAgNCwgVDQ1KTsNClNFVChkLCBhLCBiLCBjLCAxMiwgMTEsIFQ0Nik7DQpT
RVQoYywgZCwgYSwgYiwgMTUsIDE2LCBUNDcpOw0KU0VUKGIsIGMsIGQsIGEs
ICAyLCAyMywgVDQ4KTsNCiN1bmRlZiBTRVQNCg0KLyogUm91bmQgNC4gKi8N
Ci8qIExldCBbYWJjZCBrIHMgdF0gZGVub3RlIHRoZSBvcGVyYXRpb24NCiAg
ICAgYSA9IGIgKyAoKGEgKyBJKGIsYyxkKSArIFhba10gKyBUW2ldKSA8PDwg
cykuICovDQojZGVmaW5lIEkoeCwgeSwgeikgKCh5KSBeICgoeCkgfCB+KHop
KSkNCiNkZWZpbmUgU0VUKGEsIGIsIGMsIGQsIGssIHMsIFRpKVwNCnQgPSBh
ICsgSShiLGMsZCkgKyBYW2tdICsgVGk7XA0KYSA9IFJPVEFURV9MRUZUKHQs
IHMpICsgYg0KLyogRG8gdGhlIGZvbGxvd2luZyAxNiBvcGVyYXRpb25zLiAq
Lw0KU0VUKGEsIGIsIGMsIGQsICAwLCAgNiwgVDQ5KTsNClNFVChkLCBhLCBi
LCBjLCAgNywgMTAsIFQ1MCk7DQpTRVQoYywgZCwgYSwgYiwgMTQsIDE1LCBU
NTEpOw0KU0VUKGIsIGMsIGQsIGEsICA1LCAyMSwgVDUyKTsNClNFVChhLCBi
LCBjLCBkLCAxMiwgIDYsIFQ1Myk7DQpTRVQoZCwgYSwgYiwgYywgIDMsIDEw
LCBUNTQpOw0KU0VUKGMsIGQsIGEsIGIsIDEwLCAxNSwgVDU1KTsNClNFVChi
LCBjLCBkLCBhLCAgMSwgMjEsIFQ1Nik7DQpTRVQoYSwgYiwgYywgZCwgIDgs
ICA2LCBUNTcpOw0KU0VUKGQsIGEsIGIsIGMsIDE1LCAxMCwgVDU4KTsNClNF
VChjLCBkLCBhLCBiLCAgNiwgMTUsIFQ1OSk7DQpTRVQoYiwgYywgZCwgYSwg
MTMsIDIxLCBUNjApOw0KU0VUKGEsIGIsIGMsIGQsICA0LCAgNiwgVDYxKTsN
ClNFVChkLCBhLCBiLCBjLCAxMSwgMTAsIFQ2Mik7DQpTRVQoYywgZCwgYSwg
YiwgIDIsIDE1LCBUNjMpOw0KU0VUKGIsIGMsIGQsIGEsICA5LCAyMSwgVDY0
KTsNCiN1bmRlZiBTRVQNCg0KLyogVGhlbiBwZXJmb3JtIHRoZSBmb2xsb3dp
bmcgYWRkaXRpb25zLiAoVGhhdCBpcyBpbmNyZW1lbnQgZWFjaA0KICAgb2Yg
dGhlIGZvdXIgcmVnaXN0ZXJzIGJ5IHRoZSB2YWx1ZSBpdCBoYWQgYmVmb3Jl
IHRoaXMgYmxvY2sNCiAgIHdhcyBzdGFydGVkLikgKi8NCnBtcy0+YWJjZFsw
XSArPSBhOw0KICAgICAgICAgICAgICAgIHBtcy0+YWJjZFsxXSArPSBiOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbXMtPmFiY2RbMl0g
Kz0gYzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBtcy0+YWJjZFszXSArPSBkOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgbWQ1X2luaXQobWQ1
X3N0YXRlX3QgKnBtcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbXMt
PmNvdW50WzBdID0gcG1zLT5jb3VudFsxXSA9IDA7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBtcy0+YWJjZFswXSA9IDB4Njc0NTIzMDE7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBtcy0+YWJjZFsxXSA9IC8qMHhlZmNkYWI4OSov
IFRfTUFTSyBeIDB4MTAzMjU0NzY7DQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBtcy0+YWJjZFsyXSA9IC8qMHg5OGJhZGNmZSovIFRfTUFTSyBeIDB4Njc0
NTIzMDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtcy0+YWJjZFszXSA9
IDB4MTAzMjU0NzY7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCBtZDVfYXBwZW5kKG1kNV9zdGF0ZV90ICpwbXMs
IGNvbnN0IG1kNV9ieXRlX3QgKmRhdGEsIGludCBuYnl0ZXMpIHsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbWQ1X2J5dGVfdCAqcCA9IGRhdGE7
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZWZ0ID0gbmJ5dGVzOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKHBtcy0+Y291
bnRbMF0gPj4gMykgJiA2MzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1
X3dvcmRfdCBuYml0cyA9IChtZDVfd29yZF90KShuYnl0ZXMgPDwgMyk7DQoN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ieXRlcyA8PSAwKQ0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgbWVzc2FnZSBsZW5ndGguICov
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBtcy0+Y291bnRbMV0gKz0gbmJ5
dGVzID4+IDI5Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbXMtPmNvdW50
WzBdICs9IG5iaXRzOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG1z
LT5jb3VudFswXSA8IG5iaXRzKQ0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG1zLT5jb3VudFsxXSsrOw0KDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8qIFByb2Nlc3MgYW4gaW5pdGlhbCBwYXJ0aWFsIGJsb2NrLiAqLw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0KSB7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgY29weSA9IChvZmZzZXQgKyBuYnl0ZXMg
PiA2NCA/IDY0IC0gb2Zmc2V0IDogbmJ5dGVzKTsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KHBtcy0+YnVmICsgb2Zmc2V0LCBwLCBj
b3B5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQg
KyBjb3B5IDwgNjQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBjb3B5
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSBjb3B5Ow0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1X3Byb2Nlc3MocG1zLCBw
bXMtPmJ1Zik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGZ1bGwgYmxvY2tzLiAqLw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbGVmdCA+PSA2NDsgcCAr
PSA2NCwgbGVmdCAtPSA2NCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1kNV9wcm9jZXNzKHBtcywgcCk7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyogUHJvY2VzcyBhIGZpbmFsIHBhcnRpYWwgYmxvY2suICovDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0KQ0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVtY3B5KHBtcy0+YnVmLCBwLCBsZWZ0KTsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG1k
NV9maW5pc2gobWQ1X3N0YXRlX3QgKnBtcywgbWQ1X2J5dGVfdCBkaWdlc3Rb
MTZdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBt
ZDVfYnl0ZV90IHBhZFs2NF0gPSB7DQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWQ1X2J5dGVfdCBkYXRhWzhdOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT
YXZlIHRoZSBsZW5ndGggYmVmb3JlIHBhZGRpbmcuICovDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gKG1kNV9ieXRlX3QpKHBt
cy0+Y291bnRbaSA+PiAyXSA+PiAoKGkgJiAzKSA8PCAzKSk7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qIFBhZCB0byA1NiBieXRlcyBtb2QgNjQuICov
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1kNV9hcHBlbmQocG1zLCBwYWQs
ICgoNTUgLSAocG1zLT5jb3VudFswXSA+PiAzKSkgJiA2MykgKyAxKTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLyogQXBwZW5kIHRoZSBsZW5ndGguICov
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1kNV9hcHBlbmQocG1zLCBkYXRh
LCA4KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IDE2OyArK2kpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3Rb
aV0gPSAobWQ1X2J5dGVfdCkocG1zLT5hYmNkW2kgPj4gMl0gPj4gKChpICYg
MykgPDwgMykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0K
---1062731517-1887128600-1030535739=:215259--


Current thread: