[Box Backup] Win32 port (was: BoxBackup Server Side Management
Specs (Draft0.01))
Chris Wilson
boxbackup@fluffy.co.uk
Fri, 8 Oct 2004 23:53:26 +0100 (BST)
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.
---1044231485-1028536687-1097276006=:22116
Content-Type: TEXT/PLAIN; charset=US-ASCII
Hi Ben,
> It might be worth sending me an early copy to make sure the design fits
> in with everything else.
Further to my last e-mail, please find attached the current differences
between Box 0.07 and my local copy, which includes the initial framework
for support for the status socket.
This is a rather large patch at around 1100 lines! It's provided with no
warranty whatsoever, not even that it will compile or run on any system.
It's merely an example of what I have been working on, for your reading
pleasure. Comments are highly appreciated.
Cheers, Chris.
--
_ ___ __ _
/ __/ / ,__(_)_ | Chris Wilson <0000 at qwirx.com> - Cambs UK |
/ (_/ ,\/ _/ /_ \ | Security/C/C++/Java/Perl/SQL/HTML Developer |
\ _/_/_/_//_/___/ | We are GNU-free your mind-and your software |
---1044231485-1028536687-1097276006=:22116
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="boxbackup-boxi-status-041008.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.44.0410082353260.22116@top.qwarx.com>
Content-Description:
Content-Disposition: attachment; filename="boxbackup-boxi-status-041008.patch"
ZGlmZiAtcnUgYm94YmFja3VwLTAuMDcvYmluL2JiYWNrdXBkL0JhY2t1cERh
ZW1vbi5jcHAgYm94aS9ib3hiYWNrdXAtMC4wNy9iaW4vYmJhY2t1cGQvQmFj
a3VwRGFlbW9uLmNwcA0KLS0tIGJveGJhY2t1cC0wLjA3L2Jpbi9iYmFja3Vw
ZC9CYWNrdXBEYWVtb24uY3BwCTIwMDQtMDYtMjggMTc6MzQ6MjcuMDAwMDAw
MDAwICswMTAwDQorKysgYm94aS9ib3hiYWNrdXAtMC4wNy9iaW4vYmJhY2t1
cGQvQmFja3VwRGFlbW9uLmNwcAkyMDA0LTEwLTA4IDIzOjQ0OjI4LjczODc2
MDAzMiArMDEwMA0KQEAgLTE5Myw3ICsxOTMsNyBAQA0KIC8vDQogLy8gRnVu
Y3Rpb24NCiAvLwkJTmFtZTogICAgQmFja3VwRGFlbW9uOjpTZXR1cEluSW5p
dGlhbFByb2Nlc3MoKQ0KLS8vCQlQdXJwb3NlOiBQbGF0Zm9ybXMgd2l0aCBu
b24tY2hlY2thYmxlIGNyZWRpZW50YWxzIG9uIGxvY2FsIHNvY2tldHMgb25s
eS4NCisvLwkJUHVycG9zZTogUGxhdGZvcm1zIHdpdGggbm9uLWNoZWNrYWJs
ZSBjcmVkZW50aWFscyBvbiBsb2NhbCBzb2NrZXRzIG9ubHkuDQogLy8JCQkJ
IFByaW50cyBhIHdhcm5pbmcgaWYgdGhlIGNvbW1hbmQgc29ja2V0IGlzIHVz
ZWQuDQogLy8JCUNyZWF0ZWQ6IDI1LzIvMDQNCiAvLw0KQEAgLTI1NSw2ICsy
NTUsNyBAQA0KIA0KIAkvLyBDcmVhdGUgYSBjb21tYW5kIHNvY2tldD8NCiAJ
Y29uc3QgQ29uZmlndXJhdGlvbiAmY29uZihHZXRDb25maWd1cmF0aW9uKCkp
Ow0KKw0KIAlpZihjb25mLktleUV4aXN0cygiQ29tbWFuZFNvY2tldCIpKQ0K
IAl7DQogCQkvLyBZZXMsIGNyZWF0ZSBhIGxvY2FsIFVOSVggc29ja2V0DQpA
QCAtMjY0LDYgKzI2NSwxNSBAQA0KIAkJbXBDb21tYW5kU29ja2V0SW5mby0+
bUxpc3RlbmluZ1NvY2tldC5MaXN0ZW4oU29ja2V0OjpUeXBlVU5JWCwgc29j
a2V0TmFtZSk7DQogCX0NCiANCisJaWYoY29uZi5LZXlFeGlzdHMoIlN0YXR1
c1NvY2tldCIpKQ0KKwl7DQorCQkvLyBZZXMsIGNyZWF0ZSBhIGxvY2FsIFVO
SVggc29ja2V0DQorCQltcFN0YXR1c1NvY2tldEluZm8gPSBuZXcgU3RhdHVz
U29ja2V0SW5mbzsNCisJCWNvbnN0IGNoYXIgKnNvY2tldE5hbWUgPSBjb25m
LkdldEtleVZhbHVlKCJTdGF0dXNTb2NrZXQiKS5jX3N0cigpOw0KKwkJOjp1
bmxpbmsoc29ja2V0TmFtZSk7DQorCQltcFN0YXR1c1NvY2tldEluZm8tPm1M
aXN0ZW5pbmdTb2NrZXQuTGlzdGVuKFNvY2tldDo6VHlwZVVOSVgsIHNvY2tl
dE5hbWUpOw0KKwl9DQorDQogCS8vIEhhbmRsZSB0aGluZ3MgbmljZWx5IG9u
IGV4Y2VwdGlvbnMNCiAJdHJ5DQogCXsNCkBAIC0yODYsNiArMjk2LDEzIEBA
DQogCQlkZWxldGUgbXBDb21tYW5kU29ja2V0SW5mbzsNCiAJCW1wQ29tbWFu
ZFNvY2tldEluZm8gPSAwOw0KIAl9DQorDQorCWlmKG1wU3RhdHVzU29ja2V0
SW5mbyAhPSAwKQ0KKwl7DQorCQlkZWxldGUgbXBTdGF0dXNTb2NrZXRJbmZv
Ow0KKwkJbXBTdGF0dXNTb2NrZXRJbmZvID0gMDsNCisJfQ0KKw0KIH0NCiAN
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQEAgLTM2Mywy
OSArMzgwLDI1IEBADQogCQkJCQ0KIAkJCQljdXJyZW50VGltZSA9IEdldEN1
cnJlbnRCb3hUaW1lKCk7DQogCQ0KLQkJCQkvLyBQYXVzZSBhIHdoaWxlLCBi
dXQgbm8gbW9yZSB0aGFuIE1BWF9TTEVFUF9USU1FIHNlY29uZHMgKHVzZSB0
aGUgY29uZGl0aW9uYWwgYmVjYXVzZSB0aW1lcyBhcmUgdW5zaWduZWQpDQor
CQkJCS8vIFBhdXNlIGEgd2hpbGUsIGJ1dCBubyBtb3JlIHRoYW4gTUFYX1NM
RUVQX1RJTUUNCisJCQkJLy8gc2Vjb25kcyAodXNlIHRoZSBjb25kaXRpb25h
bCBiZWNhdXNlIHRpbWVzIGFyZQ0KKwkJCQkvLyB1bnNpZ25lZCkNCiAJCQkJ
Ym94X3RpbWVfdCByZXF1aXJlZERlbGF5ID0gKG5leHRTeW5jVGltZSA8IGN1
cnJlbnRUaW1lKT8oMCk6KG5leHRTeW5jVGltZSAtIGN1cnJlbnRUaW1lKTsN
Ci0JCQkJLy8gSWYgdGhlcmUgaXNuJ3QgYXV0b21hdGljIGJhY2t1cCBoYXBw
ZW5pbmcsIHNldCBhIGxvbmcgZGVsYXkuIEFuZCBsaW1pdCBkZWxheXMgYXQg
dGhlIHNhbWUgdGltZS4NCisJCQkJDQorCQkJCS8vIElmIHRoZXJlIGlzbid0
IGF1dG9tYXRpYyBiYWNrdXAgaGFwcGVuaW5nLA0KKwkJCQkvLyBzZXQgYSBs
b25nIGRlbGF5LiBBbmQgbGltaXQgZGVsYXlzIGF0IHRoZQ0KKwkJCQkvLyBz
YW1lIHRpbWUuDQogCQkJCWlmKCFhdXRvbWF0aWNCYWNrdXAgfHwgcmVxdWly
ZWREZWxheSA+IFNlY29uZHNUb0JveFRpbWUoKHVpbnQzMl90KU1BWF9TTEVF
UF9USU1FKSkgcmVxdWlyZWREZWxheSA9IFNlY29uZHNUb0JveFRpbWUoKHVp
bnQzMl90KU1BWF9TTEVFUF9USU1FKTsNCiANCiAJCQkJLy8gT25seSBkbyB0
aGUgZGVsYXkgaWYgdGhlcmUgaXMgYSBkZWxheSByZXF1aXJlZA0KIAkJCQlp
ZihyZXF1aXJlZERlbGF5ID4gMCkNCiAJCQkJew0KLQkJCQkJLy8gU2xlZXAg
c29tZWhvdy4gVGhlcmUgYXJlIGNob2ljZXMgb24gaG93IHRoaXMgc2hvdWxk
IGJlIGRvbmUsIGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIGNvbnRy
b2wgY29ubmVjdGlvbg0KLQkJCQkJaWYobXBDb21tYW5kU29ja2V0SW5mbyAh
PSAwKQ0KLQkJCQkJew0KLQkJCQkJCS8vIEEgY29tbWFuZCBzb2NrZXQgZXhp
c3RzLCBzbyBzbGVlcCBieSBoYW5kbGluZyBjb25uZWN0aW9ucyB3aXRoIGl0
DQotCQkJCQkJV2FpdE9uQ29tbWFuZFNvY2tldChyZXF1aXJlZERlbGF5LCBk
b1N5bmMsIGRvU3luY0ZvcmNlZEJ5Q29tbWFuZCk7DQotCQkJCQl9DQotCQkJ
CQllbHNlDQotCQkJCQl7DQotCQkJCQkJLy8gTm8gY29tbWFuZCBzb2NrZXQg
b3IgY29ubmVjdGlvbiwganVzdCBkbyBhIG5vcm1hbCBzbGVlcA0KLQkJCQkJ
CWludCBzbGVlcFNlY29uZHMgPSBCb3hUaW1lVG9TZWNvbmRzKHJlcXVpcmVk
RGVsYXkpOw0KLQkJCQkJCTo6c2xlZXAoKHNsZWVwU2Vjb25kcyA8PSAwKT8x
OnNsZWVwU2Vjb25kcyk7DQotCQkJCQl9DQorCQkJCQkvLyBpZiB3ZSBkb24n
dCBoYXZlIGFueSBzb2NrZXRzIHRvIGxpc3RlbiBvbiwNCisJCQkJCS8vIHRo
aXMgd2lsbCBqdXN0IHNsZWVwIGJ5IGRlZmF1bHQuDQorCQkJCQlXYWl0T25T
b2NrZXRzKHJlcXVpcmVkRGVsYXksIGRvU3luYywgZG9TeW5jRm9yY2VkQnlD
b21tYW5kKTsNCiAJCQkJfQ0KLQkJCQkNCi0JCQl9IHdoaWxlKCghYXV0b21h
dGljQmFja3VwIHx8IChjdXJyZW50VGltZSA8IG5leHRTeW5jVGltZSkpICYm
ICFkb1N5bmMgJiYgIVN0b3BSdW4oKSk7DQorCQkJfSB3aGlsZSgoIWF1dG9t
YXRpY0JhY2t1cCB8fCAoY3VycmVudFRpbWUgPCBuZXh0U3luY1RpbWUpKSAN
CisJCQkJJiYgIWRvU3luYyAmJiAhU3RvcFJ1bigpKTsNCiAJCX0NCiANCiAJ
CS8vIFRpbWUgb2Ygc3luYyBzdGFydCwgYW5kIGlmIGl0J3MgdGltZSBmb3Ig
YW5vdGhlciBzeW5jIChhbmQgd2UncmUgZG9pbmcgYXV0b21hdGljIHN5bmNz
KSwgc2V0IHRoZSBmbGFnDQpAQCAtNjc4LDEyICs2OTEsMjMgQEANCiAvLwkJ
Q3JlYXRlZDogMTgvMi8wNA0KIC8vDQogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0NCi12b2lkIEJhY2t1cERhZW1vbjo6V2FpdE9uQ29tbWFu
ZFNvY2tldChib3hfdGltZV90IFJlcXVpcmVkRGVsYXksIGJvb2wgJkRvU3lu
Y0ZsYWdPdXQsIGJvb2wgJlN5bmNJc0ZvcmNlZE91dCkNCit2b2lkIEJhY2t1
cERhZW1vbjo6V2FpdE9uU29ja2V0cyhib3hfdGltZV90IFJlcXVpcmVkRGVs
YXksDQorCWJvb2wgJkRvU3luY0ZsYWdPdXQsIGJvb2wgJlN5bmNJc0ZvcmNl
ZE91dCkNCiB7DQotCUFTU0VSVChtcENvbW1hbmRTb2NrZXRJbmZvICE9IDAp
Ow0KLQlpZihtcENvbW1hbmRTb2NrZXRJbmZvID09IDApIHs6OnNsZWVwKDEp
OyByZXR1cm47fSAvLyBmYWlsdXJlIGNhc2UgaXNuJ3QgdG9vIGJhZA0KKwlU
UkFDRTEoIldhaXRpbmcsIGRlbGF5ID0gJWxsZFxuIiwgUmVxdWlyZWREZWxh
eSk7DQogCQ0KLQlUUkFDRTEoIldhaXQgb24gY29tbWFuZCBzb2NrZXQsIGRl
bGF5ID0gJWxsZFxuIiwgUmVxdWlyZWREZWxheSk7DQorCWlmKCFtcENvbW1h
bmRTb2NrZXRJbmZvICYmICFtcFN0YXR1c1NvY2tldEluZm8pDQorCXsNCisJ
CS8vIE5vIGNvbW1hbmQgc29ja2V0IG9yIGNvbm5lY3Rpb24sIGp1c3QgZG8g
YSBub3JtYWwgc2xlZXANCisJCWludCBzbGVlcFNlY29uZHMgPSBCb3hUaW1l
VG9TZWNvbmRzKFJlcXVpcmVkRGVsYXkpOw0KKwkJOjpzbGVlcCgoc2xlZXBT
ZWNvbmRzIDw9IDApPzE6c2xlZXBTZWNvbmRzKTsNCisJCXJldHVybjsNCisJ
fQ0KKw0KKwl2b2lkICpjaGFuZ2VkU29ja2V0ID0gTlVMTDsNCisJU29ja2V0
U3RyZWFtKiBzb2NrQ21kQ29ubiA9IE5VTEw7DQorCVNvY2tldExpc3RlbjxT
b2NrZXRTdHJlYW0sIDE+KiBzb2NrQ21kTGlzdGVuICA9IE5VTEw7DQorCVNv
Y2tldExpc3RlbjxTb2NrZXRTdHJlYW0sIDE+KiBzb2NrU3RhdExpc3RlbiA9
IE5VTEw7DQogCQ0KIAl0cnkNCiAJew0KQEAgLTY5MywxMjUgKzcxNywyMDgg
QEANCiAJCWlmKHRpbWVvdXQgPD0gMCkgdGltZW91dCA9IDE7DQogCQlpZih0
aW1lb3V0ID09IElORlRJTSkgdGltZW91dCA9IDEwMDAwMDsNCiANCisJCVdh
aXRGb3JFdmVudCB3YWl0ZXIodGltZW91dCk7DQorCQkNCisJCWlmIChtcENv
bW1hbmRTb2NrZXRJbmZvKSB7DQorCQkJc29ja0NtZENvbm4gICA9IG1wQ29t
bWFuZFNvY2tldEluZm8tPm1wQ29ubmVjdGVkU29ja2V0LmdldCgpOw0KKwkJ
CXNvY2tDbWRMaXN0ZW4gPSAmKCBtcENvbW1hbmRTb2NrZXRJbmZvLT5tTGlz
dGVuaW5nU29ja2V0ICk7DQorDQorCQkJaWYgKHNvY2tDbWRDb25uICE9IDAp
DQorCQkJCXdhaXRlci5BZGQoc29ja0NtZENvbm4pOw0KKwkJCWVsc2UNCisJ
CQkJd2FpdGVyLkFkZChzb2NrQ21kTGlzdGVuKTsNCisJCX0NCisJCQ0KKwkJ
aWYgKG1wU3RhdHVzU29ja2V0SW5mbykgew0KKwkJCXNvY2tTdGF0TGlzdGVu
ID0gJiggbXBTdGF0dXNTb2NrZXRJbmZvLT5tTGlzdGVuaW5nU29ja2V0ICk7
DQorCQkJd2FpdGVyLkFkZChzb2NrU3RhdExpc3Rlbik7DQorCQl9DQorCQ0K
IAkJLy8gV2FpdCBmb3Igc29ja2V0IGNvbm5lY3Rpb24sIG9yIGhhbmRsZSBh
IGNvbW1hbmQ/DQotCQlpZihtcENvbW1hbmRTb2NrZXRJbmZvLT5tcENvbm5l
Y3RlZFNvY2tldC5nZXQoKSA9PSAwKQ0KKwkJY2hhbmdlZFNvY2tldCA9IHdh
aXRlci5XYWl0KCk7DQorCQkNCisJCWlmIChjaGFuZ2VkU29ja2V0ID09IE5V
TEwpIHsNCisJCQkvLyB0aW1lb3V0IGVsYXBzZWQsIGRvIG5vdGhpbmcNCisJ
CX0gZWxzZSBpZiAoY2hhbmdlZFNvY2tldCA9PSBzb2NrQ21kQ29ubikgew0K
KwkJCVByb2Nlc3NDb21tYW5kU29ja2V0Q21kKERvU3luY0ZsYWdPdXQsIFN5
bmNJc0ZvcmNlZE91dCk7IA0KKwkJfSBlbHNlIGlmIChjaGFuZ2VkU29ja2V0
ID09IHNvY2tDbWRMaXN0ZW4pIHsNCisJCQlBY2NlcHRTb2NrZXRDb25uKG1w
Q29tbWFuZFNvY2tldEluZm8pOw0KKwkJfSBlbHNlIGlmIChjaGFuZ2VkU29j
a2V0ID09IHNvY2tTdGF0TGlzdGVuKSB7DQorCQkJQWNjZXB0U29ja2V0Q29u
bihtcFN0YXR1c1NvY2tldEluZm8pOw0KKwkJfSBlbHNlIHsNCisJCQkvLyBz
aG91bGRuJ3QgaGFwcGVuDQorCQkJQVNTRVJUKGZhbHNlKTsNCisJCX0NCisJ
fQ0KKwljYXRjaCguLi4pDQorCXsNCisJCWlmIChjaGFuZ2VkU29ja2V0ID09
IHNvY2tDbWRDb25uKSB7DQorCQkJQ2xvc2VDb21tYW5kQ29ubmVjdGlvbigp
Ow0KKwkJfSBlbHNlIHsNCisJCQl0aHJvdzsNCisJCX0NCisJfQ0KKw0KKwly
ZXR1cm47CQ0KK30NCisNCit2b2lkIEJhY2t1cERhZW1vbjo6QWNjZXB0U29j
a2V0Q29ubihTb2NrZXRJbmZvICpzb2NrZXRJbmZvKSB7DQorCS8vIHdlIHNo
b3VsZCBhbHJlYWR5IGhhdmUgYSBjb21tYW5kIHdhaXRpbmcsDQorCS8vIG90
aGVyd2lzZSB3ZSB3b3VsZG4ndCBiZSBoZXJlLiBXaHkgd2FpdD8NCisJaW50
IHRpbWVvdXQgPSAwOw0KKwkNCisJdHJ5IHsNCisJCXNvY2tldEluZm8tPm1w
Q29ubmVjdGVkU29ja2V0LnJlc2V0KA0KKwkJCW1wQ29tbWFuZFNvY2tldElu
Zm8tPm1MaXN0ZW5pbmdTb2NrZXQuQWNjZXB0KHRpbWVvdXQpDQorCQkJLnJl
bGVhc2UoKSk7DQorCQkNCisJCWlmKHNvY2tldEluZm8tPm1wQ29ubmVjdGVk
U29ja2V0LmdldCgpID09IDApDQogCQl7DQotCQkJLy8gTm8gY29ubmVjdGlv
biwgbGlzdGVuIGZvciBhIG5ldyBvbmUNCi0JCQltcENvbW1hbmRTb2NrZXRJ
bmZvLT5tcENvbm5lY3RlZFNvY2tldC5yZXNldChtcENvbW1hbmRTb2NrZXRJ
bmZvLT5tTGlzdGVuaW5nU29ja2V0LkFjY2VwdCh0aW1lb3V0KS5yZWxlYXNl
KCkpOw0KLQkJCQ0KLQkJCWlmKG1wQ29tbWFuZFNvY2tldEluZm8tPm1wQ29u
bmVjdGVkU29ja2V0LmdldCgpID09IDApDQotCQkJew0KLQkJCQkvLyBJZiBh
IGNvbm5lY3Rpb24gZGlkbid0IGFycml2ZSwgdGhlcmUgd2FzIGEgdGltZW91
dCwgd2hpY2ggbWVhbnMgd2UndmUNCi0JCQkJLy8gd2FpdGVkIGxvbmcgZW5v
dWdoIGFuZCBpdCdzIHRpbWUgdG8gZ28uDQotCQkJCXJldHVybjsNCi0JCQl9
DQotCQkJZWxzZQ0KLQkJCXsNCisJCQkvLyBJZiBhIGNvbm5lY3Rpb24gZGlk
bid0IGFycml2ZSwgdGhlcmUgd2FzIGEgdGltZW91dCwgDQorCQkJLy8gd2hp
Y2ggbWVhbnMgd2UndmUgd2FpdGVkIGxvbmcgZW5vdWdoLA0KKwkJCS8vIGFu
ZCBpdCdzIHRpbWUgdG8gZ28uDQorCQkJOjpzeXNsb2coTE9HX0VSUiwgIkRp
ZG4ndCBmaW5kIHRoZSBleHBlY3RlZCBjb25uZWN0aW9uPyIpOyANCisJCQly
ZXR1cm47DQorCQl9DQorDQogI2lmZGVmIFBMQVRGT1JNX0NBTk5PVF9GSU5E
X1BFRVJfVUlEX09GX1VOSVhfU09DS0VUDQotCQkJCWJvb2wgdWlkT0sgPSB0
cnVlOw0KLQkJCQk6OnN5c2xvZyhMT0dfRVJSLCAiT24gdGhpcyBwbGF0Zm9y
bSwgbm8gc2VjdXJpdHkgY2hlY2sgY2FuIGJlIG1hZGUgb24gdGhlIGNyZWRp
ZW50aWFscyBvZiBwZWVycyBjb25uZWN0aW5nIHRvIHRoZSBjb21tYW5kIHNv
Y2tldC4gKGJiYWNrdXBjdGwpIik7DQorCQlib29sIHVpZE9LID0gdHJ1ZTsN
CisJCTo6c3lzbG9nKExPR19FUlIsICJPbiB0aGlzIHBsYXRmb3JtLCBubyBz
ZWN1cml0eSBjaGVjayBjYW4gYmUgIg0KKwkJCSJtYWRlIG9uIHRoZSBjcmVk
ZW50aWFscyBvZiBwZWVycyBjb25uZWN0aW5nIHRvIHRoZSAiDQorCQkJImNv
bW1hbmQgc29ja2V0IChub3JtYWxseSBiYmFja3VwY3RsKSIpOw0KICNlbHNl
DQotCQkJCS8vIFNlY3VyaXR5IGNoZWNrIC0tIGRvZXMgdGhlIHByb2Nlc3Mg
Y29ubmVjdGluZyB0byB0aGlzIHNvY2tldCBoYXZlDQotCQkJCS8vIHRoZSBz
YW1lIFVJRCBhcyB0aGlzIHByb2Nlc3M/DQotCQkJCWJvb2wgdWlkT0sgPSBm
YWxzZTsNCi0JCQkJLy8gQkxPQ0sNCi0JCQkJew0KLQkJCQkJdWlkX3QgcmVt
b3RlRVVJRCA9IDB4ZmZmZjsNCi0JCQkJCWdpZF90IHJlbW90ZUVHSUQgPSAw
eGZmZmY7DQotCQkJCQlpZihtcENvbW1hbmRTb2NrZXRJbmZvLT5tcENvbm5l
Y3RlZFNvY2tldC0+R2V0UGVlckNyZWRlbnRpYWxzKHJlbW90ZUVVSUQsIHJl
bW90ZUVHSUQpKQ0KLQkJCQkJew0KLQkJCQkJCS8vIENyZWRlbnRpYWxzIGFy
ZSBhdmFpbGFibGUgLS0gY2hlY2sgVUlEDQotCQkJCQkJaWYocmVtb3RlRVVJ
RCA9PSA6OmdldHVpZCgpKQ0KLQkJCQkJCXsNCi0JCQkJCQkJLy8gQWNjZXB0
YWJsZQ0KLQkJCQkJCQl1aWRPSyA9IHRydWU7DQotCQkJCQkJfQ0KLQkJCQkJ
fQ0KLQkJCQl9DQotI2VuZGlmDQotCQkJCQ0KLQkJCQkvLyBJcyB0aGlzIGFu
IGFjY2VwdGlibGUgY29ubmVjdGlvbj8NCi0JCQkJaWYoIXVpZE9LKQ0KLQkJ
CQl7DQotCQkJCQkvLyBEdW1wIHRoZSBjb25uZWN0aW9uDQotCQkJCQk6OnN5
c2xvZyhMT0dfRVJSLCAiSW5jb21pbmcgY29tbWFuZCBjb25uZWN0aW9uIGZy
b20gcGVlciBoYWQgZGlmZmVyZW50IHVzZXIgSUQgdGhhbiB0aGlzIHByb2Nl
c3MsIG9yIHNlY3VyaXR5IGNoZWNrIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQu
Iik7DQotCQkJCQltcENvbW1hbmRTb2NrZXRJbmZvLT5tcENvbm5lY3RlZFNv
Y2tldC5yZXNldCgpOw0KLQkJCQkJcmV0dXJuOw0KLQkJCQl9DQotCQkJCWVs
c2UNCisJCS8vIFNlY3VyaXR5IGNoZWNrIC0tIGRvZXMgdGhlIHByb2Nlc3Mg
Y29ubmVjdGluZw0KKwkJLy8gdG8gdGhpcyBzb2NrZXQgaGF2ZSB0aGUgc2Ft
ZSBVSUQgYXMgdGhpcyBwcm9jZXNzPw0KKwkJYm9vbCB1aWRPSyA9IGZhbHNl
Ow0KKwkJLy8gQkxPQ0sNCisJCXsNCisJCQl1aWRfdCByZW1vdGVFVUlEID0g
MHhmZmZmOw0KKwkJCWdpZF90IHJlbW90ZUVHSUQgPSAweGZmZmY7DQorCQkJ
aWYoc29ja2V0SW5mby0+bXBDb25uZWN0ZWRTb2NrZXQtPkdldFBlZXJDcmVk
ZW50aWFscygNCisJCQkJcmVtb3RlRVVJRCwgcmVtb3RlRUdJRCkpDQorCQkJ
ew0KKwkJCQkvLyBDcmVkZW50aWFscyBhcmUgYXZhaWxhYmxlIC0tIGNoZWNr
IFVJRA0KKwkJCQlpZihyZW1vdGVFVUlEID09IDo6Z2V0dWlkKCkpDQogCQkJ
CXsNCi0JCQkJCS8vIExvZw0KLQkJCQkJOjpzeXNsb2coTE9HX0lORk8sICJD
b25uZWN0aW9uIGZyb20gY29tbWFuZCBzb2NrZXQiKTsNCi0JCQkJCQ0KLQkJ
CQkJLy8gU2VuZCBhIGhlYWRlciBsaW5lIHN1bW1hcmlzaW5nIHRoZSBjb25m
aWd1cmF0aW9uIGFuZCBjdXJyZW50IHN0YXRlDQotCQkJCQljb25zdCBDb25m
aWd1cmF0aW9uICZjb25mKEdldENvbmZpZ3VyYXRpb24oKSk7DQotCQkJCQlj
aGFyIHN1bW1hcnlbMjU2XTsNCi0JCQkJCWludCBzdW1tYXJ5U2l6ZSA9IHNw
cmludGYoc3VtbWFyeSwgImJiYWNrdXBkOiAlZCAlZCAlZCAlZFxuc3RhdGUg
JWRcbiIsDQotCQkJCQkJY29uZi5HZXRLZXlWYWx1ZUJvb2woIkF1dG9tYXRp
Y0JhY2t1cCIpLA0KLQkJCQkJCWNvbmYuR2V0S2V5VmFsdWVJbnQoIlVwZGF0
ZVN0b3JlSW50ZXJ2YWwiKSwNCi0JCQkJCQljb25mLkdldEtleVZhbHVlSW50
KCJNaW5pbXVtRmlsZUFnZSIpLA0KLQkJCQkJCWNvbmYuR2V0S2V5VmFsdWVJ
bnQoIk1heFVwbG9hZFdhaXQiKSwNCi0JCQkJCQltU3RhdGUpOw0KLQkJCQkJ
bXBDb21tYW5kU29ja2V0SW5mby0+bXBDb25uZWN0ZWRTb2NrZXQtPldyaXRl
KHN1bW1hcnksIHN1bW1hcnlTaXplKTsNCi0JCQkJCQ0KLQkJCQkJLy8gU2V0
IHRoZSB0aW1lb3V0IHRvIHNvbWV0aGluZyB2ZXJ5IHNtYWxsLCBzbyB3ZSBk
b24ndCB3YWl0IHRvbyBsb25nIG9uIHdhaXRpbmcNCi0JCQkJCS8vIGZvciBh
bnkgaW5jb21pbmcgZGF0YQ0KLQkJCQkJdGltZW91dCA9IDEwOyAvLyBtaWxs
aXNlY29uZHMNCisJCQkJCS8vIEFjY2VwdGFibGUNCisJCQkJCXVpZE9LID0g
dHJ1ZTsNCiAJCQkJfQ0KIAkJCX0NCiAJCX0NCi0NCi0JCS8vIFNvIHRoZXJl
IG11c3QgYmUgYSBjb25uZWN0aW9uIG5vdy4NCi0JCUFTU0VSVChtcENvbW1h
bmRTb2NrZXRJbmZvLT5tcENvbm5lY3RlZFNvY2tldC5nZXQoKSAhPSAwKTsN
CisjZW5kaWYNCiAJCQ0KKwkJLy8gSXMgdGhpcyBhbiBhY2NlcHRpYmxlIGNv
bm5lY3Rpb24/DQorCQlpZighdWlkT0spDQorCQl7DQorCQkJLy8gRHVtcCB0
aGUgY29ubmVjdGlvbg0KKwkJCTo6c3lzbG9nKExPR19FUlIsICJJbmNvbWlu
ZyBjb21tYW5kIGNvbm5lY3Rpb24gZnJvbSAiDQorCQkJCSJwZWVyIGhhZCBk
aWZmZXJlbnQgdXNlciBJRCB0aGFuIHRoaXMgcHJvY2VzcywgIg0KKwkJCQki
b3Igc2VjdXJpdHkgY2hlY2sgY291bGQgbm90IGJlIGNvbXBsZXRlZC4iKTsN
CisJCQlzb2NrZXRJbmZvLT5tcENvbm5lY3RlZFNvY2tldC5yZXNldCgpOw0K
KwkJCXJldHVybjsNCisJCX0NCisJCQ0KKwkJLy8gTG9nDQorCQk6OnN5c2xv
ZyhMT0dfSU5GTywgIkNvbm5lY3Rpb24gZnJvbSBjb21tYW5kIHNvY2tldCIp
Ow0KKwkJDQorCQkvLyBTZW5kIGEgaGVhZGVyIGxpbmUgc3VtbWFyaXNpbmcg
dGhlIGNvbmZpZ3VyYXRpb24gYW5kIA0KKwkJLy8gY3VycmVudCBzdGF0ZQ0K
KwkJY29uc3QgQ29uZmlndXJhdGlvbiAmY29uZihHZXRDb25maWd1cmF0aW9u
KCkpOw0KKwkJY2hhciBzdW1tYXJ5WzI1Nl07DQorCQlpbnQgc3VtbWFyeVNp
emUgPSBzcHJpbnRmKHN1bW1hcnksDQorCQkJImJiYWNrdXBkOiAlZCAlZCAl
ZCAlZFxuc3RhdGUgJWRcbiIsDQorCQkJY29uZi5HZXRLZXlWYWx1ZUJvb2wo
IkF1dG9tYXRpY0JhY2t1cCIpLA0KKwkJCWNvbmYuR2V0S2V5VmFsdWVJbnQo
IlVwZGF0ZVN0b3JlSW50ZXJ2YWwiKSwNCisJCQljb25mLkdldEtleVZhbHVl
SW50KCJNaW5pbXVtRmlsZUFnZSIpLA0KKwkJCWNvbmYuR2V0S2V5VmFsdWVJ
bnQoIk1heFVwbG9hZFdhaXQiKSwNCisJCQltU3RhdGUpOw0KKwkJc29ja2V0
SW5mby0+bXBDb25uZWN0ZWRTb2NrZXQtPldyaXRlKHN1bW1hcnksIHN1bW1h
cnlTaXplKTsNCisNCisJCS8vIHdlJ3ZlIGRvbmUgb3VyIGR1dHksIHRoZSBz
b2NrZXQgaXMgY29ubmVjdGVkLCB3ZSB3aWxsIGFsbW9zdA0KKwkJLy8gY2Vy
dGFpbmx5IHNsZWVwIGFnYWluIGFuZCB3YWl0IGZvciBhIGNvbW1hbmQgdG8g
YmUgcmVjZWl2ZWQsDQorCQkvLyBvciBmb3IgdGhlIG5leHQgc2Nhbi4NCisJ
fQ0KKwljYXRjaCguLi4pDQorCXsNCisJCS8vIElmIGFuIGVycm9yIG9jY3Vy
cywgYW5kIHRoZXJlIGlzIGEgY29ubmVjdGlvbiBhY3RpdmUsDQorCQkvLyBq
dXN0IGNsb3NlIHRoYXQgY29ubmVjdGlvbiBhbmQgY29udGludWUuDQorCQkv
LyBPdGhlcndpc2UsIGxldCB0aGUgZXJyb3IgcHJvcGFnYXRlLg0KKwkJaWYo
c29ja2V0SW5mby0+bXBDb25uZWN0ZWRTb2NrZXQuZ2V0KCkgPT0gMCkNCisJ
CXsNCisJCQl0aHJvdzsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQkvLyBD
bG9zZSBzb2NrZXQgYW5kIGlnbm9yZSBlcnJvciAtIEZJWE1FDQorCQkJQ2xv
c2VDb21tYW5kQ29ubmVjdGlvbigpOw0KKwkJCUNsb3NlU3RhdHVzQ29ubmVj
dGlvbigpOw0KKwkJfQ0KKwl9DQorfQ0KKw0KK3ZvaWQgQmFja3VwRGFlbW9u
OjpQcm9jZXNzQ29tbWFuZFNvY2tldENtZChib29sICZEb1N5bmNGbGFnT3V0
LA0KKwlib29sICZTeW5jSXNGb3JjZWRPdXQpIA0KK3sNCisJLy8gd2Ugc2hv
dWxkIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgd2FpdGluZywNCisJLy8gb3Ro
ZXJ3aXNlIHdlIHdvdWxkbid0IGJlIGhlcmUuIFdoeSB3YWl0Pw0KKwlpbnQg
dGltZW91dCA9IDA7DQorCQ0KKwlBU1NFUlQobXBDb21tYW5kU29ja2V0SW5m
by0+bXBDb25uZWN0ZWRTb2NrZXQuZ2V0KCkgIT0gMCk7DQorCQ0KKwl0cnkg
ew0KIAkJLy8gSXMgdGhlcmUgYSBnZXRsaW5lIG9iamVjdCByZWFkeT8NCiAJ
CWlmKG1wQ29tbWFuZFNvY2tldEluZm8tPm1wR2V0TGluZSA9PSAwKQ0KIAkJ
ew0KIAkJCS8vIENyZWF0ZSBhIG5ldyBvbmUNCi0JCQltcENvbW1hbmRTb2Nr
ZXRJbmZvLT5tcEdldExpbmUgPSBuZXcgSU9TdHJlYW1HZXRMaW5lKCoobXBD
b21tYW5kU29ja2V0SW5mby0+bXBDb25uZWN0ZWRTb2NrZXQuZ2V0KCkpKTsN
CisJCQltcENvbW1hbmRTb2NrZXRJbmZvLT5tcEdldExpbmUgPSBuZXcgSU9T
dHJlYW1HZXRMaW5lKA0KKwkJCQkqKG1wQ29tbWFuZFNvY2tldEluZm8tPm1w
Q29ubmVjdGVkU29ja2V0LmdldCgpKSk7DQogCQl9DQogCQkNCi0JCS8vIFBp
bmcgdGhlIHJlbW90ZSBzaWRlLCB0byBwcm92aWRlIGVycm9ycyB3aGljaCB3
aWxsIG1lYW4gdGhlIHNvY2tldCBnZXRzIGNsb3NlZA0KKwkJLy8gUGluZyB0
aGUgcmVtb3RlIHNpZGUsIHRvIHByb3ZpZGUgZXJyb3JzIHdoaWNoIHdpbGwg
bWVhbiANCisJCS8vIHRoZSBzb2NrZXQgZ2V0cyBjbG9zZWQNCiAJCW1wQ29t
bWFuZFNvY2tldEluZm8tPm1wQ29ubmVjdGVkU29ja2V0LT5Xcml0ZSgicGlu
Z1xuIiwgNSk7DQogCQkNCiAJCS8vIFdhaXQgZm9yIGEgY29tbWFuZCBvciBz
b21ldGhpbmcgb24gdGhlIHNvY2tldA0KIAkJc3RkOjpzdHJpbmcgY29tbWFu
ZDsNCi0JCXdoaWxlKG1wQ29tbWFuZFNvY2tldEluZm8tPm1wR2V0TGluZSAh
PSAwICYmICFtcENvbW1hbmRTb2NrZXRJbmZvLT5tcEdldExpbmUtPklzRU9G
KCkNCi0JCQkmJiBtcENvbW1hbmRTb2NrZXRJbmZvLT5tcEdldExpbmUtPkdl
dExpbmUoY29tbWFuZCwgZmFsc2UgLyogbm8gcHJlcHJvY2Vzc2luZyAqLywg
dGltZW91dCkpDQorCQl3aGlsZShtcENvbW1hbmRTb2NrZXRJbmZvLT5tcEdl
dExpbmUgIT0gMCANCisJCQkmJiAhbXBDb21tYW5kU29ja2V0SW5mby0+bXBH
ZXRMaW5lLT5Jc0VPRigpDQorCQkJJiYgbXBDb21tYW5kU29ja2V0SW5mby0+
bXBHZXRMaW5lLT5HZXRMaW5lKGNvbW1hbmQsDQorCQkJCWZhbHNlIC8qIG5v
IHByZXByb2Nlc3NpbmcgKi8sIHRpbWVvdXQpKQ0KIAkJew0KLQkJCVRSQUNF
MSgiUmVjZWl2aW5nIGNvbW1hbmQgJyVzJyBvdmVyIGNvbW1hbmQgc29ja2V0
XG4iLCBjb21tYW5kLmNfc3RyKCkpOw0KKwkJCVRSQUNFMSgiUmVjZWl2aW5n
IGNvbW1hbmQgJyVzJyBvdmVyIGNvbW1hbmQgc29ja2V0XG4iLA0KKwkJCQlj
b21tYW5kLmNfc3RyKCkpOw0KIAkJCQ0KIAkJCWJvb2wgc2VuZE9LID0gZmFs
c2U7DQogCQkJYm9vbCBzZW5kUmVzcG9uc2UgPSB0cnVlOw0KIAkJDQogCQkJ
Ly8gQ29tbWFuZCB0byBwcm9jZXNzIQ0KLQkJCWlmKGNvbW1hbmQgPT0gInF1
aXQiIHx8IGNvbW1hbmQgPT0gIiIpDQorCQkJaWYgKGNvbW1hbmQgPT0gInF1
aXQiIHx8IGNvbW1hbmQgPT0gIiIpDQogCQkJew0KIAkJCQkvLyBDbG9zZSB0
aGUgc29ja2V0Lg0KIAkJCQlDbG9zZUNvbW1hbmRDb25uZWN0aW9uKCk7DQog
CQkJCXNlbmRSZXNwb25zZSA9IGZhbHNlOw0KIAkJCX0NCi0JCQllbHNlIGlm
KGNvbW1hbmQgPT0gInN5bmMiKQ0KKwkJCWVsc2UgaWYgKGNvbW1hbmQgPT0g
InN5bmMiKQ0KIAkJCXsNCiAJCQkJLy8gU3luYyBub3chDQogCQkJCURvU3lu
Y0ZsYWdPdXQgPSB0cnVlOw0KIAkJCQlTeW5jSXNGb3JjZWRPdXQgPSBmYWxz
ZTsNCiAJCQkJc2VuZE9LID0gdHJ1ZTsNCiAJCQl9DQotCQkJZWxzZSBpZihj
b21tYW5kID09ICJmb3JjZS1zeW5jIikNCisJCQllbHNlIGlmIChjb21tYW5k
ID09ICJmb3JjZS1zeW5jIikNCiAJCQl7DQogCQkJCS8vIFN5bmMgbm93IChm
b3JjZWQgLS0gb3ZlcnJpZGVzIGFueSBTeW5jQWxsb3dTY3JpcHQpDQogCQkJ
CURvU3luY0ZsYWdPdXQgPSB0cnVlOw0KIAkJCQlTeW5jSXNGb3JjZWRPdXQg
PSB0cnVlOw0KIAkJCQlzZW5kT0sgPSB0cnVlOw0KIAkJCX0NCi0JCQllbHNl
IGlmKGNvbW1hbmQgPT0gInJlbG9hZCIpDQorCQkJZWxzZSBpZiAoY29tbWFu
ZCA9PSAicmVsb2FkIikNCiAJCQl7DQogCQkJCS8vIFJlbG9hZCB0aGUgY29u
ZmlndXJhdGlvbg0KIAkJCQlTZXRSZWxvYWRDb25maWdXYW50ZWQoKTsNCiAJ
CQkJc2VuZE9LID0gdHJ1ZTsNCiAJCQl9DQotCQkJZWxzZSBpZihjb21tYW5k
ID09ICJ0ZXJtaW5hdGUiKQ0KKwkJCWVsc2UgaWYgKGNvbW1hbmQgPT0gInRl
cm1pbmF0ZSIpDQogCQkJew0KIAkJCQkvLyBUZXJtaW5hdGUgdGhlIGRhZW1v
biBjbGVhbmx5DQogCQkJCVNldFRlcm1pbmF0ZVdhbnRlZCgpOw0KQEAgLTgx
OSwyNiArOTI2LDMxIEBADQogCQkJfQ0KIAkJCQ0KIAkJCS8vIFNlbmQgYSBy
ZXNwb25zZSBiYWNrPw0KLQkJCWlmKHNlbmRSZXNwb25zZSkNCisJCQlpZiAo
c2VuZFJlc3BvbnNlKQ0KIAkJCXsNCi0JCQkJbXBDb21tYW5kU29ja2V0SW5m
by0+bXBDb25uZWN0ZWRTb2NrZXQtPldyaXRlKHNlbmRPSz8ib2tcbiI6ImVy
cm9yXG4iLCBzZW5kT0s/Mzo2KTsNCisJCQkJbXBDb21tYW5kU29ja2V0SW5m
by0+bXBDb25uZWN0ZWRTb2NrZXQtPldyaXRlKA0KKwkJCQkJc2VuZE9LID8g
Im9rXG4iIDogImVycm9yXG4iLCANCisJCQkJCXNlbmRPSyA/IDMgOiA2KTsN
CiAJCQl9DQogCQkJDQotCQkJLy8gU2V0IHRpbWVvdXQgdG8gc29tZXRoaW5n
IHZlcnkgc21hbGwsIHNvIHRoaXMganVzdCBjaGVja3MgZm9yIGRhdGEgd2hp
Y2ggaXMgd2FpdGluZw0KKwkJCS8vIFNldCB0aW1lb3V0IHRvIHNvbWV0aGlu
ZyB2ZXJ5IHNtYWxsLA0KKwkJCS8vIHNvIHRoaXMganVzdCBjaGVja3MgZm9y
IGRhdGEgd2hpY2ggaXMgd2FpdGluZw0KIAkJCXRpbWVvdXQgPSAxOw0KIAkJ
fQ0KIAkJDQogCQkvLyBDbG9zZSBvbiBFT0Y/DQotCQlpZihtcENvbW1hbmRT
b2NrZXRJbmZvLT5tcEdldExpbmUgIT0gMCAmJiBtcENvbW1hbmRTb2NrZXRJ
bmZvLT5tcEdldExpbmUtPklzRU9GKCkpDQorCQlpZihtcENvbW1hbmRTb2Nr
ZXRJbmZvLT5tcEdldExpbmUgIT0gMA0KKwkJCSYmIG1wQ29tbWFuZFNvY2tl
dEluZm8tPm1wR2V0TGluZS0+SXNFT0YoKSkNCiAJCXsNCiAJCQlDbG9zZUNv
bW1hbmRDb25uZWN0aW9uKCk7DQogCQl9DQogCX0NCiAJY2F0Y2goLi4uKQ0K
IAl7DQotCQkvLyBJZiBhbiBlcnJvciBvY2N1cnMsIGFuZCB0aGVyZSBpcyBh
IGNvbm5lY3Rpb24gYWN0aXZlLCBqdXN0IGNsb3NlIHRoYXQNCi0JCS8vIGNv
bm5lY3Rpb24gYW5kIGNvbnRpbnVlLiBPdGhlcndpc2UsIGxldCB0aGUgZXJy
b3IgcHJvcGFnYXRlLg0KLQkJaWYobXBDb21tYW5kU29ja2V0SW5mby0+bXBD
b25uZWN0ZWRTb2NrZXQuZ2V0KCkgPT0gMCkNCisJCS8vIElmIGFuIGVycm9y
IG9jY3VycywgYW5kIHRoZXJlIGlzIGEgY29ubmVjdGlvbiBhY3RpdmUsDQor
CQkvLyBqdXN0IGNsb3NlIHRoYXQgY29ubmVjdGlvbiBhbmQgY29udGludWUu
DQorCQkvLyBPdGhlcndpc2UsIGxldCB0aGUgZXJyb3IgcHJvcGFnYXRlLg0K
KwkJaWYgKG1wQ29tbWFuZFNvY2tldEluZm8tPm1wQ29ubmVjdGVkU29ja2V0
LmdldCgpID09IDApDQogCQl7DQogCQkJdGhyb3c7DQogCQl9DQpAQCAtODc4
LDYgKzk5MCwyNiBAQA0KIAl9DQogfQ0KIA0KKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tDQorLy8NCisvLyBGdW5jdGlvbg0KKy8vCQlOYW1l
OiAgICBCYWNrdXBEYWVtb246OkNsb3NlU3RhdHVzQ29ubmVjdGlvbigpDQor
Ly8JCVB1cnBvc2U6IENsb3NlIHRoZSBzdGF0dXMgY29ubmVjdGlvbiwgaWdu
b3JpbmcgYW55IGVycm9ycw0KKy8vCQlDcmVhdGVkOiAwNC8xMC8wNA0KKy8v
DQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2b2lkIEJh
Y2t1cERhZW1vbjo6Q2xvc2VTdGF0dXNDb25uZWN0aW9uKCkNCit7DQorCXRy
eQ0KKwl7DQorCQlUUkFDRTAoIkNsb3Npbmcgc3RhdHVzIGNvbm5lY3Rpb25c
biIpOw0KKwkJbXBTdGF0dXNTb2NrZXRJbmZvLT5tcENvbm5lY3RlZFNvY2tl
dC5yZXNldCgpOw0KKwl9DQorCWNhdGNoKC4uLikNCisJew0KKwkJLy8gSWdu
b3JlIGFueSBlcnJvcnMNCisJfQ0KK30NCiANCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQ0KIC8vDQpAQCAtODkxLDE0ICsxMDIzLDE3IEBA
DQogdm9pZCBCYWNrdXBEYWVtb246OlNlbmRTeW5jU3RhcnRPckZpbmlzaChi
b29sIFNlbmRTdGFydCkNCiB7DQogDQotCS8vIFRoZSBiYmFja3VwY3RsIHBy
b2dyYW0gY2FuJ3QgcmVseSBvbiBhIHN0YXRlIGNoYW5nZSwgYmVjYXVzZSBp
dCBtYXkgbmV2ZXINCi0JLy8gY2hhbmdlIGlmIHRoZSBzZXJ2ZXIgZG9lc24n
dCBuZWVkIHRvIGJlIGNvbnRhY3RlZC4NCisJLy8gVGhlIGJiYWNrdXBjdGwg
cHJvZ3JhbSBjYW4ndCByZWx5IG9uIGEgc3RhdGUgY2hhbmdlLCBiZWNhdXNl
IGl0DQorCS8vIG1heSBuZXZlciBjaGFuZ2UgaWYgdGhlIHNlcnZlciBkb2Vz
bid0IG5lZWQgdG8gYmUgY29udGFjdGVkLg0KIAkNCi0JaWYobXBDb21tYW5k
U29ja2V0SW5mbyAhPSAwICYmIG1wQ29tbWFuZFNvY2tldEluZm8tPm1wQ29u
bmVjdGVkU29ja2V0LmdldCgpICE9IDApDQorCWlmKG1wQ29tbWFuZFNvY2tl
dEluZm8gIT0gMA0KKwkJJiYgbXBDb21tYW5kU29ja2V0SW5mby0+bXBDb25u
ZWN0ZWRTb2NrZXQuZ2V0KCkgIT0gMCkNCiAJew0KIAkJdHJ5DQogCQl7DQot
CQkJbXBDb21tYW5kU29ja2V0SW5mby0+bXBDb25uZWN0ZWRTb2NrZXQtPldy
aXRlKFNlbmRTdGFydD8ic3RhcnQtc3luY1xuIjoiZmluaXNoLXN5bmNcbiIs
IFNlbmRTdGFydD8xMToxMik7DQorCQkJbXBDb21tYW5kU29ja2V0SW5mby0+
bXBDb25uZWN0ZWRTb2NrZXQtPldyaXRlKA0KKwkJCQlTZW5kU3RhcnQ/InN0
YXJ0LXN5bmNcbiI6ImZpbmlzaC1zeW5jXG4iLCANCisJCQkJU2VuZFN0YXJ0
PzExOjEyKTsNCiAJCX0NCiAJCWNhdGNoKC4uLikNCiAJCXsNCkBAIC05MTks
NyArMTA1NCw4IEBADQogCQl7DQogCQkJaWYoczEuc2l6ZSgpID09IHMyLnNp
emUoKSkNCiAJCQl7DQotCQkJCS8vIEVxdWFsIHNpemUsIHNvcnQgYWNjb3Jk
aW5nIHRvIG5hdHVyYWwgc29ydCBvcmRlcg0KKwkJCQkvLyBFcXVhbCBzaXpl
LCBzb3J0IGFjY29yZGluZyB0bw0KKwkJCQkvLyBuYXR1cmFsIHNvcnQgb3Jk
ZXINCiAJCQkJcmV0dXJuIHMxIDwgczI7DQogCQkJfQ0KIAkJCWVsc2UNCkBA
IC05NDcsMjEgKzEwODMsMjggQEANCiAJCXJldHVybjsNCiAJfQ0KIA0KLQkv
LyBNYWtlIHN1cmUgdGhhdCBpZiBhIGRpcmVjdG9yeSBpcyByZWluc3RhdGVk
LCB0aGVuIGl0IGRvZXNuJ3QgZ2V0IGRlbGV0ZWQJDQorCS8vIE1ha2Ugc3Vy
ZSB0aGF0IGlmIGEgZGlyZWN0b3J5IGlzIHJlaW5zdGF0ZWQsDQorCS8vIHRo
ZW4gaXQgZG9lc24ndCBnZXQgZGVsZXRlZAkNCiAJbURlbGV0ZVVudXNlZFJv
b3REaXJFbnRyaWVzQWZ0ZXIgPSAwOw0KIAltVW51c2VkUm9vdERpckVudHJp
ZXMuY2xlYXIoKTsNCiANCiAJLy8gSnVzdCBhIGNoZWNrIHRvIG1ha2Ugc3Vy
ZSBpdCdzIHJpZ2h0Lg0KIAlEZWxldGVBbGxMb2NhdGlvbnMoKTsNCiAJDQot
CS8vIEdvaW5nIHRvIG5lZWQgYSBjb3B5IG9mIHRoZSByb290IGRpcmVjdG9y
eS4gR2V0IGEgY29ubmVjdGlvbiwgYW5kIGZldGNoIGl0Lg0KKwkvLyBHb2lu
ZyB0byBuZWVkIGEgY29weSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkuDQorCS8v
IEdldCBhIGNvbm5lY3Rpb24sIGFuZCBmZXRjaCBpdC4NCiAJQmFja3VwUHJv
dG9jb2xDbGllbnQgJmNvbm5lY3Rpb24ockNsaWVudENvbnRleHQuR2V0Q29u
bmVjdGlvbigpKTsNCiAJDQotCS8vIEFzayBzZXJ2ZXIgZm9yIGEgbGlzdCBv
ZiBldmVyeXRoaW5nIGluIHRoZSByb290IGRpcmVjdG9yeSwgd2hpY2ggaXMg
YSBkaXJlY3RvcnkgaXRzZWxmDQotCXN0ZDo6YXV0b19wdHI8QmFja3VwUHJv
dG9jb2xDbGllbnRTdWNjZXNzPiBkaXJyZXBseShjb25uZWN0aW9uLlF1ZXJ5
TGlzdERpcmVjdG9yeSgNCisJLy8gQXNrIHNlcnZlciBmb3IgYSBsaXN0IG9m
IGV2ZXJ5dGhpbmcgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LA0KKwkvLyB3aGlj
aCBpcyBhIGRpcmVjdG9yeSBpdHNlbGYNCisJc3RkOjphdXRvX3B0cjxCYWNr
dXBQcm90b2NvbENsaWVudFN1Y2Nlc3M+IGRpcnJlcGx5KA0KKwkJY29ubmVj
dGlvbi5RdWVyeUxpc3REaXJlY3RvcnkoDQogCQkJQmFja3VwUHJvdG9jb2xD
bGllbnRMaXN0RGlyZWN0b3J5OjpSb290RGlyZWN0b3J5LA0KLQkJCUJhY2t1
cFByb3RvY29sQ2xpZW50TGlzdERpcmVjdG9yeTo6RmxhZ3NfRGlyLAkvLyBv
bmx5IGRpcmVjdG9yaWVzDQotCQkJQmFja3VwUHJvdG9jb2xDbGllbnRMaXN0
RGlyZWN0b3J5OjpGbGFnc19EZWxldGVkIHwgQmFja3VwUHJvdG9jb2xDbGll
bnRMaXN0RGlyZWN0b3J5OjpGbGFnc19PbGRWZXJzaW9uLCAvLyBleGNsdWRl
IG9sZC9kZWxldGVkIHN0dWZmDQorCQkJQmFja3VwUHJvdG9jb2xDbGllbnRM
aXN0RGlyZWN0b3J5OjpGbGFnc19EaXIsDQorCQkJLy8gb25seSBkaXJlY3Rv
cmllcw0KKwkJCUJhY2t1cFByb3RvY29sQ2xpZW50TGlzdERpcmVjdG9yeTo6
RmxhZ3NfRGVsZXRlZCANCisJCQl8IEJhY2t1cFByb3RvY29sQ2xpZW50TGlz
dERpcmVjdG9yeTo6RmxhZ3NfT2xkVmVyc2lvbiwgDQorCQkJLy8gZXhjbHVk
ZSBvbGQvZGVsZXRlZCBzdHVmZg0KIAkJCWZhbHNlIC8qIG5vIGF0dHJpYnV0
ZXMgKi8pKTsNCiANCiAJLy8gUmV0cmlldmUgdGhlIGRpcmVjdG9yeSBmcm9t
IHRoZSBzdHJlYW0gZm9sbG93aW5nDQpAQCAtMTAxMiw3ICsxMTU1LDggQEAN
CiAJQVNTRVJUKG1vdW50UG9pbnRzLnNpemUoKSA+IDApOw0KICNpZm5kZWYg
TkRFQlVHDQogCXsNCi0JCXN0ZDo6c2V0PHN0ZDo6c3RyaW5nLCBtbnRMZW5D
b21wYXJlPjo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBpKG1vdW50UG9pbnRz
LnJiZWdpbigpKTsNCisJCXN0ZDo6c2V0PHN0ZDo6c3RyaW5nLCBtbnRMZW5D
b21wYXJlPjo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcg0KKwkJCWkobW91bnRQ
b2ludHMucmJlZ2luKCkpOw0KIAkJQVNTRVJUKCppID09ICIvIik7DQogCX0N
CiAjZW5kaWYgLy8gbiBOREVCVUcNCkBAIC0xMDIwLDcgKzExNjQsOCBAQA0K
IA0KIAkvLyBUaGVuLi4uIGdvIHRocm91Z2ggZWFjaCBvZiB0aGUgZW50cmll
cyBpbiB0aGUgY29uZmlndXJhdGlvbiwNCiAJLy8gbWFraW5nIHN1cmUgdGhl
cmUncyBhIGRpcmVjdG9yeSBjcmVhdGVkIGZvciBpdC4NCi0JZm9yKHN0ZDo6
bGlzdDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIENvbmZpZ3VyYXRpb24+ID46
OmNvbnN0X2l0ZXJhdG9yIGkgPSByTG9jYXRpb25zQ29uZi5tU3ViQ29uZmln
dXJhdGlvbnMuYmVnaW4oKTsNCisJZm9yKHN0ZDo6bGlzdDxzdGQ6OnBhaXI8
c3RkOjpzdHJpbmcsIENvbmZpZ3VyYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9y
DQorCQlpID0gckxvY2F0aW9uc0NvbmYubVN1YkNvbmZpZ3VyYXRpb25zLmJl
Z2luKCk7DQogCQlpICE9IHJMb2NhdGlvbnNDb25mLm1TdWJDb25maWd1cmF0
aW9ucy5lbmQoKTsgKytpKQ0KIAl7DQogVFJBQ0UwKCJuZXcgbG9jYXRpb25c
biIpOw0KQEAgLTEwNDIsMzQgKzExODcsNTAgQEANCiAJCQkJLy8gV2FybiBp
biBsb2dzIGlmIHRoZSBkaXJlY3RvcnkgaXNuJ3QgYWJzb2x1dGUNCiAJCQkJ
aWYocGxvYy0+bVBhdGhbMF0gIT0gJy8nKQ0KIAkJCQl7DQotCQkJCQk6OnN5
c2xvZyhMT0dfRVJSLCAiTG9jYXRpb24gcGF0aCAnJXMnIGlzbid0IGFic29s
dXRlIiwgcGxvYy0+bVBhdGguY19zdHIoKSk7DQorCQkJCQk6OnN5c2xvZyhM
T0dfRVJSLCAiTG9jYXRpb24gcGF0aCAnJXMnICINCisJCQkJCQkiaXNuJ3Qg
YWJzb2x1dGUiLCANCisJCQkJCQlwbG9jLT5tUGF0aC5jX3N0cigpKTsNCiAJ
CQkJfQ0KLQkJCQkvLyBHbyB0aHJvdWdoIHRoZSBtb3VudCBwb2ludHMgZm91
bmQsIGFuZCBmaW5kIGEgc3VpdGFibGUgb25lDQorCQkJCS8vIEdvIHRocm91
Z2ggdGhlIG1vdW50IHBvaW50cyBmb3VuZCwgDQorCQkJCS8vIGFuZCBmaW5k
IGEgc3VpdGFibGUgb25lDQogCQkJCXN0ZDo6c3RyaW5nIG1vdW50TmFtZSgi
LyIpOw0KIAkJCQl7DQotCQkJCQlzdGQ6OnNldDxzdGQ6OnN0cmluZywgbW50
TGVuQ29tcGFyZT46OmNvbnN0X2l0ZXJhdG9yIGkobW91bnRQb2ludHMuYmVn
aW4oKSk7DQotCQkJCQlUUkFDRTEoIiVkIHBvdGVudGlhbCBtb3VudCBwb2lu
dHNcbiIsIG1vdW50UG9pbnRzLnNpemUoKSk7DQorCQkJCQlzdGQ6OnNldDxz
dGQ6OnN0cmluZywgbW50TGVuQ29tcGFyZT4NCisJCQkJCQk6OmNvbnN0X2l0
ZXJhdG9yIA0KKwkJCQkJCWkobW91bnRQb2ludHMuYmVnaW4oKSk7DQorCQkJ
CQlUUkFDRTEoIiVkIHBvdGVudGlhbCBtb3VudCBwb2ludHNcbiIsIA0KKwkJ
CQkJCW1vdW50UG9pbnRzLnNpemUoKSk7DQogCQkJCQlmb3IoOyBpICE9IG1v
dW50UG9pbnRzLmVuZCgpOyArK2kpDQogCQkJCQl7DQotCQkJCQkJLy8gQ29t
cGFyZSBmaXJzdCBuIGNoYXJhY3RlcnMgd2l0aCB0aGUgZmlsZW5hbWUNCi0J
CQkJCQkvLyBJZiBpdCBtYXRjaGVzLCB0aGUgZmlsZSBiZWxvbmdzIGluIHRo
YXQgbW91bnQgcG9pbnQNCisJCQkJCQkvLyBDb21wYXJlIGZpcnN0IG4gY2hh
cmFjdGVycyANCisJCQkJCQkvLyB3aXRoIHRoZSBmaWxlbmFtZS4NCisJCQkJ
CQkvLyBJZiBpdCBtYXRjaGVzLCB0aGUgZmlsZSANCisJCQkJCQkvLyBiZWxv
bmdzIGluIHRoYXQgbW91bnQgcG9pbnQNCiAJCQkJCQkvLyAoc29ydGluZyBv
cmRlciBlbnN1cmVzIHRoaXMpDQotCQkJCQkJVFJBQ0UxKCJjaGVja2luZyBh
Z2FpbnN0IG1vdW50IHBvaW50ICVzXG4iLCBpLT5jX3N0cigpKTsNCi0JCQkJ
CQlpZig6OnN0cm5jbXAoaS0+Y19zdHIoKSwgcGxvYy0+bVBhdGguY19zdHIo
KSwgaS0+c2l6ZSgpKSA9PSAwKQ0KKwkJCQkJCVRSQUNFMSgiY2hlY2tpbmcg
YWdhaW5zdCAiDQorCQkJCQkJCSJtb3VudCBwb2ludCAlc1xuIiwgDQorCQkJ
CQkJCWktPmNfc3RyKCkpOw0KKwkJCQkJCWlmKDo6c3RybmNtcChpLT5jX3N0
cigpLCANCisJCQkJCQkJcGxvYy0+bVBhdGguY19zdHIoKSwgDQorCQkJCQkJ
CWktPnNpemUoKSkgPT0gMCkNCiAJCQkJCQl7DQogCQkJCQkJCS8vIE1hdGNo
DQogCQkJCQkJCW1vdW50TmFtZSA9ICppOw0KIAkJCQkJCQlicmVhazsNCiAJ
CQkJCQl9DQogCQkJCQl9DQotCQkJCQlUUkFDRTIoIm1vdW50IHBvaW50IGNo
b3NlbiBmb3IgJXMgaXMgJXNcbiIsIHBsb2MtPm1QYXRoLmNfc3RyKCksIG1v
dW50TmFtZS5jX3N0cigpKTsNCisJCQkJCVRSQUNFMigibW91bnQgcG9pbnQg
Y2hvc2VuIGZvciAlcyAiDQorCQkJCQkJImlzICVzXG4iLCBwbG9jLT5tUGF0
aC5jX3N0cigpLCANCisJCQkJCQltb3VudE5hbWUuY19zdHIoKSk7DQogCQkJ
CX0NCiAjZWxzZQ0KLQkJCQkvLyBCU0Qgc3R5bGUgc3RhdGZzIC0tIGluY2x1
ZGVzIG1vdW50IHBvaW50LCB3aGljaCBpcyBuaWNlLg0KKwkJCQkvLyBCU0Qg
c3R5bGUgc3RhdGZzIC0tIGluY2x1ZGVzIG1vdW50IHBvaW50LCANCisJCQkJ
Ly8gd2hpY2ggaXMgbmljZS4NCiAJCQkJc3RydWN0IHN0YXRmcyBzOw0KIAkJ
CQlpZig6OnN0YXRmcyhwbG9jLT5tUGF0aC5jX3N0cigpLCAmcykgIT0gMCkN
CiAJCQkJew0KLQkJCQkJVEhST1dfRVhDRVBUSU9OKENvbW1vbkV4Y2VwdGlv
biwgT1NGaWxlRXJyb3IpDQorCQkJCQlUSFJPV19FWENFUFRJT04oQ29tbW9u
RXhjZXB0aW9uLA0KKwkJCQkJCU9TRmlsZUVycm9yKQ0KIAkJCQl9DQogCQkJ
CQ0KIAkJCQkvLyBXaGVyZSB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkDQpA
QCAtMTA3Nyw3ICsxMjM4LDggQEANCiAjZW5kaWYNCiAJCQkJDQogCQkJCS8v
IEdvdCBpdD8NCi0JCQkJc3RkOjptYXA8c3RkOjpzdHJpbmcsIGludD46Oml0
ZXJhdG9yIGYobW91bnRzLmZpbmQobW91bnROYW1lKSk7DQorCQkJCXN0ZDo6
bWFwPHN0ZDo6c3RyaW5nLCBpbnQ+OjppdGVyYXRvciANCisJCQkJCWYobW91
bnRzLmZpbmQobW91bnROYW1lKSk7DQogCQkJCWlmKGYgIT0gbW91bnRzLmVu
ZCgpKQ0KIAkJCQl7DQogCQkJCQkvLyBZZXMgLS0gc3RvcmUgdGhlIGluZGV4
DQpAQCAtMTA5OSwzOSArMTI2MSw1MyBAQA0KIAkJDQogCQkJLy8gRG9lcyB0
aGlzIGV4aXN0IG9uIHRoZSBzZXJ2ZXI/DQogCQkJQmFja3VwU3RvcmVEaXJl
Y3Rvcnk6Okl0ZXJhdG9yIGl0ZXIoZGlyKTsNCi0JCQlCYWNrdXBTdG9yZUZp
bGVuYW1lQ2xlYXIgZGlybmFtZShwbG9jLT5tTmFtZSk7CS8vIGdlbmVyYXRl
IHRoZSBmaWxlbmFtZQ0KLQkJCUJhY2t1cFN0b3JlRGlyZWN0b3J5OjpFbnRy
eSAqZW4gPSBpdGVyLkZpbmRNYXRjaGluZ0NsZWFyTmFtZShkaXJuYW1lKTsN
CisJCQlCYWNrdXBTdG9yZUZpbGVuYW1lQ2xlYXIgZGlybmFtZShwbG9jLT5t
TmFtZSk7CQ0KKwkJCS8vIGdlbmVyYXRlIHRoZSBmaWxlbmFtZQ0KKwkJCUJh
Y2t1cFN0b3JlRGlyZWN0b3J5OjpFbnRyeSAqZW4gPSANCisJCQkJaXRlci5G
aW5kTWF0Y2hpbmdDbGVhck5hbWUoZGlybmFtZSk7DQogCQkJaW50NjRfdCBv
aWQgPSAwOw0KIAkJCWlmKGVuICE9IDApDQogCQkJew0KIAkJCQlvaWQgPSBl
bi0+R2V0T2JqZWN0SUQoKTsNCiAJCQkJDQotCQkJCS8vIERlbGV0ZSB0aGUg
ZW50cnkgZnJvbSB0aGUgZGlyZWN0b3J5LCBzbyB3ZSBnZXQgYSBsaXN0IG9m
DQotCQkJCS8vIHVudXNlZCByb290IGRpcmVjdG9yaWVzIGF0IHRoZSBlbmQg
b2YgdGhpcy4NCisJCQkJLy8gRGVsZXRlIHRoZSBlbnRyeSBmcm9tIHRoZSBk
aXJlY3RvcnksIA0KKwkJCQkvLyBzbyB3ZSBnZXQgYSBsaXN0IG9mIHVudXNl
ZCByb290IA0KKwkJCQkvLyBkaXJlY3RvcmllcyBhdCB0aGUgZW5kIG9mIHRo
aXMuDQogCQkJCWRpci5EZWxldGVFbnRyeShvaWQpOw0KIAkJCX0NCiAJCQll
bHNlDQogCQkJew0KLQkJCQkvLyBEb2Vzbid0IGV4aXN0LCBzbyBpdCBoYXMg
dG8gYmUgY3JlYXRlZCBvbiB0aGUgc2VydmVyLiBMZXQncyBnbyENCi0JCQkJ
Ly8gRmlyc3QsIGdldCB0aGUgZGlyZWN0b3J5J3MgYXR0cmlidXRlcyBhbmQg
bW9kaWZpY2F0aW9uIHRpbWUNCisJCQkJLy8gRG9lc24ndCBleGlzdCwgc28g
aXQgaGFzIHRvIGJlIGNyZWF0ZWQJDQorCQkJCS8vIG9uIHRoZSBzZXJ2ZXIu
IExldCdzIGdvIQ0KKwkJCQkvLyBGaXJzdCwgZ2V0IHRoZSBkaXJlY3Rvcnkn
cyBhdHRyaWJ1dGVzIA0KKwkJCQkvLyBhbmQgbW9kaWZpY2F0aW9uIHRpbWUN
CiAJCQkJYm94X3RpbWVfdCBhdHRyTW9kVGltZSA9IDA7DQogCQkJCUJhY2t1
cENsaWVudEZpbGVBdHRyaWJ1dGVzIGF0dHI7DQotCQkJCWF0dHIuUmVhZEF0
dHJpYnV0ZXMocGxvYy0+bVBhdGguY19zdHIoKSwgdHJ1ZSAvKiBkaXJlY3Rv
cmllcyBoYXZlIHplcm8gbW9kIHRpbWVzICovLA0KLQkJCQkJMCAvKiBub3Qg
aW50ZXJlc3RlZCBpbiBtb2QgdGltZSAqLywgJmF0dHJNb2RUaW1lIC8qIGdl
dCB0aGUgYXR0cmlidXRlIG1vZGlmaWNhdGlvbiB0aW1lICovKTsNCisJCQkJ
YXR0ci5SZWFkQXR0cmlidXRlcyhwbG9jLT5tUGF0aC5jX3N0cigpLCANCisJ
CQkJCXRydWUgLyogZGlyZWN0b3JpZXMgaGF2ZSB6ZXJvIA0KKwkJCQkJCW1v
ZCB0aW1lcyAqLywNCisJCQkJCTAgLyogbm90IGludGVyZXN0ZWQgaW4gbW9k
IHRpbWUgKi8sIA0KKwkJCQkJJmF0dHJNb2RUaW1lIC8qIGdldCB0aGUgYXR0
cmlidXRlIA0KKwkJCQkJCW1vZGlmaWNhdGlvbiB0aW1lICovKTsNCiAJCQkJ
DQogCQkJCS8vIEV4ZWN1dGUgY3JlYXRlIGRpcmVjdG9yeSBjb21tYW5kDQog
CQkJCU1lbUJsb2NrU3RyZWFtIGF0dHJTdHJlYW0oYXR0cik7DQotCQkJCXN0
ZDo6YXV0b19wdHI8QmFja3VwUHJvdG9jb2xDbGllbnRTdWNjZXNzPiBkaXJD
cmVhdGUoY29ubmVjdGlvbi5RdWVyeUNyZWF0ZURpcmVjdG9yeSgNCi0JCQkJ
CUJhY2t1cFByb3RvY29sQ2xpZW50TGlzdERpcmVjdG9yeTo6Um9vdERpcmVj
dG9yeSwNCisJCQkJc3RkOjphdXRvX3B0cjxCYWNrdXBQcm90b2NvbENsaWVu
dFN1Y2Nlc3M+IA0KKwkJCQkJZGlyQ3JlYXRlKGNvbm5lY3Rpb24NCisJCQkJ
CQkuUXVlcnlDcmVhdGVEaXJlY3RvcnkoDQorCQkJCQlCYWNrdXBQcm90b2Nv
bENsaWVudExpc3REaXJlY3RvcnkNCisJCQkJCQk6OlJvb3REaXJlY3Rvcnks
DQogCQkJCQlhdHRyTW9kVGltZSwgZGlybmFtZSwgYXR0clN0cmVhbSkpOw0K
IAkJCQkJDQogCQkJCS8vIE9iamVjdCBJRCBmb3IgbGF0ZXIgY3JlYXRpb24N
CiAJCQkJb2lkID0gZGlyQ3JlYXRlLT5HZXRPYmplY3RJRCgpOw0KIAkJCX0N
CiANCi0JCQkvLyBDcmVhdGUgYW5kIHN0b3JlIHRoZSBkaXJlY3Rvcnkgb2Jq
ZWN0IGZvciB0aGUgcm9vdCBvZiB0aGlzIGxvY2F0aW9uDQorCQkJLy8gQ3Jl
YXRlIGFuZCBzdG9yZSB0aGUgZGlyZWN0b3J5IG9iamVjdCANCisJCQkvLyBm
b3IgdGhlIHJvb3Qgb2YgdGhpcyBsb2NhdGlvbg0KIAkJCUFTU0VSVChvaWQg
IT0gMCk7DQotCQkJQmFja3VwQ2xpZW50RGlyZWN0b3J5UmVjb3JkICpwcmVj
b3JkID0gbmV3IEJhY2t1cENsaWVudERpcmVjdG9yeVJlY29yZChvaWQsIGkt
PmZpcnN0KTsNCisJCQlCYWNrdXBDbGllbnREaXJlY3RvcnlSZWNvcmQgKnBy
ZWNvcmQgPSANCisJCQkJbmV3IEJhY2t1cENsaWVudERpcmVjdG9yeVJlY29y
ZChvaWQsIGktPmZpcnN0KTsNCiAJCQlwbG9jLT5tcERpcmVjdG9yeVJlY29y
ZC5yZXNldChwcmVjb3JkKTsNCiAJCQkNCiAJCQkvLyBQdXNoIGl0IGJhY2sg
b24gdGhlIHZlY3RvciBvZiBsb2NhdGlvbnMNCkBAIC0xMTQ4LDggKzEzMjQs
MTAgQEANCiAJLy8gQW55IGVudHJpZXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IHdoaWNoIG5lZWQgZGVsZXRpbmc/DQogCWlmKGRpci5HZXROdW1iZXJPZkVu
dHJpZXMoKSA+IDApDQogCXsNCi0JCTo6c3lzbG9nKExPR19JTkZPLCAiJWQg
cmVkdW5kYW50IGxvY2F0aW9ucyBpbiByb290IGRpcmVjdG9yeSBmb3VuZCwg
d2lsbCBkZWxldGUgZnJvbSBzdG9yZSBhZnRlciAlZCBzZWNvbmRzLiIsDQot
CQkJZGlyLkdldE51bWJlck9mRW50cmllcygpLCBCQUNLVVBfREVMRVRFX1VO
VVNFRF9ST09UX0VOVFJJRVNfQUZURVIpOw0KKwkJOjpzeXNsb2coTE9HX0lO
Rk8sICIlZCByZWR1bmRhbnQgbG9jYXRpb25zIGluIHJvb3QgZGlyZWN0b3J5
ICINCisJCQkiZm91bmQsIHdpbGwgZGVsZXRlIGZyb20gc3RvcmUgYWZ0ZXIg
JWQgc2Vjb25kcy4iLA0KKwkJCWRpci5HZXROdW1iZXJPZkVudHJpZXMoKSwg
DQorCQkJQkFDS1VQX0RFTEVURV9VTlVTRURfUk9PVF9FTlRSSUVTX0FGVEVS
KTsNCiANCiAJCS8vIFN0b3JlIGRpcmVjdG9yaWVzIGluIGxpc3Qgb2YgdGhp
bmdzIHRvIGRlbGV0ZQ0KIAkJbVVudXNlZFJvb3REaXJFbnRyaWVzLmNsZWFy
KCk7DQpAQCAtMTE2MCwxNCArMTMzOCwxOSBAQA0KIAkJCS8vIEFkZCBuYW1l
IHRvIGxpc3QNCiAJCQlCYWNrdXBTdG9yZUZpbGVuYW1lQ2xlYXIgY2xlYXIo
ZW4tPkdldE5hbWUoKSk7DQogCQkJY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUo
Y2xlYXIuR2V0Q2xlYXJGaWxlbmFtZSgpKTsNCi0JCQltVW51c2VkUm9vdERp
ckVudHJpZXMucHVzaF9iYWNrKHN0ZDo6cGFpcjxpbnQ2NF90LHN0ZDo6c3Ry
aW5nPihlbi0+R2V0T2JqZWN0SUQoKSwgbmFtZSkpOw0KKwkJCW1VbnVzZWRS
b290RGlyRW50cmllcy5wdXNoX2JhY2soDQorCQkJCXN0ZDo6cGFpcjxpbnQ2
NF90LHN0ZDo6c3RyaW5nPigNCisJCQkJCWVuLT5HZXRPYmplY3RJRCgpLCBu
YW1lKSk7DQogCQkJLy8gTG9nIHRoaXMNCi0JCQk6OnN5c2xvZyhMT0dfSU5G
TywgIlVudXNlZCBsb2NhdGlvbiBpbiByb290OiAlcyIsIG5hbWUuY19zdHIo
KSk7DQorCQkJOjpzeXNsb2coTE9HX0lORk8sICJVbnVzZWQgbG9jYXRpb24g
aW4gcm9vdDogJXMiLCANCisJCQkJbmFtZS5jX3N0cigpKTsNCiAJCX0NCiAJ
CUFTU0VSVChtVW51c2VkUm9vdERpckVudHJpZXMuc2l6ZSgpID4gMCk7DQog
CQkvLyBUaW1lIHRvIGRlbGV0ZSB0aGVtDQogCQltRGVsZXRlVW51c2VkUm9v
dERpckVudHJpZXNBZnRlciA9DQotCQkJR2V0Q3VycmVudEJveFRpbWUoKSAr
IFNlY29uZHNUb0JveFRpbWUoKHVpbnQzMl90KUJBQ0tVUF9ERUxFVEVfVU5V
U0VEX1JPT1RfRU5UUklFU19BRlRFUik7DQorCQkJR2V0Q3VycmVudEJveFRp
bWUoKSArIA0KKwkJCVNlY29uZHNUb0JveFRpbWUoDQorCQkJCSh1aW50MzJf
dClCQUNLVVBfREVMRVRFX1VOVVNFRF9ST09UX0VOVFJJRVNfQUZURVIpOw0K
IAl9DQogfQ0KIA0KQEAgLTExODIsOCArMTM2NSw4IEBADQogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB2b2lkIEJhY2t1cERhZW1vbjo6
U2V0dXBJRE1hcHNGb3JTeW5jKCkNCiB7DQotCS8vIE5lZWQgdG8gZG8gZGlm
ZmVyZW50IHRoaW5ncyBkZXBlbmRpbmcgb24gd2hldGhlciBpdCdzIGFuIGlu
IG1lbW9yeSBpbXBsZW1lbnRhdGlvbiwNCi0JLy8gb3Igd2hldGhlciBpdCdz
IGFsbCBzdG9yZWQgb24gZGlzYy4NCisJLy8gTmVlZCB0byBkbyBkaWZmZXJl
bnQgdGhpbmdzIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0J3MgYW4gDQorCS8v
IGluLW1lbW9yeSBpbXBsZW1lbnRhdGlvbiwgb3Igd2hldGhlciBpdCdzIGFs
bCBzdG9yZWQgb24gZGlzYy4NCiAJDQogI2lmZGVmIEJBQ0tJUENMSUVOVElO
T0RFVE9JRE1BUF9JTl9NRU1PUllfSU1QTEVNRU5UQVRJT04NCiANCkBAIC0x
MTkxLDggKzEzNzQsOCBAQA0KIAlEZWxldGVJRE1hcFZlY3RvcihtTmV3SURN
YXBzKTsNCiAJRmlsbElETWFwVmVjdG9yKG1OZXdJRE1hcHMsIHRydWUgLyog
bmV3IG1hcHMgKi8pOw0KIA0KLQkvLyBUaGVuIG1ha2Ugc3VyZSB0aGF0IHRo
ZSBjdXJyZW50IG1hcHMgaGF2ZSBvYmplY3RzLCBldmVuIGlmIHRoZXkgYXJl
IGVtcHR5DQotCS8vIChmb3IgdGhlIHZlcnkgZmlyc3QgcnVuKQ0KKwkvLyBU
aGVuIG1ha2Ugc3VyZSB0aGF0IHRoZSBjdXJyZW50IG1hcHMgaGF2ZSBvYmpl
Y3RzLA0KKwkvLyBldmVuIGlmIHRoZXkgYXJlIGVtcHR5IChmb3IgdGhlIHZl
cnkgZmlyc3QgcnVuKQ0KIAlpZihtQ3VycmVudElETWFwcy5lbXB0eSgpKQ0K
IAl7DQogCQlGaWxsSURNYXBWZWN0b3IobUN1cnJlbnRJRE1hcHMsIGZhbHNl
IC8qIGN1cnJlbnQgbWFwcyAqLyk7DQpAQCAtMTIxOCw3ICsxNDAxLDggQEAN
CiAvLwkJQ3JlYXRlZDogMTEvMTEvMDMNCiAvLw0KIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tDQotdm9pZCBCYWNrdXBEYWVtb246OkZpbGxJ
RE1hcFZlY3RvcihzdGQ6OnZlY3RvcjxCYWNrdXBDbGllbnRJbm9kZVRvSURN
YXAgKj4gJnJWZWN0b3IsIGJvb2wgTmV3TWFwcykNCit2b2lkIEJhY2t1cERh
ZW1vbjo6RmlsbElETWFwVmVjdG9yKA0KKwlzdGQ6OnZlY3RvcjxCYWNrdXBD
bGllbnRJbm9kZVRvSURNYXAgKj4gJnJWZWN0b3IsIGJvb2wgTmV3TWFwcykN
CiB7DQogCUFTU0VSVChyVmVjdG9yLnNpemUoKSA9PSAwKTsNCiAJclZlY3Rv
ci5yZXNlcnZlKG1JRE1hcE1vdW50cy5zaXplKCkpOw0KQEAgLTEyMzksNyAr
MTQyMyw4IEBADQogCQkJCWZpbGVuYW1lICs9ICIubiI7DQogCQkJfQ0KIA0K
LQkJCS8vIElmIGl0J3Mgbm90IGEgbmV3IG1hcCwgaXQgbWF5IG5vdCBleGlz
dCBpbiB3aGljaCBjYXNlIGFuIGVtcHR5IG1hcCBzaG91bGQgYmUgY3JlYXRl
ZA0KKwkJCS8vIElmIGl0J3Mgbm90IGEgbmV3IG1hcCwgaXQgbWF5IG5vdCBl
eGlzdCwNCisJCQkvLyBpbiB3aGljaCBjYXNlIGFuIGVtcHR5IG1hcCBzaG91
bGQgYmUgY3JlYXRlZA0KIAkJCWlmKCFOZXdNYXBzICYmICFGaWxlRXhpc3Rz
KGZpbGVuYW1lLmNfc3RyKCkpKQ0KIAkJCXsNCiAJCQkJcG1hcC0+T3BlbkVt
cHR5KCk7DQpAQCAtMTI0Nyw3ICsxNDMyLDkgQEANCiAJCQllbHNlDQogCQkJ
ew0KIAkJCQkvLyBPcGVuIHRoZSBtYXANCi0JCQkJcG1hcC0+T3BlbihmaWxl
bmFtZS5jX3N0cigpLCAhTmV3TWFwcyAvKiByZWFkIG9ubHkgKi8sIE5ld01h
cHMgLyogY3JlYXRlIG5ldyAqLyk7DQorCQkJCXBtYXAtPk9wZW4oZmlsZW5h
bWUuY19zdHIoKSwgDQorCQkJCQkhTmV3TWFwcyAvKiByZWFkIG9ubHkgKi8s
IA0KKwkJCQkJTmV3TWFwcyAvKiBjcmVhdGUgbmV3ICovKTsNCiAJCQl9DQog
CQkJDQogCQkJLy8gU3RvcmUgb24gdmVjdG9yDQpAQCAtMTI3MCw3ICsxNDU3
LDggQEANCiAvLwkJQ3JlYXRlZDogMjAvMTEvMDMNCiAvLw0KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdm9pZCBCYWNrdXBEYWVtb246
Ok1ha2VNYXBCYXNlTmFtZSh1bnNpZ25lZCBpbnQgTW91bnROdW1iZXIsIHN0
ZDo6c3RyaW5nICZyTmFtZU91dCkgY29uc3QNCit2b2lkIEJhY2t1cERhZW1v
bjo6TWFrZU1hcEJhc2VOYW1lKHVuc2lnbmVkIGludCBNb3VudE51bWJlciwg
DQorCXN0ZDo6c3RyaW5nICZyTmFtZU91dCkgY29uc3QNCiB7DQogCS8vIEdl
dCB0aGUgZGlyZWN0b3J5IGZvciB0aGUgbWFwcw0KIAljb25zdCBDb25maWd1
cmF0aW9uICZjb25maWcoR2V0Q29uZmlndXJhdGlvbigpKTsNCkBAIC0xMzAz
LDggKzE0OTEsOCBAQA0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tDQogdm9pZCBCYWNrdXBEYWVtb246OkNvbW1pdElETWFwc0FmdGVyU3lu
YygpDQogew0KLQkvLyBOZWVkIHRvIGRvIGRpZmZlcmVudCB0aGluZ3MgZGVw
ZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBhbiBpbiBtZW1vcnkgaW1wbGVtZW50
YXRpb24sDQotCS8vIG9yIHdoZXRoZXIgaXQncyBhbGwgc3RvcmVkIG9uIGRp
c2MuDQorCS8vIE5lZWQgdG8gZG8gZGlmZmVyZW50IHRoaW5ncyBkZXBlbmRp
bmcgb24gd2hldGhlciBpdCdzIGFuIA0KKwkvLyBpbi1tZW1vcnkgaW1wbGVt
ZW50YXRpb24sIG9yIHdoZXRoZXIgaXQncyBhbGwgc3RvcmVkIG9uIGRpc2Mu
DQogCQ0KICNpZmRlZiBCQUNLSVBDTElFTlRJTk9ERVRPSURNQVBfSU5fTUVN
T1JZX0lNUExFTUVOVEFUSU9ODQogCS8vIFJlbW92ZSB0aGUgY3VycmVudCBJ
RCBtYXBzDQpAQCAtMTM0OSw3ICsxNTM3LDggQEANCiAvLwkJQ3JlYXRlZDog
MTEvMTEvMDMNCiAvLw0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tDQotdm9pZCBCYWNrdXBEYWVtb246OkRlbGV0ZUlETWFwVmVjdG9yKHN0
ZDo6dmVjdG9yPEJhY2t1cENsaWVudElub2RlVG9JRE1hcCAqPiAmclZlY3Rv
cikNCit2b2lkIEJhY2t1cERhZW1vbjo6RGVsZXRlSURNYXBWZWN0b3IoDQor
CXN0ZDo6dmVjdG9yPEJhY2t1cENsaWVudElub2RlVG9JRE1hcCAqPiAmclZl
Y3RvcikNCiB7DQogCXdoaWxlKCFyVmVjdG9yLmVtcHR5KCkpDQogCXsNCkBA
IC0xMzc0LDEwICsxNTYzLDEyIEBADQogLy8JCUNyZWF0ZWQ6IDEyLzExLzAz
DQogLy8NCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLWJv
b2wgQmFja3VwRGFlbW9uOjpGaW5kTG9jYXRpb25QYXRoTmFtZShjb25zdCBz
dGQ6OnN0cmluZyAmckxvY2F0aW9uTmFtZSwgc3RkOjpzdHJpbmcgJnJQYXRo
T3V0KSBjb25zdA0KK2Jvb2wgQmFja3VwRGFlbW9uOjpGaW5kTG9jYXRpb25Q
YXRoTmFtZSgNCisJY29uc3Qgc3RkOjpzdHJpbmcgJnJMb2NhdGlvbk5hbWUs
IHN0ZDo6c3RyaW5nICZyUGF0aE91dCkgY29uc3QNCiB7DQogCS8vIFNlYXJj
aCBmb3IgdGhlIGxvY2F0aW9uDQotCWZvcihzdGQ6OnZlY3RvcjxMb2NhdGlv
biAqPjo6Y29uc3RfaXRlcmF0b3IgaShtTG9jYXRpb25zLmJlZ2luKCkpOyBp
ICE9IG1Mb2NhdGlvbnMuZW5kKCk7ICsraSkNCisJZm9yKHN0ZDo6dmVjdG9y
PExvY2F0aW9uICo+Ojpjb25zdF9pdGVyYXRvciBpKG1Mb2NhdGlvbnMuYmVn
aW4oKSk7IA0KKwkJaSAhPSBtTG9jYXRpb25zLmVuZCgpOyArK2kpDQogCXsN
CiAJCWlmKCgqaSktPm1OYW1lID09IHJMb2NhdGlvbk5hbWUpDQogCQl7DQpA
QCAtMTQwOSwyNSArMTYwMCw2NiBAQA0KIAltU3RhdGUgPSBTdGF0ZTsNCiAJ
DQogCS8vIFNldCBwcm9jZXNzIHRpdGxlDQotCWNvbnN0IHN0YXRpYyBjaGFy
ICpzdGF0ZVRleHRbXSA9IHsiaWRsZSIsICJjb25uZWN0ZWQiLCAiZXJyb3Ig
LS0gd2FpdGluZyBmb3IgcmV0cnkiLCAib3ZlciBsaW1pdCBvbiBzZXJ2ZXIg
LS0gbm90IGJhY2tpbmcgdXAifTsNCisJY29uc3Qgc3RhdGljIGNoYXIgKnN0
YXRlVGV4dFtdID0gew0KKwkJInVua25vd24iLCANCisJCSJpbml0aWFsaXNp
bmciLCANCisJCSJpZGxlIiwgDQorCQkiY29ubmVjdGVkIiwgDQorCQkiZXJy
b3IgLS0gd2FpdGluZyBmb3IgcmV0cnkiLCANCisJCSJvdmVyIGxpbWl0IG9u
IHNlcnZlciAtLSBub3QgYmFja2luZyB1cCINCisJfTsNCiAJU2V0UHJvY2Vz
c1RpdGxlKHN0YXRlVGV4dFtTdGF0ZV0pOw0KIAkNCi0JLy8gSWYgdGhlcmUn
cyBhIGNvbW1hbmQgc29ja2V0IGNvbm5lY3RlZCwgdGhlbiBpbmZvcm0gaXQg
LS0gZGlzY29ubmVjdGluZyBmcm9tIHRoZQ0KLQkvLyBjb21tYW5kIHNvY2tl
dCBpZiB0aGVyZSdzIGFuIGVycm9yDQotCWlmKG1wQ29tbWFuZFNvY2tldElu
Zm8gIT0gMCAmJiBtcENvbW1hbmRTb2NrZXRJbmZvLT5tcENvbm5lY3RlZFNv
Y2tldC5nZXQoKSAhPSAwKQ0KKwkvLyBJZiB0aGVyZSdzIGEgY29tbWFuZCBz
b2NrZXQgY29ubmVjdGVkLCB0aGVuIGluZm9ybSBpdCAtLSANCisJLy8gZGlz
Y29ubmVjdGluZyBmcm9tIHRoZSBjb21tYW5kIHNvY2tldCBpZiB0aGVyZSdz
IGFuIGVycm9yLg0KKwlpZihtcENvbW1hbmRTb2NrZXRJbmZvICE9IDAgDQor
CQkmJiBtcENvbW1hbmRTb2NrZXRJbmZvLT5tcENvbm5lY3RlZFNvY2tldC5n
ZXQoKSAhPSAwKQ0KIAl7DQotCQkvLyBTb21ldGhpbmcgY29ubmVjdGVkIHRv
IHRoZSBjb21tYW5kIHNvY2tldCwgdGVsbCBpdCBhYm91dCB0aGUgbmV3IHN0
YXRlDQorCQkvLyBTb21ldGhpbmcgY29ubmVjdGVkIHRvIHRoZSBjb21tYW5k
IHNvY2tldCwNCisgCQkvLyB0ZWxsIGl0IGFib3V0IHRoZSBuZXcgc3RhdGUN
CiAJCWNoYXIgbmV3U3RhdGVbNjRdOw0KIAkJY2hhciBuZXdTdGF0ZVNpemUg
PSBzcHJpbnRmKG5ld1N0YXRlLCAic3RhdGUgJWRcbiIsIFN0YXRlKTsNCiAJ
CXRyeQ0KIAkJew0KLQkJCW1wQ29tbWFuZFNvY2tldEluZm8tPm1wQ29ubmVj
dGVkU29ja2V0LT5Xcml0ZShuZXdTdGF0ZSwgbmV3U3RhdGVTaXplKTsNCisJ
CQltcFN0YXR1c1NvY2tldEluZm8tPm1wQ29ubmVjdGVkU29ja2V0LT5Xcml0
ZSgNCisJCQkJbmV3U3RhdGUsIG5ld1N0YXRlU2l6ZSk7DQogCQl9DQogCQlj
YXRjaCguLi4pDQogCQl7DQogCQkJQ2xvc2VDb21tYW5kQ29ubmVjdGlvbigp
Ow0KIAkJfQ0KIAl9DQorDQorCS8vIElmIHRoZXJlJ3MgYSBzdGF0dXMgc29j
a2V0IGNvbm5lY3RlZCwgdGhlbiBpbmZvcm0gaXQgLS0gDQorCS8vIGRpc2Nv
bm5lY3RpbmcgZnJvbSB0aGUgc3RhdHVzIHNvY2tldCBpZiB0aGVyZSdzIGFu
IGVycm9yDQorDQorCWlmKG1wU3RhdHVzU29ja2V0SW5mbyAhPSAwDQorCQkm
JiBtcFN0YXR1c1NvY2tldEluZm8tPm1wQ29ubmVjdGVkU29ja2V0LmdldCgp
ICE9IDApDQorCXsNCisJCS8vIFNvbWV0aGluZyBjb25uZWN0ZWQgdG8gdGhl
IHN0YXR1cyBzb2NrZXQsDQorCQkvLyB0ZWxsIGl0IGFib3V0IHRoZSBuZXcg
c3RhdGUNCisJCWNvbnN0IHN0YXRpYyBjaGFyKiBzdGF0ZU5hbWVbXSA9IHsN
CisJCQkidW5rbm93biIsDQorCQkJImluaXQiLCANCisJCQkiaWRsZSIsIA0K
KwkJCSJzeW5jIiwgDQorCQkJImVycm9yIiwgDQorCQkJIm92ZXJsaW1pdCIN
CisJCX07DQorCQljaGFyIG5ld1N0YXRlWzY0XTsNCisJCWNoYXIgbmV3U3Rh
dGVTaXplID0gc3ByaW50ZihuZXdTdGF0ZSwNCisJCQkiPGJveDpkYWVtb24g
c3RhdGU9XCIlc1wiPlxuIiwgDQorCQkJc3RhdGVOYW1lW1N0YXRlXSk7DQor
CQl0cnkNCisJCXsNCisJCQltcENvbW1hbmRTb2NrZXRJbmZvLT5tcENvbm5l
Y3RlZFNvY2tldC0+V3JpdGUoDQorCQkJCW5ld1N0YXRlLCBuZXdTdGF0ZVNp
emUpOw0KKwkJfQ0KKwkJY2F0Y2goLi4uKQ0KKwkJew0KKwkJCUNsb3NlU3Rh
dHVzQ29ubmVjdGlvbigpOw0KKwkJfQ0KKwl9DQogfQ0KIA0KIA0KQEAgLTE0
NDQsMTEgKzE2NzYsMTMgQEANCiB7DQogCS8vIEZpbGVuYW1lDQogCWNvbnN0
IENvbmZpZ3VyYXRpb24gJmNvbmZpZyhHZXRDb25maWd1cmF0aW9uKCkpOw0K
LQlzdGQ6OnN0cmluZyBmbihjb25maWcuR2V0S2V5VmFsdWUoIkRhdGFEaXJl
Y3RvcnkiKSArIERJUkVDVE9SWV9TRVBBUkFUT1JfQVNDSEFSKTsNCisJc3Rk
OjpzdHJpbmcgZm4oY29uZmlnLkdldEtleVZhbHVlKCJEYXRhRGlyZWN0b3J5
IikgDQorCQkrIERJUkVDVE9SWV9TRVBBUkFUT1JfQVNDSEFSKTsNCiAJZm4g
Kz0gRmlsZW5hbWU7DQogCQ0KIAkvLyBPcGVuIGFuZCBjbG9zZSBpdCB0byB1
cGRhdGUgdGhlIHRpbWVzdGFtcA0KLQlGaWxlU3RyZWFtIHRvdWNoKGZuLmNf
c3RyKCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIFNfSVJVU1Ig
fCBTX0lXVVNSKTsNCisJRmlsZVN0cmVhbSB0b3VjaChmbi5jX3N0cigpLCAN
CisJCU9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIFNfSVJVU1IgfCBT
X0lXVVNSKTsNCiB9DQogDQogDQpAQCAtMTQ2OCw3ICsxNzAyLDggQEANCiAN
CiAJaWYoRXZlbnQgPCAwIHx8IEV2ZW50ID4gTm90aWZ5RXZlbnRfX01BWCkN
CiAJew0KLQkJVEhST1dfRVhDRVBUSU9OKEJhY2t1cFN0b3JlRXhjZXB0aW9u
LCBCYWROb3RpZnlTeXNhZG1pbkV2ZW50Q29kZSk7DQorCQlUSFJPV19FWENF
UFRJT04oQmFja3VwU3RvcmVFeGNlcHRpb24sDQorCQkJQmFkTm90aWZ5U3lz
YWRtaW5FdmVudENvZGUpOw0KIAl9DQogDQogCS8vIERvbid0IHNlbmQgbG90
cyBvZiByZXBlYXRlZCBtZXNzYWdlcw0KQEAgLTE1OTEsMTEgKzE4MjYsOSBA
QA0KIC8vDQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiBC
YWNrdXBEYWVtb246OkNvbW1hbmRTb2NrZXRJbmZvOjpDb21tYW5kU29ja2V0
SW5mbygpDQotCTogbXBHZXRMaW5lKDApDQogew0KIH0NCiANCi0NCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIC8vDQogLy8gRnVuY3Rp
b24NCkBAIC0xNjEzLDMgKzE4NDYsMjYgQEANCiAJfQ0KIH0NCiANCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vDQorLy8gRnVuY3Rp
b24NCisvLwkJTmFtZTogICAgQmFja3VwRGFlbW9uOjpTdGF0dXNTb2NrZXRJ
bmZvOjpTdGF0dXNTb2NrZXRJbmZvKCkNCisvLwkJUHVycG9zZTogQ29uc3Ry
dWN0b3INCisvLwkJQ3JlYXRlZDogMDQvMTAvMDQNCisvLw0KKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorQmFja3VwRGFlbW9uOjpTdGF0
dXNTb2NrZXRJbmZvOjpTdGF0dXNTb2NrZXRJbmZvKCkNCit7DQorfQ0KKw0K
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8NCisvLyBG
dW5jdGlvbg0KKy8vCQlOYW1lOiAgICBCYWNrdXBEYWVtb246OlN0YXR1c1Nv
Y2tldEluZm86On5TdGF0dXNTb2NrZXRJbmZvKCkNCisvLwkJUHVycG9zZTog
RGVzdHJ1Y3Rvcg0KKy8vCQlDcmVhdGVkOiAwNC8xMC8wNA0KKy8vDQorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitCYWNrdXBEYWVtb246
OlN0YXR1c1NvY2tldEluZm86On5TdGF0dXNTb2NrZXRJbmZvKCkNCit7DQor
fQ0KZGlmZiAtcnUgYm94YmFja3VwLTAuMDcvYmluL2JiYWNrdXBkL0JhY2t1
cERhZW1vbi5oIGJveGkvYm94YmFja3VwLTAuMDcvYmluL2JiYWNrdXBkL0Jh
Y2t1cERhZW1vbi5oDQotLS0gYm94YmFja3VwLTAuMDcvYmluL2JiYWNrdXBk
L0JhY2t1cERhZW1vbi5oCTIwMDQtMDYtMjggMTc6MzQ6MjcuMDAwMDAwMDAw
ICswMTAwDQorKysgYm94aS9ib3hiYWNrdXAtMC4wNy9iaW4vYmJhY2t1cGQv
QmFja3VwRGFlbW9uLmgJMjAwNC0xMC0wOCAyMjo0NjowMS4zMDE5NzE0NzIg
KzAxMDANCkBAIC01OCw2ICs1OCw3IEBADQogI2luY2x1ZGUgIlNvY2tldC5o
Ig0KICNpbmNsdWRlICJTb2NrZXRMaXN0ZW4uaCINCiAjaW5jbHVkZSAiU29j
a2V0U3RyZWFtLmgiDQorI2luY2x1ZGUgIldhaXRGb3JFdmVudC5oIg0KIA0K
IGNsYXNzIEJhY2t1cENsaWVudERpcmVjdG9yeVJlY29yZDsNCiBjbGFzcyBC
YWNrdXBDbGllbnRDb250ZXh0Ow0KQEAgLTkzLDExICs5NCwxMSBAQA0KIAll
bnVtDQogCXsNCiAJCS8vIEFkZCBzdHVmZiB0byB0aGlzLCBtYWtlIHN1cmUg
dGhlIHRleHR1YWwgZXF1aXZhbGVudHMgaW4gU2V0U3RhdGUoKSBhcmUgY2hh
bmdlZCB0b28uDQotCQlTdGF0ZV9Jbml0aWFsaXNpbmcgPSAtMSwNCi0JCVN0
YXRlX0lkbGUgPSAwLA0KLQkJU3RhdGVfQ29ubmVjdGVkID0gMSwNCi0JCVN0
YXRlX0Vycm9yID0gMiwNCi0JCVN0YXRlX1N0b3JhZ2VMaW1pdEV4Y2VlZGVk
ID0gMw0KKwkJU3RhdGVfSW5pdGlhbGlzaW5nID0gMSwNCisJCVN0YXRlX0lk
bGUgPSAyLA0KKwkJU3RhdGVfQ29ubmVjdGVkID0gMywNCisJCVN0YXRlX0Vy
cm9yID0gNCwNCisJCVN0YXRlX1N0b3JhZ2VMaW1pdEV4Y2VlZGVkID0gNQ0K
IAl9Ow0KIA0KIAlpbnQgR2V0U3RhdGUoKSB7cmV0dXJuIG1TdGF0ZTt9DQpA
QCAtMTMzLDEwICsxMzQsMTIgQEANCiANCiAJdm9pZCBTZXRTdGF0ZShpbnQg
U3RhdGUpOw0KIAkNCi0Jdm9pZCBXYWl0T25Db21tYW5kU29ja2V0KGJveF90
aW1lX3QgUmVxdWlyZWREZWxheSwgYm9vbCAmRG9TeW5jRmxhZ091dCwgYm9v
bCAmU3luY0lzRm9yY2VkT3V0KTsNCisJdm9pZCBXYWl0T25Tb2NrZXRzKGJv
eF90aW1lX3QgUmVxdWlyZWREZWxheSwgYm9vbCAmRG9TeW5jRmxhZ091dCwg
DQorCQlib29sICZTeW5jSXNGb3JjZWRPdXQpOw0KIAl2b2lkIENsb3NlQ29t
bWFuZENvbm5lY3Rpb24oKTsNCisJdm9pZCBDbG9zZVN0YXR1c0Nvbm5lY3Rp
b24oKTsNCiAJdm9pZCBTZW5kU3luY1N0YXJ0T3JGaW5pc2goYm9vbCBTZW5k
U3RhcnQpOw0KLQkNCisNCiAJdm9pZCBUb3VjaEZpbGVJbldvcmtpbmdEaXIo
Y29uc3QgY2hhciAqRmlsZW5hbWUpOw0KIA0KIAl2b2lkIERlbGV0ZVVudXNl
ZFJvb3REaXJFbnRyaWVzKEJhY2t1cENsaWVudENvbnRleHQgJnJDb250ZXh0
KTsNCkBAIC0xNzQsOCArMTc3LDE2IEBADQogCXN0ZDo6dmVjdG9yPEJhY2t1
cENsaWVudElub2RlVG9JRE1hcCAqPiBtQ3VycmVudElETWFwczsNCiAJc3Rk
Ojp2ZWN0b3I8QmFja3VwQ2xpZW50SW5vZGVUb0lETWFwICo+IG1OZXdJRE1h
cHM7DQogCQ0KKwljbGFzcyBTb2NrZXRJbmZvDQorCXsNCisJcHVibGljOg0K
KwkJU29ja2V0TGlzdGVuPFNvY2tldFN0cmVhbSwgMSAvKiBsaXN0ZW4gYmFj
a2xvZyAqLz4gbUxpc3RlbmluZ1NvY2tldDsNCisJCXN0ZDo6YXV0b19wdHI8
U29ja2V0U3RyZWFtPiBtcENvbm5lY3RlZFNvY2tldDsNCisJCUlPU3RyZWFt
R2V0TGluZSAqbXBHZXRMaW5lIDsNCisJfTsNCisJDQogCS8vIEZvciB0aGUg
Y29tbWFuZCBzb2NrZXQNCi0JY2xhc3MgQ29tbWFuZFNvY2tldEluZm8NCisJ
Y2xhc3MgQ29tbWFuZFNvY2tldEluZm8gOiBwdWJsaWMgU29ja2V0SW5mbw0K
IAl7DQogCXB1YmxpYzoNCiAJCUNvbW1hbmRTb2NrZXRJbmZvKCk7DQpAQCAt
MTgzLDE0ICsxOTQsMjkgQEANCiAJcHJpdmF0ZToNCiAJCUNvbW1hbmRTb2Nr
ZXRJbmZvKGNvbnN0IENvbW1hbmRTb2NrZXRJbmZvICYpOwkvLyBubyBjb3B5
aW5nDQogCQlDb21tYW5kU29ja2V0SW5mbyAmb3BlcmF0b3I9KGNvbnN0IENv
bW1hbmRTb2NrZXRJbmZvICYpOw0KLQlwdWJsaWM6DQotCQlTb2NrZXRMaXN0
ZW48U29ja2V0U3RyZWFtLCAxIC8qIGxpc3RlbiBiYWNrbG9nICovPiBtTGlz
dGVuaW5nU29ja2V0Ow0KLQkJc3RkOjphdXRvX3B0cjxTb2NrZXRTdHJlYW0+
IG1wQ29ubmVjdGVkU29ja2V0Ow0KLQkJSU9TdHJlYW1HZXRMaW5lICptcEdl
dExpbmU7DQogCX07DQogCQ0KLQkvLyBVc2luZyBhIHNvY2tldD8NCisJLy8g
VXNpbmcgYSBjb21tYW5kIHNvY2tldD8NCiAJQ29tbWFuZFNvY2tldEluZm8g
Km1wQ29tbWFuZFNvY2tldEluZm87DQorDQorCS8vIEZvciB0aGUgc3RhdHVz
IHNvY2tldA0KKwljbGFzcyBTdGF0dXNTb2NrZXRJbmZvIDogcHVibGljIFNv
Y2tldEluZm8NCisJew0KKwlwdWJsaWM6DQorCQlTdGF0dXNTb2NrZXRJbmZv
KCk7DQorCQl+U3RhdHVzU29ja2V0SW5mbygpOw0KKwlwcml2YXRlOg0KKwkJ
U3RhdHVzU29ja2V0SW5mbyhjb25zdCBTdGF0dXNTb2NrZXRJbmZvICYpOwkv
LyBubyBjb3B5aW5nDQorCQlTdGF0dXNTb2NrZXRJbmZvICZvcGVyYXRvcj0o
Y29uc3QgU3RhdHVzU29ja2V0SW5mbyAmKTsNCisJfTsNCisJDQorCS8vIFVz
aW5nIGEgc3RhdHVzIHNvY2tldD8NCisJU3RhdHVzU29ja2V0SW5mbyAqbXBT
dGF0dXNTb2NrZXRJbmZvOw0KKwkNCisJV2FpdEZvckV2ZW50IHNvY2tldFdh
aXRlcigpOw0KKwkNCisJdm9pZCBQcm9jZXNzQ29tbWFuZFNvY2tldENtZChi
b29sICZEb1N5bmNGbGFnT3V0LCBib29sICZTeW5jSXNGb3JjZWRPdXQpOw0K
Kwl2b2lkIEFjY2VwdFNvY2tldENvbm4oU29ja2V0SW5mbyAqc29ja2V0SW5m
byk7DQogCQ0KIAkvLyBTdG9wIG5vdGlmaWNhdGlvbnMgYmVpbmcgcmVwZWF0
ZWQuDQogCWJvb2wgbU5vdGlmaWNhdGlvbnNTZW50W05vdGlmeUV2ZW50X19N
QVggKyAxXTsNCg0KZGlmZiAtcnUgYm94YmFja3VwLTAuMDcvbGliL2JhY2t1
cGNsaWVudC9CYWNrdXBEYWVtb25Db25maWdWZXJpZnkuY3BwIGJveGkvYm94
YmFja3VwLTAuMDcvbGliL2JhY2t1cGNsaWVudC9CYWNrdXBEYWVtb25Db25m
aWdWZXJpZnkuY3BwDQotLS0gYm94YmFja3VwLTAuMDcvbGliL2JhY2t1cGNs
aWVudC9CYWNrdXBEYWVtb25Db25maWdWZXJpZnkuY3BwCTIwMDQtMDYtMjgg
MTc6MzQ6MjYuMDAwMDAwMDAwICswMTAwDQorKysgYm94aS9ib3hiYWNrdXAt
MC4wNy9saWIvYmFja3VwY2xpZW50L0JhY2t1cERhZW1vbkNvbmZpZ1Zlcmlm
eS5jcHAJMjAwNC0xMC0wNyAxMDoxNjozMi4wMDAwMDAwMDAgKzAxMDANCkBA
IC0xMjMsNiArMTIzLDcgQEANCiAJeyJFeHRlbmRlZExvZ2dpbmciLAkibm8i
LCBDb25maWdUZXN0X0lzQm9vbCwgMH0sCQkJLy8gbWFrZSB2YWx1ZSAieWVz
IiB0byBlbmFibGUgaW4gY29uZmlnIGZpbGUNCiANCiAJeyJDb21tYW5kU29j
a2V0IiwgMCwgMCwgMH0sCQkJCS8vIG5vdCBjb21wdWxzb3J5IHRvIGhhdmUg
dGhpcw0KKwl7IlN0YXR1c1NvY2tldCIsIDAsIDAsIDB9LCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbm90IGNvbXB1bHNvcnkgdG8gaGF2ZSB0
aGlzDQogDQogCXsiTm90aWZ5U2NyaXB0IiwgMCwgMCwgMH0sCQkJCS8vIG9w
dGlvbmFsIHNjcmlwdCB0byBydW4gd2hlbiBiYWNrdXAgbmVlZHMgYXR0ZW50
aW9uLCBlZyBzdG9yZSBmdWxsDQogCQ0KZGlmZiAtcnUgYm94YmFja3VwLTAu
MDcvbGliL2NvbW1vbi9Cb3hFeGNlcHRpb24uaCBib3hpL2JveGJhY2t1cC0w
LjA3L2xpYi9jb21tb24vQm94RXhjZXB0aW9uLmgNCi0tLSBib3hiYWNrdXAt
MC4wNy9saWIvY29tbW9uL0JveEV4Y2VwdGlvbi5oCTIwMDQtMDYtMjggMTc6
MzQ6MjIuMDAwMDAwMDAwICswMTAwDQorKysgYm94aS9ib3hiYWNrdXAtMC4w
Ny9saWIvY29tbW9uL0JveEV4Y2VwdGlvbi5oCTIwMDQtMTAtMDIgMjM6MjM6
MzIuMDAwMDAwMDAwICswMTAwDQpAQCAtNjcsNiArNjcsNyBAQA0KIAkNCiAJ
dmlydHVhbCB1bnNpZ25lZCBpbnQgR2V0VHlwZSgpIGNvbnN0IHRocm93KCkg
PSAwOw0KIAl2aXJ0dWFsIHVuc2lnbmVkIGludCBHZXRTdWJUeXBlKCkgY29u
c3QgdGhyb3coKSA9IDA7DQorCXZpcnR1YWwgY29uc3QgY2hhciAqd2hhdCgp
IGNvbnN0IHRocm93KCkgPSAwOw0KIA0KIHByaXZhdGU6DQogfTsNCg0KZGlm
ZiAtcnUgYm94YmFja3VwLTAuMDcvbGliL3NlcnZlci9Tb2NrZXRTdHJlYW0u
aCBib3hpL2JveGJhY2t1cC0wLjA3L2xpYi9zZXJ2ZXIvU29ja2V0U3RyZWFt
LmgNCi0tLSBib3hiYWNrdXAtMC4wNy9saWIvc2VydmVyL1NvY2tldFN0cmVh
bS5oCTIwMDQtMDYtMjggMTc6MzQ6MjQuMDAwMDAwMDAwICswMTAwDQorKysg
Ym94aS9ib3hiYWNrdXAtMC4wNy9saWIvc2VydmVyL1NvY2tldFN0cmVhbS5o
CTIwMDQtMTAtMDggMjM6MDc6MTcuNDgwOTYyNzc2ICswMTAwDQpAQCAtNTEs
NiArNTEsMTIgQEANCiANCiAjaW5jbHVkZSAiSU9TdHJlYW0uaCINCiANCisj
aW5jbHVkZSA8cG9sbC5oPg0KKyNpZm5kZWYgUExBVEZPUk1fS1FVRVVFX05P
VF9TVVBQT1JURUQNCisgICAgICAgICNpbmNsdWRlIDxzeXMvZXZlbnQuaD4N
CisgICAgICAgICNpbmNsdWRlIDxzeXMvdGltZS5oPg0KKyNlbmRpZg0KKw0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogLy8NCiAvLyBD
bGFzcw0KQEAgLTgwLDYgKzg2LDM3IEBADQogDQogCXZpcnR1YWwgYm9vbCBH
ZXRQZWVyQ3JlZGVudGlhbHModWlkX3QgJnJVaWRPdXQsIGdpZF90ICZyR2lk
T3V0KTsNCiANCisgICAgICAgIC8vIEZ1bmN0aW9ucyB0byBhbGxvdyBhZGRp
bmcgdG8gV2FpdEZvckV2ZW50IGNsYXNzLA0KKwkvLyBmb3IgZWZmaWNpZW50
IHdhaXRpbmcgb24gbXVsdGlwbGUgc29ja2V0cy4NCisjaWZuZGVmIFBMQVRG
T1JNX0tRVUVVRV9OT1RfU1VQUE9SVEVEDQorICAgICAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgLy8NCisgICAgICAg
IC8vIEZ1bmN0aW9uDQorICAgICAgICAvLyAgICAgICAgICAgICAgTmFtZTog
ICAgU29ja2V0U3RyZWFtOjpGaWxsSW5LRWV2ZW50DQorICAgICAgICAvLyAg
ICAgICAgICAgICAgUHVycG9zZTogRmlsbHMgaW4gYSBrZXZlbnQgc3RydWN0
dXJlIGZvciB0aGlzIHNvY2tldA0KKyAgICAgICAgLy8gICAgICAgICAgICAg
IENyZWF0ZWQ6IDA4LzEwLzA0DQorICAgICAgICAvLw0KKyAgICAgICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgIHZvaWQg
RmlsbEluS0V2ZW50KHN0cnVjdCBrZXZlbnQgJnJFdmVudCwgaW50IEZsYWdz
ID0gMCkgY29uc3QNCisgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVZf
U0VUKCZyRXZlbnQsIG1Tb2NrZXRIYW5kbGUsIEVWRklMVF9SRUFELCAwLCAw
LCAwLCAodm9pZCopdGhpcyk7DQorICAgICAgICB9DQorI2Vsc2UNCisgICAg
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAg
ICAvLw0KKyAgICAgICAgLy8gRnVuY3Rpb24NCisgICAgICAgIC8vICAgICAg
ICAgICAgICBOYW1lOiAgICBTb2NrZXRTdHJlYW06OkZpbGxJblBvbGwNCisg
ICAgICAgIC8vICAgICAgICAgICAgICBQdXJwb3NlOiBGaWxscyBpbiB0aGUg
ZGF0YSBuZWNlc3NhcnkgZm9yIGEgcG9sbCBvcGVyYXRpb24NCisgICAgICAg
IC8vICAgICAgICAgICAgICBDcmVhdGVkOiAwOC8xMC8wNA0KKyAgICAgICAg
Ly8NCisgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
DQorICAgICAgICB2b2lkIEZpbGxJblBvbGwoaW50ICZmZCwgc2hvcnQgJmV2
ZW50cywgaW50IEZsYWdzID0gMCkgY29uc3QNCisgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgZmQgPSBtU29ja2V0SGFuZGxlOw0KKyAgICAgICAgICAg
ICAgICBldmVudHMgPSBQT0xMSU47DQorICAgICAgICB9DQorI2VuZGlmDQor
DQogcHJvdGVjdGVkOg0KIAlpbnQgR2V0U29ja2V0SGFuZGxlKCk7DQogCXZv
aWQgTWFya0FzUmVhZENsb3NlZCgpIHttUmVhZENsb3NlZCA9IHRydWU7fQ0K
---1044231485-1028536687-1097276006=:22116--