<?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>14053</bug_id>
          
          <creation_ts>2007-06-09 18:22:27 -0700</creation_ts>
          <short_desc>Autogenerate JS binding for Rect</short_desc>
          <delta_ts>2007-06-15 19:00:03 -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>DOM</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>
          
          <blocked>13779</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>8039</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-09 18:22:27 -0700</bug_when>
    <thetext>Patch forthcoming, includes cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>8041</commentid>
    <comment_count>1</comment_count>
      <attachid>14919</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-09 18:31:04 -0700</bug_when>
    <thetext>Created attachment 14919
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7484</commentid>
    <comment_count>2</comment_count>
      <attachid>14919</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-06-14 20:47:27 -0700</bug_when>
    <thetext>Comment on attachment 14919
patch

Why are there so many changes here that are unrelated to DOMRect? Could we have the cleanup in a separate patch?

Can&apos;t we just rename RectImpl to WebCore::Rect? Why not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7424</commentid>
    <comment_count>3</comment_count>
      <attachid>14919</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-15 09:48:29 -0700</bug_when>
    <thetext>Comment on attachment 14919
patch

Thanks for reviewing this Tim, but I am removing the review flag and will post a new patch that renames RectImpl to Rect to be consistent.  I will post the patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7420</commentid>
    <comment_count>4</comment_count>
      <attachid>15059</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-15 10:08:09 -0700</bug_when>
    <thetext>Created attachment 15059
updated patch

This updated patch changes RectImpl to Rect and fixes the name conflict in WebKit by using ::Rect for the Rect struct in the global namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7360</commentid>
    <comment_count>5</comment_count>
      <attachid>15059</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-06-15 16:23:00 -0700</bug_when>
    <thetext>Comment on attachment 15059
updated patch

     dom/Attr.idl \
-    dom/CharacterData.idl \
     dom/CDATASection.idl \

Why?

+    //rgbColors.remove(rgbColor.handle());

What is it, and why is this commented out?

Otherwise, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7318</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-15 18:30:03 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 15059 [edit])
&gt;      dom/Attr.idl \
&gt; -    dom/CharacterData.idl \
&gt;      dom/CDATASection.idl \
&gt; 
&gt; Why?

This was just some sorting that went bad, has been fixed.

&gt; +    //rgbColors.remove(rgbColor.handle());
&gt; 
&gt; What is it, and why is this commented out?

Not sure what this was, but it was in the old code commented out so I moved it over to the new stuff.  My guess it was an old caching mechanism, but since we are not going to ever resurrect it I have now removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7319</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-15 19:00:03 -0700</bug_when>
    <thetext>Landed in r23557.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14919</attachid>
            <date>2007-06-09 18:31:04 -0700</date>
            <delta_ts>2007-06-15 10:08:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>autoRect.diff</filename>
            <type>text/plain</type>
            <size>31237</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjA4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDctMDYtMDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNTMKKyAgICAgICAg
