<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>160151</bug_id>
          
          <creation_ts>2016-07-24 18:11:41 -0700</creation_ts>
          <short_desc>Split platform specific parts of NetworkCacheCoders.cpp into separate files</short_desc>
          <delta_ts>2016-07-25 11:02:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1214088</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-24 18:11:41 -0700</bug_when>
    <thetext>Split platform specific parts of NetworkCacheCoders.cpp into seperate files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214089</commentid>
    <comment_count>1</comment_count>
      <attachid>284457</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-07-24 18:13:27 -0700</bug_when>
    <thetext>Created attachment 284457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214183</commentid>
    <comment_count>2</comment_count>
      <attachid>284457</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-07-25 08:21:43 -0700</bug_when>
    <thetext>Comment on attachment 284457
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=284457&amp;action=review

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheCodersCocoa.cpp:31
&gt;  #if PLATFORM(COCOA)

This is no longer needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214259</commentid>
    <comment_count>3</comment_count>
      <attachid>284457</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-25 11:02:38 -0700</bug_when>
    <thetext>Comment on attachment 284457
Patch

Clearing flags on attachment: 284457

Committed r203691: &lt;http://trac.webkit.org/changeset/203691&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214260</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-25 11:02:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284457</attachid>
            <date>2016-07-24 18:13:27 -0700</date>
            <delta_ts>2016-07-25 11:02:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160151-20160724181221.patch</filename>
            <type>text/plain</type>
            <size>56771</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzY3MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE2LTA3LTI0ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3BsaXQgcGxhdGZvcm0gc3BlY2lmaWMg
