<?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>78245</bug_id>
          
          <creation_ts>2012-02-09 09:18:34 -0800</creation_ts>
          <short_desc>Web Inspector: rename DOMEditor to DOMPatchSupport, move undoable actions from InspectorDOMAgent to the new DOMEditor.</short_desc>
          <delta_ts>2012-02-09 09:42:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rakuco</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>553218</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-09 09:18:34 -0800</bug_when>
    <thetext>Internal refactoring, patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553219</commentid>
    <comment_count>1</comment_count>
      <attachid>126316</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-09 09:21:37 -0800</bug_when>
    <thetext>Created attachment 126316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553235</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-09 09:42:31 -0800</bug_when>
    <thetext>Committed r107257: &lt;http://trac.webkit.org/changeset/107257&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126316</attachid>
            <date>2012-02-09 09:21:37 -0800</date>
            <delta_ts>2012-02-09 09:25:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78245-20120209212134.patch</filename>
            <type>text/plain</type>
            <size>80492</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FiYmYwNDUwMTZhZTU4
YTg5M2FhOWRmMzEzZThmNzUwYWI2N2ZkYi4uNmViNjViZDJjZDFjNzk1MDJkNDM1NzVkNjdlMmY2
ZTcwYjlhZDdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk2IEBACiAyMDEyLTAyLTA5ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAorICAgICAgICBXZWIgSW5zcGVjdG9y
OiByZW5hbWUgRE9NRWRpdG9yIHRvIERPTVBhdGNoU3VwcG9ydCwgbW92ZSB1bmRvYWJsZSBhY3Rp
b25zIGZyb20KKyAgICAgICAgSW5zcGVjdG9yRE9NQWdlbnQgdG8gdGhlIG5ldyBET01FZGl0b3Iu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODI0NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJn
ZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0RPTUVkaXRvci5jcHA6CisgICAgICAgIChET01F
ZGl0b3I6OkRPTUFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpET01FZGl0b3I6OkRPTUFjdGlv
bjo6RE9NQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUVkaXRvcjo6RE9NQWN0aW9uOjpw
ZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUVkaXRvcjo6RE9NQWN0aW9uOjp1bmRvKToK
KyAgICAgICAgKERPTUVkaXRvcjo6UmVtb3ZlQ2hpbGRBY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NRWRpdG9yOjpSZW1vdmVDaGlsZEFjdGlvbjo6UmVtb3ZlQ2hpbGRBY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NRWRpdG9yOjpSZW1vdmVDaGlsZEFjdGlvbjo6cGVyZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01FZGl0b3I6OlJlbW92ZUNoaWxkQWN0aW9uOjp1bmRvKToKKyAg
ICAgICAgKERPTUVkaXRvcjo6SW5zZXJ0QmVmb3JlQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUVkaXRvcjo6SW5zZXJ0QmVmb3JlQWN0aW9uOjpJbnNlcnRCZWZvcmVBY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NRWRpdG9yOjpJbnNlcnRCZWZvcmVBY3Rpb246OnBlcmZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NRWRpdG9yOjpJbnNlcnRCZWZvcmVBY3Rpb246OnVuZG8pOgor
ICAgICAgICAoRE9NRWRpdG9yOjpSZW1vdmVBdHRyaWJ1dGVBY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRWRpdG9yOjpSZW1vdmVBdHRyaWJ1dGVBY3Rpb246OlJlbW92ZUF0dHJpYnV0ZUFj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpET01FZGl0b3I6OlJlbW92ZUF0dHJpYnV0ZUFjdGlv
bjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpET01FZGl0b3I6OlJlbW92ZUF0dHJpYnV0
ZUFjdGlvbjo6dW5kbyk6CisgICAgICAgIChET01FZGl0b3I6OlNldEF0dHJpYnV0ZUFjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpET01FZGl0b3I6OlNldEF0dHJpYnV0ZUFjdGlvbjo6U2V0QXR0
cmlidXRlQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUVkaXRvcjo6U2V0QXR0cmlidXRl
QWN0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUVkaXRvcjo6U2V0QXR0cmli
dXRlQWN0aW9uOjp1bmRvKToKKyAgICAgICAgKERPTUVkaXRvcjo6U2V0T3V0ZXJIVE1MQWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUVkaXRvcjo6U2V0T3V0ZXJIVE1MQWN0aW9uOjpTZXRP
dXRlckhUTUxBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RE9NRWRpdG9yOjpTZXRPdXRlckhU
TUxBY3Rpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RE9NRWRpdG9yOjpTZXRPdXRl
ckhUTUxBY3Rpb246OnVuZG8pOgorICAgICAgICAoV2ViQ29yZTo6RE9NRWRpdG9yOjpTZXRPdXRl
ckhUTUxBY3Rpb246Om5ld05vZGUpOgorICAgICAgICAoRE9NRWRpdG9yOjpSZXBsYWNlV2hvbGVU
ZXh0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUVkaXRvcjo6UmVwbGFjZVdob2xlVGV4
dEFjdGlvbjo6UmVwbGFjZVdob2xlVGV4dEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpET01F
ZGl0b3I6OlJlcGxhY2VXaG9sZVRleHRBY3Rpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NRWRpdG9yOjpSZXBsYWNlV2hvbGVUZXh0QWN0aW9uOjp1bmRvKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTUVkaXRvcjo6RE9NRWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRWRpdG9yOjp+RE9NRWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUVkaXRvcjo6aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUVkaXRvcjo6cmVt
b3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRWRpdG9yOjpzZXRBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NRWRpdG9yOjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NRWRpdG9yOjpzZXRPdXRlckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
RWRpdG9yOjpyZXBsYWNlV2hvbGVUZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NRWRpdG9y
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERPTUVkaXRvcik6CisgICAgICAgICog
aW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01FZGl0b3IuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBw
b3J0OjpET01QYXRjaFN1cHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0
Ojp+RE9NUGF0Y2hTdXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6
cGF0Y2hEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6OnBhdGNo
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0
OjpkaWZmKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENo
aWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6aW5zZXJ0QmVmb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVBhdGNoU3VwcG9ydDo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0OjptYXJrTm9kZUFzVXNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpET01QYXRjaFN1cHBvcnQ6OmR1bXBNYXApOgorICAgICAgICAqIGluc3BlY3Rvci9ET01Q
YXRjaFN1cHBvcnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVk
aXRvci5oLgorICAgICAgICAoRE9NUGF0Y2hTdXBwb3J0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpzZXRGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
Y2xlYXJGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVz
QXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6bW92ZVRvKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVj
dG9yRE9NQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZXREb2N1bWVudENvbnRl
bnQpOgorCisyMDEyLTAyLTA5ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4K
KwogICAgICAgICBXZWIgSW5zcGVjdG9yOiBmaXggc2V0T3V0ZXJIVE1MIGZvciB0aGUgY2FzZSB0
aGF0IGFkZHMgLyByZW1vdmVzIGR1cGxpY2F0ZS4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MjM1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzU4
MzY2OGVmY2RkY2Y2ZTBmNTM4NzY4YzI0YTMyNTRiYTA4ZTkxNC4uNDNhN2YyMTIxMDcwYmJlOTBh
NDAwZjQzM2M2M2JhZTIzOWJiNjY4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTg3OCw2ICs4
NzgsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hV
dGlscy5jcHAKICAgICBpbnNwZWN0b3IvRE9NRWRpdG9yLmNwcAogICAgIGluc3BlY3Rvci9ET01O
b2RlSGlnaGxpZ2h0ZXIuY3BwCisgICAgaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKICAg
ICBpbnNwZWN0b3IvSWRlbnRpZmllcnNGYWN0b3J5LmNwcAogICAgIGluc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdC5jcHAKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzA4Y2IyNWE4MWM2ZjVjZWZiOGM2MTgyZDQzNzRj
NTVhMTFiNDBlOC4uNThkOWU5YTRlYTAwMTRmNDE4MDZmYzRlODRhNzhkMzIzZTU3ZGJhMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMzQ0LDYgKzIzNDQsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuaCBcCiAJ
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBcCisJU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVdy
YXBwZXJWaXNpdG9yLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JZGVudGlmaWVyc0Zh
Y3RvcnkuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSWRlbnRpZmllcnNGYWN0b3J5
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKaW5kZXggNzU4ZGQ0YmQyZDg4YTJlNmVhYzc1NDQ5YjY2YWQyMzdkMzI1
ZDc1OS4uMGViZTRlNDkxMWQyYmNhNWUwYzczOWM3MDgxZTc2Y2U2NGI1MDhjYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC04NTUsNiArODU1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0NvbnRl
bnRTZWFyY2hVdGlscy5jcHAgXAogICAgIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwIFwKICAgICBp
bnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBcCisgICAgaW5zcGVjdG9yL0RPTVBhdGNo
U3VwcG9ydC5jcHAgXAogICAgIGluc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcCBcCkBAIC0xOTIwLDYgKzE5MjEsNyBAQCBIRUFERVJTICs9IFwKICAgICBp
bnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmggXAogICAgIGluc3BlY3Rvci9ET01FZGl0b3Iu
aCBcCiAgICAgaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIFwKKyAgICBpbnNwZWN0b3Iv
RE9NUGF0Y2hTdXBwb3J0LmggXAogICAgIGluc3BlY3Rvci9ET01XcmFwcGVyVmlzaXRvci5oIFwK
ICAgICBpbnNwZWN0b3IvSWRlbnRpZmllcnNGYWN0b3J5LmggXAogICAgIGluc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjNTlhY2RjOTczZDNkNDI2OWIyMzkx
Yzc0NjUzMjYzNDFkYjJhZmFjLi45ZmIzOWE0MjYwN2FmMTM3NmRlZGYwMmM0MjNkNmU4YWI1ZmRk
ZDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMzQzLDYgKzIzNDMsOCBAQAogICAgICAgICAgICAg
J2luc3BlY3Rvci9ET01FZGl0b3IuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0RPTU5vZGVI
aWdobGlnaHRlci5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0
ZXIuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAnLAorICAg
ICAgICAgICAgJ2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL0RPTVdyYXBwZXJWaXNpdG9yLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JZGVu
dGlmaWVyc0ZhY3RvcnkuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSWRlbnRpZmllcnNG
YWN0b3J5LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCA3OTYyMzllYTJiMmMxZWNiOWJlNTNhNDJhMDI1ZjI2MGFhNmMyN2JkLi41N2ExMTc1
MTYyNjE0OTBiZmI4ZDVkYjkyMjhiNTc1OGZkNGFlMTFkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNzExNTQsNiArNzExNTQsMTQgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XERPTVBhdGNoU3VwcG9ydC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxET01QYXRjaFN1cHBvcnQuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXERPTVdyYXBw
ZXJWaXNpdG9yLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDBkMWM0OTQwODEzMDg0N2ZjYjEz
ZTFiNjRjZGM3MGFhZmEzMmQ2M2UuLjAyMDQyMjIwNDUyYTJlYzVjZTQzNTBlYTU4ZGJjYjRhNDYw
ZWMzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTE4OTAsNiArMTg5MCw4IEBACiAJCTdBMjQ1ODdDMTAyMUVBRjQwMDBBMDBB
QSAvKiBJbnNwZWN0b3JET01BZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0EyNDU4N0ExMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3RvckRPTUFn
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0E1NDg1N0YxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1NDg1N0QxNEUwMkQ1MTAw
NkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuY3BwICovOyB9OwogCQk3QTU0ODU4MDE0RTAyRDUx
MDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1NDg1N0UxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rv
ckhpc3RvcnkuaCAqLzsgfTsKKwkJN0E1NDg4MTcxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNo
U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0E1NDg4MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICovOyB9OworCQk3
QTU0ODgxODE0RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNTQ4ODE2MTRFNDMyQTEwMDZB
RTA1QSAvKiBET01QYXRjaFN1cHBvcnQuY3BwICovOyB9OwogCQk3QTY3NEJEQjBGOUVCRjRFMDA2
Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNjc0QkQ5MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdl
R3JvdXBMb2FkRGVmZXJyZXIuY3BwICovOyB9OwogCQk3QTY3NEJEQzBGOUVCRjRFMDA2Q0YwOTkg
LyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmggKi87IH07CiAJCTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudC5jcHAgKi87IH07CkBAIC04NzczLDYgKzg3NzUsOCBAQAogCQk3QTI0NTg3QTEwMjFF
QUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yRE9NQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0E1NDg1N0QxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySGlzdG9yeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNTQ4NTdFMTRFMDJENTEwMDZBRTA1QSAv
KiBJbnNwZWN0b3JIaXN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
c3BlY3Rvckhpc3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E1NDg4MTUx
NEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01QYXRjaFN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0E1NDg4MTYxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01QYXRjaFN1cHBvcnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTU2M0U1NDEyREUzMkIwMDBGNDUzNkQgLyog
SW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5qZWN0ZWRTY3JpcHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E1
NjNGOTUxMkRGNUM5MTAwRjQ1MzZEIC8qIEluamVjdGVkU2NyaXB0U291cmNlLmpzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNjc0QkQ5MEY5RUJGNEUwMDZDRjA5OSAv
KiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE0MDEwLDYgKzE0MDE0LDggQEAKIAkJCQk3QUFCQTI1ODE0QkM2MTMzMDBBQTlB
MTEgLyogRE9NRWRpdG9yLmggKi8sCiAJCQkJNEYxNDQyMjYxMzM5RkQ2MjAwRTBENkY4IC8qIERP
TU5vZGVIaWdobGlnaHRlci5jcHAgKi8sCiAJCQkJNEYxNDQyMjcxMzM5RkQ2MjAwRTBENkY4IC8q
IERPTU5vZGVIaWdobGlnaHRlci5oICovLAorCQkJCTdBNTQ4ODE1MTRFNDMyQTEwMDZBRTA1QSAv
KiBET01QYXRjaFN1cHBvcnQuaCAqLywKKwkJCQk3QTU0ODgxNjE0RTQzMkExMDA2QUUwNUEgLyog
RE9NUGF0Y2hTdXBwb3J0LmNwcCAqLywKIAkJCQlGMzVBRTVBQjE0OTI1RjVCMDA0RDU3NzYgLyog
RE9NV3JhcHBlclZpc2l0b3IuaCAqLywKIAkJCQk1OTEzQTIzRjEzRDQ5RUJBMDBGNUIwNUMgLyog
SWRlbnRpZmllcnNGYWN0b3J5LmNwcCAqLywKIAkJCQk1OTEzQTI0MDEzRDQ5RUJBMDBGNUIwNUMg
LyogSWRlbnRpZmllcnNGYWN0b3J5LmggKi8sCkBAIC0yNDE1NSw2ICsyNDE2MSw3IEBACiAJCQkJ
MUFBQURERTkxNERDOERGODAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlTWFjLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxMEZCMDg0QjE0RTE1QzdFMDBBM0RCOTggLyogUHVibGljVVJMTWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3Bl
Y3Rvckhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTdBNTQ4ODE3MTRFNDMyQTEwMDZBRTA1
QSAvKiBET01QYXRjaFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjcwOTIsNiArMjcwOTks
NyBAQAogCQkJCTFBQUFEREU4MTREQzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBNTQ4NTdGMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNw
ZWN0b3JIaXN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQUE4RDBBMTRENzFCMkUwMDYx
RUE2MCAvKiBQbGF0Zm9ybUNsb2NrQ00ubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QTU0ODgxODE0
RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmNwcAppbmRleCBmNzJhNWNlN2MyZGEyZjI0Yjcx
MmViYjU1ZmQwMDQ3ZWMzMzhlYjJhLi5mMTUzYzkwZDlhYTNjOTRlMjAwYTFiMTliYmU1ODkxNmVi
MzZlNWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmNwcApAQCAtMzMsNDYx
ICszMywzMDUgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKLSNpbmNsdWRlICJBdHRyaWJ1
dGUuaCIKLSNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJET01QYXRjaFN1cHBvcnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNp
bmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnRQYXJzZXIuaCIK
LSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgogI2luY2x1ZGUg
Ik5vZGUuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisKKyNpbmNsdWRlICJtYXJrdXAuaCIKIAotI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvU0hBMS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBIVE1MTmFtZXM6OmJvZHlU
YWc7Ci11c2luZyBIVE1MTmFtZXM6OmhlYWRUYWc7Ci11c2luZyBIVE1MTmFtZXM6Omh0bWxUYWc7
CitjbGFzcyBET01FZGl0b3I6OkRPTUFjdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JIaXN0b3J5OjpB
Y3Rpb24geworcHVibGljOgorICAgIERPTUFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUpIDogSW5z
cGVjdG9ySGlzdG9yeTo6QWN0aW9uKG5hbWUpIHsgfQogCi1zdHJ1Y3QgRE9NRWRpdG9yOjpEaWdl
c3QgewotICAgIGV4cGxpY2l0IERpZ2VzdChOb2RlKiBub2RlKSA6IG1fbm9kZShub2RlKSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCisgICAg
eworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBw
ZXJmb3JtKGVjKTsKKyAgICAgICAgaWYgKGVjKSB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICAgICAgKmVycm9yU3RyaW5nID0g
ZGVzY3JpcHRpb24ubmFtZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICYmICFl
YzsKKyAgICB9CiAKLSAgICBTdHJpbmcgbV9zaGExOwotICAgIFN0cmluZyBtX2F0dHJzU0hBMTsK
LSAgICBOb2RlKiBtX25vZGU7Ci0gICAgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4gbV9jaGlsZHJl
bjsKLX07CisgICAgdmlydHVhbCBib29sIHVuZG8oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQor
ICAgIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGJvb2wgcmVzdWx0
ID0gdW5kbyhlYyk7CisgICAgICAgIGlmIChlYykgeworICAgICAgICAgICAgRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgICAgICplcnJvclN0cmluZyA9
IGRlc2NyaXB0aW9uLm5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiAh
ZWM7CisgICAgfQogCi1ET01FZGl0b3I6OkRPTUVkaXRvcihEb2N1bWVudCogZG9jdW1lbnQpIDog
bV9kb2N1bWVudChkb2N1bWVudCkgeyB9CisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0
aW9uQ29kZSYpID0gMDsKIAotRE9NRWRpdG9yOjp+RE9NRWRpdG9yKCkgeyB9CisgICAgdmlydHVh
bCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYpID0gMDsKIAotdm9pZCBET01FZGl0b3I6OnBhdGNo
RG9jdW1lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXApCi17Ci0gICAgUmVmUHRyPEhUTUxEb2N1bWVu
dD4gbmV3RG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZSgwLCBLVVJMKCkpOwotICAgIFJl
ZlB0cjxEb2N1bWVudFBhcnNlcj4gcGFyc2VyID0gSFRNTERvY3VtZW50UGFyc2VyOjpjcmVhdGUo
bmV3RG9jdW1lbnQuZ2V0KCksIGZhbHNlKTsKLSAgICBwYXJzZXItPmluc2VydChtYXJrdXApOyAv
LyBVc2UgaW5zZXJ0KCkgc28gdGhhdCB0aGUgcGFyc2VyIHdpbGwgbm90IHlpZWxkLgotICAgIHBh
cnNlci0+ZmluaXNoKCk7Ci0gICAgcGFyc2VyLT5kZXRhY2goKTsKLQotICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIE93blB0cjxEaWdlc3Q+IG9sZEluZm8gPSBjcmVhdGVEaWdlc3QobV9k
b2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDApOwotICAgIE93blB0cjxEaWdlc3Q+IG5ld0lu
Zm8gPSBjcmVhdGVEaWdlc3QobmV3RG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAmbV91bnVz
ZWROb2Rlc01hcCk7Ci0gICAgaW5uZXJQYXRjaE5vZGUob2xkSW5mby5nZXQoKSwgbmV3SW5mby5n
ZXQoKSwgZWMpOwotCi0gICAgaWYgKGVjKSB7Ci0gICAgICAgIC8vIEZhbGwgYmFjayB0byByZXdy
aXRlLgotICAgICAgICBtX2RvY3VtZW50LT53cml0ZShtYXJrdXApOwotICAgICAgICBtX2RvY3Vt
ZW50LT5jbG9zZSgpOwotICAgIH0KLX0KK3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+IG1fcGFy
ZW50Tm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBtX2Fu
Y2hvck5vZGU7Cit9OwogCi1Ob2RlKiBET01FZGl0b3I6OnBhdGNoTm9kZShOb2RlKiBub2RlLCBj
b25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRG9uJ3Qg
cGFyc2UgPGh0bWw+IGFzIGEgZnJhZ21lbnQuCi0gICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2Rl
KCkgfHwgKG5vZGUtPnBhcmVudE5vZGUoKSAmJiBub2RlLT5wYXJlbnROb2RlKCktPmlzRG9jdW1l
bnROb2RlKCkpKSB7Ci0gICAgICAgIHBhdGNoRG9jdW1lbnQobWFya3VwKTsKLSAgICAgICAgcmV0
dXJuIDA7CitjbGFzcyBET01FZGl0b3I6OlJlbW92ZUNoaWxkQWN0aW9uIDogcHVibGljIERPTUVk
aXRvcjo6RE9NQWN0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW1vdmVDaGlsZEFj
dGlvbik7CitwdWJsaWM6CisgICAgUmVtb3ZlQ2hpbGRBY3Rpb24oTm9kZSogcGFyZW50Tm9kZSwg
Tm9kZSogbm9kZSkKKyAgICAgICAgOiBET01FZGl0b3I6OkRPTUFjdGlvbigiUmVtb3ZlQ2hpbGQi
KQorICAgICAgICAsIG1fcGFyZW50Tm9kZShwYXJlbnROb2RlKQorICAgICAgICAsIG1fbm9kZShu
b2RlKQorICAgIHsKICAgICB9CiAKLSAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5w
cmV2aW91c1NpYmxpbmcoKTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7Ci0gICAgZnJhZ21lbnQtPnBh
cnNlSFRNTChtYXJrdXAsIG5vZGUtPnBhcmVudEVsZW1lbnQoKSA/IG5vZGUtPnBhcmVudEVsZW1l
bnQoKSA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKLQotICAgIC8vIENvbXBvc2Ug
dGhlIG9sZCBsaXN0LgotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBub2RlLT5wYXJl
bnROb2RlKCk7Ci0gICAgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4gb2xkTGlzdDsKLSAgICBmb3Ig
KE5vZGUqIGNoaWxkID0gcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgb2xkTGlzdC5hcHBlbmQoY3JlYXRlRGlnZXN0
KGNoaWxkLCAwKSk7Ci0KLSAgICAvLyBDb21wb3NlIHRoZSBuZXcgbGlzdC4KLSAgICBTdHJpbmcg
bWFya3VwQ29weSA9IG1hcmt1cDsKLSAgICBtYXJrdXBDb3B5Lm1ha2VMb3dlcigpOwotICAgIFZl
Y3RvcjxPd25QdHI8RGlnZXN0PiA+IG5ld0xpc3Q7Ci0gICAgZm9yIChOb2RlKiBjaGlsZCA9IHBh
cmVudE5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbm9kZTsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkKLSAgICAgICAgbmV3TGlzdC5hcHBlbmQoY3JlYXRlRGlnZXN0KGNoaWxkLCAw
KSk7Ci0gICAgZm9yIChOb2RlKiBjaGlsZCA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aGFz
VGFnTmFtZShoZWFkVGFnKSAmJiAhY2hpbGQtPmZpcnN0Q2hpbGQoKSAmJiBtYXJrdXBDb3B5LmZp
bmQoIjwvaGVhZD4iKSA9PSBub3RGb3VuZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBIVE1M
NSBwYXJzZXIgaW5zZXJ0cyBlbXB0eSA8aGVhZD4gdGFnIHdoZW5ldmVyIGl0IHBhcnNlcyA8Ym9k
eT4KLSAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGJvZHlUYWcpICYmICFjaGlsZC0+Zmly
c3RDaGlsZCgpICYmIG1hcmt1cENvcHkuZmluZCgiPC9ib2R5PiIpID09IG5vdEZvdW5kKQotICAg
ICAgICAgICAgY29udGludWU7IC8vIEhUTUw1IHBhcnNlciBpbnNlcnRzIGVtcHR5IDxib2R5PiB0
YWcgd2hlbmV2ZXIgaXQgcGFyc2VzIDwvaGVhZD4KLSAgICAgICAgbmV3TGlzdC5hcHBlbmQoY3Jl
YXRlRGlnZXN0KGNoaWxkLCAmbV91bnVzZWROb2Rlc01hcCkpOworICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgbV9hbmNob3JOb2RlID0g
bV9ub2RlLT5uZXh0U2libGluZygpOworICAgICAgICByZXR1cm4gbV9wYXJlbnROb2RlLT5yZW1v
dmVDaGlsZChtX25vZGUuZ2V0KCksIGVjKTsKICAgICB9Ci0gICAgZm9yIChOb2RlKiBjaGlsZCA9
IG5vZGUtPm5leHRTaWJsaW5nKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KQotICAgICAgICBuZXdMaXN0LmFwcGVuZChjcmVhdGVEaWdlc3QoY2hpbGQsIDApKTsKLQotICAg
IGlubmVyUGF0Y2hDaGlsZHJlbihwYXJlbnROb2RlLCBvbGRMaXN0LCBuZXdMaXN0LCBlYyk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIC8vIEZhbGwgYmFjayB0byB0b3RhbCByZXBsYWNlLgotICAg
ICAgICBlYyA9IDA7Ci0gICAgICAgIHBhcmVudE5vZGUtPnJlcGxhY2VDaGlsZChmcmFnbWVudC5y
ZWxlYXNlKCksIG5vZGUsIGVjKTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIHJldHVybiBwcmV2aW91c1NpYmxpbmcgPyBwcmV2aW91c1NpYmxpbmct
Pm5leHRTaWJsaW5nKCkgOiBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7Ci19CiAKLXZvaWQgRE9N
RWRpdG9yOjppbm5lclBhdGNoTm9kZShEaWdlc3QqIG9sZERpZ2VzdCwgRGlnZXN0KiBuZXdEaWdl
c3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChvbGREaWdlc3QtPm1fc2hhMSA9PSBu
ZXdEaWdlc3QtPm1fc2hhMSkKLSAgICAgICAgcmV0dXJuOworICAgIHZpcnR1YWwgYm9vbCB1bmRv
KEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50Tm9kZS0+
aW5zZXJ0QmVmb3JlKG1fbm9kZS5nZXQoKSwgbV9hbmNob3JOb2RlLmdldCgpLCBlYyk7CisgICAg
fQogCi0gICAgTm9kZSogb2xkTm9kZSA9IG9sZERpZ2VzdC0+bV9ub2RlOwotICAgIE5vZGUqIG5l
d05vZGUgPSBuZXdEaWdlc3QtPm1fbm9kZTsKK3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+IG1f
cGFyZW50Tm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBt
X2FuY2hvck5vZGU7Cit9OwogCi0gICAgaWYgKG5ld05vZGUtPm5vZGVUeXBlKCkgIT0gb2xkTm9k
ZS0+bm9kZVR5cGUoKSB8fCBuZXdOb2RlLT5ub2RlTmFtZSgpICE9IG9sZE5vZGUtPm5vZGVOYW1l
KCkpIHsKLSAgICAgICAgb2xkTm9kZS0+cGFyZW50Tm9kZSgpLT5yZXBsYWNlQ2hpbGQobmV3Tm9k
ZSwgb2xkTm9kZSwgZWMpOwotICAgICAgICByZXR1cm47CitjbGFzcyBET01FZGl0b3I6Okluc2Vy
dEJlZm9yZUFjdGlvbiA6IHB1YmxpYyBET01FZGl0b3I6OkRPTUFjdGlvbiB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW5zZXJ0QmVmb3JlQWN0aW9uKTsKK3B1YmxpYzoKKyAgICBJbnNlcnRC
ZWZvcmVBY3Rpb24oTm9kZSogcGFyZW50Tm9kZSwgTm9kZSogbm9kZSwgTm9kZSogYW5jaG9yTm9k
ZSkKKyAgICAgICAgOiBET01FZGl0b3I6OkRPTUFjdGlvbigiSW5zZXJ0QmVmb3JlIikKKyAgICAg
ICAgLCBtX3BhcmVudE5vZGUocGFyZW50Tm9kZSkKKyAgICAgICAgLCBtX25vZGUobm9kZSkKKyAg
ICAgICAgLCBtX2FuY2hvck5vZGUoYW5jaG9yTm9kZSkKKyAgICB7CiAgICAgfQogCi0gICAgaWYg
KG9sZE5vZGUtPm5vZGVWYWx1ZSgpICE9IG5ld05vZGUtPm5vZGVWYWx1ZSgpKQotICAgICAgICBv
bGROb2RlLT5zZXROb2RlVmFsdWUobmV3Tm9kZS0+bm9kZVZhbHVlKCksIGVjKTsKLSAgICBpZiAo
ZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChvbGROb2RlLT5ub2RlVHlwZSgpICE9IE5v
ZGU6OkVMRU1FTlRfTk9ERSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUGF0Y2ggYXR0cmli
dXRlcwotICAgIEVsZW1lbnQqIG9sZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob2xk
Tm9kZSk7Ci0gICAgRWxlbWVudCogbmV3RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
ZXdOb2RlKTsKLSAgICBpZiAob2xkRGlnZXN0LT5tX2F0dHJzU0hBMSAhPSBuZXdEaWdlc3QtPm1f
YXR0cnNTSEExKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgYSBmdW5jdGlvbiBpbiBFbGVt
ZW50IGZvciByZW1vdmluZyBhbGwgcHJvcGVydGllcy4gVGFrZSBpbiBhY2NvdW50IHdoZXRoZXIg
ZGlkL3dpbGxNb2RpZnlBdHRyaWJ1dGUgYXJlIGltcG9ydGFudC4KLSAgICAgICAgaWYgKG9sZEVs
ZW1lbnQtPmhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKCkpIHsKLSAgICAgICAgICAgIHdoaWxl
IChvbGRFbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgpKQotICAgICAgICAgICAgICAgIG9sZEVsZW1l
bnQtPnJlbW92ZUF0dHJpYnV0ZSgwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBD
cmVhdGUgYSBmdW5jdGlvbiBpbiBFbGVtZW50IGZvciBjb3B5aW5nIHByb3BlcnRpZXMuIHNldEF0
dHJpYnV0ZXNGcm9tRWxlbWVudCgpIGlzIGNsb3NlIGJ1dCBub3QgZW5vdWdoIGZvciB0aGlzIGNh
c2UuCi0gICAgICAgIGlmIChuZXdFbGVtZW50LT5oYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgp
KSB7Ci0gICAgICAgICAgICBzaXplX3QgbnVtQXR0cnMgPSBuZXdFbGVtZW50LT5hdHRyaWJ1dGVD
b3VudCgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BdHRyczsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBuZXdFbGVt
ZW50LT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICAgICAgICAgIG9sZEVsZW1lbnQtPnNldEF0
dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsKLSAgICAgICAg
ICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybShFeGNlcHRpb25Db2RlJiBlYykKKyAgICB7
CisgICAgICAgIGlmIChtX25vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgbV9yZW1v
dmVDaGlsZEFjdGlvbiA9IGFkb3B0UHRyKG5ldyBSZW1vdmVDaGlsZEFjdGlvbihtX25vZGUtPnBh
cmVudE5vZGUoKSwgbV9ub2RlLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoIW1fcmVtb3ZlQ2hp
bGRBY3Rpb24tPnBlcmZvcm0oZWMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbV9wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUobV9ub2Rl
LmdldCgpLCBtX2FuY2hvck5vZGUuZ2V0KCksIGVjKTsKICAgICB9CiAKLSAgICBpbm5lclBhdGNo
Q2hpbGRyZW4ob2xkRWxlbWVudCwgb2xkRGlnZXN0LT5tX2NoaWxkcmVuLCBuZXdEaWdlc3QtPm1f
Y2hpbGRyZW4sIGVjKTsKLSAgICBtX3VudXNlZE5vZGVzTWFwLnJlbW92ZShuZXdEaWdlc3QtPm1f
c2hhMSk7Ci19Ci0KLXBhaXI8RE9NRWRpdG9yOjpSZXN1bHRNYXAsIERPTUVkaXRvcjo6UmVzdWx0
TWFwPgotRE9NRWRpdG9yOjpkaWZmKGNvbnN0IFZlY3RvcjxPd25QdHI8RGlnZXN0PiA+JiBvbGRM
aXN0LCBjb25zdCBWZWN0b3I8T3duUHRyPERpZ2VzdD4gPiYgbmV3TGlzdCkKLXsKLSAgICBSZXN1
bHRNYXAgbmV3TWFwKG5ld0xpc3Quc2l6ZSgpKTsKLSAgICBSZXN1bHRNYXAgb2xkTWFwKG9sZExp
c3Quc2l6ZSgpKTsKKyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFeGNlcHRpb25Db2RlJiBlYykKKyAg
ICB7CisgICAgICAgIGlmIChtX3JlbW92ZUNoaWxkQWN0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IG1fcmVtb3ZlQ2hpbGRBY3Rpb24tPnVuZG8oZWMpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvbGRNYXAuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgb2xkTWFwW2ldLmZpcnN0ID0gMDsK
LSAgICAgICAgb2xkTWFwW2ldLnNlY29uZCA9IDA7CisgICAgICAgIHJldHVybiBtX3BhcmVudE5v
ZGUtPnJlbW92ZUNoaWxkKG1fbm9kZS5nZXQoKSwgZWMpOwogICAgIH0KIAotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbmV3TWFwLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG5ld01hcFtpXS5m
aXJzdCA9IDA7Ci0gICAgICAgIG5ld01hcFtpXS5zZWNvbmQgPSAwOwotICAgIH0KK3ByaXZhdGU6
CisgICAgUmVmUHRyPE5vZGU+IG1fcGFyZW50Tm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2Rl
OworICAgIFJlZlB0cjxOb2RlPiBtX2FuY2hvck5vZGU7CisgICAgT3duUHRyPFJlbW92ZUNoaWxk
QWN0aW9uPiBtX3JlbW92ZUNoaWxkQWN0aW9uOworfTsKIAotICAgIC8vIFRyaW0gaGVhZCBhbmQg
dGFpbC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZExpc3Quc2l6ZSgpICYmIGkgPCBu
ZXdMaXN0LnNpemUoKSAmJiBvbGRMaXN0W2ldLT5tX3NoYTEgPT0gbmV3TGlzdFtpXS0+bV9zaGEx
OyArK2kpIHsKLSAgICAgICAgb2xkTWFwW2ldLmZpcnN0ID0gb2xkTGlzdFtpXS5nZXQoKTsKLSAg
ICAgICAgb2xkTWFwW2ldLnNlY29uZCA9IGk7Ci0gICAgICAgIG5ld01hcFtpXS5maXJzdCA9IG5l
d0xpc3RbaV0uZ2V0KCk7Ci0gICAgICAgIG5ld01hcFtpXS5zZWNvbmQgPSBpOworY2xhc3MgRE9N
RWRpdG9yOjpSZW1vdmVBdHRyaWJ1dGVBY3Rpb24gOiBwdWJsaWMgRE9NRWRpdG9yOjpET01BY3Rp
b24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbW92ZUF0dHJpYnV0ZUFjdGlvbik7Citw
dWJsaWM6CisgICAgUmVtb3ZlQXR0cmlidXRlQWN0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBET01FZGl0b3I6OkRPTUFjdGlvbigiUmVtb3ZlQXR0
cmlidXRlIikKKyAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgLCBtX25hbWUo
bmFtZSkKKyAgICB7CiAgICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTGlzdC5z
aXplKCkgJiYgaSA8IG5ld0xpc3Quc2l6ZSgpICYmIG9sZExpc3Rbb2xkTGlzdC5zaXplKCkgLSBp
IC0gMV0tPm1fc2hhMSA9PSBuZXdMaXN0W25ld0xpc3Quc2l6ZSgpIC0gaSAtIDFdLT5tX3NoYTE7
ICsraSkgewotICAgICAgICBzaXplX3Qgb2xkSW5kZXggPSBvbGRMaXN0LnNpemUoKSAtIGkgLSAx
OwotICAgICAgICBzaXplX3QgbmV3SW5kZXggPSBuZXdMaXN0LnNpemUoKSAtIGkgLSAxOwotICAg
ICAgICBvbGRNYXBbb2xkSW5kZXhdLmZpcnN0ID0gb2xkTGlzdFtvbGRJbmRleF0uZ2V0KCk7Ci0g
ICAgICAgIG9sZE1hcFtvbGRJbmRleF0uc2Vjb25kID0gbmV3SW5kZXg7Ci0gICAgICAgIG5ld01h
cFtuZXdJbmRleF0uZmlyc3QgPSBuZXdMaXN0W25ld0luZGV4XS5nZXQoKTsKLSAgICAgICAgbmV3
TWFwW25ld0luZGV4XS5zZWNvbmQgPSBvbGRJbmRleDsKLSAgICB9Ci0KLSAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBWZWN0b3I8c2l6ZV90PiA+IERpZmZUYWJsZTsKLSAgICBEaWZmVGFibGUg
bmV3VGFibGU7Ci0gICAgRGlmZlRhYmxlIG9sZFRhYmxlOwogCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBuZXdMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERpZmZUYWJsZTo6aXRlcmF0
b3IgaXQgPSBuZXdUYWJsZS5hZGQobmV3TGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90Pigp
KS5maXJzdDsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgdmlydHVhbCBib29s
IHBlcmZvcm0oRXhjZXB0aW9uQ29kZSYpCisgICAgeworICAgICAgICBtX3ZhbHVlID0gbV9lbGVt
ZW50LT5nZXRBdHRyaWJ1dGUobV9uYW1lKTsKKyAgICAgICAgbV9lbGVtZW50LT5yZW1vdmVBdHRy
aWJ1dGUobV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERpZmZUYWJs
ZTo6aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5hZGQob2xkTGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8
c2l6ZV90PigpKS5maXJzdDsKLSAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgdmly
dHVhbCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBtX2VsZW1l
bnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVjKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgZm9yIChEaWZmVGFibGU6Oml0ZXJhdG9yIG5ld0l0ID0gbmV3VGFi
bGUuYmVnaW4oKTsgbmV3SXQgIT0gbmV3VGFibGUuZW5kKCk7ICsrbmV3SXQpIHsKLSAgICAgICAg
aWYgKG5ld0l0LT5zZWNvbmQuc2l6ZSgpICE9IDEpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBEaWZmVGFibGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xkVGFibGUuZmluZChuZXdJdC0+
Zmlyc3QpOwotICAgICAgICBpZiAob2xkSXQgPT0gb2xkVGFibGUuZW5kKCkgfHwgb2xkSXQtPnNl
Y29uZC5zaXplKCkgIT0gMSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5n
IG1fdmFsdWU7Cit9OwogCi0gICAgICAgIG5ld01hcFtuZXdJdC0+c2Vjb25kWzBdXSA9IG1ha2Vf
cGFpcihuZXdMaXN0W25ld0l0LT5zZWNvbmRbMF1dLmdldCgpLCBvbGRJdC0+c2Vjb25kWzBdKTsK
LSAgICAgICAgb2xkTWFwW29sZEl0LT5zZWNvbmRbMF1dID0gbWFrZV9wYWlyKG9sZExpc3Rbb2xk
SXQtPnNlY29uZFswXV0uZ2V0KCksIG5ld0l0LT5zZWNvbmRbMF0pOworY2xhc3MgRE9NRWRpdG9y
OjpTZXRBdHRyaWJ1dGVBY3Rpb24gOiBwdWJsaWMgRE9NRWRpdG9yOjpET01BY3Rpb24geworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFNldEF0dHJpYnV0ZUFjdGlvbik7CitwdWJsaWM6CisgICAg
U2V0QXR0cmlidXRlQWN0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgOiBET01FZGl0b3I6OkRPTUFjdGlvbigiU2V0
QXR0cmlidXRlIikKKyAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgLCBtX25h
bWUobmFtZSkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1faGFkQXR0cmli
dXRlKGZhbHNlKQorICAgIHsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgbmV3TGlz
dC5zaXplKCkgPiAwICYmIGkgPCBuZXdMaXN0LnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICBp
ZiAoIW5ld01hcFtpXS5maXJzdCB8fCBuZXdNYXBbaSArIDFdLmZpcnN0KQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgc2l6ZV90IGogPSBuZXdNYXBbaV0uc2Vjb25kICsgMTsKLSAg
ICAgICAgaWYgKGogPCBvbGRNYXAuc2l6ZSgpICYmICFvbGRNYXBbal0uZmlyc3QgJiYgbmV3TGlz
dFtpICsgMV0tPm1fc2hhMSA9PSBvbGRMaXN0W2pdLT5tX3NoYTEpIHsKLSAgICAgICAgICAgIG5l
d01hcFtpICsgMV0gPSBtYWtlX3BhaXIobmV3TGlzdFtpICsgMV0uZ2V0KCksIGopOwotICAgICAg
ICAgICAgb2xkTWFwW2pdID0gbWFrZV9wYWlyKG9sZExpc3Rbal0uZ2V0KCksIGkgKyAxKTsKLSAg
ICAgICAgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAg
IHsKKyAgICAgICAgbV9oYWRBdHRyaWJ1dGUgPSBtX2VsZW1lbnQtPmhhc0F0dHJpYnV0ZShtX25h
bWUpOworICAgICAgICBpZiAobV9oYWRBdHRyaWJ1dGUpCisgICAgICAgICAgICBtX29sZFZhbHVl
ID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUobV9uYW1lKTsKKyAgICAgICAgbV9lbGVtZW50LT5z
ZXRBdHRyaWJ1dGUobV9uYW1lLCBtX3ZhbHVlLCBlYyk7CisgICAgICAgIHJldHVybiAhZWM7CiAg
ICAgfQogCi0gICAgZm9yIChzaXplX3QgaSA9IG5ld0xpc3Quc2l6ZSgpIC0gMTsgbmV3TGlzdC5z
aXplKCkgPiAwICYmIGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaWYgKCFuZXdNYXBbaV0uZmlyc3Qg
fHwgbmV3TWFwW2kgLSAxXS5maXJzdCB8fCBuZXdNYXBbaV0uc2Vjb25kIDw9IDApCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBzaXplX3QgaiA9IG5ld01hcFtpXS5zZWNvbmQgLSAx
OwotICAgICAgICBpZiAoIW9sZE1hcFtqXS5maXJzdCAmJiBuZXdMaXN0W2kgLSAxXS0+bV9zaGEx
ID09IG9sZExpc3Rbal0tPm1fc2hhMSkgewotICAgICAgICAgICAgbmV3TWFwW2kgLSAxXSA9IG1h
a2VfcGFpcihuZXdMaXN0W2kgLSAxXS5nZXQoKSwgaik7Ci0gICAgICAgICAgICBvbGRNYXBbal0g
PSBtYWtlX3BhaXIob2xkTGlzdFtqXS5nZXQoKSwgaSAtIDEpOwotICAgICAgICB9CisgICAgdmly
dHVhbCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBpZiAobV9o
YWRBdHRyaWJ1dGUpCisgICAgICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUs
IG1fb2xkVmFsdWUsIGVjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9lbGVtZW50LT5y
ZW1vdmVBdHRyaWJ1dGUobV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0j
aWZkZWYgREVCVUdfRE9NX0VESVRPUgotICAgIGR1bXBNYXAob2xkTWFwLCAiT0xEIik7Ci0gICAg
ZHVtcE1hcChuZXdNYXAsICJORVciKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG1ha2VfcGFpcihv
bGRNYXAsIG5ld01hcCk7Ci19Ci0KLXZvaWQgRE9NRWRpdG9yOjppbm5lclBhdGNoQ2hpbGRyZW4o
Q29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4m
IG9sZExpc3QsIGNvbnN0IFZlY3RvcjxPd25QdHI8RGlnZXN0PiA+JiBuZXdMaXN0LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBwYWlyPFJlc3VsdE1hcCwgUmVzdWx0TWFwPiByZXN1bHRNYXBz
ID0gZGlmZihvbGRMaXN0LCBuZXdMaXN0KTsKLSAgICBSZXN1bHRNYXAmIG9sZE1hcCA9IHJlc3Vs
dE1hcHMuZmlyc3Q7Ci0gICAgUmVzdWx0TWFwJiBuZXdNYXAgPSByZXN1bHRNYXBzLnNlY29uZDsK
LQotICAgIERpZ2VzdCogb2xkSGVhZCA9IDA7Ci0gICAgRGlnZXN0KiBvbGRCb2R5ID0gMDsKLQot
ICAgIC8vIDEuIEZpcnN0IHN0cmlwIGV2ZXJ5dGhpbmcgZXhjZXB0IGZvciB0aGUgbm9kZXMgdGhh
dCByZXRhaW4uIENvbGxlY3QgcGVuZGluZyBtZXJnZXMuCi0gICAgSGFzaE1hcDxEaWdlc3QqLCBE
aWdlc3QqPiBtZXJnZXM7Ci0gICAgSGFzaFNldDxzaXplX3Q+IHVzZWROZXdPcmRpbmFsczsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZExpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKG9sZE1hcFtpXS5maXJzdCkgewotICAgICAgICAgICAgaWYgKCF1c2VkTmV3T3JkaW5hbHMu
Y29udGFpbnMob2xkTWFwW2ldLnNlY29uZCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkTmV3T3Jk
aW5hbHMuYWRkKG9sZE1hcFtpXS5zZWNvbmQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgb2xkTWFwW2ldLmZpcnN0ID0gMDsKLSAgICAgICAg
ICAgIG9sZE1hcFtpXS5zZWNvbmQgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWx3YXlz
IG1hdGNoIDxoZWFkPiBhbmQgPGJvZHk+IHRhZ3Mgd2l0aCBlYWNoIG90aGVyIC0gd2UgY2FuJ3Qg
cmVtb3ZlIHRoZW0gZnJvbSB0aGUgRE9NCi0gICAgICAgIC8vIHVwb24gcGF0Y2hpbmcuCi0gICAg
ICAgIGlmIChvbGRMaXN0W2ldLT5tX25vZGUtPmhhc1RhZ05hbWUoaGVhZFRhZykpIHsKLSAgICAg
ICAgICAgIG9sZEhlYWQgPSBvbGRMaXN0W2ldLmdldCgpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9sZExpc3RbaV0tPm1fbm9kZS0+aGFzVGFnTmFtZShi
b2R5VGFnKSkgewotICAgICAgICAgICAgb2xkQm9keSA9IG9sZExpc3RbaV0uZ2V0KCk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8RWxlbWVu
dD4gbV9lbGVtZW50OworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7Cisg
ICAgYm9vbCBtX2hhZEF0dHJpYnV0ZTsKKyAgICBTdHJpbmcgbV9vbGRWYWx1ZTsKK307CiAKLSAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBjaGFuZ2UgaXMgYmV0d2VlbiBzdGFibGUgbm9kZXMuIElm
IGl0IGlzLCBjb25zaWRlciBpdCBhcyAibW9kaWZpZWQiLgotICAgICAgICBpZiAoIW1fdW51c2Vk
Tm9kZXNNYXAuY29udGFpbnMob2xkTGlzdFtpXS0+bV9zaGExKSAmJiAoIWkgfHwgb2xkTWFwW2kg
LSAxXS5maXJzdCkgJiYgKGkgPT0gb2xkTWFwLnNpemUoKSAtIDEgfHwgb2xkTWFwW2kgKyAxXS5m
aXJzdCkpIHsKLSAgICAgICAgICAgIHNpemVfdCBhbmNob3JDYW5kaWRhdGUgPSBpID8gb2xkTWFw
W2kgLSAxXS5zZWNvbmQgKyAxIDogMDsKLSAgICAgICAgICAgIHNpemVfdCBhbmNob3JBZnRlciA9
IGkgPT0gb2xkTWFwLnNpemUoKSAtIDEgPyBhbmNob3JDYW5kaWRhdGUgKyAxIDogb2xkTWFwW2kg
KyAxXS5zZWNvbmQ7Ci0gICAgICAgICAgICBpZiAoYW5jaG9yQWZ0ZXIgLSBhbmNob3JDYW5kaWRh
dGUgPT0gMSAmJiBhbmNob3JDYW5kaWRhdGUgPCBuZXdMaXN0LnNpemUoKSkKLSAgICAgICAgICAg
ICAgICBtZXJnZXMuc2V0KG5ld0xpc3RbYW5jaG9yQ2FuZGlkYXRlXS5nZXQoKSwgb2xkTGlzdFtp
XS5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZW1vdmVDaGls
ZChvbGRMaXN0W2ldLmdldCgpLCBlYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGVjKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICByZW1vdmVDaGlsZChvbGRMaXN0W2ldLmdldCgpLCBlYyk7Ci0gICAgICAgICAg
ICBpZiAoZWMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CitjbGFzcyBET01F
ZGl0b3I6OlNldE91dGVySFRNTEFjdGlvbiA6IHB1YmxpYyBET01FZGl0b3I6OkRPTUFjdGlvbiB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0T3V0ZXJIVE1MQWN0aW9uKTsKK3B1YmxpYzoK
KyAgICBTZXRPdXRlckhUTUxBY3Rpb24oTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBodG1sKQor
ICAgICAgICA6IERPTUVkaXRvcjo6RE9NQWN0aW9uKCJTZXRPdXRlckhUTUwiKQorICAgICAgICAs
IG1fbm9kZShub2RlKQorICAgICAgICAsIG1fbmV4dFNpYmxpbmcobm9kZS0+bmV4dFNpYmxpbmco
KSkKKyAgICAgICAgLCBtX2h0bWwoaHRtbCkKKyAgICAgICAgLCBtX25ld05vZGUoMCkKKyAgICB7
CiAgICAgfQogCi0gICAgLy8gTWFyayByZXRhaW5lZCBub2RlcyBhcyB1c2VkLCBkbyBub3QgcmV1
c2Ugbm9kZSBtb3JlIHRoYW4gb25jZS4KLSAgICBIYXNoU2V0PHNpemVfdD4gdXNlZE9sZE9yZGlu
YWxzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3TGlzdC5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoIW5ld01hcFtpXS5maXJzdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBzaXplX3Qgb2xkT3JkaW5hbCA9IG5ld01hcFtpXS5zZWNvbmQ7Ci0gICAgICAgIGlmICh1
c2VkT2xkT3JkaW5hbHMuY29udGFpbnMob2xkT3JkaW5hbCkpIHsKLSAgICAgICAgICAgIC8vIERv
IG5vdCBtYXAgbm9kZSBtb3JlIHRoYW4gb25jZQotICAgICAgICAgICAgbmV3TWFwW2ldLmZpcnN0
ID0gMDsKLSAgICAgICAgICAgIG5ld01hcFtpXS5zZWNvbmQgPSAwOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgdXNlZE9sZE9yZGluYWxzLmFkZChvbGRPcmRpbmFs
KTsKLSAgICAgICAgbWFya05vZGVBc1VzZWQobmV3TWFwW2ldLmZpcnN0KTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybShFeGNlcHRpb25Db2RlJiBlYykKKyAgICB7CisgICAgICAgIG1fb2xkSFRN
TCA9IGNyZWF0ZU1hcmt1cChtX25vZGUuZ2V0KCkpOworICAgICAgICBET01QYXRjaFN1cHBvcnQg
ZG9tUGF0Y2hTdXBwb3J0KG1fbm9kZS0+b3duZXJEb2N1bWVudCgpKTsKKyAgICAgICAgbV9uZXdO
b2RlID0gZG9tUGF0Y2hTdXBwb3J0LnBhdGNoTm9kZShtX25vZGUuZ2V0KCksIG1faHRtbCwgZWMp
OworICAgICAgICByZXR1cm4gIWVjOwogICAgIH0KIAotICAgIC8vIE1hcmsgPGhlYWQ+IGFuZCA8
Ym9keT4gbm9kZXMgZm9yIG1lcmdlLgotICAgIGlmIChvbGRIZWFkIHx8IG9sZEJvZHkpIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAob2xkSGVhZCAmJiBuZXdMaXN0W2ldLT5tX25vZGUtPmhhc1RhZ05hbWUoaGVh
ZFRhZykpCi0gICAgICAgICAgICAgICAgbWVyZ2VzLnNldChuZXdMaXN0W2ldLmdldCgpLCBvbGRI
ZWFkKTsKLSAgICAgICAgICAgIGlmIChvbGRCb2R5ICYmIG5ld0xpc3RbaV0tPm1fbm9kZS0+aGFz
VGFnTmFtZShib2R5VGFnKSkKLSAgICAgICAgICAgICAgICBtZXJnZXMuc2V0KG5ld0xpc3RbaV0u
Z2V0KCksIG9sZEJvZHkpOworICAgIHZpcnR1YWwgYm9vbCB1bmRvKEV4Y2VwdGlvbkNvZGUmIGVj
KQorICAgIHsKKyAgICAgICAgRE9NUGF0Y2hTdXBwb3J0IGRvbVBhdGNoU3VwcG9ydChtX25ld05v
ZGUtPm93bmVyRG9jdW1lbnQoKSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBkb21QYXRjaFN1cHBv
cnQucGF0Y2hOb2RlKG1fbmV3Tm9kZSwgbV9vbGRIVE1MLCBlYyk7CisgICAgICAgIGlmIChlYyB8
fCAhbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gSFRNTCBlZGl0
aW5nIGNvdWxkIGhhdmUgcHJvZHVjZWQgZXh0cmEgbm9kZXMuIFJlbW92ZSB0aGVtIGlmIG5lY2Vz
c2FyeS4KKyAgICAgICAgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CisKKyAgICAgICAgd2hp
bGUgKCFlYyAmJiBub2RlICYmIG5vZGUgIT0gbV9uZXh0U2libGluZy5nZXQoKSkgeworICAgICAg
ICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlID0gbm9kZTsKKyAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoZWMpOwog
ICAgICAgICB9CisgICAgICAgIHJldHVybiAhZWM7CiAgICAgfQogCi0gICAgLy8gMi4gUGF0Y2gg
bm9kZXMgbWFya2VkIGZvciBtZXJnZS4KLSAgICBmb3IgKEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0
Kj46Oml0ZXJhdG9yIGl0ID0gbWVyZ2VzLmJlZ2luKCk7IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpbm5lclBhdGNoTm9kZShpdC0+c2Vjb25kLCBpdC0+Zmlyc3QsIGVjKTsK
LSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJuOworICAgIE5vZGUqIG5ld05vZGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbmV3Tm9kZTsKICAgICB9CiAKLSAgICAvLyAzLiBJ
bnNlcnQgbWlzc2luZyBub2Rlcy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld01hcC5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAobmV3TWFwW2ldLmZpcnN0IHx8IG1lcmdlcy5jb250
YWlucyhuZXdMaXN0W2ldLmdldCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworcHJpdmF0ZToK
KyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBtX25leHRTaWJsaW5n
OworICAgIFN0cmluZyBtX2h0bWw7CisgICAgU3RyaW5nIG1fb2xkSFRNTDsKKyAgICBOb2RlKiBt
X25ld05vZGU7Cit9OwogCi0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBp
bnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgbmV3TGlzdFtpXS5nZXQoKSwgcGFyZW50Tm9kZS0+Y2hp
bGROb2RlKGkpLCBlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKK2Ns
YXNzIERPTUVkaXRvcjo6UmVwbGFjZVdob2xlVGV4dEFjdGlvbiA6IHB1YmxpYyBET01FZGl0b3I6
OkRPTUFjdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVwbGFjZVdob2xlVGV4dEFj
dGlvbik7CitwdWJsaWM6CisgICAgUmVwbGFjZVdob2xlVGV4dEFjdGlvbihUZXh0KiB0ZXh0Tm9k
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQorICAgICAgICA6IERPTUFjdGlvbigiUmVwbGFjZVdob2xl
VGV4dCIpCisgICAgICAgICwgbV90ZXh0Tm9kZSh0ZXh0Tm9kZSkKKyAgICAgICAgLCBtX3RleHQo
dGV4dCkKKyAgICB7CiAgICAgfQogCi0gICAgLy8gNC4gVGhlbiBwdXQgYWxsIG5vZGVzIHRoYXQg
cmV0YWluZWQgaW50byB0aGVpciBzbG90cyAoc29ydCBieSBuZXcgaW5kZXgpLgotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb2xkTWFwLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghb2xk
TWFwW2ldLmZpcnN0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxOb2Rl
PiBub2RlID0gb2xkTWFwW2ldLmZpcnN0LT5tX25vZGU7Ci0gICAgICAgIE5vZGUqIGFuY2hvck5v
ZGUgPSBwYXJlbnROb2RlLT5jaGlsZE5vZGUob2xkTWFwW2ldLnNlY29uZCk7Ci0gICAgICAgIGlm
IChub2RlLmdldCgpID09IGFuY2hvck5vZGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShoZWFk
VGFnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBOZXZlciBtb3ZlIGhlYWQgb3IgYm9keSwg
bW92ZSB0aGUgcmVzdCBvZiB0aGUgbm9kZXMgYXJvdW5kIHRoZW0uCi0KLSAgICAgICAgcGFyZW50
Tm9kZS0+aW5zZXJ0QmVmb3JlKG5vZGUsIGFuY2hvck5vZGUsIGVjKTsKLSAgICAgICAgaWYgKGVj
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEV4Y2VwdGlv
bkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgbV9vbGRUZXh0ID0gbV90ZXh0Tm9kZS0+d2hvbGVU
ZXh0KCk7CisgICAgICAgIG1fdGV4dE5vZGUtPnJlcGxhY2VXaG9sZVRleHQobV90ZXh0LCBlYyk7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLX0KIAotc3RhdGljIHZvaWQgYWRkU3RyaW5n
VG9TSEExKFNIQTEmIHNoYTEsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcg
Y1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihjU3RyaW5nLmRhdGEoKSksIGNTdHJpbmcubGVuZ3RoKCkpOwot
fQotCi1QYXNzT3duUHRyPERPTUVkaXRvcjo6RGlnZXN0PiBET01FZGl0b3I6OmNyZWF0ZURpZ2Vz
dChOb2RlKiBub2RlLCBVbnVzZWROb2Rlc01hcCogdW51c2VkTm9kZXNNYXApCi17Ci0gICAgRGln
ZXN0KiBkaWdlc3QgPSBuZXcgRGlnZXN0KG5vZGUpOwotCi0gICAgU0hBMSBzaGExOwotCi0gICAg
Tm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUgPSBub2RlLT5ub2RlVHlwZSgpOwotICAgIHNoYTEuYWRk
Qnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJm5vZGVUeXBlKSwgc2l6ZW9m
KG5vZGVUeXBlKSk7Ci0gICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIG5vZGUtPm5vZGVOYW1lKCkp
OwotICAgIGFkZFN0cmluZ1RvU0hBMShzaGExLCBub2RlLT5ub2RlVmFsdWUoKSk7Ci0KLSAgICBp
ZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUpIHsKLSAgICAgICAgTm9k
ZSogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxlIChjaGlsZCkgewot
ICAgICAgICAgICAgT3duUHRyPERpZ2VzdD4gY2hpbGRJbmZvID0gY3JlYXRlRGlnZXN0KGNoaWxk
LCB1bnVzZWROb2Rlc01hcCk7Ci0gICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgY2hp
bGRJbmZvLT5tX3NoYTEpOwotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKLSAgICAgICAgICAgIGRpZ2VzdC0+bV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRJbmZvLnJlbGVh
c2UoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKLQotICAgICAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlc1dp
dGhvdXRVcGRhdGUoKSkgewotICAgICAgICAgICAgc2l6ZV90IG51bUF0dHJzID0gZWxlbWVudC0+
YXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAgICAgIFNIQTEgYXR0cnNTSEExOwotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BdHRyczsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBlbGVtZW50LT5hdHRyaWJ1dGVJdGVtKGkp
OwotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRyc1NIQTEsIGF0dHJpYnV0ZS0+
bmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShhdHRy
c1NIQTEsIGF0dHJpYnV0ZS0+dmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBW
ZWN0b3I8dWludDhfdCwgMjA+IGF0dHJzSGFzaDsKLSAgICAgICAgICAgIGF0dHJzU0hBMS5jb21w
dXRlSGFzaChhdHRyc0hhc2gpOwotICAgICAgICAgICAgZGlnZXN0LT5tX2F0dHJzU0hBMSA9IGJh
c2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihhdHRyc0hhc2guZGF0YSgp
KSwgMTApOwotICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKHNoYTEsIGRpZ2VzdC0+bV9hdHRy
c1NIQTEpOwotICAgICAgICB9CisgICAgdmlydHVhbCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYg
ZWMpCisgICAgeworICAgICAgICBtX3RleHROb2RlLT5yZXBsYWNlV2hvbGVUZXh0KG1fb2xkVGV4
dCwgZWMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBWZWN0b3I8dWludDhf
dCwgMjA+IGhhc2g7Ci0gICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKLSAgICBkaWdlc3QtPm1f
c2hhMSA9IGJhc2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihoYXNoLmRh
dGEoKSksIDEwKTsKLSAgICBpZiAodW51c2VkTm9kZXNNYXApCi0gICAgICAgIHVudXNlZE5vZGVz
TWFwLT5hZGQoZGlnZXN0LT5tX3NoYTEsIGRpZ2VzdCk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKGRp
Z2VzdCk7Ci19Citwcml2YXRlOgorICAgIFJlZlB0cjxUZXh0PiBtX3RleHROb2RlOworICAgIFN0
cmluZyBtX3RleHQ7CisgICAgU3RyaW5nIG1fb2xkVGV4dDsKK307CiAKLXZvaWQgRE9NRWRpdG9y
OjppbnNlcnRCZWZvcmUoQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSwgRGlnZXN0KiBkaWdlc3Qs
IE5vZGUqIGFuY2hvciwgRXhjZXB0aW9uQ29kZSYgZWMpCitET01FZGl0b3I6OkRPTUVkaXRvcihJ
bnNwZWN0b3JIaXN0b3J5KiBoaXN0b3J5KSA6IG1faGlzdG9yeShoaXN0b3J5KSB7IH0KKworRE9N
RWRpdG9yOjp+RE9NRWRpdG9yKCkgeyB9CisKK2Jvb2wgRE9NRWRpdG9yOjppbnNlcnRCZWZvcmUo
Tm9kZSogcGFyZW50Tm9kZSwgTm9kZSogbm9kZSwgTm9kZSogYW5jaG9yTm9kZSwgRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nKQogewotICAgIHBhcmVudE5vZGUtPmluc2VydEJlZm9yZShkaWdlc3Qt
Pm1fbm9kZSwgYW5jaG9yLCBlYyk7Ci0gICAgbWFya05vZGVBc1VzZWQoZGlnZXN0KTsKKyAgICBy
ZXR1cm4gbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBJbnNlcnRCZWZvcmVBY3Rpb24o
cGFyZW50Tm9kZSwgbm9kZSwgYW5jaG9yTm9kZSkpLCBlcnJvclN0cmluZyk7CiB9CiAKLXZvaWQg
RE9NRWRpdG9yOjpyZW1vdmVDaGlsZChEaWdlc3QqIG9sZERpZ2VzdCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitib29sIERPTUVkaXRvcjo6cmVtb3ZlQ2hpbGQoTm9kZSogcGFyZW50Tm9kZSwgTm9kZSog
bm9kZSwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQogewotICAgIFJlZlB0cjxOb2RlPiBvbGRO
b2RlID0gb2xkRGlnZXN0LT5tX25vZGU7Ci0gICAgb2xkTm9kZS0+cGFyZW50Tm9kZSgpLT5yZW1v
dmVDaGlsZChvbGROb2RlLmdldCgpLCBlYyk7Ci0KLSAgICAvLyBEaWZmIHdvcmtzIHdpdGhpbiBs
ZXZlbHMuIEluIG9yZGVyIG5vdCB0byBsb3NlIHRoZSBub2RlIGlkZW50aXR5IHdoZW4gdXNlcgot
ICAgIC8vIHByZXBlbmRzIGhpcyBIVE1MIHdpdGggIjxkaXY+IiAoaS5lLiBhbGwgbm9kZXMgYXJl
IHNoaWZ0ZWQgdG8gdGhlIG5leHQgbmVzdGVkIGxldmVsKSwKLSAgICAvLyBwcmlvciB0byBkcm9w
cGluZyB0aGUgb3JpZ2luYWwgbm9kZSBvbiB0aGUgZmxvb3IsIGNoZWNrIHdoZXRoZXIgbmV3IERP
TSBoYXMgYSBkaWdlc3QKLSAgICAvLyB3aXRoIG1hdGNoaW5nIHNoYTEuIElmIGl0IGRvZXMsIHJl
cGxhY2UgaXQgd2l0aCB0aGUgb3JpZ2luYWwgRE9NIGNodW5rLiBDaGFuY2VzIGFyZQotICAgIC8v
IGhpZ2ggdGhhdCBpdCB3aWxsIGdldCBtZXJnZWQgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCBET00g
ZHVyaW5nIHRoZSBmdXJ0aGVyIHBhdGNoaW5nLgotCi0gICAgVW51c2VkTm9kZXNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV91bnVzZWROb2Rlc01hcC5maW5kKG9sZERpZ2VzdC0+bV9zaGExKTsKLSAgICBp
ZiAoaXQgIT0gbV91bnVzZWROb2Rlc01hcC5lbmQoKSkgewotICAgICAgICBEaWdlc3QqIG5ld0Rp
Z2VzdCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXdEaWdlc3QtPm1f
bm9kZTsKLSAgICAgICAgbmV3Tm9kZS0+cGFyZW50Tm9kZSgpLT5yZXBsYWNlQ2hpbGQob2xkTm9k
ZSwgbmV3Tm9kZSwgZWMpOwotICAgICAgICBuZXdEaWdlc3QtPm1fbm9kZSA9IG9sZE5vZGUuZ2V0
KCk7Ci0gICAgICAgIG1hcmtOb2RlQXNVc2VkKG5ld0RpZ2VzdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgcmV0dXJuIG1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0cihuZXcgUmVtb3Zl
Q2hpbGRBY3Rpb24ocGFyZW50Tm9kZSwgbm9kZSkpLCBlcnJvclN0cmluZyk7Cit9CiAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZERpZ2VzdC0+bV9jaGlsZHJlbi5zaXplKCk7ICsraSkK
LSAgICAgICAgcmVtb3ZlQ2hpbGQob2xkRGlnZXN0LT5tX2NoaWxkcmVuW2ldLmdldCgpLCBlYyk7
Citib29sIERPTUVkaXRvcjo6c2V0QXR0cmlidXRlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
KQoreworICAgIHJldHVybiBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFNldEF0dHJp
YnV0ZUFjdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkpLCBlcnJvclN0cmluZyk7CiB9CiAKLXZv
aWQgRE9NRWRpdG9yOjptYXJrTm9kZUFzVXNlZChEaWdlc3QqIGRpZ2VzdCkKK2Jvb2wgRE9NRWRp
dG9yOjpyZW1vdmVBdHRyaWJ1dGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiB7Ci0gICAgRGVxdWU8RGlnZXN0Kj4gcXVldWU7
Ci0gICAgcXVldWUuYXBwZW5kKGRpZ2VzdCk7Ci0gICAgd2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgRGlnZXN0KiBmaXJzdCA9IHF1ZXVlLnRha2VGaXJzdCgpOwotICAgICAgICBt
X3VudXNlZE5vZGVzTWFwLnJlbW92ZShmaXJzdC0+bV9zaGExKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaXJzdC0+bV9jaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IHF1ZXVlLmFwcGVuZChmaXJzdC0+bV9jaGlsZHJlbltpXS5nZXQoKSk7Ci0gICAgfQorICAgIHJl
dHVybiBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFJlbW92ZUF0dHJpYnV0ZUFjdGlv
bihlbGVtZW50LCBuYW1lKSksIGVycm9yU3RyaW5nKTsKIH0KIAotI2lmZGVmIERFQlVHX0RPTV9F
RElUT1IKLXN0YXRpYyBTdHJpbmcgbm9kZU5hbWUoTm9kZSogbm9kZSkKK2Jvb2wgRE9NRWRpdG9y
OjpzZXRPdXRlckhUTUwoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3
Tm9kZSwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQogewotICAgIGlmIChub2RlLT5kb2N1bWVu
dCgpLT5pc1hIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgIHJldHVybiBub2RlLT5ub2RlTmFtZSgp
OwotICAgIHJldHVybiBub2RlLT5ub2RlTmFtZSgpLmxvd2VyKCk7CisgICAgT3duUHRyPFNldE91
dGVySFRNTEFjdGlvbj4gYWN0aW9uID0gYWRvcHRQdHIobmV3IFNldE91dGVySFRNTEFjdGlvbihu
b2RlLCBodG1sKSk7CisgICAgU2V0T3V0ZXJIVE1MQWN0aW9uKiByYXdBY3Rpb24gPSBhY3Rpb24u
Z2V0KCk7CisgICAgYm9vbCByZXN1bHQgPSBtX2hpc3RvcnktPnBlcmZvcm0oYWN0aW9uLnJlbGVh
c2UoKSwgZXJyb3JTdHJpbmcpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgICpuZXdOb2RlID0g
cmF3QWN0aW9uLT5uZXdOb2RlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBET01F
ZGl0b3I6OmR1bXBNYXAoY29uc3QgUmVzdWx0TWFwJiBtYXAsIGNvbnN0IFN0cmluZyYgbmFtZSkK
K2Jvb2wgRE9NRWRpdG9yOjpyZXBsYWNlV2hvbGVUZXh0KFRleHQqIHRleHROb2RlLCBjb25zdCBT
dHJpbmcmIHRleHQsIEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKIHsKLSAgICBmcHJpbnRmKHN0
ZGVyciwgIlxuXG4iKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcC5zaXplKCk7ICsr
aSkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlc1slbHVdOiAlcyAoJXApIC0gWyVsdV1cbiIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgaSwgbWFwW2ldLmZpcnN0ID8gbm9kZU5hbWUobWFwW2ldLmZp
cnN0LT5tX25vZGUpLnV0ZjgoKS5kYXRhKCkgOiAiIiwgbWFwW2ldLmZpcnN0LCBtYXBbaV0uc2Vj
b25kKTsKKyAgICByZXR1cm4gbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBSZXBsYWNl
V2hvbGVUZXh0QWN0aW9uKHRleHROb2RlLCB0ZXh0KSksIGVycm9yU3RyaW5nKTsKIH0KLSNlbmRp
ZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0
b3IuaAppbmRleCAxNjQ0ZjIzNmFmMTBiN2Y5YzNkMzdhZDk4ZjJlZGRiMmIxNTlkZGY1Li5iZDEw
YjJhYzM0OThkYmNmMjAwMmFmOTgyMDljYTk1ZWRlMTNhNDY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTUVkaXRvci5oCkBAIC0zMSw1MCArMzEsNDIgQEAKICNpZm5kZWYgRE9NRWRpdG9yX2gK
ICNkZWZpbmUgRE9NRWRpdG9yX2gKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENvbnRh
aW5lck5vZGU7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIE5hbWVkTm9kZU1hcDsKK2NsYXNzIEVs
ZW1lbnQ7CitjbGFzcyBJbnNwZWN0b3JIaXN0b3J5OwogY2xhc3MgTm9kZTsKK2NsYXNzIFRleHQ7
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KwogY2xhc3MgRE9NRWRpdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShET01FZGl0b3Ip
OwogcHVibGljOgotICAgIGV4cGxpY2l0IERPTUVkaXRvcihEb2N1bWVudCopOwotICAgIHZpcnR1
YWwgfkRPTUVkaXRvcigpOworICAgIGV4cGxpY2l0IERPTUVkaXRvcihJbnNwZWN0b3JIaXN0b3J5
Kik7CisgICAgfkRPTUVkaXRvcigpOwogCi0gICAgdm9pZCBwYXRjaERvY3VtZW50KGNvbnN0IFN0
cmluZyYgbWFya3VwKTsKLSAgICBOb2RlKiBwYXRjaE5vZGUoTm9kZSosIGNvbnN0IFN0cmluZyYg
bWFya3VwLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBpbnNlcnRCZWZvcmUoTm9kZSogcGFy
ZW50Tm9kZSwgTm9kZSosIE5vZGUqIGFuY2hvck5vZGUsIEVycm9yU3RyaW5nKik7CisgICAgYm9v
bCByZW1vdmVDaGlsZChOb2RlKiBwYXJlbnROb2RlLCBOb2RlKiwgRXJyb3JTdHJpbmcqKTsKKyAg
ICBib29sIHNldEF0dHJpYnV0ZShFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBFcnJvclN0cmluZyopOworICAgIGJvb2wgcmVtb3ZlQXR0cmlidXRlKEVs
ZW1lbnQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVycm9yU3RyaW5nKik7CisgICAgYm9vbCBzZXRP
dXRlckhUTUwoTm9kZSosIGNvbnN0IFN0cmluZyYgaHRtbCwgTm9kZSoqIG5ld05vZGUsIEVycm9y
U3RyaW5nKik7CisgICAgYm9vbCByZXBsYWNlV2hvbGVUZXh0KFRleHQqLCBjb25zdCBTdHJpbmcm
IHRleHQsIEVycm9yU3RyaW5nKik7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IERpZ2VzdDsKLSAg
ICB0eXBlZGVmIFZlY3RvcjxwYWlyPERpZ2VzdCosIHNpemVfdD4gPiBSZXN1bHRNYXA7Ci0gICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRGlnZXN0Kj4gVW51c2VkTm9kZXNNYXA7Ci0KLSAgICB2
b2lkIGlubmVyUGF0Y2hOb2RlKERpZ2VzdCogb2xkTm9kZSwgRGlnZXN0KiBuZXdOb2RlLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgc3RkOjpwYWlyPFJlc3VsdE1hcCwgUmVzdWx0TWFwPiBkaWZmKGNv
bnN0IFZlY3RvcjxPd25QdHI8RGlnZXN0PiA+JiBvbGRDaGlsZHJlbiwgY29uc3QgVmVjdG9yPE93
blB0cjxEaWdlc3Q+ID4mIG5ld0NoaWxkcmVuKTsKLSAgICB2b2lkIGlubmVyUGF0Y2hDaGlsZHJl
bihDb250YWluZXJOb2RlKiwgY29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4mIG9sZENoaWxk
cmVuLCBjb25zdCBWZWN0b3I8T3duUHRyPERpZ2VzdD4gPiYgbmV3Q2hpbGRyZW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBQYXNzT3duUHRyPERpZ2VzdD4gY3JlYXRlRGlnZXN0KE5vZGUqLCBVbnVz
ZWROb2Rlc01hcCopOwotICAgIHZvaWQgaW5zZXJ0QmVmb3JlKENvbnRhaW5lck5vZGUqLCBEaWdl
c3QqLCBOb2RlKiBhbmNob3IsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbW92ZUNoaWxk
KERpZ2VzdCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIG1hcmtOb2RlQXNVc2VkKERpZ2Vz
dCopOwotI2lmZGVmIERFQlVHX0RPTV9FRElUT1IKLSAgICB2b2lkIGR1bXBNYXAoY29uc3QgUmVz
dWx0TWFwJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSNlbmRpZgotCi0gICAgRG9jdW1lbnQqIG1f
ZG9jdW1lbnQ7CisgICAgY2xhc3MgRE9NQWN0aW9uOworICAgIGNsYXNzIFJlbW92ZUNoaWxkQWN0
aW9uOworICAgIGNsYXNzIEluc2VydEJlZm9yZUFjdGlvbjsKKyAgICBjbGFzcyBSZW1vdmVBdHRy
aWJ1dGVBY3Rpb247CisgICAgY2xhc3MgU2V0QXR0cmlidXRlQWN0aW9uOworICAgIGNsYXNzIFNl
dE91dGVySFRNTEFjdGlvbjsKKyAgICBjbGFzcyBSZXBsYWNlV2hvbGVUZXh0QWN0aW9uOwogCi0g
ICAgVW51c2VkTm9kZXNNYXAgbV91bnVzZWROb2Rlc01hcDsKKyAgICBJbnNwZWN0b3JIaXN0b3J5
KiBtX2hpc3Rvcnk7CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDEyMDZm
ZDlkMjY3ZDg2NDc0NzYzMWU3NDIxMTIzZDdkMjU3NDFjYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCkBAIC0wLDAgKzEsNDk0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTVBhdGNoU3VwcG9ydC5oIgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUg
IkJhc2U2NC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFn
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVu
dFBhcnNlci5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhlYWRF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCisj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1l
c3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIEhUTUxOYW1lczo6Ym9k
eVRhZzsKK3VzaW5nIEhUTUxOYW1lczo6aGVhZFRhZzsKK3VzaW5nIEhUTUxOYW1lczo6aHRtbFRh
ZzsKKworc3RydWN0IERPTVBhdGNoU3VwcG9ydDo6RGlnZXN0IHsKKyAgICBleHBsaWNpdCBEaWdl
c3QoTm9kZSogbm9kZSkgOiBtX25vZGUobm9kZSkgeyB9CisKKyAgICBTdHJpbmcgbV9zaGExOwor
ICAgIFN0cmluZyBtX2F0dHJzU0hBMTsKKyAgICBOb2RlKiBtX25vZGU7CisgICAgVmVjdG9yPE93
blB0cjxEaWdlc3Q+ID4gbV9jaGlsZHJlbjsKK307CisKK0RPTVBhdGNoU3VwcG9ydDo6RE9NUGF0
Y2hTdXBwb3J0KERvY3VtZW50KiBkb2N1bWVudCkgOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7IH0K
KworRE9NUGF0Y2hTdXBwb3J0Ojp+RE9NUGF0Y2hTdXBwb3J0KCkgeyB9CisKK3ZvaWQgRE9NUGF0
Y2hTdXBwb3J0OjpwYXRjaERvY3VtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwKQoreworICAgIFJl
ZlB0cjxIVE1MRG9jdW1lbnQ+IG5ld0RvY3VtZW50ID0gSFRNTERvY3VtZW50OjpjcmVhdGUoMCwg
S1VSTCgpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRQYXJzZXI+IHBhcnNlciA9IEhUTUxEb2N1bWVu
dFBhcnNlcjo6Y3JlYXRlKG5ld0RvY3VtZW50LmdldCgpLCBmYWxzZSk7CisgICAgcGFyc2VyLT5p
bnNlcnQobWFya3VwKTsgLy8gVXNlIGluc2VydCgpIHNvIHRoYXQgdGhlIHBhcnNlciB3aWxsIG5v
dCB5aWVsZC4KKyAgICBwYXJzZXItPmZpbmlzaCgpOworICAgIHBhcnNlci0+ZGV0YWNoKCk7CisK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBPd25QdHI8RGlnZXN0PiBvbGRJbmZvID0g
Y3JlYXRlRGlnZXN0KG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwKTsKKyAgICBPd25Q
dHI8RGlnZXN0PiBuZXdJbmZvID0gY3JlYXRlRGlnZXN0KG5ld0RvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKSwgJm1fdW51c2VkTm9kZXNNYXApOworICAgIGlubmVyUGF0Y2hOb2RlKG9sZEluZm8u
Z2V0KCksIG5ld0luZm8uZ2V0KCksIGVjKTsKKworICAgIGlmIChlYykgeworICAgICAgICAvLyBG
YWxsIGJhY2sgdG8gcmV3cml0ZS4KKyAgICAgICAgbV9kb2N1bWVudC0+d3JpdGUobWFya3VwKTsK
KyAgICAgICAgbV9kb2N1bWVudC0+Y2xvc2UoKTsKKyAgICB9Cit9CisKK05vZGUqIERPTVBhdGNo
U3VwcG9ydDo6cGF0Y2hOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBEb24ndCBwYXJzZSA8aHRtbD4gYXMgYSBmcmFnbWVu
dC4KKyAgICBpZiAobm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCAobm9kZS0+cGFyZW50Tm9kZSgp
ICYmIG5vZGUtPnBhcmVudE5vZGUoKS0+aXNEb2N1bWVudE5vZGUoKSkpIHsKKyAgICAgICAgcGF0
Y2hEb2N1bWVudChtYXJrdXApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBOb2Rl
KiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUobV9k
b2N1bWVudCk7CisgICAgZnJhZ21lbnQtPnBhcnNlSFRNTChtYXJrdXAsIG5vZGUtPnBhcmVudEVs
ZW1lbnQoKSA/IG5vZGUtPnBhcmVudEVsZW1lbnQoKSA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxl
bWVudCgpKTsKKworICAgIC8vIENvbXBvc2UgdGhlIG9sZCBsaXN0LgorICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgVmVjdG9yPE93blB0cjxE
aWdlc3Q+ID4gb2xkTGlzdDsKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gcGFyZW50Tm9kZS0+Zmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAg
b2xkTGlzdC5hcHBlbmQoY3JlYXRlRGlnZXN0KGNoaWxkLCAwKSk7CisKKyAgICAvLyBDb21wb3Nl
IHRoZSBuZXcgbGlzdC4KKyAgICBTdHJpbmcgbWFya3VwQ29weSA9IG1hcmt1cDsKKyAgICBtYXJr
dXBDb3B5Lm1ha2VMb3dlcigpOworICAgIFZlY3RvcjxPd25QdHI8RGlnZXN0PiA+IG5ld0xpc3Q7
CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQg
IT0gbm9kZTsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgbmV3TGlzdC5h
cHBlbmQoY3JlYXRlRGlnZXN0KGNoaWxkLCAwKSk7CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IGZy
YWdtZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShoZWFkVGFnKSAmJiAhY2hpbGQtPmZp
cnN0Q2hpbGQoKSAmJiBtYXJrdXBDb3B5LmZpbmQoIjwvaGVhZD4iKSA9PSBub3RGb3VuZCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBIVE1MNSBwYXJzZXIgaW5zZXJ0cyBlbXB0eSA8aGVhZD4g
dGFnIHdoZW5ldmVyIGl0IHBhcnNlcyA8Ym9keT4KKyAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKGJvZHlUYWcpICYmICFjaGlsZC0+Zmlyc3RDaGlsZCgpICYmIG1hcmt1cENvcHkuZmluZCgi
PC9ib2R5PiIpID09IG5vdEZvdW5kKQorICAgICAgICAgICAgY29udGludWU7IC8vIEhUTUw1IHBh
cnNlciBpbnNlcnRzIGVtcHR5IDxib2R5PiB0YWcgd2hlbmV2ZXIgaXQgcGFyc2VzIDwvaGVhZD4K
KyAgICAgICAgbmV3TGlzdC5hcHBlbmQoY3JlYXRlRGlnZXN0KGNoaWxkLCAmbV91bnVzZWROb2Rl
c01hcCkpOworICAgIH0KKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbm9kZS0+bmV4dFNpYmxpbmco
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIG5ld0xpc3Qu
YXBwZW5kKGNyZWF0ZURpZ2VzdChjaGlsZCwgMCkpOworCisgICAgaW5uZXJQYXRjaENoaWxkcmVu
KHBhcmVudE5vZGUsIG9sZExpc3QsIG5ld0xpc3QsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgLy8gRmFsbCBiYWNrIHRvIHRvdGFsIHJlcGxhY2UuCisgICAgICAgIGVjID0gMDsKKyAgICAg
ICAgcGFyZW50Tm9kZS0+cmVwbGFjZUNoaWxkKGZyYWdtZW50LnJlbGVhc2UoKSwgbm9kZSwgZWMp
OworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0
dXJuIHByZXZpb3VzU2libGluZyA/IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKSA6IHBh
cmVudE5vZGUtPmZpcnN0Q2hpbGQoKTsKK30KKwordm9pZCBET01QYXRjaFN1cHBvcnQ6OmlubmVy
UGF0Y2hOb2RlKERpZ2VzdCogb2xkRGlnZXN0LCBEaWdlc3QqIG5ld0RpZ2VzdCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKG9sZERpZ2VzdC0+bV9zaGExID09IG5ld0RpZ2VzdC0+bV9z
aGExKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBvbGROb2RlID0gb2xkRGlnZXN0LT5t
X25vZGU7CisgICAgTm9kZSogbmV3Tm9kZSA9IG5ld0RpZ2VzdC0+bV9ub2RlOworCisgICAgaWYg
KG5ld05vZGUtPm5vZGVUeXBlKCkgIT0gb2xkTm9kZS0+bm9kZVR5cGUoKSB8fCBuZXdOb2RlLT5u
b2RlTmFtZSgpICE9IG9sZE5vZGUtPm5vZGVOYW1lKCkpIHsKKyAgICAgICAgb2xkTm9kZS0+cGFy
ZW50Tm9kZSgpLT5yZXBsYWNlQ2hpbGQobmV3Tm9kZSwgb2xkTm9kZSwgZWMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG9sZE5vZGUtPm5vZGVWYWx1ZSgpICE9IG5ld05vZGUt
Pm5vZGVWYWx1ZSgpKQorICAgICAgICBvbGROb2RlLT5zZXROb2RlVmFsdWUobmV3Tm9kZS0+bm9k
ZVZhbHVlKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChv
bGROb2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gUGF0Y2ggYXR0cmlidXRlcworICAgIEVsZW1lbnQqIG9sZEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4ob2xkTm9kZSk7CisgICAgRWxlbWVudCogbmV3RWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuZXdOb2RlKTsKKyAgICBpZiAob2xkRGlnZXN0LT5tX2F0
dHJzU0hBMSAhPSBuZXdEaWdlc3QtPm1fYXR0cnNTSEExKSB7CisgICAgICAgIC8vIEZJWE1FOiBD
cmVhdGUgYSBmdW5jdGlvbiBpbiBFbGVtZW50IGZvciByZW1vdmluZyBhbGwgcHJvcGVydGllcy4g
VGFrZSBpbiBhY2NvdW50IHdoZXRoZXIgZGlkL3dpbGxNb2RpZnlBdHRyaWJ1dGUgYXJlIGltcG9y
dGFudC4KKyAgICAgICAgaWYgKG9sZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRl
KCkpIHsKKyAgICAgICAgICAgIHdoaWxlIChvbGRFbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgpKQor
ICAgICAgICAgICAgICAgIG9sZEVsZW1lbnQtPnJlbW92ZUF0dHJpYnV0ZSgwKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgYSBmdW5jdGlvbiBpbiBFbGVtZW50IGZvciBj
b3B5aW5nIHByb3BlcnRpZXMuIHNldEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpIGlzIGNsb3NlIGJ1
dCBub3QgZW5vdWdoIGZvciB0aGlzIGNhc2UuCisgICAgICAgIGlmIChuZXdFbGVtZW50LT5oYXNB
dHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKSB7CisgICAgICAgICAgICBzaXplX3QgbnVtQXR0cnMg
PSBuZXdFbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1BdHRyczsgKytpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgQXR0cmli
dXRlKiBhdHRyaWJ1dGUgPSBuZXdFbGVtZW50LT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAg
ICAgICAgIG9sZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmli
dXRlLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlu
bmVyUGF0Y2hDaGlsZHJlbihvbGRFbGVtZW50LCBvbGREaWdlc3QtPm1fY2hpbGRyZW4sIG5ld0Rp
Z2VzdC0+bV9jaGlsZHJlbiwgZWMpOworICAgIG1fdW51c2VkTm9kZXNNYXAucmVtb3ZlKG5ld0Rp
Z2VzdC0+bV9zaGExKTsKK30KKworcGFpcjxET01QYXRjaFN1cHBvcnQ6OlJlc3VsdE1hcCwgRE9N
UGF0Y2hTdXBwb3J0OjpSZXN1bHRNYXA+CitET01QYXRjaFN1cHBvcnQ6OmRpZmYoY29uc3QgVmVj
dG9yPE93blB0cjxEaWdlc3Q+ID4mIG9sZExpc3QsIGNvbnN0IFZlY3RvcjxPd25QdHI8RGlnZXN0
PiA+JiBuZXdMaXN0KQoreworICAgIFJlc3VsdE1hcCBuZXdNYXAobmV3TGlzdC5zaXplKCkpOwor
ICAgIFJlc3VsdE1hcCBvbGRNYXAob2xkTGlzdC5zaXplKCkpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvbGRNYXAuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgb2xkTWFwW2ldLmZpcnN0
ID0gMDsKKyAgICAgICAgb2xkTWFwW2ldLnNlY29uZCA9IDA7CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuZXdNYXAuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbmV3TWFwW2ld
LmZpcnN0ID0gMDsKKyAgICAgICAgbmV3TWFwW2ldLnNlY29uZCA9IDA7CisgICAgfQorCisgICAg
Ly8gVHJpbSBoZWFkIGFuZCB0YWlsLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTGlz
dC5zaXplKCkgJiYgaSA8IG5ld0xpc3Quc2l6ZSgpICYmIG9sZExpc3RbaV0tPm1fc2hhMSA9PSBu
ZXdMaXN0W2ldLT5tX3NoYTE7ICsraSkgeworICAgICAgICBvbGRNYXBbaV0uZmlyc3QgPSBvbGRM
aXN0W2ldLmdldCgpOworICAgICAgICBvbGRNYXBbaV0uc2Vjb25kID0gaTsKKyAgICAgICAgbmV3
TWFwW2ldLmZpcnN0ID0gbmV3TGlzdFtpXS5nZXQoKTsKKyAgICAgICAgbmV3TWFwW2ldLnNlY29u
ZCA9IGk7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkTGlzdC5zaXplKCkg
JiYgaSA8IG5ld0xpc3Quc2l6ZSgpICYmIG9sZExpc3Rbb2xkTGlzdC5zaXplKCkgLSBpIC0gMV0t
Pm1fc2hhMSA9PSBuZXdMaXN0W25ld0xpc3Quc2l6ZSgpIC0gaSAtIDFdLT5tX3NoYTE7ICsraSkg
eworICAgICAgICBzaXplX3Qgb2xkSW5kZXggPSBvbGRMaXN0LnNpemUoKSAtIGkgLSAxOworICAg
ICAgICBzaXplX3QgbmV3SW5kZXggPSBuZXdMaXN0LnNpemUoKSAtIGkgLSAxOworICAgICAgICBv
bGRNYXBbb2xkSW5kZXhdLmZpcnN0ID0gb2xkTGlzdFtvbGRJbmRleF0uZ2V0KCk7CisgICAgICAg
IG9sZE1hcFtvbGRJbmRleF0uc2Vjb25kID0gbmV3SW5kZXg7CisgICAgICAgIG5ld01hcFtuZXdJ
bmRleF0uZmlyc3QgPSBuZXdMaXN0W25ld0luZGV4XS5nZXQoKTsKKyAgICAgICAgbmV3TWFwW25l
d0luZGV4XS5zZWNvbmQgPSBvbGRJbmRleDsKKyAgICB9CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8c2l6ZV90PiA+IERpZmZUYWJsZTsKKyAgICBEaWZmVGFibGUgbmV3VGFi
bGU7CisgICAgRGlmZlRhYmxlIG9sZFRhYmxlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBuZXdMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIERpZmZUYWJsZTo6aXRlcmF0b3IgaXQg
PSBuZXdUYWJsZS5hZGQobmV3TGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6ZV90PigpKS5maXJz
dDsKKyAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgfQorCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIERpZmZUYWJsZTo6
aXRlcmF0b3IgaXQgPSBvbGRUYWJsZS5hZGQob2xkTGlzdFtpXS0+bV9zaGExLCBWZWN0b3I8c2l6
ZV90PigpKS5maXJzdDsKKyAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoaSk7CisgICAgfQorCisg
ICAgZm9yIChEaWZmVGFibGU6Oml0ZXJhdG9yIG5ld0l0ID0gbmV3VGFibGUuYmVnaW4oKTsgbmV3
SXQgIT0gbmV3VGFibGUuZW5kKCk7ICsrbmV3SXQpIHsKKyAgICAgICAgaWYgKG5ld0l0LT5zZWNv
bmQuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBEaWZmVGFi
bGU6Oml0ZXJhdG9yIG9sZEl0ID0gb2xkVGFibGUuZmluZChuZXdJdC0+Zmlyc3QpOworICAgICAg
ICBpZiAob2xkSXQgPT0gb2xkVGFibGUuZW5kKCkgfHwgb2xkSXQtPnNlY29uZC5zaXplKCkgIT0g
MSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5ld01hcFtuZXdJdC0+c2Vjb25k
WzBdXSA9IG1ha2VfcGFpcihuZXdMaXN0W25ld0l0LT5zZWNvbmRbMF1dLmdldCgpLCBvbGRJdC0+
c2Vjb25kWzBdKTsKKyAgICAgICAgb2xkTWFwW29sZEl0LT5zZWNvbmRbMF1dID0gbWFrZV9wYWly
KG9sZExpc3Rbb2xkSXQtPnNlY29uZFswXV0uZ2V0KCksIG5ld0l0LT5zZWNvbmRbMF0pOworICAg
IH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBuZXdMaXN0LnNpemUoKSA+IDAgJiYgaSA8IG5l
d0xpc3Quc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGlmICghbmV3TWFwW2ldLmZpcnN0IHx8
IG5ld01hcFtpICsgMV0uZmlyc3QpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBz
aXplX3QgaiA9IG5ld01hcFtpXS5zZWNvbmQgKyAxOworICAgICAgICBpZiAoaiA8IG9sZE1hcC5z
aXplKCkgJiYgIW9sZE1hcFtqXS5maXJzdCAmJiBuZXdMaXN0W2kgKyAxXS0+bV9zaGExID09IG9s
ZExpc3Rbal0tPm1fc2hhMSkgeworICAgICAgICAgICAgbmV3TWFwW2kgKyAxXSA9IG1ha2VfcGFp
cihuZXdMaXN0W2kgKyAxXS5nZXQoKSwgaik7CisgICAgICAgICAgICBvbGRNYXBbal0gPSBtYWtl
X3BhaXIob2xkTGlzdFtqXS5nZXQoKSwgaSArIDEpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChzaXplX3QgaSA9IG5ld0xpc3Quc2l6ZSgpIC0gMTsgbmV3TGlzdC5zaXplKCkgPiAwICYm
IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgaWYgKCFuZXdNYXBbaV0uZmlyc3QgfHwgbmV3TWFwW2kg
LSAxXS5maXJzdCB8fCBuZXdNYXBbaV0uc2Vjb25kIDw9IDApCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBzaXplX3QgaiA9IG5ld01hcFtpXS5zZWNvbmQgLSAxOworICAgICAgICBp
ZiAoIW9sZE1hcFtqXS5maXJzdCAmJiBuZXdMaXN0W2kgLSAxXS0+bV9zaGExID09IG9sZExpc3Rb
al0tPm1fc2hhMSkgeworICAgICAgICAgICAgbmV3TWFwW2kgLSAxXSA9IG1ha2VfcGFpcihuZXdM
aXN0W2kgLSAxXS5nZXQoKSwgaik7CisgICAgICAgICAgICBvbGRNYXBbal0gPSBtYWtlX3BhaXIo
b2xkTGlzdFtqXS5nZXQoKSwgaSAtIDEpOworICAgICAgICB9CisgICAgfQorCisjaWZkZWYgREVC
VUdfRE9NX1BBVENIX1NVUFBPUlQKKyAgICBkdW1wTWFwKG9sZE1hcCwgIk9MRCIpOworICAgIGR1
bXBNYXAobmV3TWFwLCAiTkVXIik7CisjZW5kaWYKKworICAgIHJldHVybiBtYWtlX3BhaXIob2xk
TWFwLCBuZXdNYXApOworfQorCit2b2lkIERPTVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaENoaWxk
cmVuKENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFZlY3RvcjxPd25QdHI8RGlnZXN0
PiA+JiBvbGRMaXN0LCBjb25zdCBWZWN0b3I8T3duUHRyPERpZ2VzdD4gPiYgbmV3TGlzdCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcGFpcjxSZXN1bHRNYXAsIFJlc3VsdE1hcD4gcmVzdWx0
TWFwcyA9IGRpZmYob2xkTGlzdCwgbmV3TGlzdCk7CisgICAgUmVzdWx0TWFwJiBvbGRNYXAgPSBy
ZXN1bHRNYXBzLmZpcnN0OworICAgIFJlc3VsdE1hcCYgbmV3TWFwID0gcmVzdWx0TWFwcy5zZWNv
bmQ7CisKKyAgICBEaWdlc3QqIG9sZEhlYWQgPSAwOworICAgIERpZ2VzdCogb2xkQm9keSA9IDA7
CisKKyAgICAvLyAxLiBGaXJzdCBzdHJpcCBldmVyeXRoaW5nIGV4Y2VwdCBmb3IgdGhlIG5vZGVz
IHRoYXQgcmV0YWluLiBDb2xsZWN0IHBlbmRpbmcgbWVyZ2VzLgorICAgIEhhc2hNYXA8RGlnZXN0
KiwgRGlnZXN0Kj4gbWVyZ2VzOworICAgIEhhc2hTZXQ8c2l6ZV90PiB1c2VkTmV3T3JkaW5hbHM7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGRMaXN0LnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChvbGRNYXBbaV0uZmlyc3QpIHsKKyAgICAgICAgICAgIGlmICghdXNlZE5ld09yZGlu
YWxzLmNvbnRhaW5zKG9sZE1hcFtpXS5zZWNvbmQpKSB7CisgICAgICAgICAgICAgICAgdXNlZE5l
d09yZGluYWxzLmFkZChvbGRNYXBbaV0uc2Vjb25kKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9sZE1hcFtpXS5maXJzdCA9IDA7CisgICAg
ICAgICAgICBvbGRNYXBbaV0uc2Vjb25kID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFs
d2F5cyBtYXRjaCA8aGVhZD4gYW5kIDxib2R5PiB0YWdzIHdpdGggZWFjaCBvdGhlciAtIHdlIGNh
bid0IHJlbW92ZSB0aGVtIGZyb20gdGhlIERPTQorICAgICAgICAvLyB1cG9uIHBhdGNoaW5nLgor
ICAgICAgICBpZiAob2xkTGlzdFtpXS0+bV9ub2RlLT5oYXNUYWdOYW1lKGhlYWRUYWcpKSB7Cisg
ICAgICAgICAgICBvbGRIZWFkID0gb2xkTGlzdFtpXS5nZXQoKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChvbGRMaXN0W2ldLT5tX25vZGUtPmhhc1RhZ05h
bWUoYm9keVRhZykpIHsKKyAgICAgICAgICAgIG9sZEJvZHkgPSBvbGRMaXN0W2ldLmdldCgpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB0
aGlzIGNoYW5nZSBpcyBiZXR3ZWVuIHN0YWJsZSBub2Rlcy4gSWYgaXQgaXMsIGNvbnNpZGVyIGl0
IGFzICJtb2RpZmllZCIuCisgICAgICAgIGlmICghbV91bnVzZWROb2Rlc01hcC5jb250YWlucyhv
bGRMaXN0W2ldLT5tX3NoYTEpICYmICghaSB8fCBvbGRNYXBbaSAtIDFdLmZpcnN0KSAmJiAoaSA9
PSBvbGRNYXAuc2l6ZSgpIC0gMSB8fCBvbGRNYXBbaSArIDFdLmZpcnN0KSkgeworICAgICAgICAg
ICAgc2l6ZV90IGFuY2hvckNhbmRpZGF0ZSA9IGkgPyBvbGRNYXBbaSAtIDFdLnNlY29uZCArIDEg
OiAwOworICAgICAgICAgICAgc2l6ZV90IGFuY2hvckFmdGVyID0gaSA9PSBvbGRNYXAuc2l6ZSgp
IC0gMSA/IGFuY2hvckNhbmRpZGF0ZSArIDEgOiBvbGRNYXBbaSArIDFdLnNlY29uZDsKKyAgICAg
ICAgICAgIGlmIChhbmNob3JBZnRlciAtIGFuY2hvckNhbmRpZGF0ZSA9PSAxICYmIGFuY2hvckNh
bmRpZGF0ZSA8IG5ld0xpc3Quc2l6ZSgpKQorICAgICAgICAgICAgICAgIG1lcmdlcy5zZXQobmV3
TGlzdFthbmNob3JDYW5kaWRhdGVdLmdldCgpLCBvbGRMaXN0W2ldLmdldCgpKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkKG9sZExpc3RbaV0uZ2V0KCks
IGVjKTsKKyAgICAgICAgICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlbW92ZUNo
aWxkKG9sZExpc3RbaV0uZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGlmIChlYykKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBNYXJrIHJldGFpbmVk
IG5vZGVzIGFzIHVzZWQsIGRvIG5vdCByZXVzZSBub2RlIG1vcmUgdGhhbiBvbmNlLgorICAgIEhh
c2hTZXQ8c2l6ZV90PiB1c2VkT2xkT3JkaW5hbHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBuZXdMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghbmV3TWFwW2ldLmZpcnN0KQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHNpemVfdCBvbGRPcmRpbmFsID0gbmV3TWFw
W2ldLnNlY29uZDsKKyAgICAgICAgaWYgKHVzZWRPbGRPcmRpbmFscy5jb250YWlucyhvbGRPcmRp
bmFsKSkgeworICAgICAgICAgICAgLy8gRG8gbm90IG1hcCBub2RlIG1vcmUgdGhhbiBvbmNlCisg
ICAgICAgICAgICBuZXdNYXBbaV0uZmlyc3QgPSAwOworICAgICAgICAgICAgbmV3TWFwW2ldLnNl
Y29uZCA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB1c2Vk
T2xkT3JkaW5hbHMuYWRkKG9sZE9yZGluYWwpOworICAgICAgICBtYXJrTm9kZUFzVXNlZChuZXdN
YXBbaV0uZmlyc3QpOworICAgIH0KKworICAgIC8vIE1hcmsgPGhlYWQ+IGFuZCA8Ym9keT4gbm9k
ZXMgZm9yIG1lcmdlLgorICAgIGlmIChvbGRIZWFkIHx8IG9sZEJvZHkpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBuZXdMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAob2xkSGVhZCAmJiBuZXdMaXN0W2ldLT5tX25vZGUtPmhhc1RhZ05hbWUoaGVhZFRhZykpCisg
ICAgICAgICAgICAgICAgbWVyZ2VzLnNldChuZXdMaXN0W2ldLmdldCgpLCBvbGRIZWFkKTsKKyAg
ICAgICAgICAgIGlmIChvbGRCb2R5ICYmIG5ld0xpc3RbaV0tPm1fbm9kZS0+aGFzVGFnTmFtZShi
b2R5VGFnKSkKKyAgICAgICAgICAgICAgICBtZXJnZXMuc2V0KG5ld0xpc3RbaV0uZ2V0KCksIG9s
ZEJvZHkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMi4gUGF0Y2ggbm9kZXMgbWFya2Vk
IGZvciBtZXJnZS4KKyAgICBmb3IgKEhhc2hNYXA8RGlnZXN0KiwgRGlnZXN0Kj46Oml0ZXJhdG9y
IGl0ID0gbWVyZ2VzLmJlZ2luKCk7IGl0ICE9IG1lcmdlcy5lbmQoKTsgKytpdCkgeworICAgICAg
ICBpbm5lclBhdGNoTm9kZShpdC0+c2Vjb25kLCBpdC0+Zmlyc3QsIGVjKTsKKyAgICAgICAgaWYg
KGVjKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIDMuIEluc2VydCBtaXNz
aW5nIG5vZGVzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3TWFwLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChuZXdNYXBbaV0uZmlyc3QgfHwgbWVyZ2VzLmNvbnRhaW5zKG5ld0xp
c3RbaV0uZ2V0KCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgICAgIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBuZXdMaXN0W2ld
LmdldCgpLCBwYXJlbnROb2RlLT5jaGlsZE5vZGUoaSksIGVjKTsKKyAgICAgICAgaWYgKGVjKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIDQuIFRoZW4gcHV0IGFsbCBub2Rl
cyB0aGF0IHJldGFpbmVkIGludG8gdGhlaXIgc2xvdHMgKHNvcnQgYnkgbmV3IGluZGV4KS4KKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZE1hcC5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAoIW9sZE1hcFtpXS5maXJzdCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZWZQ
dHI8Tm9kZT4gbm9kZSA9IG9sZE1hcFtpXS5maXJzdC0+bV9ub2RlOworICAgICAgICBOb2RlKiBh
bmNob3JOb2RlID0gcGFyZW50Tm9kZS0+Y2hpbGROb2RlKG9sZE1hcFtpXS5zZWNvbmQpOworICAg
ICAgICBpZiAobm9kZS5nZXQoKSA9PSBhbmNob3JOb2RlKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoaGVhZFRhZykpCisgICAgICAgICAgICBjb250aW51ZTsgLy8gTmV2ZXIgbW92ZSBoZWFkIG9y
IGJvZHksIG1vdmUgdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGFyb3VuZCB0aGVtLgorCisgICAgICAg
IHBhcmVudE5vZGUtPmluc2VydEJlZm9yZShub2RlLCBhbmNob3JOb2RlLCBlYyk7CisgICAgICAg
IGlmIChlYykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFk
ZFN0cmluZ1RvU0hBMShTSEExJiBzaGExLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBD
U3RyaW5nIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOworICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oY1N0cmluZy5kYXRhKCkpLCBjU3RyaW5nLmxlbmd0
aCgpKTsKK30KKworUGFzc093blB0cjxET01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4gRE9NUGF0Y2hT
dXBwb3J0OjpjcmVhdGVEaWdlc3QoTm9kZSogbm9kZSwgVW51c2VkTm9kZXNNYXAqIHVudXNlZE5v
ZGVzTWFwKQoreworICAgIERpZ2VzdCogZGlnZXN0ID0gbmV3IERpZ2VzdChub2RlKTsKKworICAg
IFNIQTEgc2hhMTsKKworICAgIE5vZGU6Ok5vZGVUeXBlIG5vZGVUeXBlID0gbm9kZS0+bm9kZVR5
cGUoKTsKKyAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KCZub2RlVHlwZSksIHNpemVvZihub2RlVHlwZSkpOworICAgIGFkZFN0cmluZ1RvU0hBMShzaGEx
LCBub2RlLT5ub2RlTmFtZSgpKTsKKyAgICBhZGRTdHJpbmdUb1NIQTEoc2hhMSwgbm9kZS0+bm9k
ZVZhbHVlKCkpOworCisgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9O
T0RFKSB7CisgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAg
ICB3aGlsZSAoY2hpbGQpIHsKKyAgICAgICAgICAgIE93blB0cjxEaWdlc3Q+IGNoaWxkSW5mbyA9
IGNyZWF0ZURpZ2VzdChjaGlsZCwgdW51c2VkTm9kZXNNYXApOworICAgICAgICAgICAgYWRkU3Ry
aW5nVG9TSEExKHNoYTEsIGNoaWxkSW5mby0+bV9zaGExKTsKKyAgICAgICAgICAgIGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBkaWdlc3QtPm1fY2hpbGRyZW4uYXBw
ZW5kKGNoaWxkSW5mby5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisKKyAgICAgICAgaWYgKGVsZW1l
bnQtPmhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBu
dW1BdHRycyA9IGVsZW1lbnQtPmF0dHJpYnV0ZUNvdW50KCk7CisgICAgICAgICAgICBTSEExIGF0
dHJzU0hBMTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQXR0cnM7ICsr
aSkgeworICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZWxlbWVu
dC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0
cnNTSEExLCBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBh
ZGRTdHJpbmdUb1NIQTEoYXR0cnNTSEExLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3QsIDIwPiBhdHRyc0hhc2g7CisgICAgICAg
ICAgICBhdHRyc1NIQTEuY29tcHV0ZUhhc2goYXR0cnNIYXNoKTsKKyAgICAgICAgICAgIGRpZ2Vz
dC0+bV9hdHRyc1NIQTEgPSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oYXR0cnNIYXNoLmRhdGEoKSksIDEwKTsKKyAgICAgICAgICAgIGFkZFN0cmluZ1RvU0hBMShz
aGExLCBkaWdlc3QtPm1fYXR0cnNTSEExKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlY3Rv
cjx1aW50OF90LCAyMD4gaGFzaDsKKyAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOworICAgIGRp
Z2VzdC0+bV9zaGExID0gYmFzZTY0RW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGhhc2guZGF0YSgpKSwgMTApOworICAgIGlmICh1bnVzZWROb2Rlc01hcCkKKyAgICAgICAgdW51
c2VkTm9kZXNNYXAtPmFkZChkaWdlc3QtPm1fc2hhMSwgZGlnZXN0KTsKKyAgICByZXR1cm4gYWRv
cHRQdHIoZGlnZXN0KTsKK30KKwordm9pZCBET01QYXRjaFN1cHBvcnQ6Omluc2VydEJlZm9yZShD
b250YWluZXJOb2RlKiBwYXJlbnROb2RlLCBEaWdlc3QqIGRpZ2VzdCwgTm9kZSogYW5jaG9yLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBwYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoZGlnZXN0
LT5tX25vZGUsIGFuY2hvciwgZWMpOworICAgIG1hcmtOb2RlQXNVc2VkKGRpZ2VzdCk7Cit9CisK
K3ZvaWQgRE9NUGF0Y2hTdXBwb3J0OjpyZW1vdmVDaGlsZChEaWdlc3QqIG9sZERpZ2VzdCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPE5vZGU+IG9sZE5vZGUgPSBvbGREaWdlc3Qt
Pm1fbm9kZTsKKyAgICBvbGROb2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG9sZE5vZGUu
Z2V0KCksIGVjKTsKKworICAgIC8vIERpZmYgd29ya3Mgd2l0aGluIGxldmVscy4gSW4gb3JkZXIg
bm90IHRvIGxvc2UgdGhlIG5vZGUgaWRlbnRpdHkgd2hlbiB1c2VyCisgICAgLy8gcHJlcGVuZHMg
aGlzIEhUTUwgd2l0aCAiPGRpdj4iIChpLmUuIGFsbCBub2RlcyBhcmUgc2hpZnRlZCB0byB0aGUg
bmV4dCBuZXN0ZWQgbGV2ZWwpLAorICAgIC8vIHByaW9yIHRvIGRyb3BwaW5nIHRoZSBvcmlnaW5h
bCBub2RlIG9uIHRoZSBmbG9vciwgY2hlY2sgd2hldGhlciBuZXcgRE9NIGhhcyBhIGRpZ2VzdAor
ICAgIC8vIHdpdGggbWF0Y2hpbmcgc2hhMS4gSWYgaXQgZG9lcywgcmVwbGFjZSBpdCB3aXRoIHRo
ZSBvcmlnaW5hbCBET00gY2h1bmsuIENoYW5jZXMgYXJlCisgICAgLy8gaGlnaCB0aGF0IGl0IHdp
bGwgZ2V0IG1lcmdlZCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIERPTSBkdXJpbmcgdGhlIGZ1cnRo
ZXIgcGF0Y2hpbmcuCisKKyAgICBVbnVzZWROb2Rlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3VudXNl
ZE5vZGVzTWFwLmZpbmQob2xkRGlnZXN0LT5tX3NoYTEpOworICAgIGlmIChpdCAhPSBtX3VudXNl
ZE5vZGVzTWFwLmVuZCgpKSB7CisgICAgICAgIERpZ2VzdCogbmV3RGlnZXN0ID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgTm9kZSogbmV3Tm9kZSA9IG5ld0RpZ2VzdC0+bV9ub2RlOworICAgICAgICBu
ZXdOb2RlLT5wYXJlbnROb2RlKCktPnJlcGxhY2VDaGlsZChvbGROb2RlLCBuZXdOb2RlLCBlYyk7
CisgICAgICAgIG5ld0RpZ2VzdC0+bV9ub2RlID0gb2xkTm9kZS5nZXQoKTsKKyAgICAgICAgbWFy
a05vZGVBc1VzZWQobmV3RGlnZXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkRGlnZXN0LT5tX2NoaWxkcmVuLnNpemUoKTsgKytpKQor
ICAgICAgICByZW1vdmVDaGlsZChvbGREaWdlc3QtPm1fY2hpbGRyZW5baV0uZ2V0KCksIGVjKTsK
K30KKwordm9pZCBET01QYXRjaFN1cHBvcnQ6Om1hcmtOb2RlQXNVc2VkKERpZ2VzdCogZGlnZXN0
KQoreworICAgIERlcXVlPERpZ2VzdCo+IHF1ZXVlOworICAgIHF1ZXVlLmFwcGVuZChkaWdlc3Qp
OworICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIERpZ2VzdCogZmlyc3Qg
PSBxdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgbV91bnVzZWROb2Rlc01hcC5yZW1vdmUoZmly
c3QtPm1fc2hhMSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlyc3QtPm1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBxdWV1ZS5hcHBlbmQoZmlyc3QtPm1fY2hp
bGRyZW5baV0uZ2V0KCkpOworICAgIH0KK30KKworI2lmZGVmIERFQlVHX0RPTV9QQVRDSF9TVVBQ
T1JUCitzdGF0aWMgU3RyaW5nIG5vZGVOYW1lKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG5vZGUt
PmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpKQorICAgICAgICAgcmV0dXJuIG5vZGUtPm5v
ZGVOYW1lKCk7CisgICAgcmV0dXJuIG5vZGUtPm5vZGVOYW1lKCkubG93ZXIoKTsKK30KKwordm9p
ZCBET01QYXRjaFN1cHBvcnQ6OmR1bXBNYXAoY29uc3QgUmVzdWx0TWFwJiBtYXAsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuXG4iKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1hcC5zaXplKCk7ICsraSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIlc1slbHVdOiAlcyAoJXApIC0gWyVsdV1cbiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgaSwgbWFw
W2ldLmZpcnN0ID8gbm9kZU5hbWUobWFwW2ldLmZpcnN0LT5tX25vZGUpLnV0ZjgoKS5kYXRhKCkg
OiAiIiwgbWFwW2ldLmZpcnN0LCBtYXBbaV0uc2Vjb25kKTsKK30KKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhMDcxOTI3ZmFh
OTdjNGM0OWJkY2M0ZTI4MTA1M2IwZmE3MGZlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmgKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgRE9NUGF0Y2hTdXBwb3J0X2gKKyNkZWZpbmUgRE9NUGF0Y2hTdXBwb3J0X2gKKworI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBEb2N1bWVudDsKK2Ns
YXNzIE5hbWVkTm9kZU1hcDsKK2NsYXNzIE5vZGU7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CitjbGFzcyBET01QYXRjaFN1cHBvcnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERPTVBh
dGNoU3VwcG9ydCk7CitwdWJsaWM6CisgICAgZXhwbGljaXQgRE9NUGF0Y2hTdXBwb3J0KERvY3Vt
ZW50Kik7CisgICAgdmlydHVhbCB+RE9NUGF0Y2hTdXBwb3J0KCk7CisKKyAgICB2b2lkIHBhdGNo
RG9jdW1lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXApOworICAgIE5vZGUqIHBhdGNoTm9kZShOb2Rl
KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAg
ICBzdHJ1Y3QgRGlnZXN0OworICAgIHR5cGVkZWYgVmVjdG9yPHBhaXI8RGlnZXN0Kiwgc2l6ZV90
PiA+IFJlc3VsdE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEaWdlc3QqPiBVbnVz
ZWROb2Rlc01hcDsKKworICAgIHZvaWQgaW5uZXJQYXRjaE5vZGUoRGlnZXN0KiBvbGROb2RlLCBE
aWdlc3QqIG5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGQ6OnBhaXI8UmVzdWx0TWFw
LCBSZXN1bHRNYXA+IGRpZmYoY29uc3QgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4mIG9sZENoaWxk
cmVuLCBjb25zdCBWZWN0b3I8T3duUHRyPERpZ2VzdD4gPiYgbmV3Q2hpbGRyZW4pOworICAgIHZv
aWQgaW5uZXJQYXRjaENoaWxkcmVuKENvbnRhaW5lck5vZGUqLCBjb25zdCBWZWN0b3I8T3duUHRy
PERpZ2VzdD4gPiYgb2xkQ2hpbGRyZW4sIGNvbnN0IFZlY3RvcjxPd25QdHI8RGlnZXN0PiA+JiBu
ZXdDaGlsZHJlbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NPd25QdHI8RGlnZXN0PiBjcmVh
dGVEaWdlc3QoTm9kZSosIFVudXNlZE5vZGVzTWFwKik7CisgICAgdm9pZCBpbnNlcnRCZWZvcmUo
Q29udGFpbmVyTm9kZSosIERpZ2VzdCosIE5vZGUqIGFuY2hvciwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgcmVtb3ZlQ2hpbGQoRGlnZXN0KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
bWFya05vZGVBc1VzZWQoRGlnZXN0Kik7CisjaWZkZWYgREVCVUdfRE9NX1BBVENIX1NVUFBPUlQK
KyAgICB2b2lkIGR1bXBNYXAoY29uc3QgUmVzdWx0TWFwJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
KyNlbmRpZgorCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisKKyAgICBVbnVzZWROb2Rlc01h
cCBtX3VudXNlZE5vZGVzTWFwOworfTsKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKERPTVBhdGNoU3Vw
cG9ydF9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAKaW5kZXggOTgxODVjMTc4YjcwNmIxNDI1ZmM0YWZiY2I0N2RhMjE2OTRmODlmMC4uZDI1MzUy
NTkyYzg4N2E2YWE4NDQwZTJjOGI0NWUyMGI4YmU1YmIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5j
bHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NRWRpdG9yLmgiCiAjaW5jbHVkZSAiRE9N
Tm9kZUhpZ2hsaWdodGVyLmgiCisjaW5jbHVkZSAiRE9NUGF0Y2hTdXBwb3J0LmgiCiAjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCkBAIC02Niw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JIaXN0b3J5LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNs
dWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCkBAIC0xNzcsMjUxICsxNzksNiBAQCB2b2lkIFJl
dmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2s6Om9uVGltZXIoVGltZXI8UmV2YWxpZGF0ZVN0eWxl
QXR0cmlidXRlVGFzaz4qKQogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0KIAotY2xhc3MgSW5z
cGVjdG9yRE9NQWdlbnQ6OkRPTUFjdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rp
b24gewotcHVibGljOgotICAgIERPTUFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUpIDogSW5zcGVj
dG9ySGlzdG9yeTo6QWN0aW9uKG5hbWUpIHsgfQotCi0gICAgdmlydHVhbCBib29sIHBlcmZvcm0o
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQotICAgIHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gcGVyZm9ybShlYyk7Ci0gICAgICAgIGlmIChl
YykgewotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVj
KTsKLSAgICAgICAgICAgICplcnJvclN0cmluZyA9IGRlc2NyaXB0aW9uLm5hbWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiAhZWM7Ci0gICAgfQotCi0gICAgdmlydHVhbCBi
b29sIHVuZG8oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQotICAgIHsKLSAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gdW5kbyhlYyk7Ci0gICAgICAg
IGlmIChlYykgewotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKGVjKTsKLSAgICAgICAgICAgICplcnJvclN0cmluZyA9IGRlc2NyaXB0aW9uLm5hbWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiAhZWM7Ci0gICAgfQotCi0gICAgdmly
dHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgYm9v
bCB1bmRvKEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+
IG1fcGFyZW50Tm9kZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwotICAgIFJlZlB0cjxOb2Rl
PiBtX2FuY2hvck5vZGU7Ci19OwotCi1jbGFzcyBJbnNwZWN0b3JET01BZ2VudDo6UmVtb3ZlQ2hp
bGRBY3Rpb24gOiBwdWJsaWMgSW5zcGVjdG9yRE9NQWdlbnQ6OkRPTUFjdGlvbiB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUmVtb3ZlQ2hpbGRBY3Rpb24pOwotcHVibGljOgotICAgIFJlbW92
ZUNoaWxkQWN0aW9uKE5vZGUqIHBhcmVudE5vZGUsIE5vZGUqIG5vZGUpCi0gICAgICAgIDogSW5z
cGVjdG9yRE9NQWdlbnQ6OkRPTUFjdGlvbigiUmVtb3ZlQ2hpbGQiKQotICAgICAgICAsIG1fcGFy
ZW50Tm9kZShwYXJlbnROb2RlKQotICAgICAgICAsIG1fbm9kZShub2RlKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybShFeGNlcHRpb25Db2RlJiBlYykKLSAgICB7Ci0g
ICAgICAgIG1fYW5jaG9yTm9kZSA9IG1fbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcmV0
dXJuIG1fcGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQobV9ub2RlLmdldCgpLCBlYyk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUobV9ub2RlLmdldCgpLCBtX2FuY2hv
ck5vZGUuZ2V0KCksIGVjKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IG1f
cGFyZW50Tm9kZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwotICAgIFJlZlB0cjxOb2RlPiBt
X2FuY2hvck5vZGU7Ci19OwotCi1jbGFzcyBJbnNwZWN0b3JET01BZ2VudDo6SW5zZXJ0QmVmb3Jl
QWN0aW9uIDogcHVibGljIEluc3BlY3RvckRPTUFnZW50OjpET01BY3Rpb24gewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEluc2VydEJlZm9yZUFjdGlvbik7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0
QmVmb3JlQWN0aW9uKE5vZGUqIHBhcmVudE5vZGUsIE5vZGUqIG5vZGUsIE5vZGUqIGFuY2hvck5v
ZGUpCi0gICAgICAgIDogSW5zcGVjdG9yRE9NQWdlbnQ6OkRPTUFjdGlvbigiSW5zZXJ0QmVmb3Jl
IikKLSAgICAgICAgLCBtX3BhcmVudE5vZGUocGFyZW50Tm9kZSkKLSAgICAgICAgLCBtX25vZGUo
bm9kZSkKLSAgICAgICAgLCBtX2FuY2hvck5vZGUoYW5jaG9yTm9kZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9uQ29kZSYgZWMpCi0gICAgewotICAg
ICAgICBpZiAobV9ub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIG1fcmVtb3ZlQ2hp
bGRBY3Rpb24gPSBhZG9wdFB0cihuZXcgUmVtb3ZlQ2hpbGRBY3Rpb24obV9ub2RlLT5wYXJlbnRO
b2RlKCksIG1fbm9kZS5nZXQoKSkpOwotICAgICAgICAgICAgaWYgKCFtX3JlbW92ZUNoaWxkQWN0
aW9uLT5wZXJmb3JtKGVjKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIG1fcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG1fbm9kZS5nZXQo
KSwgbV9hbmNob3JOb2RlLmdldCgpLCBlYyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHVu
ZG8oRXhjZXB0aW9uQ29kZSYgZWMpCi0gICAgewotICAgICAgICBpZiAobV9yZW1vdmVDaGlsZEFj
dGlvbikKLSAgICAgICAgICAgIHJldHVybiBtX3JlbW92ZUNoaWxkQWN0aW9uLT51bmRvKGVjKTsK
LQotICAgICAgICByZXR1cm4gbV9wYXJlbnROb2RlLT5yZW1vdmVDaGlsZChtX25vZGUuZ2V0KCks
IGVjKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IG1fcGFyZW50Tm9kZTsK
LSAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwotICAgIFJlZlB0cjxOb2RlPiBtX2FuY2hvck5vZGU7
Ci0gICAgT3duUHRyPFJlbW92ZUNoaWxkQWN0aW9uPiBtX3JlbW92ZUNoaWxkQWN0aW9uOwotfTsK
LQotY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ6OlJlbW92ZUF0dHJpYnV0ZUFjdGlvbiA6IHB1Ymxp
YyBJbnNwZWN0b3JET01BZ2VudDo6RE9NQWN0aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShSZW1vdmVBdHRyaWJ1dGVBY3Rpb24pOwotcHVibGljOgotICAgIFJlbW92ZUF0dHJpYnV0ZUFj
dGlvbihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgICAgIDogSW5z
cGVjdG9yRE9NQWdlbnQ6OkRPTUFjdGlvbigiUmVtb3ZlQXR0cmlidXRlIikKLSAgICAgICAgLCBt
X2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgLCBtX25hbWUobmFtZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9uQ29kZSYpCi0gICAgewotICAgICAg
ICBtX3ZhbHVlID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUobV9uYW1lKTsKLSAgICAgICAgbV9l
bGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUobV9uYW1lKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpCi0gICAgewot
ICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVjKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFJlZlB0cjxFbGVtZW50
PiBtX2VsZW1lbnQ7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV92YWx1ZTsKLX07
Ci0KLWNsYXNzIEluc3BlY3RvckRPTUFnZW50OjpTZXRBdHRyaWJ1dGVBY3Rpb24gOiBwdWJsaWMg
SW5zcGVjdG9yRE9NQWdlbnQ6OkRPTUFjdGlvbiB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2V0QXR0cmlidXRlQWN0aW9uKTsKLXB1YmxpYzoKLSAgICBTZXRBdHRyaWJ1dGVBY3Rpb24oRWxl
bWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgICAgICA6IEluc3BlY3RvckRPTUFnZW50OjpET01BY3Rpb24oIlNldEF0dHJpYnV0ZSIpCi0g
ICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgICAgICwgbV9uYW1lKG5hbWUpCi0gICAg
ICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgLCBtX2hhZEF0dHJpYnV0ZShmYWxzZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9uQ29kZSYgZWMp
Ci0gICAgewotICAgICAgICBtX2hhZEF0dHJpYnV0ZSA9IG1fZWxlbWVudC0+aGFzQXR0cmlidXRl
KG1fbmFtZSk7Ci0gICAgICAgIGlmIChtX2hhZEF0dHJpYnV0ZSkKLSAgICAgICAgICAgIG1fb2xk
VmFsdWUgPSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShtX25hbWUpOwotICAgICAgICBtX2VsZW1l
bnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUsIGVjKTsKLSAgICAgICAgcmV0dXJuICFl
YzsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFeGNlcHRpb25Db2RlJiBlYykKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2hhZEF0dHJpYnV0ZSkKLSAgICAgICAgICAgIG1fZWxlbWVudC0+
c2V0QXR0cmlidXRlKG1fbmFtZSwgbV9vbGRWYWx1ZSwgZWMpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2VsZW1lbnQtPnJlbW92ZUF0dHJpYnV0ZShtX25hbWUpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVu
dDsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0cmluZyBtX3ZhbHVlOwotICAgIGJvb2wgbV9o
YWRBdHRyaWJ1dGU7Ci0gICAgU3RyaW5nIG1fb2xkVmFsdWU7Ci19OwotCi1jbGFzcyBJbnNwZWN0
b3JET01BZ2VudDo6U2V0T3V0ZXJIVE1MQWN0aW9uIDogcHVibGljIEluc3BlY3RvckRPTUFnZW50
OjpET01BY3Rpb24gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNldE91dGVySFRNTEFjdGlv
bik7Ci1wdWJsaWM6Ci0gICAgU2V0T3V0ZXJIVE1MQWN0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFN0
cmluZyYgaHRtbCkKLSAgICAgICAgOiBJbnNwZWN0b3JET01BZ2VudDo6RE9NQWN0aW9uKCJTZXRP
dXRlckhUTUwiKQotICAgICAgICAsIG1fbm9kZShub2RlKQotICAgICAgICAsIG1fbmV4dFNpYmxp
bmcobm9kZS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgLCBtX2h0bWwoaHRtbCkKLSAgICAgICAg
LCBtX25ld05vZGUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHBlcmZvcm0o
RXhjZXB0aW9uQ29kZSYgZWMpCi0gICAgewotICAgICAgICBtX29sZEhUTUwgPSBjcmVhdGVNYXJr
dXAobV9ub2RlLmdldCgpKTsKLSAgICAgICAgRE9NRWRpdG9yIGRvbUVkaXRvcihtX25vZGUtPm93
bmVyRG9jdW1lbnQoKSk7Ci0gICAgICAgIG1fbmV3Tm9kZSA9IGRvbUVkaXRvci5wYXRjaE5vZGUo
bV9ub2RlLmdldCgpLCBtX2h0bWwsIGVjKTsKLSAgICAgICAgcmV0dXJuICFlYzsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFeGNlcHRpb25Db2RlJiBlYykKLSAgICB7Ci0gICAgICAg
IERPTUVkaXRvciBkb21FZGl0b3IobV9uZXdOb2RlLT5vd25lckRvY3VtZW50KCkpOwotICAgICAg
ICBOb2RlKiBub2RlID0gZG9tRWRpdG9yLnBhdGNoTm9kZShtX25ld05vZGUsIG1fb2xkSFRNTCwg
ZWMpOwotICAgICAgICBpZiAoZWMgfHwgIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIC8vIEhUTUwgZWRpdGluZyBjb3VsZCBoYXZlIHByb2R1Y2VkIGV4dHJhIG5vZGVz
LiBSZW1vdmUgdGhlbSBpZiBuZWNlc3NhcnkuCi0gICAgICAgIG5vZGUgPSBub2RlLT5uZXh0U2li
bGluZygpOwotCi0gICAgICAgIHdoaWxlICghZWMgJiYgbm9kZSAmJiBub2RlICE9IG1fbmV4dFNp
YmxpbmcuZ2V0KCkpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IG5vZGU7Ci0g
ICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIG5vZGVU
b1JlbW92ZS0+cmVtb3ZlKGVjKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gIWVjOwotICAg
IH0KLQotICAgIE5vZGUqIG5ld05vZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbmV3Tm9k
ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKLSAgICBSZWZQ
dHI8Tm9kZT4gbV9uZXh0U2libGluZzsKLSAgICBTdHJpbmcgbV9odG1sOwotICAgIFN0cmluZyBt
X29sZEhUTUw7Ci0gICAgTm9kZSogbV9uZXdOb2RlOwotfTsKLQotY2xhc3MgSW5zcGVjdG9yRE9N
QWdlbnQ6OlJlcGxhY2VXaG9sZVRleHRBY3Rpb24gOiBwdWJsaWMgSW5zcGVjdG9yRE9NQWdlbnQ6
OkRPTUFjdGlvbiB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVwbGFjZVdob2xlVGV4dEFj
dGlvbik7Ci1wdWJsaWM6Ci0gICAgUmVwbGFjZVdob2xlVGV4dEFjdGlvbihUZXh0KiB0ZXh0Tm9k
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQotICAgICAgICA6IERPTUFjdGlvbigiUmVwbGFjZVdob2xl
VGV4dCIpCi0gICAgICAgICwgbV90ZXh0Tm9kZSh0ZXh0Tm9kZSkKLSAgICAgICAgLCBtX3RleHQo
dGV4dCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9u
Q29kZSYgZWMpCi0gICAgewotICAgICAgICBtX29sZFRleHQgPSBtX3RleHROb2RlLT53aG9sZVRl
eHQoKTsKLSAgICAgICAgbV90ZXh0Tm9kZS0+cmVwbGFjZVdob2xlVGV4dChtX3RleHQsIGVjKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHVuZG8oRXhj
ZXB0aW9uQ29kZSYgZWMpCi0gICAgewotICAgICAgICBtX3RleHROb2RlLT5yZXBsYWNlV2hvbGVU
ZXh0KG1fb2xkVGV4dCwgZWMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgUmVmUHRyPFRleHQ+IG1fdGV4dE5vZGU7Ci0gICAgU3RyaW5nIG1fdGV4dDsKLSAg
ICBTdHJpbmcgbV9vbGRUZXh0OwotfTsKLQogSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRP
TUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3Rv
clBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9y
U3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlcikKICAgICA6IEluc3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JET01BZ2VudD4o
IkRPTSIsIGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQogICAgICwgbV9wYWdl
QWdlbnQocGFnZUFnZW50KQpAQCAtNDMxLDcgKzE4OCw2IEBAIEluc3BlY3RvckRPTUFnZW50OjpJ
bnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBJCiAgICAgLCBtX2RvbUxpc3RlbmVyKDApCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKICAgICAs
IG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKLSAgICAsIG1faGlzdG9yeShhZG9wdFB0cihuZXcg
SW5zcGVjdG9ySGlzdG9yeSgpKSkKIHsKIH0KIApAQCAtNDQ1LDYgKzIwMSw5IEBAIEluc3BlY3Rv
ckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQoKQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
c2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogewogICAgIEFTU0VSVCgh
bV9mcm9udGVuZCk7CisgICAgbV9oaXN0b3J5ID0gYWRvcHRQdHIobmV3IEluc3BlY3Rvckhpc3Rv
cnkoKSk7CisgICAgbV9kb21FZGl0b3IgPSBhZG9wdFB0cihuZXcgRE9NRWRpdG9yKG1faGlzdG9y
eS5nZXQoKSkpOworCiAgICAgbV9mcm9udGVuZCA9IGZyb250ZW5kLT5kb20oKTsKICAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckRPTUFnZW50KHRoaXMpOwogICAgIG1fZG9j
dW1lbnQgPSBtX3BhZ2VBZ2VudC0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCk7CkBAIC00NTYsNiAr
MjE1LDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kKQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2xlYXJGcm9udGVuZCgp
CiB7CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOworCisgICAgbV9oaXN0b3J5LmNsZWFyKCk7Cisg
ICAgbV9kb21FZGl0b3IuY2xlYXIoKTsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlLCAw
KTsKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwpAQCAtNDk5LDcgKzI2MSw4IEBAIE5vZGUqIElu
c3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRlZE5vZGUoKSBjb25zdAogCiB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpyZXNldCgpCiB7Ci0gICAgbV9oaXN0b3J5LT5yZXNldCgpOworICAgIGlmICht
X2hpc3RvcnkpCisgICAgICAgIG1faGlzdG9yeS0+cmVzZXQoKTsKICAgICBtX3NlYXJjaFJlc3Vs
dHMuY2xlYXIoKTsKICAgICBkaXNjYXJkQmluZGluZ3MoKTsKICAgICBpZiAobV9yZXZhbGlkYXRl
U3R5bGVBdHRyVGFzaykKQEAgLTc2NSw3ICs1MjgsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBlbGVtZW50
SQogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9oaXN0b3J5LT5w
ZXJmb3JtKGFkb3B0UHRyKG5ldyBTZXRBdHRyaWJ1dGVBY3Rpb24oZWxlbWVudCwgbmFtZSwgdmFs
dWUpKSwgZXJyb3JTdHJpbmcpOworICAgIG1fZG9tRWRpdG9yLT5zZXRBdHRyaWJ1dGUoZWxlbWVu
dCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKTsKICAgICBtX2hpc3RvcnktPm1hcmtVbmRvYWJs
ZVN0YXRlKCk7CiB9CiAKQEAgLTc5Niw3ICs1NTksOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGVsZW1l
bgogCiAgICAgRWxlbWVudCogY2hpbGRFbGVtZW50ID0gdG9FbGVtZW50KGNoaWxkKTsKICAgICBp
ZiAoIWNoaWxkRWxlbWVudC0+aGFzQXR0cmlidXRlcygpICYmIG5hbWUpIHsKLSAgICAgICAgbV9o
aXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBSZW1vdmVBdHRyaWJ1dGVBY3Rpb24oZWxlbWVu
dCwgKm5hbWUpKSwgZXJyb3JTdHJpbmcpOworICAgICAgICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0
cmlidXRlKGVsZW1lbnQsICpuYW1lLCBlcnJvclN0cmluZyk7CisgICAgICAgIG1faGlzdG9yeS0+
bWFya1VuZG9hYmxlU3RhdGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODA2LDEy
ICs1NzAsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dChF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBlbGVtZW4KICAgICAgICAgLy8gQWRkIGF0dHJp
YnV0ZSBwYWlyCiAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gY2hpbGRFbGVt
ZW50LT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0g
Zm91bmRPcmlnaW5hbEF0dHJpYnV0ZSB8fCAobmFtZSAmJiBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0
cmluZygpID09ICpuYW1lKTsKLSAgICAgICAgaWYgKCFtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQ
dHIobmV3IFNldEF0dHJpYnV0ZUFjdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0
cmluZygpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpKSwgZXJyb3JTdHJpbmcpKQorICAgICAgICBpZiAo
IW1fZG9tRWRpdG9yLT5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlLT5uYW1lKCkudG9T
dHJpbmcoKSwgYXR0cmlidXRlLT52YWx1ZSgpLCBlcnJvclN0cmluZykpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmIG5hbWUg
JiYgIW5hbWUtPnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgbV9oaXN0b3J5
LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBSZW1vdmVBdHRyaWJ1dGVBY3Rpb24oZWxlbWVudCwgKm5h
bWUpKSwgZXJyb3JTdHJpbmcpOworICAgICAgICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRl
KGVsZW1lbnQsICpuYW1lLCBlcnJvclN0cmluZyk7CiAKICAgICBtX2hpc3RvcnktPm1hcmtVbmRv
YWJsZVN0YXRlKCk7CiB9CkBAIC04MjIsNyArNTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6cmVtb3ZlQXR0cmlidXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGVsZW1lbnRJ
ZCwKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faGlzdG9yeS0+
cGVyZm9ybShhZG9wdFB0cihuZXcgUmVtb3ZlQXR0cmlidXRlQWN0aW9uKGVsZW1lbnQsIG5hbWUp
KSwgZXJyb3JTdHJpbmcpOworICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVu
dCwgbmFtZSwgZXJyb3JTdHJpbmcpOwogICAgIG1faGlzdG9yeS0+bWFya1VuZG9hYmxlU3RhdGUo
KTsKIH0KIApAQCAtODM4LDcgKzYwMiw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92
ZU5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBSZW1vdmVD
aGlsZEFjdGlvbihwYXJlbnROb2RlLCBub2RlKSksIGVycm9yU3RyaW5nKTsKKyAgICBtX2RvbUVk
aXRvci0+cmVtb3ZlQ2hpbGQocGFyZW50Tm9kZSwgbm9kZSwgZXJyb3JTdHJpbmcpOwogICAgIG1f
aGlzdG9yeS0+bWFya1VuZG9hYmxlU3RhdGUoKTsKIH0KIApAQCAtODYxLDE1ICs2MjUsMTUgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBjb25zdAogICAgIC8vIENvcHkgb3ZlciB0aGUgb3JpZ2luYWwgbm9k
ZSdzIGNoaWxkcmVuLgogICAgIE5vZGUqIGNoaWxkOwogICAgIHdoaWxlICgoY2hpbGQgPSBvbGRO
b2RlLT5maXJzdENoaWxkKCkpKSB7Ci0gICAgICAgIGlmICghbV9oaXN0b3J5LT5wZXJmb3JtKGFk
b3B0UHRyKG5ldyBJbnNlcnRCZWZvcmVBY3Rpb24obmV3RWxlbS5nZXQoKSwgY2hpbGQsIDApKSwg
ZXJyb3JTdHJpbmcpKQorICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRCZWZvcmUobmV3
RWxlbS5nZXQoKSwgY2hpbGQsIDAsIGVycm9yU3RyaW5nKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBSZXBsYWNlIHRoZSBvbGQgbm9kZSB3aXRoIHRoZSBuZXcgbm9kZQog
ICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG9sZE5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBp
ZiAoIW1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0cihuZXcgSW5zZXJ0QmVmb3JlQWN0aW9uKHBh
cmVudCwgbmV3RWxlbS5nZXQoKSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSkpLCBlcnJvclN0cmlu
ZykpCisgICAgaWYgKCFtX2RvbUVkaXRvci0+aW5zZXJ0QmVmb3JlKHBhcmVudCwgbmV3RWxlbS5n
ZXQoKSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgZXJyb3JTdHJpbmcpKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCFtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFJlbW92ZUNoaWxk
QWN0aW9uKHBhcmVudCwgb2xkTm9kZSkpLCBlcnJvclN0cmluZykpCisgICAgaWYgKCFtX2RvbUVk
aXRvci0+cmVtb3ZlQ2hpbGQocGFyZW50LCBvbGROb2RlLCBlcnJvclN0cmluZykpCiAgICAgICAg
IHJldHVybjsKICAgICBtX2hpc3RvcnktPm1hcmtVbmRvYWJsZVN0YXRlKCk7CiAKQEAgLTg5MCw4
ICs2NTQsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6Ogogdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiBvdXRlckhUTUwpCiB7CiAgICAgaWYgKCFub2RlSWQpIHsKLSAgICAgICAgRE9N
RWRpdG9yIGRvbUVkaXRvcihtX2RvY3VtZW50LmdldCgpKTsKLSAgICAgICAgZG9tRWRpdG9yLnBh
dGNoRG9jdW1lbnQob3V0ZXJIVE1MKTsKKyAgICAgICAgRE9NUGF0Y2hTdXBwb3J0IGRvbVBhdGNo
U3VwcG9ydChtX2RvY3VtZW50LmdldCgpKTsKKyAgICAgICAgZG9tUGF0Y2hTdXBwb3J0LnBhdGNo
RG9jdW1lbnQob3V0ZXJIVE1MKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTA1LDE3
ICs2NjksMTEgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIERPTUVkaXRvciBkb21FZGl0b3IoZG9jdW1lbnQpOwotCi0gICAgT3duUHRyPFNl
dE91dGVySFRNTEFjdGlvbj4gYWN0aW9uID0gYWRvcHRQdHIobmV3IFNldE91dGVySFRNTEFjdGlv
bihub2RlLCBvdXRlckhUTUwpKTsKLSAgICBTZXRPdXRlckhUTUxBY3Rpb24qIHJhd0FjdGlvbiA9
IGFjdGlvbi5nZXQoKTsKICAgICBOb2RlKiBuZXdOb2RlID0gMDsKLSAgICBpZiAoIW1faGlzdG9y
eS0+cGVyZm9ybShhY3Rpb24ucmVsZWFzZSgpLCBlcnJvclN0cmluZykpCisgICAgaWYgKCFtX2Rv
bUVkaXRvci0+c2V0T3V0ZXJIVE1MKG5vZGUsIG91dGVySFRNTCwgJm5ld05vZGUsIGVycm9yU3Ry
aW5nKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1faGlzdG9yeS0+bWFya1VuZG9hYmxlU3RhdGUo
KTsKIAotICAgIG5ld05vZGUgPSByYXdBY3Rpb24tPm5ld05vZGUoKTsKLQogICAgIGlmICghbmV3
Tm9kZSkgewogICAgICAgICAvLyBUaGUgb25seSBjaGlsZCBub2RlIGhhcyBiZWVuIGRlbGV0ZWQu
CiAgICAgICAgIHJldHVybjsKQEAgLTkzOSw3ICs2OTcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpzZXROb2RlVmFsdWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBj
b25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9oaXN0b3J5LT5wZXJmb3JtKGFk
b3B0UHRyKG5ldyBSZXBsYWNlV2hvbGVUZXh0QWN0aW9uKHN0YXRpY19jYXN0PFRleHQqPihub2Rl
KSwgdmFsdWUpKSwgZXJyb3JTdHJpbmcpOworICAgIG1fZG9tRWRpdG9yLT5yZXBsYWNlV2hvbGVU
ZXh0KHN0YXRpY19jYXN0PFRleHQqPihub2RlKSwgdmFsdWUsIGVycm9yU3RyaW5nKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3Ry
aW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbGlzdGVuZXJzQXJyYXkp
CkBAIC0xMjk3LDcgKzEwNTUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0RQogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKCFtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IEluc2Vy
dEJlZm9yZUFjdGlvbih0YXJnZXRFbGVtZW50LCBub2RlLCBhbmNob3JOb2RlKSksIGVycm9yU3Ry
aW5nKSkKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRCZWZvcmUodGFyZ2V0RWxlbWVudCwg
bm9kZSwgYW5jaG9yTm9kZSwgZXJyb3JTdHJpbmcpKQogICAgICAgICByZXR1cm47CiAgICAgbV9o
aXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IDQwZjBmODFiMjU3ZGJkNzdiMTNkMDExOTU3M2U0
ZWU0OWZhMmFlZmIuLjBjODg0OWZjNDYzMjMyNDNkYTU0Y2YwMDAwYzdiYzVkZWYyZmMzYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0zNSw3
ICszNSw2IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQmFzZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKLSNp
bmNsdWRlICJJbnNwZWN0b3JIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKIApAQCAtNTIsMTMgKzUxLDE0IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgQ2hhcmFjdGVyRGF0YTsKK2NsYXNz
IERPTUVkaXRvcjsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwotY2xhc3Mg
SW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKK2NsYXNzIEluc3Bl
Y3Rvckhpc3Rvcnk7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnRSZWN0Owog
Y2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTE5MywxNCArMTkzLDYgQEAgcHVibGljOgogICAgIE5v
ZGUqIGFzc2VydE5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkKTsKIAogcHJpdmF0ZToKLSAg
ICBjbGFzcyBET01BY3Rpb247Ci0gICAgY2xhc3MgUmVtb3ZlQ2hpbGRBY3Rpb247Ci0gICAgY2xh
c3MgSW5zZXJ0QmVmb3JlQWN0aW9uOwotICAgIGNsYXNzIFJlbW92ZUF0dHJpYnV0ZUFjdGlvbjsK
LSAgICBjbGFzcyBTZXRBdHRyaWJ1dGVBY3Rpb247Ci0gICAgY2xhc3MgU2V0T3V0ZXJIVE1MQWN0
aW9uOwotICAgIGNsYXNzIFJlcGxhY2VXaG9sZVRleHRBY3Rpb247Ci0KICAgICBJbnNwZWN0b3JE
T01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5zcGVj
dG9yQ2xpZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKIAog
ICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIEluc3BlY3Rvck9iamVj
dCogaGlnaGxpZ2h0Q29uZmlnKTsKQEAgLTI1NCw2ICsyNDYsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxOb2RlPiBtX25vZGVUb0ZvY3VzOwogICAgIGJvb2wgbV9zZWFyY2hpbmdGb3JOb2RlOwog
ICAgIE93blB0cjxJbnNwZWN0b3JIaXN0b3J5PiBtX2hpc3Rvcnk7CisgICAgT3duUHRyPERPTUVk
aXRvcj4gbV9kb21FZGl0b3I7CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXgg
NDQwMDRiYzhjYWRiMGQ4MjlkNmI5YjVlMjIyYzhjNmIxMGIzMjc2MC4uM2JjYjNhYjA0N2RhOGZk
MGVhNGY0MmU3MTQ3YjJlMmU2YTRlNGI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJD
b250ZW50U2VhcmNoVXRpbHMuaCIKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29r
aWVKYXIuaCIKLSNpbmNsdWRlICJET01FZGl0b3IuaCIKKyNpbmNsdWRlICJET01QYXRjaFN1cHBv
cnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTU3MSw4ICs1NzEsOCBAQCB2b2lkIEluc3BlY3RvclBh
Z2VBZ2VudDo6c2V0RG9jdW1lbnRDb250ZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgU3RyaQogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm8gRG9jdW1lbnQgaW5zdGFuY2UgdG8g
c2V0IEhUTUwgZm9yIjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBET01FZGl0b3IgZWRp
dG9yKGRvY3VtZW50KTsKLSAgICBlZGl0b3IucGF0Y2hEb2N1bWVudChodG1sKTsKKyAgICBET01Q
YXRjaFN1cHBvcnQgcGF0Y2hlcihkb2N1bWVudCk7CisgICAgcGF0Y2hlci5wYXRjaERvY3VtZW50
KGh0bWwpOwogfQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2NyZWVuU2l6ZU92ZXJy
aWRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQg
aGVpZ2h0KQo=
</data>
<flag name="review"
          id="128096"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>