QXV0b2dlbmVyYXRlIEpTIGJpbmRpbmcgZm9yIFJlY3QKKworICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTU3R5bGVTaGVldExpc3Q6OkpTU3R5bGVTaGVldExpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTdHlsZVNoZWV0TGlzdDo6fkpTU3R5bGVTaGVldExpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTdHlsZVNoZWV0TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1N0eWxlU2hlZXRMaXN0OjppbmRleEdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1N0eWxlU2hlZXRMaXN0OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTU3R5bGVTaGVldExpc3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJD
b3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3R5bGVTaGVldExpc3RGdW5jOjpjYWxs
QXNGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1JHQkNvbG9yOjpKU1JHQkNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTUkdCQ29sb3I6On5KU1JHQkNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTUkdCQ29sb3I6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1JHQkNvbG9yOjpnZXRWYWx1ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpT
UkdCQ29sb3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19jc3MuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTU3R5bGVTaGVldExpc3Q6OmNsYXNzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpK
U1N0eWxlU2hlZXRMaXN0OjopOgorICAgICAgICAoV2ViQ29yZTo6SlNTdHlsZVNoZWV0TGlzdDo6
aW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1JHQkNvbG9yOjpjbGFzc0luZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNSR0JDb2xvcjo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpTUkdCQ29sb3I6
OmltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NVXRpbGl0eS5tbToKKyAgICAgICAg
KEtKUzo6Y3JlYXRlRE9NV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG06CisgICAgICAgICogY3NzL1JlY3QuaWRsOgorICAgICAgICAqIHBhZ2Uv
RE9NV2luZG93LmlkbDoKKwogMjAwNy0wNi0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlci4KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJl
dmlzaW9uIDIyMDgwKQorKysgV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNv
cHkpCkBAIC00MDYsNiArNDA2LDcgQEAgYWxsIDogXAogICAgIEpTUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmggXAogICAgIEpTUmFuZ2UuaCBcCiAgICAgSlNSYW5nZUV4Y2VwdGlvbi5oIFwKKyAgICBK
U1JlY3QuaCBcCiAgICAgSlNTVkdab29tRXZlbnQuaCBcCiAgICAgSlNTVkdBRWxlbWVudC5oIFwK
ICAgICBKU1NWR0FuZ2xlLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMDgwKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5NDYsNiArMjk0Niw4IEBACiAJ
CUJDRkIyRjQyMDk3QTI0QjUwMEJBNzAzRCAvKiBTZWdtZW50ZWRTdHJpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkIyRjQwMDk3QTI0QjUwMEJB
NzAzRCAvKiBTZWdtZW50ZWRTdHJpbmcuaCAqLzsgfTsKIAkJQkNGQjJGNzYwOTdBMkUxQTAwQkE3
MDNEIC8qIEFyZW5hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRkIyRjc0MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5jcHAgKi87IH07CiAJCUJD
RkIyRjc3MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGQjJGNzUwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5h
LmggKi87IH07CisJCUJDRkUyRjExMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRTJGMEYwQzFCNTgz
NzAwMjAyMzVGIC8qIEpTUmVjdC5jcHAgKi87IH07CisJCUJDRkUyRjEyMEMxQjU4MzgwMDIwMjM1
RiAvKiBKU1JlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRkUyRjEwMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuaCAqLzsgfTsKIAkJQkNGRThF
MzIwQTAyQTFEMzAwMDlFNjFEIC8qIFdlYkNvcmVUZXh0UmVuZGVyZXIubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZFOEUzMTBBMDJBMUQzMDAwOUU2
MUQgLyogV2ViQ29yZVRleHRSZW5kZXJlci5tbSAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovOyB9OwogCQlDNkQ3NEFFNDA5QUEyOTBBMDAwQjBB
NTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovOyB9OwpAQCAtNjI0Myw2ICs2MjQ1LDggQEAKIAkJ
QkNGQjJGNDAwOTdBMjRCNTAwQkE3MDNEIC8qIFNlZ21lbnRlZFN0cmluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVudGVkU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDRkIyRjc0MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJlbmEuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0ZCMkY3NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyZW5hLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUJDRkUyRjBGMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVjdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRkUyRjEwMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0ZFOEUzMTBBMDJBMUQzMDAwOUU2MUQgLyogV2ViQ29yZVRl
eHRSZW5kZXJlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJDb3JlVGV4dFJlbmRlcmVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCRTg1
NUY3RjA3MDFFODM1MDAyMzk3NjkgLyogV2ViQ29yZVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJFODU2MDUx
MDcwMUY5MTEwMDIzOTc2OSAvKiBXZWJDb3JlVmlldy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJDb3JlVmlldy5tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTY0NjYsOCAr
NjQ3MCw2IEBACiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNvdXJjZXMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUJDQ0JBRDNF
MEMxOEMxNDIwMENFODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uLmNwcCAqLywKLQkJCQlCQ0NCQUQz
RjBDMThDMTQyMDBDRTg5MEYgLyogSlNIVE1MQ29sbGVjdGlvbi5oICovLAogCQkJCTY1REYzMUQ4
MDlEMUMxMjIwMDBCRTMyNSAvKiBKU0F0dHIuY3BwICovLAogCQkJCTY1REYzMUQ5MDlEMUMxMjMw
MDBCRTMyNSAvKiBKU0F0dHIuaCAqLywKIAkJCQk2NURGMzIzMzA5RDFERTY1MDAwQkUzMjUgLyog
SlNDYW52YXNHcmFkaWVudC5jcHAgKi8sCkBAIC02NTUwLDYgKzY1NTIsOCBAQAogCQkJCUE4MEU3
RTk1MEExQTgzRTMwMDdGQjhDNSAvKiBKU0hUTUxCdXR0b25FbGVtZW50LmggKi8sCiAJCQkJOTM4
RTY2NUYwOUYwOUI4MTAwOEE0OEVDIC8qIEpTSFRNTENhbnZhc0VsZW1lbnQuY3BwICovLAogCQkJ
CTkzOEU2NjYxMDlGMDlCODcwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmggKi8sCisJ
CQkJQkNDQkFEM0UwQzE4QzE0MjAwQ0U4OTBGIC8qIEpTSFRNTENvbGxlY3Rpb24uY3BwICovLAor
CQkJCUJDQ0JBRDNGMEMxOEMxNDIwMENFODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uLmggKi8sCiAJ
CQkJMUE4NUIxRTAwQTFCMjQwNTAwRDhDODdDIC8qIEpTSFRNTERpcmVjdG9yeUVsZW1lbnQuY3Bw
ICovLAogCQkJCTFBODVCMUUxMEExQjI0MDUwMEQ4Qzg3QyAvKiBKU0hUTUxEaXJlY3RvcnlFbGVt
ZW50LmggKi8sCiAJCQkJMUE4NUIyQjQwQTFCMkFDNzAwRDhDODdDIC8qIEpTSFRNTERpdkVsZW1l
bnQuY3BwICovLApAQCAtNjY3Niw2ICs2NjgwLDggQEAKIAkJCQk2NURGMzFFRTA5RDFDQzYwMDAw
QkUzMjUgLyogSlNSYW5nZS5oICovLAogCQkJCUQyM0NBNTVFMEFCMEVBQjYwMDUxMDhBNSAvKiBK
U1JhbmdlRXhjZXB0aW9uLmNwcCAqLywKIAkJCQlEMjNDQTU1QzBBQjBFQUFFMDA1MTA4QTUgLyog
SlNSYW5nZUV4Y2VwdGlvbi5oICovLAorCQkJCUJDRkUyRjBGMEMxQjU4MzcwMDIwMjM1RiAvKiBK
U1JlY3QuY3BwICovLAorCQkJCUJDRkUyRjEwMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuaCAq
LywKIAkJCQlCQ0UwMTM5ODBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmNwcCAqLywK
IAkJCQlCQ0UwMTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmggKi8sCiAJCQkJ
QjIwMTExMDUwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwICovLApAQCAtMTE1
NTIsNiArMTE1NTgsNyBAQAogCQkJCUJDRDlDMkM3MEMxN0I2RUMwMDVDOTBBMiAvKiBKU0V2ZW50
VGFyZ2V0Tm9kZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0JBRDQxMEMxOEMxNDIwMENF
ODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZEQzdBMTBD
MUE0QkZBMDA0RTIwMTcgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQkNGRTJGMTIwQzFCNTgzODAwMjAyMzVGIC8qIEpTUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xMjk3NSw2ICsxMjk4Miw3IEBACiAJCQkJQkNEOUMyQzIwQzE3QjY5RTAwNUM5MEEyIC8qIEpT
Tm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDQkFEM0IwQzE4QkZGODAwQ0U4OTBG
IC8qIEpTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDQkFE
NDAwQzE4QzE0MjAwQ0U4OTBGIC8qIEpTSFRNTENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQkNGRTJGMTEwQzFCNTgzNzAwMjAyMzVGIC8qIEpTUmVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfY3NzLmNwcAkocmV2aXNpb24gMjIwODApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyMTkgKzM5
LDE3MyBAQAogCiAjaW5jbHVkZSAia2pzX2Nzcy5sdXQuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1uYW1lc3BhY2UgS0pTIHsKK3VzaW5nIG5hbWVzcGFjZSBLSlM7Cit1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1jb25zdCBDbGFzc0luZm8gRE9NU3R5bGVTaGVldExpc3Q6OmluZm8gPSB7
ICJTdHlsZVNoZWV0TGlzdCIsIDAsICZET01TdHlsZVNoZWV0TGlzdFRhYmxlLCAwIH07Citjb25z
dCBDbGFzc0luZm8gSlNTdHlsZVNoZWV0TGlzdDo6aW5mbyA9IHsgIlN0eWxlU2hlZXRMaXN0Iiwg
MCwgJkpTU3R5bGVTaGVldExpc3RUYWJsZSwgMCB9OwogCiAvKgotQGJlZ2luIERPTVN0eWxlU2hl
ZXRMaXN0VGFibGUgMgotICBsZW5ndGggICAgICAgIERPTVN0eWxlU2hlZXRMaXN0OjpMZW5ndGgg
ICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBpdGVtICAgICAgICAgIERPTVN0eWxlU2hlZXRM
aXN0OjpJdGVtICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCitAYmVnaW4gSlNTdHlsZVNo
ZWV0TGlzdFRhYmxlIDIKKyAgbGVuZ3RoICAgICAgICBXZWJDb3JlOjpKU1N0eWxlU2hlZXRMaXN0
OjpMZW5ndGggICAgICAgRG9udERlbGV0ZXxSZWFkT25seQorICBpdGVtICAgICAgICAgIFdlYkNv
cmU6OkpTU3R5bGVTaGVldExpc3Q6Okl0ZW0gICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEK
IEBlbmQKICovCi1LSlNfSU1QTEVNRU5UX1BST1RPVFlQRV9GVU5DVElPTihET01TdHlsZVNoZWV0
TGlzdEZ1bmMpIC8vIG5vdCByZWFsbHkgYSBwcm90b3R5cGUsIGJ1dCBkb2Vzbid0IG1hdHRlcgog
Ci1ET01TdHlsZVNoZWV0TGlzdDo6RE9NU3R5bGVTaGVldExpc3QoRXhlY1N0YXRlKiBleGVjLCBT
dHlsZVNoZWV0TGlzdCogc3NsLCBEb2N1bWVudCogZG9jKQotICA6IG1faW1wbChzc2wpCi0gICwg
bV9kb2MoZG9jKSAKK0tKU19JTVBMRU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9OKEpTU3R5bGVTaGVl
dExpc3RGdW5jKSAvLyBub3QgcmVhbGx5IGEgcHJvdG90eXBlLCBidXQgZG9lc24ndCBtYXR0ZXIK
KworSlNTdHlsZVNoZWV0TGlzdDo6SlNTdHlsZVNoZWV0TGlzdChFeGVjU3RhdGUqIGV4ZWMsIFN0
eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0TGlzdCwgRG9jdW1lbnQqIGRvYykKKyAgICA6IG1faW1w
bChzdHlsZVNoZWV0TGlzdCkKKyAgICAsIG1fZG9jKGRvYykgCiB7CiAgICAgc2V0UHJvdG90eXBl
KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCkpOwog
fQogCi1ET01TdHlsZVNoZWV0TGlzdDo6fkRPTVN0eWxlU2hlZXRMaXN0KCkKK0pTU3R5bGVTaGVl
dExpc3Q6On5KU1N0eWxlU2hlZXRMaXN0KCkKIHsKLSAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdl
dERPTU9iamVjdChtX2ltcGwuZ2V0KCkpOworICAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRE
T01PYmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotSlNWYWx1ZSogRE9NU3R5bGVTaGVldExpc3Q6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitKU1Zh
bHVlKiBKU1N0eWxlU2hlZXRMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAogewotICAgIHN3aXRjaCh0b2tlbikgewotICAgIGNhc2UgTGVuZ3Ro
OgotICAgICAgcmV0dXJuIGpzTnVtYmVyKG1faW1wbC0+bGVuZ3RoKCkpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICBBU1NFUlQoMCk7Ci0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKG1faW1wbC0+bGVuZ3RoKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiB9CiAKLUpTVmFsdWUqIERPTVN0eWxlU2hlZXRMaXN0OjppbmRleEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU1N0eWxl
U2hlZXRMaXN0OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5h
bE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7Ci0gIERPTVN0eWxlU2hlZXRMaXN0ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
RE9NU3R5bGVTaGVldExpc3QqPihzbG90LnNsb3RCYXNlKCkpOwotICByZXR1cm4gdG9KUyhleGVj
LCB0aGlzT2JqLT5tX2ltcGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7CisgICAgSlNTdHlsZVNoZWV0
TGlzdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3R5bGVTaGVldExpc3QqPihzbG90LnNsb3RC
YXNlKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+aXRlbShzbG90
LmluZGV4KCkpKTsKIH0KIAotSlNWYWx1ZSogRE9NU3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNT
dHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmln
aW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7Ci0gIERPTVN0eWxlU2hlZXRMaXN0ICp0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8RE9NU3R5bGVTaGVldExpc3QqPihzbG90LnNsb3RCYXNlKCkpOwotICBFbGVtZW50ICplbGVt
ZW50ID0gdGhpc09iai0+bV9kb2MtPmdldEVsZW1lbnRCeUlkKHByb3BlcnR5TmFtZSk7Ci0gIHJl
dHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihlbGVtZW50KS0+
c2hlZXQoKSk7CisgICAgSlNTdHlsZVNoZWV0TGlzdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpT
U3R5bGVTaGVldExpc3QqPihzbG90LnNsb3RCYXNlKCkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0aGlzT2JqLT5tX2RvYy0+Z2V0RWxlbWVudEJ5SWQocHJvcGVydHlOYW1lKTsKKyAgICByZXR1
cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCktPnNo
ZWV0KCkpOwogfQogCi1ib29sIERPTVN0eWxlU2hlZXRMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK2Jvb2wgSlNTdHlsZVNoZWV0TGlzdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7Ci0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRy
eSgmRE9NU3R5bGVTaGVldExpc3RUYWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICBjb25zdCBIYXNo
RW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJkpTU3R5bGVTaGVldExpc3RUYWJsZSwg
cHJvcGVydHlOYW1lKTsKICAgCi0gIGlmIChlbnRyeSkgewotICAgIHN3aXRjaChlbnRyeS0+dmFs
dWUpIHsKLSAgICBjYXNlIExlbmd0aDoKLSAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywg
ZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPERPTVN0eWxlU2hlZXRMaXN0Pik7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBjYXNlIEl0ZW06Ci0gICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMs
IGVudHJ5LCBzdGF0aWNGdW5jdGlvbkdldHRlcjxET01TdHlsZVNoZWV0TGlzdEZ1bmM+KTsKLSAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmIChlbnRyeSkgeworICAgICAgICBzd2l0Y2goZW50cnkt
PnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlIExlbmd0aDoKKyAgICAgICAgICAgICAgICBzbG90
LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNWYWx1ZUdldHRlcjxKU1N0eWxlU2hl
ZXRMaXN0Pik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNl
IEl0ZW06CisgICAgICAgICAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwg
c3RhdGljRnVuY3Rpb25HZXR0ZXI8SlNTdHlsZVNoZWV0TGlzdEZ1bmM+KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLSAgfQotCi0gIFN0eWxlU2hlZXRM
aXN0ICZzdHlsZVNoZWV0TGlzdCA9ICptX2ltcGw7Ci0KLSAgLy8gUmV0cmlldmUgc3R5bGVzaGVl
dCBieSBpbmRleAotICBib29sIG9rOwotICB1bnNpZ25lZCB1ID0gcHJvcGVydHlOYW1lLnRvVUlu
dDMyKCZvayk7Ci0gIGlmIChvayAmJiB1IDwgc3R5bGVTaGVldExpc3QubGVuZ3RoKCkpIHsKLSAg
ICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIHUsIGluZGV4R2V0dGVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfQotCi0gIC8vIElFIGFsc28gc3VwcG9ydHMgcmV0cmlldmluZyBhIHN0eWxlc2hl
ZXQgYnkgbmFtZSwgdXNpbmcgdGhlIG5hbWUvaWQgb2YgdGhlIDxzdHlsZT4gdGFnCi0gIC8vICh0
aGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBhbGwgdGhlIG90aGVyIGNvbGxlY3Rpb25zKQotICAvLyAj
IyMgQmFkIGltcGxlbWVudGF0aW9uIGJlY2F1c2UgcmV0dXJucyBhIHNpbmdsZSBlbGVtZW50IChh
cmUgSURzIGFsd2F5cyB1bmlxdWU/KQotICAvLyBhbmQgZG9lc24ndCBsb29rIGZvciBuYW1lIGF0
dHJpYnV0ZSAoc2VlIGltcGxlbWVudGF0aW9uIGFib3ZlKS4KLSAgLy8gQnV0IHVuaWNpdHkgb2Yg
c3R5bGVzaGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBhbnl3YXkgOykKLSAgRWxlbWVudCAqZWxl
bWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChwcm9wZXJ0eU5hbWUpOwotICBpZiAoZWxlbWVu
dCAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKHN0eWxlVGFnKSkgewotICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXMsIG5hbWVHZXR0ZXIpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIERP
TU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19
Ci0KLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBTdHlsZVNoZWV0TGlzdCAqc3NsLCBE
b2N1bWVudCAqZG9jKQotewotICAvLyBDYW4ndCB1c2UgdGhlIGNhY2hlRE9NT2JqZWN0IG1hY3Jv
IGJlY2F1c2Ugb2YgdGhlIGRvYyBhcmd1bWVudAotICBET01PYmplY3QgKnJldDsKLSAgaWYgKCFz
c2wpCi0gICAgcmV0dXJuIGpzTnVsbCgpOwotICBTY3JpcHRJbnRlcnByZXRlciogaW50ZXJwID0g
c3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIo
KSk7Ci0gIGlmICgocmV0ID0gaW50ZXJwLT5nZXRET01PYmplY3Qoc3NsKSkpCi0gICAgcmV0dXJu
IHJldDsKLSAgZWxzZSB7Ci0gICAgcmV0ID0gbmV3IERPTVN0eWxlU2hlZXRMaXN0KGV4ZWMsIHNz
bCwgZG9jKTsKLSAgICBpbnRlcnAtPnB1dERPTU9iamVjdChzc2wsIHJldCk7Ci0gICAgcmV0dXJu
IHJldDsKLSAgfQotfQogCi1KU1ZhbHVlKiBET01TdHlsZVNoZWV0TGlzdEZ1bmM6OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCi17Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NU3R5bGVTaGVldExpc3Q6
OmluZm8pKQotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gIFN0eWxl
U2hlZXRMaXN0ICZzdHlsZVNoZWV0TGlzdCA9ICpzdGF0aWNfY2FzdDxET01TdHlsZVNoZWV0TGlz
dCo+KHRoaXNPYmopLT5pbXBsKCk7Ci0gIGlmIChpZCA9PSBET01TdHlsZVNoZWV0TGlzdDo6SXRl
bSkKLSAgICByZXR1cm4gdG9KUyhleGVjLCBzdHlsZVNoZWV0TGlzdC5pdGVtKGFyZ3NbMF0tPnRv
SW50MzIoZXhlYykpKTsKLSAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19CisgICAgU3R5bGVTaGVl
dExpc3QqIHN0eWxlU2hlZXRMaXN0ID0gbV9pbXBsLmdldCgpOwogCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgLy8gUmV0cmlldmUgc3R5bGVzaGVldCBieSBpbmRleAorICAgIGJvb2wgb2s7Cisg
ICAgdW5zaWduZWQgdSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOworICAgIGlmIChvayAm
JiB1IDwgc3R5bGVTaGVldExpc3QtPmxlbmd0aCgpKSB7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9t
SW5kZXgodGhpcywgdSwgaW5kZXhHZXR0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CiAKLWNvbnN0IENsYXNzSW5mbyBET01SR0JDb2xvcjo6aW5mbyA9IHsgIlJHQkNvbG9yIiwgMCwg
JkRPTVJHQkNvbG9yVGFibGUsIDAgfTsKKyAgICAvLyBJRSBhbHNvIHN1cHBvcnRzIHJldHJpZXZp
bmcgYSBzdHlsZXNoZWV0IGJ5IG5hbWUsIHVzaW5nIHRoZSBuYW1lL2lkIG9mIHRoZSA8c3R5bGU+
IHRhZworICAgIC8vICh0aGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBhbGwgdGhlIG90aGVyIGNvbGxl
Y3Rpb25zKQorICAgIC8vICMjIyBCYWQgaW1wbGVtZW50YXRpb24gYmVjYXVzZSByZXR1cm5zIGEg
c2luZ2xlIGVsZW1lbnQgKGFyZSBJRHMgYWx3YXlzIHVuaXF1ZT8pCisgICAgLy8gYW5kIGRvZXNu
J3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1dGUgKHNlZSBpbXBsZW1lbnRhdGlvbiBhYm92ZSkuCisg
ICAgLy8gQnV0IHVuaWNpdHkgb2Ygc3R5bGVzaGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBhbnl3
YXkgOykKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9kb2MtPmdldEVsZW1lbnRCeUlkKHByb3Bl
cnR5TmFtZSk7CisgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShzdHlsZVRh
ZykpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbmFtZUdldHRlcik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KIAotLyoKLUBiZWdpbiBET01SR0JDb2xvclRhYmxlIDMKLSAg
cmVkICAgRE9NUkdCQ29sb3I6OlJlZCAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBncmVl
biBET01SR0JDb2xvcjo6R3JlZW4gICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGJsdWUgIERP
TVJHQkNvbG9yOjpCbHVlICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLUBlbmQKLSovCi1ET01S
R0JDb2xvcjo6RE9NUkdCQ29sb3IoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBjb2xvcikgCi06
IG1fY29sb3IoY29sb3IpIAoteyAKLSAgICBzZXRQcm90b3R5cGUoZXhlYy0+bGV4aWNhbEludGVy
cHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSk7CisgICAgcmV0dXJuIERPTU9iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLURP
TVJHQkNvbG9yOjp+RE9NUkdCQ29sb3IoKQorSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0TGlzdCwgRG9jdW1lbnQqIGRvYykKIHsKLSAgLy9y
Z2JDb2xvcnMucmVtb3ZlKHJnYkNvbG9yLmhhbmRsZSgpKTsKLX0KKyAgICAvLyBDYW4ndCB1c2Ug
dGhlIGNhY2hlRE9NT2JqZWN0IG1hY3JvIGJlY2F1c2Ugb2YgdGhlIGRvYyBhcmd1bWVudAorICAg
IGlmICghc3R5bGVTaGVldExpc3QpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotYm9vbCBE
T01SR0JDb2xvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gIHJldHVybiBn
ZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NUkdCQ29sb3IsIERPTU9iamVjdD4oZXhlYywgJkRPTVJHQkNv
bG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19CisgICAgU2NyaXB0SW50ZXJw
cmV0ZXIqIGludGVycCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyKj4oZXhlYy0+ZHlu
YW1pY0ludGVycHJldGVyKCkpOworICAgIERPTU9iamVjdCogcmV0ID0gaW50ZXJwLT5nZXRET01P
YmplY3Qoc3R5bGVTaGVldExpc3QpOworICAgIGlmIChyZXQpCisgICAgICAgIHJldHVybiByZXQ7
CiAKLUpTVmFsdWUqIERPTVJHQkNvbG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAotewotICBpbnQgY29sb3IgPSBtX2NvbG9yOwotICBzd2l0Y2gg
KHRva2VuKSB7Ci0gIGNhc2UgUmVkOgotICAgIGNvbG9yID4+PSA4OwotICAgIC8vIGZhbGwgdGhy
b3VnaAotICBjYXNlIEdyZWVuOgotICAgIGNvbG9yID4+PSA4OwotICAgIC8vIGZhbGwgdGhyb3Vn
aAotICBjYXNlIEJsdWU6Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgbmV3IENTU1ByaW1pdGl2ZVZh
bHVlKGNvbG9yICYgMHhGRiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLSAgZGVm
YXVsdDoKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICAgIHJldCA9IG5ldyBKU1N0eWxlU2hlZXRM
aXN0KGV4ZWMsIHN0eWxlU2hlZXRMaXN0LCBkb2MpOworICAgIGludGVycC0+cHV0RE9NT2JqZWN0
KHN0eWxlU2hlZXRMaXN0LCByZXQpOworICAgIHJldHVybiByZXQ7CiB9CiAKLUpTVmFsdWUqIGdl
dERPTVJHQkNvbG9yKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgYykKK0pTVmFsdWUqIEpTU3R5
bGVTaGVldExpc3RGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAvLyAjIyMgaW1wbGVtZW50IGVxdWFs
cyBmb3IgUkdCQ29sb3Igc2luY2UgdGhleSdyZSBub3QgcmVmY291bnRlZCBvYmplY3RzCi0gIHJl
dHVybiBuZXcgRE9NUkdCQ29sb3IoZXhlYywgYyk7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0
cygmSlNTdHlsZVNoZWV0TGlzdDo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CisKKyAgICBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldExpc3QgPSBz
dGF0aWNfY2FzdDxKU1N0eWxlU2hlZXRMaXN0Kj4odGhpc09iaiktPmltcGwoKTsKKyAgICBpZiAo
aWQgPT0gSlNTdHlsZVNoZWV0TGlzdDo6SXRlbSkKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
c3R5bGVTaGVldExpc3QtPml0ZW0oYXJnc1swXS0+dG9JbnQzMihleGVjKSkpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNvbnN0IENsYXNz
SW5mbyBET01SZWN0OjppbmZvID0geyAiUmVjdCIsIDAsICZET01SZWN0VGFibGUsIDAgfTsKK2Nv
bnN0IENsYXNzSW5mbyBKU1JHQkNvbG9yOjppbmZvID0geyAiUkdCQ29sb3IiLCAwLCAmSlNSR0JD
b2xvclRhYmxlLCAwIH07CisKIC8qCi1AYmVnaW4gRE9NUmVjdFRhYmxlIDQKLSAgdG9wICAgIERP
TVJlY3Q6OlRvcCAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICByaWdodCAgRE9NUmVjdDo6Umln
aHQgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGJvdHRvbSBET01SZWN0OjpCb3R0b20gIERvbnRE
ZWxldGV8UmVhZE9ubHkKLSAgbGVmdCAgIERPTVJlY3Q6OkxlZnQgICAgRG9udERlbGV0ZXxSZWFk
T25seQorQGJlZ2luIEpTUkdCQ29sb3JUYWJsZSAzCisgIHJlZCAgIFdlYkNvcmU6OkpTUkdCQ29s
b3I6OlJlZCAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQorICBncmVlbiBXZWJDb3JlOjpKU1JH
QkNvbG9yOjpHcmVlbiAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKKyAgYmx1ZSAgV2ViQ29yZTo6
SlNSR0JDb2xvcjo6Qmx1ZSAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5CiBAZW5kCiAqLwotRE9N
UmVjdDo6RE9NUmVjdChFeGVjU3RhdGUqIGV4ZWMsIFJlY3RJbXBsKiByKSAKLTogbV9yZWN0KHIp
IAorCitKU1JHQkNvbG9yOjpKU1JHQkNvbG9yKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY29s
b3IpIAorICAgIDogbV9jb2xvcihjb2xvcikgCiB7IAogICAgIHNldFByb3RvdHlwZShleGVjLT5s
ZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKTsKIH0KIAotRE9N
UmVjdDo6fkRPTVJlY3QoKQorSlNSR0JDb2xvcjo6fkpTUkdCQ29sb3IoKQogewotICBTY3JpcHRJ
bnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1fcmVjdC5nZXQoKSk7CisgICAgLy9yZ2JDb2xv
cnMucmVtb3ZlKHJnYkNvbG9yLmhhbmRsZSgpKTsKIH0KIAotYm9vbCBET01SZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNSR0JDb2xvcjo6Z2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NUmVjdCwg
RE9NT2JqZWN0PihleGVjLCAgJkRPTVJlY3RUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90
KTsKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTUkdCQ29sb3IsIERPTU9iamVjdD4o
ZXhlYywgJkpTUkdCQ29sb3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
SlNWYWx1ZSogRE9NUmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK0pTVmFsdWUqIEpTUkdCQ29sb3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0gIFJlY3RJbXBsICZyZWN0ID0gKm1fcmVj
dDsKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIFRvcDoKLSAgICByZXR1cm4gdG9KUyhleGVj
LCByZWN0LnRvcCgpKTsKLSAgY2FzZSBSaWdodDoKLSAgICByZXR1cm4gdG9KUyhleGVjLCByZWN0
LnJpZ2h0KCkpOwotICBjYXNlIEJvdHRvbToKLSAgICByZXR1cm4gdG9KUyhleGVjLCByZWN0LmJv
dHRvbSgpKTsKLSAgY2FzZSBMZWZ0OgotICAgIHJldHVybiB0b0pTKGV4ZWMsIHJlY3QubGVmdCgp
KTsKLSAgZGVmYXVsdDoKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICAgIGludCBjb2xvciA9IG1f
Y29sb3I7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFJlZDoKKyAgICAgICAg
ICAgIGNvbG9yID4+PSA4OworICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgICAgIGNh
c2UgR3JlZW46CisgICAgICAgICAgICBjb2xvciA+Pj0gODsKKyAgICAgICAgICAgIC8vIGZhbGwg
dGhyb3VnaAorICAgICAgICBjYXNlIEJsdWU6CisgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoY29sb3IgJiAweEZGLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogfQogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgUmVjdEltcGwgKnIpCitK
U1ZhbHVlKiBnZXRKU1JHQkNvbG9yKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY29sb3IpCiB7
Ci0gIHJldHVybiBjYWNoZURPTU9iamVjdDxSZWN0SW1wbCwgRE9NUmVjdD4oZXhlYywgcik7Cisg
ICAgLy8gIyMjIGltcGxlbWVudCBlcXVhbHMgZm9yIFJHQkNvbG9yIHNpbmNlIHRoZXkncmUgbm90
IHJlZmNvdW50ZWQgb2JqZWN0cworICAgIHJldHVybiBuZXcgSlNSR0JDb2xvcihleGVjLCBjb2xv
cik7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2Nzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nz
cy5oCShyZXZpc2lvbiAyMjA4MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw3NiArMjQsNjQgQEAKICNkZWZpbmUga2pzX2Nzc19oCiAKICNp
bmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIlJlY3RJbXBsLmgiCiAjaW5jbHVkZSAiSlNTdHls
ZVNoZWV0LmgiCiAjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
eworCiAgICAgY2xhc3MgQ291bnRlcjsKICAgICBjbGFzcyBDU1NTdHlsZVNoZWV0OwogICAgIGNs
YXNzIFN0eWxlU2hlZXQ7CiAgICAgY2xhc3MgU3R5bGVTaGVldExpc3Q7Ci19CiAKLW5hbWVzcGFj
ZSBLSlMgeworICAgIGNsYXNzIEpTU3R5bGVTaGVldExpc3QgOiBwdWJsaWMgS0pTOjpET01PYmpl
Y3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNTdHlsZVNoZWV0TGlzdChLSlM6OkV4ZWNTdGF0
ZSosIFN0eWxlU2hlZXRMaXN0KiwgRG9jdW1lbnQqKTsKKyAgICAgICAgdmlydHVhbCB+SlNTdHls
ZVNoZWV0TGlzdCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
S0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xv
dCYpOworICAgICAgICBLSlM6OkpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUqLCBpbnQgdG9rZW4pIGNvbnN0OworICAgICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5
CisgICAgICAgIHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBp
bmZvOworCisgICAgICAgIGVudW0geyBJdGVtLCBMZW5ndGggfTsKKworICAgICAgICBTdHlsZVNo
ZWV0TGlzdCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgc3RhdGljIEtKUzo6SlNWYWx1ZSogaW5kZXhHZXR0ZXIoS0pTOjpFeGVj
U3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pT
OjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIEtKUzo6SlNWYWx1ZSogbmFtZUdldHRl
cihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OklkZW50aWZpZXIm
LCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworCisgICAgICAgIFJlZlB0cjxTdHlsZVNoZWV0
TGlzdD4gbV9pbXBsOworICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOworICAgIH07CisK
KyAgICAvLyBUaGUgZG9jdW1lbnQgaXMgb25seSB1c2VkIGZvciBnZXQtc3R5bGVzaGVldC1ieS1u
YW1lIChtYWtlIG9wdGlvbmFsIGlmIG5lY2Vzc2FyeSkKKyAgICBLSlM6OkpTVmFsdWUqIHRvSlMo
S0pTOjpFeGVjU3RhdGUqLCBTdHlsZVNoZWV0TGlzdCosIERvY3VtZW50Kik7CisKKyAgICBjbGFz
cyBKU1JHQkNvbG9yIDogcHVibGljIEtKUzo6RE9NT2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIEpTUkdCQ29sb3IoS0pTOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb2xvcik7CisgICAgICAg
IH5KU1JHQkNvbG9yKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlT
bG90Jik7CisgICAgICAgIEtKUzo6SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSosIGludCB0b2tlbikgY29uc3Q7CisgICAgICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9u
bHkKKworICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmaW5mbzsgfQorICAgICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0lu
Zm8gaW5mbzsKKworICAgICAgICBlbnVtIHsgUmVkLCBHcmVlbiwgQmx1ZSB9OworCisgICAgICAg
IHVuc2lnbmVkIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgY2xhc3MgRE9N
U3R5bGVTaGVldExpc3QgOiBwdWJsaWMgRE9NT2JqZWN0IHsKLSAgcHVibGljOgotICAgIERPTVN0
eWxlU2hlZXRMaXN0KEV4ZWNTdGF0ZSosIFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0KiwgV2ViQ29y
ZTo6RG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5ET01TdHlsZVNoZWV0TGlzdCgpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwotICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5Ci0g
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9Ci0gICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgIFdlYkNv
cmU6OlN0eWxlU2hlZXRMaXN0KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9
Ci0gICAgZW51bSB7IEl0ZW0sIExlbmd0aCB9OwotICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1Zh
bHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogbmFtZUdldHRlcihF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdD4gbV9pbXBsOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gbV9kb2M7Ci0gIH07Ci0KLSAgLy8gVGhlIGRvY3Vt
ZW50IGlzIG9ubHkgdXNlZCBmb3IgZ2V0LXN0eWxlc2hlZXQtYnktbmFtZSAobWFrZSBvcHRpb25h
bCBpZiBuZWNlc3NhcnkpCi0gIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiwgV2ViQ29yZTo6U3R5
bGVTaGVldExpc3QqLCBXZWJDb3JlOjpEb2N1bWVudCopOwotCi0gIGNsYXNzIERPTVJHQkNvbG9y
IDogcHVibGljIERPTU9iamVjdCB7Ci0gIHB1YmxpYzoKLSAgICBET01SR0JDb2xvcihFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBjb2xvcik7Ci0gICAgfkRPTVJHQkNvbG9yKCk7Ci0gICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7Ci0gICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKLSAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
LSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgZW51bSB7IFJlZCwgR3JlZW4s
IEJsdWUgfTsKLSAgICB1bnNpZ25lZCBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQot
ICBwcml2YXRlOgotICAgIHVuc2lnbmVkIG1fY29sb3I7Ci0gIH07Ci0KLSAgSlNWYWx1ZSogZ2V0
RE9NUkdCQ29sb3IoRXhlY1N0YXRlKiwgdW5zaWduZWQgY29sb3IpOwotCi0gIGNsYXNzIERPTVJl
Y3QgOiBwdWJsaWMgRE9NT2JqZWN0IHsKLSAgcHVibGljOgotICAgIERPTVJlY3QoRXhlY1N0YXRl
KiwgV2ViQ29yZTo6UmVjdEltcGwqIHIpOwotICAgIH5ET01SZWN0KCk7Ci0gICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7Ci0gICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKLSAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
LSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgZW51bSB7IFRvcCwgUmlnaHQs
IEJvdHRvbSwgTGVmdCB9OwotICAgIFdlYkNvcmU6OlJlY3RJbXBsKiBpbXBsKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0LmdldCgpOyB9Ci0gIHByaXZhdGU6Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJl
Y3RJbXBsPiBtX3JlY3Q7Ci0gIH07CisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgbV9j
b2xvcjsKKyAgICB9OwogCi0gIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiwgV2ViQ29yZTo6UmVj
dEltcGwqKTsKKyAgICBLSlM6OkpTVmFsdWUqIGdldEpTUkdCQ29sb3IoS0pTOjpFeGVjU3RhdGUq
LCB1bnNpZ25lZCBjb2xvcik7CiAKLX0gLy8gbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIGtqc19jc3NfaApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTVV0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L0RPTVV0aWxpdHkubW0JKHJldmlzaW9uIDIyMDgwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L0RPTVV0aWxpdHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQg
IkpTTm9kZUl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJKU05vZGVMaXN0LmgiCiAjaW1wb3J0ICJKU1Jh
bmdlLmgiCisjaW1wb3J0ICJKU1JlY3QuaCIKICNpbXBvcnQgIkpTU3R5bGVTaGVldC5oIgogI2lt
cG9ydCAiSlNUcmVlV2Fsa2VyLmgiCiAjaW1wb3J0ICJKU1hQYXRoRXhwcmVzc2lvbi5oIgpAQCAt
ODIsOCArODMsMTEgQEAgc3RhdGljIGlubGluZSBpZCBjcmVhdGVET01XcmFwcGVyKEtKUzo6Sgog
ICAgIFdSQVAoTmFtZWROb2RlTWFwKQogICAgIFdSQVAoTm9kZSkKICAgICBXUkFQKE5vZGVMaXN0
KQorICAgIFdSQVAoUkdCQ29sb3IpCiAgICAgV1JBUChSYW5nZSkKKyAgICBXUkFQKFJlY3QpCiAg
ICAgV1JBUChTdHlsZVNoZWV0KQorICAgIFdSQVAoU3R5bGVTaGVldExpc3QpCiAgICAgV1JBUChY
UGF0aEV4cHJlc3Npb24pCiAgICAgV1JBUChYUGF0aFJlc3VsdCkKIApAQCAtOTgsOSArMTAyLDYg
QEAgc3RhdGljIGlubGluZSBpZCBjcmVhdGVET01XcmFwcGVyKEtKUzo6SgogICAgICAgICAgICAg
cmV0dXJuIFtvYmpjX2dldENsYXNzKCJET00iICNjbGFzc05hbWUpIF93cmFwIyNjbGFzc05hbWU6
c3RhdGljX2Nhc3Q8RE9NIyNjbGFzc05hbWUqPihvYmplY3QpLT5pbXBsKCldOwogCiAgICAgV1JB
UChFdmVudCkKLSAgICBXUkFQKFJHQkNvbG9yKQotICAgIFdSQVAoUmVjdCkKLSAgICBXUkFQKFN0
eWxlU2hlZXRMaXN0KQogCiAgICAgI3VuZGVmIFdSQVAKIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMjA4MCkKKysrIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAg
LTE4Nyw3ICsxODcsNyBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgIyBXaGVuIHdlJ3Jl
IGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcwogICAgICMgcmVvcmdhbml6YXRp
b24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgQXZvaWRJbmNsdXNpb25PZlR5cGUoJHR5
cGUpCi0gICAgICAgIG9yICR0eXBlIGVxICJET01TdHJpbmciIG9yICR0eXBlIGVxICJET01PYmpl
Y3QiIG9yICR0eXBlIGVxICJSR0JDb2xvciIgb3IgJHR5cGUgZXEgIlJlY3QiKSB7CisgICAgICAg
IG9yICR0eXBlIGVxICJET01TdHJpbmciIG9yICR0eXBlIGVxICJET01PYmplY3QiIG9yICR0eXBl
IGVxICJSR0JDb2xvciIpIHsKICAgICB9IGVsc2lmICgkdHlwZSA9fiAvU1ZHUGF0aFNlZy8pIHsK
ICAgICAgICAgJGpvaW5lZE5hbWUgPSAkdHlwZTsKICAgICAgICAgJGpvaW5lZE5hbWUgPX4gcy9B
YnN8UmVsLy87CkBAIC0xOTUsNiArMTk1LDggQEAgc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQogICAg
IH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7CiAgICAgICAgICRpbXBsSW5j
bHVkZXN7IkpTWFBhdGhOU1Jlc29sdmVyLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7
IkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgifSA9IDE7CisgICAgfSBlbHNpZiAoJHR5cGUgZXEg
IlJlY3QiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlJlY3RJbXBsLmgifSA9IDE7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUK
ICAgICAgICAgJGltcGxJbmNsdWRlc3siJHt0eXBlfS5oIn0gPSAxOwpAQCAtMjUzLDcgKzI1NSw3
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5v
ZGUtPm5hbWU7CiAgICAgbXkgJGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZhY2VOYW1lIjsKLSAgICBt
eSAkaW1wbENsYXNzTmFtZSA9ICRpbnRlcmZhY2VOYW1lOworICAgIG15ICRpbXBsQ2xhc3NOYW1l
ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25DbGFzcyJ9
ID8gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25DbGFzcyJ9
IDogJGludGVyZmFjZU5hbWU7CiAKICAgICAjIFdlIG9ubHkgc3VwcG9ydCBtdWx0aXBsZSBwYXJl
bnRzIHdpdGggU1ZHIChmb3Igbm93KS4KICAgICBpZiAoQHskZGF0YU5vZGUtPnBhcmVudHN9ID4g
MSkgewpAQCAtNTM2LDcgKzUzOCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAg
ICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKICAgICBteSAkY2xhc3NOYW1l
ID0gIkpTJGludGVyZmFjZU5hbWUiOwotICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gJGludGVyZmFj
ZU5hbWU7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJJbXBsZW1lbnRhdGlvbkNsYXNzIn0gPyAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJJbXBsZW1lbnRhdGlvbkNsYXNzIn0gOiAkaW50ZXJmYWNlTmFtZTsKIAogICAgIG15
ICRoYXNMZWdhY3lQYXJlbnQgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdh
Y3lQYXJlbnQifTsKICAgICBteSAkaGFzUmVhbFBhcmVudCA9IEB7JGRhdGFOb2RlLT5wYXJlbnRz
fSA+IDA7CkBAIC0xMzg2LDcgKzEzODgsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAgICBp
ZiAoJHR5cGUgZXEgIlJHQkNvbG9yIikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJranNfY3Nz
LmgifSA9IDE7Ci0gICAgICAgIHJldHVybiAiZ2V0RE9NUkdCQ29sb3IoZXhlYywgJHZhbHVlKSI7
CisgICAgICAgIHJldHVybiAiZ2V0SlNSR0JDb2xvcihleGVjLCAkdmFsdWUpIjsKICAgICB9CiAK
ICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzUG9kVHlwZSgkdHlwZSkpIHsKQEAgLTE0MzEsNiAr
MTQzMywxMCBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgICRpbXBsSW5jbHVkZXN7Ik5h
bWVkQXR0ck1hcC5oIn0gPSAxOwogICAgIH0KIAorICAgIGlmICgkdHlwZSBlcSAiTm9kZUxpc3Qi
KSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Ik5hbWVOb2RlTGlzdC5oIn0gPSAxOworICAgIH0K
KwogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRUYXJnZXQiKSB7CiAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkV2ZW50VGFyZ2V0Tm9kZS5oIn0gPSAxOwogICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0V2
ZW50VGFyZ2V0Tm9kZS5oIn0gPSAxOwpAQCAtMTQzOCwxMyArMTQ0NCw5IEBAIHN1YiBOYXRpdmVU
b0pTVmFsdWUKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnQiKSB7CiAgICAgICAgICRpbXBs
SW5jbHVkZXN7Imtqc19ldmVudHMuaCJ9ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siRXZl
bnQuaCJ9ID0gMTsKLSAgICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUxpc3QiKSB7Ci0gICAgICAg
ICRpbXBsSW5jbHVkZXN7IkpTJHR5cGUuaCJ9ID0gMTsKLSAgICAgICAgJGltcGxJbmNsdWRlc3si
JHR5cGUuaCJ9ID0gMTsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siTmFtZU5vZGVMaXN0LmgifSA9
IDE7CiAgICAgfSBlbHNpZiAoJHR5cGUgZXEgIlJlY3QiKSB7CiAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IlJlY3RJbXBsLmgifSA9IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Imtqc19jc3MuaCJ9
ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siSlNSZWN0LmgifSA9IDE7CiAgICAgfSBlbHNp
ZiAoJHR5cGUgZXEgIkhUTUxDYW52YXNFbGVtZW50IikgewogICAgICAgICAkaW1wbEluY2x1ZGVz
eyJranNfZG9tLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkhUTUxDYW52YXNFbGVt
ZW50LmgifSA9IDE7CkluZGV4OiBXZWJDb3JlL2Nzcy9SZWN0LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9SZWN0LmlkbAkocmV2aXNpb24gMjIwODApCisrKyBXZWJDb3JlL2Nzcy9SZWN0
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5
LDcgKzE5LDcgQEAKIAogbW9kdWxlIGNzcyB7CiAKLSAgICBpbnRlcmZhY2UgUmVjdCB7CisgICAg
aW50ZXJmYWNlIFtJbXBsZW1lbnRhdGlvbkNsYXNzPVJlY3RJbXBsLCBHZW5lcmF0ZUNvbnN0cnVj
dG9yXSBSZWN0IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU1ByaW1pdGl2ZVZhbHVl
ICB0b3A7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NQcmltaXRpdmVWYWx1ZSAgcmln
aHQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NQcmltaXRpdmVWYWx1ZSAgYm90dG9t
OwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDIyMDgwKQorKysgV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgbW9kdWxlIHdpbmRv
dyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxd
IGJvb2xlYW4gYXV0aG9yT25seSk7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUg
ZGV2aWNlUGl4ZWxSYXRpbzsKIAorI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKICAg
ICAgICAgLy8gR2xvYmFsIGNvbnN0cnVjdG9ycwogICAgICAgICBhdHRyaWJ1dGUgU3R5bGVTaGVl
dENvbnN0cnVjdG9yIFN0eWxlU2hlZXQ7CiAgICAgICAgIGF0dHJpYnV0ZSBDU1NTdHlsZVNoZWV0
Q29uc3RydWN0b3IgQ1NTU3R5bGVTaGVldDsKQEAgLTYxLDYgKzYyLDcgQEAgbW9kdWxlIHdpbmRv
dyB7CiAgICAgICAgIGF0dHJpYnV0ZSBNZWRpYUxpc3RDb25zdHJ1Y3RvciBNZWRpYUxpc3Q7CiAg
ICAgICAgIGF0dHJpYnV0ZSBDb3VudGVyQ29uc3RydWN0b3IgQ291bnRlcjsKICAgICAgICAgYXR0
cmlidXRlIENTU1J1bGVMaXN0Q29uc3RydWN0b3IgQ1NTUnVsZUxpc3Q7CisgICAgICAgIGF0dHJp
YnV0ZSBSZWN0Q29uc3RydWN0b3IgUmVjdDsKIAogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoZSBjb21tZW50ZWQtb3V0IGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIGludGVyZmFjZXMgbGlz
dGVkIGluIERPTSBMZXZlbCAzIENvcmUgc3BlY2lmaWNhdGlvbi4KIC8vICAgICAgICBhdHRyaWJ1
dGUgRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IgRE9NRXhjZXB0aW9uOwpAQCAtMTcwLDYgKzE3Miw3
IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUgWFBhdGhFdmFsdWF0b3JDb25z
dHJ1Y3RvciBYUGF0aEV2YWx1YXRvcjsKICAgICAgICAgYXR0cmlidXRlIFhQYXRoUmVzdWx0Q29u
c3RydWN0b3IgWFBhdGhSZXN1bHQ7CiAjZW5kaWYKKyNlbmRpZiAvLyBkZWZpbmVkKExBTkdVQUdF
X0pBVkFTQ1JJUFQpCiAgICAgfTsKIAogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwODMpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAw
Ny0wNi0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0ZXN0IGZvciBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA1MworICAgICAgICBBdXRvZ2VuZXJhdGUg
SlMgYmluZGluZyBmb3IgUmVjdAorCisgICAgICAgICogZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDogCisKIDIwMDctMDYtMDggIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDIyMDgwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODE4
LDYgKzgxOCw4IEBAIHdpbmRvdy5SYW5nZUV4Y2VwdGlvbi5JTlZBTElEX05PREVfVFlQRV8KIHdp
bmRvdy5SYW5nZUV4Y2VwdGlvbi5wcm90b3R5cGUgW29iamVjdCBSYW5nZUV4Y2VwdGlvblByb3Rv
dHlwZV0KIHdpbmRvdy5SYW5nZUV4Y2VwdGlvbi5wcm90b3R5cGUuQkFEX0JPVU5EQVJZUE9JTlRT
X0VSUiBbbnVtYmVyXQogd2luZG93LlJhbmdlRXhjZXB0aW9uLnByb3RvdHlwZS5JTlZBTElEX05P
REVfVFlQRV9FUlIgW251bWJlcl0KK3dpbmRvdy5SZWN0IFtvYmplY3QgUmVjdENvbnN0cnVjdG9y
XQord2luZG93LlJlY3QucHJvdG90eXBlIFtvYmplY3QgUmVjdFByb3RvdHlwZV0KIHdpbmRvdy5S
ZWZlcmVuY2VFcnJvciBbZnVuY3Rpb25dCiB3aW5kb3cuU3R5bGVTaGVldCBbcHJpbnRlZCBhYm92
ZSBhcyB3aW5kb3cuQ1NTU3R5bGVTaGVldF0KIHdpbmRvdy5TeW50YXhFcnJvciBbZnVuY3Rpb25d
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15059</attachid>
            <date>2007-06-15 10:08:09 -0700</date>
            <delta_ts>2007-06-15 16:23:00 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>autoRect2.diff</filename>
            <type>text/plain</type>
            <size>56801</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzU0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzIgQEAKKzIwMDctMDYtMTUgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNTMKKyAgICAgICAg
QXV0b2dlbmVyYXRlIEpTIGJpbmRpbmcgZm9yIFJlY3QKKworICAgICAgICAtIFJlbmFtZXMgUmVj
dEltcGwgdG8gUmVjdCwgRE9NU3R5bGVTaGVldExpc3QgdG8gSlNTdHlsZVNoZWV0TGlzdCAKKyAg
ICAgICAgICBhbmQgRE9NUkdCQ29sb3IgdG8gSlNSR0JDb2xvcgorICAgICAgICAtIE1vdmVzIEpT
U3R5bGVTaGVldExpc3QgYW5kIEpTUkdCQ29sb3IgaW50byB0aGUgV2ViQ29yZSBuYW1lc3BhY2Uu
CisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNvcmUucHJv
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9ranNfY3NzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAg
IChXZWJDb3JlOjpKU1N0eWxlU2hlZXRMaXN0OjpKU1N0eWxlU2hlZXRMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU3R5bGVTaGVldExpc3Q6On5KU1N0eWxlU2hlZXRMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU3R5bGVTaGVldExpc3Q6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICAo
V2ViQ29yZTo6SlNTdHlsZVNoZWV0TGlzdDo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNTdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1N0
eWxlU2hlZXRMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6dG9K
Uyk6CisgICAgICAgIChXZWJDb3JlOjpKU1N0eWxlU2hlZXRMaXN0RnVuYzo6Y2FsbEFzRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNSR0JDb2xvcjo6SlNSR0JDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1JHQkNvbG9yOjp+SlNSR0JDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpK
U1JHQkNvbG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNSR0JD
b2xvcjo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRKU1JHQkNvbG9y
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfY3NzLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U1N0eWxlU2hlZXRMaXN0OjpjbGFzc0luZm8pOgorICAgICAgICAoV2ViQ29yZTo6SlNTdHlsZVNo
ZWV0TGlzdDo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3R5bGVTaGVldExpc3Q6OmltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNSR0JDb2xvcjo6Y2xhc3NJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTUkdCQ29sb3I6Oik6CisgICAgICAgIChXZWJDb3JlOjpKU1JHQkNvbG9yOjppbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW06CisgICAgICAgIChLSlM6OmNy
ZWF0ZURPTVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG06
CisgICAgICAgICogY3NzL0NTU0JvcmRlckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQm9yZGVySW1hZ2VWYWx1ZTo6Q1NTQm9yZGVySW1hZ2VWYWx1ZSk6CisgICAgICAgICog
Y3NzL0NTU0JvcmRlckltYWdlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2
ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KToK
KyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1ByaW1pdGl2ZVZhbHVlOjpnZXRSZWN0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJp
bWl0aXZlVmFsdWU6Oik6CisgICAgICAgICogY3NzL0Rhc2hib2FyZFJlZ2lvbi5oOgorICAgICAg
ICAqIGNzcy9SZWN0Lmg6IENvcGllZCBmcm9tIGNzcy9SZWN0SW1wbC5oLgorICAgICAgICAoV2Vi
Q29yZTo6UmVjdDo6flJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdDo6dG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlY3Q6OnJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3Q6OmJvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0OjpsZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
Y3Q6OnNldFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0OjpzZXRSaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWN0OjpzZXRCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVjdDo6c2V0
TGVmdCk6CisgICAgICAgICogY3NzL1JlY3QuaWRsOgorICAgICAgICAqIGNzcy9SZWN0SW1wbC5o
OiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9jc3NwYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckltYWdl
UGFyc2VDb250ZXh0Ojpjb21taXRCb3JkZXJJbWFnZSk6CisgICAgICAgICogY3NzL2Nzc3N0eWxl
c2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorCiAyMDA3LTA2LTE0ICBH
ZW9yZ2UgU3RhaWtvcyAgPHN0YWlrb3NAa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBM
YXJzLgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMjM1NDEpCisrKyBXZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTQwNiw2ICs0MDYsNyBAQCBhbGwg
OiBcCiAgICAgSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCBcCiAgICAgSlNSYW5nZS5oIFwKICAg
ICBKU1JhbmdlRXhjZXB0aW9uLmggXAorICAgIEpTUmVjdC5oIFwKICAgICBKU1NWR1pvb21FdmVu
dC5oIFwKICAgICBKU1NWR0FFbGVtZW50LmggXAogICAgIEpTU1ZHQW5nbGUuaCBcCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJl
dmlzaW9uIDIzNTQxKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAt
MTU5LDEwICsxNTksMTEgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICBjc3MvQ1NTVmFsdWUuaWRs
IFwKICAgICBjc3MvQ1NTVmFsdWVMaXN0LmlkbCBcCiAgICAgY3NzL01lZGlhTGlzdC5pZGwgXAor
ICAgIGNzcy9SZWN0LmlkbCBcCiAgICAgY3NzL1N0eWxlU2hlZXQuaWRsIFwKICAgICBkb20vQXR0
ci5pZGwgXAotICAgIGRvbS9DaGFyYWN0ZXJEYXRhLmlkbCBcCiAgICAgZG9tL0NEQVRBU2VjdGlv
bi5pZGwgXAorICAgIGRvbS9DaGFyYWN0ZXJEYXRhLmlkbCBcCiAgICAgZG9tL0NvbW1lbnQuaWRs
IFwKICAgICBkb20vRG9jdW1lbnRGcmFnbWVudC5pZGwgXAogICAgIGRvbS9Eb2N1bWVudC5pZGwg
XApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIzNTQxKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MjAsNyArMTcyMCw2IEBACiAJCUE4MEU2RDA3MEExOTg5Q0Ew
MDdGQjhDNSAvKiBDU1NCb3JkZXJJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNERDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9y
ZGVySW1hZ2VWYWx1ZS5oICovOyB9OwogCQlBODBFNkQwODBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
SW5pdGlhbFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODBFNkNERTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTSW5pdGlhbFZhbHVlLmggKi87IH07
CiAJCUE4MEU2RDA5MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NSdWxlTGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNERjBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTUnVsZUxpc3QuY3BwICovOyB9OwotCQlBODBFNkQwQTBBMTk4OUNBMDA3RkI4
QzUgLyogUmVjdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4MEU2Q0UwMEExOTg5Q0EwMDdGQjhDNSAvKiBSZWN0SW1wbC5oICovOyB9OwogCQlB
ODBFNkQwQjBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNFMTBBMTk4OUNBMDA3RkI4
QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggKi87IH07CiAJCUE4MEU2RDBDMEExOTg5Q0EwMDdGQjhD
NSAvKiBDU1NTdHlsZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4MEU2Q0UyMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1bGUuaCAqLzsg
fTsKIAkJQTgwRTZEMEQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1J1bGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0UzMEExOTg5Q0EwMDdGQjhD
NSAvKiBDU1NSdWxlLmggKi87IH07CkBAIC0yNzYyLDYgKzI3NjEsNyBAQAogCQlCQzNDMzlCNjBD
MEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzQzM5QjQwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVk
aWFMaXN0LmNwcCAqLzsgfTsKIAkJQkMzQzM5QjcwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzND
MzlCNTBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCAqLzsgfTsKIAkJQkMzRkNBQTkw
QUMzREI1ODAwQkE1NEFEIC8qIFBsYXRmb3JtU2Nyb2xsQmFyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzNGQ0FBODBBQzNEQjU4MDBCQTU0QUQgLyog
UGxhdGZvcm1TY3JvbGxCYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9
OworCQlCQzQzNjhFODBDMjI2RTMyMDA1RUZCNUYgLyogUmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0MzY4RTcwQzIyNkUzMjAwNUVGQjVGIC8q
IFJlY3QuaCAqLzsgfTsKIAkJQkM0NkMxRUUwQzBEREJERjAwMjBDRkMzIC8qIEpTQ1NTUnVsZUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzQ2QzFFRDBDMEREQkRGMDAyMENGQzMgLyogSlNDU1NSdWxlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJ
QkM0NkMxRkEwQzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTQ2hhcnNldFJ1bGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0NkMxRjAwQzBEREM4RjAw
MjBDRkMzIC8qIEpTQ1NTQ2hhcnNldFJ1bGUuY3BwICovOyB9OwogCQlCQzQ2QzFGQjBDMEREQzhG
MDAyMENGQzMgLyogSlNDU1NDaGFyc2V0UnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0NkMxRjEwQzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTQ2hh
cnNldFJ1bGUuaCAqLzsgfTsKQEAgLTI5NDYsNiArMjk0Niw4IEBACiAJCUJDRkIyRjQyMDk3QTI0
QjUwMEJBNzAzRCAvKiBTZWdtZW50ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkIyRjQwMDk3QTI0QjUwMEJBNzAzRCAvKiBTZWdtZW50
ZWRTdHJpbmcuaCAqLzsgfTsKIAkJQkNGQjJGNzYwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkIyRjc0
MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5jcHAgKi87IH07CiAJCUJDRkIyRjc3MDk3QTJFMUEw
MEJBNzAzRCAvKiBBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNGQjJGNzUwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmggKi87IH07CisJCUJD
RkUyRjExMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRTJGMEYwQzFCNTgzNzAwMjAyMzVGIC8qIEpT
UmVjdC5jcHAgKi87IH07CisJCUJDRkUyRjEyMEMxQjU4MzgwMDIwMjM1RiAvKiBKU1JlY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkUyRjEwMEMx
QjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuaCAqLzsgfTsKIAkJQkNGRThFMzIwQTAyQTFEMzAwMDlF
NjFEIC8qIFdlYkNvcmVUZXh0UmVuZGVyZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZFOEUzMTBBMDJBMUQzMDAwOUU2MUQgLyogV2ViQ29yZVRl
eHRSZW5kZXJlci5tbSAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlm
eVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5oICovOyB9OwogCQlDNkQ3NEFFNDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuY3BwICovOyB9OwpAQCAtNDg1OSw3ICs0ODYxLDYgQEAKIAkJQTgwRTZDREQwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTgwRTZDREUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0luaXRpYWxWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTSW5pdGlhbFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MEU2Q0RGMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NS
dWxlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUnVs
ZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODBFNkNFMDBBMTk4OUNB
MDA3RkI4QzUgLyogUmVjdEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlY3RJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MEU2Q0UxMEExOTg5
Q0EwMDdGQjhDNSAvKiBEYXNoYm9hcmRSZWdpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERhc2hib2FyZFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBODBFNkNFMjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTdHlsZVJ1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTgwRTZDRTMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1J1bGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1J1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTYwNTQsNiArNjA1NSw3IEBACiAJCUJDM0MzOUI0MEMwRDNEOEQwMDVGNEQ3
QSAvKiBKU01lZGlhTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNNZWRpYUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzNDMzlC
NTBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTTWVkaWFMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDM0ZDQUE4MEFDM0RCNTgwMEJBNTRBRCAvKiBQbGF0Zm9ybVNjcm9sbEJhci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1TY3JvbGxCYXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM0MzY4RTcwQzIyNkUzMjAwNUVGQjVGIC8qIFJlY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlY3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkM0NkMxRUQwQzBEREJERjAwMjBDRkMzIC8qIEpTQ1NTUnVsZUN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NSdWxlQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0NkMxRjAwQzBEREM4RjAw
MjBDRkMzIC8qIEpTQ1NTQ2hhcnNldFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ1NTQ2hhcnNldFJ1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzQ2QzFGMTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NDaGFyc2V0UnVsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NDaGFyc2V0UnVsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI0Myw2ICs2MjQ1LDggQEAKIAkJQkNGQjJGNDAw
OTdBMjRCNTAwQkE3MDNEIC8qIFNlZ21lbnRlZFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2VnbWVudGVkU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRkIyRjc0MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJlbmEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0ZCMkY3NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyZW5hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRkUyRjBGMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDRkUyRjEwMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0ZFOEUzMTBBMDJBMUQzMDAwOUU2MUQgLyogV2ViQ29yZVRleHRSZW5kZXJl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVGV4
dFJlbmRlcmVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCRTg1NUY3RjA3MDFF
ODM1MDAyMzk3NjkgLyogV2ViQ29yZVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJFODU2MDUxMDcwMUY5MTEw
MDIzOTc2OSAvKiBXZWJDb3JlVmlldy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJDb3JlVmlldy5tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTY0NjYsOCArNjQ3MCw2IEBA
CiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUJDQ0JBRDNFMEMxOEMxNDIw
MENFODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uLmNwcCAqLywKLQkJCQlCQ0NCQUQzRjBDMThDMTQy
MDBDRTg5MEYgLyogSlNIVE1MQ29sbGVjdGlvbi5oICovLAogCQkJCTY1REYzMUQ4MDlEMUMxMjIw
MDBCRTMyNSAvKiBKU0F0dHIuY3BwICovLAogCQkJCTY1REYzMUQ5MDlEMUMxMjMwMDBCRTMyNSAv
KiBKU0F0dHIuaCAqLywKIAkJCQk2NURGMzIzMzA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNH
cmFkaWVudC5jcHAgKi8sCkBAIC02NTUwLDYgKzY1NTIsOCBAQAogCQkJCUE4MEU3RTk1MEExQTgz
RTMwMDdGQjhDNSAvKiBKU0hUTUxCdXR0b25FbGVtZW50LmggKi8sCiAJCQkJOTM4RTY2NUYwOUYw
OUI4MTAwOEE0OEVDIC8qIEpTSFRNTENhbnZhc0VsZW1lbnQuY3BwICovLAogCQkJCTkzOEU2NjYx
MDlGMDlCODcwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmggKi8sCisJCQkJQkNDQkFE
M0UwQzE4QzE0MjAwQ0U4OTBGIC8qIEpTSFRNTENvbGxlY3Rpb24uY3BwICovLAorCQkJCUJDQ0JB
RDNGMEMxOEMxNDIwMENFODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uLmggKi8sCiAJCQkJMUE4NUIx
RTAwQTFCMjQwNTAwRDhDODdDIC8qIEpTSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwICovLAogCQkJ
CTFBODVCMUUxMEExQjI0MDUwMEQ4Qzg3QyAvKiBKU0hUTUxEaXJlY3RvcnlFbGVtZW50LmggKi8s
CiAJCQkJMUE4NUIyQjQwQTFCMkFDNzAwRDhDODdDIC8qIEpTSFRNTERpdkVsZW1lbnQuY3BwICov
LApAQCAtNjY3Niw2ICs2NjgwLDggQEAKIAkJCQk2NURGMzFFRTA5RDFDQzYwMDAwQkUzMjUgLyog
SlNSYW5nZS5oICovLAogCQkJCUQyM0NBNTVFMEFCMEVBQjYwMDUxMDhBNSAvKiBKU1JhbmdlRXhj
ZXB0aW9uLmNwcCAqLywKIAkJCQlEMjNDQTU1QzBBQjBFQUFFMDA1MTA4QTUgLyogSlNSYW5nZUV4
Y2VwdGlvbi5oICovLAorCQkJCUJDRkUyRjBGMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuY3Bw
ICovLAorCQkJCUJDRkUyRjEwMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuaCAqLywKIAkJCQlC
Q0UwMTM5ODBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmNwcCAqLywKIAkJCQlCQ0Uw
MTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmggKi8sCiAJCQkJQjIwMTExMDUw
QUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwICovLApAQCAtOTY5MSw3ICs5Njk3
LDcgQEAKIAkJCQk5M0NBNEM5RjA5REY5M0ZBMDBERjg2NzcgLyogcXVpcmtzLmNzcyAqLywKIAkJ
CQk4NThDMzhFRjBBQThGREQxMDBCMTg3QTQgLyogUkdCQ29sb3IuaWRsICovLAogCQkJCUE4MEU3
OTk2MEExOUJEMjEwMDdGQjhDNSAvKiBSZWN0LmlkbCAqLywKLQkJCQlBODBFNkNFMDBBMTk4OUNB
MDA3RkI4QzUgLyogUmVjdEltcGwuaCAqLywKKwkJCQlCQzQzNjhFNzBDMjI2RTMyMDA1RUZCNUYg
LyogUmVjdC5oICovLAogCQkJCUE4MEU2Q0NBMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1
ZS5jcHAgKi8sCiAJCQkJQTgwRTZDQkUwQTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1ZhbHVlLmgg
Ki8sCiAJCQkJQTgwRTczNEMwQTE5OUM3NzAwN0ZCOEM1IC8qIFN0eWxlQmFzZS5jcHAgKi8sCkBA
IC0xMDU3Miw3ICsxMDU3OCw2IEBACiAJCQkJQTgwRTZEMDQwQTE5ODlDQTAwN0ZCOEM1IC8qIENv
dW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2RDA3MEExOTg5Q0EwMDdGQjhDNSAvKiBD
U1NCb3JkZXJJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkQwODBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTSW5pdGlhbFZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQlBODBFNkQw
QTBBMTk4OUNBMDA3RkI4QzUgLyogUmVjdEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2
RDBCMEExOTg5Q0EwMDdGQjhDNSAvKiBEYXNoYm9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MEU2RDBDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1bGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4MEU2RDBEMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NSdWxlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTExNTUyLDYgKzExNTU3LDggQEAKIAkJCQlCQ0Q5QzJDNzBDMTdCNkVDMDA1Qzkw
QTIgLyogSlNFdmVudFRhcmdldE5vZGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NCQUQ0
MTBDMThDMTQyMDBDRTg5MEYgLyogSlNIVE1MQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM2REM3QTEwQzFBNEJGQTAwNEUyMDE3IC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDRkUyRjEyMEMxQjU4MzgwMDIwMjM1RiAvKiBKU1JlY3QuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDNDM2OEU4MEMyMjZFMzIwMDVFRkI1RiAvKiBSZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTExNTg5LDcgKzExNTk2LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFB
QzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1
aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKLQkJCWNvbXBh
dGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9yRW5jb2Rpbmdz
ID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTI5NzYsNiArMTI5
ODIsNyBAQAogCQkJCUJDRDlDMkMyMEMxN0I2OUUwMDVDOTBBMiAvKiBKU05vZGVMaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDQ0JBRDNCMEMxOEJGRjgwMENFODkwRiAvKiBKU0hUTUxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0JBRDQwMEMxOEMxNDIwMENF
ODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDRkUyRjEx
MEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2Nzcy5jcHAJKHJldmlzaW9uIDIzNTQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfY3NzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMjE5ICszOSwxNzMgQEAKIAogI2lu
Y2x1ZGUgImtqc19jc3MubHV0LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIEtK
UyB7Cit1c2luZyBuYW1lc3BhY2UgS0pTOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAot
Y29uc3QgQ2xhc3NJbmZvIERPTVN0eWxlU2hlZXRMaXN0OjppbmZvID0geyAiU3R5bGVTaGVldExp
c3QiLCAwLCAmRE9NU3R5bGVTaGVldExpc3RUYWJsZSwgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpT
U3R5bGVTaGVldExpc3Q6OmluZm8gPSB7ICJTdHlsZVNoZWV0TGlzdCIsIDAsICZKU1N0eWxlU2hl
ZXRMaXN0VGFibGUsIDAgfTsKIAogLyoKLUBiZWdpbiBET01TdHlsZVNoZWV0TGlzdFRhYmxlIDIK
LSAgbGVuZ3RoICAgICAgICBET01TdHlsZVNoZWV0TGlzdDo6TGVuZ3RoICAgICAgIERvbnREZWxl
dGV8UmVhZE9ubHkKLSAgaXRlbSAgICAgICAgICBET01TdHlsZVNoZWV0TGlzdDo6SXRlbSAgICAg
ICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQorQGJlZ2luIEpTU3R5bGVTaGVldExpc3RUYWJsZSAy
CisgIGxlbmd0aCAgICAgICAgV2ViQ29yZTo6SlNTdHlsZVNoZWV0TGlzdDo6TGVuZ3RoICAgICAg
IERvbnREZWxldGV8UmVhZE9ubHkKKyAgaXRlbSAgICAgICAgICBXZWJDb3JlOjpKU1N0eWxlU2hl
ZXRMaXN0OjpJdGVtICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCiBAZW5kCiAqLwotS0pT
X0lNUExFTUVOVF9QUk9UT1RZUEVfRlVOQ1RJT04oRE9NU3R5bGVTaGVldExpc3RGdW5jKSAvLyBu
b3QgcmVhbGx5IGEgcHJvdG90eXBlLCBidXQgZG9lc24ndCBtYXR0ZXIKIAotRE9NU3R5bGVTaGVl
dExpc3Q6OkRPTVN0eWxlU2hlZXRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgU3R5bGVTaGVldExpc3Qq
IHNzbCwgRG9jdW1lbnQqIGRvYykKLSAgOiBtX2ltcGwoc3NsKQotICAsIG1fZG9jKGRvYykgCitL
SlNfSU1QTEVNRU5UX1BST1RPVFlQRV9GVU5DVElPTihKU1N0eWxlU2hlZXRMaXN0RnVuYykgLy8g
bm90IHJlYWxseSBhIHByb3RvdHlwZSwgYnV0IGRvZXNuJ3QgbWF0dGVyCisKK0pTU3R5bGVTaGVl
dExpc3Q6OkpTU3R5bGVTaGVldExpc3QoRXhlY1N0YXRlKiBleGVjLCBTdHlsZVNoZWV0TGlzdCog
c3R5bGVTaGVldExpc3QsIERvY3VtZW50KiBkb2MpCisgICAgOiBtX2ltcGwoc3R5bGVTaGVldExp
c3QpCisgICAgLCBtX2RvYyhkb2MpIAogewogICAgIHNldFByb3RvdHlwZShleGVjLT5sZXhpY2Fs
SW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKTsKIH0KIAotRE9NU3R5bGVT
aGVldExpc3Q6On5ET01TdHlsZVNoZWV0TGlzdCgpCitKU1N0eWxlU2hlZXRMaXN0Ojp+SlNTdHls
ZVNoZWV0TGlzdCgpCiB7Ci0gIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9p
bXBsLmdldCgpKTsKKyAgICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1w
bC5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIERPTVN0eWxlU2hlZXRMaXN0OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorSlNWYWx1ZSogSlNTdHlsZVNo
ZWV0TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKLSAgICBzd2l0Y2godG9rZW4pIHsKLSAgICBjYXNlIExlbmd0aDoKLSAgICAgIHJldHVy
biBqc051bWJlcihtX2ltcGwtPmxlbmd0aCgpKTsKLSAgICBkZWZhdWx0OgotICAgICAgQVNTRVJU
KDApOwotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIExlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihtX2ltcGwt
Pmxlbmd0aCgpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogfQogCi1K
U1ZhbHVlKiBET01TdHlsZVNoZWV0TGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNTdHlsZVNoZWV0TGlzdDo6aW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewot
ICBET01TdHlsZVNoZWV0TGlzdCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTVN0eWxlU2hlZXRM
aXN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+bV9p
bXBsLT5pdGVtKHNsb3QuaW5kZXgoKSkpOworICAgIEpTU3R5bGVTaGVldExpc3QqIHRoaXNPYmog
PSBzdGF0aWNfY2FzdDxKU1N0eWxlU2hlZXRMaXN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgICBy
ZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5tX2ltcGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7CiB9
CiAKLUpTVmFsdWUqIERPTVN0eWxlU2hlZXRMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTU3R5bGVTaGVldExpc3Q6
Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewotICBET01TdHlsZVNoZWV0TGlzdCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTVN0eWxlU2hl
ZXRMaXN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgRWxlbWVudCAqZWxlbWVudCA9IHRoaXNPYmot
Pm1fZG9jLT5nZXRFbGVtZW50QnlJZChwcm9wZXJ0eU5hbWUpOwotICByZXR1cm4gdG9KUyhleGVj
LCBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCktPnNoZWV0KCkpOworICAg
IEpTU3R5bGVTaGVldExpc3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1N0eWxlU2hlZXRMaXN0
Kj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gdGhpc09iai0+bV9k
b2MtPmdldEVsZW1lbnRCeUlkKHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywg
c3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KGVsZW1lbnQpLT5zaGVldCgpKTsKIH0KIAot
Ym9vbCBET01TdHlsZVNoZWV0TGlzdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiti
b29sIEpTU3R5bGVTaGVldExpc3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewot
ICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJkRPTVN0eWxlU2hl
ZXRMaXN0VGFibGUsIHByb3BlcnR5TmFtZSk7CisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9
IExvb2t1cDo6ZmluZEVudHJ5KCZKU1N0eWxlU2hlZXRMaXN0VGFibGUsIHByb3BlcnR5TmFtZSk7
CiAgIAotICBpZiAoZW50cnkpIHsKLSAgICBzd2l0Y2goZW50cnktPnZhbHVlKSB7Ci0gICAgY2Fz
ZSBMZW5ndGg6Ci0gICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNW
YWx1ZUdldHRlcjxET01TdHlsZVNoZWV0TGlzdD4pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Y2FzZSBJdGVtOgotICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwgc3RhdGlj
RnVuY3Rpb25HZXR0ZXI8RE9NU3R5bGVTaGVldExpc3RGdW5jPik7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgc3dpdGNoKGVudHJ5LT52YWx1ZSkgeworICAg
ICAgICAgICAgY2FzZSBMZW5ndGg6CisgICAgICAgICAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRy
eSh0aGlzLCBlbnRyeSwgc3RhdGljVmFsdWVHZXR0ZXI8SlNTdHlsZVNoZWV0TGlzdD4pOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgY2FzZSBJdGVtOgorICAgICAg
ICAgICAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY0Z1bmN0aW9u
R2V0dGVyPEpTU3R5bGVTaGVldExpc3RGdW5jPik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KICAgICB9Ci0gIH0KLQotICBTdHlsZVNoZWV0TGlzdCAmc3R5bGVTaGVl
dExpc3QgPSAqbV9pbXBsOwotCi0gIC8vIFJldHJpZXZlIHN0eWxlc2hlZXQgYnkgaW5kZXgKLSAg
Ym9vbCBvazsKLSAgdW5zaWduZWQgdSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwotICBp
ZiAob2sgJiYgdSA8IHN0eWxlU2hlZXRMaXN0Lmxlbmd0aCgpKSB7Ci0gICAgc2xvdC5zZXRDdXN0
b21JbmRleCh0aGlzLCB1LCBpbmRleEdldHRlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICAvLyBJRSBhbHNvIHN1cHBvcnRzIHJldHJpZXZpbmcgYSBzdHlsZXNoZWV0IGJ5IG5hbWUsIHVz
aW5nIHRoZSBuYW1lL2lkIG9mIHRoZSA8c3R5bGU+IHRhZwotICAvLyAodGhpcyBpcyBjb25zaXN0
ZW50IHdpdGggYWxsIHRoZSBvdGhlciBjb2xsZWN0aW9ucykKLSAgLy8gIyMjIEJhZCBpbXBsZW1l
bnRhdGlvbiBiZWNhdXNlIHJldHVybnMgYSBzaW5nbGUgZWxlbWVudCAoYXJlIElEcyBhbHdheXMg
dW5pcXVlPykKLSAgLy8gYW5kIGRvZXNuJ3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1dGUgKHNlZSBp
bXBsZW1lbnRhdGlvbiBhYm92ZSkuCi0gIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRz
IGlzIGdvb2QgcHJhY3RpY2UgYW55d2F5IDspCi0gIEVsZW1lbnQgKmVsZW1lbnQgPSBtX2RvYy0+
Z2V0RWxlbWVudEJ5SWQocHJvcGVydHlOYW1lKTsKLSAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+
aGFzVGFnTmFtZShzdHlsZVRhZykpIHsKLSAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBuYW1lR2V0
dGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHJldHVybiBET01PYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1KU1ZhbHVlKiB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgU3R5bGVTaGVldExpc3QgKnNzbCwgRG9jdW1lbnQgKmRvYykK
LXsKLSAgLy8gQ2FuJ3QgdXNlIHRoZSBjYWNoZURPTU9iamVjdCBtYWNybyBiZWNhdXNlIG9mIHRo
ZSBkb2MgYXJndW1lbnQKLSAgRE9NT2JqZWN0ICpyZXQ7Ci0gIGlmICghc3NsKQotICAgIHJldHVy
biBqc051bGwoKTsKLSAgU2NyaXB0SW50ZXJwcmV0ZXIqIGludGVycCA9IHN0YXRpY19jYXN0PFNj
cmlwdEludGVycHJldGVyKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpOwotICBpZiAoKHJl
dCA9IGludGVycC0+Z2V0RE9NT2JqZWN0KHNzbCkpKQotICAgIHJldHVybiByZXQ7Ci0gIGVsc2Ug
ewotICAgIHJldCA9IG5ldyBET01TdHlsZVNoZWV0TGlzdChleGVjLCBzc2wsIGRvYyk7Ci0gICAg
aW50ZXJwLT5wdXRET01PYmplY3Qoc3NsLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0K
IAotSlNWYWx1ZSogRE9NU3R5bGVTaGVldExpc3RGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQotewotICBpZiAo
IXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTVN0eWxlU2hlZXRMaXN0OjppbmZvKSkKLSAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICBTdHlsZVNoZWV0TGlzdCAmc3R5
bGVTaGVldExpc3QgPSAqc3RhdGljX2Nhc3Q8RE9NU3R5bGVTaGVldExpc3QqPih0aGlzT2JqKS0+
aW1wbCgpOwotICBpZiAoaWQgPT0gRE9NU3R5bGVTaGVldExpc3Q6Okl0ZW0pCi0gICAgcmV0dXJu
IHRvSlMoZXhlYywgc3R5bGVTaGVldExpc3QuaXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7
Ci0gIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQorICAgIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNo
ZWV0TGlzdCA9IG1faW1wbC5nZXQoKTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFJl
dHJpZXZlIHN0eWxlc2hlZXQgYnkgaW5kZXgKKyAgICBib29sIG9rOworICAgIHVuc2lnbmVkIHUg
PSBwcm9wZXJ0eU5hbWUudG9VSW50MzIoJm9rKTsKKyAgICBpZiAob2sgJiYgdSA8IHN0eWxlU2hl
ZXRMaXN0LT5sZW5ndGgoKSkgeworICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIHUs
IGluZGV4R2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi1jb25zdCBDbGFz
c0luZm8gRE9NUkdCQ29sb3I6OmluZm8gPSB7ICJSR0JDb2xvciIsIDAsICZET01SR0JDb2xvclRh
YmxlLCAwIH07CisgICAgLy8gSUUgYWxzbyBzdXBwb3J0cyByZXRyaWV2aW5nIGEgc3R5bGVzaGVl
dCBieSBuYW1lLCB1c2luZyB0aGUgbmFtZS9pZCBvZiB0aGUgPHN0eWxlPiB0YWcKKyAgICAvLyAo
dGhpcyBpcyBjb25zaXN0ZW50IHdpdGggYWxsIHRoZSBvdGhlciBjb2xsZWN0aW9ucykKKyAgICAv
LyAjIyMgQmFkIGltcGxlbWVudGF0aW9uIGJlY2F1c2UgcmV0dXJucyBhIHNpbmdsZSBlbGVtZW50
IChhcmUgSURzIGFsd2F5cyB1bmlxdWU/KQorICAgIC8vIGFuZCBkb2Vzbid0IGxvb2sgZm9yIG5h
bWUgYXR0cmlidXRlIChzZWUgaW1wbGVtZW50YXRpb24gYWJvdmUpLgorICAgIC8vIEJ1dCB1bmlj
aXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2UgYW55d2F5IDspCisgICAgRWxl
bWVudCogZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChwcm9wZXJ0eU5hbWUpOworICAg
IGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoc3R5bGVUYWcpKSB7CisgICAgICAg
IHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CiAKLS8qCi1AYmVnaW4gRE9NUkdCQ29sb3JUYWJsZSAzCi0gIHJlZCAgIERPTVJHQkNv
bG9yOjpSZWQgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZ3JlZW4gRE9NUkdCQ29sb3I6
OkdyZWVuICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBibHVlICBET01SR0JDb2xvcjo6Qmx1
ZSAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci1AZW5kCi0qLwotRE9NUkdCQ29sb3I6OkRPTVJH
QkNvbG9yKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY29sb3IpIAotOiBtX2NvbG9yKGNvbG9y
KSAKLXsgCi0gICAgc2V0UHJvdG90eXBlKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCkpOworICAgIHJldHVybiBET01PYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ET01SR0JDb2xvcjo6fkRP
TVJHQkNvbG9yKCkKK0pTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBTdHlsZVNoZWV0TGlz
dCogc3R5bGVTaGVldExpc3QsIERvY3VtZW50KiBkb2MpCiB7Ci0gIC8vcmdiQ29sb3JzLnJlbW92
ZShyZ2JDb2xvci5oYW5kbGUoKSk7Ci19CisgICAgLy8gQ2FuJ3QgdXNlIHRoZSBjYWNoZURPTU9i
amVjdCBtYWNybyBiZWNhdXNlIG9mIHRoZSBkb2MgYXJndW1lbnQKKyAgICBpZiAoIXN0eWxlU2hl
ZXRMaXN0KQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLWJvb2wgRE9NUkdCQ29sb3I6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICByZXR1cm4gZ2V0U3RhdGljVmFsdWVT
bG90PERPTVJHQkNvbG9yLCBET01PYmplY3Q+KGV4ZWMsICZET01SR0JDb2xvclRhYmxlLCB0aGlz
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQorICAgIFNjcmlwdEludGVycHJldGVyKiBpbnRlcnAg
PSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlcio+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRl
cigpKTsKKyAgICBET01PYmplY3QqIHJldCA9IGludGVycC0+Z2V0RE9NT2JqZWN0KHN0eWxlU2hl
ZXRMaXN0KTsKKyAgICBpZiAocmV0KQorICAgICAgICByZXR1cm4gcmV0OwogCi1KU1ZhbHVlKiBE
T01SR0JDb2xvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKLXsKLSAgaW50IGNvbG9yID0gbV9jb2xvcjsKLSAgc3dpdGNoICh0b2tlbikgewotICBj
YXNlIFJlZDoKLSAgICBjb2xvciA+Pj0gODsKLSAgICAvLyBmYWxsIHRocm91Z2gKLSAgY2FzZSBH
cmVlbjoKLSAgICBjb2xvciA+Pj0gODsKLSAgICAvLyBmYWxsIHRocm91Z2gKLSAgY2FzZSBCbHVl
OgotICAgIHJldHVybiB0b0pTKGV4ZWMsIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShjb2xvciAmIDB4
RkYsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gIGRlZmF1bHQ6Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0KKyAgICByZXQgPSBuZXcgSlNTdHlsZVNoZWV0TGlzdChleGVjLCBzdHls
ZVNoZWV0TGlzdCwgZG9jKTsKKyAgICBpbnRlcnAtPnB1dERPTU9iamVjdChzdHlsZVNoZWV0TGlz
dCwgcmV0KTsKKyAgICByZXR1cm4gcmV0OwogfQogCi1KU1ZhbHVlKiBnZXRET01SR0JDb2xvcihF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGMpCitKU1ZhbHVlKiBKU1N0eWxlU2hlZXRMaXN0RnVu
Yzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgTGlzdCYgYXJncykKIHsKLSAgLy8gIyMjIGltcGxlbWVudCBlcXVhbHMgZm9yIFJHQkNvbG9y
IHNpbmNlIHRoZXkncmUgbm90IHJlZmNvdW50ZWQgb2JqZWN0cwotICByZXR1cm4gbmV3IERPTVJH
QkNvbG9yKGV4ZWMsIGMpOworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkpTU3R5bGVTaGVl
dExpc3Q6OmluZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OworCisgICAgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRMaXN0ID0gc3RhdGljX2Nhc3Q8SlNT
dHlsZVNoZWV0TGlzdCo+KHRoaXNPYmopLT5pbXBsKCk7CisgICAgaWYgKGlkID09IEpTU3R5bGVT
aGVldExpc3Q6Okl0ZW0pCisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlU2hlZXRMaXN0
LT5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jb25zdCBDbGFzc0luZm8gRE9NUmVjdDo6
aW5mbyA9IHsgIlJlY3QiLCAwLCAmRE9NUmVjdFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8g
SlNSR0JDb2xvcjo6aW5mbyA9IHsgIlJHQkNvbG9yIiwgMCwgJkpTUkdCQ29sb3JUYWJsZSwgMCB9
OworCiAvKgotQGJlZ2luIERPTVJlY3RUYWJsZSA0Ci0gIHRvcCAgICBET01SZWN0OjpUb3AgICAg
IERvbnREZWxldGV8UmVhZE9ubHkKLSAgcmlnaHQgIERPTVJlY3Q6OlJpZ2h0ICAgRG9udERlbGV0
ZXxSZWFkT25seQotICBib3R0b20gRE9NUmVjdDo6Qm90dG9tICBEb250RGVsZXRlfFJlYWRPbmx5
Ci0gIGxlZnQgICBET01SZWN0OjpMZWZ0ICAgIERvbnREZWxldGV8UmVhZE9ubHkKK0BiZWdpbiBK
U1JHQkNvbG9yVGFibGUgMworICByZWQgICBXZWJDb3JlOjpKU1JHQkNvbG9yOjpSZWQgICAgICAg
IERvbnREZWxldGV8UmVhZE9ubHkKKyAgZ3JlZW4gV2ViQ29yZTo6SlNSR0JDb2xvcjo6R3JlZW4g
ICAgICBEb250RGVsZXRlfFJlYWRPbmx5CisgIGJsdWUgIFdlYkNvcmU6OkpTUkdCQ29sb3I6OkJs
dWUgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQogQGVuZAogKi8KLURPTVJlY3Q6OkRPTVJlY3Qo
RXhlY1N0YXRlKiBleGVjLCBSZWN0SW1wbCogcikgCi06IG1fcmVjdChyKSAKKworSlNSR0JDb2xv
cjo6SlNSR0JDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvbG9yKSAKKyAgICA6IG1f
Y29sb3IoY29sb3IpIAogeyAKICAgICBzZXRQcm90b3R5cGUoZXhlYy0+bGV4aWNhbEludGVycHJl
dGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSk7CiB9CiAKLURPTVJlY3Q6On5ET01SZWN0
KCkKK0pTUkdCQ29sb3I6On5KU1JHQkNvbG9yKCkKIHsKLSAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZv
cmdldERPTU9iamVjdChtX3JlY3QuZ2V0KCkpOworICAgIC8vcmdiQ29sb3JzLnJlbW92ZShyZ2JD
b2xvci5oYW5kbGUoKSk7CiB9CiAKLWJvb2wgRE9NUmVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitib29sIEpTUkdCQ29sb3I6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogewotICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PERPTVJlY3QsIERPTU9iamVjdD4oZXhl
YywgICZET01SZWN0VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJu
IGdldFN0YXRpY1ZhbHVlU2xvdDxKU1JHQkNvbG9yLCBET01PYmplY3Q+KGV4ZWMsICZKU1JHQkNv
bG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpTVmFsdWUqIERPTVJl
Y3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitK
U1ZhbHVlKiBKU1JHQkNvbG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAogewotICBSZWN0SW1wbCAmcmVjdCA9ICptX3JlY3Q7Ci0gIHN3aXRjaCAo
dG9rZW4pIHsKLSAgY2FzZSBUb3A6Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgcmVjdC50b3AoKSk7
Ci0gIGNhc2UgUmlnaHQ6Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgcmVjdC5yaWdodCgpKTsKLSAg
Y2FzZSBCb3R0b206Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgcmVjdC5ib3R0b20oKSk7Ci0gIGNh
c2UgTGVmdDoKLSAgICByZXR1cm4gdG9KUyhleGVjLCByZWN0LmxlZnQoKSk7Ci0gIGRlZmF1bHQ6
Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgICBpbnQgY29sb3IgPSBtX2NvbG9yOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBSZWQ6CisgICAgICAgICAgICBjb2xvciA+Pj0g
ODsKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICBjYXNlIEdyZWVuOgorICAg
ICAgICAgICAgY29sb3IgPj49IDg7CisgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICAg
ICAgY2FzZSBCbHVlOgorICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgbmV3IENTU1ByaW1p
dGl2ZVZhbHVlKGNvbG9yICYgMHhGRiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KIH0KIAotSlNW
YWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFJlY3RJbXBsICpyKQorSlNWYWx1ZSogZ2V0SlNS
R0JDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvbG9yKQogewotICByZXR1cm4gY2Fj
aGVET01PYmplY3Q8UmVjdEltcGwsIERPTVJlY3Q+KGV4ZWMsIHIpOworICAgIC8vICMjIyBpbXBs
ZW1lbnQgZXF1YWxzIGZvciBSR0JDb2xvciBzaW5jZSB0aGV5J3JlIG5vdCByZWZjb3VudGVkIG9i
amVjdHMKKyAgICByZXR1cm4gbmV3IEpTUkdCQ29sb3IoZXhlYywgY29sb3IpOwogfQogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuaAkocmV2aXNpb24g
MjM1NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNzYgKzI0LDY0IEBACiAjZGVmaW5lIGtqc19jc3NfaAogCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKLSNpbmNsdWRlICJSZWN0SW1wbC5oIgogI2luY2x1ZGUgIkpTU3R5bGVTaGVldC5oIgogI2lu
Y2x1ZGUgImtqc19iaW5kaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwogICAgIGNsYXNz
IENvdW50ZXI7CiAgICAgY2xhc3MgQ1NTU3R5bGVTaGVldDsKICAgICBjbGFzcyBTdHlsZVNoZWV0
OwogICAgIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwotfQogCi1uYW1lc3BhY2UgS0pTIHsKKyAgICBj
bGFzcyBKU1N0eWxlU2hlZXRMaXN0IDogcHVibGljIEtKUzo6RE9NT2JqZWN0IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIEpTU3R5bGVTaGVldExpc3QoS0pTOjpFeGVjU3RhdGUqLCBTdHlsZVNoZWV0
TGlzdCosIERvY3VtZW50Kik7CisgICAgICAgIHZpcnR1YWwgfkpTU3R5bGVTaGVldExpc3QoKTsK
KworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRl
KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAg
S0pTOjpKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiwgaW50IHRva2Vu
KSBjb25zdDsKKyAgICAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQorICAgICAgICB2aXJ0
dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQorICAgICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5mbzsKKworICAgICAg
ICBlbnVtIHsgSXRlbSwgTGVuZ3RoIH07CisKKyAgICAgICAgU3R5bGVTaGVldExpc3QqIGltcGwo
KSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IHN0YXRpYyBLSlM6OkpTVmFsdWUqIGluZGV4R2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpK
U09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90
Jik7CisgICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIG5hbWVHZXR0ZXIoS0pTOjpFeGVjU3Rh
dGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQ
cm9wZXJ0eVNsb3QmKTsKKworICAgICAgICBSZWZQdHI8U3R5bGVTaGVldExpc3Q+IG1faW1wbDsK
KyAgICAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsKKyAgICB9OworCisgICAgLy8gVGhlIGRv
Y3VtZW50IGlzIG9ubHkgdXNlZCBmb3IgZ2V0LXN0eWxlc2hlZXQtYnktbmFtZSAobWFrZSBvcHRp
b25hbCBpZiBuZWNlc3NhcnkpCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRl
KiwgU3R5bGVTaGVldExpc3QqLCBEb2N1bWVudCopOworCisgICAgY2xhc3MgSlNSR0JDb2xvciA6
IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7CisgICAgcHVibGljOgorICAgICAgICBKU1JHQkNvbG9y
KEtKUzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgY29sb3IpOworICAgICAgICB+SlNSR0JDb2xvcigp
OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3Rh
dGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgICAg
ICBLSlM6OkpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CisKKyAgICAgICAg
dmlydHVhbCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
JmluZm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87CisKKyAg
ICAgICAgZW51bSB7IFJlZCwgR3JlZW4sIEJsdWUgfTsKKworICAgICAgICB1bnNpZ25lZCBpbXBs
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCi0gIGNsYXNzIERPTVN0eWxlU2hlZXRMaXN0
IDogcHVibGljIERPTU9iamVjdCB7Ci0gIHB1YmxpYzoKLSAgICBET01TdHlsZVNoZWV0TGlzdChF
eGVjU3RhdGUqLCBXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdCosIFdlYkNvcmU6OkRvY3VtZW50Kik7
Ci0gICAgdmlydHVhbCB+RE9NU3R5bGVTaGVldExpc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tl
bikgY29uc3Q7Ci0gICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQotICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHZp
cnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICBXZWJDb3JlOjpTdHlsZVNoZWV0
TGlzdCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQotICAgIGVudW0geyBJ
dGVtLCBMZW5ndGggfTsKLSAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0KLSAgICBS
ZWZQdHI8V2ViQ29yZTo6U3R5bGVTaGVldExpc3Q+IG1faW1wbDsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6RG9jdW1lbnQ+IG1fZG9jOwotICB9OwotCi0gIC8vIFRoZSBkb2N1bWVudCBpcyBvbmx5IHVz
ZWQgZm9yIGdldC1zdHlsZXNoZWV0LWJ5LW5hbWUgKG1ha2Ugb3B0aW9uYWwgaWYgbmVjZXNzYXJ5
KQotICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0Kiwg
V2ViQ29yZTo6RG9jdW1lbnQqKTsKLQotICBjbGFzcyBET01SR0JDb2xvciA6IHB1YmxpYyBET01P
YmplY3QgewotICBwdWJsaWM6Ci0gICAgRE9NUkdCQ29sb3IoRXhlY1N0YXRlKiwgdW5zaWduZWQg
Y29sb3IpOwotICAgIH5ET01SR0JDb2xvcigpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwot
ICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25z
dDsKLSAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5Ci0gICAgdmlydHVhbCBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBpbmZvOwotICAgIGVudW0geyBSZWQsIEdyZWVuLCBCbHVlIH07Ci0gICAg
dW5zaWduZWQgaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLSAgcHJpdmF0ZToKLSAg
ICB1bnNpZ25lZCBtX2NvbG9yOwotICB9OwotCi0gIEpTVmFsdWUqIGdldERPTVJHQkNvbG9yKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIGNvbG9yKTsKLQotICBjbGFzcyBET01SZWN0IDogcHVibGljIERP
TU9iamVjdCB7Ci0gIHB1YmxpYzoKLSAgICBET01SZWN0KEV4ZWNTdGF0ZSosIFdlYkNvcmU6OlJl
Y3RJbXBsKiByKTsKLSAgICB+RE9NUmVjdCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwot
ICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25z
dDsKLSAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5Ci0gICAgdmlydHVhbCBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBpbmZvOwotICAgIGVudW0geyBUb3AsIFJpZ2h0LCBCb3R0b20sIExlZnQg
fTsKLSAgICBXZWJDb3JlOjpSZWN0SW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5n
ZXQoKTsgfQotICBwcml2YXRlOgotICAgIFJlZlB0cjxXZWJDb3JlOjpSZWN0SW1wbD4gbV9yZWN0
OwotICB9OworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1fY29sb3I7CisgICAgfTsK
IAotICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OlJlY3RJbXBsKik7CisgICAg
S0pTOjpKU1ZhbHVlKiBnZXRKU1JHQkNvbG9yKEtKUzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgY29s
b3IpOwogCi19IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYK
KyNlbmRpZiAvLyBranNfY3NzX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGls
aXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5Lm1t
CShyZXZpc2lvbiAyMzU0MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW1wb3J0ICJKU05vZGVJdGVyYXRv
ci5oIgogI2ltcG9ydCAiSlNOb2RlTGlzdC5oIgogI2ltcG9ydCAiSlNSYW5nZS5oIgorI2ltcG9y
dCAiSlNSZWN0LmgiCiAjaW1wb3J0ICJKU1N0eWxlU2hlZXQuaCIKICNpbXBvcnQgIkpTVHJlZVdh
bGtlci5oIgogI2ltcG9ydCAiSlNYUGF0aEV4cHJlc3Npb24uaCIKQEAgLTgyLDggKzgzLDExIEBA
IHN0YXRpYyBpbmxpbmUgaWQgY3JlYXRlRE9NV3JhcHBlcihLSlM6OkoKICAgICBXUkFQKE5hbWVk
Tm9kZU1hcCkKICAgICBXUkFQKE5vZGUpCiAgICAgV1JBUChOb2RlTGlzdCkKKyAgICBXUkFQKFJH
QkNvbG9yKQogICAgIFdSQVAoUmFuZ2UpCisgICAgV1JBUChSZWN0KQogICAgIFdSQVAoU3R5bGVT
aGVldCkKKyAgICBXUkFQKFN0eWxlU2hlZXRMaXN0KQogICAgIFdSQVAoWFBhdGhFeHByZXNzaW9u
KQogICAgIFdSQVAoWFBhdGhSZXN1bHQpCiAKQEAgLTk4LDkgKzEwMiw2IEBAIHN0YXRpYyBpbmxp
bmUgaWQgY3JlYXRlRE9NV3JhcHBlcihLSlM6OkoKICAgICAgICAgICAgIHJldHVybiBbb2JqY19n
ZXRDbGFzcygiRE9NIiAjY2xhc3NOYW1lKSBfd3JhcCMjY2xhc3NOYW1lOnN0YXRpY19jYXN0PERP
TSMjY2xhc3NOYW1lKj4ob2JqZWN0KS0+aW1wbCgpXTsKIAogICAgIFdSQVAoRXZlbnQpCi0gICAg
V1JBUChSR0JDb2xvcikKLSAgICBXUkFQKFJlY3QpCi0gICAgV1JBUChTdHlsZVNoZWV0TGlzdCkK
IAogICAgICN1bmRlZiBXUkFQCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjM1NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcg
QEAgc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQogICAgICMgV2hlbiB3ZSdyZSBmaW5pc2hlZCB3aXRo
IHRoZSBvbmUtZmlsZS1wZXItY2xhc3MKICAgICAjIHJlb3JnYW5pemF0aW9uLCB3ZSB3b24ndCBu
ZWVkIHRoZXNlIHNwZWNpYWwgY2FzZXMuCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1p
dGl2ZVR5cGUoJHR5cGUpIG9yIEF2b2lkSW5jbHVzaW9uT2ZUeXBlKCR0eXBlKQotICAgICAgICBv
ciAkdHlwZSBlcSAiRE9NU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IiBvciAkdHlwZSBl
cSAiUkdCQ29sb3IiIG9yICR0eXBlIGVxICJSZWN0IikgeworICAgICAgICBvciAkdHlwZSBlcSAi
RE9NU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IiBvciAkdHlwZSBlcSAiUkdCQ29sb3Ii
KSB7CiAgICAgfSBlbHNpZiAoJHR5cGUgPX4gL1NWR1BhdGhTZWcvKSB7CiAgICAgICAgICRqb2lu
ZWROYW1lID0gJHR5cGU7CiAgICAgICAgICRqb2luZWROYW1lID1+IHMvQWJzfFJlbC8vOwpAQCAt
MTM4Niw3ICsxMzg2LDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogCiAgICAgaWYgKCR0eXBlIGVx
ICJSR0JDb2xvciIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2Nzcy5oIn0gPSAxOwot
ICAgICAgICByZXR1cm4gImdldERPTVJHQkNvbG9yKGV4ZWMsICR2YWx1ZSkiOworICAgICAgICBy
ZXR1cm4gImdldEpTUkdCQ29sb3IoZXhlYywgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc1BvZFR5cGUoJHR5cGUpKSB7CkBAIC0xNDMxLDYgKzE0MzEsMTAgQEAg
c3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAkaW1wbEluY2x1ZGVzeyJOYW1lZEF0dHJNYXAu
aCJ9ID0gMTsKICAgICB9CiAKKyAgICBpZiAoJHR5cGUgZXEgIk5vZGVMaXN0IikgeworICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJOYW1lTm9kZUxpc3QuaCJ9ID0gMTsKKyAgICB9CisKICAgICBpZiAo
JHR5cGUgZXEgIkV2ZW50VGFyZ2V0IikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJFdmVudFRh
cmdldE5vZGUuaCJ9ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNFdmVudFRhcmdldE5v
ZGUuaCJ9ID0gMTsKQEAgLTE0MzgsMTMgKzE0NDIsNiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAg
ICAgfSBlbHNpZiAoJHR5cGUgZXEgIkV2ZW50IikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJr
anNfZXZlbnRzLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV2ZW50LmgifSA9IDE7
Ci0gICAgfSBlbHNpZiAoJHR5cGUgZXEgIk5vZGVMaXN0IikgewotICAgICAgICAkaW1wbEluY2x1
ZGVzeyJKUyR0eXBlLmgifSA9IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IiR0eXBlLmgifSA9
IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ik5hbWVOb2RlTGlzdC5oIn0gPSAxOwotICAgIH0g
ZWxzaWYgKCR0eXBlIGVxICJSZWN0IikgewotICAgICAgICAkaW1wbEluY2x1ZGVzeyJSZWN0SW1w
bC5oIn0gPSAxOwotICAgICAgICAkaW1wbEluY2x1ZGVzeyJranNfY3NzLmgifSA9IDE7CiAgICAg
fSBlbHNpZiAoJHR5cGUgZXEgIkhUTUxDYW52YXNFbGVtZW50IikgewogICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJranNfZG9tLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkhUTUxDYW52
YXNFbGVtZW50LmgifSA9IDE7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvck9iakMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JPYmpDLnBtCShyZXZpc2lvbiAyMzU0MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzMyLDcgKzMz
Miw2IEBAIHN1YiBHZXRJbXBsQ2xhc3NOYW1lCiAgICAgbXkgJG5hbWUgPSAkY29kZUdlbmVyYXRv
ci0+U3RyaXBNb2R1bGUoc2hpZnQpOwogCiAgICAgcmV0dXJuICJET01JbXBsZW1lbnRhdGlvbkZy
b250IiBpZiAkbmFtZSBlcSAiRE9NSW1wbGVtZW50YXRpb24iOwotICAgIHJldHVybiAiUmVjdElt
cGwiIGlmICRuYW1lIGVxICJSZWN0IjsKICAgICByZXR1cm4gIkRPTVdpbmRvdyIgaWYgJG5hbWUg
ZXEgIkFic3RyYWN0VmlldyI7CiAgICAgcmV0dXJuICRuYW1lOwogfQpAQCAtNTQ4LDEyICs1NDcs
NiBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoJHR5cGUgZXEgIlJlY3QiKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IlJlY3RJbXBs
LmgifSA9IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IkRPTSR0eXBlLmgifSA9IDE7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoJHR5cGUgZXEgIlJHQkNvbG9yIikgewogICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJDb2xvci5oIn0gPSAxOwogICAgICAgICAkaW1wbEluY2x1ZGVz
eyJET00kdHlwZS5oIn0gPSAxOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAJ
KHJldmlzaW9uIDIzNTQxKQorKysgV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSwxMSBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VW
YWx1ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUmVjdEltcGwu
aCIKKyNpbmNsdWRlICJSZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTQm9yZGVy
SW1hZ2VWYWx1ZTo6Q1NTQm9yZGVySW1hZ2VWYWx1ZShQYXNzUmVmUHRyPENTU0ltYWdlVmFsdWU+
IGltYWdlLCBQYXNzUmVmUHRyPFJlY3RJbXBsPiBpbWFnZVJlY3QsIGludCBob3Jpem9udGFsUnVs
ZSwgaW50IHZlcnRpY2FsUnVsZSkKK0NTU0JvcmRlckltYWdlVmFsdWU6OkNTU0JvcmRlckltYWdl
VmFsdWUoUGFzc1JlZlB0cjxDU1NJbWFnZVZhbHVlPiBpbWFnZSwgUGFzc1JlZlB0cjxSZWN0PiBp
bWFnZVJlY3QsIGludCBob3Jpem9udGFsUnVsZSwgaW50IHZlcnRpY2FsUnVsZSkKICAgICA6IG1f
aW1hZ2UoaW1hZ2UpCiAgICAgLCBtX2ltYWdlU2xpY2VSZWN0KGltYWdlUmVjdCkKICAgICAsIG1f
aG9yaXpvbnRhbFNpemVSdWxlKGhvcml6b250YWxSdWxlKQpJbmRleDogV2ViQ29yZS9jc3MvQ1NT
Qm9yZGVySW1hZ2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0JvcmRlcklt
YWdlVmFsdWUuaAkocmV2aXNpb24gMjM1NDEpCisrKyBXZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFn
ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxMiBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDU1NJbWFnZVZhbHVlOwotY2xhc3MgUmVjdEltcGw7CitjbGFzcyBS
ZWN0OwogCiBjbGFzcyBDU1NCb3JkZXJJbWFnZVZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsKIHB1
YmxpYzoKICAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKCk7Ci0gICAgQ1NTQm9yZGVySW1hZ2VWYWx1
ZShQYXNzUmVmUHRyPENTU0ltYWdlVmFsdWU+LCBQYXNzUmVmUHRyPFJlY3RJbXBsPiwgaW50IGhv
cml6b250YWxSdWxlLCBpbnQgdmVydGljYWxSdWxlKTsKKyAgICBDU1NCb3JkZXJJbWFnZVZhbHVl
KFBhc3NSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4sIFBhc3NSZWZQdHI8UmVjdD4sIGludCBob3Jpem9u
dGFsUnVsZSwgaW50IHZlcnRpY2FsUnVsZSk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0
KCkgY29uc3Q7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhlc2UgZm91
ciB2YWx1ZXMgYXJlIHVzZWQgdG8gbWFrZSAiY3V0cyIgaW4gdGhlIGltYWdlLiAgVGhleSBjYW4g
YmUgbnVtYmVycwogICAgIC8vIG9yIHBlcmNlbnRhZ2VzLgotICAgIFJlZlB0cjxSZWN0SW1wbD4g
bV9pbWFnZVNsaWNlUmVjdDsKKyAgICBSZWZQdHI8UmVjdD4gbV9pbWFnZVNsaWNlUmVjdDsKIAog
ICAgIC8vIFZhbHVlcyBmb3IgaG93IHRvIGhhbmRsZSB0aGUgc2NhbGluZy9zdHJldGNoaW5nL3Rp
bGluZyBvZiB0aGUgaW1hZ2Ugc2xpY2VzLgogICAgIGludCBtX2hvcml6b250YWxTaXplUnVsZTsg
Ly8gUnVsZSBmb3IgaG93IHRvIGFkanVzdCB0aGUgd2lkdGhzIG9mIHRoZSB0b3AvbWlkZGxlL2Jv
dHRvbQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkocmV2aXNpb24gMjM1NDEpCisr
KyBXZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
Nyw3ICsxMzcsNyBAQCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUGFzCiAg
ICAgbV92YWx1ZS5jb3VudGVyID0gYy5yZWxlYXNlUmVmKCk7CiB9CiAKLUNTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPFJlY3RJbXBsPiByKQorQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UmVjdD4gcikKICAgICA6IG1f
dHlwZShDU1NfUkVDVCkKIHsKICAgICBtX3ZhbHVlLnJlY3QgPSByLnJlbGVhc2VSZWYoKTsKQEAg
LTUyMiw3ICs1MjIsNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25z
CiAgICAgICAgICAgICAvLyBGSVhNRTogQWRkIGxpc3Qtc3R5bGUgYW5kIHNlcGFyYXRvcgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1JFQ1Q6IHsKLSAgICAgICAgICAgIFJl
Y3RJbXBsKiByZWN0VmFsID0gZ2V0UmVjdFZhbHVlKCk7CisgICAgICAgICAgICBSZWN0KiByZWN0
VmFsID0gZ2V0UmVjdFZhbHVlKCk7CiAgICAgICAgICAgICB0ZXh0ID0gInJlY3QoIjsKICAgICAg
ICAgICAgIHRleHQgKz0gcmVjdFZhbC0+dG9wKCktPmNzc1RleHQoKSArICIgIjsKICAgICAgICAg
ICAgIHRleHQgKz0gcmVjdFZhbC0+cmlnaHQoKS0+Y3NzVGV4dCgpICsgIiAiOwpJbmRleDogV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5oCShyZXZpc2lvbiAyMzU0MSkKKysrIFdlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgQ291bnRlcjsKIGNsYXNzIERhc2hib2FyZFJlZ2lvbjsKIGNsYXNz
IFBhaXI7Ci1jbGFzcyBSZWN0SW1wbDsKK2NsYXNzIFJlY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsK
IGNsYXNzIFN0cmluZ0ltcGw7CiAKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIENTU1By
aW1pdGl2ZVZhbHVlKGRvdWJsZSwgVW5pdFR5cGVzKTsKICAgICBDU1NQcmltaXRpdmVWYWx1ZShj
b25zdCBTdHJpbmcmLCBVbml0VHlwZXMpOwogICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQ
dHI8Q291bnRlcj4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UmVjdEltcGw+
KTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPFJlY3Q+KTsKICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSh1bnNpZ25lZCBjb2xvcik7IC8vIFJHQiB2YWx1ZQogICAgIENTU1ByaW1pdGl2
ZVZhbHVlKFBhc3NSZWZQdHI8UGFpcj4pOwogICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQ
dHI8RGFzaGJvYXJkUmVnaW9uPik7IC8vIEZJWE1FOiBXaHkgaXMgZGFzaGJvYXJkIHJlZ2lvbiBh
IHByaW1pdGl2ZSB2YWx1ZT8gVGhpcyBtYWtlcyBubyBzZW5zZS4KQEAgLTExNSw3ICsxMTUsNyBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgY29uc3Q7CiAKICAgICBDb3Vu
dGVyKiBnZXRDb3VudGVyVmFsdWUgKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IENTU19DT1VO
VEVSID8gMCA6IG1fdmFsdWUuY291bnRlcjsgfQotICAgIFJlY3RJbXBsKiBnZXRSZWN0VmFsdWUg
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IENTU19SRUNUID8gMCA6IG1fdmFsdWUucmVjdDsg
fQorICAgIFJlY3QqIGdldFJlY3RWYWx1ZSAoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gQ1NT
X1JFQ1QgPyAwIDogbV92YWx1ZS5yZWN0OyB9CiAgICAgdW5zaWduZWQgZ2V0UkdCQ29sb3JWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkdCQ09MT1IgPyAwIDogbV92YWx1ZS5y
Z2Jjb2xvcjsgfQogICAgIFBhaXIqIGdldFBhaXJWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSAhPSBDU1NfUEFJUiA/IDAgOiBtX3ZhbHVlLnBhaXI7IH0KIApAQCAtMTM5LDcgKzEzOSw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgZG91YmxlIG51bTsKICAgICAgICAgU3RyaW5nSW1wbCogc3Ry
aW5nOwogICAgICAgICBDb3VudGVyKiBjb3VudGVyOwotICAgICAgICBSZWN0SW1wbCogcmVjdDsK
KyAgICAgICAgUmVjdCogcmVjdDsKICAgICAgICAgdW5zaWduZWQgcmdiY29sb3I7CiAgICAgICAg
IFBhaXIqIHBhaXI7CiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiogcmVnaW9uOwpJbmRleDogV2Vi
Q29yZS9jc3MvRGFzaGJvYXJkUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvRGFz
aGJvYXJkUmVnaW9uLmgJKHJldmlzaW9uIDIzNTQxKQorKysgV2ViQ29yZS9jc3MvRGFzaGJvYXJk
UmVnaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMSBAQAogI2lmbmRlZiBEYXNo
Ym9hcmRSZWdpb25faAogI2RlZmluZSBEYXNoYm9hcmRSZWdpb25faAogCi0jaW5jbHVkZSAiUmVj
dEltcGwuaCIKKyNpbmNsdWRlICJSZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRGFzaGJvYXJkUmVnaW9uIDogcHVibGljIFJlY3RJbXBsIHsKK2NsYXNzIERhc2hib2FyZFJl
Z2lvbiA6IHB1YmxpYyBSZWN0IHsKIHB1YmxpYzoKICAgICBEYXNoYm9hcmRSZWdpb24oKSA6IG1f
aXNDaXJjbGUoMCksIG1faXNSZWN0YW5nbGUoMCkgeyB9CiAKSW5kZXg6IFdlYkNvcmUvY3NzL1Jl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9SZWN0LmgJKHJldmlzaW9uIDIzNTQxKQko
ZnJvbSBXZWJDb3JlL2Nzcy9SZWN0SW1wbC5oOjIzNTQxKQorKysgV2ViQ29yZS9jc3MvUmVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogKEMpIDE5OTktMjAw
MyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBSZWN0SW1wbF9oCisjZGVmaW5lIFJlY3RJ
bXBsX2gKKworI2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVl
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVjdEltcGwgOiBwdWJsaWMgU2hhcmVk
PFJlY3RJbXBsPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVjdEltcGwoKSB7IH0KKworICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQor
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQuZ2V0
KCk7IH0KKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogYm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9i
b3R0b20uZ2V0KCk7IH0KKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogbGVmdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVmdC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRUb3AoUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gdG9wKSB7IG1fdG9wID0gdG9wOyB9CisgICAgdm9pZCBzZXRSaWdodChQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByaWdodCkgeyBtX3JpZ2h0ID0gcmlnaHQ7IH0KKyAg
ICB2b2lkIHNldEJvdHRvbShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBib3R0b20pIHsg
bV9ib3R0b20gPSBib3R0b207IH0KKyAgICB2b2lkIHNldExlZnQoUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbGVmdCkgeyBtX2xlZnQgPSBsZWZ0OyB9CisKK3Byb3RlY3RlZDoKKyAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9wOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gbV9yaWdodDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYm90dG9tOwor
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2Nzcy9SZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9jc3MvUmVjdC5oCShyZXZpc2lvbiAyMzU0MSkKKysrIFdlYkNvcmUvY3NzL1JlY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogKEMpIDE5OTktMjAwMyBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjAsMzcgKzE4LDM3IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAq
LwogCi0jaWZuZGVmIFJlY3RJbXBsX2gKLSNkZWZpbmUgUmVjdEltcGxfaAorI2lmbmRlZiBSZWN0
X2gKKyNkZWZpbmUgUmVjdF9oCiAKLSNpbmNsdWRlICJTaGFyZWQuaCIKICNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIlNoYXJlZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFJlY3RJbXBsIDogcHVibGljIFNoYXJlZDxSZWN0SW1wbD4gewotcHVibGljOgot
ICAgIHZpcnR1YWwgflJlY3RJbXBsKCkgeyB9Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogdG9w
KCkgY29uc3QgeyByZXR1cm4gbV90b3AuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tLmdldCgpOyB9Ci0gICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQuZ2V0KCk7IH0KLQot
ICAgIHZvaWQgc2V0VG9wKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3Rv
cCA9IHRvcDsgfQotICAgIHZvaWQgc2V0UmlnaHQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gcmlnaHQpIHsgbV9yaWdodCA9IHJpZ2h0OyB9Ci0gICAgdm9pZCBzZXRCb3R0b20oUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYm90dG9tKSB7IG1fYm90dG9tID0gYm90dG9tOyB9Ci0g
ICAgdm9pZCBzZXRMZWZ0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9s
ZWZ0ID0gbGVmdDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBtX3RvcDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IG1fbGVmdDsKLX07CisgICAgY2xhc3MgUmVjdCA6IHB1YmxpYyBTaGFyZWQ8UmVjdD4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+UmVjdCgpIHsgfQorCisgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQorICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0Lmdl
dCgpOyB9CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3R0b20oKSBjb25zdCB7IHJldHVy
biBtX2JvdHRvbS5nZXQoKTsgfQorICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogbGVmdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVmdC5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgc2V0VG9wKFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRvcDsgfQorICAgICAgICB2
b2lkIHNldFJpZ2h0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJpZ2h0KSB7IG1fcmln
aHQgPSByaWdodDsgfQorICAgICAgICB2b2lkIHNldEJvdHRvbShQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBib3R0b20pIHsgbV9ib3R0b20gPSBib3R0b207IH0KKyAgICAgICAgdm9pZCBz
ZXRMZWZ0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVm
dDsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG1fdG9wOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7CisgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207CisgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0OworICAgIH07CiAKLX0gLy8gbmFtZXNwYWNlCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlY3RfaApJbmRleDogV2Vi
Q29yZS9jc3MvUmVjdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvUmVjdC5pZGwJKHJl
dmlzaW9uIDIzNTQxKQorKysgV2ViQ29yZS9jc3MvUmVjdC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSw3ICsxOSw3IEBACiAKIG1vZHVsZSBj
c3MgewogCi0gICAgaW50ZXJmYWNlIFJlY3QgeworICAgIGludGVyZmFjZSBbR2VuZXJhdGVDb25z
dHJ1Y3Rvcl0gUmVjdCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NQcmltaXRpdmVW
YWx1ZSAgdG9wOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTUHJpbWl0aXZlVmFsdWUg
IHJpZ2h0OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTUHJpbWl0aXZlVmFsdWUgIGJv
dHRvbTsKSW5kZXg6IFdlYkNvcmUvY3NzL1JlY3RJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvUmVjdEltcGwuaAkocmV2aXNpb24gMjM1NDEpCisrKyBXZWJDb3JlL2Nzcy9SZWN0SW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogKEMpIDE5OTkt
MjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZWN0SW1wbF9oCi0jZGVmaW5lIFJl
Y3RJbXBsX2gKLQotI2luY2x1ZGUgIlNoYXJlZC5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZh
bHVlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVjdEltcGwgOiBwdWJsaWMgU2hh
cmVkPFJlY3RJbXBsPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UmVjdEltcGwoKSB7IH0KLQot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsg
fQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQu
Z2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogYm90dG9tKCkgY29uc3QgeyByZXR1cm4g
bV9ib3R0b20uZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogbGVmdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGVmdC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRUb3AoUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gdG9wKSB7IG1fdG9wID0gdG9wOyB9Ci0gICAgdm9pZCBzZXRSaWdodChQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByaWdodCkgeyBtX3JpZ2h0ID0gcmlnaHQ7IH0K
LSAgICB2b2lkIHNldEJvdHRvbShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBib3R0b20p
IHsgbV9ib3R0b20gPSBib3R0b207IH0KLSAgICB2b2lkIHNldExlZnQoUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbGVmdCkgeyBtX2xlZnQgPSBsZWZ0OyB9Ci0KLXByb3RlY3RlZDoKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9wOwotICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gbV9yaWdodDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYm90dG9t
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL2Nzc3BhcnNlci5jcHAJKHJldmlzaW9uIDIzNTQxKQorKysgV2Vi
Q29yZS9jc3MvY3NzcGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0NSw3ICsyMjQ1LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hhcGUoaW50IHByb3BJZCwgYgogICAgIC8vIHJlY3Qo
dCwgciwgYiwgbCkgfHwgcmVjdCh0IHIgYiBsKQogICAgIGlmIChhcmdzLT5zaXplKCkgIT0gNCAm
JiBhcmdzLT5zaXplKCkgIT0gNykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlY3RJbXBs
ICpyZWN0ID0gbmV3IFJlY3RJbXBsKCk7CisgICAgUmVjdCAqcmVjdCA9IG5ldyBSZWN0KCk7CiAg
ICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgaW50IGkgPSAwOwogICAgIFZhbHVlICphID0gYXJn
cy0+Y3VycmVudCgpOwpAQCAtMjgxOCw3ICsyODE4LDcgQEAgc3RydWN0IEJvcmRlckltYWdlUGFy
c2VDb250ZXh0CiAgICAgICAgICAgICAgbV9sZWZ0ID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKG1f
dG9wLT5nZXRGbG9hdFZhbHVlKCksIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1fdG9w
LT5wcmltaXRpdmVUeXBlKCkpOwogICAgICAgICAgICAgIAogICAgICAgICAvLyBOb3cgYnVpbGQg
YSByZWN0IHZhbHVlIHRvIGhvbGQgYWxsIGZvdXIgb2Ygb3VyIHByaW1pdGl2ZSB2YWx1ZXMuCi0g
ICAgICAgIFJlY3RJbXBsKiByZWN0ID0gbmV3IFJlY3RJbXBsOworICAgICAgICBSZWN0KiByZWN0
ID0gbmV3IFJlY3Q7CiAgICAgICAgIHJlY3QtPnNldFRvcChtX3RvcCk7IHJlY3QtPnNldFJpZ2h0
KG1fcmlnaHQpOyByZWN0LT5zZXRCb3R0b20obV9ib3R0b20pOyByZWN0LT5zZXRMZWZ0KG1fbGVm
dCk7CiAKICAgICAgICAgLy8gRmlsbCBpbiBTVFJFVENIIGFzIHRoZSBkZWZhdWx0IGlmIGl0IHdh
c24ndCBzcGVjaWZpZWQuCkluZGV4OiBXZWJDb3JlL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkocmV2aXNpb24g
MjM1NDEpCisrKyBXZWJDb3JlL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNyArNTQsNyBAQAogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIk1l
ZGlhUXVlcnlFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJQYWlyLmgiCi0jaW5jbHVkZSAiUmVjdElt
cGwuaCIKKyNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNs
dWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgi
CkBAIC0zMTk2LDcgKzMxOTYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVy
dHkoaW50CiAgICAgICAgIH0gZWxzZSBpZiAoIXByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5
cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFQ1QpIHsKLSAgICAgICAgICAgIFJlY3RJ
bXBsKiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJlY3RWYWx1ZSgpOworICAgICAgICAgICAg
UmVjdCogcmVjdCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRSZWN0VmFsdWUoKTsKICAgICAgICAgICAg
IGlmICghcmVjdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0b3AgPSBj
b252ZXJ0VG9MZW5ndGgocmVjdC0+dG9wKCksIHN0eWxlKTsKQEAgLTM2NTYsNyArMzY1Niw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgLy8gU2V0IHVwIGEgbGVuZ3RoIGJveCB0byByZXByZXNlbnQgb3VyIGltYWdl
IHNsaWNlcy4KICAgICAgICAgICAgIExlbmd0aEJveCYgbCA9IGltYWdlLm1fc2xpY2VzOwotICAg
ICAgICAgICAgUmVjdEltcGwqIHIgPSBib3JkZXJJbWFnZS0+bV9pbWFnZVNsaWNlUmVjdC5nZXQo
KTsKKyAgICAgICAgICAgIFJlY3QqIHIgPSBib3JkZXJJbWFnZS0+bV9pbWFnZVNsaWNlUmVjdC5n
ZXQoKTsKICAgICAgICAgICAgIGlmIChyLT50b3AoKS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgICAgICBsLnRvcCA9IExl
bmd0aChyLT50b3AoKS0+Z2V0RmxvYXRWYWx1ZSgpLCBQZXJjZW50KTsKICAgICAgICAgICAgIGVs
c2UKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiAyMzU0MSkKKysrIFdlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIG1vZHVsZSB3aW5k
b3cgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFs
XSBib29sZWFuIGF1dGhvck9ubHkpOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91Ymxl
IGRldmljZVBpeGVsUmF0aW87CiAKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCiAg
ICAgICAgIC8vIEdsb2JhbCBjb25zdHJ1Y3RvcnMKICAgICAgICAgYXR0cmlidXRlIFN0eWxlU2hl
ZXRDb25zdHJ1Y3RvciBTdHlsZVNoZWV0OwogICAgICAgICBhdHRyaWJ1dGUgQ1NTU3R5bGVTaGVl
dENvbnN0cnVjdG9yIENTU1N0eWxlU2hlZXQ7CkBAIC02MSw2ICs2Miw3IEBAIG1vZHVsZSB3aW5k
b3cgewogICAgICAgICBhdHRyaWJ1dGUgTWVkaWFMaXN0Q29uc3RydWN0b3IgTWVkaWFMaXN0Owog
ICAgICAgICBhdHRyaWJ1dGUgQ291bnRlckNvbnN0cnVjdG9yIENvdW50ZXI7CiAgICAgICAgIGF0
dHJpYnV0ZSBDU1NSdWxlTGlzdENvbnN0cnVjdG9yIENTU1J1bGVMaXN0OworICAgICAgICBhdHRy
aWJ1dGUgUmVjdENvbnN0cnVjdG9yIFJlY3Q7CiAKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGUgY29tbWVudGVkLW91dCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBpbnRlcmZhY2VzIGxp
c3RlZCBpbiBET00gTGV2ZWwgMyBDb3JlIHNwZWNpZmljYXRpb24uCiAvLyAgICAgICAgYXR0cmli
dXRlIERPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yIERPTUV4Y2VwdGlvbjsKQEAgLTE3MCw2ICsxNzIs
NyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIFhQYXRoRXZhbHVhdG9yQ29u
c3RydWN0b3IgWFBhdGhFdmFsdWF0b3I7CiAgICAgICAgIGF0dHJpYnV0ZSBYUGF0aFJlc3VsdENv
bnN0cnVjdG9yIFhQYXRoUmVzdWx0OwogI2VuZGlmCisjZW5kaWYgLy8gZGVmaW5lZChMQU5HVUFH
RV9KQVZBU0NSSVBUKQogICAgIH07CiAKIH0KSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjM1NDYpCisrKyBXZWJLaXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDctMDYtMTUgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQwNTMKKyAgICAgICAgQXV0b2dlbmVyYXRlIEpTIGJpbmRpbmcgZm9yIFJlY3QK
KworICAgICAgICAtIEZpeCBjb25mbGljdHMgYnkgdXNpbmcgOjpSZWN0IGluc3RlYWQgb2YgUmVj
dC4KKworICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAg
ICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBzYXZlQW5kU2V0TmV3UG9ydFN0YXRl
Rm9yVXBkYXRlOl0pOgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IHNlbmRF
dmVudDpdKToKKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyB0ZWxsUXVpY2tU
aW1lVG9DaGlsbF0pOgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGludmFs
aWRhdGVSZWdpb246XSk6CisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgX3By
aW50ZWRQbHVnaW5CaXRtYXBdKToKKwogMjAwNy0wNi0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmLgpJbmRleDogV2Vi
S2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAyMzU0
MSkKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0
KGNvbnN0IE5TUmVjCiAjaWZuZGVmIE5QX05PX1FVSUNLRFJBVwogICAgIC8vIExvb2sgYXQgdGhl
IENhcmJvbiBwb3J0IHRvIGNvbnZlcnQgdG9wLWxlZnQtYmFzZWQgd2luZG93IGNvb3JkaW5hdGVz
IGludG8gdG9wLWxlZnQtYmFzZWQgY29udGVudCBjb29yZGluYXRlcy4KICAgICBpZiAoZHJhd2lu
Z01vZGVsID09IE5QRHJhd2luZ01vZGVsUXVpY2tEcmF3KSB7Ci0gICAgICAgIFJlY3QgcG9ydEJv
dW5kczsKKyAgICAgICAgOjpSZWN0IHBvcnRCb3VuZHM7CiAgICAgICAgIENHcmFmUHRyIHBvcnQg
PSBHZXRXaW5kb3dQb3J0KHdpbmRvd1JlZik7CiAgICAgICAgIEdldFBvcnRCb3VuZHMocG9ydCwg
JnBvcnRCb3VuZHMpOwogCkBAIC0zOTYsNyArMzk2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdl
dE5QUmVjdChjb25zdCBOU1JlYwogI2lmbmRlZiBOUF9OT19RVUlDS0RSQVcKICAgICAgICAgY2Fz
ZSBOUERyYXdpbmdNb2RlbFF1aWNrRHJhdzogewogICAgICAgICAgICAgLy8gU2V0IHVwIE5TX1Bv
cnQuCi0gICAgICAgICAgICBSZWN0IHBvcnRCb3VuZHM7CisgICAgICAgICAgICA6OlJlY3QgcG9y
dEJvdW5kczsKICAgICAgICAgICAgIENHcmFmUHRyIHBvcnQgPSBHZXRXaW5kb3dQb3J0KHdpbmRv
d1JlZik7CiAgICAgICAgICAgICBHZXRQb3J0Qm91bmRzKHBvcnQsICZwb3J0Qm91bmRzKTsKICAg
ICAgICAgICAgIG5Qb3J0LnFkUG9ydC5wb3J0ID0gcG9ydDsKQEAgLTQzMCw3ICs0MzAsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0KGNvbnN0IE5TUmVjCiAgICAgICAgICAgICAgICAg
dm9pZCogb2Zmc2NyZWVuRGF0YSA9IENHQml0bWFwQ29udGV4dEdldERhdGEoY3VycmVudENvbnRl
eHQpOwogICAgICAgICAgICAgICAgIGlmIChvZmZzY3JlZW5EYXRhKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgYW4gb2Zmc2NyZWVuIGJpdG1hcCwg
dGhlbiBjcmVhdGUgYSBHV29ybGQgZm9yIGl0LgotICAgICAgICAgICAgICAgICAgICBSZWN0IG9m
ZnNjcmVlbkJvdW5kczsKKyAgICAgICAgICAgICAgICAgICAgOjpSZWN0IG9mZnNjcmVlbkJvdW5k
czsKICAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuQm91bmRzLnRvcCA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgIG9mZnNjcmVlbkJvdW5kcy5sZWZ0ID0gMDsKICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2NyZWVuQm91bmRzLnJpZ2h0ID0gQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgoY3VycmVu
dENvbnRleHQpOwpAQCAtNzMzLDcgKzczMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJl
Y3QoY29uc3QgTlNSZWMKICAgICAvLyBOb3RlIHRoYXQgUGFpbnRSZWN0KCkgb25seSB3b3JrcyBm
b3IgUXVpY2tEcmF3IHBsdWdpbnM7IG90aGVyd2lzZSB0aGUgY3VycmVudCBRRCBwb3J0IGlzIHVu
ZGVmaW5lZC4KICAgICBpZiAoZHJhd2luZ01vZGVsID09IE5QRHJhd2luZ01vZGVsUXVpY2tEcmF3
ICYmICFpc1RyYW5zcGFyZW50ICYmIGV2ZW50LT53aGF0ID09IHVwZGF0ZUV2dCkgewogICAgICAg
ICBGb3JlQ29sb3IoZ3JlZW5Db2xvcik7Ci0gICAgICAgIGNvbnN0IFJlY3QgYmlnUmVjdCA9IHsg
LTEwMDAwLCAtMTAwMDAsIDEwMDAwLCAxMDAwMCB9OworICAgICAgICBjb25zdCA6OlJlY3QgYmln
UmVjdCA9IHsgLTEwMDAwLCAtMTAwMDAsIDEwMDAwLCAxMDAwMCB9OwogICAgICAgICBQYWludFJl
Y3QoJmJpZ1JlY3QpOwogICAgICAgICBGb3JlQ29sb3IoYmxhY2tDb2xvcik7CiAgICAgfQpAQCAt
MTczNiw3ICsxNzM2LDcgQEAgc3RhdGljIE9TU3RhdHVzIFRTTUV2ZW50SGFuZGxlcihFdmVudEhh
bgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIENHcmFmUHRyIHBvcnQgPSBHZXRXaW5kb3dQ
b3J0KHdpbmRvd1JlZik7Ci0gICAgUmVjdCBib3VuZHM7CisgICAgOjpSZWN0IGJvdW5kczsKICAg
ICBHZXRQb3J0Qm91bmRzKHBvcnQsICZib3VuZHMpOwogICAgIFdLQ2FsbERyYXdpbmdOb3RpZmlj
YXRpb24ocG9ydCwgJmJvdW5kcyk7CiB9CkBAIC0yNDExLDcgKzI0MTEsNyBAQCBzdGF0aWMgT1NT
dGF0dXMgVFNNRXZlbnRIYW5kbGVyKEV2ZW50SGFuCiAjaWZuZGVmIE5QX05PX1FVSUNLRFJBVwog
ICAgICAgICBjYXNlIE5QRHJhd2luZ01vZGVsUXVpY2tEcmF3OgogICAgICAgICB7Ci0gICAgICAg
ICAgICBSZWN0IHFkUmVjdDsKKyAgICAgICAgICAgIDo6UmVjdCBxZFJlY3Q7CiAgICAgICAgICAg
ICBHZXRSZWdpb25Cb3VuZHMoKE5QUURSZWdpb24paW52YWxpZFJlZ2lvbiwgJnFkUmVjdCk7CiAg
ICAgICAgICAgICBpbnZhbGlkUmVjdCA9IE5TTWFrZVJlY3QocWRSZWN0LmxlZnQsIHFkUmVjdC50
b3AsIHFkUmVjdC5yaWdodCAtIHFkUmVjdC5sZWZ0LCBxZFJlY3QuYm90dG9tIC0gcWRSZWN0LnRv
cCk7CiAgICAgICAgIH0KQEAgLTI2OTgsNyArMjY5OCw3IEBAIHN0YXRpYyBPU1N0YXR1cyBUU01F
dmVudEhhbmRsZXIoRXZlbnRIYW4KICAgICBBU1NFUlQoYml0bWFwKTsKICAgICAKICAgICAvLyBD
cmVhdGUgYSBHV29ybGQgd2l0aCB0aGUgc2FtZSB1bmRlcmx5aW5nIGJ1ZmZlciBpbnRvIHdoaWNo
IHRoZSBwbHVnaW4gY2FuIGRyYXcKLSAgICBSZWN0IHByaW50R1dvcmxkQm91bmRzOworICAgIDo6
UmVjdCBwcmludEdXb3JsZEJvdW5kczsKICAgICBTZXRSZWN0KCZwcmludEdXb3JsZEJvdW5kcywg
MCwgMCwgd2luZG93LndpZHRoLCB3aW5kb3cuaGVpZ2h0KTsKICAgICBHV29ybGRQdHIgcHJpbnRH
V29ybGQ7CiAgICAgaWYgKE5ld0dXb3JsZEZyb21QdHIoJnByaW50R1dvcmxkLApJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMjM1NDYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMiBAQAorMjAwNy0wNi0xNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZSB0ZXN0IGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA1Mwor
ICAgICAgICBBdXRvZ2VuZXJhdGUgSlMgYmluZGluZyBmb3IgUmVjdAorCisgICAgICAgICogZmFz
dC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKwogMjAwNy0wNi0x
NCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMzU0MSkK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw2ICs4MTgsOCBAQCB3aW5kb3cuUmFuZ2VFeGNl
cHRpb24uSU5WQUxJRF9OT0RFX1RZUEVfCiB3aW5kb3cuUmFuZ2VFeGNlcHRpb24ucHJvdG90eXBl
IFtvYmplY3QgUmFuZ2VFeGNlcHRpb25Qcm90b3R5cGVdCiB3aW5kb3cuUmFuZ2VFeGNlcHRpb24u
cHJvdG90eXBlLkJBRF9CT1VOREFSWVBPSU5UU19FUlIgW251bWJlcl0KIHdpbmRvdy5SYW5nZUV4
Y2VwdGlvbi5wcm90b3R5cGUuSU5WQUxJRF9OT0RFX1RZUEVfRVJSIFtudW1iZXJdCit3aW5kb3cu
UmVjdCBbb2JqZWN0IFJlY3RDb25zdHJ1Y3Rvcl0KK3dpbmRvdy5SZWN0LnByb3RvdHlwZSBbb2Jq
ZWN0IFJlY3RQcm90b3R5cGVdCiB3aW5kb3cuUmVmZXJlbmNlRXJyb3IgW2Z1bmN0aW9uXQogd2lu
ZG93LlN0eWxlU2hlZXQgW3ByaW50ZWQgYWJvdmUgYXMgd2luZG93LkNTU1N0eWxlU2hlZXRdCiB3
aW5kb3cuU3ludGF4RXJyb3IgW2Z1bmN0aW9uXQo=
</data>
<flag name="review"
          id="6208"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>