cGFydHMgb2YgTmV0d29ya0NhY2hlQ29kZXJzLmNwcCBpbnRvIHNlcGFyYXRlIGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAxNTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUNvZGVyc0NvY29hLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVDRkRhdGEpOiBNb3ZlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpkZWNvZGVDRkRhdGEpOiBNb3ZlZC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjplbmNvZGVTZWNUcnVzdFJlZik6IE1vdmVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVNlY1RydXN0UmVmKTogTW92ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZW5jb2RlQ2VydGlmaWNhdGVDaGFpbik6IE1vdmVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZUNlcnRpZmljYXRlQ2hhaW4pOiBNb3Zl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8+OjplbmNvZGUpOiBNb3ZlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjpkZWNvZGUpOiBNb3ZlZC4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNTb3VwLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzLmNwcC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUpOiBNb3ZlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjpkZWNvZGUpOiBNb3Zl
ZC4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFj
LmNtYWtlOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgQWRkIG5ldyBmaWxlcy4KKwogMjAxNi0wNy0yNCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIEFkZCBzcGVjaWFsaXphdGlvbiBmb3IgZW5jb2RpbmcvZGVjb2Rp
bmcgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvcyBpbiB0aGUgTmV0d29yayBDYWNoZQpJbmRleDog
U291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwMzY3MCkKKysrIFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L3NvdXAvRG93bmxvYWRTb3VwLmNwcAogCisgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlQ29kZXJzU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0No
YW5uZWxTb3VwLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkocmV2aXNpb24g
MjAzNjcwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tCiAKKyAgICBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0KICAgICBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVy
cy5jcHAJKHJldmlzaW9uIDIwMzY3MSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICsz
MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSA8U2VjdXJpdHkv
U2VjQ2VydGlmaWNhdGUuaD4KLSNpbmNsdWRlIDxTZWN1cml0eS9TZWNUcnVzdC5oPgotI2luY2x1
ZGUgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCkBAIC0xNTAsMjE1ICsxNDQsNiBAQCBi
b29sIENvZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvCiAgICAgcmV0dXJuIGRlY29k
ZVN0cmluZ1RleHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKIH0KIAotI2lmIFBM
QVRGT1JNKENPQ09BKQotc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZXIs
IENGRGF0YVJlZiBkYXRhKQotewotICAgIHVpbnQ2NF90IGxlbmd0aCA9IENGRGF0YUdldExlbmd0
aChkYXRhKTsKLSAgICBjb25zdCB1aW50OF90KiBieXRlUHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihk
YXRhKTsKLQotICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGJ5dGVQdHIsIGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBib29sIGRlY29kZUNGRGF0
YShEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkKLXsKLSAgICB1
aW50NjRfdCBzaXplID0gMDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yKHNpemUpOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yLmRhdGEoKSwgdmVjdG9y
LnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZShudWxscHRyLCB2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLQotI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCi1z
dGF0aWMgdm9pZCBlbmNvZGVTZWNUcnVzdFJlZihFbmNvZGVyJiBlbmNvZGVyLCBTZWNUcnVzdFJl
ZiB0cnVzdCkKLXsKLSAgICBhdXRvIGRhdGEgPSBhZG9wdENGKFNlY1RydXN0U2VyaWFsaXplKHRy
dXN0LCBudWxscHRyKSk7Ci0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgZmFs
c2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAg
ZW5jb2RlQ0ZEYXRhKGVuY29kZXIsIGRhdGEuZ2V0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBkZWNv
ZGVTZWNUcnVzdFJlZihEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+JiBy
ZXN1bHQpCi17Ci0gICAgYm9vbCBoYXNUcnVzdDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhh
c1RydXN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFoYXNUcnVzdCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0cnVzdERhdGE7
Ci0gICAgaWYgKCFkZWNvZGVDRkRhdGEoZGVjb2RlciwgdHJ1c3REYXRhKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byB0cnVzdCA9IGFkb3B0Q0YoU2VjVHJ1c3REZXNlcmlhbGl6
ZSh0cnVzdERhdGEuZ2V0KCksIG51bGxwdHIpKTsKLSAgICBpZiAoIXRydXN0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHQgPSBXVEZNb3ZlKHRydXN0KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBlbmNvZGVDZXJ0aWZpY2F0ZUNoYWluKEVu
Y29kZXImIGVuY29kZXIsIENGQXJyYXlSZWYgY2VydGlmaWNhdGVDaGFpbikKLXsKLSAgICBDRklu
ZGV4IHNpemUgPSBDRkFycmF5R2V0Q291bnQoY2VydGlmaWNhdGVDaGFpbik7Ci0gICAgVmVjdG9y
PENGVHlwZVJlZiwgMzI+IHZhbHVlcyhzaXplKTsKLQotICAgIENGQXJyYXlHZXRWYWx1ZXMoY2Vy
dGlmaWNhdGVDaGFpbiwgQ0ZSYW5nZU1ha2UoMCwgc2l6ZSksIHZhbHVlcy5kYXRhKCkpOwotCi0g
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZSk7Ci0KLSAgICBmb3IgKENG
SW5kZXggaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgQVNTRVJUKHZhbHVlc1tpXSk7
Ci0gICAgICAgIEFTU0VSVChDRkdldFR5cGVJRCh2YWx1ZXNbaV0pICE9IFNlY0NlcnRpZmljYXRl
R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNh
dGVDb3B5RGF0YSgoU2VjQ2VydGlmaWNhdGVSZWYpdmFsdWVzW2ldKSk7Ci0gICAgICAgIGVuY29k
ZUNGRGF0YShlbmNvZGVyLCBkYXRhLmdldCgpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGRl
Y29kZUNlcnRpZmljYXRlQ2hhaW4oRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGQXJyYXlS
ZWY+JiBjZXJ0aWZpY2F0ZUNoYWluKQotewotICAgIHVpbnQ2NF90IHNpemU7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShzaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBh
cnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVBcnJheUNh
bGxCYWNrcykpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAgICAgICAgaWYgKCFkZWNvZGVDRkRh
dGEoZGVjb2RlciwgZGF0YSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
YXV0byBjZXJ0aWZpY2F0ZSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDcmVhdGVXaXRoRGF0YSgw
LCBkYXRhLmdldCgpKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwg
Y2VydGlmaWNhdGUuZ2V0KCkpOwotICAgIH0KLQotICAgIGNlcnRpZmljYXRlQ2hhaW4gPSBXVEZN
b3ZlKGFycmF5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb2RlcjxXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgZW5jb2Rlci5lbmNvZGVF
bnVtKGNlcnRpZmljYXRlSW5mby50eXBlKCkpOwotCi0gICAgc3dpdGNoIChjZXJ0aWZpY2F0ZUlu
Zm8udHlwZSgpKSB7Ci0jaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBjYXNl
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6Ci0gICAgICAgIGVuY29kZVNl
Y1RydXN0UmVmKGVuY29kZXIsIGNlcnRpZmljYXRlSW5mby50cnVzdCgpKTsKLSAgICAgICAgYnJl
YWs7Ci0jZW5kaWYKLSAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Q2Vy
dGlmaWNhdGVDaGFpbjogewotICAgICAgICBlbmNvZGVDZXJ0aWZpY2F0ZUNoYWluKGVuY29kZXIs
IGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmU6Ci0gICAg
ICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotYm9vbCBDb2Rl
cjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvOjpUeXBlIGNlcnRpZmljYXRlSW5mb1R5cGU7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUVudW0oY2VydGlmaWNhdGVJbmZvVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHN3aXRjaCAoY2VydGlmaWNhdGVJbmZvVHlwZSkgewotI2lmIEhBVkUoU0VDX1RS
VVNUX1NFUklBTElaQVRJT04pCi0gICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5
cGU6OlRydXN0OiB7Ci0gICAgICAgIFJldGFpblB0cjxTZWNUcnVzdFJlZj4gdHJ1c3Q7Ci0gICAg
ICAgIGlmICghZGVjb2RlU2VjVHJ1c3RSZWYoZGVjb2RlciwgdHJ1c3QpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbyhXVEZNb3ZlKHRydXN0KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSNlbmRpZgotICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZp
Y2F0ZUNoYWluOiB7Ci0gICAgICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjZXJ0aWZpY2F0ZUNo
YWluOwotICAgICAgICBpZiAoIWRlY29kZUNlcnRpZmljYXRlQ2hhaW4oZGVjb2RlciwgY2VydGlm
aWNhdGVDaGFpbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgY2VydGlm
aWNhdGVJbmZvID0gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUoY2VydGlmaWNhdGVD
aGFpbikpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9ICAgIAotICAgIGNhc2UgV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpOb25lOgotICAgICAgICAvLyBEbyBub3RoaW5nLgot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbHNlCi12b2lk
IENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAg
ICBpZiAoIWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZSgpKSB7Ci0gICAgICAgIGVuY29kZXIg
PDwgZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHQnl0ZUFycmF5KiBjZXJ0
aWZpY2F0ZURhdGEgPSAwOwotICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChjZXJ0aWZpY2F0ZUlu
Zm8uY2VydGlmaWNhdGUoKSksICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0ZURhdGEsIE5VTEwp
OwotICAgIGlmICghY2VydGlmaWNhdGVEYXRhKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgZmFsc2U7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7Ci0KLSAgICBH
UmVmUHRyPEdCeXRlQXJyYXk+IGNlcnRpZmljYXRlID0gYWRvcHRHUmVmKGNlcnRpZmljYXRlRGF0
YSk7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oY2VydGlmaWNhdGUtPmxl
bik7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoY2VydGlmaWNhdGUtPmRhdGEs
IGNlcnRpZmljYXRlLT5sZW4pOwotCi0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oY2VydGlmaWNhdGVJbmZvLnRsc0Vycm9ycygpKTsKLX0KLQotYm9vbCBDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgYm9vbCBoYXNDZXJ0aWZpY2F0
ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0NlcnRpZmljYXRlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFoYXNDZXJ0aWZpY2F0ZSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICB1aW50NjRfdCBzaXplID0gMDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNp
emUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9y
KHNpemUpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yLmRh
dGEoKSwgdmVjdG9yLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdCeXRl
QXJyYXkqIGNlcnRpZmljYXRlRGF0YSA9IGdfYnl0ZV9hcnJheV9zaXplZF9uZXcodmVjdG9yLnNp
emUoKSk7Ci0gICAgY2VydGlmaWNhdGVEYXRhID0gZ19ieXRlX2FycmF5X2FwcGVuZChjZXJ0aWZp
Y2F0ZURhdGEsIHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwotICAgIEdSZWZQdHI8R0J5
dGVBcnJheT4gY2VydGlmaWNhdGVCeXRlcyA9IGFkb3B0R1JlZihjZXJ0aWZpY2F0ZURhdGEpOwot
Ci0gICAgR1Rsc0JhY2tlbmQqIGJhY2tlbmQgPSBnX3Rsc19iYWNrZW5kX2dldF9kZWZhdWx0KCk7
Ci0gICAgR1JlZlB0cjxHVGxzQ2VydGlmaWNhdGU+IGNlcnRpZmljYXRlID0gYWRvcHRHUmVmKEdf
VExTX0NFUlRJRklDQVRFKGdfaW5pdGFibGVfbmV3KAotICAgICAgICBnX3Rsc19iYWNrZW5kX2dl
dF9jZXJ0aWZpY2F0ZV90eXBlKGJhY2tlbmQpLCAwLCAwLCAiY2VydGlmaWNhdGUiLCBjZXJ0aWZp
Y2F0ZUJ5dGVzLmdldCgpLCBudWxscHRyKSkpOwotICAgIGNlcnRpZmljYXRlSW5mby5zZXRDZXJ0
aWZpY2F0ZShjZXJ0aWZpY2F0ZS5nZXQoKSk7Ci0KLSAgICB1aW50MzJfdCB0bHNFcnJvcnM7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0bHNFcnJvcnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgY2VydGlmaWNhdGVJbmZvLnNldFRMU0Vycm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlm
aWNhdGVGbGFncz4odGxzRXJyb3JzKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgog
CiB2b2lkIENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc0NvY29hLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNDb2Nv
YS5jcHAJKHJldmlzaW9uIDIwMzY3MSkJKGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcDoyMDM2NzEpCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKKworI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSA8U2VjdXJpdHkvU2VjQ2VydGlmaWNhdGUuaD4KKyNpbmNsdWRlIDxTZWN1cml0eS9TZWNU
cnVzdC5oPgorI2luY2x1ZGUgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCit2b2lkIENv
ZGVyPEF0b21pY1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0b21pY1N0cmluZykKK3sKKyAgICBlbmNvZGVyIDw8IGF0b21pY1N0cmluZy5zdHJp
bmcoKTsKK30KKworYm9vbCBDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCit7CisgICAgU3RyaW5nIHN0cmluZzsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cmluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF0b21pY1N0cmluZyA9IHN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENTdHJpbmcm
IHN0cmluZykKK3sKKyAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nLgorICAgIGlm
IChzdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50
MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgZW5jb2RlciA8PCBsZW5ndGg7Cisg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oc3RyaW5nLmRhdGEoKSksIGxlbmd0aCk7Cit9CisKK2Jvb2wgQ29kZXI8Q1N0cmlu
Zz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1bHQpCit7CisgICAgdWlu
dDMyX3QgbGVuZ3RoOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbnVsbCBzdHJpbmcuCisg
ICAgICAgIHJlc3VsdCA9IENTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRoYXQgdGhl
IGRlY29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW48Y2hhcj4obGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgY2hhciogYnVmZmVyOworICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3
VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBzdHJpbmc7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKKwordm9pZCBDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBu
dWxsIHN0cmluZy4KKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGVuY29kZXIg
PDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGJv
b2wgaXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOworCisgICAgZW5jb2RlciA8PCBsZW5ndGggPDwg
aXM4Qml0OworCisgICAgaWYgKGlzOEJpdCkKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3Rl
cnM4KCkpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpKTsKKyAgICBlbHNlCisgICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBkZWNv
ZGVTdHJpbmdUZXh0KERlY29kZXImIGRlY29kZXIsIHVpbnQzMl90IGxlbmd0aCwgU3RyaW5nJiBy
ZXN1bHQpCit7CisgICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJl
IHRoYXQgdGhlIGRlY29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFkZWNvZGVy
LmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOworICAgIFN0
cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIp
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJlc3VsdCA9IHN0cmluZzsKKyAgICByZXR1
cm4gdHJ1ZTsgICAgCit9CisKK2Jvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFN0cmluZyYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgorICAgICAgICByZXN1bHQgPSBTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBpczhCaXQ7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShpczhCaXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoaXM4Qml0KQorICAgICAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxMQ2hhcj4oZGVj
b2RlciwgbGVuZ3RoLCByZXN1bHQpOworICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PFVDaGFy
PihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Cit9CisKKyNpZiBQTEFURk9STShDT0NPQSkKK3N0
YXRpYyB2b2lkIGVuY29kZUNGRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBDRkRhdGFSZWYgZGF0YSkK
K3sKKyAgICB1aW50NjRfdCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YSk7CisgICAgY29u
c3QgdWludDhfdCogYnl0ZVB0ciA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YSk7CisKKyAgICBlbmNv
ZGVyIDw8IGxlbmd0aDsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShieXRlUHRy
LCBsZW5ndGgpOworfQorCitzdGF0aWMgYm9vbCBkZWNvZGVDRkRhdGEoRGVjb2RlciYgZGVjb2Rl
ciwgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEpCit7CisgICAgdWludDY0X3Qgc2l6ZSA9IDA7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcihzaXplKTsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0
ciwgdmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSkpOworICAgIHJldHVybiB0cnVlOworfQor
CisKKyNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQorc3RhdGljIHZvaWQgZW5jb2Rl
U2VjVHJ1c3RSZWYoRW5jb2RlciYgZW5jb2RlciwgU2VjVHJ1c3RSZWYgdHJ1c3QpCit7CisgICAg
YXV0byBkYXRhID0gYWRvcHRDRihTZWNUcnVzdFNlcmlhbGl6ZSh0cnVzdCwgbnVsbHB0cikpOwor
ICAgIGlmICghZGF0YSkgeworICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZW5jb2RlciA8PCB0cnVlOworICAgIGVuY29kZUNGRGF0YShlbmNv
ZGVyLCBkYXRhLmdldCgpKTsKK30KKworc3RhdGljIGJvb2wgZGVjb2RlU2VjVHJ1c3RSZWYoRGVj
b2RlciYgZGVjb2RlciwgUmV0YWluUHRyPFNlY1RydXN0UmVmPiYgcmVzdWx0KQoreworICAgIGJv
b2wgaGFzVHJ1c3Q7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNUcnVzdCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghaGFzVHJ1c3QpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdHJ1c3REYXRhOworICAgIGlmICghZGVjb2Rl
Q0ZEYXRhKGRlY29kZXIsIHRydXN0RGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gdHJ1c3QgPSBhZG9wdENGKFNlY1RydXN0RGVzZXJpYWxpemUodHJ1c3REYXRhLmdldCgp
LCBudWxscHRyKSk7CisgICAgaWYgKCF0cnVzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmVzdWx0ID0gV1RGTW92ZSh0cnVzdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYK
Kworc3RhdGljIHZvaWQgZW5jb2RlQ2VydGlmaWNhdGVDaGFpbihFbmNvZGVyJiBlbmNvZGVyLCBD
RkFycmF5UmVmIGNlcnRpZmljYXRlQ2hhaW4pCit7CisgICAgQ0ZJbmRleCBzaXplID0gQ0ZBcnJh
eUdldENvdW50KGNlcnRpZmljYXRlQ2hhaW4pOworICAgIFZlY3RvcjxDRlR5cGVSZWYsIDMyPiB2
YWx1ZXMoc2l6ZSk7CisKKyAgICBDRkFycmF5R2V0VmFsdWVzKGNlcnRpZmljYXRlQ2hhaW4sIENG
UmFuZ2VNYWtlKDAsIHNpemUpLCB2YWx1ZXMuZGF0YSgpKTsKKworICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHNpemUpOworCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZXNbaV0pOworICAgICAgICBBU1NFUlQo
Q0ZHZXRUeXBlSUQodmFsdWVzW2ldKSAhPSBTZWNDZXJ0aWZpY2F0ZUdldFR5cGVJRCgpKTsKKwor
ICAgICAgICBhdXRvIGRhdGEgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ29weURhdGEoKFNlY0Nl
cnRpZmljYXRlUmVmKXZhbHVlc1tpXSkpOworICAgICAgICBlbmNvZGVDRkRhdGEoZW5jb2Rlciwg
ZGF0YS5nZXQoKSk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBkZWNvZGVDZXJ0aWZpY2F0ZUNo
YWluKERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxDRkFycmF5UmVmPiYgY2VydGlmaWNhdGVD
aGFpbikKK3sKKyAgICB1aW50NjRfdCBzaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYXJyYXkgPSBhZG9wdENGKENG
QXJyYXlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFJldGFpblB0cjxD
RkRhdGFSZWY+IGRhdGE7CisgICAgICAgIGlmICghZGVjb2RlQ0ZEYXRhKGRlY29kZXIsIGRhdGEp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gY2VydGlmaWNhdGUg
PSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERhdGEoMCwgZGF0YS5nZXQoKSkpOwor
ICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIGNlcnRpZmljYXRlLmdldCgp
KTsKKyAgICB9CisKKyAgICBjZXJ0aWZpY2F0ZUNoYWluID0gV1RGTW92ZShhcnJheSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYg
Y2VydGlmaWNhdGVJbmZvKQoreworICAgIGVuY29kZXIuZW5jb2RlRW51bShjZXJ0aWZpY2F0ZUlu
Zm8udHlwZSgpKTsKKworICAgIHN3aXRjaCAoY2VydGlmaWNhdGVJbmZvLnR5cGUoKSkgeworI2lm
IEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCisgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm86OlR5cGU6OlRydXN0OgorICAgICAgICBlbmNvZGVTZWNUcnVzdFJlZihlbmNvZGVy
LCBjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAg
Y2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNlcnRpZmljYXRlQ2hhaW46IHsK
KyAgICAgICAgZW5jb2RlQ2VydGlmaWNhdGVDaGFpbihlbmNvZGVyLCBjZXJ0aWZpY2F0ZUluZm8u
Y2VydGlmaWNhdGVDaGFpbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpOb25lOgorICAgICAgICAvLyBEbyBub3RoaW5n
LgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgQ29kZXI8V2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6
VHlwZSBjZXJ0aWZpY2F0ZUluZm9UeXBlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGNl
cnRpZmljYXRlSW5mb1R5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2gg
KGNlcnRpZmljYXRlSW5mb1R5cGUpIHsKKyNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9O
KQorICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpUcnVzdDogeworICAg
ICAgICBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+IHRydXN0OworICAgICAgICBpZiAoIWRlY29kZVNl
Y1RydXN0UmVmKGRlY29kZXIsIHRydXN0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBjZXJ0aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oV1RGTW92
ZSh0cnVzdCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNl
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbjogeworICAg
ICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY2VydGlmaWNhdGVDaGFpbjsKKyAgICAgICAgaWYg
KCFkZWNvZGVDZXJ0aWZpY2F0ZUNoYWluKGRlY29kZXIsIGNlcnRpZmljYXRlQ2hhaW4pKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbyhXVEZNb3ZlKGNlcnRpZmljYXRlQ2hhaW4pKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSAgICAKKyAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bzo6VHlwZTo6Tm9uZToKKyAgICAgICAgLy8gRG8gbm90aGluZy4KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZWxzZQordm9pZCBDb2RlcjxXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgaWYgKCFjZXJ0aWZpY2F0
ZUluZm8uY2VydGlmaWNhdGUoKSkgeworICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgR0J5dGVBcnJheSogY2VydGlmaWNhdGVEYXRhID0gMDsK
KyAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlKCkp
LCAiY2VydGlmaWNhdGUiLCAmY2VydGlmaWNhdGVEYXRhLCBOVUxMKTsKKyAgICBpZiAoIWNlcnRp
ZmljYXRlRGF0YSkgeworICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZW5jb2RlciA8PCB0cnVlOworCisgICAgR1JlZlB0cjxHQnl0ZUFycmF5
PiBjZXJ0aWZpY2F0ZSA9IGFkb3B0R1JlZihjZXJ0aWZpY2F0ZURhdGEpOworICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNlcnRpZmljYXRlLT5sZW4pOworICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNlcnRpZmljYXRlLT5kYXRhLCBjZXJ0aWZpY2F0ZS0+bGVu
KTsKKworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNlcnRpZmljYXRlSW5m
by50bHNFcnJvcnMoKSk7Cit9CisKK2Jvb2wgQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2Vy
dGlmaWNhdGVJbmZvKQoreworICAgIGJvb2wgaGFzQ2VydGlmaWNhdGU7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShoYXNDZXJ0aWZpY2F0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghaGFzQ2VydGlmaWNhdGUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgdWludDY0
X3Qgc2l6ZSA9IDA7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcihzaXplKTsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXpl
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHQnl0ZUFycmF5KiBjZXJ0aWZpY2F0
ZURhdGEgPSBnX2J5dGVfYXJyYXlfc2l6ZWRfbmV3KHZlY3Rvci5zaXplKCkpOworICAgIGNlcnRp
ZmljYXRlRGF0YSA9IGdfYnl0ZV9hcnJheV9hcHBlbmQoY2VydGlmaWNhdGVEYXRhLCB2ZWN0b3Iu
ZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBHUmVmUHRyPEdCeXRlQXJyYXk+IGNlcnRpZmlj
YXRlQnl0ZXMgPSBhZG9wdEdSZWYoY2VydGlmaWNhdGVEYXRhKTsKKworICAgIEdUbHNCYWNrZW5k
KiBiYWNrZW5kID0gZ190bHNfYmFja2VuZF9nZXRfZGVmYXVsdCgpOworICAgIEdSZWZQdHI8R1Rs
c0NlcnRpZmljYXRlPiBjZXJ0aWZpY2F0ZSA9IGFkb3B0R1JlZihHX1RMU19DRVJUSUZJQ0FURShn
X2luaXRhYmxlX25ldygKKyAgICAgICAgZ190bHNfYmFja2VuZF9nZXRfY2VydGlmaWNhdGVfdHlw
ZShiYWNrZW5kKSwgMCwgMCwgImNlcnRpZmljYXRlIiwgY2VydGlmaWNhdGVCeXRlcy5nZXQoKSwg
bnVsbHB0cikpKTsKKyAgICBjZXJ0aWZpY2F0ZUluZm8uc2V0Q2VydGlmaWNhdGUoY2VydGlmaWNh
dGUuZ2V0KCkpOworCisgICAgdWludDMyX3QgdGxzRXJyb3JzOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodGxzRXJyb3JzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNlcnRpZmljYXRl
SW5mby5zZXRUTFNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KHRsc0Vy
cm9ycykpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBDb2RlcjxTSEEx
OjpEaWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBk
aWdlc3QpCit7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEo
KSwgc2l6ZW9mKGRpZ2VzdCkpOworfQorCitib29sIENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKK3sKKyAgICByZXR1cm4g
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2Vz
dCkpOworfQorCisvLyBTdG9yZSBjb21tb24gSFRUUCBoZWFkZXJzIGFzIHN0cmluZ3MgaW5zdGVh
ZCBvZiB1c2luZyB0aGVpciB2YWx1ZSBpbiB0aGUgSFRUUEhlYWRlck5hbWUgZW51bWVyYXRpb24K
Ky8vIHNvIHRoYXQgdGhlIGhlYWRlcnMgc3RvcmVkIGluIHRoZSBjYWNoZSBzdGF5cyB2YWxpZCBl
dmVuIGFmdGVyIEhUVFBIZWFkZXJOYW1lLmluIGdldHMgdXBkYXRlZC4KK3ZvaWQgQ29kZXI8V2Vi
Q29yZTo6SFRUUEhlYWRlck1hcD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJD
b3JlOjpIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGhlYWRlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDog
aGVhZGVycykgeworICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlLmtleTsKKyAgICAgICAgZW5j
b2RlciA8PCBrZXlWYWx1ZS52YWx1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29kZXI8V2ViQ29yZTo6
SFRUUEhlYWRlck1hcD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpIVFRQSGVh
ZGVyTWFwJiBoZWFkZXJzKQoreworICAgIHVpbnQ2NF90IGhlYWRlcnNTaXplOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaGVhZGVyc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Zm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhlYWRlcnNTaXplOyArK2kpIHsKKyAgICAgICAgU3Ry
aW5nIG5hbWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhl
YWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30K
K30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzQ29jb2EuY3BwCShyZXZpc2lv
biAyMDM2NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVDb2RlcnNDb2NvYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDYgQEAKIAog
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaW5jbHVkZSA8U2VjdXJpdHkvU2VjQ2VydGlmaWNhdGUuaD4KICNpbmNsdWRlIDxTZWN1cml0
eS9TZWNUcnVzdC5oPgpAQCAtNDAsMTE3ICszNyw2IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi12b2lkIENvZGVyPEF0b21pY1N0cmluZz46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0b21pY1N0cmluZykKLXsK
LSAgICBlbmNvZGVyIDw8IGF0b21pY1N0cmluZy5zdHJpbmcoKTsKLX0KLQotYm9vbCBDb2RlcjxB
dG9taWNTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQXRvbWljU3RyaW5nJiBhdG9t
aWNTdHJpbmcpCi17Ci0gICAgU3RyaW5nIHN0cmluZzsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF0b21pY1N0cmluZyA9IHN0
cmluZzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb2RlcjxDU3RyaW5nPjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENTdHJpbmcmIHN0cmluZykKLXsKLSAgICAvLyBTcGVj
aWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nLgotICAgIGlmIChzdHJpbmcuaXNOdWxsKCkpIHsKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7Ci0gICAgZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExl
bmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmRhdGEoKSks
IGxlbmd0aCk7Ci19Ci0KLWJvb2wgQ29kZXI8Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBDU3RyaW5nJiByZXN1bHQpCi17Ci0gICAgdWludDMyX3QgbGVuZ3RoOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpIHsKLSAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgbnVsbCBzdHJpbmcuCi0gICAgICAgIHJlc3VsdCA9IENTdHJpbmco
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQmVmb3JlIGFsbG9jYXRp
bmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29kZXIgYnVmZmVyIGlzIGJpZyBl
bm91Z2guCi0gICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48Y2hh
cj4obGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2hhciogYnVmZmVyOwot
ICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotdm9pZCBD
b2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3RyaW5nJiBzdHJp
bmcpCi17Ci0gICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBudWxsIHN0cmluZy4KLSAgICBpZiAoc3Ry
aW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWludDMyX3Qg
bGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGJvb2wgaXM4Qml0ID0gc3RyaW5nLmlzOEJp
dCgpOwotCi0gICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0OwotCi0gICAgaWYgKGlzOEJp
dCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnM4KCkpLCBsZW5ndGggKiBzaXplb2Yo
TENoYXIpKTsKLSAgICBlbHNlCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSks
IGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBkZWNvZGVTdHJpbmdUZXh0KERlY29kZXImIGRl
Y29kZXIsIHVpbnQzMl90IGxlbmd0aCwgU3RyaW5nJiByZXN1bHQpCi17Ci0gICAgLy8gQmVmb3Jl
IGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29kZXIgYnVmZmVy
IGlzIGJpZyBlbm91Z2guCi0gICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0Nv
bnRhaW48Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOwotICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVu
Z3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIHJlc3VsdCA9IHN0cmluZzsKLSAgICByZXR1cm4gdHJ1ZTsgICAgCi19Ci0KLWJvb2wg
Q29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmluZyYgcmVzdWx0KQot
ewotICAgIHVpbnQzMl90IGxlbmd0aDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxlbmd0aCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwg
c3RyaW5nLgotICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgYm9vbCBpczhCaXQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpczhC
aXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXM4Qml0KQotICAgICAgICBy
ZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxMQ2hhcj4oZGVjb2RlciwgbGVuZ3RoLCByZXN1bHQpOwot
ICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PFVDaGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3Vs
dCk7Ci19Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKIHN0YXRpYyB2b2lkIGVuY29kZUNGRGF0YShF
bmNvZGVyJiBlbmNvZGVyLCBDRkRhdGFSZWYgZGF0YSkKIHsKICAgICB1aW50NjRfdCBsZW5ndGgg
PSBDRkRhdGFHZXRMZW5ndGgoZGF0YSk7CkBAIC0zMDEsMTAyICsxODcsNiBAQCBib29sIENvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmRlCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSNl
bHNlCi12b2lkIENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5m
bykKLXsKLSAgICBpZiAoIWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZSgpKSB7Ci0gICAgICAg
IGVuY29kZXIgPDwgZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHQnl0ZUFy
cmF5KiBjZXJ0aWZpY2F0ZURhdGEgPSAwOwotICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChjZXJ0
aWZpY2F0ZUluZm8uY2VydGlmaWNhdGUoKSksICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0ZURh
dGEsIE5VTEwpOwotICAgIGlmICghY2VydGlmaWNhdGVEYXRhKSB7Ci0gICAgICAgIGVuY29kZXIg
PDwgZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7
Ci0KLSAgICBHUmVmUHRyPEdCeXRlQXJyYXk+IGNlcnRpZmljYXRlID0gYWRvcHRHUmVmKGNlcnRp
ZmljYXRlRGF0YSk7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oY2VydGlm
aWNhdGUtPmxlbik7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoY2VydGlmaWNh
dGUtPmRhdGEsIGNlcnRpZmljYXRlLT5sZW4pOwotCi0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oY2VydGlmaWNhdGVJbmZvLnRsc0Vycm9ycygpKTsKLX0KLQotYm9vbCBDb2Rl
cjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgYm9vbCBoYXND
ZXJ0aWZpY2F0ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0NlcnRpZmljYXRlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFoYXNDZXJ0aWZpY2F0ZSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICB1aW50NjRfdCBzaXplID0gMDsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8dWludDhf
dD4gdmVjdG9yKHNpemUpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEo
dmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIEdCeXRlQXJyYXkqIGNlcnRpZmljYXRlRGF0YSA9IGdfYnl0ZV9hcnJheV9zaXplZF9uZXco
dmVjdG9yLnNpemUoKSk7Ci0gICAgY2VydGlmaWNhdGVEYXRhID0gZ19ieXRlX2FycmF5X2FwcGVu
ZChjZXJ0aWZpY2F0ZURhdGEsIHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwotICAgIEdS
ZWZQdHI8R0J5dGVBcnJheT4gY2VydGlmaWNhdGVCeXRlcyA9IGFkb3B0R1JlZihjZXJ0aWZpY2F0
ZURhdGEpOwotCi0gICAgR1Rsc0JhY2tlbmQqIGJhY2tlbmQgPSBnX3Rsc19iYWNrZW5kX2dldF9k
ZWZhdWx0KCk7Ci0gICAgR1JlZlB0cjxHVGxzQ2VydGlmaWNhdGU+IGNlcnRpZmljYXRlID0gYWRv
cHRHUmVmKEdfVExTX0NFUlRJRklDQVRFKGdfaW5pdGFibGVfbmV3KAotICAgICAgICBnX3Rsc19i
YWNrZW5kX2dldF9jZXJ0aWZpY2F0ZV90eXBlKGJhY2tlbmQpLCAwLCAwLCAiY2VydGlmaWNhdGUi
LCBjZXJ0aWZpY2F0ZUJ5dGVzLmdldCgpLCBudWxscHRyKSkpOwotICAgIGNlcnRpZmljYXRlSW5m
by5zZXRDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZS5nZXQoKSk7Ci0KLSAgICB1aW50MzJfdCB0bHNF
cnJvcnM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0bHNFcnJvcnMpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY2VydGlmaWNhdGVJbmZvLnNldFRMU0Vycm9ycyhzdGF0aWNfY2FzdDxH
VGxzQ2VydGlmaWNhdGVGbGFncz4odGxzRXJyb3JzKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LSNlbmRpZgotCi12b2lkIENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKLXsKLSAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7Ci19Ci0KLWJvb2wg
Q29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2Vz
dCYgZGlnZXN0KQotewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShk
aWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7Ci19Ci0KLS8vIFN0b3JlIGNvbW1vbiBIVFRQ
IGhlYWRlcnMgYXMgc3RyaW5ncyBpbnN0ZWFkIG9mIHVzaW5nIHRoZWlyIHZhbHVlIGluIHRoZSBI
VFRQSGVhZGVyTmFtZSBlbnVtZXJhdGlvbgotLy8gc28gdGhhdCB0aGUgaGVhZGVycyBzdG9yZWQg
aW4gdGhlIGNhY2hlIHN0YXlzIHZhbGlkIGV2ZW4gYWZ0ZXIgSFRUUEhlYWRlck5hbWUuaW4gZ2V0
cyB1cGRhdGVkLgotdm9pZCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlcnMpCi17
Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaGVhZGVycy5zaXplKCkpOwot
ICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBoZWFkZXJzKSB7Ci0gICAgICAgIGVuY29kZXIgPDwg
a2V5VmFsdWUua2V5OwotICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlLnZhbHVlOwotICAgIH0K
LX0KLQotYm9vbCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlcnMpCi17Ci0gICAgdWludDY0
X3QgaGVhZGVyc1NpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoZWFkZXJzU2l6ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGVhZGVy
c1NpemU7ICsraSkgewotICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgU3RyaW5n
IHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaGVhZGVycy5hZGQobmFtZSwgdmFsdWUpOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KIAogfQogfQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzU291cC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzU291
cC5jcHAJKHJldmlzaW9uIDIwMzY3MSkJKGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcDoyMDM2NzEpCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNTb3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
NC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgorCisjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNs
dWRlIDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZS5oPgorI2luY2x1ZGUgPFNlY3VyaXR5L1NlY1Ry
dXN0Lmg+CisjaW5jbHVkZSA8d3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK3ZvaWQgQ29k
ZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEF0b21pY1N0
cmluZyYgYXRvbWljU3RyaW5nKQoreworICAgIGVuY29kZXIgPDwgYXRvbWljU3RyaW5nLnN0cmlu
ZygpOworfQorCitib29sIENvZGVyPEF0b21pY1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBBdG9taWNTdHJpbmcmIGF0b21pY1N0cmluZykKK3sKKyAgICBTdHJpbmcgc3RyaW5nOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXRvbWljU3RyaW5nID0gc3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IENvZGVyPENTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ1N0cmluZyYg
c3RyaW5nKQoreworICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgbnVsbCBzdHJpbmcuCisgICAgaWYg
KHN0cmluZy5pc051bGwoKSkgeworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQz
Ml90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBlbmNvZGVyIDw8IGxlbmd0aDsKKyAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihzdHJpbmcuZGF0YSgpKSwgbGVuZ3RoKTsKK30KKworYm9vbCBDb2RlcjxDU3RyaW5n
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICB1aW50
MzJfdCBsZW5ndGg7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSkgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBudWxsIHN0cmluZy4KKyAg
ICAgICAgcmVzdWx0ID0gQ1N0cmluZygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBCZWZvcmUgYWxsb2NhdGluZyB0aGUgc3RyaW5nLCBtYWtlIHN1cmUgdGhhdCB0aGUg
ZGVjb2RlciBidWZmZXIgaXMgYmlnIGVub3VnaC4KKyAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNM
YXJnZUVub3VnaFRvQ29udGFpbjxjaGFyPihsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjaGFyKiBidWZmZXI7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdV
bmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IHN0cmluZzsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworCit2b2lkIENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51
bGwgc3RyaW5nLgorICAgIGlmIChzdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgZW5jb2RlciA8
PCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgYm9v
bCBpczhCaXQgPSBzdHJpbmcuaXM4Qml0KCk7CisKKyAgICBlbmNvZGVyIDw8IGxlbmd0aCA8PCBp
czhCaXQ7CisKKyAgICBpZiAoaXM4Qml0KQorICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVy
czgoKSksIGxlbmd0aCAqIHNpemVvZihMQ2hhcikpOworICAgIGVsc2UKKyAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
c3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGRlY29k
ZVN0cmluZ1RleHQoRGVjb2RlciYgZGVjb2RlciwgdWludDMyX3QgbGVuZ3RoLCBTdHJpbmcmIHJl
c3VsdCkKK3sKKyAgICAvLyBCZWZvcmUgYWxsb2NhdGluZyB0aGUgc3RyaW5nLCBtYWtlIHN1cmUg
dGhhdCB0aGUgZGVjb2RlciBidWZmZXIgaXMgYmlnIGVub3VnaC4KKyAgICBpZiAoIWRlY29kZXIu
YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxDaGFyYWN0ZXJUeXBlPihsZW5ndGgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CisgICAgU3Ry
aW5nIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmVzdWx0ID0gc3RyaW5nOworICAgIHJldHVy
biB0cnVlOyAgICAKK30KKworYm9vbCBDb2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgU3RyaW5nJiByZXN1bHQpCit7CisgICAgdWludDMyX3QgbGVuZ3RoOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpIHsKKyAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgbnVsbCBzdHJpbmcuCisgICAgICAgIHJlc3VsdCA9IFN0cmluZygp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGlzOEJpdDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGlzOEJpdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChpczhCaXQpCisgICAgICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PExDaGFyPihkZWNv
ZGVyLCBsZW5ndGgsIHJlc3VsdCk7CisgICAgcmV0dXJuIGRlY29kZVN0cmluZ1RleHQ8VUNoYXI+
KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKK30KKworI2lmIFBMQVRGT1JNKENPQ09BKQorc3Rh
dGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQor
eworICAgIHVpbnQ2NF90IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhKTsKKyAgICBjb25z
dCB1aW50OF90KiBieXRlUHRyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKTsKKworICAgIGVuY29k
ZXIgPDwgbGVuZ3RoOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGJ5dGVQdHIs
IGxlbmd0aCk7Cit9CisKK3N0YXRpYyBib29sIGRlY29kZUNGRGF0YShEZWNvZGVyJiBkZWNvZGVy
LCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkKK3sKKyAgICB1aW50NjRfdCBzaXplID0gMDsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yKHNpemUpOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRy
LCB2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
KworI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCitzdGF0aWMgdm9pZCBlbmNvZGVT
ZWNUcnVzdFJlZihFbmNvZGVyJiBlbmNvZGVyLCBTZWNUcnVzdFJlZiB0cnVzdCkKK3sKKyAgICBh
dXRvIGRhdGEgPSBhZG9wdENGKFNlY1RydXN0U2VyaWFsaXplKHRydXN0LCBudWxscHRyKSk7Cisg
ICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBlbmNvZGVyIDw8IHRydWU7CisgICAgZW5jb2RlQ0ZEYXRhKGVuY29k
ZXIsIGRhdGEuZ2V0KCkpOworfQorCitzdGF0aWMgYm9vbCBkZWNvZGVTZWNUcnVzdFJlZihEZWNv
ZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8U2VjVHJ1c3RSZWY+JiByZXN1bHQpCit7CisgICAgYm9v
bCBoYXNUcnVzdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc1RydXN0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFoYXNUcnVzdCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0cnVzdERhdGE7CisgICAgaWYgKCFkZWNvZGVD
RkRhdGEoZGVjb2RlciwgdHJ1c3REYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byB0cnVzdCA9IGFkb3B0Q0YoU2VjVHJ1c3REZXNlcmlhbGl6ZSh0cnVzdERhdGEuZ2V0KCks
IG51bGxwdHIpKTsKKyAgICBpZiAoIXRydXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXN1bHQgPSBXVEZNb3ZlKHRydXN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgor
CitzdGF0aWMgdm9pZCBlbmNvZGVDZXJ0aWZpY2F0ZUNoYWluKEVuY29kZXImIGVuY29kZXIsIENG
QXJyYXlSZWYgY2VydGlmaWNhdGVDaGFpbikKK3sKKyAgICBDRkluZGV4IHNpemUgPSBDRkFycmF5
R2V0Q291bnQoY2VydGlmaWNhdGVDaGFpbik7CisgICAgVmVjdG9yPENGVHlwZVJlZiwgMzI+IHZh
bHVlcyhzaXplKTsKKworICAgIENGQXJyYXlHZXRWYWx1ZXMoY2VydGlmaWNhdGVDaGFpbiwgQ0ZS
YW5nZU1ha2UoMCwgc2l6ZSksIHZhbHVlcy5kYXRhKCkpOworCisgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oc2l6ZSk7CisKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlc1tpXSk7CisgICAgICAgIEFTU0VSVChD
RkdldFR5cGVJRCh2YWx1ZXNbaV0pICE9IFNlY0NlcnRpZmljYXRlR2V0VHlwZUlEKCkpOworCisg
ICAgICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDb3B5RGF0YSgoU2VjQ2Vy
dGlmaWNhdGVSZWYpdmFsdWVzW2ldKSk7CisgICAgICAgIGVuY29kZUNGRGF0YShlbmNvZGVyLCBk
YXRhLmdldCgpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGRlY29kZUNlcnRpZmljYXRlQ2hh
aW4oRGVjb2RlciYgZGVjb2RlciwgUmV0YWluUHRyPENGQXJyYXlSZWY+JiBjZXJ0aWZpY2F0ZUNo
YWluKQoreworICAgIHVpbnQ2NF90IHNpemU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXpl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBhcnJheSA9IGFkb3B0Q0YoQ0ZB
cnJheUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gZGF0YTsKKyAgICAgICAgaWYgKCFkZWNvZGVDRkRhdGEoZGVjb2RlciwgZGF0YSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9
IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLmdldCgpKSk7Cisg
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgY2VydGlmaWNhdGUuZ2V0KCkp
OworICAgIH0KKworICAgIGNlcnRpZmljYXRlQ2hhaW4gPSBXVEZNb3ZlKGFycmF5KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBj
ZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGNlcnRpZmljYXRlSW5m
by50eXBlKCkpOworCisgICAgc3dpdGNoIChjZXJ0aWZpY2F0ZUluZm8udHlwZSgpKSB7CisjaWYg
SEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbzo6VHlwZTo6VHJ1c3Q6CisgICAgICAgIGVuY29kZVNlY1RydXN0UmVmKGVuY29kZXIs
IGNlcnRpZmljYXRlSW5mby50cnVzdCgpKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBj
YXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Q2VydGlmaWNhdGVDaGFpbjogewor
ICAgICAgICBlbmNvZGVDZXJ0aWZpY2F0ZUNoYWluKGVuY29kZXIsIGNlcnRpZmljYXRlSW5mby5j
ZXJ0aWZpY2F0ZUNoYWluKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6Ok5vbmU6CisgICAgICAgIC8vIERvIG5vdGhpbmcu
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJ
bmZvJiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpU
eXBlIGNlcnRpZmljYXRlSW5mb1R5cGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oY2Vy
dGlmaWNhdGVJbmZvVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAo
Y2VydGlmaWNhdGVJbmZvVHlwZSkgeworI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04p
CisgICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OlRydXN0OiB7CisgICAg
ICAgIFJldGFpblB0cjxTZWNUcnVzdFJlZj4gdHJ1c3Q7CisgICAgICAgIGlmICghZGVjb2RlU2Vj
VHJ1c3RSZWYoZGVjb2RlciwgdHJ1c3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyhXVEZNb3Zl
KHRydXN0KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIGNhc2Ug
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNoYWluOiB7CisgICAg
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjZXJ0aWZpY2F0ZUNoYWluOworICAgICAgICBpZiAo
IWRlY29kZUNlcnRpZmljYXRlQ2hhaW4oZGVjb2RlciwgY2VydGlmaWNhdGVDaGFpbikpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2VydGlmaWNhdGVJbmZvID0gV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvKFdURk1vdmUoY2VydGlmaWNhdGVDaGFpbikpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9ICAgIAorICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
OjpUeXBlOjpOb25lOgorICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbHNlCit2b2lkIENvZGVyPFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBpZiAoIWNlcnRpZmljYXRl
SW5mby5jZXJ0aWZpY2F0ZSgpKSB7CisgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBHQnl0ZUFycmF5KiBjZXJ0aWZpY2F0ZURhdGEgPSAwOwor
ICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGUoKSks
ICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0ZURhdGEsIE5VTEwpOworICAgIGlmICghY2VydGlm
aWNhdGVEYXRhKSB7CisgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBlbmNvZGVyIDw8IHRydWU7CisKKyAgICBHUmVmUHRyPEdCeXRlQXJyYXk+
IGNlcnRpZmljYXRlID0gYWRvcHRHUmVmKGNlcnRpZmljYXRlRGF0YSk7CisgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oY2VydGlmaWNhdGUtPmxlbik7CisgICAgZW5jb2Rlci5l
bmNvZGVGaXhlZExlbmd0aERhdGEoY2VydGlmaWNhdGUtPmRhdGEsIGNlcnRpZmljYXRlLT5sZW4p
OworCisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY2VydGlmaWNhdGVJbmZv
LnRsc0Vycm9ycygpKTsKK30KKworYm9vbCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCit7CisgICAgYm9vbCBoYXNDZXJ0aWZpY2F0ZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGhhc0NlcnRpZmljYXRlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFoYXNDZXJ0aWZpY2F0ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICB1aW50NjRf
dCBzaXplID0gMDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yKHNpemUpOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdCeXRlQXJyYXkqIGNlcnRpZmljYXRl
RGF0YSA9IGdfYnl0ZV9hcnJheV9zaXplZF9uZXcodmVjdG9yLnNpemUoKSk7CisgICAgY2VydGlm
aWNhdGVEYXRhID0gZ19ieXRlX2FycmF5X2FwcGVuZChjZXJ0aWZpY2F0ZURhdGEsIHZlY3Rvci5k
YXRhKCksIHZlY3Rvci5zaXplKCkpOworICAgIEdSZWZQdHI8R0J5dGVBcnJheT4gY2VydGlmaWNh
dGVCeXRlcyA9IGFkb3B0R1JlZihjZXJ0aWZpY2F0ZURhdGEpOworCisgICAgR1Rsc0JhY2tlbmQq
IGJhY2tlbmQgPSBnX3Rsc19iYWNrZW5kX2dldF9kZWZhdWx0KCk7CisgICAgR1JlZlB0cjxHVGxz
Q2VydGlmaWNhdGU+IGNlcnRpZmljYXRlID0gYWRvcHRHUmVmKEdfVExTX0NFUlRJRklDQVRFKGdf
aW5pdGFibGVfbmV3KAorICAgICAgICBnX3Rsc19iYWNrZW5kX2dldF9jZXJ0aWZpY2F0ZV90eXBl
KGJhY2tlbmQpLCAwLCAwLCAiY2VydGlmaWNhdGUiLCBjZXJ0aWZpY2F0ZUJ5dGVzLmdldCgpLCBu
dWxscHRyKSkpOworICAgIGNlcnRpZmljYXRlSW5mby5zZXRDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0
ZS5nZXQoKSk7CisKKyAgICB1aW50MzJfdCB0bHNFcnJvcnM7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh0bHNFcnJvcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2VydGlmaWNhdGVJ
bmZvLnNldFRMU0Vycm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4odGxzRXJy
b3JzKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIENvZGVyPFNIQTE6
OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTSEExOjpEaWdlc3QmIGRp
Z2VzdCkKK3sKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgp
LCBzaXplb2YoZGlnZXN0KSk7Cit9CisKK2Jvb2wgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQoreworICAgIHJldHVybiBk
ZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0
KSk7Cit9CisKKy8vIFN0b3JlIGNvbW1vbiBIVFRQIGhlYWRlcnMgYXMgc3RyaW5ncyBpbnN0ZWFk
IG9mIHVzaW5nIHRoZWlyIHZhbHVlIGluIHRoZSBIVFRQSGVhZGVyTmFtZSBlbnVtZXJhdGlvbgor
Ly8gc28gdGhhdCB0aGUgaGVhZGVycyBzdG9yZWQgaW4gdGhlIGNhY2hlIHN0YXlzIHZhbGlkIGV2
ZW4gYWZ0ZXIgSFRUUEhlYWRlck5hbWUuaW4gZ2V0cyB1cGRhdGVkLgordm9pZCBDb2RlcjxXZWJD
b3JlOjpIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNv
cmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlcnMpCit7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oaGVhZGVycy5zaXplKCkpOworICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBo
ZWFkZXJzKSB7CisgICAgICAgIGVuY29kZXIgPDwga2V5VmFsdWUua2V5OworICAgICAgICBlbmNv
ZGVyIDw8IGtleVZhbHVlLnZhbHVlOworICAgIH0KK30KKworYm9vbCBDb2RlcjxXZWJDb3JlOjpI
VFRQSGVhZGVyTWFwPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkhUVFBIZWFk
ZXJNYXAmIGhlYWRlcnMpCit7CisgICAgdWludDY0X3QgaGVhZGVyc1NpemU7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShoZWFkZXJzU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBm
b3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGVhZGVyc1NpemU7ICsraSkgeworICAgICAgICBTdHJp
bmcgbmFtZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaGVh
ZGVycy5hZGQobmFtZSwgdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQor
fQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUNvZGVyc1NvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc1NvdXAuY3BwCShyZXZpc2lvbiAy
MDM2NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVDb2RlcnNTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjgwICsyOCw5IEBACiAKICNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
I2luY2x1ZGUgPFNlY3VyaXR5L1NlY0NlcnRpZmljYXRlLmg+Ci0jaW5jbHVkZSA8U2VjdXJpdHkv
U2VjVHJ1c3QuaD4KLSNpbmNsdWRlIDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+Ci0jZW5k
aWYKLQogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotdm9p
ZCBDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXRv
bWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCi17Ci0gICAgZW5jb2RlciA8PCBhdG9taWNTdHJpbmcu
c3RyaW5nKCk7Ci19Ci0KLWJvb2wgQ29kZXI8QXRvbWljU3RyaW5nPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIEF0b21pY1N0cmluZyYgYXRvbWljU3RyaW5nKQotewotICAgIFN0cmluZyBzdHJp
bmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdG9taWNTdHJpbmcgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDU3Ry
aW5nJiBzdHJpbmcpCi17Ci0gICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBudWxsIHN0cmluZy4KLSAg
ICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
dWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGVuY29kZXIgPDwgbGVuZ3Ro
OwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkpLCBsZW5ndGgpOwotfQotCi1ib29sIENvZGVyPENT
dHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQotewotICAg
IHVpbnQzMl90IGxlbmd0aDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxlbmd0aCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5n
LgotICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0
IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZm
ZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPGNoYXI+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGNoYXIqIGJ1ZmZlcjsKLSAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6
Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVu
Z3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzdWx0ID0gc3RyaW5nOwotICAg
IHJldHVybiB0cnVlOwotfQotCi0KLXZvaWQgQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIC8vIFNwZWNpYWwgY2FzZSB0
aGUgbnVsbCBzdHJpbmcuCi0gICAgaWYgKHN0cmluZy5pc051bGwoKSkgewotICAgICAgICBlbmNv
ZGVyIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAg
ICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQoKTsKLQotICAgIGVuY29kZXIgPDwgbGVuZ3Ro
IDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFy
YWN0ZXJzOCgpKSwgbGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7Ci0gICAgZWxzZQotICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wg
ZGVjb2RlU3RyaW5nVGV4dChEZWNvZGVyJiBkZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmlu
ZyYgcmVzdWx0KQotewotICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ug
c3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgotICAgIGlmICghZGVj
b2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPENoYXJhY3RlclR5cGU+KGxlbmd0aCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKLSAg
ICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVm
ZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXN1bHQgPSBzdHJpbmc7Ci0gICAg
cmV0dXJuIHRydWU7ICAgIAotfQotCi1ib29sIENvZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgewot
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBudWxsIHN0cmluZy4KLSAgICAgICAgcmVzdWx0ID0gU3Ry
aW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgaXM4Qml0Owot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXM4Qml0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKGlzOEJpdCkKLSAgICAgICAgcmV0dXJuIGRlY29kZVN0cmluZ1RleHQ8TENoYXI+
KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKLSAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxV
Q2hhcj4oZGVjb2RlciwgbGVuZ3RoLCByZXN1bHQpOwotfQotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci1zdGF0aWMgdm9pZCBlbmNvZGVDRkRhdGEoRW5jb2RlciYgZW5jb2RlciwgQ0ZEYXRhUmVmIGRh
dGEpCi17Ci0gICAgdWludDY0X3QgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpOwotICAg
IGNvbnN0IHVpbnQ4X3QqIGJ5dGVQdHIgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwotCi0gICAg
ZW5jb2RlciA8PCBsZW5ndGg7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYnl0
ZVB0ciwgbGVuZ3RoKTsKLX0KLQotc3RhdGljIGJvb2wgZGVjb2RlQ0ZEYXRhKERlY29kZXImIGRl
Y29kZXIsIFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKQotewotICAgIHVpbnQ2NF90IHNpemUg
PSAwOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3Ioc2l6ZSk7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51
bGxwdHIsIHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotCi0jaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLXN0YXRpYyB2b2lkIGVu
Y29kZVNlY1RydXN0UmVmKEVuY29kZXImIGVuY29kZXIsIFNlY1RydXN0UmVmIHRydXN0KQotewot
ICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoU2VjVHJ1c3RTZXJpYWxpemUodHJ1c3QsIG51bGxwdHIp
KTsKLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGVuY29kZXIgPDwgdHJ1ZTsKLSAgICBlbmNvZGVDRkRhdGEo
ZW5jb2RlciwgZGF0YS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIGRlY29kZVNlY1RydXN0UmVm
KERlY29kZXImIGRlY29kZXIsIFJldGFpblB0cjxTZWNUcnVzdFJlZj4mIHJlc3VsdCkKLXsKLSAg
ICBib29sIGhhc1RydXN0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzVHJ1c3QpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWhhc1RydXN0KQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRydXN0RGF0YTsKLSAgICBpZiAoIWRl
Y29kZUNGRGF0YShkZWNvZGVyLCB0cnVzdERhdGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvIHRydXN0ID0gYWRvcHRDRihTZWNUcnVzdERlc2VyaWFsaXplKHRydXN0RGF0YS5n
ZXQoKSwgbnVsbHB0cikpOwotICAgIGlmICghdHJ1c3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJlc3VsdCA9IFdURk1vdmUodHJ1c3QpOwotICAgIHJldHVybiB0cnVlOwotfQotI2Vu
ZGlmCi0KLXN0YXRpYyB2b2lkIGVuY29kZUNlcnRpZmljYXRlQ2hhaW4oRW5jb2RlciYgZW5jb2Rl
ciwgQ0ZBcnJheVJlZiBjZXJ0aWZpY2F0ZUNoYWluKQotewotICAgIENGSW5kZXggc2l6ZSA9IENG
QXJyYXlHZXRDb3VudChjZXJ0aWZpY2F0ZUNoYWluKTsKLSAgICBWZWN0b3I8Q0ZUeXBlUmVmLCAz
Mj4gdmFsdWVzKHNpemUpOwotCi0gICAgQ0ZBcnJheUdldFZhbHVlcyhjZXJ0aWZpY2F0ZUNoYWlu
LCBDRlJhbmdlTWFrZSgwLCBzaXplKSwgdmFsdWVzLmRhdGEoKSk7Ci0KLSAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzaXplKTsKLQotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewotICAgICAgICBBU1NFUlQodmFsdWVzW2ldKTsKLSAgICAgICAgQVNT
RVJUKENGR2V0VHlwZUlEKHZhbHVlc1tpXSkgIT0gU2VjQ2VydGlmaWNhdGVHZXRUeXBlSUQoKSk7
Ci0KLSAgICAgICAgYXV0byBkYXRhID0gYWRvcHRDRihTZWNDZXJ0aWZpY2F0ZUNvcHlEYXRhKChT
ZWNDZXJ0aWZpY2F0ZVJlZil2YWx1ZXNbaV0pKTsKLSAgICAgICAgZW5jb2RlQ0ZEYXRhKGVuY29k
ZXIsIGRhdGEuZ2V0KCkpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZGVjb2RlQ2VydGlmaWNh
dGVDaGFpbihEZWNvZGVyJiBkZWNvZGVyLCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4mIGNlcnRpZmlj
YXRlQ2hhaW4pCi17Ci0gICAgdWludDY0X3Qgc2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGFycmF5ID0gYWRvcHRD
RihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgICAgICBpZiAoIWRlY29kZUNGRGF0YShkZWNvZGVyLCBk
YXRhKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvIGNlcnRpZmlj
YXRlID0gYWRvcHRDRihTZWNDZXJ0aWZpY2F0ZUNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEuZ2V0KCkp
KTsKLSAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCBjZXJ0aWZpY2F0ZS5n
ZXQoKSk7Ci0gICAgfQotCi0gICAgY2VydGlmaWNhdGVDaGFpbiA9IFdURk1vdmUoYXJyYXkpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0oY2VydGlmaWNh
dGVJbmZvLnR5cGUoKSk7Ci0KLSAgICBzd2l0Y2ggKGNlcnRpZmljYXRlSW5mby50eXBlKCkpIHsK
LSNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQotICAgIGNhc2UgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvOjpUeXBlOjpUcnVzdDoKLSAgICAgICAgZW5jb2RlU2VjVHJ1c3RSZWYoZW5j
b2RlciwgY2VydGlmaWNhdGVJbmZvLnRydXN0KCkpOwotICAgICAgICBicmVhazsKLSNlbmRpZgot
ICAgIGNhc2UgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpUeXBlOjpDZXJ0aWZpY2F0ZUNoYWlu
OiB7Ci0gICAgICAgIGVuY29kZUNlcnRpZmljYXRlQ2hhaW4oZW5jb2RlciwgY2VydGlmaWNhdGVJ
bmZvLmNlcnRpZmljYXRlQ2hhaW4oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6Tm9uZToKLSAgICAgICAgLy8gRG8gbm90
aGluZy4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1ib29sIENvZGVyPFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm86OlR5cGUgY2VydGlmaWNhdGVJbmZvVHlwZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51
bShjZXJ0aWZpY2F0ZUluZm9UeXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dp
dGNoIChjZXJ0aWZpY2F0ZUluZm9UeXBlKSB7Ci0jaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpB
VElPTikKLSAgICBjYXNlIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6VHlwZTo6VHJ1c3Q6IHsK
LSAgICAgICAgUmV0YWluUHRyPFNlY1RydXN0UmVmPiB0cnVzdDsKLSAgICAgICAgaWYgKCFkZWNv
ZGVTZWNUcnVzdFJlZihkZWNvZGVyLCB0cnVzdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgY2VydGlmaWNhdGVJbmZvID0gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKFdU
Rk1vdmUodHJ1c3QpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAg
Y2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlR5cGU6OkNlcnRpZmljYXRlQ2hhaW46IHsK
LSAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNlcnRpZmljYXRlQ2hhaW47Ci0gICAgICAg
IGlmICghZGVjb2RlQ2VydGlmaWNhdGVDaGFpbihkZWNvZGVyLCBjZXJ0aWZpY2F0ZUNoYWluKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBjZXJ0aWZpY2F0ZUluZm8gPSBX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oV1RGTW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0gICAgCi0gICAgY2FzZSBXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm86OlR5cGU6Ok5vbmU6Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotI2Vsc2UKIHZvaWQgQ29kZXI8V2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQogewogICAgIGlmICghY2VydGlm
aWNhdGVJbmZvLmNlcnRpZmljYXRlKCkpIHsKQEAgLTM1OCw0NSArODcsNiBAQCBib29sIENvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmRlCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSNl
bmRpZgotCi12b2lkIENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKLXsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7Ci19Ci0KLWJvb2wgQ29k
ZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6OkRpZ2VzdCYg
ZGlnZXN0KQotewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShkaWdl
c3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7Ci19Ci0KLS8vIFN0b3JlIGNvbW1vbiBIVFRQIGhl
YWRlcnMgYXMgc3RyaW5ncyBpbnN0ZWFkIG9mIHVzaW5nIHRoZWlyIHZhbHVlIGluIHRoZSBIVFRQ
SGVhZGVyTmFtZSBlbnVtZXJhdGlvbgotLy8gc28gdGhhdCB0aGUgaGVhZGVycyBzdG9yZWQgaW4g
dGhlIGNhY2hlIHN0YXlzIHZhbGlkIGV2ZW4gYWZ0ZXIgSFRUUEhlYWRlck5hbWUuaW4gZ2V0cyB1
cGRhdGVkLgotdm9pZCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlcnMpCi17Ci0g
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaGVhZGVycy5zaXplKCkpOwotICAg
IGZvciAoYXV0byYga2V5VmFsdWUgOiBoZWFkZXJzKSB7Ci0gICAgICAgIGVuY29kZXIgPDwga2V5
VmFsdWUua2V5OwotICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlLnZhbHVlOwotICAgIH0KLX0K
LQotYm9vbCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlcnMpCi17Ci0gICAgdWludDY0X3Qg
aGVhZGVyc1NpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoZWFkZXJzU2l6ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGVhZGVyc1Np
emU7ICsraSkgewotICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgU3RyaW5nIHZh
bHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaGVhZGVycy5hZGQobmFtZSwgdmFsdWUpOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KIAogfQogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjAzNjcwKQorKysgU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMxLDYgKzExMzEsNyBAQAogCQk3QzlEMTUzNzE4NDU4NERBMDA5RDM5MTggLyog
V0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlEMTUzNjE4NDU4NERBMDA5RDM5MTggLyogV0tCcm93
c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi87IH07CiAJCTdDQTI1NEVCMTgyOTkzQ0UwMEZD
OEE0MSAvKiBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0EyNTRFQTE4Mjk5M0NFMDBGQzhBNDEg
LyogV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDQTM3OTNFMUFDMzc4QjMwMDc5REMzNyAv
KiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NBMzc5M0QxQUMzNzhCMzAwNzlEQzM3IC8q
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0NBQjkzN0ExRDQ1OUU1MTAwNzBGNTQw
IC8qIE5ldHdvcmtDYWNoZUNvZGVyc0NvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQUI5Mzc5MUQ0NTlFNEIwMDcwRjU0MCAvKiBOZXR3b3Jr
Q2FjaGVDb2RlcnNDb2NvYS5jcHAgKi87IH07CiAJCTdDQjE2RkVGMTcyNEJBMjMwMDdBMEE5NSAv
KiBjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgaW4gQ29weSBQbHVn
LWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NCMTZGRTIxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0
LndlYnBsdWdpbi5zYiAqLzsgfTsKIAkJN0NCMTZGRjAxNzI0QkEyNDAwN0EwQTk1IC8qIGNvbS5h
cHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQ
cm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFMzE3MjRC
OUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiICovOyB9
OwogCQk3Q0IxNkZGMTE3MjRCQTI2MDA3QTBBOTUgLyogY29tLmFwcGxlLldlYktpdC5wbHVnaW4t
Y29tbW9uLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2RkU0MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBw
bGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IgKi87IH07CkBAIC0zMTk4LDYgKzMxOTksNyBAQAog
CQk3QzlEMTUzNjE4NDU4NERBMDA5RDM5MTggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0
R3JvdXBJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0EyNTRFQTE4
Mjk5M0NFMDBGQzhBNDEgLyogV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVn
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQTM3OTNEMUFDMzc4QjMwMDc5
REMzNyAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0FCOTM3OTFENDU5RTRCMDA3MEY1
NDAgLyogTmV0d29ya0NhY2hlQ29kZXJzQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlQ29kZXJzQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0IxNkZFMjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlz
dC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNv
bS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTMxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlj
a1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxl
LlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNv
bW1vbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxlLldlYktpdC5wbHVnaW4t
Y29tbW9uLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyNTYsNiArNzI1OCw3
IEBACiAJCQkJRTQ5RDQwRDYxQUQzRkIxNzAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9y
YWdlLmggKi8sCiAJCQkJRTQ4OUQyODMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNv
ZGVyLmggKi8sCiAJCQkJRTQ4OUQyODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNv
ZGVycy5jcHAgKi8sCisJCQkJN0NBQjkzNzkxRDQ1OUU0QjAwNzBGNTQwIC8qIE5ldHdvcmtDYWNo
ZUNvZGVyc0NvY29hLmNwcCAqLywKIAkJCQlFNDg5RDI4NTFBMEEyREI4MDA3OEMwNkEgLyogTmV0
d29ya0NhY2hlQ29kZXJzLmggKi8sCiAJCQkJRTQ3RDFFOTYxQjA2MkI2NjAwMjY3NkE4IC8qIE5l
dHdvcmtDYWNoZURhdGEuY3BwICovLAogCQkJCUU0MkUwNjExMUFBNzVBQkQwMEIxMTY5OSAvKiBO
ZXR3b3JrQ2FjaGVEYXRhLmggKi8sCkBAIC04OTkzLDYgKzg5OTYsNyBAQAogCQkJCUJDODE0N0Q2
MTJGNjZEMzEwMDdCMkMzMiAvKiBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM0QkVFQUMxMjBBMEE1RjAwRkJBMEM3IC8qIEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTI5MzVFMzEyODhEOTc4MDBB
NEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJN0NBQjkzN0ExRDQ1OUU1MTAwNzBGNTQwIC8qIE5ldHdvcmtDYWNoZUNvZGVy
c0NvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENjdEMzBFMTVDMDhGOUEwMDg0M0FERiAv
KiBJbmplY3RlZEJ1bmRsZVBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMUVFNTNFNzExRjhDRkZCMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTRFMTA5MTIwQjkwNUUwMDgy
NkMwQyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>