<?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>141608</bug_id>
          
          <creation_ts>2015-02-14 11:02:02 -0800</creation_ts>
          <short_desc>Web Inspector: remove Inspector prefixes from inspector agent classes</short_desc>
          <delta_ts>2026-01-12 09:06: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</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>141372</dependson>
          <blocked>141620</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1069220</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-14 11:02:02 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069221</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-02-14 11:02:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/19838400&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069235</commentid>
    <comment_count>2</comment_count>
      <attachid>246604</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-14 12:10:28 -0800</bug_when>
    <thetext>Created attachment 246604
Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069257</commentid>
    <comment_count>3</comment_count>
      <attachid>246609</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-14 19:27:04 -0800</bug_when>
    <thetext>Created attachment 246609
Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069260</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-14 19:29:54 -0800</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069262</commentid>
    <comment_count>5</comment_count>
      <attachid>246609</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-02-14 19:39:21 -0800</bug_when>
    <thetext>Comment on attachment 246609
Proposed Fix

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

&gt; Source/WebCore/inspector/CommandLineAPIHost.h:67
&gt; +        , Inspector::ConsoleAgent* consoleAgent

Drop the namespace here.

&gt; Source/WebCore/inspector/CommandLineAPIHost.h:105
&gt; +    Inspector::ConsoleAgent* m_consoleAgent;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069265</commentid>
    <comment_count>6</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-14 20:22:06 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 246609 [details]
&gt; Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=246609&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/CommandLineAPIHost.h:67
&gt; &gt; +        , Inspector::ConsoleAgent* consoleAgent
&gt; 
&gt; Drop the namespace here.
&gt; 
&gt; &gt; Source/WebCore/inspector/CommandLineAPIHost.h:105
&gt; &gt; +    Inspector::ConsoleAgent* m_consoleAgent;
&gt; 
&gt; Ditto.

This class is still in WebCore namespace, and it&apos;s a header. So it can&apos;t be removed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072734</commentid>
    <comment_count>7</comment_count>
      <attachid>247521</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-02-27 10:49:50 -0800</bug_when>
    <thetext>Created attachment 247521
Proposed Fix (rebased)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073382</commentid>
    <comment_count>8</comment_count>
      <attachid>247521</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-02 11:02:19 -0800</bug_when>
    <thetext>Comment on attachment 247521
Proposed Fix (rebased)

r=me, looks like Win EWS is red, might be related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079635</commentid>
    <comment_count>9</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-03-24 09:59:18 -0700</bug_when>
    <thetext>This might be stale now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579741</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-10-14 12:29:15 -0700</bug_when>
    <thetext>Stale now for sure. Clearing flags.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246604</attachid>
            <date>2015-02-14 12:10:28 -0800</date>
            <delta_ts>2015-02-14 19:27:01 -0800</delta_ts>
            <desc>Proposed Fix</desc>
            <filename>bug-141608-20150214121024.patch</filename>
            <type>text/plain</type>
            <size>418982</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZWNiMTgyMWI2ZGZlOWFiYTAwZDBkZjM5Y2NmZjU2YjU5NDAxNzBiLi5lNWY0YTI5M2MyNWFlZWZk
ZjVmODI1NWZiZjI1OWRkZThjMmMwOWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNS0wMi0xNCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVtb3ZlIEluc3BlY3RvciBwcmVmaXhl
cyBmcm9tIGluc3BlY3RvciBhZ2VudCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbiBwcmVwYXJhdGlvbiBmb3IgbW92aW5nIGFsbCBpbnNw
ZWN0b3IgYWdlbnRzIHRvIHRoZSBJbnNwZWN0b3IgbmFtZXNwYWNlLAorICAgICAgICB0aGlzIHBh
dGNoIHJlbW92ZXMgdGhlIEluc3BlY3RvciBwcmVmaXggZnJvbSBhZ2VudCBjbGFzc2VzIGFuZCBh
c3NvY2lhdGVkCisgICAgICAgIG1lbWJlcnMsIGdldHRlcnMsIGFuZCBzZXR0ZXJzLgorCisgICAg
ICAgIEZ1bGwgY2hhbmdlbG9nIGhhcyBiZWVuIGVsaWRlZCBmb3IgYWdlbnQgY2xhc3Nlcywgc2lu
Y2UgZXZlcnkgYWdlbnQgbWV0aG9kCisgICAgICAgIHNpZ25hdHVyZSBpcyBtZWNoYW5pY2FsbHkg
Y2hhbmdlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudEJhc2UuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHA6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVnaXN0cnkuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjphcHBl
bmRFeHRyYUFnZW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0
b3JDb250cm9sbGVyOjpmcm9udGVuZEluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdENvbnNvbGVB
Z2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50
OjpKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjpKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2Vu
dC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50OjpK
U0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFs
T2JqZWN0UnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9hdWdtZW50YWJsZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hdWdtZW50YWJsZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
ci5weToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6QWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisKIDIw
MTUtMDItMTMgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IHJlbW92ZSBzb21lIHVubmVjZXNzYXJ5IEluc3BlY3RvciBwcmVm
aXhlcyBmcm9tIGNsYXNzIG5hbWVzIGluIEluc3BlY3RvciBuYW1lc3BhY2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBlMGFkZTMwOTBjNDYyNmYyZGY0NDg5MTI2YjgxMTEwN2RjZjA0MTI2Li42YzNiMzU0ZTAwOTgy
ZDM3ZTY3ZDJmZDk1OWM2YjU2NjA5NTU4YTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEwIEBA
CisyMDE1LTAyLTE0ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1vdmUgSW5zcGVjdG9yIHByZWZpeGVzIGZyb20gaW5z
cGVjdG9yIGFnZW50IGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIGZvciBtb3ZpbmcgYWxsIGluc3BlY3RvciBhZ2Vu
dHMgdG8gdGhlIEluc3BlY3RvciBuYW1lc3BhY2UsCisgICAgICAgIHRoaXMgcGF0Y2ggcmVtb3Zl
cyB0aGUgSW5zcGVjdG9yIHByZWZpeCBmcm9tIGFnZW50IGNsYXNzZXMgYW5kIGFzc29jaWF0ZWQK
KyAgICAgICAgbWVtYmVycywgZ2V0dGVycywgYW5kIHNldHRlcnMuCisKKyAgICAgICAgRnVsbCBj
aGFuZ2Vsb2cgaGFzIGJlZW4gZWxpZGVkIGZvciBhZ2VudCBjbGFzc2VzLCBzaW5jZSBldmVyeSBh
Z2VudCBtZXRob2QKKyAgICAgICAgc2lnbmF0dXJlIGlzIG1lY2hhbmljYWxseSBjaGFuZ2VkLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogaW5zcGVjdG9yL0NvbW1hbmRM
aW5lQVBJSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tbWFuZExpbmVBUElIb3N0Ojppbml0
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNw
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnByb2ZpbGVyRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRQcm9maWxlckVuYWJsZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckxheWVyVHJlZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJU
cmVlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yUmVwbGF5QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsTWVkaWFMaXN0Q2hhaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpyZXNvdXJjZVN0eWxlU2hlZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6OmNvbGxlY3RGbGF0UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjpzZXRTdHlsZVRleHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvcldlYkFnZW50QmFzZS5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvcldvcmtlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2Vu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGluZ0FnZW50czo6SW5zdHJ1bWVu
dGluZ0FnZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnN0cnVtZW50aW5nQWdlbnRzOjpyZXNl
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3RydW1lbnRpbmdBZ2VudHM6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtS
ZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OlJlc291cmNlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6c2V0UmVzb3VyY2VUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpyZXNvdXJjZVR5cGUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29y
a1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhOjpzZXRUeXBlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvUGFnZUNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29u
c29sZUFnZW50OjpQYWdlQ29uc29sZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25z
b2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVB
Z2VudDo6YWRkSW5zcGVjdGVkTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VDb25zb2xl
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQp
OgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VSdW50
aW1lQWdlbnQ6OlBhZ2VSdW50aW1lQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRp
bWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZVJ1bnRpbWVBZ2VudDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VSdW50
aW1lQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlUnVudGltZUFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJDb25zb2xlQWdlbnQ6OldlYkNvbnNvbGVBZ2VudCk6CisgICAgICAgICogaW5z
cGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9XZWJEZWJ1Z2dl
ckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkRlYnVnZ2VyQWdlbnQ6OldlYkRlYnVn
Z2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAq
IGluc3BlY3Rvci9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtl
ckluc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VySW5zcGVj
dG9yQ29udHJvbGxlcjo6V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5z
cGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJS
dW50aW1lQWdlbnQ6OldvcmtlclJ1bnRpbWVBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogcmVwbGF5L1JlcGxh
eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6OmNvbnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMpOgorCiAy
MDE1LTAyLTEzICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiByZW1vdmUgc29tZSB1bm5lY2Vzc2FyeSBJbnNwZWN0b3IgcHJl
Zml4ZXMgZnJvbSBjbGFzcyBuYW1lcyBpbiBJbnNwZWN0b3IgbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50QmFzZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudEJhc2UuaAppbmRl
eCA2MzQwNGNmNTQyNTRhZDZhM2VhYTFhNWYyN2M0OWI5MTc3MmM4NTE0Li42NTJkZjViODZiZjVh
NmVlMmQxYzVkYzQ2ZWQwNTU5ZmU5OTk4OTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50QmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRCYXNlLmgKQEAgLTM5LDkgKzM5LDkgQEAg
ZW51bSBjbGFzcyBEaXNjb25uZWN0UmVhc29uIHsKICAgICBJbnNwZWN0b3JEZXN0cm95ZWQKIH07
CiAKLWNsYXNzIEluc3BlY3RvckFnZW50QmFzZSB7CitjbGFzcyBBZ2VudEJhc2UgewogcHVibGlj
OgotICAgIHZpcnR1YWwgfkluc3BlY3RvckFnZW50QmFzZSgpIHsgfQorICAgIHZpcnR1YWwgfkFn
ZW50QmFzZSgpIHsgfQogCiAgICAgU3RyaW5nIGRvbWFpbk5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KIApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRp
c2NhcmRBZ2VudCgpIHsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yQWdlbnRCYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSkKKyAgICBBZ2VudEJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKQogICAg
ICAgICA6IG1fbmFtZShuYW1lKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcAppbmRl
eCBiY2MwOTg4MjE0YTYxZGYxZWE2NzM0M2Q1MzIyNjE1MjVlN2VmNDM5Li40ZDEzMzIwMzk3NjU1
MzI3YzUxMjE2ZDI3NDA4YzIxMDhjMzUzNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAKQEAgLTM1
LDEzICszNSwxMyBAQCBBZ2VudFJlZ2lzdHJ5OjpBZ2VudFJlZ2lzdHJ5KCkKIHsKIH0KIAotdm9p
ZCBBZ2VudFJlZ2lzdHJ5OjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckFnZW50QmFz
ZT4gYWdlbnQpCit2b2lkIEFnZW50UmVnaXN0cnk6OmFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QWdl
bnRCYXNlPiBhZ2VudCkKIHsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKGFnZW50KSk7
CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXZvaWQg
QWdlbnRSZWdpc3RyeTo6YXBwZW5kRXh0cmFBZ2VudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
QWdlbnRCYXNlPiBhZ2VudCkKK3ZvaWQgQWdlbnRSZWdpc3RyeTo6YXBwZW5kRXh0cmFBZ2VudChz
dGQ6OnVuaXF1ZV9wdHI8QWdlbnRCYXNlPiBhZ2VudCkKIHsKICAgICBtX2V4dHJhRG9tYWlucy5h
cHBlbmQoYWdlbnQtPmRvbWFpbk5hbWUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmgKaW5kZXggOTYyZjAw
NmRmNzI3MTNjMmQ5NDdmZTg3NTc5NGM4Nzk4MDk1NmM0Ny4uNjYxNDI3Y2YyNzRhMWMyNmJlZWQ0
YzdiYzM4YTFjNDhkM2E5YjdlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmgKQEAgLTMyLDkgKzMyLDkgQEAK
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKK2NsYXNzIEFnZW50QmFzZTsKIGNsYXNzIEJhY2tl
bmREaXNwYXRjaGVyOwogY2xhc3MgRnJvbnRlbmRDaGFubmVsOwotY2xhc3MgSW5zcGVjdG9yQWdl
bnRCYXNlOwogCiBlbnVtIGNsYXNzIERpc2Nvbm5lY3RSZWFzb247CiAKQEAgLTQyLDE0ICs0Miwx
NCBAQCBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBBZ2VudFJlZ2lzdHJ5IHsKIHB1YmxpYzoKICAg
ICBBZ2VudFJlZ2lzdHJ5KCk7CiAKLSAgICB2b2lkIGFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yQWdlbnRCYXNlPik7CisgICAgdm9pZCBhcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEFnZW50
QmFzZT4pOwogCiAgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRD
aGFubmVsKiwgQmFja2VuZERpc3BhdGNoZXIqKTsKICAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pOwogICAgIHZvaWQgZGlzY2FyZEFnZW50cygp
OwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgdm9p
ZCBhcHBlbmRFeHRyYUFnZW50KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JBZ2VudEJhc2U+KTsK
KyAgICB2b2lkIGFwcGVuZEV4dHJhQWdlbnQoc3RkOjp1bmlxdWVfcHRyPEFnZW50QmFzZT4pOwog
ICAgIFZlY3RvcjxTdHJpbmc+IGV4dHJhRG9tYWlucygpIGNvbnN0IHsgcmV0dXJuIG1fZXh0cmFE
b21haW5zOyB9CiAjZW5kaWYKIApAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIEFnZW50
UmVnaXN0cnkoY29uc3QgQWdlbnRSZWdpc3RyeSYpID0gZGVsZXRlOwogICAgIEFnZW50UmVnaXN0
cnkmIG9wZXJhdG9yPShjb25zdCBBZ2VudFJlZ2lzdHJ5JikgPSBkZWxldGU7CiAKLSAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckFnZW50QmFzZT4+IG1fYWdlbnRzOworICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWdlbnRCYXNlPj4gbV9hZ2VudHM7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgVmVjdG9yPFN0cmluZz4gbV9leHRy
YURvbWFpbnM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcAppbmRleCBkZWY5
ZDEyNDkwZGRiYTRhYTUyZTBlMTE1N2FjNGUxYzk1Y2I3Y2IxLi5kMmM1NTIxNzM4OTJlMmEyNTYw
MmUwMDhiZjQ2YmNkYzc4OGFlZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCkBA
IC02NCw3ICs2NCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojppbml0aWFs
aXplTG9nVG9TeXN0ZW1Db25zb2xlKCkKICNlbmRpZgogfQogCi1KU0dsb2JhbE9iamVjdENvbnNv
bGVDbGllbnQ6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudChJbnNwZWN0b3JDb25zb2xlQWdl
bnQqIGNvbnNvbGVBZ2VudCkKK0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6SlNHbG9iYWxP
YmplY3RDb25zb2xlQ2xpZW50KENvbnNvbGVBZ2VudCogY29uc29sZUFnZW50KQogICAgIDogQ29u
c29sZUNsaWVudCgpCiAgICAgLCBtX2NvbnNvbGVBZ2VudChjb25zb2xlQWdlbnQpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29u
c29sZUNsaWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdENvbnNvbGVDbGllbnQuaAppbmRleCBlMzVlOWI2MDEwZjlkODZhZDRlZGE3MzhlZDM5YTNl
YzYwZjM2NTVjLi5kNDI4NzViMjg5ZjE1YWM2ZjdhYTE5MmRmNDNiZWZhM2ExMWIxMmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29u
c29sZUNsaWVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50LmgKQEAgLTMwLDEyICszMCwxMiBAQAogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50OworY2xhc3MgQ29uc29s
ZUFnZW50OwogCiBjbGFzcyBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQgZmluYWwgOiBwdWJs
aWMgSlNDOjpDb25zb2xlQ2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQoSW5zcGVjdG9y
Q29uc29sZUFnZW50Kik7CisgICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50
KENvbnNvbGVBZ2VudCopOwogICAgIHZpcnR1YWwgfkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVu
dCgpIHsgfQogCiAgICAgc3RhdGljIGJvb2wgbG9nVG9TeXN0ZW1Db25zb2xlKCk7CkBAIC01NSw3
ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3YXJuVW5pbXBsZW1lbnRlZChjb25zdCBTdHJp
bmcmIG1ldGhvZCk7CiAgICAgdm9pZCBpbnRlcm5hbEFkZE1lc3NhZ2UoTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmKTsK
IAotICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CisgICAgQ29uc29s
ZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0
b3JDb250cm9sbGVyLmNwcAppbmRleCA1YjQzNTA0NDliYTgxNDgzOWRmODg0YTk2NjJhZGRiOTlm
ZTE4MzA3Li42ZWQ4MWE3YjBlZWFmZDg0YzM1OWRlNTg0N2YzMThkNjk1YzdmZTcwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yMjcsNyArMjI3LDcgQEAg
UmVmPFN0b3B3YXRjaD4gSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRp
b25TdG9wd2F0Y2goKQogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi12b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6YXBwZW5kRXh0
cmFBZ2VudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQWdlbnRCYXNlPiBhZ2VudCkKK3ZvaWQg
SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjphcHBlbmRFeHRyYUFnZW50KHN0ZDo6
dW5pcXVlX3B0cjxBZ2VudEJhc2U+IGFnZW50KQogewogICAgIFN0cmluZyBkb21haW5OYW1lID0g
YWdlbnQtPmRvbWFpbk5hbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVy
LmgKaW5kZXggZTFhMmMyMDNjOWY2YjU1NWIyMjI0Yzc2YTQwNmM1NGYyYmU0NGFmZS4uNTEwZWRl
YmFlMTM1NDk3NzRmZjg2NmExZDcyYmUxMDU5YzZhM2UzZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC01MSwxMSArNTEsMTEgQEAgY2xhc3MgSlNWYWx1ZTsKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKK2NsYXNzIENv
bnNvbGVBZ2VudDsKK2NsYXNzIERlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBGcm9udGVuZENoYW5uZWw7
CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKLWNs
YXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKLWNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7
CiBjbGFzcyBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ7CiBjbGFzcyBTY3JpcHRDYWxsU3Rh
Y2s7CiAKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQoQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyQ2xpZW50KiBjbGllbnQpIG92ZXJyaWRlIHsgbV9hdWdtZW50aW5nQ2xpZW50ID0gY2xp
ZW50OyB9CiAKICAgICB2aXJ0dWFsIEZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mcm9udGVuZENoYW5uZWw7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kRXh0cmFBZ2VudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQWdlbnRCYXNl
Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEV4dHJhQWdlbnQoc3RkOjp1bmlx
dWVfcHRyPEFnZW50QmFzZT4pIG92ZXJyaWRlOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xMDgs
OCArMTA4LDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyPiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50PiBtX2NvbnNvbGVDbGllbnQ7CiAgICAgSW5zcGVjdG9y
QWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7Ci0gICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBtX2Nv
bnNvbGVBZ2VudDsKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBtX2RlYnVnZ2VyQWdlbnQ7
CisgICAgQ29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKKyAgICBEZWJ1Z2dlckFnZW50KiBt
X2RlYnVnZ2VyQWdlbnQ7CiAgICAgQWdlbnRSZWdpc3RyeSBtX2FnZW50czsKICAgICBGcm9udGVu
ZENoYW5uZWwqIG1fZnJvbnRlbmRDaGFubmVsOwogICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcAppbmRleCBiZjI0MWJhNzc4
MmQ5YzA5Y2E2ZGFkMzYwOTJiODIxYTcyYTgzOGFhLi43YzBkMjkxMTA2ZTFhM2I5OGIyNTkzZWY4
NWZkOTM1ZDhiN2NmODRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC0zOCw3ICszOCw3IEBACiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5zcGVjdG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KElu
c3BlY3RvckVudmlyb25tZW50JiBlbnZpcm9ubWVudCkKLSAgICA6IEluc3BlY3RvckFnZW50QmFz
ZShBU0NJSUxpdGVyYWwoIkluc3BlY3RvciIpKQorICAgIDogQWdlbnRCYXNlKEFTQ0lJTGl0ZXJh
bCgiSW5zcGVjdG9yIikpCiAgICAgLCBtX2Vudmlyb25tZW50KGVudmlyb25tZW50KQogICAgICwg
bV9lbmFibGVkKGZhbHNlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKaW5kZXggZGZlZTI1ZjY2MjliOTliNGNm
Zjg1ZTJmOWI4NjkyNDM5NzcwN2Y4Ni4uZjBlODRjOTI1YmI3ZTM3MjEwOTlhZjgzY2Y4ZTZjYTc5
NTMwYWQxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIEluc3BlY3Rv
ck9iamVjdDsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEpTX0VYUE9S
VF9QUklWQVRFIEluc3BlY3RvckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFz
ZSwgcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
K2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckFnZW50IGZpbmFsIDogcHVibGljIEFn
ZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JBZ2VudCk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50
LmNwcAppbmRleCAyZmY5ZTJmODhjOTA5OGY5NzFhYWM5MGJhZjg4YWVlMGQ1ODMxZTllLi4zZjhl
Y2Y5NWIxZTY1NjY5NWViOWE0MTQzMDBmYjUxYWQ1MjI1NjM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNv
bnNvbGVBZ2VudC5jcHAKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7CiBzdGF0
aWMgY29uc3QgaW50IGV4cGlyZUNvbnNvbGVNZXNzYWdlc1N0ZXAgPSAxMDA7CiAKLUluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6SW5zcGVjdG9yQ29uc29sZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJ
TGl0ZXJhbCgiQ29uc29sZSIpKQorQ29uc29sZUFnZW50OjpDb25zb2xlQWdlbnQoSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBBZ2VudEJhc2UoQVND
SUlMaXRlcmFsKCJDb25zb2xlIikpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX3ByZXZpb3VzTWVzc2FnZShudWxscHRyKQogICAg
ICwgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCgwKQpAQCAtNTEsMTcgKzUxLDE3IEBAIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6SW5zcGVjdG9yQ29uc29sZUFnZW50KEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpCiB7CiB9CiAKLUluc3BlY3RvckNvbnNvbGVBZ2VudDo6fklu
c3BlY3RvckNvbnNvbGVBZ2VudCgpCitDb25zb2xlQWdlbnQ6On5Db25zb2xlQWdlbnQoKQogewog
fQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIpCit2b2lkIENvbnNvbGVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6Q29uc29sZUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJv
bnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yOjpDb25z
b2xlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChEaXNjb25uZWN0UmVhc29uKQordm9pZCBDb25zb2xlQWdlbnQ6OndpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXIgPSBudWxscHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKQEAgLTcw
LDcgKzcwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiAgICAgZGlzYWJsZShlcnJvclN0cmluZyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQor
dm9pZCBDb25zb2xlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgaWYgKG1fZW5h
YmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtODcsNyArODcsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAgbV9jb25zb2xlTWVzc2Fn
ZXNbaV0tPmFkZFRvRnJvbnRlbmQobV9mcm9udGVuZERpc3BhdGNoZXIuZ2V0KCksIG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLCBmYWxzZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50
OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgQ29uc29sZUFnZW50OjpkaXNhYmxlKEVycm9y
U3RyaW5nJikKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtOTUs
NyArOTUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYpCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikKK3ZvaWQgQ29uc29sZUFnZW50OjpjbGVh
ck1lc3NhZ2VzKEVycm9yU3RyaW5nJikKIHsKICAgICBtX2NvbnNvbGVNZXNzYWdlcy5jbGVhcigp
OwogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQgPSAwOwpAQCAtMTA3LDcgKzEwNyw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5n
JikKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm1lc3NhZ2VzQ2xlYXJlZCgpOwogfQog
Ci12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzZXQoKQordm9pZCBDb25zb2xlQWdlbnQ6
OnJlc2V0KCkKIHsKICAgICBFcnJvclN0cmluZyB1bnVzZWQ7CiAgICAgY2xlYXJNZXNzYWdlcyh1
bnVzZWQpOwpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpy
ZXNldCgpCiAgICAgbV9jb3VudHMuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xl
QWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoc3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdl
PiBtZXNzYWdlKQordm9pZCBDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoc3RkOjp1
bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBtZXNzYWdlKQogewogICAgIGlmICghbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXItPmluc3BlY3RvckVudmlyb25tZW50KCkuZGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoc3RkOjp1bmlxdWVfcHRyPENvbnNv
bGVNZXNzYWdlPgogICAgIGFkZENvbnNvbGVNZXNzYWdlKFdURjo6bW92ZShtZXNzYWdlKSk7CiB9
CiAKLVZlY3Rvcjx1bnNpZ25lZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb25zb2xlTWVzc2Fn
ZUFyZ3VtZW50Q291bnRzKCkgY29uc3QKK1ZlY3Rvcjx1bnNpZ25lZD4gQ29uc29sZUFnZW50Ojpj
b25zb2xlTWVzc2FnZUFyZ3VtZW50Q291bnRzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8dW5zaWdu
ZWQ+IHJlc3VsdChtX2NvbnNvbGVNZXNzYWdlcy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9jb25zb2xlTWVzc2FnZXMuc2l6ZSgpOyBpKyspCkBAIC0xMzcsNyArMTM3LDcg
QEAgVmVjdG9yPHVuc2lnbmVkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvbnNvbGVNZXNzYWdl
QXJndW1lbnRDb3VudHMoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ29uc29sZUFnZW50OjpzdGFydFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlKQordm9p
ZCBDb25zb2xlQWdlbnQ6OnN0YXJ0VGltaW5nKGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAg
Ly8gRm9sbG93IEZpcmVidWcncyBiZWhhdmlvciBvZiByZXF1aXJpbmcgYSB0aXRsZSB0aGF0IGlz
IG5vdCBudWxsIG9yCiAgICAgLy8gdW5kZWZpbmVkIGZvciB0aW1pbmcgZnVuY3Rpb25zCkBAIC0x
NDcsNyArMTQ3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0YXJ0VGltaW5nKGNv
bnN0IFN0cmluZyYgdGl0bGUpCiAgICAgbV90aW1lcy5hZGQodGl0bGUsIG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BU
aW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNh
bGxTdGFjaykKK3ZvaWQgQ29uc29sZUFnZW50OjpzdG9wVGltaW5nKGNvbnN0IFN0cmluZyYgdGl0
bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCiB7CiAgICAgLy8gRm9s
bG93IEZpcmVidWcncyBiZWhhdmlvciBvZiByZXF1aXJpbmcgYSB0aXRsZSB0aGF0IGlzIG5vdCBu
dWxsIG9yCiAgICAgLy8gdW5kZWZpbmVkIGZvciB0aW1pbmcgZnVuY3Rpb25zCkBAIC0xNjYsNyAr
MTY2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcoY29uc3QgU3Ry
aW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWwKICAgICBhZGRNZXNzYWdlVG9Db25zb2xl
KHN0ZDo6bWFrZV91bmlxdWU8Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVB
UEksIE1lc3NhZ2VUeXBlOjpUaW1pbmcsIE1lc3NhZ2VMZXZlbDo6RGVidWcsIG1lc3NhZ2UsIGNh
bGxTdGFjaykpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y291bnQoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQor
dm9pZCBDb25zb2xlQWdlbnQ6OmNvdW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0
cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9yQ29uc29sZShzdGF0ZSwgU2Ny
aXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7CiAgICAgY29uc3QgU2Ny
aXB0Q2FsbEZyYW1lJiBsYXN0Q2FsbGVyID0gY2FsbFN0YWNrLT5hdCgwKTsKQEAgLTE5OCw3ICsx
OTgsNyBAQCBzdGF0aWMgYm9vbCBpc0dyb3VwTWVzc2FnZShNZXNzYWdlVHlwZSB0eXBlKQogICAg
ICAgICB8fCB0eXBlID09IE1lc3NhZ2VUeXBlOjpFbmRHcm91cDsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OmFkZENvbnNvbGVNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxDb25zb2xl
TWVzc2FnZT4gY29uc29sZU1lc3NhZ2UpCit2b2lkIENvbnNvbGVBZ2VudDo6YWRkQ29uc29sZU1l
c3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBjb25zb2xlTWVzc2FnZSkKIHsK
ICAgICBBU1NFUlQobV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluc3BlY3RvckVudmlyb25tZW50
KCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKTsKICAgICBBU1NFUlRfQVJHKGNvbnNvbGVNZXNz
YWdlLCBjb25zb2xlTWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCmluZGV4IDJm
YTgxMWFlN2U2MmYwYzQ5N2QwODc3MTYxNGFjMWU0ZmY5NDM0YjAuLjhmNDJmOTViYjQwZjdiMjA1
ZDdjYjhlMDg4ZDk4ZTMxNDVhZWY5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCkBA
IC00OCwxMiArNDgsMTIgQEAgY2xhc3MgU2NyaXB0QXJndW1lbnRzOwogY2xhc3MgU2NyaXB0Q2Fs
bFN0YWNrOwogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEpTX0VYUE9SVF9Q
UklWQVRFIEluc3BlY3RvckNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2Us
IHB1YmxpYyBJbnNwZWN0b3I6OkNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckNvbnNvbGVBZ2VudCk7CitjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBDb25zb2xlQWdlbnQgOiBwdWJsaWMgQWdlbnRCYXNlLCBwdWJsaWMgSW5z
cGVjdG9yOjpDb25zb2xlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb25zb2xlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIq
KTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JDb25zb2xlQWdlbnQoKTsKKyAgICBDb25zb2xlQWdl
bnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgdmlydHVhbCB+Q29uc29sZUFnZW50KCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5k
Q2hhbm5lbCosIEJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCA2ZmViOGEyNDhlNjYzOWRj
NjhkYzZjZWRiNjVlZjcyNzFlNzliMmViLi5iOGJjNjdjOGE5MjI3ZTE5MTJlZTUwYmU1MTMxZTE2
NDczZGQxMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNDMsNyAr
NDMsNyBAQAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotY29uc3QgY2hhciogSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXAgPSAiYmFja3RyYWNlIjsKK2NvbnN0
IGNoYXIqIERlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwID0gImJhY2t0cmFjZSI7
CiAKIC8vIE9iamVjdHMgY3JlYXRlZCBhbmQgcmV0YWluZWQgYnkgZXZhbHVhdGluZyBicmVha3Bv
aW50IGFjdGlvbnMgYXJlIHB1dCBpbnRvIG9iamVjdCBncm91cHMKIC8vIGFjY29yZGluZyB0byB0
aGUgYnJlYWtwb2ludCBhY3Rpb24gaWRlbnRpZmllciBhc3NpZ25lZCBieSB0aGUgZnJvbnRlbmQu
IEEgYnJlYWtwb2ludCBtYXkKQEAgLTU1LDggKzU1LDggQEAgc3RhdGljIFN0cmluZyBvYmplY3RH
cm91cEZvckJyZWFrcG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0
aW8KICAgICByZXR1cm4gbWFrZVN0cmluZyhvYmplY3RHcm91cCwgU3RyaW5nOjpudW1iZXIoYWN0
aW9uLmlkZW50aWZpZXIpKTsKIH0KIAotSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9y
RGVidWdnZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdl
cikKLSAgICA6IEluc3BlY3RvckFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkRlYnVnZ2VyIikpCitE
ZWJ1Z2dlckFnZW50OjpEZWJ1Z2dlckFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQorICAgIDogQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiRGVidWdnZXIi
KSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikK
ICAgICAsIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEKEpTQzo6bm9CcmVha3BvaW50
SUQpCiB7CkBAIC02NCwxNyArNjQsMTcgQEAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVj
dG9yRGVidWdnZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2MKICAgICBj
bGVhckJyZWFrRGV0YWlscygpOwogfQogCi1JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp+SW5zcGVj
dG9yRGVidWdnZXJBZ2VudCgpCitEZWJ1Z2dlckFnZW50Ojp+RGVidWdnZXJBZ2VudCgpCiB7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0g
c3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OkRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyPihm
cm9udGVuZENoYW5uZWwpOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3I6OkRl
YnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzb24pCit2b2lkIERlYnVnZ2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQogewog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLmNsZWFyKCk7CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzCiAg
ICAgZGlzYWJsZShza2lwUmVjb21waWxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjplbmFibGUoKQordm9pZCBEZWJ1Z2dlckFnZW50OjplbmFibGUoKQogewogICAgIGlmICht
X2VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQogICAgIG1fZW5hYmxlZCA9IHRydWU7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQp
Cit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogewog
ICAgIGlmICghbV9lbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC0xMTMsMTcgKzExMywxNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJv
eWVkKQogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYpCiB7CiAgICAgZW5hYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQogewogICAgIGRpc2FibGUoZmFsc2UpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3RyaW5nJiwgYm9v
bCBhY3RpdmUpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9y
U3RyaW5nJiwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSkKICAgICAgICAgc2NyaXB0
RGVidWdTZXJ2ZXIoKS5hY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CkBAIC0xMzEsNyArMTMxLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0
cmluZyYsIGJvb2wgYWN0aXZlKQogICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmRlYWN0aXZh
dGVCcmVha3BvaW50cygpOwogfQogCi1ib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzUGF1
c2VkKCkKK2Jvb2wgRGVidWdnZXJBZ2VudDo6aXNQYXVzZWQoKQogewogICAgIHJldHVybiBzY3Jp
cHREZWJ1Z1NlcnZlcigpLmlzUGF1c2VkKCk7CiB9CkBAIC0xNTIsNyArMTUyLDcgQEAgc3RhdGlj
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkQ1NQVmlvbGF0aW9uUGF1c2VSZWFzb24oY29u
c3QgU3RyaW5nJiBkaXJlY3QKICAgICByZXR1cm4gcmVhc29uLT5vcGVuQWNjZXNzb3JzKCk7CiB9
CiAKLVJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxk
QnJlYWtwb2ludFBhdXNlUmVhc29uKEpTQzo6QnJlYWtwb2ludElEIGRlYnVnZ2VyQnJlYWtwb2lu
dElkZW50aWZpZXIpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBEZWJ1Z2dlckFnZW50OjpidWls
ZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihKU0M6OkJyZWFrcG9pbnRJRCBkZWJ1Z2dlckJyZWFrcG9p
bnRJZGVudGlmaWVyKQogewogICAgIEFTU0VSVChkZWJ1Z2dlckJyZWFrcG9pbnRJZGVudGlmaWVy
ICE9IEpTQzo6bm9CcmVha3BvaW50SUQpOwogICAgIGF1dG8gaXQgPSBtX2RlYnVnZ2VyQnJlYWtw
b2ludElkZW50aWZpZXJUb0luc3BlY3RvckJyZWFrcG9pbnRJZGVudGlmaWVyLmZpbmQoZGVidWdn
ZXJCcmVha3BvaW50SWRlbnRpZmllcik7CkBAIC0xNjUsNyArMTY1LDcgQEAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnVpbGRCcmVha3BvaW50UGF1c2VS
ZWFzb24oSlNDOjoKICAgICByZXR1cm4gcmVhc29uLT5vcGVuQWNjZXNzb3JzKCk7CiB9CiAKLVJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxkRXhjZXB0
aW9uUGF1c2VSZWFzb24oY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGV4Y2VwdGlvbiwg
Y29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0KQorUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gRGVidWdnZXJBZ2VudDo6YnVpbGRFeGNlcHRpb25QYXVzZVJlYXNvbihjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5q
ZWN0ZWRTY3JpcHQpCiB7CiAgICAgQVNTRVJUKCFleGNlcHRpb24uaGFzTm9WYWx1ZSgpKTsKICAg
ICBpZiAoZXhjZXB0aW9uLmhhc05vVmFsdWUoKSkKQEAgLTE3NSwxMCArMTc1LDEwIEBAIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxkRXhjZXB0aW9u
UGF1c2VSZWFzb24oY29uc3QKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFw
T2JqZWN0KGV4Y2VwdGlvbiwgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0
R3JvdXApLT5vcGVuQWNjZXNzb3JzKCk7CisgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBP
YmplY3QoZXhjZXB0aW9uLCBEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCktPm9w
ZW5BY2Nlc3NvcnMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpoYW5kbGVD
b25zb2xlQXNzZXJ0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6
aGFuZGxlQ29uc29sZUFzc2VydChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHNj
cmlwdERlYnVnU2VydmVyKCkucGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpICE9IEpTQzo6RGVidWdn
ZXI6OkRvbnRQYXVzZU9uRXhjZXB0aW9ucykKICAgICAgICAgYnJlYWtQcm9ncmFtKEluc3BlY3Rv
cjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QXNzZXJ0LCBidWlsZEFzc2Vy
dFBhdXNlUmVhc29uKG1lc3NhZ2UpKTsKQEAgLTIzMSw3ICsyMzEsNyBAQCBzdGF0aWMgYm9vbCBi
cmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcsIFNj
cmlwdEJyZWFrcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGFjdGlvbnMsIEJyZWFrcG9pbnRBY3Rpb25z
KiByZXN1bHQpCitib29sIERlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3Rv
Y29sKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgYWN0
aW9ucywgQnJlYWtwb2ludEFjdGlvbnMqIHJlc3VsdCkKIHsKICAgICBpZiAoIWFjdGlvbnMpCiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc1LDcgKzI3NSw3IEBAIGJvb2wgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbnNGcm9tUHJvdG9jb2woRXJyb3JTdHJpbmcmIGVy
cm9yU3RyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29u
c3Qgb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJl
ciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnNldEJy
ZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlv
bmFsVVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
TG9jYXRpb24+PiYgbG9jYXRpb25zKQogewogICAgIGxvY2F0aW9ucyA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNy
ZWF0ZSgpOwogICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKQEAg
LTMzNiw3ICszMzYsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9uKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgSW5zcGVjdG9yT2JqZWN0JiBsb2NhdGlvbiwgSgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0
aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlvbnMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVy
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFs
TG9jYXRpb24pCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9uLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRp
b24pCiB7CiAgICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRDsKICAgICB1bnNpZ25lZCBsaW5lTnVt
YmVyOwpAQCAtMzczLDcgKzM3Myw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0CiAgICAgKm91
dEJyZWFrcG9pbnRJZGVudGlmaWVyID0gYnJlYWtwb2ludElkZW50aWZpZXI7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnJl
bW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVu
dGlmaWVyKQogewogICAgIG1famF2YVNjcmlwdEJyZWFrcG9pbnRzLnJlbW92ZShicmVha3BvaW50
SWRlbnRpZmllcik7CiAKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyZWFr
cAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9j
YXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmIGxvY2F0aW9uKQordm9pZCBEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24o
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IGxvY2F0aW9uKQogewogICAgIGlmIChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCAh
PSBKU0M6Om5vQnJlYWtwb2ludElEKSB7CiAgICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVt
b3ZlQnJlYWtwb2ludChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCk7CkBAIC00MDYs
NyArNDA2LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRp
b24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIHJlc3VtZShlcnJvclN0cmlu
Zyk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
YnJlYWtwb2ludElkZW50aWZpZXIsIEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IFNjcmlw
dEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkxvY2F0aW9uPiBEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCBjb25z
dCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQogewogICAgIFNjcmlwdHNNYXA6Oml0ZXJh
dG9yIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwogICAgIGlmIChz
Y3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCkBAIC00MzYsNyArNDM2LDcgQEAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6cmVzb2x2ZUIKICAgICByZXR1cm4gV1RGOjptb3ZlKGxvY2F0aW9uKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJp
bmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
SXNSZWdleCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKK3ZvaWQgRGVidWdn
ZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5n
JiBzY3JpcHRJRFN0ciwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxD
YXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNl
YXJjaE1hdGNoPj4mIHJlc3VsdHMpCiB7CiAgICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCA9IHNj
cmlwdElEU3RyLnRvSW50UHRyKCk7CiAgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNvdXJj
ZUlEKTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogICAgIHJl
c3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxpbmVzKGl0LT52
YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9y
LCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkKK3ZvaWQg
RGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRJRFN0ciwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpCiB7CiAgICAgSlNDOjpT
b3VyY2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7CiAgICAgU2NyaXB0c01h
cDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7CkBAIC00NjAsNyArNDYw
LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JT
dHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKICAgICAgICAgZXJyb3IgPSBBU0NJSUxpdGVy
YWwoIk5vIHNjcmlwdCBmb3IgaWQ6ICIpICsgc2NyaXB0SURTdHI7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIGRldGFpbHMpCit2b2lkIERlYnVnZ2VyQWdl
bnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0
SWQoZnVuY3Rpb25JZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewpA
QCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rp
b25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICBpbmplY3RlZFNj
cmlwdC5nZXRGdW5jdGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uSWQsICZkZXRhaWxz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0
U3RhdGVtZW50KEluc3BlY3Rvcjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBi
cmVha1JlYXNvbiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhKQordm9pZCBEZWJ1Z2dl
ckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3Rvcjo6RGVidWdnZXJG
cm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBkYXRhKQogewogICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDgxLDcgKzQ4MSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3I6OkRlYnVnZ2VyRnJv
CiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5zZXRQYXVzZU9uTmV4dFN0YXRlbWVudCh0cnVlKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0YXRl
bWVudCgpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCkK
IHsKICAgICBpZiAobV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCiAgICAgICAgIHJldHVybjsK
QEAgLTQ5MCwxNCArNDkwLDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2Vs
UGF1c2VPbk5leHRTdGF0ZW1lbnQoKQogICAgIHNjcmlwdERlYnVnU2VydmVyKCkuc2V0UGF1c2VP
bk5leHRTdGF0ZW1lbnQoZmFsc2UpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnBhdXNlKEVycm9yU3RyaW5nJikKK3ZvaWQgRGVidWdnZXJBZ2VudDo6cGF1c2UoRXJyb3JTdHJp
bmcmKQogewogICAgIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yOjpEZWJ1
Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpQYXVzZU9uTmV4dFN0YXRlbWVudCwgbnVs
bHB0cik7CiAKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IHRydWU7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZykKK3ZvaWQgRGVidWdnZXJBZ2VudDo6cmVzdW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykK
IHsKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVybjsK
QEAgLTUwNSw3ICs1MDUsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5jb250aW51
ZVByb2dyYW0oKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3ZlcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnN0ZXBPdmVyKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0
cmluZykpCiAgICAgICAgIHJldHVybjsKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnN0ZXBPdmVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICBz
Y3JpcHREZWJ1Z1NlcnZlcigpLnN0ZXBPdmVyU3RhdGVtZW50KCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c3RlcEludG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQordm9p
ZCBEZWJ1Z2dlckFnZW50OjpzdGVwSW50byhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAg
ICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQogICAgICAgICByZXR1cm47CkBAIC01
MjQsNyArNTI0LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50byhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgICAgIG1fbGlzdGVuZXItPnN0ZXBJbnRvKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE91dChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnN0ZXBPdXQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQogewogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c3RlcE91dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIo
KS5zdGVwT3V0T2ZGdW5jdGlvbigpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldFBhdXNlT25FeGNlcHRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBzdHJpbmdQYXVzZVN0YXRlKQordm9pZCBEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhj
ZXB0aW9ucyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3RyaW5nUGF1
c2VTdGF0ZSkKIHsKICAgICBKU0M6OkRlYnVnZ2VyOjpQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBh
dXNlU3RhdGU7CiAgICAgaWYgKHN0cmluZ1BhdXNlU3RhdGUgPT0gIm5vbmUiKQpAQCAtNTUxLDcg
KzU1MSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlv
bnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zCiAgICAgICAgIGVycm9yU3RyaW5nID0g
QVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvci4gQ291bGQgbm90IGNoYW5nZSBwYXVzZSBvbiBl
eGNlcHRpb25zIHN0YXRlIik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZh
bHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
Y2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBjb25z
dCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29uc3QgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBj
b25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNv
bnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmll
dywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJl
c3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCit2
b2lkIERlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25z
dCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxib29sPiogd2FzVGhyb3duKQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY2Fs
bEZyYW1lSWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTU3
NSwxNyArNTc1LDE3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNh
bGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgfQogfQogCi12b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldE92ZXJsYXlNZXNzYWdlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nKikKK3ZvaWQgRGVidWdnZXJBZ2VudDo6c2V0T3ZlcmxheU1lc3NhZ2UoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqKQogewogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUChjb25zdCBTdHJpbmcmIGRpcmVjdGl2
ZVRleHQpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUChj
b25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpCiB7CiAgICAgaWYgKHNjcmlwdERlYnVnU2VydmVy
KCkucGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpICE9IEpTQzo6RGVidWdnZXI6OkRvbnRQYXVzZU9u
RXhjZXB0aW9ucykKICAgICAgICAgYnJlYWtQcm9ncmFtKEluc3BlY3Rvcjo6RGVidWdnZXJGcm9u
dGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6Q1NQVmlvbGF0aW9uLCBidWlsZENTUFZpb2xhdGlvblBh
dXNlUmVhc29uKGRpcmVjdGl2ZVRleHQpKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcyhJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxGcmFt
ZXMoSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQpCiB7CiAgICAgQVNTRVJUKCFpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVl
KCkpCkBAIC01OTQsMTIgKzU5NCwxMiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IEluc3BlYwogICAgIHJl
dHVybiBpbmplY3RlZFNjcmlwdC53cmFwQ2FsbEZyYW1lcyhtX2N1cnJlbnRDYWxsU3RhY2spOwog
fQogCi1TdHJpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c291cmNlTWFwVVJMRm9yU2NyaXB0
KGNvbnN0IFNjcmlwdCYgc2NyaXB0KQorU3RyaW5nIERlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVS
TEZvclNjcmlwdChjb25zdCBTY3JpcHQmIHNjcmlwdCkKIHsKICAgICByZXR1cm4gQ29udGVudFNl
YXJjaFV0aWxpdGllczo6ZmluZFNjcmlwdFNvdXJjZU1hcFVSTChzY3JpcHQuc291cmNlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJj
ZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHQmIGluU2NyaXB0KQordm9pZCBEZWJ1Z2dlckFnZW50
OjpkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHQmIGlu
U2NyaXB0KQogewogICAgIFNjcmlwdCBzY3JpcHQgPSBpblNjcmlwdDsKICAgICBpZiAoc2NyaXB0
LnN0YXJ0TGluZSA8PSAwICYmICFzY3JpcHQuc3RhcnRDb2x1bW4pCkBAIC02NTAsMTIgKzY1MCwx
MiBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291
cmNlSUQgc291cmNlSUQsIGNvbnN0IFNjcmlwdAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKQordm9pZCBEZWJ1Z2dlckFnZW50OjpmYWlsZWRUb1BhcnNlU291cmNl
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGlu
dCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5zY3JpcHRGYWlsZWRUb1BhcnNlKHVybCwgZGF0YSwgZmlyc3RMaW5lLCBl
cnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZGlkUGF1c2UoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGV4Y2VwdGlvbk9yQ2F1Z2h0VmFsdWUpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpT
Qzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGNhbGxGcmFtZXMsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBleGNlcHRpb25PckNh
dWdodFZhbHVlKQogewogICAgIEFTU0VSVChzY3JpcHRTdGF0ZSAmJiAhbV9wYXVzZWRTY3JpcHRT
dGF0ZSk7CiAgICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlOwpAQCAtNzE5LDEy
ICs3MTksMTIgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IERlcHJlY2EKICAgICB9CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvblNvdW5kKGludCBicmVha3BvaW50
QWN0aW9uSWRlbnRpZmllcikKK3ZvaWQgRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvblNv
dW5kKGludCBicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcikKIHsKICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+cGxheUJyZWFrcG9pbnRBY3Rpb25Tb3VuZChicmVha3BvaW50QWN0aW9uSWRlbnRp
Zmllcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlv
blByb2JlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgU2NyaXB0QnJlYWtwb2lu
dEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25lZCBzYW1wbGVJZCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBsZSkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6
YnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3Qg
U2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25l
ZCBzYW1wbGVJZCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBsZSkKIHsKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CiAgICAgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+IHBheWxvYWQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0
KHNhbXBsZSwgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGFjdGlvbikpOwpAQCAtNzM5
LDcgKzczOSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlv
blByb2JlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZGlkU2FtcGxlUHJvYmUoV1RGOjptb3ZlKHJlc3VsdCkpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6ZGlk
Q29udGludWUoKQogewogICAgIGlmIChtX2RpZFBhdXNlU3RvcHdhdGNoKSB7CiAgICAgICAgIG1f
ZGlkUGF1c2VTdG9wd2F0Y2ggPSBmYWxzZTsKQEAgLTc0OCwyMSArNzQ4LDIxIEBAIHZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogCiAgICAgbV9wYXVzZWRTY3JpcHRT
dGF0ZSA9IG51bGxwdHI7CiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0gRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUoKTsKLSAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+cmVsZWFzZU9iamVjdEdy
b3VwKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKTsKKyAgICBt
X2luamVjdGVkU2NyaXB0TWFuYWdlci0+cmVsZWFzZU9iamVjdEdyb3VwKERlYnVnZ2VyQWdlbnQ6
OmJhY2t0cmFjZU9iamVjdEdyb3VwKTsKICAgICBjbGVhckJyZWFrRGV0YWlscygpOwogICAgIGNs
ZWFyRXhjZXB0aW9uVmFsdWUoKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXN1bWVk
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKEluc3Bl
Y3Rvcjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhKQordm9pZCBEZWJ1Z2dlckFnZW50OjpicmVha1By
b2dyYW0oSW5zcGVjdG9yOjpEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFr
UmVhc29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpCiB7CiAgICAgbV9icmVha1Jl
YXNvbiA9IGJyZWFrUmVhc29uOwogICAgIG1fYnJlYWtBdXhEYXRhID0gV1RGOjptb3ZlKGRhdGEp
OwogICAgIHNjcmlwdERlYnVnU2VydmVyKCkuYnJlYWtQcm9ncmFtKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKQordm9p
ZCBEZWJ1Z2dlckFnZW50OjpjbGVhckluc3BlY3RvckJyZWFrcG9pbnRTdGF0ZSgpCiB7CiAgICAg
RXJyb3JTdHJpbmcgZHVtbXlFcnJvcjsKICAgICBWZWN0b3I8U3RyaW5nPiBicmVha3BvaW50SWRl
bnRpZmllcnM7CkBAIC03NzUsNyArNzc1LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpjbGVhckluc3BlY3RvckJyZWFrcG9pbnRTdGF0ZSgpCiAgICAgY2xlYXJEZWJ1Z2dlckJyZWFr
cG9pbnRTdGF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFyRGVi
dWdnZXJCcmVha3BvaW50U3RhdGUoKQordm9pZCBEZWJ1Z2dlckFnZW50OjpjbGVhckRlYnVnZ2Vy
QnJlYWtwb2ludFN0YXRlKCkKIHsKICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmNsZWFyQnJlYWtw
b2ludHMoKTsKIApAQCAtNzkyLDcgKzc5Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpCiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIo
KS5jb250aW51ZVByb2dyYW0oKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRDbGVhckdsb2JhbE9iamVjdCgpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpZENsZWFyR2xvYmFs
T2JqZWN0KCkKIHsKICAgICAvLyBDbGVhciBicmVha3BvaW50cyBmcm9tIHRoZSBkZWJ1Z2dlciwg
YnV0IGtlZXAgdGhlIGluc3BlY3RvcidzIG1vZGVsIG9mIHdoaWNoCiAgICAgLy8gcGFnZXMgaGF2
ZSB3aGF0IGJyZWFrcG9pbnRzLCBhcyB0aGUgbWFwcGluZyBpcyBvbmx5IHNlbnQgdG8gRGVidWdn
ZXJBZ2VudCBvbmNlLgpAQCAtODAyLDcgKzgwMiw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGlkQ2xlYXJHbG9iYWxPYmplY3QoKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwogfQogCi1ib29sIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmFzc2VydFBhdXNlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitib29sIERlYnVnZ2Vy
QWdlbnQ6OmFzc2VydFBhdXNlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAgaWYg
KCFtX3BhdXNlZFNjcmlwdFN0YXRlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRl
cmFsKCJDYW4gb25seSBwZXJmb3JtIG9wZXJhdGlvbiB3aGlsZSBwYXVzZWQuIik7CkBAIC04MTIs
MTMgKzgxMiwxMyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmFzc2VydFBhdXNlZChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJCcmVha0RldGFpbHMoKQordm9pZCBEZWJ1Z2dlckFn
ZW50OjpjbGVhckJyZWFrRGV0YWlscygpCiB7CiAgICAgbV9icmVha1JlYXNvbiA9IEluc3BlY3Rv
cjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6T3RoZXI7CiAgICAgbV9icmVh
a0F1eERhdGEgPSBudWxscHRyOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNs
ZWFyRXhjZXB0aW9uVmFsdWUoKQordm9pZCBEZWJ1Z2dlckFnZW50OjpjbGVhckV4Y2VwdGlvblZh
bHVlKCkKIHsKICAgICBpZiAobV9oYXNFeGNlcHRpb25WYWx1ZSkgewogICAgICAgICBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci0+Y2xlYXJFeGNlcHRpb25WYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oCmluZGV4IDE0OWE5OGU3ZmJiMWJhZjA3NjJmZDg5NzdhYTkyNDAyMGRjZmEz
NjcuLjA4NGUzNTgzODc3MzE1YTExYmJiMDc2NDQ3NTA2ZjE5NTZiYmJlZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTU3LDEzICs1NywxMyBAQCBjbGFzcyBJbnNwZWN0b3JW
YWx1ZTsKIGNsYXNzIFNjcmlwdERlYnVnU2VydmVyOwogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAKLWNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgOiBw
dWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgU2NyaXB0RGVidWdMaXN0ZW5lciwgcHVi
bGljIEluc3BlY3Rvcjo6RGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOworY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBBZ2VudEJhc2UsIHB1YmxpYyBTY3Jp
cHREZWJ1Z0xpc3RlbmVyLCBwdWJsaWMgSW5zcGVjdG9yOjpEZWJ1Z2dlckJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVidWdnZXJBZ2VudCk7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGJhY2t0cmFjZU9iamVjdEdyb3VwOwogCi0gICAgdmlydHVhbCB+SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudCgpOworICAgIHZpcnR1YWwgfkRlYnVnZ2VyQWdlbnQoKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRDaGFubmVsKiwgQmFja2Vu
ZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CkBAIC0xMDksNyArMTA5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2NyaXB0RGVidWdTZXJ2ZXImIHNjcmlwdERlYnVn
U2VydmVyKCkgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBEZWJ1Z2dlckFnZW50KEluamVjdGVkU2NyaXB0
TWFuYWdlciopOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1h
bmFnZXIoKSBjb25zdCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogICAgIHZp
cnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwg
Y29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwCmluZGV4IGY0NTM5MzVlYjA4N2VkNjMyNDBhMGQ5ODM3OTIzMmJlOTQ4YThiYjgu
LjE1ZjhkMTlmMjU1OTczNWUxZmI4NzdjMWQzZGI3MjkyNmZmZmI0MjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmNwcApAQCAtNTUsOCArNTUsOCBAQCBzdGF0aWMgYm9vbCBhc0Jvb2wo
Y29uc3QgYm9vbCogY29uc3QgYikKICAgICByZXR1cm4gYiA/ICpiIDogZmFsc2U7CiB9CiAKLUlu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6SW5zcGVjdG9yUnVudGltZUFnZW50KEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNl
KEFTQ0lJTGl0ZXJhbCgiUnVudGltZSIpKQorUnVudGltZUFnZW50OjpSdW50aW1lQWdlbnQoSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBBZ2VudEJh
c2UoQVNDSUlMaXRlcmFsKCJSdW50aW1lIikpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX3NjcmlwdERlYnVnU2VydmVyKG51bGxw
dHIpCiAgICAgLCBtX2VuYWJsZWQoZmFsc2UpCkBAIC02NCw3ICs2NCw3IEBAIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6SW5zcGVjdG9yUnVudGltZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciog
aW5qZWN0ZWRTY3JpCiB7CiB9CiAKLUluc3BlY3RvclJ1bnRpbWVBZ2VudDo6fkluc3BlY3RvclJ1
bnRpbWVBZ2VudCgpCitSdW50aW1lQWdlbnQ6On5SdW50aW1lQWdlbnQoKQogewogfQogCkBAIC04
NSw3ICs4NSw3IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJy
b3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0KGNvbnN0CiAgICAgICAgIC5yZWxlYXNlKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3lu
dGF4RXJyb3JUeXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJp
bmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXJyb3JS
YW5nZT4mIHJhbmdlKQordm9pZCBSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTeW50
YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmlu
Zz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJvclJh
bmdlPiYgcmFuZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsVk0oKTsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWMK
ICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
KiBjb25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29uc3QgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNv
bGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiBjb25zdCByZXR1
cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQordm9pZCBSdW50aW1lQWdlbnQ6OmV2
YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBjb25zdCBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJv
b2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7CiAgICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJy
b3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhh
c05vVmFsdWUoKSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cAog
ICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiYgb3B0aW9uYWxB
cmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdh
c1Rocm93bikKK3ZvaWQgUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYmIG9wdGlvbmFsQXJndW1lbnRzLCBj
b25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNv
bnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmll
dywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJl
c3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7
CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKGluamVj
dGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0
UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGNvbnN0IGJvb2wqIGNvbnN0IG93blByb3BlcnRpZXMsIGNvbnN0IGJvb2wqIGNvbnN0IG93
bkFuZEdldHRlclByb3BlcnRpZXMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVz
KQordm9pZCBSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBjb25zdCBvd25Qcm9wZXJ0
aWVzLCBjb25zdCBib29sKiBjb25zdCBvd25BbmRHZXR0ZXJQcm9wZXJ0aWVzLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJv
cGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlw
dG9yPj4mIGludGVybmFsUHJvcGVydGllcykKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKG9iamVjdElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBA
IC0xNzgsNyArMTc4LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRp
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICBzZXRQYXVzZU9u
RXhjZXB0aW9uc1N0YXRlKG1fc2NyaXB0RGVidWdTZXJ2ZXIsIHByZXZpb3VzUGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0
aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGludCogc3RhcnRJbmRleCwgY29u
c3QgaW50KiBudW1iZXJUb0ZldGNoLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMp
Cit2b2lkIFJ1bnRpbWVBZ2VudDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdy
b3VwLCBjb25zdCBpbnQqIHN0YXJ0SW5kZXgsIGNvbnN0IGludCogbnVtYmVyVG9GZXRjaCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQogewogICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9y
T2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkp
IHsKQEAgLTE5MiwyNCArMTkyLDI0IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRD
b2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgaW5q
ZWN0ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBv
YmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBzdGFydCwgZmV0Y2gsICZlbnRy
aWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3QoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkKQordm9pZCBSdW50aW1lQWdlbnQ6OnJl
bGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkKQogewogICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIt
PmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmICghaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0
KG9iamVjdElkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmpl
Y3RHcm91cChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCit2b2lkIFJ1
bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkKIHsKICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+cmVsZWFzZU9i
amVjdEdyb3VwKG9iamVjdEdyb3VwKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OnJ1bihFcnJvclN0cmluZyYpCit2b2lkIFJ1bnRpbWVBZ2VudDo6cnVuKEVycm9yU3RyaW5nJikK
IHsKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyNzYzND4gV2ViIEluc3Bl
Y3Rvcjogc3VwcG9ydCBkZWJ1Z2dpbmcgd2ViIHdvcmtlcnMKIH0KIAotdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
PiYmIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+JiB0eXBlRGVzY3JpcHRpb25z
KQordm9pZCBSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0
cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PiYmIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+JiB0eXBlRGVz
Y3JpcHRpb25zKQogewogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAg
ICBWTSYgdm0gPSBnbG9iYWxWTSgpOwpAQCAtMjk2LDIzICsyOTYsMjMgQEAgc3RhdGljIHZvaWQg
cmVjb21waWxlQWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmlsaW5nKFZNJiB2bSwgYm9vbCBzaG91
bGRFbmFibGVUeXAKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uIHJlYXNvbikKK3ZvaWQg
UnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVh
c29uIHJlYXNvbikKIHsKICAgICBpZiAocmVhc29uICE9IERpc2Nvbm5lY3RSZWFzb246Okluc3Bl
Y3RlZFRhcmdldERlc3Ryb3llZCAmJiBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQpCiAgICAgICAg
IHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShmYWxzZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UnVudGltZUFnZW50OjplbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcmKQordm9pZCBSdW50
aW1lQWdlbnQ6OmVuYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCiB7CiAgICAgc2V0VHlw
ZVByb2ZpbGVyRW5hYmxlZFN0YXRlKHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCit2b2lkIFJ1bnRpbWVBZ2Vu
dDo6ZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCiB7CiAgICAgc2V0VHlwZVByb2Zp
bGVyRW5hYmxlZFN0YXRlKGZhbHNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OnNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIHNob3VsZEVuYWJsZVR5cGVQcm9maWxp
bmcpCit2b2lkIFJ1bnRpbWVBZ2VudDo6c2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKGJvb2wg
c2hvdWxkRW5hYmxlVHlwZVByb2ZpbGluZykKIHsKICAgICBpZiAobV9pc1R5cGVQcm9maWxpbmdF
bmFibGVkID09IHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcpCiAgICAgICAgIHJldHVybjsKQEAg
LTMzMyw3ICszMzMsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0VHlwZVByb2Zp
bGVyRW5hYmxlZFN0YXRlKGJvb2wgc2hvdWxkRW5hYmxlVHlwZVBybwogICAgICAgICByZWNvbXBp
bGVBbGxKU0Z1bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcodm0sIHNob3VsZEVuYWJsZVR5cGVQcm9m
aWxpbmcpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3Mo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEQXNTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpCYXNpY0Jsb2NrPj4mIGJhc2ljQmxvY2tzKQordm9pZCBSdW50aW1lQWdlbnQ6Omdl
dEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJREFzU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2NrcykKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxWTSgpOwogICAgIGlmICghdm0uY29udHJvbEZsb3dQcm9maWxlcigpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCmluZGV4IDU3ZDBiYzI1MDU2ZThlZjRkMDgxOWZi
NzUwZmMxZTNmMjNjMjRjZDMuLmQ3MDE5MmY2MGI2YmU1ZTBkOWU3MmMzYTM1NjViODA4OTUzNmFl
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCkBAIC01MCwxMCArNTAsMTAgQEAgY2xh
c3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBTY3JpcHREZWJ1Z1NlcnZlcjsKIHR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JSdW50
aW1lQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpS
dW50aW1lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JSdW50aW1lQWdlbnQpOworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgUnVudGlt
ZUFnZW50IDogcHVibGljIEFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6UnVudGltZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUnVudGltZUFn
ZW50KTsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JSdW50aW1lQWdlbnQoKTsKKyAg
ICB2aXJ0dWFsIH5SdW50aW1lQWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKIApAQCAtNzcs
NyArNzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9l
bmFibGVkOyB9CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQoSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgUnVudGltZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdl
ciopOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIo
KSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdENvbnNvbGVB
Z2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2Jh
bE9iamVjdENvbnNvbGVBZ2VudC5jcHAKaW5kZXggZmUxMTJkZDFlYWU4Y2FlY2UyM2NhYjhjMDMx
YjA2ZTY0MzkwOWZlYS4uZGNmMGNhMTk4ODlmZGFiMmZkYmQ3ZTYzZGZmOTJmMmFlOGYxNjk3YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9i
YWxPYmplY3RDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmNwcApAQCAtMjksNyArMjks
NyBAQAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50
OjpKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckNvbnNvbGVBZ2VudChpbmplY3RlZFNj
cmlwdE1hbmFnZXIpCisgICAgOiBDb25zb2xlQWdlbnQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQog
ewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuaAppbmRleCAwZDc5YzVk
MWJmMWJiZWU3NmI5YWJiODUzZjk5M2MxYWFjMDY1YTQ5Li40YTNmN2EzNTYwMTMzMGZkMjg3ZjAx
YmEzMGQ1NDhjZjdlODg2MWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50
LmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLWNsYXNzIEpT
R2xvYmFsT2JqZWN0Q29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckNvbnNvbGVB
Z2VudCB7CitjbGFzcyBKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudCBmaW5hbCA6IHB1YmxpYyBD
b25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpTR2xvYmFsT2JqZWN0Q29u
c29sZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2Jq
ZWN0RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDlhZTc2YzYyYTZjOWM1
YWIwM2M3MDkxNWQyZDIzMWQ4ZmY2NzNkZTkuLjhlZDU2NTBmZDA1OWFiMGE4Yjg1YmJlY2I2ZTEw
ZGIyOTY0YTc4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNw
cApAQCAtMzgsOCArMzgsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAotSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjpKU0dsb2JhbE9iamVjdERl
YnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSW5zcGVjdG9yQ29uc29sZUFnZW50
KiBjb25zb2xlQWdlbnQpCi0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluamVjdGVkU2Ny
aXB0TWFuYWdlcikKK0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6SlNHbG9iYWxPYmplY3RE
ZWJ1Z2dlckFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIENvbnNvbGVBZ2VudCogY29uc29s
ZUFnZW50KQorICAgIDogRGVidWdnZXJBZ2VudChpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAg
LCBtX3NjcmlwdERlYnVnU2VydmVyKGdsb2JhbE9iamVjdCkKICAgICAsIG1fY29uc29sZUFnZW50
KGNvbnNvbGVBZ2VudCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmgK
aW5kZXggYWM2Yjg3MTY5ZjQ3NWEyODJiNjAxMGVjYmQwMTliMzUyZDc1NTgwZS4uMzkxNjgxNTE4
OWRjNTE1ZWFkODg5NzdiMGY4ZmU5MGFkYmYxNzk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmpl
Y3REZWJ1Z2dlckFnZW50LmgKQEAgLTMxLDEzICszMSwxMyBAQAogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAotY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50OworY2xhc3MgQ29uc29sZUFnZW50
OwogCi1jbGFzcyBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudCB7CitjbGFzcyBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQg
ZmluYWwgOiBwdWJsaWMgRGVidWdnZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiwgSlNDOjpKU0dsb2JhbE9iamVjdCYsIEluc3BlY3RvckNvbnNvbGVBZ2VudCop
OworICAgIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgQ29uc29sZUFnZW50Kik7CiAgICAgdmlydHVhbCB+SlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KCkgeyB9CiAKICAgICB2aXJ0dWFsIEpTR2xvYmFsT2Jq
ZWN0U2NyaXB0RGVidWdTZXJ2ZXImIHNjcmlwdERlYnVnU2VydmVyKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbV9zY3JpcHREZWJ1Z1NlcnZlcjsgfQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlciBtX3NjcmlwdERlYnVn
U2VydmVyOwotICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CisgICAg
Q29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCmluZGV4IGU3NzNl
NzEwMGI0MGFlMWUzZWE5NDIyZThlMTM5YTA4ZDEyOThhODAuLjYwY2FmNjk4NWYzY2M2MTRiZDNm
MzliNDI2MTE1MGM1NTYyMzQ0NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVB
Z2VudC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6SlNHbG9iYWxPYmpl
Y3RSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIsIEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBJbnNwZWN0b3JSdW50aW1l
QWdlbnQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgIDogUnVudGltZUFnZW50KGluamVjdGVk
U2NyaXB0TWFuYWdlcikKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKIH0K
QEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbgogICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAK
LSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KHJlYXNvbik7CisgICAgUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChyZWFzb24pOwogfQogCiBWTSYgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6Omdsb2JhbFZN
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pT
R2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCmluZGV4IGY4NzBjZDc0MGU4
YzhmYjgwMzRjYjVkM2E1MTUwNGVmYWNjMjdhYWUuLmFlNGYxMWM3MDU2NmNjNDQ1YzEwYjY3MTRh
YTQwMDdhNWYzYjRjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaApA
QCAtMzQsNyArMzQsNyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLWNsYXNzIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50IGZpbmFsIDogcHVibGlj
IEluc3BlY3RvclJ1bnRpbWVBZ2VudCB7CitjbGFzcyBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBSdW50aW1lQWdlbnQgewogcHVibGljOgogICAgIEpTR2xvYmFsT2Jq
ZWN0UnVudGltZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hdWdt
ZW50YWJsZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hdWdtZW50YWJsZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oCmlu
ZGV4IDg5MjYyOWFiZjY2NmRkZWY5NGJjNmY4NjFmZjE2NmZmMTJmNmNlYzkuLjQwMzQ0ZjNiMDc2
YWI5NDkzM2FjODcxNWUyODk2NjEyZTAxYjFiZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYXVnbWVudGFibGUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2F1Z21lbnRhYmxlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50LmgKQEAgLTM2LDExICszNiwxMSBAQAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmREaXNwYXRjaGVyLCB0eXBlbmFt
ZSBBbHRlcm5hdGVEaXNwYXRjaGVyPgotY2xhc3MgQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlIHsKK2NsYXNzIEFsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50IGZpbmFsIDogcHVibGljIEFnZW50QmFzZSB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQoY29u
c3QgU3RyaW5nJiBkb21haW5OYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8QWx0ZXJuYXRlRGlzcGF0Y2hl
cj4gYWx0ZXJuYXRlRGlzcGF0Y2hlcikKLSAgICAgICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoZG9t
YWluTmFtZSkKKyAgICAgICAgOiBBZ2VudEJhc2UoZG9tYWluTmFtZSkKICAgICAgICAgLCBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIoV1RGOjptb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKQogICAgIHsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2F1Z21l
bnRhYmxlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hdWdtZW50YWJsZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaAppbmRleCAyNDU2YWM1OTE5ZDhhMGQ1NjU5ZDZmNzFjYzA3NTg4ZjZjNzc2OGIyLi5hZGQy
Y2M4MWI5Yzc3YzIxMDYzYzkyMDU0MGJkMmZlMTIzMWI4ODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2F1Z21lbnRhYmxlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYXVnbWVu
dGFibGUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTMzLDcgKzMzLDcgQEAK
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLWNsYXNzIEluc3BlY3RvckFnZW50QmFzZTsKK2Ns
YXNzIEFnZW50QmFzZTsKIAogY2xhc3MgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyIHsK
IHB1YmxpYzoKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQoQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyQ2xpZW50KikgPSAwOwogCiAgICAgdmlydHVhbCBGcm9udGVuZENoYW5uZWwqIGZy
b250ZW5kQ2hhbm5lbCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRXh0cmFB
Z2VudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQWdlbnRCYXNlPikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFeHRyYUFnZW50KHN0ZDo6dW5pcXVlX3B0cjxBZ2VudEJhc2U+KSA9IDA7
CiAKICAgICBib29sIGNvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICEhZnJvbnRlbmRDaGFubmVs
KCk7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggYTE5MjNmZTU0ZGUwNzQ3NDlj
NDUxMWI3NGEwOWZkZGQ3NGRlZmE2Zi4uZjcxMTFhMDQzY2M3MzhlZjI0NDhlOThjNTRjMzgwNmI0
ZDc4MzU3NyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtNjcsNyArNjcsNyBAQCBfVFlQ
RVNfV0lUSF9PUEVOX0ZJRUxEUyA9IHNldChbCiAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQi
LAogICAgICMgSW5zcGVjdG9yU3R5bGVTaGVldCBub3Qgb25seSBjcmVhdGVzIHRoaXMgcHJvcGVy
dHkgYnV0IHdhbnRzIHRvIHJlYWQgaXQgYW5kIG1vZGlmeSBpdC4KICAgICAiQ1NTLkNTU1Byb3Bl
cnR5IiwKLSAgICAjIEluc3BlY3RvclJlc291cmNlQWdlbnQgbmVlZHMgdG8gdXBkYXRlIG1pbWUt
dHlwZS4KKyAgICAjIFJlc291cmNlQWdlbnQgbmVlZHMgdG8gdXBkYXRlIG1pbWUtdHlwZS4KICAg
ICAiTmV0d29yay5SZXNwb25zZSIsCiAgICAgIyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5Lgog
ICAgICJUZXN0Lk9wZW5QYXJhbWV0ZXJCdW5kbGUiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAKaW5kZXggMTU0MjFiYmU4MThlNzZk
MTRlNjhjNTM1N2YxNmZlNTExZjAyMzIwZi4uYmQyYzIzNzg0YzFhMGEwOGExYjMwM2Q0ZDgzYjQx
NmQ0M2ZmNjA1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlR2VuZXJhdG9yLmNwcApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZp
c2l0b3ItPmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7CiAgICAgICAgIG1fY3Vy
cmVudE5vZGUgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKG1fZXhlYywgTGVnYWN5UHJvZmlsZXI6OmNy
ZWF0ZUNhbGxJZGVudGlmaWVyKG1fZXhlYywgdmlzaXRvci0+Y2FsbGVlKCksIHZpc2l0b3ItPnNv
dXJjZVVSTCgpLCBsaW5lLCBjb2x1bW4pLCBtX3Jvb3ROb2RlLmdldCgpKTsKICAgICAgICAgLy8g
QXNzdW1lIHRoYXQgcHJvZmlsZSB0aW1lcyBhcmUgcmVsYXRpdmUgdG8gd2hlbiB0aGUgfGNvbnNv
bGUucHJvZmlsZXwgY29tbWFuZCBpcyBldmFsdWF0ZWQuCi0gICAgICAgIC8vIFRoaXMgbWF0Y2hl
cyB0aGUgbG9naWMgaW4gSlNTdGFydFByb2ZpbGluZygpIGFuZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzdGFydEZyb21Db25zb2xlKCkuCisgICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgbG9n
aWMgaW4gSlNTdGFydFByb2ZpbGluZygpIGFuZCBUaW1lbGluZUFnZW50OjpzdGFydEZyb21Db25z
b2xlKCkuCiAgICAgICAgIG1fY3VycmVudE5vZGUtPmFwcGVuZENhbGwoUHJvZmlsZU5vZGU6OkNh
bGwoMC4wKSk7CiAgICAgICAgIG1fcm9vdE5vZGUtPnNwbGljZU5vZGUobV9jdXJyZW50Tm9kZS5n
ZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMzAwZDUwMGQ4ZmIxMmI3ZmRmNWRiMzI5
ZjdkMTAxOTM5YmExMDVmZS4uNTRhMWJiYjUwMzg2OGE1NWFhZmMyMDNmYTAxMDQ0ZDIzZGJjNDQz
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTgwNyw3ICs4MDcsNiBAQCBfX1pON1dlYkNvcmUx
N3NuYXBzaG90RnJhbWVSZWN0RVJOU181RnJhbWVFUktOU183SW50UmVjdEVqCiBfX1pON1dlYkNv
cmUxN3NuYXBzaG90U2VsZWN0aW9uRVJOU181RnJhbWVFagogX19aTjdXZWJDb3JlMTd1c2VyVmlz
aWJsZVN0cmluZ0VQNU5TVVJMCiBfX1pON1dlYkNvcmUxOERPTVdpbmRvd0V4dGVuc2lvbkMxRVBO
U181RnJhbWVFUk5TXzE1RE9NV3JhcHBlcldvcmxkRQotX19aTjdXZWJDb3JlMThJbnNwZWN0b3JQ
YWdlQWdlbnQ3ZnJhbWVJZEVQTlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMThQbGF0Zm9ybUNBTGF5
ZXJNYWMxOHNldEdlb21ldHJ5RmxpcHBlZEViCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtQ0FMYXll
ck1hYzIyZmlsdGVyc0NhbkJlQ29tcG9zaXRlZEVSS05TXzE2RmlsdGVyT3BlcmF0aW9uc0UKIF9f
Wk43V2ViQ29yZTE4UGxhdGZvcm1DQUxheWVyTWFjMjVsYXllclR5cGVGb3JQbGF0Zm9ybUxheWVy
RVA3Q0FMYXllcgpAQCAtMTYxNSw2ICsxNjE0LDcgQEAgX19aTjdXZWJDb3JlOUpTRWxlbWVudDZz
X2luZm9FCiBfX1pON1dlYkNvcmU5SlNFbGVtZW50OXRvV3JhcHBlZEVOM0pTQzdKU1ZhbHVlRQog
X19aTjdXZWJDb3JlOUxheWVyUG9vbEMxRXYKIF9fWk43V2ViQ29yZTlMYXllclBvb2xEMUV2Citf
X1pON1dlYkNvcmU5UGFnZUFnZW50N2ZyYW1lSWRFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTlQ
YWdlQ2FjaGUxMHNldE1heFNpemVFagogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTE0cHJ1bmVUb1Np
emVOb3dFak5TXzEzUHJ1bmluZ1JlYXNvbkUKIF9fWk43V2ViQ29yZTlQYWdlQ2FjaGUzNG1hcmtQ
YWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGNFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oCmluZGV4IDg3N2VmMGI0MjA3ZDYxMWZhMjc4MWE0MDBi
NTJhMGE3YjVlNmFkNWYuLmNmMWIzYjg5NGE3YTA3MzQxZDg4OGFhNTIyYWQ5Zjg0OWQzYTQyODQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmgKQEAg
LTQxLDggKzQxLDggQEAgY2xhc3MgU2NyaXB0VmFsdWU7CiB9CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgeworY2xhc3MgQ29uc29sZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yQWdlbnQ7Ci1jbGFzcyBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNw
ZWN0b3JWYWx1ZTsKIH0KQEAgLTUwLDkgKzUwLDkgQEAgY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlOwotY2xhc3MgSW5zcGVjdG9yRE9N
QWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OworY2xhc3MgRGF0YWJhc2VBZ2VudDsKK2NsYXNzIERPTUFnZW50OworY2xh
c3MgRE9NU3RvcmFnZUFnZW50OwogY2xhc3MgTm9kZTsKIGNsYXNzIFN0b3JhZ2U7CiAKQEAgLTY0
LDEwICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgfkNvbW1hbmRMaW5lQVBJSG9zdCgpOwogCiAgICAg
dm9pZCBpbml0KEluc3BlY3Rvcjo6SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50Ci0gICAg
ICAgICwgSW5zcGVjdG9yOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudAotICAg
ICAgICAsIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudAotICAgICAgICAsIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudCogZG9tU3RvcmFnZUFnZW50Ci0gICAgICAgICwgSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudCogZGF0YWJhc2VBZ2VudAorICAgICAgICAsIEluc3BlY3Rvcjo6Q29uc29sZUFnZW50
KiBjb25zb2xlQWdlbnQKKyAgICAgICAgLCBET01BZ2VudCogZG9tQWdlbnQKKyAgICAgICAgLCBE
T01TdG9yYWdlQWdlbnQqIGRvbVN0b3JhZ2VBZ2VudAorICAgICAgICAsIERhdGFiYXNlQWdlbnQq
IGRhdGFiYXNlQWdlbnQKICAgICAgICAgKQogICAgIHsKICAgICAgICAgbV9pbnNwZWN0b3JBZ2Vu
dCA9IGluc3BlY3RvckFnZW50OwpAQCAtMTAyLDEwICsxMDIsMTAgQEAgcHJpdmF0ZToKICAgICBD
b21tYW5kTGluZUFQSUhvc3QoKTsKIAogICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yQWdlbnQqIG1f
aW5zcGVjdG9yQWdlbnQ7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQqIG1f
Y29uc29sZUFnZW50OwotICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OwotICAgIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogbV9kb21TdG9yYWdlQWdlbnQ7Ci0gICAgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudCogbV9kYXRhYmFzZUFnZW50OworICAgIEluc3BlY3Rvcjo6Q29uc29sZUFn
ZW50KiBtX2NvbnNvbGVBZ2VudDsKKyAgICBET01BZ2VudCogbV9kb21BZ2VudDsKKyAgICBET01T
dG9yYWdlQWdlbnQqIG1fZG9tU3RvcmFnZUFnZW50OworICAgIERhdGFiYXNlQWdlbnQqIG1fZGF0
YWJhc2VBZ2VudDsKIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdGFibGVPYmpl
Y3Q+PiBtX2luc3BlY3RlZE9iamVjdHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RhYmxl
T2JqZWN0PiBtX2RlZmF1bHRJbnNwZWN0YWJsZU9iamVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAK
aW5kZXggM2U2ZjYzMjE2MTNiNjNkYjBkZWU3NTQwYTI0YmQ5YzU2ZTYwODVmNi4uODJjNjdkMjRl
OTllMzlkZTU3N2Q4YTQyZWY5M2Q5MjBhMTBkMDg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAK
QEAgLTQzLDM1ICs0MywzNSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6SW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQotICAgIDogSW5zcGVjdG9yQWdl
bnRCYXNlKEFTQ0lJTGl0ZXJhbCgiQXBwbGljYXRpb25DYWNoZSIpLCBpbnN0cnVtZW50aW5nQWdl
bnRzKQorQXBwbGljYXRpb25DYWNoZUFnZW50OjpBcHBsaWNhdGlvbkNhY2hlQWdlbnQoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZUFnZW50KiBwYWdlQWdlbnQp
CisgICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJBcHBsaWNhdGlvbkNhY2hlIiksIGlu
c3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiB7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUFnZW50OjpkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWws
IEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpBcHBsaWNhdGlvbkNhY2hl
RnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3Jl
YXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIu
Y2xlYXIoKTsKIAotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50KG51bGxwdHIpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0
QXBwbGljYXRpb25DYWNoZUFnZW50KG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgQXBwbGljYXRpb25D
YWNoZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogewotICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy0+c2V0SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMpOworICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy0+c2V0QXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMpOwogCiAgICAg
Ly8gV2UgbmVlZCB0byBwYXNzIGluaXRpYWwgbmF2aWdhdG9yLm9uT25saW5lLgogICAgIG5ldHdv
cmtTdGF0ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQ6OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQordm9pZCBBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUqIGZy
YW1lKQogewogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKS5kb2N1bWVudExvYWRlcigpOwogICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCkBAIC04NSwx
MyArODUsMTMgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OnVwZGF0ZUFw
cGxpY2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5hcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZChtX3BhZ2VBZ2VudC0+ZnJhbWVJZChm
cmFtZSksIG1hbmlmZXN0VVJMLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwogfQogCi12b2lk
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCit2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiB7CiAgICAg
Ym9vbCBpc05vd09ubGluZSA9IG5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkub25MaW5lKCk7CiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPm5ldHdvcmtTdGF0ZVVwZGF0ZWQoaXNOb3dPbmxpbmUpOwog
fQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1h
bmlmZXN0cyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+
JiByZXN1bHQpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlm
ZXN0cyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+JiBy
ZXN1bHQpCiB7CiAgICAgcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+OjpjcmVh
dGUoKTsKIApAQCAtMTE0LDE2ICsxMTQsMTYgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcmLCBSZWZQdHIKICAg
ICB9CiB9CiAKLURvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6
OmFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
U3RyaW5nIGZyYW1lSWQpCitEb2N1bWVudExvYWRlciogQXBwbGljYXRpb25DYWNoZUFnZW50Ojph
c3NlcnRGcmFtZVdpdGhEb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0
cmluZyBmcmFtZUlkKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5hc3NlcnRG
cmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1
bWVudExvYWRlcihlcnJvclN0cmluZywgZnJhbWUpOworICAgIHJldHVybiBQYWdlQWdlbnQ6OmFz
c2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIG1hbmlmZXN0VVJM
KQordm9pZCBBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZl
c3RVUkwpCiB7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gYXNzZXJ0RnJh
bWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZG9j
dW1lbnRMb2FkZXIpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4K
ICAgICAqbWFuaWZlc3RVUkwgPSBpbmZvLm1fbWFuaWZlc3Quc3RyaW5nKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJh
bWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hl
PiYgYXBwbGljYXRpb25DYWNoZSkKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBs
aWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpBcHBsaWNhdGlvbkNhY2hlPiYgYXBwbGljYXRpb25DYWNoZSkKIHsKICAgICBEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIgPSBhc3NlcnRGcmFtZVdpdGhEb2N1bWVudExvYWRlcihlcnJv
clN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFkb2N1bWVudExvYWRlcikKQEAgLTE0OCw3ICsx
NDgsNyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRp
b25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nJiBlcgogICAgIGFwcGxpY2F0aW9uQ2FjaGUgPSBi
dWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUocmVzb3VyY2VzLCBpbmZvKTsKIH0KIAotUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlv
bkNhY2hlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2VzLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJ
bmZvJiBhcHBsaWNhdGlvbkNhY2hlSW5mbykKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBs
aWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
UmVzb3VyY2VJbmZvTGlzdCYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCiB7CiAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9u
Q2FjaGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRNYW5pZmVzdFVSTChhcHBsaWNhdGlvbkNhY2hl
SW5mby5tX21hbmlmZXN0LnN0cmluZygpKQpAQCAtMTU5LDcgKzE1OSw3IEBAIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0
b3JBcHBsaWNhdGlvCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1
aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQorUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0
aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IEFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dDo6YnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgQXBwbGljYXRp
b25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xpc3QmIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMp
CiB7CiAgICAgYXV0byByZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U+OjpjcmVhdGUoKTsKIApAQCAtMTY5LDcgKzE2OSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvCiAgICAgcmV0dXJuIFdURjo6bW92ZShyZXNvdXJjZXMpOwogfQogCi1SZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25D
YWNoZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJl
c291cmNlSW5mbykKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IEFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OlJlc291cmNlSW5mbyYgcmVzb3VyY2VJbmZvKQogewogICAgIFN0cmluZ0J1aWxkZXIgdHlwZXM7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuaAppbmRleCBmMDhhY2UyMGY3MTcxODNhZDkwZDQ2ZmZkZTA2ZDNh
NjM0Y2ZhNzY5Li41MmE3YTNlNWE5ZDNkMTc1ODdjYjZlZjhlMGQ4M2YxNmJmYmY1ZmNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5oCkBAIC00MCwxOCArNDAsMTggQEAgY2xhc3MgSW5zcGVjdG9yVmFsdWU7
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwotY2xhc3MgSW5zcGVjdG9yUGFn
ZUFnZW50OwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQ
YWdlQWdlbnQ7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IGZpbmFsIDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6QXBwbGljYXRpb25D
YWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitjbGFzcyBBcHBsaWNhdGlvbkNhY2hlQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViQWdlbnRCYXNl
LCBwdWJsaWMgSW5zcGVjdG9yOjpBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcHBsaWNhdGlvbkNhY2hlQWdlbnQpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclBhZ2VBZ2VudCopOwot
ICAgIHZpcnR1YWwgfkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpIHsgfQorICAgIEFw
cGxpY2F0aW9uQ2FjaGVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZUFnZW50Kik7Cisg
ICAgdmlydHVhbCB+QXBwbGljYXRpb25DYWNoZUFnZW50KCkgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
KiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RS
ZWFzb24pIG92ZXJyaWRlOwpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgRG9jdW1l
bnRMb2FkZXIqIGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiwgU3Ry
aW5nIGZyYW1lSWQpOwogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAg
ICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6
OkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVy
OwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA4NTMyMWRkN2RkMmY3OGJlYTk5ZTUyZTJmNzYw
ZTA3ZTI5ODgwNGFjLi5hNGFmYjc2MTFkODFhZjI3MzY4NDE4ZGRhOWY3N2Q1NTg0MDI3OTc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAg
LTEwMywxOSArMTAzLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlUHNldWRvQ2xhc3NNYXNr
KEluc3BlY3RvckFycmF5KiBwc2V1ZG9DbGFzc0FycmF5KQogCiBjbGFzcyBDaGFuZ2VSZWdpb25P
dmVyc2V0VGFzayB7CiBwdWJsaWM6Ci0gICAgQ2hhbmdlUmVnaW9uT3ZlcnNldFRhc2soSW5zcGVj
dG9yQ1NTQWdlbnQqKTsKKyAgICBDaGFuZ2VSZWdpb25PdmVyc2V0VGFzayhDU1NBZ2VudCopOwog
ICAgIHZvaWQgc2NoZWR1bGVGb3IoV2ViS2l0TmFtZWRGbG93KiwgaW50IGRvY3VtZW50Tm9kZUlk
KTsKICAgICB2b2lkIHVuc2NoZWR1bGUoV2ViS2l0TmFtZWRGbG93Kik7CiAgICAgdm9pZCByZXNl
dCgpOwogICAgIHZvaWQgdGltZXJGaXJlZCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3RvckNT
U0FnZW50KiBtX2Nzc0FnZW50OworICAgIENTU0FnZW50KiBtX2Nzc0FnZW50OwogICAgIFRpbWVy
IG1fdGltZXI7CiAgICAgSGFzaE1hcDxXZWJLaXROYW1lZEZsb3cqLCBpbnQ+IG1fbmFtZWRGbG93
czsKIH07CiAKLUNoYW5nZVJlZ2lvbk92ZXJzZXRUYXNrOjpDaGFuZ2VSZWdpb25PdmVyc2V0VGFz
ayhJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQpCitDaGFuZ2VSZWdpb25PdmVyc2V0VGFzazo6
Q2hhbmdlUmVnaW9uT3ZlcnNldFRhc2soQ1NTQWdlbnQqIGNzc0FnZW50KQogICAgIDogbV9jc3NB
Z2VudChjc3NBZ2VudCkKICAgICAsIG1fdGltZXIoKnRoaXMsICZDaGFuZ2VSZWdpb25PdmVyc2V0
VGFzazo6dGltZXJGaXJlZCkKIHsKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIENoYW5nZVJlZ2lv
bk92ZXJzZXRUYXNrOjp0aW1lckZpcmVkKCkKICAgICBtX25hbWVkRmxvd3MuY2xlYXIoKTsKIH0K
IAotY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24gOiBwdWJsaWMgSW5z
cGVjdG9ySGlzdG9yeTo6QWN0aW9uIHsKK2NsYXNzIENTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9u
IDogcHVibGljIEluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3R5bGVTaGVldEFjdGlvbik7CiBwdWJsaWM6CiAgICAgU3R5bGVTaGVldEFjdGlvbihj
b25zdCBTdHJpbmcmIG5hbWUsIEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCkBAIC0x
NjIsMTEgKzE2MiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+IG1fc3R5bGVTaGVldDsKIH07CiAKLWNsYXNzIEluc3BlY3RvckNTU0FnZW50OjpTZXRTdHls
ZVNoZWV0VGV4dEFjdGlvbiBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVT
aGVldEFjdGlvbiB7CitjbGFzcyBDU1NBZ2VudDo6U2V0U3R5bGVTaGVldFRleHRBY3Rpb24gZmlu
YWwgOiBwdWJsaWMgQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24gewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFNldFN0eWxlU2hlZXRUZXh0QWN0aW9uKTsKIHB1YmxpYzoKICAgICBTZXRTdHls
ZVNoZWV0VGV4dEFjdGlvbihJbnNwZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBT
dHJpbmcmIHRleHQpCi0gICAgICAgIDogSW5zcGVjdG9yQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rp
b24oQVNDSUlMaXRlcmFsKCJTZXRTdHlsZVNoZWV0VGV4dCIpLCBzdHlsZVNoZWV0KQorICAgICAg
ICA6IENTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKEFTQ0lJTGl0ZXJhbCgiU2V0U3R5bGVTaGVl
dFRleHQiKSwgc3R5bGVTaGVldCkKICAgICAgICAgLCBtX3RleHQodGV4dCkKICAgICB7CiAgICAg
fQpAQCAtMjE0LDExICsyMTQsMTEgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9vbGRUZXh0Owog
fTsKIAotY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ6OlNldFN0eWxlVGV4dEFjdGlvbiBmaW5hbCA6
IHB1YmxpYyBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbiB7CitjbGFzcyBDU1NB
Z2VudDo6U2V0U3R5bGVUZXh0QWN0aW9uIGZpbmFsIDogcHVibGljIENTU0FnZW50OjpTdHlsZVNo
ZWV0QWN0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZXRTdHlsZVRleHRBY3Rpb24p
OwogcHVibGljOgogICAgIFNldFN0eWxlVGV4dEFjdGlvbihJbnNwZWN0b3JTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0LCBjb25zdCBJbnNwZWN0b3JDU1NJZCYgY3NzSWQsIGNvbnN0IFN0cmluZyYgdGV4
dCkKLSAgICAgICAgOiBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbihBU0NJSUxp
dGVyYWwoIlNldFN0eWxlVGV4dCIpLCBzdHlsZVNoZWV0KQorICAgICAgICA6IENTU0FnZW50OjpT
dHlsZVNoZWV0QWN0aW9uKEFTQ0lJTGl0ZXJhbCgiU2V0U3R5bGVUZXh0IiksIHN0eWxlU2hlZXQp
CiAgICAgICAgICwgbV9jc3NJZChjc3NJZCkKICAgICAgICAgLCBtX3RleHQodGV4dCkKICAgICB7
CkBAIC0yNTksMTEgKzI1OSwxMSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX29sZFRleHQ7CiB9
OwogCi1jbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDo6U2V0UnVsZVNlbGVjdG9yQWN0aW9uIGZpbmFs
IDogcHVibGljIEluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uIHsKK2NsYXNzIENT
U0FnZW50OjpTZXRSdWxlU2VsZWN0b3JBY3Rpb24gZmluYWwgOiBwdWJsaWMgQ1NTQWdlbnQ6OlN0
eWxlU2hlZXRBY3Rpb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNldFJ1bGVTZWxlY3Rv
ckFjdGlvbik7CiBwdWJsaWM6CiAgICAgU2V0UnVsZVNlbGVjdG9yQWN0aW9uKEluc3BlY3RvclN0
eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IEluc3BlY3RvckNTU0lkJiBjc3NJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvcikKLSAgICAgICAgOiBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVl
dEFjdGlvbihBU0NJSUxpdGVyYWwoIlNldFJ1bGVTZWxlY3RvciIpLCBzdHlsZVNoZWV0KQorICAg
ICAgICA6IENTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKEFTQ0lJTGl0ZXJhbCgiU2V0UnVsZVNl
bGVjdG9yIiksIHN0eWxlU2hlZXQpCiAgICAgICAgICwgbV9jc3NJZChjc3NJZCkKICAgICAgICAg
LCBtX3NlbGVjdG9yKHNlbGVjdG9yKQogICAgIHsKQEAgLTI5MywxMSArMjkzLDExIEBAIHByaXZh
dGU6CiAgICAgU3RyaW5nIG1fb2xkU2VsZWN0b3I7CiB9OwogCi1jbGFzcyBJbnNwZWN0b3JDU1NB
Z2VudDo6QWRkUnVsZUFjdGlvbiBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5
bGVTaGVldEFjdGlvbiB7CitjbGFzcyBDU1NBZ2VudDo6QWRkUnVsZUFjdGlvbiBmaW5hbCA6IHB1
YmxpYyBDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQWRkUnVsZUFjdGlvbik7CiBwdWJsaWM6CiAgICAgQWRkUnVsZUFjdGlvbihJbnNwZWN0b3JT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQotICAgICAgICA6
IEluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKEFTQ0lJTGl0ZXJhbCgiQWRkUnVs
ZSIpLCBzdHlsZVNoZWV0KQorICAgICAgICA6IENTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKEFT
Q0lJTGl0ZXJhbCgiQWRkUnVsZSIpLCBzdHlsZVNoZWV0KQogICAgICAgICAsIG1fc2VsZWN0b3Io
c2VsZWN0b3IpCiAgICAgewogICAgIH0KQEAgLTMzMCwzNCArMzMwLDM0IEBAIHByaXZhdGU6CiB9
OwogCiAvLyBzdGF0aWMKLUNTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5
bGVSdWxlKENTU1J1bGUmIHJ1bGUpCitDU1NTdHlsZVJ1bGUqIENTU0FnZW50Ojphc0NTU1N0eWxl
UnVsZShDU1NSdWxlJiBydWxlKQogewogICAgIGlmICghaXM8Q1NTU3R5bGVSdWxlPihydWxlKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1N0eWxlUnVs
ZT4oJnJ1bGUpOwogfQogCi1JbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yRE9NQWdlbnQq
IGRvbUFnZW50KQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiQ1NTIiks
IGluc3RydW1lbnRpbmdBZ2VudHMpCitDU1NBZ2VudDo6Q1NTQWdlbnQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgRE9NQWdlbnQqIGRvbUFnZW50KQorICAgIDogV2Vi
QWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiQ1NTIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAg
LCBtX2RvbUFnZW50KGRvbUFnZW50KQogICAgICwgbV9sYXN0U3R5bGVTaGVldElkKDEpCiB7CiAg
ICAgbV9kb21BZ2VudC0+c2V0RE9NTGlzdGVuZXIodGhpcyk7CiB9CiAKLUluc3BlY3RvckNTU0Fn
ZW50Ojp+SW5zcGVjdG9yQ1NTQWdlbnQoKQorQ1NTQWdlbnQ6On5DU1NBZ2VudCgpCiB7CiAgICAg
QVNTRVJUKCFtX2RvbUFnZW50KTsKICAgICByZXNldCgpOwogfQogCi12b2lkIEluc3BlY3RvckNT
U0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENo
YW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIpCit2b2lkIENTU0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0Zyb250ZW5kRGlzcGF0Y2hlcj4oZnJv
bnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gQ1NTQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbikKK3ZvaWQgQ1NTQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlciA9IG51bGxwdHI7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwpAQCAtMzY1
LDEzICszNjUsMTMgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc28KICAgICByZXNldE5vblBlcnNp
c3RlbnREYXRhKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpc2NhcmRBZ2VudCgp
Cit2b2lkIENTU0FnZW50OjpkaXNjYXJkQWdlbnQoKQogewogICAgIG1fZG9tQWdlbnQtPnNldERP
TUxpc3RlbmVyKG51bGxwdHIpOwogICAgIG1fZG9tQWdlbnQgPSBudWxscHRyOwogfQogCi12b2lk
IEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCit2b2lkIENTU0FnZW50OjpyZXNldCgpCiB7CiAg
ICAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jbGVhcigpOwogICAgIG1fY3NzU3R5bGVTaGVl
dFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jbGVhcigpOwpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0KCkKICAgICByZXNldE5vblBlcnNpc3RlbnREYXRhKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0Tm9uUGVyc2lzdGVudERhdGEoKQor
dm9pZCBDU1NBZ2VudDo6cmVzZXROb25QZXJzaXN0ZW50RGF0YSgpCiB7CiAgICAgbV9uYW1lZEZs
b3dDb2xsZWN0aW9uc1JlcXVlc3RlZC5jbGVhcigpOwogICAgIGlmIChtX2NoYW5nZVJlZ2lvbk92
ZXJzZXRUYXNrKQpAQCAtMzg4LDIzICszODgsMjMgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
cmVzZXROb25QZXJzaXN0ZW50RGF0YSgpCiAgICAgcmVzZXRQc2V1ZG9TdGF0ZXMoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgQ1NTQWdl
bnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5z
ZXRJbnNwZWN0b3JDU1NBZ2VudCh0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNl
dENTU0FnZW50KHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaXNhYmxlKEVy
cm9yU3RyaW5nJikKK3ZvaWQgQ1NTQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogewotICAg
IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQ1NTQWdlbnQobnVsbHB0cik7Cisg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRDU1NBZ2VudChudWxscHRyKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKQordm9pZCBDU1NB
Z2VudDo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKQogewogICAgIGlmIChtX2Zyb250ZW5kRGlz
cGF0Y2hlcikKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm1lZGlhUXVlcnlSZXN1bHRD
aGFuZ2VkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0ZU5hbWVkRmxv
dyhEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93KQordm9pZCBD
U1NBZ2VudDo6ZGlkQ3JlYXRlTmFtZWRGbG93KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFt
ZWRGbG93JiBuYW1lZEZsb3cpCiB7CiAgICAgaW50IGRvY3VtZW50Tm9kZUlkID0gZG9jdW1lbnRO
b2RlV2l0aFJlcXVlc3RlZEZsb3dzSWQoJmRvY3VtZW50KTsKICAgICBpZiAoIWRvY3VtZW50Tm9k
ZUlkKQpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0
ZU5hbWVkRmxvdyhEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYKICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+bmFtZWRGbG93Q3JlYXRlZChidWlsZE9iamVjdEZvck5hbWVkRmxv
dyh1bnVzZWQsICZuYW1lZEZsb3csIGRvY3VtZW50Tm9kZUlkKSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OndpbGxSZW1vdmVOYW1lZEZsb3coRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJL
aXROYW1lZEZsb3cmIG5hbWVkRmxvdykKK3ZvaWQgQ1NTQWdlbnQ6OndpbGxSZW1vdmVOYW1lZEZs
b3coRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJLaXROYW1lZEZsb3cmIG5hbWVkRmxvdykKIHsKICAg
ICBpbnQgZG9jdW1lbnROb2RlSWQgPSBkb2N1bWVudE5vZGVXaXRoUmVxdWVzdGVkRmxvd3NJZCgm
ZG9jdW1lbnQpOwogICAgIGlmICghZG9jdW1lbnROb2RlSWQpCkBAIC00MjYsNyArNDI2LDcgQEAg
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbFJlbW92ZU5hbWVkRmxvdyhEb2N1bWVudCYgZG9j
dW1lbnQsIFdlYktpdE5hbWVkRmxvdyYKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZWRG
bG93UmVtb3ZlZChkb2N1bWVudE5vZGVJZCwgbmFtZWRGbG93Lm5hbWUoKS5zdHJpbmcoKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENoYW5nZVJlZ2lvbk92ZXJzZXQoRG9jdW1l
bnQmIGRvY3VtZW50LCBXZWJLaXROYW1lZEZsb3cmIG5hbWVkRmxvdykKK3ZvaWQgQ1NTQWdlbnQ6
OmRpZENoYW5nZVJlZ2lvbk92ZXJzZXQoRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJLaXROYW1lZEZs
b3cmIG5hbWVkRmxvdykKIHsKICAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBkb2N1bWVudE5vZGVX
aXRoUmVxdWVzdGVkRmxvd3NJZCgmZG9jdW1lbnQpOwogICAgIGlmICghZG9jdW1lbnROb2RlSWQp
CkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkQ2hhbmdlUmVn
aW9uT3ZlcnNldChEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmwKICAgICBtX2NoYW5n
ZVJlZ2lvbk92ZXJzZXRUYXNrLT5zY2hlZHVsZUZvcigmbmFtZWRGbG93LCBkb2N1bWVudE5vZGVJ
ZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlZ2lvbk92ZXJzZXRDaGFuZ2VkKFdl
YktpdE5hbWVkRmxvdyogbmFtZWRGbG93LCBpbnQgZG9jdW1lbnROb2RlSWQpCit2b2lkIENTU0Fn
ZW50OjpyZWdpb25PdmVyc2V0Q2hhbmdlZChXZWJLaXROYW1lZEZsb3cqIG5hbWVkRmxvdywgaW50
IGRvY3VtZW50Tm9kZUlkKQogewogICAgIGlmIChuYW1lZEZsb3ctPmZsb3dTdGF0ZSgpID09IFdl
YktpdE5hbWVkRmxvdzo6Rmxvd1N0YXRlTnVsbCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ4LDcg
KzQ0OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlZ2lvbk92ZXJzZXRDaGFuZ2VkKFdl
YktpdE5hbWVkRmxvdyogbmFtZWRGbG93LCBpbnQgZG9jCiAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnJlZ2lvbk92ZXJzZXRDaGFuZ2VkKGJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KHVudXNlZCwg
bmFtZWRGbG93LCBkb2N1bWVudE5vZGVJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50
OjpkaWRSZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwg
V2ViS2l0TmFtZWRGbG93JiBuYW1lZEZsb3csIE5vZGUmIGNvbnRlbnRFbGVtZW50LCBOb2RlKiBu
ZXh0Q29udGVudEVsZW1lbnQpCit2b2lkIENTU0FnZW50OjpkaWRSZWdpc3Rlck5hbWVkRmxvd0Nv
bnRlbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JiBuYW1lZEZs
b3csIE5vZGUmIGNvbnRlbnRFbGVtZW50LCBOb2RlKiBuZXh0Q29udGVudEVsZW1lbnQpCiB7CiAg
ICAgaW50IGRvY3VtZW50Tm9kZUlkID0gZG9jdW1lbnROb2RlV2l0aFJlcXVlc3RlZEZsb3dzSWQo
JmRvY3VtZW50KTsKICAgICBpZiAoIWRvY3VtZW50Tm9kZUlkKQpAQCAtNDYwLDcgKzQ2MCw3IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50LCBXCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlZ2lz
dGVyZWROYW1lZEZsb3dDb250ZW50RWxlbWVudChkb2N1bWVudE5vZGVJZCwgbmFtZWRGbG93Lm5h
bWUoKS5zdHJpbmcoKSwgY29udGVudEVsZW1lbnROb2RlSWQsIG5leHRDb250ZW50RWxlbWVudE5v
ZGVJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFVucmVnaXN0ZXJOYW1lZEZs
b3dDb250ZW50RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFt
ZWRGbG93LCBOb2RlJiBjb250ZW50RWxlbWVudCkKK3ZvaWQgQ1NTQWdlbnQ6OmRpZFVucmVnaXN0
ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVk
RmxvdyYgbmFtZWRGbG93LCBOb2RlJiBjb250ZW50RWxlbWVudCkKIHsKICAgICBpbnQgZG9jdW1l
bnROb2RlSWQgPSBkb2N1bWVudE5vZGVXaXRoUmVxdWVzdGVkRmxvd3NJZCgmZG9jdW1lbnQpOwog
ICAgIGlmICghZG9jdW1lbnROb2RlSWQpCkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZGlkVW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KERvY3VtZW50
JiBkb2N1bWVudCwKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dW5yZWdpc3RlcmVkTmFtZWRG
bG93Q29udGVudEVsZW1lbnQoZG9jdW1lbnROb2RlSWQsIG5hbWVkRmxvdy5uYW1lKCkuc3RyaW5n
KCksIGNvbnRlbnRFbGVtZW50Tm9kZUlkKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6
Zm9yY2VQc2V1ZG9TdGF0ZShFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NUeXBlIHBzZXVkb0NsYXNzVHlwZSkKK2Jvb2wgQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUo
RWxlbWVudCYgZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1ZG9DbGFz
c1R5cGUpCiB7CiAgICAgaWYgKG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUwMyw3ICs1MDMsNyBAQCBib29sIEluc3BlY3Rv
ckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQmIGVsZW1lbnQsIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hl
ZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25z
dCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBib29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpS
dWxlTWF0Y2g+PiYgbWF0Y2hlZENTU1J1bGVzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiYgcHNldWRv
SWRNYXRjaGVzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpCit2
b2lkIENTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBub2RlSWQsIGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wq
IGluY2x1ZGVJbmhlcml0ZWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBz
ZXVkb0lkTWF0Y2hlcz4+JiBwc2V1ZG9JZE1hdGNoZXMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+
PiYgaW5oZXJpdGVkRW50cmllcykKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZv
cklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTU1NSw3ICs1
NTUsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBubwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiYgaW5saW5lU3R5bGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiYgYXR0cmlidXRlc1N0eWxlKQordm9pZCBDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9k
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgaW5saW5lU3R5bGUsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgYXR0cmlidXRlc1N0eWxlKQogewogICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQpAQCAtNTcwLDcgKzU3MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kCiAg
ICAgYXR0cmlidXRlc1N0eWxlID0gYXR0cmlidXRlcyA/IGF0dHJpYnV0ZXMucmVsZWFzZSgpIDog
bnVsbHB0cjsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZv
ck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRl
ZFN0eWxlUHJvcGVydHk+PiYgc3R5bGUpCit2b2lkIENTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxl
Rm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1
dGVkU3R5bGVQcm9wZXJ0eT4+JiBzdHlsZSkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxl
bWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTU4
MSw3ICs1ODEsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9y
Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBubwogICAgIHN0eWxlID0gaW5zcGVj
dG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVT
aGVldEhlYWRlcj4+JiBzdHlsZUluZm9zKQordm9pZCBDU1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVl
dHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPj4mIHN0eWxlSW5mb3MpCiB7
CiAgICAgc3R5bGVJbmZvcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogICAgIFZlY3Rv
cjxEb2N1bWVudCo+IGRvY3VtZW50cyA9IG1fZG9tQWdlbnQtPmRvY3VtZW50cygpOwpAQCAtNTk1
LDcgKzU5NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jCiAgICAgfQogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlU2hlZXRCb2R5PiYgc3R5bGVTaGVldE9iamVjdCkKK3ZvaWQgQ1NTQWdlbnQ6
OmdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEJvZHk+JiBzdHlsZVNoZWV0T2JqZWN0KQogewogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGlu
c3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0
eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQpAQCAtNjA0LDcgKzYw
NCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0CiAgICAgc3R5bGVTaGVldE9iamVjdCA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOwogfQogCi12b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCkKK3ZvaWQg
Q1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0cmluZyogcmVzdWx0KQogewogICAgIEluc3BlY3Rv
clN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQo
ZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0
KQpAQCAtNjEzLDcgKzYxMyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hl
ZXRUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgaW5zcGVj
dG9yU3R5bGVTaGVldC0+Z2V0VGV4dChyZXN1bHQpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpCit2b2lkIENTU0FnZW50Ojpz
ZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgSW5zcGVjdG9yU3R5bGVT
aGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0
cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCkBAIC02
MjEsMTAgKzYyMSwxMCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgbV9kb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKHN0ZDo6bWFr
ZV91bmlxdWU8U2V0U3R5bGVTaGVldFRleHRBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIHRl
eHQpLCBlYyk7Ci0gICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0
cmluZyhlYyk7CisgICAgZXJyb3JTdHJpbmcgPSBET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZnVsbFN0eWxlSWQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+JiByZXN1bHQpCit2b2lkIENTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGZ1bGxTdHlsZUlk
LCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlPiYgcmVzdWx0KQogewogICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0
eWxlSWQuY29weVJlZigpKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAg
LTYzNywxMCArNjM3LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwCiAgICAgYm9vbCBzdWNj
ZXNzID0gbV9kb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKHN0ZDo6bWFrZV91bmlxdWU8U2V0
U3R5bGVUZXh0QWN0aW9uPihpbnNwZWN0b3JTdHlsZVNoZWV0LCBjb21wb3VuZElkLCB0ZXh0KSwg
ZWMpOwogICAgIGlmIChzdWNjZXNzKQogICAgICAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNo
ZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQo
Y29tcG91bmRJZCkpOwotICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcoZWMpOworICAgIGVycm9yU3RyaW5nID0gRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmco
ZWMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGZ1bGxS
dWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCit2b2lkIENTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3Io
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29t
cG91bmRJZChmdWxsUnVsZUlkLmNvcHlSZWYoKSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlz
RW1wdHkoKSk7CkBAIC02NTQsMTAgKzY1NCwxMCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpz
ZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SQog
CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQt
PmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQoY29tcG91
bmRJZCksIG51bGxwdHIpOwotICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRv
RXJyb3JTdHJpbmcoZWMpOworICAgIGVycm9yU3RyaW5nID0gRE9NQWdlbnQ6OnRvRXJyb3JTdHJp
bmcoZWMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgaW50IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQp
Cit2b2lkIENTU0FnZW50OjphZGRSdWxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
aW50IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCiB7CiAgICAgTm9kZSogbm9kZSA9
IG1fZG9tQWdlbnQtPmFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIGNvbnRleHROb2RlSWQpOwogICAg
IGlmICghbm9kZSkKQEAgLTY3NCw3ICs2NzQsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojph
ZGRSdWxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50IGNvbnRleHROb2RlSQog
ICAgIEFkZFJ1bGVBY3Rpb24qIHJhd0FjdGlvbiA9IGFjdGlvbi5nZXQoKTsKICAgICBib29sIHN1
Y2Nlc3MgPSBtX2RvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oV1RGOjptb3ZlKGFjdGlvbiks
IGVjKTsKICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0
b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CisgICAgICAgIGVycm9yU3RyaW5nID0gRE9N
QWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02
ODMsNyArNjgzLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCBjb250ZXh0Tm9kZUkKICAgICByZXN1bHQgPSBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUocnVsZSwgbnVsbHB0cik7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JT
dHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgY3NzUHJvcGVydGllcykKK3ZvaWQgQ1NTQWdl
bnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0
eUluZm8+PiYgY3NzUHJvcGVydGllcykKIHsKICAgICBhdXRvIHByb3BlcnRpZXMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
SW5mbz46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50IGkgPSBmaXJzdENTU1Byb3BlcnR5OyBpIDw9
IGxhc3RDU1NQcm9wZXJ0eTsgKytpKSB7CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0
cjxJbnNwZWN0b3IKICAgICBjc3NQcm9wZXJ0aWVzID0gV1RGOjptb3ZlKHByb3BlcnRpZXMpOwog
fQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYm
IGZvcmNlZFBzZXVkb0NsYXNzZXMpCit2b2lkIENTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiYmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9
IG1fZG9tQWdlbnQtPmFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZv
cmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjCiAg
ICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUlt
bWVkaWF0ZWx5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TmFtZWRGbG93Q29s
bGVjdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBkb2N1bWVudE5vZGVJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
TmFtZWRGbG93Pj4mIHJlc3VsdCkKK3ZvaWQgQ1NTQWdlbnQ6OmdldE5hbWVkRmxvd0NvbGxlY3Rp
b24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVk
Rmxvdz4+JiByZXN1bHQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9kb21BZ2VudC0+
YXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAgICBpZiAoIWRv
Y3VtZW50KQpAQCAtNzQ1LDcgKzc0NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE5h
bWVkRmxvd0NvbGxlY3Rpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jCiAgICAg
cmVzdWx0ID0gV1RGOjptb3ZlKG5hbWVkRmxvd3MpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQo
RWxlbWVudCogZWxlbWVudCkKK0luc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogQ1NT
QWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50KQogewogICAgIE5v
ZGVUb0luc3BlY3RvclN0eWxlU2hlZXQ6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlVG9JbnNwZWN0b3JT
dHlsZVNoZWV0LmZpbmQoZWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5zcGVjdG9y
U3R5bGVTaGVldC5lbmQoKSkgewpAQCAtNzYzLDcgKzc2Myw3IEBAIEluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVl
dChFbGVtCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAotRWxlbWVudCogSW5zcGVj
dG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQpCitFbGVtZW50KiBDU1NBZ2VudDo6ZWxlbWVudEZvcklkKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbV9kb21BZ2VudC0+bm9k
ZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKSB7CkBAIC03NzcsNyArNzc3LDcgQEAgRWxl
bWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwog
fQogCi1pbnQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRvY3VtZW50Tm9kZVdpdGhSZXF1ZXN0ZWRGbG93
c0lkKERvY3VtZW50KiBkb2N1bWVudCkKK2ludCBDU1NBZ2VudDo6ZG9jdW1lbnROb2RlV2l0aFJl
cXVlc3RlZEZsb3dzSWQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIGludCBkb2N1bWVudE5v
ZGVJZCA9IG1fZG9tQWdlbnQtPmJvdW5kTm9kZUlkKGRvY3VtZW50KTsKICAgICBpZiAoIWRvY3Vt
ZW50Tm9kZUlkIHx8ICFtX25hbWVkRmxvd0NvbGxlY3Rpb25zUmVxdWVzdGVkLmNvbnRhaW5zKGRv
Y3VtZW50Tm9kZUlkKSkKQEAgLTc4Niw3ICs3ODYsNyBAQCBpbnQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmRvY3VtZW50Tm9kZVdpdGhSZXF1ZXN0ZWRGbG93c0lkKERvY3VtZW50KiBkb2N1bWVudCkKICAg
ICByZXR1cm4gZG9jdW1lbnROb2RlSWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNv
bGxlY3RTdHlsZVNoZWV0cyhDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFk
ZXI+KiByZXN1bHQpCit2b2lkIENTU0FnZW50Ojpjb2xsZWN0U3R5bGVTaGVldHMoQ1NTU3R5bGVT
aGVldCogc3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiogcmVzdWx0KQogewogICAgIEluc3Bl
Y3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBiaW5kU3R5bGVTaGVldChzdHls
ZVNoZWV0KTsKICAgICByZXN1bHQtPmFkZEl0ZW0oaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKTsKQEAgLTc5OSwyMCArNzk5LDIwIEBAIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHlsZVNoZWV0KiBzdHlsZVNo
ZWV0LCBJbnNwZWN0b3I6CiAgICAgfQogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0
b3JDU1NBZ2VudDo6YmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK0lu
c3BlY3RvclN0eWxlU2hlZXQqIENTU0FnZW50OjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBpbnNwZWN0
b3JTdHlsZVNoZWV0ID0gbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmdldChz
dHlsZVNoZWV0KTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpIHsKICAgICAgICAgU3Ry
aW5nIGlkID0gU3RyaW5nOjpudW1iZXIobV9sYXN0U3R5bGVTaGVldElkKyspOwogICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCk7Ci0gICAgICAg
IGluc3BlY3RvclN0eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUobV9kb21B
Z2VudC0+cGFnZUFnZW50KCksIGlkLCBzdHlsZVNoZWV0LCBkZXRlY3RPcmlnaW4oc3R5bGVTaGVl
dCwgZG9jdW1lbnQpLCBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJpbmcoZG9jdW1l
bnQpLCB0aGlzKTsKKyAgICAgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmNyZWF0ZShtX2RvbUFnZW50LT5wYWdlQWdlbnQoKSwgaWQsIHN0eWxlU2hlZXQsIGRl
dGVjdE9yaWdpbihzdHlsZVNoZWV0LCBkb2N1bWVudCksIERPTUFnZW50Ojpkb2N1bWVudFVSTFN0
cmluZyhkb2N1bWVudCksIHRoaXMpOwogICAgICAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0
LnNldChpZCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CiAgICAgICAgIG1fY3NzU3R5bGVTaGVldFRv
SW5zcGVjdG9yU3R5bGVTaGVldC5zZXQoc3R5bGVTaGVldCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7
CiAgICAgfQogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpOwogfQogCi1JbnNw
ZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6dmlhSW5zcGVjdG9yU3R5bGVTaGVl
dChEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpCitJbnNwZWN0b3JTdHls
ZVNoZWV0KiBDU1NBZ2VudDo6dmlhSW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCogZG9jdW1l
bnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpCiB7CiAgICAgaWYgKCFkb2N1bWVudCkgewogICAgICAg
ICBBU1NFUlQoIWNyZWF0ZUlmQWJzZW50KTsKQEAgLTg1NiwxNCArODU2LDE0IEBAIEluc3BlY3Rv
clN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojp2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KERv
Y3VtZW50KiBkb2N1bWVuCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgU3RyaW5nIGlk
ID0gU3RyaW5nOjpudW1iZXIobV9sYXN0U3R5bGVTaGVldElkKyspOwotICAgIGluc3BlY3RvclN0
eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUobV9kb21BZ2VudC0+cGFnZUFn
ZW50KCksIGlkLCBjc3NTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46Okluc3BlY3RvciwgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3Ry
aW5nKGRvY3VtZW50KSwgdGhpcyk7CisgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmNyZWF0ZShtX2RvbUFnZW50LT5wYWdlQWdlbnQoKSwgaWQsIGNzc1N0eWxl
U2hlZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVj
dG9yLCBET01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJpbmcoZG9jdW1lbnQpLCB0aGlzKTsKICAgICBt
X2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChpZCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CiAg
ICAgbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChjc3NTdHlsZVNoZWV0
LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKICAgICBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LnNldChkb2N1bWVudCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CiAgICAgcmV0dXJuIGluc3Bl
Y3RvclN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKLUluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3Rv
ckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkKK0luc3BlY3RvclN0eWxlU2hlZXQqIENTU0Fn
ZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkKIHsKICAgICBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDo6
aXRlcmF0b3IgaXQgPSBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmZpbmQoc3R5bGVTaGVldElk
KTsKICAgICBpZiAoaXQgPT0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbmQoKSkgewpAQCAt
ODczLDcgKzg3Myw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojph
c3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgcmV0dXJuIGl0LT52
YWx1ZS5nZXQoKTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0
eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQorSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIENTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVl
dCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQogewogICAgIGF1dG8g
b3JpZ2luID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpSZWd1
bGFyOwogICAgIGlmIChwYWdlU3R5bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9k
ZSgpICYmIHBhZ2VTdHlsZVNoZWV0LT5ocmVmKCkuaXNFbXB0eSgpKQpAQCAtODg4LDcgKzg4OCw3
IEBAIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBJbnNwZWN0b3JD
U1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0CiAgICAgcmV0dXJuIG9yaWdpbjsKIH0KIAotUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yUnVsZShTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgRWxlbWVudCogZWxlbWVudCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+IENTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoU3R5bGVSdWxl
KiBzdHlsZVJ1bGUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQqIGVsZW1l
bnQpCiB7CiAgICAgaWYgKCFzdHlsZVJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
OTAyLDcgKzkwMiw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+
IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoCiAgICAgcmV0dXJuIGluc3Bl
Y3RvclN0eWxlU2hlZXQgPyBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUo
Y3Nzb21XcmFwcGVyLCBlbGVtZW50KSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZv
clJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4gQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1
bGUpCiB7CiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkxMiw3
ICs5MTIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKAogICAgIHJldHVybiBpbnNwZWN0b3JT
dHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUs
IG51bGxwdHIpIDogbnVsbHB0cjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVzLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBFbGVt
ZW50KiBlbGVtZW50KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRj
aGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVz
LCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBFbGVtZW50KiBlbGVtZW50KQogewogICAg
IGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKIApAQCAtOTQ1LDcgKzk0NSw3IEBAIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+IEluc3BlY3RvCiAgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQog
Ci1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKEVsZW1lbnQqIGVsZW1lbnQpCitS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gQ1NTQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KGVsZW1lbnQpOwogICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpKQpAQCAtOTYz
LDcgKzk2Myw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyCiAgICAgcmV0dXJuIGluc3BlY3Rv
clN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUmVnaW9ucyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IFJlZlB0cjxOb2RlTGlzdD4mJiByZWdpb25MaXN0LCBpbnQgZG9jdW1lbnROb2RlSWQpCitSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpS
ZWdpb24+PiBDU1NBZ2VudDo6YnVpbGRBcnJheUZvclJlZ2lvbnMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8Tm9kZUxpc3Q+JiYgcmVnaW9uTGlzdCwgaW50IGRvY3VtZW50Tm9kZUlk
KQogewogICAgIGF1dG8gcmVnaW9ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPjo6Y3JlYXRlKCk7CiAKQEAgLTk5OSw3ICs5OTks
NyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpSZWdpb24+PiBJbnNwZWN0b3JDUwogICAgIHJldHVybiBXVEY6Om1vdmUocmVnaW9u
cyk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgV2ViS2l0TmFtZWRGbG93KiB3ZWJraXROYW1lZEZsb3csIGludCBkb2N1bWVudE5v
ZGVJZCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gQ1NTQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgV2Vi
S2l0TmFtZWRGbG93KiB3ZWJraXROYW1lZEZsb3csIGludCBkb2N1bWVudE5vZGVJZCkKIHsKICAg
ICBSZWZQdHI8Tm9kZUxpc3Q+IGNvbnRlbnRMaXN0ID0gd2Via2l0TmFtZWRGbG93LT5nZXRDb250
ZW50KCk7CiAgICAgYXV0byBjb250ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50
Pjo6Y3JlYXRlKCk7CkBAIC0xMDE4LDEzICsxMDE4LDEzIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
TmFtCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRp
ZFJlbW92ZURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgQ1NTQWdlbnQ6OmRpZFJl
bW92ZURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBpZiAoZG9jdW1lbnQpCiAg
ICAgICAgIG1fZG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGRvY3VtZW50KTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2Rl
KQordm9pZCBDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogewogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA0MSw3ICsxMDQxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAgIG1fbm9kZVRv
SW5zcGVjdG9yU3R5bGVTaGVldC5yZW1vdmUobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgQ1NTQWdlbnQ6
OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpZiAoIWVsZW1lbnQp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwNTMsMTMgKzEwNTMsMTMgQEAgdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIGl0LT52YWx1
ZS0+ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQor
dm9pZCBDU1NBZ2VudDo6c3R5bGVTaGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5
bGVTaGVldCkKIHsKICAgICBpZiAobV9mcm9udGVuZERpc3BhdGNoZXIpCiAgICAgICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5zdHlsZVNoZWV0Q2hhbmdlZChzdHlsZVNoZWV0LT5pZCgpKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXRQc2V1ZG9TdGF0ZXMoKQordm9pZCBDU1NB
Z2VudDo6cmVzZXRQc2V1ZG9TdGF0ZXMoKQogewogICAgIEhhc2hTZXQ8RG9jdW1lbnQqPiBkb2N1
bWVudHNUb0NoYW5nZTsKICAgICBmb3IgKE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU6Oml0ZXJh
dG9yIGl0ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmJlZ2luKCksIGVuZCA9IG1fbm9k
ZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IGU0YTYwMzc5NTRj
MWEyNzBjN2JjOGQ4NTVhZmNiZWZlNzBmZmI3MTAuLjUxNDZiOGQzYWFlMmQzNTBiZGQ2NTBjNTVm
Njg4ZjhmY2QzZGExM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oCkBAIC00NCw2ICs0NCw3IEBAIGNsYXNzIENTU0Zyb250ZW5kRGlzcGF0Y2hlcjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDaGFuZ2VSZWdpb25PdmVyc2V0VGFzazsK
IGNsYXNzIENTU1J1bGU7CiBjbGFzcyBDU1NSdWxlTGlzdDsKIGNsYXNzIENTU1N0eWxlRGVjbGFy
YXRpb247CkBAIC01OSwxNCArNjAsMTMgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIE5vZGVMaXN0Owog
Y2xhc3MgU3R5bGVSZXNvbHZlcjsKIGNsYXNzIFN0eWxlUnVsZTsKLWNsYXNzIENoYW5nZVJlZ2lv
bk92ZXJzZXRUYXNrOwogCi1jbGFzcyBJbnNwZWN0b3JDU1NBZ2VudCBmaW5hbAotICAgIDogcHVi
bGljIEluc3BlY3RvckFnZW50QmFzZQotICAgICwgcHVibGljIEluc3BlY3RvckRPTUFnZW50OjpE
T01MaXN0ZW5lcgorY2xhc3MgQ1NTQWdlbnQgZmluYWwKKyAgICA6IHB1YmxpYyBXZWJBZ2VudEJh
c2UKKyAgICAsIHB1YmxpYyBET01BZ2VudDo6RE9NTGlzdGVuZXIKICAgICAsIHB1YmxpYyBJbnNw
ZWN0b3I6OkNTU0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcgogICAgICwgcHVibGljIEluc3BlY3Rv
clN0eWxlU2hlZXQ6Okxpc3RlbmVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0
b3JDU1NBZ2VudCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTQWdlbnQpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGNsYXNzIElubGluZVN0eWxlT3Zl
cnJpZGVTY29wZSB7CkBAIC04Niw4ICs4Niw4IEBAIHB1YmxpYzoKICAgICAgICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5KiBtX2NvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICB9OwogCi0gICAgSW5z
cGVjdG9yQ1NTQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvckRPTUFnZW50Kik7
Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yQ1NTQWdlbnQoKTsKKyAgICBDU1NBZ2VudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgRE9NQWdlbnQqKTsKKyAgICB2aXJ0dWFsIH5DU1NBZ2VudCgpOwogCiAg
ICAgc3RhdGljIENTU1N0eWxlUnVsZSogYXNDU1NTdHlsZVJ1bGUoQ1NTUnVsZSYpOwogCkBAIC0x
NTMsMTkgKzE1MywxOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4+IGJ1aWxkQXJyYXlGb3JS
ZWdpb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPE5vZGVMaXN0PiYmLCBpbnQgZG9jdW1lbnROb2Rl
SWQpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gYnVp
bGRPYmplY3RGb3JOYW1lZEZsb3coRXJyb3JTdHJpbmcmLCBXZWJLaXROYW1lZEZsb3cqLCBpbnQg
ZG9jdW1lbnROb2RlSWQpOwogCi0gICAgLy8gSW5zcGVjdG9yRE9NQWdlbnQ6OkRPTUxpc3RlbmVy
IGltcGxlbWVudGF0aW9uCisgICAgLy8gRE9NQWdlbnQ6OkRPTUxpc3RlbmVyIGltcGxlbWVudGF0
aW9uCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURvY3VtZW50KERvY3VtZW50Kikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqKSBvdmVycmlkZTsKIAot
ICAgIC8vIEluc3BlY3RvckNTU0FnZW50OjpMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbgorICAgIC8v
IENTU0FnZW50OjpMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgdm9pZCBzdHls
ZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0Kikgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IHJlc2V0UHNldWRvU3RhdGVzKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpD
U1NGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OkNTU0JhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotICAg
IEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OworICAgIERPTUFnZW50KiBtX2RvbUFnZW50
OwogCiAgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVl
dDsKICAgICBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0IG1fY3NzU3R5bGVTaGVl
dFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBhMTliYTRhOTlhMzliODE1YzlkM2JmMWVhYmJi
MTQ5NWQ0YzA0ZjdjLi5kNDIyMjZjYWZhZjIwZWU5OWU3YWE4NGNiNzVjMTI0NTY0MzJhOWIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CkBAIC0xMDQsOCArMTA0LDggQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcihQYWdlJiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckFnZW50KG1faW5zcGVjdG9yQWdlbnQpOwogICAg
IG1fYWdlbnRzLmFwcGVuZChXVEY6Om1vdmUoaW5zcGVjdG9yQWdlbnRQdHIpKTsKIAotICAgIGF1
dG8gcGFnZUFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JQYWdlQWdlbnQ+KG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgJnBhZ2UsIGluc3BlY3RvckNsaWVudCwgbV9vdmVy
bGF5LmdldCgpKTsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IHBhZ2VBZ2Vu
dFB0ci5nZXQoKTsKKyAgICBhdXRvIHBhZ2VBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8UGFn
ZUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksICZwYWdlLCBpbnNwZWN0b3JDbGll
bnQsIG1fb3ZlcmxheS5nZXQoKSk7CisgICAgUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBwYWdlQWdl
bnRQdHIuZ2V0KCk7CiAgICAgbV9wYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAg
bV9hZ2VudHMuYXBwZW5kKFdURjo6bW92ZShwYWdlQWdlbnRQdHIpKTsKIApAQCAtMTE0LDMzICsx
MTQsMzMgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlJiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMtPnNldFBhZ2VSdW50aW1lQWdlbnQocnVudGltZUFnZW50KTsKICAgICBtX2FnZW50cy5hcHBl
bmQoV1RGOjptb3ZlKHJ1bnRpbWVBZ2VudFB0cikpOwogCi0gICAgYXV0byBkb21BZ2VudFB0ciA9
IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yRE9NQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50
cy5nZXQoKSwgcGFnZUFnZW50LCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgbV9vdmVy
bGF5LmdldCgpKTsKKyAgICBhdXRvIGRvbUFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxET01B
Z2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmdldCgpLCBtX292ZXJsYXkuZ2V0KCkpOwogICAgIG1fZG9tQWdlbnQgPSBk
b21BZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKGRvbUFnZW50
UHRyKSk7CiAKLSAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JD
U1NBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX2RvbUFnZW50KSk7CisgICAg
bV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8Q1NTQWdlbnQ+KG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5nZXQoKSwgbV9kb21BZ2VudCkpOwogCi0gICAgYXV0byBkYXRhYmFzZUFnZW50UHRy
ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PihtX2luc3RydW1lbnRp
bmdBZ2VudHMuZ2V0KCkpOwotICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGRhdGFiYXNlQWdl
bnQgPSBkYXRhYmFzZUFnZW50UHRyLmdldCgpOworICAgIGF1dG8gZGF0YWJhc2VBZ2VudFB0ciA9
IHN0ZDo6bWFrZV91bmlxdWU8RGF0YWJhc2VBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdl
dCgpKTsKKyAgICBEYXRhYmFzZUFnZW50KiBkYXRhYmFzZUFnZW50ID0gZGF0YWJhc2VBZ2VudFB0
ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKGRhdGFiYXNlQWdlbnRQdHIp
KTsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIG1fYWdlbnRzLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckluZGV4ZWREQkFnZW50PihtX2luc3RydW1lbnRpbmdB
Z2VudHMuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBwYWdlQWdlbnQpKTsK
KyAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbmRleGVkREJBZ2VudD4obV9p
bnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwg
cGFnZUFnZW50KSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIG1fYWdl
bnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclJlcGxheUFnZW50PihtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2VBZ2VudCkpOworICAgIG1fYWdlbnRzLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPFJlcGxheUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCks
IHBhZ2VBZ2VudCkpOwogI2VuZGlmCiAKLSAgICBhdXRvIGRvbVN0b3JhZ2VBZ2VudFB0ciA9IHN0
ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50PihtX2luc3RydW1lbnRpbmdB
Z2VudHMuZ2V0KCksIG1fcGFnZUFnZW50KTsKLSAgICBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQq
IGRvbVN0b3JhZ2VBZ2VudCA9IGRvbVN0b3JhZ2VBZ2VudFB0ci5nZXQoKTsKKyAgICBhdXRvIGRv
bVN0b3JhZ2VBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8RE9NU3RvcmFnZUFnZW50PihtX2lu
c3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fcGFnZUFnZW50KTsKKyAgICBET01TdG9yYWdlQWdl
bnQqIGRvbVN0b3JhZ2VBZ2VudCA9IGRvbVN0b3JhZ2VBZ2VudFB0ci5nZXQoKTsKICAgICBtX2Fn
ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGRvbVN0b3JhZ2VBZ2VudFB0cikpOwogCi0gICAgYXV0byB0
aW1lbGluZUFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JUaW1lbGluZUFnZW50
PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2VBZ2VudCwgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6UGFnZUluc3BlY3RvciwgaW5zcGVjdG9yQ2xpZW50KTsKKyAgICBhdXRvIHRpbWVs
aW5lQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVsaW5lQWdlbnQ+KG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBUaW1lbGluZUFnZW50OjpQYWdlSW5zcGVjdG9y
LCBpbnNwZWN0b3JDbGllbnQpOwogICAgIG1fdGltZWxpbmVBZ2VudCA9IHRpbWVsaW5lQWdlbnRQ
dHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKFdURjo6bW92ZSh0aW1lbGluZUFnZW50UHRy
KSk7CiAKLSAgICBhdXRvIHJlc291cmNlQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50
LCBpbnNwZWN0b3JDbGllbnQpOworICAgIGF1dG8gcmVzb3VyY2VBZ2VudFB0ciA9IHN0ZDo6bWFr
ZV91bmlxdWU8UmVzb3VyY2VBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdl
QWdlbnQsIGluc3BlY3RvckNsaWVudCk7CiAgICAgbV9yZXNvdXJjZUFnZW50ID0gcmVzb3VyY2VB
Z2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKHJlc291cmNlQWdl
bnRQdHIpKTsKIApAQCAtMTUzLDEzICsxNTMsMTMgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcihQYWdlJiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMK
ICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBkZWJ1Z2dlckFnZW50UHRyLmdldCgpOwogICAgIG1fYWdl
bnRzLmFwcGVuZChXVEY6Om1vdmUoZGVidWdnZXJBZ2VudFB0cikpOwogCi0gICAgYXV0byBkb21E
ZWJ1Z2dlckFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fZG9tQWdlbnQsIG1fZGVidWdnZXJB
Z2VudCk7CisgICAgYXV0byBkb21EZWJ1Z2dlckFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxE
T01EZWJ1Z2dlckFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fZG9tQWdlbnQs
IG1fZGVidWdnZXJBZ2VudCk7CiAgICAgbV9kb21EZWJ1Z2dlckFnZW50ID0gZG9tRGVidWdnZXJB
Z2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKGRvbURlYnVnZ2Vy
QWdlbnRQdHIpKTsKIAotICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBw
YWdlQWdlbnQpKTsKLSAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0
b3JXb3JrZXJBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpKSk7Ci0gICAgbV9hZ2Vu
dHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ+KG1faW5z
dHJ1bWVudGluZ0FnZW50cy5nZXQoKSkpOworICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPEFwcGxpY2F0aW9uQ2FjaGVBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgp
LCBwYWdlQWdlbnQpKTsKKyAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxXb3Jr
ZXJBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpKSk7CisgICAgbV9hZ2VudHMuYXBw
ZW5kKHN0ZDo6bWFrZV91bmlxdWU8TGF5ZXJUcmVlQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50
cy5nZXQoKSkpOwogCiAgICAgQVNTRVJUKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5jb21tYW5k
TGluZUFQSUhvc3QoKSk7CiAgICAgaWYgKENvbW1hbmRMaW5lQVBJSG9zdCogY29tbWFuZExpbmVB
UElIb3N0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmNvbW1hbmRMaW5lQVBJSG9zdCgpKSB7
CkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0
aW5nKGJvb2wgaW5kaWNhdGluZykKIAogYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxl
ckVuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnBl
cnNpc3RlbnRJbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CisgICAgcmV0dXJuIG1faW5zdHJ1bWVu
dGluZ0FnZW50cy0+cGVyc2lzdGVudFRpbWVsaW5lQWdlbnQoKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRQcm9maWxlckVuYWJsZWQoYm9vbCBlbmFibGUpCkBAIC0zODksMTAg
KzM4OSwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFByb2ZpbGVyRW5hYmxlZChi
b29sIGVuYWJsZSkKICAgICBFcnJvclN0cmluZyB1bnVzZWQ7CiAKICAgICBpZiAoZW5hYmxlKSB7
Ci0gICAgICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0UGVyc2lzdGVudEluc3BlY3RvclRp
bWVsaW5lQWdlbnQobV90aW1lbGluZUFnZW50KTsKKyAgICAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLT5zZXRQZXJzaXN0ZW50VGltZWxpbmVBZ2VudChtX3RpbWVsaW5lQWdlbnQpOwogICAgICAg
ICBtX3RpbWVsaW5lQWdlbnQtPnN0YXJ0KHVudXNlZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRQZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dChudWxscHRyKTsKKyAgICAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRQZXJzaXN0ZW50
VGltZWxpbmVBZ2VudChudWxscHRyKTsKICAgICAgICAgbV90aW1lbGluZUFnZW50LT5zdG9wKHVu
dXNlZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmgKaW5kZXggNWM0MzA3MWZlZjc0ODE5MGExMDRjYTFlZDhjYmE2Mjk1YjJiMTFi
ZS4uNzk2Mzk1MzVhNjBmZWY5ZWYxNjUxM2U3ZDIwNjZjZmZkNWQzMGI5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC02MCwxNyArNjAs
MTcgQEAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01BZ2Vu
dDsKLWNsYXNzIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ7CitjbGFzcyBET01BZ2VudDsKK2Ns
YXNzIERPTURlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNs
YXNzIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjsKLWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsK
LWNsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdl
OworY2xhc3MgUGFnZUFnZW50OwogY2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQ7CitjbGFzcyBSZXNv
dXJjZUFnZW50OworY2xhc3MgVGltZWxpbmVBZ2VudDsKIGNsYXNzIFdlYkluamVjdGVkU2NyaXB0
TWFuYWdlcjsKIAogY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3RvckVudmlyb25tZW50IHsKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZXN1bWUoKTsKIAogICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JDbGllbnQ7IH0KLSAgICBJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUFnZW50OyB9CisgICAg
UGFnZUFnZW50KiBwYWdlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VBZ2VudDsgfQogCiAg
ICAgdmlydHVhbCBib29sIGRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoSlNDOjpFeGVj
U3RhdGUqKSBjb25zdCBvdmVycmlkZTsKQEAgLTE0NSwxMiArMTQ1LDEyIEBAIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvck92ZXJsYXk+IG1fb3ZlcmxheTsKIAogICAgIElu
c3BlY3Rvcjo6SW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7Ci0gICAgSW5zcGVjdG9y
RE9NQWdlbnQqIG1fZG9tQWdlbnQ7Ci0gICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogbV9yZXNv
dXJjZUFnZW50OwotICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CisgICAgRE9N
QWdlbnQqIG1fZG9tQWdlbnQ7CisgICAgUmVzb3VyY2VBZ2VudCogbV9yZXNvdXJjZUFnZW50Owor
ICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgUGFnZURlYnVnZ2VyQWdlbnQqIG1fZGVi
dWdnZXJBZ2VudDsKLSAgICBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBtX2RvbURlYnVnZ2Vy
QWdlbnQ7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogbV90aW1lbGluZUFnZW50OworICAg
IERPTURlYnVnZ2VyQWdlbnQqIG1fZG9tRGVidWdnZXJBZ2VudDsKKyAgICBUaW1lbGluZUFnZW50
KiBtX3RpbWVsaW5lQWdlbnQ7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5l
bCogbV9mcm9udGVuZENoYW5uZWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAppbmRleCAwYjhmOTQxYjAyMGQyODg5YTY1YjlkOGQxNjcwN2NjZjlj
YTBmZmVmLi43MDA0M2Q1OTZkZTY0MjVmNDM1NzEyNTg0NGJiNmIzZGY4YjgxN2I3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTE1Nywx
OCArMTU3LDE4IEBAIHN0YXRpYyBib29sIHBhcnNlUXVhZChjb25zdCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKIGNsYXNzIFJldmFsaWRhdGVTdHls
ZUF0dHJpYnV0ZVRhc2sgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2soSW5zcGVjdG9yRE9NQWdlbnQqKTsKKyAg
ICBSZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNrKERPTUFnZW50Kik7CiAgICAgdm9pZCBzY2hl
ZHVsZUZvcihFbGVtZW50Kik7CiAgICAgdm9pZCByZXNldCgpIHsgbV90aW1lci5zdG9wKCk7IH0K
ICAgICB2b2lkIHRpbWVyRmlyZWQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JET01BZ2Vu
dCogbV9kb21BZ2VudDsKKyAgICBET01BZ2VudCogbV9kb21BZ2VudDsKICAgICBUaW1lciBtX3Rp
bWVyOwogICAgIEhhc2hTZXQ8UmVmUHRyPEVsZW1lbnQ+PiBtX2VsZW1lbnRzOwogfTsKIAotUmV2
YWxpZGF0ZVN0eWxlQXR0cmlidXRlVGFzazo6UmV2YWxpZGF0ZVN0eWxlQXR0cmlidXRlVGFzayhJ
bnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQpCitSZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNr
OjpSZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNrKERPTUFnZW50KiBkb21BZ2VudCkKICAgICA6
IG1fZG9tQWdlbnQoZG9tQWdlbnQpCiAgICAgLCBtX3RpbWVyKCp0aGlzLCAmUmV2YWxpZGF0ZVN0
eWxlQXR0cmlidXRlVGFzazo6dGltZXJGaXJlZCkKIHsKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lk
IFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2s6OnRpbWVyRmlyZWQoKQogICAgIG1fZWxlbWVu
dHMuY2xlYXIoKTsKIH0KIAotU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KGNvbnN0IEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIERPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KGNvbnN0IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChlYykgewogICAgICAgICBFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwpAQCAtMjAxLDggKzIwMSw4IEBA
IFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICByZXR1cm4gIiI7CiB9CiAKLUluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0
b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNw
ZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCi0gICAgOiBJbnNwZWN0
b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJET00iKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKK0RP
TUFnZW50OjpET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCisgICAgOiBXZWJBZ2VudEJh
c2UoQVNDSUlMaXRlcmFsKCJET00iKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1fcGFn
ZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVk
U2NyaXB0TWFuYWdlcikKICAgICAsIG1fb3ZlcmxheShvdmVybGF5KQpAQCAtMjE1LDEzICsyMTUs
MTMgQEAgSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEkKIHsKIH0KIAotSW5zcGVjdG9yRE9NQWdlbnQ6
On5JbnNwZWN0b3JET01BZ2VudCgpCitET01BZ2VudDo6fkRPTUFnZW50KCkKIHsKICAgICByZXNl
dCgpOwogICAgIEFTU0VSVCghbV9zZWFyY2hpbmdGb3JOb2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKQordm9pZCBET01BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OkRPTUZyb250ZW5k
RGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0g
SW5zcGVjdG9yOjpET01CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVy
LCB0aGlzKTsKQEAgLTIyOSwxNCArMjI5LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCoKICAg
ICBtX2hpc3RvcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvckhpc3Rvcnk+KCk7CiAgICAg
bV9kb21FZGl0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPERPTUVkaXRvcj4obV9oaXN0b3J5LmdldCgp
KTsKIAotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yRE9NQWdlbnQodGhp
cyk7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRET01BZ2VudCh0aGlzKTsKICAgICBt
X2RvY3VtZW50ID0gbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpOwogCiAgICAg
aWYgKG1fbm9kZVRvRm9jdXMpCiAgICAgICAgIGZvY3VzTm9kZSgpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pCit2b2lkIERPTUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXIgPSBudWxscHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKQEAgLTI0
OCwxMiArMjQ4LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvCiAgICAgc2V0U2VhcmNoaW5n
Rm9yTm9kZSh1bnVzZWQsIGZhbHNlLCAwKTsKICAgICBoaWRlSGlnaGxpZ2h0KHVudXNlZCk7CiAK
LSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckRPTUFnZW50KDApOworICAg
IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0RE9NQWdlbnQoMCk7CiAgICAgbV9kb2N1bWVudFJl
cXVlc3RlZCA9IGZhbHNlOwogICAgIHJlc2V0KCk7CiB9CiAKLVZlY3RvcjxEb2N1bWVudCo+IElu
c3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudHMoKQorVmVjdG9yPERvY3VtZW50Kj4gRE9NQWdlbnQ6
OmRvY3VtZW50cygpCiB7CiAgICAgVmVjdG9yPERvY3VtZW50Kj4gcmVzdWx0OwogICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewpAQCAtMjY1LDcgKzI2NSw3IEBAIFZlY3RvcjxEb2N1
bWVudCo+IEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudHMoKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkKK3ZvaWQgRE9NQWdlbnQ6OnJl
c2V0KCkKIHsKICAgICBpZiAobV9oaXN0b3J5KQogICAgICAgICBtX2hpc3RvcnktPnJlc2V0KCk7
CkBAIC0yNzYsMTIgKzI3NiwxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNldCgpCiAg
ICAgbV9kb2N1bWVudCA9IDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldERPTUxp
c3RlbmVyKERPTUxpc3RlbmVyKiBsaXN0ZW5lcikKK3ZvaWQgRE9NQWdlbnQ6OnNldERPTUxpc3Rl
bmVyKERPTUxpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICBtX2RvbUxpc3RlbmVyID0gbGlzdGVu
ZXI7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldERvY3VtZW50KERvY3VtZW50KiBk
b2MpCit2b2lkIERPTUFnZW50OjpzZXREb2N1bWVudChEb2N1bWVudCogZG9jKQogewogICAgIGlm
IChkb2MgPT0gbV9kb2N1bWVudC5nZXQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjk4LDEyICsy
OTgsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0RG9jdW1lbnQoRG9jdW1lbnQqIGRv
YykKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvY3VtZW50VXBkYXRlZCgpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWxlYXNlRGFuZ2xpbmdOb2RlcygpCit2b2lkIERP
TUFnZW50OjpyZWxlYXNlRGFuZ2xpbmdOb2RlcygpCiB7CiAgICAgbV9kYW5nbGluZ05vZGVUb0lk
TWFwcy5jbGVhcigpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmQoTm9kZSogbm9k
ZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQoraW50IERPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUs
IE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBpbnQgaWQgPSBub2Rlc01hcC0+Z2V0KG5v
ZGUpOwogICAgIGlmIChpZCkKQEAgLTMxNSw3ICszMTUsNyBAQCBpbnQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgIHJldHVybiBp
ZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKE5vZGUqIG5vZGUsIE5vZGVU
b0lkTWFwKiBub2Rlc01hcCkKK3ZvaWQgRE9NQWdlbnQ6OnVuYmluZChOb2RlKiBub2RlLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCiB7CiAgICAgaW50IGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsK
ICAgICBpZiAoIWlkKQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnVuYmluZChOb2RlKiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiAgICAgfQogfQogCi1O
b2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQpCitOb2RlKiBET01BZ2VudDo6YXNzZXJ0Tm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChu
b2RlSWQpOwogICAgIGlmICghbm9kZSkgewpAQCAtMzYzLDcgKzM2Myw3IEBAIE5vZGUqIEluc3Bl
Y3RvckRPTUFnZW50Ojphc3NlcnROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5v
ZGVJZCkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50
Ojphc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitE
b2N1bWVudCogRE9NQWdlbnQ6OmFzc2VydERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC0zNzUsNyArMzc1LDcgQEAgRG9jdW1lbnQq
IEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQKICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpOwogfQog
Ci1FbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVtZW50KiBET01BZ2VudDo6YXNzZXJ0RWxlbWVu
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9k
ZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAt
Mzg3LDcgKzM4Nyw3IEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFbGVtZW50
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICByZXR1cm4gZG93bmNh
c3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRF
ZGl0YWJsZU5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSog
RE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5v
ZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMzk5LDcgKzM5OSw3IEBAIE5vZGUqIEluc3BlY3Rv
ckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLUVsZW1lbnQqIEluc3BlY3RvckRPTUFn
ZW50Ojphc3NlcnRFZGl0YWJsZUVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkKQorRWxlbWVudCogRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlRWxlbWVudChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9
IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpA
QCAtNDExLDcgKzQxMSw3IEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0
YWJsZUVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQKICAgICByZXR1cm4gZWxl
bWVudDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RG9jdW1lbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiYg
cm9vdCkKK3ZvaWQgRE9NQWdlbnQ6OmdldERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4mIHJvb3QpCiB7CiAgICAg
bV9kb2N1bWVudFJlcXVlc3RlZCA9IHRydWU7CiAKQEAgLTQyOCw3ICs0MjgsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3I6OgogICAgIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVu
dC5nZXQoKSwgMiwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGgp
Cit2b2lkIERPTUFnZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50IG5vZGVJZCwgaW50
IGRlcHRoKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAo
IW5vZGUgfHwgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUt
Pm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9
IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpKQpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBp
bnQgZGVwdGgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMobm9kZUlk
LCBjaGlsZHJlbi5yZWxlYXNlKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNj
YXJkQmluZGluZ3MoKQordm9pZCBET01BZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKIHsKICAgICBt
X2RvY3VtZW50Tm9kZVRvSWRNYXAuY2xlYXIoKTsKICAgICBtX2lkVG9Ob2RlLmNsZWFyKCk7CkBA
IC00NjUsNyArNDY1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZEJpbmRpbmdz
KCkKICAgICBtX25vZGVHcm91cFRvQmFja2VuZElkTWFwLmNsZWFyKCk7CiB9CiAKLWludCBJbnNw
ZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IGRvY3VtZW50Tm9kZUlkLCBOb2RlKiBub2RlVG9QdXNoKQoraW50IERPTUFnZW50Ojpw
dXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnRO
b2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYXNz
ZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAgICBpZiAoIWRvY3Vt
ZW50KQpAQCAtNDc4LDcgKzQ3OCw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVU
b0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3VtZW50CiAgICAgcmV0
dXJuIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZVRvUHVzaCk7CiB9CiAKLU5vZGUqIEluc3Bl
Y3RvckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQorTm9kZSogRE9NQWdlbnQ6Om5vZGVGb3JJ
ZChpbnQgaWQpCiB7CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00ODksNyAr
NDg5LDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZChpbnQgaWQpCiAgICAg
cmV0dXJuIDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgaW50KiBkZXB0aCkK
K3ZvaWQgRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QgaW50KiBkZXB0aCkKIHsKICAgICBpbnQgc2FuaXRpemVkRGVw
dGg7CiAKQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXF1ZXN0
Q2hpbGROb2RlcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsCiAgICAgcHVz
aENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCwgc2FuaXRpemVkRGVwdGgpOwogfQogCi12b2lk
IEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIGludCogZWxlbWVudElkKQor
dm9pZCBET01BZ2VudDo6cXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBpbnQqIGVsZW1lbnRJZCkKIHsKICAg
ICAqZWxlbWVudElkID0gMDsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpx
dWVyeVNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29ucwog
ICAgICAgICAqZWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlbGVtZW50LmdldCgp
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mIHJlc3VsdCkKK3ZvaWQgRE9N
QWdlbnQ6OnF1ZXJ5U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PGludD4+JiByZXN1bHQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNTUyLDcgKzU1Miw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBpbnQgbm9kZUlkLCBjCiAgICAgICAgIHJlc3VsdC0+YWRkSXRlbShwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKG5vZGVzLT5pdGVtKGkpKSk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2Vu
dDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQoraW50IERPTUFnZW50
OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgQVNTRVJU
KG5vZGVUb1B1c2gpOyAgLy8gSW52YWxpZCBpbnB1dAogCkBAIC01OTksMTIgKzU5OSwxMiBAQCBp
bnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZVRv
UHVzaCkKICAgICByZXR1cm4gbWFwLT5nZXQobm9kZVRvUHVzaCk7CiB9CiAKLWludCBJbnNwZWN0
b3JET01BZ2VudDo6Ym91bmROb2RlSWQoTm9kZSogbm9kZSkKK2ludCBET01BZ2VudDo6Ym91bmRO
b2RlSWQoTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdl
dChub2RlKTsKIH0KIAotQmFja2VuZE5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6YmFja2VuZE5v
ZGVJZEZvck5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBub2RlR3JvdXApCitCYWNrZW5k
Tm9kZUlkIERPTUFnZW50OjpiYWNrZW5kTm9kZUlkRm9yTm9kZShOb2RlKiBub2RlLCBjb25zdCBT
dHJpbmcmIG5vZGVHcm91cCkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtNjIzLDcgKzYyMyw3IEBAIEJhY2tlbmROb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmJhY2tl
bmROb2RlSWRGb3JOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gaWQ7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbGVhc2VCYWNrZW5kTm9kZUlkcyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgbm9kZUdyb3VwKQordm9pZCBET01B
Z2VudDo6cmVsZWFzZUJhY2tlbmROb2RlSWRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBub2RlR3JvdXApCiB7CiAgICAgaWYgKG1fbm9kZUdyb3VwVG9CYWNrZW5kSWRN
YXAuY29udGFpbnMobm9kZUdyb3VwKSkgewogICAgICAgICBOb2RlVG9CYWNrZW5kSWRNYXAmIG1h
cCA9IG1fbm9kZUdyb3VwVG9CYWNrZW5kSWRNYXAuZmluZChub2RlR3JvdXApLT52YWx1ZTsKQEAg
LTYzNSw3ICs2MzUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWxlYXNlQmFja2VuZE5v
ZGVJZHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdAogICAgIGVycm9yU3RyaW5n
ID0gQVNDSUlMaXRlcmFsKCJHcm91cCBuYW1lIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3ZvaWQgRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JT
dHJpbmcsIGVsZW1lbnRJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtNjQ0LDcgKzY0NCw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IGVsZW1lbnRJCiAgICAgbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZShl
bGVtZW50LCBuYW1lLCB2YWx1ZSwgZXJyb3JTdHJpbmcpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcqIGNvbnN0IG5hbWUp
Cit2b2lkIERPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcqIGNv
bnN0IG5hbWUpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVu
dChlcnJvclN0cmluZywgZWxlbWVudElkKTsKICAgICBpZiAoIWVsZW1lbnQpCkBAIC02NTQsNyAr
NjU0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW4KICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBwYXJzZWRFbGVtZW50LmdldCgpLT5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0
ICsgIj48L3NwYW4+IiwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBlcnJvclN0cmluZyA9
IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKKyAgICAgICAgZXJyb3JTdHJp
bmcgPSBET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTY4Miw3ICs2ODIsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1
dGVzQXNUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1lbgogICAgICAgICBt
X2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsICpuYW1lLCBlcnJvclN0cmluZyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQg
RE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBl
bGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0g
YXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOwogICAgIGlmICgh
ZWxlbWVudCkKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVBdHRyaWJ1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLAogICAg
IG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcp
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCkKK3ZvaWQgRE9NQWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3Nl
cnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAt
NzA2LDcgKzcwNiw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVD
aGlsZChwYXJlbnROb2RlLCBub2RlLCBlcnJvclN0cmluZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnNldE5vZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBpbnQqIG5ld0lkKQordm9pZCBET01BZ2VudDo6c2V0
Tm9kZU5hbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJp
bmcmIHRhZ05hbWUsIGludCogbmV3SWQpCiB7CiAgICAgKm5ld0lkID0gMDsKIApAQCAtNzQxLDcg
Kzc0MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVOYW1lKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QKICAgICAgICAgcHVzaENoaWxkTm9kZXNU
b0Zyb250ZW5kKCpuZXdJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91dGVy
SFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFdURjo6U3RyaW5nKiBv
dXRlckhUTUwpCit2b2lkIERPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKQogewogICAgIE5vZGUq
IG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkK
QEAgLTc1MCw3ICs3NTAsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6OgogICAgICpvdXRlckhU
TUwgPSBjcmVhdGVNYXJrdXAoKm5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCkKK3ZvaWQgRE9NQWdlbnQ6OnNldE91dGVySFRNTChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKQogewog
ICAgIGlmICghbm9kZUlkKSB7CiAgICAgICAgIERPTVBhdGNoU3VwcG9ydCBkb21QYXRjaFN1cHBv
cnQobV9kb21FZGl0b3IuZ2V0KCksIG1fZG9jdW1lbnQuZ2V0KCkpOwpAQCAtNzg0LDcgKzc4NCw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0CiAgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9u
dGVuZChuZXdJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIERPTUFnZW50OjpzZXROb2RlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3Nl
cnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAt
Nzk4LDcgKzc5OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0CiAgICAgbV9kb21FZGl0b3It
PnJlcGxhY2VXaG9sZVRleHQoZG93bmNhc3Q8VGV4dD4obm9kZSksIHZhbHVlLCBlcnJvclN0cmlu
Zyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9k
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2Jq
ZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpCit2b2lkIERPTUFn
ZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4m
IGxpc3RlbmVyc0FycmF5KQogewogICAgIGxpc3RlbmVyc0FycmF5ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPjo6Y3Jl
YXRlKCk7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7
CkBAIC04MzEsNyArODMxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0
ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAgICB9CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzKE5vZGUqIG5vZGUsIFZl
Y3RvcjxFdmVudExpc3RlbmVySW5mbz4mIGV2ZW50SW5mb3JtYXRpb24sIGJvb2wgaW5jbHVkZUFu
Y2VzdG9ycykKK3ZvaWQgRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzKE5vZGUqIG5vZGUsIFZl
Y3RvcjxFdmVudExpc3RlbmVySW5mbz4mIGV2ZW50SW5mb3JtYXRpb24sIGJvb2wgaW5jbHVkZUFu
Y2VzdG9ycykKIHsKICAgICAvLyBUaGUgTm9kZSdzIEFuY2VzdG9ycyBpbmNsdWRpbmcgc2VsZi4K
ICAgICBWZWN0b3I8Tm9kZSo+IGFuY2VzdG9yczsKQEAgLTg2NSw3ICs4NjUsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVycyhOb2RlKiBub2RlLCBWZWN0b3I8RXZl
bnRMaXN0ZW5lckluZm8+JgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM+JiBheFByb3BlcnRpZXMpCit2b2lkIERPTUFnZW50OjpnZXRBY2Nlc3NpYmls
aXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlk
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
cz4mIGF4UHJvcGVydGllcykKIHsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0
cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC04NzQsNyArODc0LDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmkKICAgICBheFByb3BlcnRpZXMgPSBidWlsZE9iamVjdEZvckFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzKG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpw
ZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB3aGl0
ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiYgbm9kZUlk
cywgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkKK3ZvaWQgRE9NQWdlbnQ6OnBl
cmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHdoaXRl
c3BhY2VUcmltbWVkUXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBub2RlSWRz
LCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KQogewogICAgIC8vIEZJWE1FOiBT
ZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdyYW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0
aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0ZWQuCiAgICAgSW5zcGVjdG9yTm9kZUZpbmRlciBmaW5k
ZXIod2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7CkBAIC05MTQsNyArOTE0LDcgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgd2gKICAgICAqcmVzdWx0Q291bnQgPSByZXN1bHRzVmVjdG9yLnNpemUoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgsIGlu
dCB0b0luZGV4LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mIG5vZGVJ
ZHMpCit2b2lkIERPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYgbm9kZUlkcykKIHsKICAg
ICBTZWFyY2hSZXN1bHRzOjppdGVyYXRvciBpdCA9IG1fc2VhcmNoUmVzdWx0cy5maW5kKHNlYXJj
aElkKTsKICAgICBpZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKSB7CkBAIC05MzMsMTIg
KzkzMywxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogICAgICAgICBub2RlSWRzLT5hZGRJ
dGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKGl0LT52YWx1ZSlbaV0uZ2V0KCkpKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKQordm9pZCBET01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJl
c3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKQogewogICAgIG1fc2Vh
cmNoUmVzdWx0cy5yZW1vdmUoc2VhcmNoSWQpOwogfQogCi1ib29sIEluc3BlY3RvckRPTUFnZW50
OjpoYW5kbGVNb3VzZVByZXNzKCkKK2Jvb2wgRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQog
ewogICAgIGlmICghbV9zZWFyY2hpbmdGb3JOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC05NTAsNyArOTUwLDcgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlTW91c2VQcmVz
cygpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5k
bGVUb3VjaEV2ZW50KE5vZGUmIG5vZGUpCitib29sIERPTUFnZW50OjpoYW5kbGVUb3VjaEV2ZW50
KE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKCFtX3NlYXJjaGluZ0Zvck5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTk2Miw3ICs5NjIsNyBAQCBib29sIEluc3BlY3RvckRPTUFnZW50Ojpo
YW5kbGVUb3VjaEV2ZW50KE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEluc3BlY3RvckRPTUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUpCit2b2lkIERP
TUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUpCiB7CiAgICAgRXJyb3JTdHJpbmcg
dW51c2VkOwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW5zcGVjdGVkTm9kZTsKQEAgLTk3NSw3
ICs5NzUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3Rl
ZE5vZGUpCiAgICAgZm9jdXNOb2RlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmZv
Y3VzTm9kZSgpCit2b2lkIERPTUFnZW50Ojpmb2N1c05vZGUoKQogewogICAgIGlmICghbV9mcm9u
dGVuZERpc3BhdGNoZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTk5NCwxMCArOTk0LDEwIEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzTm9kZSgpCiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW5qZWN0ZWRTY3JpcHQuaW5z
cGVjdE9iamVjdChJbnNwZWN0b3JET01BZ2VudDo6bm9kZUFzU2NyaXB0VmFsdWUoc2NyaXB0U3Rh
dGUsIG5vZGUuZ2V0KCkpKTsKKyAgICBpbmplY3RlZFNjcmlwdC5pbnNwZWN0T2JqZWN0KERPTUFn
ZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZSwgbm9kZS5nZXQoKSkpOwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQordm9pZCBET01BZ2VudDo6bW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKIHsKICAg
ICBpZiAoIW1fc2VhcmNoaW5nRm9yTm9kZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAwOSw3ICsx
MDA5LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnMKICAgICAgICAgbV9vdmVybGF5LT5oaWdo
bGlnaHROb2RlKG5vZGUsICptX2luc3BlY3RNb2RlSGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0
b3JPYmplY3QpCit2b2lkIERPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCkKIHsKICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQp
CiAgICAgICAgIHJldHVybjsKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29s
IGVuYWJsCiAgICAgbV9vdmVybGF5LT5kaWRTZXRTZWFyY2hpbmdGb3JOb2RlKG1fc2VhcmNoaW5n
Rm9yTm9kZSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3Qp
CitzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBET01BZ2VudDo6aGlnaGxpZ2h0Q29u
ZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rv
ck9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KQogewogICAgIGlmICghaGlnaGxpZ2h0
SW5zcGVjdG9yT2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJ
bnRlcm5hbCBlcnJvcjogaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGlzIG1pc3Np
bmciKTsKQEAgLTEwNDMsMTggKzEwNDMsMTggQEAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENv
bmZpZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3IKICAg
ICByZXR1cm4gaGlnaGxpZ2h0Q29uZmlnOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJs
ZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnKQordm9p
ZCBET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgYm9vbCBlbmFibGVkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGhpZ2hsaWdo
dENvbmZpZykKIHsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVk
LCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcuZ2V0KCkgOiBudWxscHRyKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVD
b2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQordm9pZCBET01BZ2VudDo6aGln
aGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3Jk
aW5hdGVzKQogewogICAgIGF1dG8gcXVhZCA9IHN0ZDo6bWFrZV91bmlxdWU8RmxvYXRRdWFkPihG
bG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgIGlubmVySGlnaGxpZ2h0UXVhZChX
VEY6Om1vdmUocXVhZCksIGNvbG9yLmNvcHlSZWYoKSwgb3V0bGluZUNvbG9yLmNvcHlSZWYoKSwg
dXNlUGFnZUNvb3JkaW5hdGVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0UXVhZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mJiBxdWFkQXJyYXksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3Is
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29s
KiB1c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIERPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYmIHF1YWRB
cnJheSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29y
ZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UXVhZD4o
KTsKICAgICBpZiAoIXBhcnNlUXVhZChxdWFkQXJyYXksIHF1YWQuZ2V0KCkpKSB7CkBAIC0xMDY0
LDcgKzEwNjQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPElucwogICAgIGlubmVySGlnaGxpZ2h0
UXVhZChXVEY6Om1vdmUocXVhZCksIGNvbG9yLmNvcHlSZWYoKSwgb3V0bGluZUNvbG9yLmNvcHlS
ZWYoKSwgdXNlUGFnZUNvb3JkaW5hdGVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
aW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCit2
b2lkIERPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVh
ZD4gcXVhZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VD
b29yZGluYXRlcykKIHsKICAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IHN0ZDo6bWFrZV91bmlx
dWU8SGlnaGxpZ2h0Q29uZmlnPigpOwogICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBh
cnNlQ29sb3IoY29sb3IuY29weVJlZigpKTsKQEAgLTEwNzMsNyArMTA3Myw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRR
dWFkPiBxdWFkLCBjb25zCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHRRdWFkKFdURjo6bW92ZShx
dWFkKSwgKmhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29uc3QgaW50KiBub2RlSWQs
IGNvbnN0IFN0cmluZyogb2JqZWN0SWQpCit2b2lkIERPTUFnZW50OjpoaWdobGlnaHROb2RlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcq
IG9iamVjdElkKQogewogICAgIE5vZGUqIG5vZGUgPSAwOwogICAgIGlmIChub2RlSWQpIHsKQEAg
LTEwOTUsNyArMTA5NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zCiAgICAgbV9vdmVybGF5
LT5oaWdobGlnaHROb2RlKG5vZGUsICpoaWdobGlnaHRDb25maWcpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IpCit2b2lkIERPTUFnZW50OjpoaWdo
bGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBvdXRsaW5lQ29sb3IpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZy
YW1lRm9ySWQoZnJhbWVJZCk7CiAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5vd25lckVsZW1lbnQo
KSkgewpAQCAtMTEwNywxMiArMTEwNywxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29ucwogICAg
IH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmlu
ZyYpCit2b2lkIERPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikKIHsKICAgICBt
X292ZXJsYXktPmhpZGVIaWdobGlnaHQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
bW92ZVRvKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgaW50IHRhcmdldEVs
ZW1lbnRJZCwgY29uc3QgaW50KiBjb25zdCBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKQor
dm9pZCBET01BZ2VudDo6bW92ZVRvKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgaW50IHRhcmdldEVsZW1lbnRJZCwgY29uc3QgaW50KiBjb25zdCBhbmNob3JOb2RlSWQsIGlu
dCogbmV3Tm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTEzOSwyNiArMTEzOSwyNiBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0RQogICAgICpuZXdOb2RlSWQgPSBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmRvKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK3ZvaWQgRE9NQWdlbnQ6OnVuZG8oRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1faGlzdG9yeS0+
dW5kbyhlYyk7Ci0gICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0
cmluZyhlYyk7CisgICAgZXJyb3JTdHJpbmcgPSBET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlZG8oRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQordm9pZCBET01BZ2VudDo6cmVkbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgbV9oaXN0b3J5LT5yZWRvKGVjKTsKLSAgICBl
cnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKKyAgICBl
cnJvclN0cmluZyA9IERPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6bWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKQordm9pZCBET01B
Z2VudDo6bWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKQogewogICAgIG1faGlzdG9yeS0+
bWFya1VuZG9hYmxlU3RhdGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQordm9pZCBET01BZ2VudDo6Zm9j
dXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogewogICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICgh
ZWxlbWVudCkKQEAgLTExNzAsNyArMTE3MCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmZv
Y3VzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICBlbGVtZW50LT5m
b2N1cygpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0
R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQpCit2b2lkIERPTUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCiB7
CiAgICAgU3RyaW5nIG9iamVjdEdyb3VwTmFtZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3Vw
IDogIiI7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwpAQCAtMTE4Niw3ICsx
MTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdAogICAgIHJlc3VsdCA9IG9iamVjdDsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+PiYgcmVzdWx0KQordm9pZCBET01BZ2VudDo6Z2V0QXR0cmlidXRlcyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiYgcmVzdWx0KQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRF
bGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTExOTUs
NyArMTE5NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEF0dHJpYnV0ZXMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQCiAgICAgcmVzdWx0ID0gYnVpbGRB
cnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IGludCogbm9kZUlkKQordm9pZCBET01BZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0g
bm9kZUZvck9iamVjdElkKG9iamVjdElkKTsKICAgICBpZiAobm9kZSkKQEAgLTEyMDUsNyArMTIw
NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBuCiB9CiAKIC8vIHN0YXRpYwotU3RyaW5nIElu
c3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpCitT
dHJpbmcgRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKIHsK
ICAgICBpZiAoIWRvY3VtZW50IHx8IGRvY3VtZW50LT51cmwoKS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuICIiOwpAQCAtMTIxNyw3ICsxMjE3LDcgQEAgc3RhdGljIFN0cmluZyBkb2N1bWVudEJh
c2VVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+Y29t
cGxldGVVUkwoIiIpLnN0cmluZygpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUs
IGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZT4gRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBp
bnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBpbnQgaWQgPSBiaW5kKG5v
ZGUsIG5vZGVzTWFwKTsKICAgICBTdHJpbmcgbm9kZU5hbWU7CkBAIC0xMzE4LDcgKzEzMTgsNyBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgcmV0dXJuIFdURjo6bW92ZSh2YWx1ZSk7CiB9
CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1lbnQpCitS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gRE9NQWdlbnQ6OmJ1aWxkQXJy
YXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KQogewogICAgIGF1dG8gYXR0
cmlidXRlc1ZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRl
KCk7CiAgICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0u
CkBAIC0xMzMyLDcgKzEzMzIsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QQogICAgIHJldHVy
biBXVEY6Om1vdmUoYXR0cmlidXRlc1ZhbHVlKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQg
ZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBET01BZ2VudDo6YnVpbGRBcnJh
eUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9J
ZE1hcCogbm9kZXNNYXApCiB7CiAgICAgYXV0byBjaGlsZHJlbiA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAg
IGlmIChkZXB0aCA9PSAwKSB7CkBAIC0xMzU2LDcgKzEzNTYsNyBAQCBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9y
RE9NQWdlbgogICAgIHJldHVybiBXVEY6Om1vdmUoY2hpbGRyZW4pOwogfQogCi1SZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBy
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5v
ZGUqIG5vZGUsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXBJZCkKK1JlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IERPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50
TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogbm9kZSwgY29uc3Qg
U3RyaW5nKiBvYmplY3RHcm91cElkKQogewogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyID0gcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIubGlzdGVuZXI7CiAKQEAgLTE0MDgs
NyArMTQwOCw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgcmV0dXJuIFdURjo6bW92
ZSh2YWx1ZSk7CiB9CiAgICAgCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNz
aWJpbGl0eUNoaWxkcmVuKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiYmIGF4T2JqZWN0LCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mJiBjaGlsZE5vZGVJZHMpCit2
b2lkIERPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKFJlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiYmIGF4T2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8aW50Pj4mJiBjaGlsZE5vZGVJZHMpCiB7CiAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBh
eE9iamVjdC0+Y2hpbGRyZW4oKTsKICAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKQEAgLTE0MjUs
NyArMTQyNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW4oUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+CiAgICAgfQogfQogICAgIAotUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IElu
c3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5v
ZGUqIG5vZGUpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4gRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXMoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKCFub2RlKQpAQCAt
MTY4Myw3ICsxNjgzLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICByZXR1cm4gV1RG
Ojptb3ZlKHZhbHVlKTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyRmlyc3RD
aGlsZChOb2RlKiBub2RlKQorTm9kZSogRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChOb2RlKiBu
b2RlKQogewogICAgIG5vZGUgPSBub2RlLT5maXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKGlzV2hp
dGVzcGFjZShub2RlKSkKQEAgLTE2OTEsNyArMTY5MSw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFn
ZW50Ojppbm5lckZpcnN0Q2hpbGQoTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZTsKIH0KIAot
Tm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoTm9kZSogbm9kZSkKK05v
ZGUqIERPTUFnZW50Ojppbm5lck5leHRTaWJsaW5nKE5vZGUqIG5vZGUpCiB7CiAgICAgZG8gewog
ICAgICAgICBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKQEAgLTE2OTksNyArMTY5OSw3IEBA
IE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojppbm5lck5leHRTaWJsaW5nKE5vZGUqIG5vZGUpCiAg
ICAgcmV0dXJuIG5vZGU7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojppbm5lclByZXZp
b3VzU2libGluZyhOb2RlKiBub2RlKQorTm9kZSogRE9NQWdlbnQ6OmlubmVyUHJldmlvdXNTaWJs
aW5nKE5vZGUqIG5vZGUpCiB7CiAgICAgZG8gewogICAgICAgICBub2RlID0gbm9kZS0+cHJldmlv
dXNTaWJsaW5nKCk7CkBAIC0xNzA3LDcgKzE3MDcsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2Vu
dDo6aW5uZXJQcmV2aW91c1NpYmxpbmcoTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZTsKIH0K
IAotdW5zaWduZWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyQ2hpbGROb2RlQ291bnQoTm9kZSog
bm9kZSkKK3Vuc2lnbmVkIERPTUFnZW50Ojppbm5lckNoaWxkTm9kZUNvdW50KE5vZGUqIG5vZGUp
CiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIE5vZGUqIGNoaWxkID0gaW5uZXJGaXJz
dENoaWxkKG5vZGUpOwpAQCAtMTcxOCw3ICsxNzE4LDcgQEAgdW5zaWduZWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyQ2hpbGROb2RlQ291bnQoTm9kZSogbm9kZSkKICAgICByZXR1cm4gY291bnQ7
CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUoTm9kZSogbm9k
ZSkKK05vZGUqIERPTUFnZW50Ojppbm5lclBhcmVudE5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBB
U1NFUlQobm9kZSk7CiAgICAgaWYgKGlzPERvY3VtZW50Pigqbm9kZSkpCkBAIC0xNzI2LDEzICsx
NzI2LDEzIEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUoTm9kZSog
bm9kZSkKICAgICByZXR1cm4gbm9kZS0+cGFyZW50Tm9kZSgpOwogfQogCi1ib29sIEluc3BlY3Rv
ckRPTUFnZW50Ojppc1doaXRlc3BhY2UoTm9kZSogbm9kZSkKK2Jvb2wgRE9NQWdlbnQ6OmlzV2hp
dGVzcGFjZShOb2RlKiBub2RlKQogewogICAgIC8vVE9ETzogcHVsbCBpZ25vcmVXaGl0ZXNwYWNl
IHNldHRpbmcgZnJvbSB0aGUgZnJvbnRlbmQgYW5kIHVzZSBoZXJlLgogICAgIHJldHVybiBub2Rl
ICYmIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFICYmIG5vZGUtPm5vZGVWYWx1
ZSgpLnN0cmlwV2hpdGVTcGFjZSgpLmxlbmd0aCgpID09IDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6Om1haW5GcmFtZURPTUNvbnRlbnRMb2FkZWQoKQordm9pZCBET01BZ2VudDo6bWFp
bkZyYW1lRE9NQ29udGVudExvYWRlZCgpCiB7CiAgICAgLy8gUmUtcHVzaCBkb2N1bWVudCBvbmNl
IGl0IGlzIGxvYWRlZC4KICAgICBkaXNjYXJkQmluZGluZ3MoKTsKQEAgLTE3NDAsNyArMTc0MCw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1haW5GcmFtZURPTUNvbnRlbnRMb2FkZWQoKQog
ICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9jdW1lbnRVcGRhdGVkKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZENvbW1pdExvYWQoRG9jdW1lbnQqIGRvY3VtZW50KQor
dm9pZCBET01BZ2VudDo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAg
RWxlbWVudCogZnJhbWVPd25lciA9IGRvY3VtZW50LT5vd25lckVsZW1lbnQoKTsKICAgICBpZiAo
IWZyYW1lT3duZXIpCkBAIC0xNzYxLDcgKzE3NjEsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpkaWRDb21taXRMb2FkKERvY3VtZW50KiBkb2N1bWVudCkKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50SWQsIHByZXZJZCwgV1RGOjptb3ZlKHZhbHVl
KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYg
bm9kZSkKK3ZvaWQgRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYgbm9kZSkKIHsKICAg
ICBpZiAoaXNXaGl0ZXNwYWNlKCZub2RlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc5MCw3ICsx
NzkwLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBu
b2RlKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9k
ZShOb2RlJiBub2RlKQordm9pZCBET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2Rl
KQogewogICAgIGlmIChpc1doaXRlc3BhY2UoJm5vZGUpKQogICAgICAgICByZXR1cm47CkBAIC0x
ODEyLDEyICsxODEyLDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5v
ZGUoTm9kZSYgbm9kZSkKICAgICB1bmJpbmQoJm5vZGUsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXAp
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdW
YWx1ZSkKK3ZvaWQgRE9NQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQmLCBjb25zdCBB
dG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQogewog
ICAgIG1fc3VwcHJlc3NBdHRyaWJ1dGVNb2RpZmllZEV2ZW50ID0gKG9sZFZhbHVlID09IG5ld1Zh
bHVlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCit2b2lkIERPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1l
bnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBib29sIHNob3VsZFN1cHByZXNzRXZlbnQgPSBtX3N1cHByZXNzQXR0cmlidXRlTW9k
aWZpZWRFdmVudDsKICAgICBtX3N1cHByZXNzQXR0cmlidXRlTW9kaWZpZWRFdmVudCA9IGZhbHNl
OwpAQCAtMTgzNSw3ICsxODM1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5
RE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG4KICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+YXR0cmlidXRlTW9kaWZpZWQoaWQsIG5hbWUsIHZhbHVlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NQXR0cihFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCit2b2lkIERPTUFnZW50OjpkaWRSZW1vdmVE
T01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAg
ICBpbnQgaWQgPSBib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgLy8gSWYgbm9kZSBpcyBub3Qg
bWFwcGVkIHlldCAtPiBpZ25vcmUgdGhlIGV2ZW50LgpAQCAtMTg0OCw3ICsxODQ4LDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBj
b25zdCBBdG9taWNTdHJpbmcmIG4KICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+YXR0cmlidXRl
UmVtb3ZlZChpZCwgbmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0eWxlQXR0
cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMpCit2b2lk
IERPTUFnZW50OjpzdHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50
Kj4mIGVsZW1lbnRzKQogewogICAgIGF1dG8gbm9kZUlkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PGludD46OmNyZWF0ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBl
bGVtZW50cy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKQEAgLTE4NjUsNyArMTg2NSw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVj
dG9yPEVsZW1lbnQqPiYgZWxlbWVuCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmlubGluZVN0
eWxlSW52YWxpZGF0ZWQoV1RGOjptb3ZlKG5vZGVJZHMpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRhdGEmIGNoYXJhY3RlckRh
dGEpCit2b2lkIERPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSYg
Y2hhcmFjdGVyRGF0YSkKIHsKICAgICBpbnQgaWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0
KCZjaGFyYWN0ZXJEYXRhKTsKICAgICBpZiAoIWlkKSB7CkBAIC0xODc2LDcgKzE4NzYsNyBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0
YSYgY2hhcmFjdGVyRGF0YSkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hhcmFjdGVyRGF0
YU1vZGlmaWVkKGlkLCBjaGFyYWN0ZXJEYXRhLmRhdGEoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkKK3ZvaWQgRE9NQWdl
bnQ6OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkKIHsKICAgICBpbnQgaWQgPSBt
X2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZub2RlKTsKICAgICAvLyBJZiBub2RlIGlzIG5vdCBt
YXBwZWQgeWV0IC0+IGlnbm9yZSB0aGUgZXZlbnQuCkBAIC0xODg4LDE0ICsxODg4LDE0IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkK
ICAgICBtX3JldmFsaWRhdGVTdHlsZUF0dHJUYXNrLT5zY2hlZHVsZUZvcihkb3duY2FzdDxFbGVt
ZW50Pigmbm9kZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRQdXNoU2hhZG93
Um9vdChFbGVtZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQordm9pZCBET01BZ2VudDo6ZGlk
UHVzaFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBp
bnQgaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7CiAgICAgaWYgKGhv
c3RJZCkKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNoYWRvd1Jvb3RQdXNoZWQoaG9z
dElkLCBidWlsZE9iamVjdEZvck5vZGUoJnJvb3QsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXAp
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbFBvcFNoYWRvd1Jvb3QoRWxlbWVu
dCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkKK3ZvaWQgRE9NQWdlbnQ6OndpbGxQb3BTaGFkb3dS
b290KEVsZW1lbnQmIGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgaW50IGhvc3RJZCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmhvc3QpOwogICAgIGludCByb290SWQgPSBtX2Rv
Y3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZyb290KTsKQEAgLTE5MDMsNyArMTkwMyw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxQb3BTaGFkb3dSb290KEVsZW1lbnQmIGhvc3QsIFNoYWRv
d1Jvb3QmIHJvb3QpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zaGFkb3dSb290UG9w
cGVkKGhvc3RJZCwgcm9vdElkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZnJhbWVE
b2N1bWVudFVwZGF0ZWQoRnJhbWUqIGZyYW1lKQordm9pZCBET01BZ2VudDo6ZnJhbWVEb2N1bWVu
dFVwZGF0ZWQoRnJhbWUqIGZyYW1lKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCkBAIC0xOTE5LDcgKzE5MTksNyBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpmcmFtZURvY3VtZW50VXBkYXRlZChGcmFtZSogZnJhbWUp
CiAgICAgc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2Vu
dDo6bm9kZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQorTm9kZSogRE9NQWdlbnQ6Om5vZGVG
b3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICAvLyBUaGUgcGF0aCBpcyBvZiBmb3Jt
ICIxLEhUTUwsMixCT0RZLDEsRElWIgogICAgIGlmICghbV9kb2N1bWVudCkKQEAgLTE5NTAsMTcg
KzE5NTAsMTcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0
cmluZyYgcGF0aCkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdl
bnQ6Om5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKQorTm9kZSogRE9NQWdl
bnQ6Om5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKQogewogICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVj
dGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgdmFsdWUgPSBpbmplY3RlZFNjcmlwdC5maW5kT2JqZWN0QnlJZChvYmplY3RJ
ZCk7Ci0gICAgcmV0dXJuIEluc3BlY3RvckRPTUFnZW50OjpzY3JpcHRWYWx1ZUFzTm9kZSh2YWx1
ZSk7CisgICAgcmV0dXJuIERPTUFnZW50OjpzY3JpcHRWYWx1ZUFzTm9kZSh2YWx1ZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBub2RlSWQpCit2b2lk
IERPTUFnZW50OjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHBhdGgsIGludCogbm9kZUlkKQogewogICAgIGlmIChOb2RlKiBu
b2RlID0gbm9kZUZvclBhdGgocGF0aCkpCiAgICAgICAgICpub2RlSWQgPSBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKG5vZGUpOwpAQCAtMTk2OCw3ICsxOTY4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5vIG5vZGUgd2l0aCBn
aXZlbiBwYXRoIGZvdW5kIik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2Rl
QnlCYWNrZW5kSWRUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgQmFja2VuZE5v
ZGVJZCBiYWNrZW5kTm9kZUlkLCBpbnQqIG5vZGVJZCkKK3ZvaWQgRE9NQWdlbnQ6OnB1c2hOb2Rl
QnlCYWNrZW5kSWRUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgQmFja2VuZE5v
ZGVJZCBiYWNrZW5kTm9kZUlkLCBpbnQqIG5vZGVJZCkKIHsKICAgICBpZiAoIW1fYmFja2VuZElk
VG9Ob2RlLmNvbnRhaW5zKGJhY2tlbmROb2RlSWQpKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0g
QVNDSUlMaXRlcmFsKCJObyBub2RlIHdpdGggZ2l2ZW4gYmFja2VuZCBpZCBmb3VuZCIpOwpAQCAt
MTk4NSw3ICsxOTg1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeUJhY2tl
bmRJZFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLAogICAgIH0KIH0KIAotUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXApCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBE
T01BZ2VudDo6cmVzb2x2ZU5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAg
aWYgKCFmcmFtZSkKQEAgLTE5OTYsMTAgKzE5OTYsMTAgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVO
b2QKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KEluc3BlY3RvckRPTUFn
ZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZSwgbm9kZSksIG9iamVjdEdyb3VwKTsK
KyAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChET01BZ2VudDo6bm9kZUFzU2Ny
aXB0VmFsdWUoc2NyaXB0U3RhdGUsIG5vZGUpLCBvYmplY3RHcm91cCk7CiB9CiAKLU5vZGUqIElu
c3BlY3RvckRPTUFnZW50OjpzY3JpcHRWYWx1ZUFzTm9kZShEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSB2YWx1ZSkKK05vZGUqIERPTUFnZW50OjpzY3JpcHRWYWx1ZUFzTm9kZShEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjAwNyw3ICsyMDA3LDcgQEAg
Tm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OnNjcmlwdFZhbHVlQXNOb2RlKERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlIHZhbHVlKQogICAgIHJldHVybiBKU05vZGU6OnRvV3JhcHBlZCh2YWx1ZS5qc1Zh
bHVlKCkpOwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJbnNwZWN0b3JET01BZ2VudDo6
bm9kZUFzU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQorRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgRE9NQWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNz
VG9Ob2RlKHN0YXRlLCBub2RlKSkKICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlKHN0YXRlLT52bSgpLCBKU0M6OmpzTnVsbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggOWZjOTUyNWRiN2NmYzQyNWZhZTlmMTM5Yjlm
ZGU3YjE3OWFhNmZhYi4uOTRjNjJlZTAzNTI5NzNjYWM1YjBlY2EzOTRkNjcwZTFhZGRjNjBkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTU0
LDcgKzU0LDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogfQogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgCisKIGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7CiBjbGFzcyBDb250
YWluZXJOb2RlOwogY2xhc3MgQ2hhcmFjdGVyRGF0YTsKQEAgLTY0LDEyICs2NCwxMiBAQCBjbGFz
cyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBJbnNwZWN0b3JIaXN0b3J5OwogY2xhc3Mg
SW5zcGVjdG9yT3ZlcmxheTsKLWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEhpdFRl
c3RSZXN1bHQ7CiBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7
CiBjbGFzcyBOYW1lTm9kZU1hcDsKIGNsYXNzIE5vZGU7CitjbGFzcyBQYWdlQWdlbnQ7CiBjbGFz
cyBSZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNrOwogY2xhc3MgU2hhZG93Um9vdDsKIApAQCAt
OTEsOCArOTEsOCBAQCBzdHJ1Y3QgRXZlbnRMaXN0ZW5lckluZm8gewogICAgIGNvbnN0IEV2ZW50
TGlzdGVuZXJWZWN0b3IgZXZlbnRMaXN0ZW5lclZlY3RvcjsKIH07CiAKLWNsYXNzIEluc3BlY3Rv
ckRPTUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3Bl
Y3Rvcjo6RE9NQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JET01BZ2VudCk7CitjbGFzcyBET01BZ2VudCBmaW5hbCA6IHB1YmxpYyBX
ZWJBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRE9NQWdlbnQpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0cnVjdCBET01MaXN0ZW5lciB7CkBAIC0xMDQs
OCArMTA0LDggQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkTW9kaWZ5RE9NQXR0
cihFbGVtZW50KikgPSAwOwogICAgIH07CiAKLSAgICBJbnNwZWN0b3JET01BZ2VudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yOjpJbmplY3RlZFNj
cmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9y
RE9NQWdlbnQoKTsKKyAgICBET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZUFnZW50
KiwgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7
CisgICAgdmlydHVhbCB+RE9NQWdlbnQoKTsKIAogICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0
cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTIwOSw3ICsyMDksNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiwgTm9kZSopOwogCiAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSBvdGhl
ciBhZ2VudHMuCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQoKSB7IHJldHVybiBt
X3BhZ2VBZ2VudDsgfQorICAgIFBhZ2VBZ2VudCogcGFnZUFnZW50KCkgeyByZXR1cm4gbV9wYWdl
QWdlbnQ7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JT
dHJpbmcmLCBib29sIGVuYWJsZWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBoaWdobGln
aHRDb25maWcpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGlubmVy
SGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29v
cmRpbmF0ZXMpOwogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBQ
YWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JPdmVybGF5KiBtX292
ZXJsYXk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6RE9NRnJvbnRlbmREaXNwYXRj
aGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCBmNzc4ZGQ5NjJjYjJk
ZGMxNjA2MzE3NDZhOTk1YmRkYTBhOWIyNzhiLi43N2NmZDMyNDYwMTAyZWNmMjJiYTY1Y2NkYTRk
MzhiYTdmMDU5NTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC01OSw4ICs1OSw4IEBAIHVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQsIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJh
c2UoQVNDSUlMaXRlcmFsKCJET01EZWJ1Z2dlciIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorRE9N
RGVidWdnZXJBZ2VudDo6RE9NRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBET01BZ2VudCogZG9tQWdlbnQsIERlYnVnZ2VyQWdlbnQqIGRlYnVn
Z2VyQWdlbnQpCisgICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJET01EZWJ1Z2dlciIp
LCBpbnN0cnVtZW50aW5nQWdlbnRzKQogICAgICwgbV9kb21BZ2VudChkb21BZ2VudCkKICAgICAs
IG1fZGVidWdnZXJBZ2VudChkZWJ1Z2dlckFnZW50KQogICAgICwgbV9wYXVzZUluTmV4dEV2ZW50
TGlzdGVuZXIoZmFsc2UpCkBAIC02OSw3MyArNjksNzMgQEAgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnUKICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldExpc3RlbmVyKHRoaXMpOwogfQogCi1JbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpCitET01EZWJ1
Z2dlckFnZW50Ojp+RE9NRGVidWdnZXJBZ2VudCgpCiB7CiAgICAgQVNTRVJUKCFtX2RlYnVnZ2Vy
QWdlbnQpOwotICAgIEFTU0VSVCghbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50KCkpOworICAgIEFTU0VSVCghbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5kb21E
ZWJ1Z2dlckFnZW50KCkpOwogfQogCiAvLyBCcm93c2VyIGRlYnVnZ2VyIGFnZW50IGVuYWJsZWQg
b25seSB3aGVuIEpTIGRlYnVnZ2VyIGlzIGVuYWJsZWQuCi12b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OmRlYnVnZ2VyV2FzRW5hYmxlZCgpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OmRl
YnVnZ2VyV2FzRW5hYmxlZCgpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+
c2V0RE9NRGVidWdnZXJBZ2VudCh0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50OjpkZWJ1Z2dlcldhc0Rpc2FibGVkKCkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6ZGVi
dWdnZXJXYXNEaXNhYmxlZCgpCiB7CiAgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OnN0ZXBJbnRvKCkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6c3Rl
cEludG8oKQogewogICAgIG1fcGF1c2VJbk5leHRFdmVudExpc3RlbmVyID0gdHJ1ZTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSgpCit2b2lkIERPTURlYnVn
Z2VyQWdlbnQ6OmRpZFBhdXNlKCkKIHsKICAgICBtX3BhdXNlSW5OZXh0RXZlbnRMaXN0ZW5lciA9
IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQor
dm9pZCBET01EZWJ1Z2dlckFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBtX2luc3RydW1lbnRpbmdB
Z2VudHMtPnNldEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQobnVsbHB0cik7CisgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5zZXRET01EZWJ1Z2dlckFnZW50KG51bGxwdHIpOwogICAgIGNsZWFy
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCos
IEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAg
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3I6OkRPTURlYnVnZ2VyQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uKQordm9pZCBET01EZWJ1Z2dlckFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCiAgICAgZGlzYWJsZSgpOwogfQogCi12b2lk
IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCit2b2lkIERPTURlYnVn
Z2VyQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCiB7CiAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRMaXN0
ZW5lcihudWxscHRyKTsKICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBudWxscHRyOwogfQogCi12b2lk
IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpc2NhcmRCaW5kaW5ncygpCit2b2lkIERPTURl
YnVnZ2VyQWdlbnQ6OmRpc2NhcmRCaW5kaW5ncygpCiB7CiAgICAgbV9kb21CcmVha3BvaW50cy5j
bGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldEV2ZW50TGlz
dGVuZXJCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5h
bWUpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OnNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgc2V0QnJl
YWtwb2ludChlcnJvciwgU3RyaW5nKGxpc3RlbmVyRXZlbnRDYXRlZ29yeVR5cGUpICsgZXZlbnRO
YW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRJbnN0cnVtZW50
YXRpb25CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5h
bWUpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OnNldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQo
RXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBzZXRC
cmVha3BvaW50KGVycm9yLCBTdHJpbmcoaW5zdHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUp
ICsgZXZlbnROYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2
b2lkIERPTURlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBj
b25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBpZiAoZXZlbnROYW1lLmlzRW1wdHkoKSkg
ewogICAgICAgICBlcnJvciA9IEFTQ0lJTGl0ZXJhbCgiRXZlbnQgbmFtZSBpcyBlbXB0eSIpOwpA
QCAtMTQ1LDE3ICsxNDUsMTcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJgogICAgIG1fZXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnRzLmFkZChldmVudE5hbWUpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KEVycm9yU3RyaW5n
JiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3Qg
U3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgcmVtb3ZlQnJlYWtwb2ludChlcnJvciwgU3RyaW5n
KGxpc3RlbmVyRXZlbnRDYXRlZ29yeVR5cGUpICsgZXZlbnROYW1lKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVJbnN0cnVtZW50YXRpb25CcmVha3BvaW50KEVy
cm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIERPTURlYnVn
Z2VyQWdlbnQ6OnJlbW92ZUluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVy
cm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICByZW1vdmVCcmVha3BvaW50KGVy
cm9yLCBTdHJpbmcoaW5zdHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUpICsgZXZlbnROYW1l
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50
KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIERPTURl
YnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBT
dHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBpZiAoZXZlbnROYW1lLmlzRW1wdHkoKSkgewogICAg
ICAgICBlcnJvciA9IEFTQ0lJTGl0ZXJhbCgiRXZlbnQgbmFtZSBpcyBlbXB0eSIpOwpAQCAtMTY1
LDcgKzE2NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtw
b2ludChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluCiAgICAgbV9ldmVudExpc3RlbmVy
QnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihOb2RlJiBub2RlKQordm9pZCBET01E
ZWJ1Z2dlckFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKE5vZGUmIG5vZGUpCiB7CiAgICAg
aWYgKGhhc0JyZWFrcG9pbnQoJm5vZGUsIEF0dHJpYnV0ZU1vZGlmaWVkKSkgewogICAgICAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwpAQCAtMTc0LDMwICsxNzQsMzAgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojpk
aWRJbnZhbGlkYXRlU3R5bGVBdHRyKE5vZGUmIG5vZGUpCiAgICAgfQogfQogCi12b2lkIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYgbm9kZSkKK3ZvaWQg
RE9NRGVidWdnZXJBZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogewogICAgIGlm
IChtX2RvbUJyZWFrcG9pbnRzLnNpemUoKSkgewotICAgICAgICB1aW50MzJfdCBtYXNrID0gbV9k
b21CcmVha3BvaW50cy5nZXQoSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSgmbm9k
ZSkpOworICAgICAgICB1aW50MzJfdCBtYXNrID0gbV9kb21CcmVha3BvaW50cy5nZXQoRE9NQWdl
bnQ6OmlubmVyUGFyZW50Tm9kZSgmbm9kZSkpOwogICAgICAgICB1aW50MzJfdCBpbmhlcml0YWJs
ZVR5cGVzTWFzayA9IChtYXNrIHwgKG1hc2sgPj4gZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hp
ZnQpKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzazsKICAgICAgICAgaWYgKGlu
aGVyaXRhYmxlVHlwZXNNYXNrKQogICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRz
KCZub2RlLCBpbmhlcml0YWJsZVR5cGVzTWFzaywgdHJ1ZSk7CiAgICAgfQogfQogCi12b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkKK3Zv
aWQgRE9NRGVidWdnZXJBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogewogICAg
IGlmIChtX2RvbUJyZWFrcG9pbnRzLnNpemUoKSkgewogICAgICAgICAvLyBSZW1vdmUgc3VidHJl
ZSBicmVha3BvaW50cy4KICAgICAgICAgbV9kb21CcmVha3BvaW50cy5yZW1vdmUoJm5vZGUpOwot
ICAgICAgICBWZWN0b3I8Tm9kZSo+IHN0YWNrKDEsIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZp
cnN0Q2hpbGQoJm5vZGUpKTsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiBzdGFjaygxLCBET01BZ2Vu
dDo6aW5uZXJGaXJzdENoaWxkKCZub2RlKSk7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBzdGFjay5sYXN0KCk7CiAgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7
CiAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBtX2RvbUJyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKLSAgICAgICAgICAgIHN0YWNr
LmFwcGVuZChJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJGaXJzdENoaWxkKG5vZGUpKTsKLSAgICAg
ICAgICAgIHN0YWNrLmFwcGVuZChJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhu
b2RlKSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGls
ZChub2RlKSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoRE9NQWdlbnQ6OmlubmVyTmV4dFNp
Ymxpbmcobm9kZSkpOwogICAgICAgICB9IHdoaWxlICghc3RhY2suaXNFbXB0eSgpKTsKICAgICB9
CiB9CkBAIC0yMjUsNyArMjI1LDcgQEAgc3RhdGljIFN0cmluZyBkb21UeXBlTmFtZShpbnQgdHlw
ZSkKICAgICByZXR1cm4gIiI7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
c2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNv
bnN0IFN0cmluZyYgdHlwZVN0cmluZykKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJl
YWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgdHlwZVN0cmluZykKIHsKICAgICBOb2RlKiBub2RlID0gbV9kb21BZ2VudC0+YXNzZXJ0Tm9k
ZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC0yMzgsMTIgKzIzOCwx
MiBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbgogICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8
IHR5cGU7CiAgICAgbV9kb21CcmVha3BvaW50cy5zZXQobm9kZSwgbV9kb21CcmVha3BvaW50cy5n
ZXQobm9kZSkgfCByb290Qml0KTsKICAgICBpZiAocm9vdEJpdCAmIGluaGVyaXRhYmxlRE9NQnJl
YWtwb2ludFR5cGVzTWFzaykgewotICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gSW5zcGVjdG9y
RE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gSW5zcGVjdG9y
RE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQorICAgICAgICBmb3IgKE5vZGUqIGNo
aWxkID0gRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gRE9N
QWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQogICAgICAgICAgICAgdXBkYXRlU3VidHJl
ZUJyZWFrcG9pbnRzKGNoaWxkLCByb290Qml0LCB0cnVlKTsKICAgICB9CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK3ZvaWQg
RE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKIHsKICAgICBOb2Rl
KiBub2RlID0gbV9kb21BZ2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAg
ICBpZiAoIW5vZGUpCkBAIC0yNjAsMTIgKzI2MCwxMiBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bgogICAgICAgICBtX2RvbUJyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKIAogICAgIGlmICgocm9v
dEJpdCAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgJiYgIShtYXNrICYgKHJv
b3RCaXQgPDwgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQpKSkgewotICAgICAgICBmb3Ig
KE5vZGUqIGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsg
Y2hpbGQ7IGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQp
KQorICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChu
b2RlKTsgY2hpbGQ7IGNoaWxkID0gRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQog
ICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKGNoaWxkLCByb290Qml0LCBmYWxz
ZSk7CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNl
cnRET01Ob2RlKE5vZGUmIHBhcmVudCkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6d2lsbEluc2Vy
dERPTU5vZGUoTm9kZSYgcGFyZW50KQogewogICAgIGlmIChoYXNCcmVha3BvaW50KCZwYXJlbnQs
IFN1YnRyZWVNb2RpZmllZCkpIHsKICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnRE
YXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKQEAgLTI3NCw5ICsyNzQsOSBAQCB2b2lk
IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUmIHBhcmVu
dCkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92
ZURPTU5vZGUoTm9kZSYgbm9kZSkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURP
TU5vZGUoTm9kZSYgbm9kZSkKIHsKLSAgICBOb2RlKiBwYXJlbnROb2RlID0gSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyUGFyZW50Tm9kZSgmbm9kZSk7CisgICAgTm9kZSogcGFyZW50Tm9kZSA9IERP
TUFnZW50Ojppbm5lclBhcmVudE5vZGUoJm5vZGUpOwogICAgIGlmIChoYXNCcmVha3BvaW50KCZu
b2RlLCBOb2RlUmVtb3ZlZCkpIHsKICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnRE
YXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZGVzY3JpcHRpb25Gb3JE
T01FdmVudChub2RlLCBOb2RlUmVtb3ZlZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7CkBAIC0y
ODgsNyArMjg4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3Zl
RE9NTm9kZShOb2RlJiBub2RlKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50KQordm9pZCBET01EZWJ1
Z2dlckFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlm
IChoYXNCcmVha3BvaW50KCZlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKICAgICAgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKQEAgLTI5Nyw3ICsyOTcsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6Ondp
bGxNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgfQogfQogCi12b2lkIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSYgdGFyZ2V0
LCBpbnQgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNwZWN0b3JPYmplY3QmIGRl
c2NyaXB0aW9uKQordm9pZCBET01EZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50
KE5vZGUmIHRhcmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29sIGluc2VydGlvbiwgSW5zcGVj
dG9yT2JqZWN0JiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NFUlQoaGFzQnJlYWtwb2ludCgmdGFy
Z2V0LCBicmVha3BvaW50VHlwZSkpOwogCkBAIC0zMDUsMTUgKzMwNSwxNSBAQCB2b2lkIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSYgdGFyZ2V0
LCBpbnQgYnJlYWtwbwogICAgIGlmICgoMSA8PCBicmVha3BvaW50VHlwZSkgJiBpbmhlcml0YWJs
ZURPTUJyZWFrcG9pbnRUeXBlc01hc2spIHsKICAgICAgICAgLy8gRm9yIGluaGVyaXRhYmxlIGJy
ZWFrcG9pbnQgdHlwZXMsIHRhcmdldCBub2RlIGlzbid0IGFsd2F5cyB0aGUgc2FtZSBhcyB0aGUg
bm9kZSB0aGF0IG93bnMgYSBicmVha3BvaW50LgogICAgICAgICAvLyBUYXJnZXQgbm9kZSBtYXkg
YmUgdW5rbm93biB0byBmcm9udGVuZCwgc28gd2UgbmVlZCB0byBwdXNoIGl0IGZpcnN0LgotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB0
YXJnZXROb2RlT2JqZWN0ID0gbV9kb21BZ2VudC0+cmVzb2x2ZU5vZGUoJnRhcmdldCwgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXApOworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB0YXJnZXROb2RlT2Jq
ZWN0ID0gbV9kb21BZ2VudC0+cmVzb2x2ZU5vZGUoJnRhcmdldCwgRGVidWdnZXJBZ2VudDo6YmFj
a3RyYWNlT2JqZWN0R3JvdXApOwogICAgICAgICBkZXNjcmlwdGlvbi5zZXRWYWx1ZSgidGFyZ2V0
Tm9kZSIsIHRhcmdldE5vZGVPYmplY3QpOwogCiAgICAgICAgIC8vIEZpbmQgYnJlYWtwb2ludCBv
d25lciBub2RlLgogICAgICAgICBpZiAoIWluc2VydGlvbikKLSAgICAgICAgICAgIGJyZWFrcG9p
bnRPd25lciA9IEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUoJnRhcmdldCk7Cisg
ICAgICAgICAgICBicmVha3BvaW50T3duZXIgPSBET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKCZ0
YXJnZXQpOwogICAgICAgICBBU1NFUlQoYnJlYWtwb2ludE93bmVyKTsKICAgICAgICAgd2hpbGUg
KCEobV9kb21CcmVha3BvaW50cy5nZXQoYnJlYWtwb2ludE93bmVyKSAmICgxIDw8IGJyZWFrcG9p
bnRUeXBlKSkpIHsKLSAgICAgICAgICAgIE5vZGUqIHBhcmVudE5vZGUgPSBJbnNwZWN0b3JET01B
Z2VudDo6aW5uZXJQYXJlbnROb2RlKGJyZWFrcG9pbnRPd25lcik7CisgICAgICAgICAgICBOb2Rl
KiBwYXJlbnROb2RlID0gRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZShicmVha3BvaW50T3duZXIp
OwogICAgICAgICAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgYnJlYWtwb2ludE93bmVyID0gcGFyZW50Tm9kZTsKQEAgLTMyOSwxNCArMzI5
LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01F
dmVudChOb2RlJiB0YXJnZXQsIGludCBicmVha3BvCiAgICAgZGVzY3JpcHRpb24uc2V0U3RyaW5n
KCJ0eXBlIiwgZG9tVHlwZU5hbWUoYnJlYWtwb2ludFR5cGUpKTsKIH0KIAotYm9vbCBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGludCB0eXBlKQor
Ym9vbCBET01EZWJ1Z2dlckFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGludCB0eXBl
KQogewogICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7CiAgICAgdWludDMyX3QgZGVy
aXZlZEJpdCA9IHJvb3RCaXQgPDwgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQ7CiAgICAg
cmV0dXJuIG1fZG9tQnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgKHJvb3RCaXQgfCBkZXJpdmVkQml0
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJl
YWtwb2ludHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KQordm9pZCBE
T01EZWJ1Z2dlckFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogbm9kZSwgdWlu
dDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KQogewogICAgIHVpbnQzMl90IG9sZE1hc2sgPSBtX2Rv
bUJyZWFrcG9pbnRzLmdldChub2RlKTsKICAgICB1aW50MzJfdCBkZXJpdmVkTWFzayA9IHJvb3RN
YXNrIDw8IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0OwpAQCAtMzUwLDExICszNTAsMTEg
QEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtwb2lu
dHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm8KICAgICBpZiAoIW5ld1Jvb3RNYXNrKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6Omlu
bmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6Omlu
bmVyTmV4dFNpYmxpbmcoY2hpbGQpKQorICAgIGZvciAoTm9kZSogY2hpbGQgPSBET01BZ2VudDo6
aW5uZXJGaXJzdENoaWxkKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBET01BZ2VudDo6aW5uZXJOZXh0
U2libGluZyhjaGlsZCkpCiAgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwg
bmV3Um9vdE1hc2ssIHNldCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoYm9vbCBpc0RPTUV2ZW50LCBjb25zdCBTdHJpbmcm
IGV2ZW50TmFtZSwgYm9vbCBzeW5jaHJvbm91cykKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6cGF1
c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoYm9vbCBpc0RPTUV2ZW50LCBjb25zdCBTdHJpbmcmIGV2
ZW50TmFtZSwgYm9vbCBzeW5jaHJvbm91cykKIHsKICAgICBTdHJpbmcgZnVsbEV2ZW50TmFtZSA9
IChpc0RPTUV2ZW50ID8gbGlzdGVuZXJFdmVudENhdGVnb3J5VHlwZSA6IGluc3RydW1lbnRhdGlv
bkV2ZW50Q2F0ZWdvcnlUeXBlKSArIGV2ZW50TmFtZTsKICAgICBpZiAobV9wYXVzZUluTmV4dEV2
ZW50TGlzdGVuZXIpCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50OjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChib29sIGlzRE9NRXZlbnQsIGNvbnMK
ICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KElu
c3BlY3Rvcjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RXZlbnRMaXN0ZW5l
ciwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OnNldFhIUkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkK
K3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6c2V0WEhSQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1f
cGF1c2VPbkFsbFhIUnNFbmFibGVkID0gdHJ1ZTsKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHVybAogICAgIG1feGhyQnJlYWtwb2ludHMuYWRkKHVybCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlWEhSQnJlYWtwb2ludChFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVY
SFJCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYg
KHVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9wYXVzZU9uQWxsWEhSc0VuYWJsZWQgPSBmYWxz
ZTsKQEAgLTM5Miw3ICszOTIsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJl
bW92ZVhIUkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmCiAgICAgbV94aHJC
cmVha3BvaW50cy5yZW1vdmUodXJsKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBET01E
ZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQog
ewogICAgIFN0cmluZyBicmVha3BvaW50VVJMOwogICAgIGlmIChtX3BhdXNlT25BbGxYSFJzRW5h
YmxlZCkKQEAgLTQxNSw3ICs0MTUsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6
OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgbV9kZWJ1Z2dl
ckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yOjpEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hl
cjo6UmVhc29uOjpYSFIsIFdURjo6bW92ZShldmVudERhdGEpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpjbGVhcigpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OmNsZWFy
KCkKIHsKICAgICBtX2RvbUJyZWFrcG9pbnRzLmNsZWFyKCk7CiAgICAgbV9wYXVzZUluTmV4dEV2
ZW50TGlzdGVuZXIgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IGFmZTNjZmI5ZDMwOTU1ZGZhMzMyOTVl
ZjA5OWViZmZjYTI0N2NlNjcuLjk1YzYyOWEzODI5ZmExOTAzYzBhYTExYTEzZGNkOWM0NTIzMjdj
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQuaApAQCAtNDQsMTkgKzQ0LDE5IEBAIGNsYXNzIEluc3BlY3Rvck9iamVjdDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBET01BZ2VudDsKIGNsYXNzIEVsZW1lbnQ7
Ci1jbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBj
bGFzcyBOb2RlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okxpc3RlbmVyLCBwdWJsaWMg
SW5zcGVjdG9yOjpET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCk7CitjbGFzcyBET01E
ZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIFdlYkFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rv
cjo6RGVidWdnZXJBZ2VudDo6TGlzdGVuZXIsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTURlYnVnZ2Vy
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShET01E
ZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0
b3JET01BZ2VudCosIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIHZp
cnR1YWwgfkluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKTsKKyAgICBET01EZWJ1Z2dlckFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBET01BZ2VudCosIEluc3BlY3Rvcjo6RGVidWdnZXJBZ2Vu
dCopOworICAgIHZpcnR1YWwgfkRPTURlYnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIERPTURlYnVn
Z2VyIEFQSQogICAgIHZpcnR1YWwgdm9pZCBzZXRYSFJCcmVha3BvaW50KEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGRpc2NhcmRBZ2VudCgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAg
IC8vIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6TGlzdGVuZXIgaW1wbGVtZW50
YXRpb24uCisgICAgLy8gSW5zcGVjdG9yOjpEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lciBpbXBsZW1l
bnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgZGVidWdnZXJXYXNFbmFibGVkKCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGRlYnVnZ2VyV2FzRGlzYWJsZWQoKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RlcEludG8oKSBvdmVycmlkZTsKQEAgLTk5LDggKzk5LDggQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFn
ZW50OwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9kZWJ1Z2dlckFn
ZW50OworICAgIERPTUFnZW50KiBtX2RvbUFnZW50OworICAgIEluc3BlY3Rvcjo6RGVidWdnZXJB
Z2VudCogbV9kZWJ1Z2dlckFnZW50OwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkRPTURlYnVnZ2Vy
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgSGFzaE1hcDxOb2Rl
KiwgdWludDMyX3Q+IG1fZG9tQnJlYWtwb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCA4ZTUyM2ZmYjhjZDRmZGZmYmQ0
ZDZhNjZlMzM0ZDNmNTgwYjA3ZmJhLi44NTFlZmIzYzRjODU3YzNhOTRjZDAzYTNhYTY4ZDlhMzQ3
YzZhMjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNTIsMjcgKzUyLDI3IEBAIHVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQpCi0gICAgOiBJbnNw
ZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJET01TdG9yYWdlIiksIGluc3RydW1lbnRpbmdB
Z2VudHMpCitET01TdG9yYWdlQWdlbnQ6OkRPTVN0b3JhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlQWdlbnQqIHBhZ2VBZ2VudCkKKyAgICA6IFdl
YkFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkRPTVN0b3JhZ2UiKSwgaW5zdHJ1bWVudGluZ0FnZW50
cykKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1fZW5hYmxlZChmYWxzZSkK
IHsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dCh0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldERPTVN0b3JhZ2VBZ2VudCh0
aGlzKTsKIH0KIAotSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojp+SW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50KCkKK0RPTVN0b3JhZ2VBZ2VudDo6fkRPTVN0b3JhZ2VBZ2VudCgpCiB7Ci0gICAgbV9p
bnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQobnVsbHB0cik7
CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRET01TdG9yYWdlQWdlbnQobnVsbHB0cik7
CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzID0gbnVsbHB0cjsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3ZvaWQgRE9NU3RvcmFnZUFnZW50OjpkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5k
Q2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIp
CiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rv
cjo6RE9NU3RvcmFnZUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yOjpET01TdG9yYWdlQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIERPTVN0b3JhZ2VBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewogICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFy
KCk7CkBAIC04MSwxNyArODEsMTcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmUKICAgICBkaXNh
YmxlKHVudXNlZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcmKQordm9pZCBET01TdG9yYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYp
CiB7CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQordm9pZCBET01TdG9yYWdlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwogfQogCi12b2lkIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+Pj4mIGl0ZW1zKQordm9pZCBET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJ
dGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykKIHsKICAgICBGcmFtZSogZnJh
bWU7CiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJl
YShlcnJvclN0cmluZywgc3RvcmFnZUlkLmNvcHlSZWYoKSwgZnJhbWUpOwpAQCAtMTE1LDcgKzEx
NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zCiAgICAgaXRlbXMgPSBXVEY6Om1vdmUoc3Rv
cmFnZUl0ZW1zKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0
b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQordm9pZCBET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEZyYW1lKiBm
cmFtZTsKICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VB
cmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQuY29weVJlZigpLCBmcmFtZSk7CkBAIC0xMzAsNyAr
MTMwLDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVt
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICAgICAgZXJyb3JTdHJpbmcgPSBF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24oUVVPVEFfRVhDRUVERURfRVJSKS5uYW1lOwogfQogCi12
b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3Jh
Z2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpCit2b2lkIERPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9N
U3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgRnJhbWUq
IGZyYW1lOwogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFn
ZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZC5jb3B5UmVmKCksIGZyYW1lKTsKQEAgLTE0Miw3
ICsxNDIsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFn
ZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjbwogICAgIHN0b3JhZ2VBcmVhLT5yZW1v
dmVJdGVtKGZyYW1lLCBrZXkpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpzdG9yYWdlSWQoU3RvcmFnZSogc3RvcmFnZSkKK1N0cmluZyBET01TdG9yYWdlQWdlbnQ6OnN0
b3JhZ2VJZChTdG9yYWdlKiBzdG9yYWdlKQogewogICAgIEFTU0VSVChzdG9yYWdlKTsKICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdG9yYWdlLT5mcmFtZSgpLT5kb2N1bWVudCgpOwpAQCAtMTU0
LDcgKzE1NCw3IEBAIFN0cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChT
dG9yYWdlKiBzdG9yYWdlKQogICAgIHJldHVybiBzdG9yYWdlSWQoc2VjdXJpdHlPcmlnaW4uZ2V0
KCksIGlzTG9jYWxTdG9yYWdlKS0+dG9KU09OU3RyaW5nKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xv
Y2FsU3RvcmFnZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9y
YWdlSWQ+IERPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2Vj
dXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4tPnRvUmF3U3RyaW5nKCkpCkBAIC0xNjIsNyArMTYy
LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4g
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG8KICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcm
IG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luLCBQYWdlKikKK3ZvaWQgRE9NU3RvcmFnZUFnZW50OjpkaWREaXNwYXRjaERPTVN0
b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbiwgUGFnZSopCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5kRGlzcGF0
Y2hlciB8fCAhbV9lbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC0xNzksNyArMTc5LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50
KGNvbnN0IFN0cmluZyYga2V5LCBjb24KICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRv
bVN0b3JhZ2VJdGVtVXBkYXRlZChpZCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCi1S
ZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VB
cmVhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUpCitSZWZQdHI8U3RvcmFnZUFyZWE+
IERPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFy
Z2V0RnJhbWUpCiB7CiAgICAgU3RyaW5nIHNlY3VyaXR5T3JpZ2luOwogICAgIGJvb2wgaXNMb2Nh
bFN0b3JhZ2UgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuaAppbmRleCBiZWJkMWVmNDEyZjJkYmZiNjEzYTcxM2FiZDQ4
YTcyNDQyZDM2YjI2Li5mNmViNzU2N2Y2YzQyZjY1NzZhOWY1MGZmMjVjOTJiZDQ3YTg4YzlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudC5oCkBAIC00MywxOSArNDMsMTkgQEAgY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50Owog
Y2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQYWdlQWdlbnQ7
CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFN0b3JhZ2U7CiAKIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQgZmluYWwgOiBw
dWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01TdG9yYWdlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK2NsYXNzIERPTVN0b3JhZ2VBZ2VudCBmaW5hbCA6IHB1
YmxpYyBXZWJBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTVN0b3JhZ2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVj
dG9yUGFnZUFnZW50Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KCk7
CisgICAgRE9NU3RvcmFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlQWdlbnQqKTsK
KyAgICB2aXJ0dWFsIH5ET01TdG9yYWdlQWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikg
b3ZlcnJpZGU7CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUmVmUHRy
PFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYsIEZyYW1lKiYpOwogCi0gICAgSW5zcGVjdG9y
UGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkRPTVN0b3JhZ2VGcm9udGVuZERpc3BhdGNoZXI+
IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkRPTVN0b3JhZ2VC
YWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBib29sIG1fZW5hYmxl
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFn
ZW50LmNwcAppbmRleCA5MTM0ZGZlNDdjNzljNmM2ZWY0NDEzNDQ1MjBiNzA0NmUxZDVkYzEzLi45
NjFiZTQwMjY3YTk3MGY0MmNkZjYwMWJiM2JkNTQzNWFjNDgxODUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBAIC0xOTEs
NyArMTkxLDcgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UKIAotdm9pZCBJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpkaWRPcGVuRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbikKK3ZvaWQgRGF0YWJhc2VBZ2VudDo6ZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQ
dHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CiAgICAgaWYgKEluc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UqIHJlc291cmNlID0gZmluZEJ5RmlsZU5hbWUoZGF0YWJhc2UtPmZpbGVOYW1l
KCkpKSB7CiAgICAgICAgIHJlc291cmNlLT5zZXREYXRhYmFzZShkYXRhYmFzZSk7CkBAIC0yMDUs
MzAgKzIwNSwzMCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpZE9wZW5EYXRhYmFz
ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29ucwogICAgICAgICByZXNvdXJjZS0+
YmluZChtX2Zyb250ZW5kRGlzcGF0Y2hlci5nZXQoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudDo6Y2xlYXJSZXNvdXJjZXMoKQordm9pZCBEYXRhYmFzZUFnZW50OjpjbGVhclJl
c291cmNlcygpCiB7CiAgICAgbV9yZXNvdXJjZXMuY2xlYXIoKTsKIH0KIAotSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudDo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzKQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJh
bCgiRGF0YWJhc2UiKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKK0RhdGFiYXNlQWdlbnQ6OkRhdGFi
YXNlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKKyAgICA6
IFdlYkFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIGluc3RydW1lbnRpbmdBZ2Vu
dHMpCiAgICAgLCBtX2VuYWJsZWQoZmFsc2UpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRz
LT5zZXRJbnNwZWN0b3JEYXRhYmFzZUFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy0+c2V0RGF0YWJhc2VBZ2VudCh0aGlzKTsKIH0KIAotSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6fkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKQorRGF0YWJhc2VBZ2VudDo6fkRhdGFiYXNlQWdl
bnQoKQogewotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yRGF0YWJhc2VB
Z2VudChudWxscHRyKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldERhdGFiYXNlQWdl
bnQobnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENo
YW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQor
dm9pZCBEYXRhYmFzZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6RGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI+
KGZyb250ZW5kQ2hhbm5lbCk7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3Rvcjo6
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIERhdGFiYXNlQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CiAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci5jbGVhcigpOwpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpE
aXNjb25uZWN0CiAgICAgZGlzYWJsZSh1bnVzZWQpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCit2b2lkIERhdGFiYXNlQWdlbnQ6OmVuYWJs
ZShFcnJvclN0cmluZyYpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjQ4LDE0ICsyNDgsMTQgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcmKQogICAgICAgICBpdC0+dmFsdWUtPmJpbmQobV9mcm9udGVuZERpc3BhdGNo
ZXIuZ2V0KCkpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoRXJy
b3JTdHJpbmcmKQordm9pZCBEYXRhYmFzZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKIHsK
ICAgICBpZiAoIW1fZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fZW5hYmxlZCA9IGZh
bHNlOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVO
YW1lcyhFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBuYW1lcykKK3ZvaWQgRGF0YWJh
c2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4mIG5hbWVzKQogewogICAgIGlmICghbV9lbmFibGVkKSB7CiAgICAgICAgIGVycm9yID0g
QVNDSUlMaXRlcmFsKCJEYXRhYmFzZSBhZ2VudCBpcyBub3QgZW5hYmxlZCIpOwpAQCAtMjczLDcg
KzI3Myw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5h
bWVzKEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyCiAgICAgfQogfQogCi12b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+
JiYgcmVxdWVzdENhbGxiYWNrKQordm9pZCBEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBS
ZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBpZiAoIW1f
ZW5hYmxlZCkgewogICAgICAgICByZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJEYXRhYmFz
ZSBhZ2VudCBpcyBub3QgZW5hYmxlZCIpOwpAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VJZCwKICAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oV1RGOjptb3ZlKGNhbGxiYWNr
KSwgV1RGOjptb3ZlKGVycm9yQ2FsbGJhY2spLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7
CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKERhdGFiYXNl
KiBkYXRhYmFzZSkKK1N0cmluZyBEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBk
YXRhYmFzZSkKIHsKICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAg
ICAgICAgIGlmIChpdC0+dmFsdWUtPmRhdGFiYXNlKCkgPT0gZGF0YWJhc2UpCkBAIC0zMDEsNyAr
MzAxLDcgQEAgU3RyaW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0YWJh
c2UqIGRhdGFiYXNlKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotSW5zcGVjdG9yRGF0YWJh
c2VSZXNvdXJjZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZmluZEJ5RmlsZU5hbWUoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSkKK0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqIERhdGFiYXNlQWdl
bnQ6OmZpbmRCeUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCiB7CiAgICAgZm9yIChE
YXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoaXQtPnZhbHVlLT5k
YXRhYmFzZSgpLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKQpAQCAtMzEwLDcgKzMxMCw3IEBAIElu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZp
bGVOYW1lKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRGF0YWJhc2Uq
IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQoY29uc3QgU3RyaW5nJiBkYXRh
YmFzZUlkKQorRGF0YWJhc2UqIERhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZUlkKQogewogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBp
dCA9IG1fcmVzb3VyY2VzLmZpbmQoZGF0YWJhc2VJZCk7CiAgICAgaWYgKGl0ID09IG1fcmVzb3Vy
Y2VzLmVuZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRhdGFiYXNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmgKaW5kZXggM2ZkYWEyY2I3NDE4ZTUyMzBhMmZmOWJhYWQwNGY2ZTZmM2YyYWQ1
NC4uOGRlZGJiZTM2ZWRhNTJkY2U2OTgzMTc5ZTIwMzJlMTJlMDBhOGZlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBAIC00Nywx
MSArNDcsMTEgQEAgY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIAogdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CitjbGFzcyBEYXRhYmFzZUFnZW50IGZpbmFsIDogcHVibGljIFdl
YkFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxp
Y2l0IEluc3BlY3RvckRhdGFiYXNlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyopOwotICAgIHZp
cnR1YWwgfkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKTsKKyAgICBleHBsaWNpdCBEYXRhYmFzZUFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqKTsKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZUFnZW50KCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggOTQ5Y2JlNzBk
ZTJmN2U1MzdjOGY1Nzc2NDY1YTQ0YmE5MjE2MTA0Mi4uMjQyNTk3NmYxNWQwNWZlYjJlNjFkMjYz
MjVhNDNjY2Q2YmExODRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC01NjQsMjMgKzU2NCwyMyBAQCBwdWJsaWM6
CiAKIH0gLy8gbmFtZXNwYWNlCiAKLUluc3BlY3RvckluZGV4ZWREQkFnZW50OjpJbnNwZWN0b3JJ
bmRleGVkREJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yUGFn
ZUFnZW50KiBwYWdlQWdlbnQpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFs
KCJJbmRleGVkREIiKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKK0luZGV4ZWREQkFnZW50OjpJbmRl
eGVkREJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgUGFnZUFnZW50KiBwYWdl
QWdlbnQpCisgICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJJbmRleGVkREIiKSwgaW5z
dHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVk
U2NyaXB0TWFuYWdlcikKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKIHsKIH0KIAotSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQ6On5JbnNwZWN0b3JJbmRleGVkREJBZ2VudCgpCitJbmRleGVk
REJBZ2VudDo6fkluZGV4ZWREQkFnZW50KCkKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIp
Cit2b2lkIEluZGV4ZWREQkFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yOjpJ
bmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQordm9pZCBJbmRleGVkREJB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0
UmVhc29uKQogewogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIApAQCAtNTg4LDEx
ICs1ODgsMTEgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWMKICAgICBkaXNhYmxlKHVudXNlZCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYp
Cit2b2lkIEluZGV4ZWREQkFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogewogfQogCi12b2lk
IEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgSW5k
ZXhlZERCQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogewogfQogCkBAIC02MTksNyArNjE5
LDcgQEAgc3RhdGljIElEQkZhY3RvcnkqIGFzc2VydElEQkZhY3RvcnkoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBEb2N1bWVudCogZG9jdW1lbnQKICAgICByZXR1cm4gaWRiRmFjdG9yeTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlTmFtZXMoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBSZWY8
UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIElu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2VOYW1lcyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1l
c0NhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3Bh
Z2VBZ2VudC0+ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUp
OwpAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVl
c3REYXRhYmFzZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uCiAgICAgaWRiUmVx
dWVzdC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBHZXREYXRh
YmFzZU5hbWVzQ2FsbGJhY2s6OmNyZWF0ZShXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSwgZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvUmF3U3RyaW5nKCkpLCBmYWxzZSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxi
YWNrKQordm9pZCBJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZU5hbWUsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJh
Y2spCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZpbmRGcmFtZVdpdGhTZWN1
cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYXNz
ZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAgLTY1NSw3ICs2NTUsNyBAQCB2b2lk
IEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdAogICAgIGRhdGFiYXNlTG9hZGVyLT5zdGFydChpZGJGYWN0b3J5
LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2VOYW1lKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
TmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhO
YW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxs
YmFjaykKK3ZvaWQgSW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0
Q2FsbGJhY2spCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZpbmRGcmFtZVdp
dGhTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAgLTc2MCw3ICs3NjAsNyBA
QCBwcml2YXRlOgogICAgIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENh
bGxiYWNrOwogfTsKIAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6Y2xlYXJPYmplY3RT
dG9yZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3Jl
TmFtZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCit2
b2lkIEluZGV4ZWREQkFnZW50OjpjbGVhck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9y
ZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3Bh
Z2VBZ2VudC0+ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQuaAppbmRleCA0ZDJjMTY5ODIyOGQ2MzNkMzlkZjI5ODk1YjcwYmRjOTAxY2EwMjBlLi44MjZj
YWFjM2ViNGNiZTQxYThjNGYyMTM4YTRiNmQ5ZWU1ZDQxYzAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaApAQCAtNDMsMTQgKzQz
LDE0IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CitjbGFzcyBQYWdlQWdlbnQ7CiAKIHR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JJbmRleGVkREJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkluZGV4
ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitjbGFzcyBJbmRleGVkREJBZ2VudCBmaW5h
bCA6IHB1YmxpYyBXZWJBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiwgSW5zcGVjdG9yUGFnZUFnZW50Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQoKTsKKyAgICBJbmRleGVkREJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVj
dG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBQYWdlQWdlbnQqKTsKKyAgICB2aXJ0dWFsIH5J
bmRleGVkREJBZ2VudCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKQEAgLTY1
LDcgKzY1LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKLSAgICBJbnNwZWN0b3JQYWdl
QWdlbnQqIG1fcGFnZUFnZW50OworICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwCmluZGV4IDljMDFhNDNkNmM4Y2Y5YjMzMWNiOGMyYmQyZjY3
YzYzMzZhZDVlMWUuLjVjZTJjNmEzNGE2MmNkODczYzk2ZjAwNDBlMjUxZTM1ZWQ1N2I0YWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIEZyYW1lKiBmcmFtZUZvclNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1l
LCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIEluc3BlY3RvclBhZ2VBZ2VudCogcGFn
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKTsKKyAgICBQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCk7CiAg
ICAgaWYgKHBhZ2VBZ2VudCkKICAgICAgICAgcGFnZUFnZW50LT5kaWRDbGVhcldpbmRvd09iamVj
dEluV29ybGQoJmZyYW1lLCB3b3JsZCk7CiAgICAgaWYgKFBhZ2VEZWJ1Z2dlckFnZW50KiBkZWJ1
Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlRGVidWdnZXJBZ2VudCgpKSB7CkBA
IC0xMjMsNjQgKzEyMyw2NCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkSW1wbChJbnN0cnVtZW50aW5nQWdlbgogCiBib29sIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6aXNEZWJ1Z2dlclBhdXNlZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJB
Z2VudCogZGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRGVidWdn
ZXJBZ2VudCgpKQorICAgIGlmIChEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5kZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIHJldHVybiBkZWJ1Z2dlckFn
ZW50LT5pc1BhdXNlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlJiBwYXJlbnQpCiB7Ci0gICAgaWYgKEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Lmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoRE9NRGVidWdnZXJBZ2VudCog
ZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tRGVidWdnZXJBZ2VudCgp
KQogICAgICAgICBkb21EZWJ1Z2dlckFnZW50LT53aWxsSW5zZXJ0RE9NTm9kZShwYXJlbnQpOwog
fQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zZXJ0RE9NTm9kZUltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgTm9kZSYgbm9kZSkKIHsK
LSAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmRvbUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5kaWRJbnNlcnRE
T01Ob2RlKG5vZGUpOwotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1
Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
KCkpCisgICAgaWYgKERPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmRvbURlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2Vu
dC0+ZGlkSW5zZXJ0RE9NTm9kZShub2RlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxSZW1vdmVET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBOb2RlJiBub2RlKQogewotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JE
T01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKERPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2Vy
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbURlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAg
ZG9tRGVidWdnZXJBZ2VudC0+d2lsbFJlbW92ZURPTU5vZGUobm9kZSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVET01Ob2RlSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlJiBub2RlKQogewotICAgIGlmIChJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKERPTURlYnVnZ2VyQWdl
bnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbURlYnVnZ2VyQWdl
bnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+ZGlkUmVtb3ZlRE9NTm9kZShub2RlKTsK
LSAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmRvbUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5kaWRSZW1vdmVE
T01Ob2RlKG5vZGUpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1v
ZGlmeURPTUF0dHJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMs
IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmV3VmFsdWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21E
ZWJ1Z2dlckFnZW50LT53aWxsTW9kaWZ5RE9NQXR0cihlbGVtZW50KTsKLSAgICBpZiAoSW5zcGVj
dG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01B
Z2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LmRvbUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT53aWxsTW9kaWZ5RE9NQXR0cihlbGVtZW50
LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkTW9kaWZ5RE9NQXR0ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGlu
Z0FnZW50cywgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9t
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYg
KERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAg
ICAgICAgZG9tQWdlbnQtPmRpZE1vZGlmeURPTUF0dHIoZWxlbWVudCwgbmFtZSwgdmFsdWUpOwog
fQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlRE9NQXR0ckltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2Vu
dCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisg
ICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQo
KSkKICAgICAgICAgZG9tQWdlbnQtPmRpZFJlbW92ZURPTUF0dHIoZWxlbWVudCwgbmFtZSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRy
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlJiBub2Rl
KQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPmRpZElu
dmFsaWRhdGVTdHlsZUF0dHIobm9kZSk7Ci0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21E
ZWJ1Z2dlckFnZW50LT5kaWRJbnZhbGlkYXRlU3R5bGVBdHRyKG5vZGUpOwogfQogCkBAIC0xOTIs
MTkgKzE5MiwxOSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVXaW5kb3dE
aXNjYXJkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlucwogCiB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKEluc3BlY3RvckNTU0FnZW50
KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yQ1NTQWdlbnQoKSkKKyAg
ICBpZiAoQ1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5jc3NBZ2VudCgp
KQogICAgICAgICBjc3NBZ2VudC0+bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290SW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBFbGVtZW50JiBob3N0LCBTaGFkb3dS
b290JiByb290KQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBk
b21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdl
bnQtPmRpZFB1c2hTaGFkb3dSb290KGhvc3QsIHJvb3QpOwogfQogCiB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbFBvcFNoYWRvd1Jvb3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIEVsZW1lbnQmIGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7
Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMuaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAoRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5kb21BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+d2lsbFBvcFNo
YWRvd1Jvb3QoaG9zdCwgcm9vdCk7CiB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlTmFtZWRGbG93SW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmlu
c3BlY3RvckNTU0FnZW50KCkpCisgICAgaWYgKENTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuY3NzQWdlbnQoKSkKICAgICAgICAgY3NzQWdlbnQtPmRpZENyZWF0ZU5hbWVk
RmxvdygqZG9jdW1lbnQsIG5hbWVkRmxvdyk7CiB9CiAKQEAgLTIyMiw5MSArMjIyLDkxIEBAIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlTmFtZWRGbG93SW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiBpbnN0CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yQ1NTQWdlbnQoKSkKKyAgICBpZiAoQ1NTQWdlbnQqIGNzc0FnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5jc3NBZ2VudCgpKQogICAgICAgICBjc3NBZ2VudC0+d2lsbFJl
bW92ZU5hbWVkRmxvdygqZG9jdW1lbnQsIG5hbWVkRmxvdyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VSZWdpb25PdmVyc2V0SW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5h
bWVkRmxvdyYgbmFtZWRGbG93KQogewotICAgIGlmIChJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckNTU0FnZW50KCkpCisgICAgaWYgKENT
U0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuY3NzQWdlbnQoKSkKICAgICAg
ICAgY3NzQWdlbnQtPmRpZENoYW5nZVJlZ2lvbk92ZXJzZXQoZG9jdW1lbnQsIG5hbWVkRmxvdyk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWdpc3Rlck5hbWVkRmxv
d0NvbnRlbnRFbGVtZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93LCBOb2Rl
JiBjb250ZW50RWxlbWVudCwgTm9kZSogbmV4dENvbnRlbnRFbGVtZW50KQogewotICAgIGlmIChJ
bnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3Rv
ckNTU0FnZW50KCkpCisgICAgaWYgKENTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuY3NzQWdlbnQoKSkKICAgICAgICAgY3NzQWdlbnQtPmRpZFJlZ2lzdGVyTmFtZWRGbG93
Q29udGVudEVsZW1lbnQoZG9jdW1lbnQsIG5hbWVkRmxvdywgY29udGVudEVsZW1lbnQsIG5leHRD
b250ZW50RWxlbWVudCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRV
bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93
JiBuYW1lZEZsb3csIE5vZGUmIGNvbnRlbnRFbGVtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JD
U1NBZ2VudCogY3NzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckNTU0FnZW50
KCkpCisgICAgaWYgKENTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuY3Nz
QWdlbnQoKSkKICAgICAgICAgY3NzQWdlbnQtPmRpZFVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50
RWxlbWVudChkb2N1bWVudCwgbmFtZWRGbG93LCBjb250ZW50RWxlbWVudCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKQogewotICAgIGlmIChJbnNwZWN0b3JE
T01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50
KCkpCisgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9t
QWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHJlc3Vs
dCwgbW9kaWZpZXJGbGFncyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRTY3JvbGxJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7
Ci0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBwYWdlQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAgICBwYWdlQWdlbnQtPmRp
ZFNjcm9sbCgpOwogfQogCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlVG91
Y2hFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgTm9k
ZSYgbm9kZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9t
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbUFnZW50KCkpCiAgICAgICAgIHJldHVybiBk
b21BZ2VudC0+aGFuZGxlVG91Y2hFdmVudChub2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFn
ZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
ZG9tQWdlbnQoKSkKICAgICAgICAgcmV0dXJuIGRvbUFnZW50LT5oYW5kbGVNb3VzZVByZXNzKCk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Zm9yY2VQc2V1ZG9TdGF0ZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0Fn
ZW50cywgRWxlbWVudCYgZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1
ZG9TdGF0ZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JDU1NBZ2VudCgpKQorICAgIGlmIChDU1NBZ2VudCogY3Nz
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmNzc0FnZW50KCkpCiAgICAgICAgIHJldHVybiBj
c3NBZ2VudC0+Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBwc2V1ZG9TdGF0ZSk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVy
RGF0YU1vZGlmaWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQogewotICAgIGlmIChJbnNwZWN0b3JET01B
Z2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkp
CisgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdl
bnQoKSkKICAgICAgICAgZG9tQWdlbnQtPmNoYXJhY3RlckRhdGFNb2RpZmllZChjaGFyYWN0ZXJE
YXRhKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0
cFJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGNv
bnN0IFN0cmluZyYgdXJsKQogewotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBk
b21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50KCkpCisgICAgaWYgKERPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLmRvbURlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdn
ZXJBZ2VudC0+d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCh1cmwpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zdGFsbFRpbWVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2lu
Z2xlU2hvdCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBwYXVzZU9u
TmF0aXZlRXZlbnRJZk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBmYWxzZSwgc2V0VGltZXJF
dmVudE5hbWUsIHRydWUpOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGlu
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisg
ICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LnRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkSW5zdGFsbFRpbWVy
KHRpbWVySWQsIHRpbWVvdXQsIHNpbmdsZVNob3QsIGZyYW1lRm9yU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dChjb250ZXh0KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRS
ZW1vdmVUaW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywg
aW50IHRpbWVySWQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgcGF1
c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgZmFsc2UsIGNsZWFy
VGltZXJFdmVudE5hbWUsIHRydWUpOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0
aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50
KCkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkUmVtb3Zl
VGltZXIodGltZXJJZCwgZnJhbWVGb3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpKTsK
IH0KIAogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbENhbGxGdW5jdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVu
dGluZ0FnZW50cywgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElk
ID0gMDsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKSB7CisgICAgaWYgKFRp
bWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5l
QWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsQ2FsbEZ1bmN0aW9uKHNjcmlw
dE5hbWUsIHNjcmlwdExpbmUsIGZyYW1lRm9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0
KSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CiAgICAg
fQpAQCAtMzE1LDE0ICszMTUsMTQgQEAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlvbkltcGwoSW4KIAogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbkltcGwoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKKyAgICBpZiAoVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQogICAgICAg
ICB0aW1lbGluZUFnZW50LT5kaWRDYWxsRnVuY3Rpb24oZnJhbWVGb3JTY3JpcHRFeGVjdXRpb25D
b250ZXh0KGNvbnRleHQpKTsKIH0KIAogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2
ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBYTUxIdHRw
UmVxdWVzdCYgcmVxdWVzdCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAg
ICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0
aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50
KCk7CisgICAgVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMudGltZWxpbmVBZ2VudCgpOwogICAgIGlmICh0aW1lbGluZUFnZW50ICYmIHJlcXVlc3QuaGFz
RXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCkpIHsKICAg
ICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50
KHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIHJlcXVlc3QucmVhZHlTdGF0ZSgpLCBmcmFtZUZvclNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQg
PSB0aW1lbGluZUFnZW50LT5pZCgpOwpAQCAtMzMyLDIwICszMzIsMjAgQEAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNo
WEhSUmVhZHlTdGEKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNo
WEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUmIGNvb2tpZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGlt
ZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQorICAgIGlmIChUaW1l
bGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkp
CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2
ZW50KCk7CiB9CiAKIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEV2ZW50JiBldmVu
dCwgYm9vbCBoYXNFdmVudExpc3RlbmVycykKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0g
MDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CisgICAgVGltZWxpbmVBZ2VudCog
dGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpOwogICAg
IGlmICh0aW1lbGluZUFnZW50ICYmIGhhc0V2ZW50TGlzdGVuZXJzKSB7CiAgICAgICAgIHRpbWVs
aW5lQWdlbnQtPndpbGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBkb2N1bWVudC5mcmFtZSgpKTsKICAg
ICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9CiAjaWYg
RU5BQkxFKFdFQl9SRVBMQVkpCi0gICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBp
ZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlB
Z2VudCgpKQogICAgICAgICByZXBsYXlBZ2VudC0+d2lsbERpc3BhdGNoRXZlbnQoZXZlbnQsIGRv
Y3VtZW50LmZyYW1lKCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50SWQpOwpAQCAtMzY1
LDIwICszNjUsMjAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2
ZW50SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KIAogdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFn
ZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCisgICAg
aWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQo
Y29va2llKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hFdmVudCgpOwogfQog
CiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyYgd2luZG93KQog
ewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5l
QWdlbnQoKTsKKyAgICBUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy50aW1lbGluZUFnZW50KCk7CiAgICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYgd2luZG93
Lmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50LnR5cGUoKSkpIHsKICAgICAgICAgdGltZWxpbmVBZ2Vu
dC0+d2lsbERpc3BhdGNoRXZlbnQoZXZlbnQsIHdpbmRvdy5mcmFtZSgpKTsKICAgICAgICAgdGlt
ZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9CiAjaWYgRU5BQkxFKFdF
Ql9SRVBMQVkpCi0gICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5
QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQog
ICAgICAgICByZXBsYXlBZ2VudC0+d2lsbERpc3BhdGNoRXZlbnQoZXZlbnQsIHdpbmRvdy5mcmFt
ZSgpKTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUo
aW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKQEAgLTM4NiwxNCArMzg2LDE0
IEBAIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWREaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSYgY29va2llKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50
KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCisgICAgaWYg
KFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29v
a2llKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hFdmVudCgpOwogfQogCiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsRXZhbHVhdGVTY3JpcHRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMsIEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKQog
ewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1l
bGluZUFnZW50KCkpIHsKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdl
bnQtPndpbGxFdmFsdWF0ZVNjcmlwdCh1cmwsIGxpbmVOdW1iZXIsIGZyYW1lKTsKICAgICAgICAg
dGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9CkBAIC00MDIsMTMg
KzQwMiwxMyBAQCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHRJbXBsKAogCiB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSYgY29va2llLCBGcmFtZSYgZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29v
a2llKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGlt
ZWxpbmVBZ2VudChjb29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRFdmFsdWF0ZVNj
cmlwdChmcmFtZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRz
RW5hYmxlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgYm9v
bCBpc0VuYWJsZWQpCiB7Ci0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFn
ZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAg
ICBwYWdlQWdlbnQtPnNjcmlwdHNFbmFibGVkKGlzRW5hYmxlZCk7CiB9CiAKQEAgLTQxNyw3ICs0
MTcsNyBAQCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsRmlyZVRpbWVySW1wbChJbnN0cgogICAgIHBhdXNlT25OYXRpdmVFdmVudElm
TmVlZGVkKGluc3RydW1lbnRpbmdBZ2VudHMsIGZhbHNlLCB0aW1lckZpcmVkRXZlbnROYW1lLCBm
YWxzZSk7CiAKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBpZiAoSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVj
dG9yVGltZWxpbmVBZ2VudCgpKSB7CisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1l
bGluZUFnZW50LT53aWxsRmlyZVRpbWVyKHRpbWVySWQsIGZyYW1lRm9yU2NyaXB0RXhlY3V0aW9u
Q29udGV4dChjb250ZXh0KSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdl
bnQtPmlkKCk7CiAgICAgfQpAQCAtNDI5LDIwICs0MjksMjAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZEZpcmVUaW1lckltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ28KICAgICBpZiAoY29va2llLmlzVmFsaWQoKSkKICAgICAgICAgY2FuY2VsUGF1c2VPbk5h
dGl2ZUV2ZW50KCpjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpKTsKIAotICAgIGlmIChJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50
KGNvb2tpZSkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2
ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRmlyZVRp
bWVyKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRl
TGF5b3V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFt
ZSYgZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBp
ZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGlt
ZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRJbnZhbGlkYXRlTGF5b3V0
KGZyYW1lKTsKIH0KIAogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbExheW91dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lKQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQg
PSAwOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKKyAgICBpZiAoVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVB
Z2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxMYXlvdXQoZnJhbWUpOwogICAg
ICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KQEAgLTQ1
MSwxNyArNDUxLDE3IEBAIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxMYXlvdXRJbXBsKEluc3RydW1lCiAKIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRMYXlvdXRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSYgY29va2llLCBSZW5kZXJPYmplY3QqIHJvb3QpCiB7Ci0gICAgaWYgKEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQo
Y29va2llKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZl
VGltZWxpbmVBZ2VudChjb29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRMYXlvdXQo
cm9vdCk7CiAKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBjb29raWUu
aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFn
ZUFnZW50KiBwYWdlQWdlbnQgPSBjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpLT5wYWdlQWdl
bnQoKSkKICAgICAgICAgcGFnZUFnZW50LT5kaWRMYXlvdXQoKTsKIH0KIAogSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNo
WEhSTG9hZEV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBYTUxIdHRwUmVxdWVzdCYgcmVxdWVzdCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1l
bGluZUFnZW50KCk7CisgICAgVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpOwogICAgIGlmICh0aW1lbGluZUFnZW50ICYmIHJl
cXVlc3QuaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLmxvYWRFdmVudCkpIHsKICAgICAg
ICAgdGltZWxpbmVBZ2VudC0+d2lsbERpc3BhdGNoWEhSTG9hZEV2ZW50KHJlcXVlc3QudXJsKCks
IGZyYW1lRm9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KSk7CiAgICAgICAgIHRpbWVs
aW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CkBAIC00NzEsNDUgKzQ3MSw0NSBAQCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsRGlzcGF0Y2hYSFJMb2FkRXZlbgogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkRGlzcGF0Y2hYSFJMb2FkRXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSYgY29va2llKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1l
bGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCisgICAgaWYgKFRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkK
ICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hYSFJMb2FkRXZlbnQoKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQYWludEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsK
LSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGluZUFn
ZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkp
CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxQYWludChyZW5kZXJlci0+ZnJhbWUoKSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQYWludEltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVB
Z2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFBh
aW50KHJlbmRlcmVyLCByZWN0KTsKIAotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYg
KFBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKSkK
ICAgICAgICAgcGFnZUFnZW50LT5kaWRQYWludChyZW5kZXJlciwgcmVjdCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Nyb2xsTGF5ZXJJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAo
SW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1l
bGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAg
IHRpbWVsaW5lQWdlbnQtPndpbGxTY3JvbGwoZnJhbWUpOwogfQogCiB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsTGF5ZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlu
c3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQo
KSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMudGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRTY3JvbGwo
KTsKIH0KIAogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFJlY2FsY3VsYXRlU3R5bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlu
c3RydW1lbnRpbmdBZ2VudHMsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBpbnQgdGltZWxp
bmVBZ2VudElkID0gMDsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKSB7Cisg
ICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LnRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsUmVjYWxjdWxh
dGVTdHlsZShkb2N1bWVudC5mcmFtZSgpKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGlt
ZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdl
bnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT53aWxsUmVj
YWxjdWxhdGVTdHlsZSgpOwogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKIH0KQEAgLTUyMSwyNSAr
NTIxLDI1IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNhbGN1bGF0ZVN0
eWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50CiAgICAgCiAgICAgSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cyA9ICpjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50
cygpOwogCi0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBy
ZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGlt
ZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQogICAgICAgICB0aW1l
bGluZUFnZW50LT5kaWRSZWNhbGN1bGF0ZVN0eWxlKCk7Ci0gICAgaWYgKEluc3BlY3RvclJlc291
cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJl
c291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50
LT5kaWRSZWNhbGN1bGF0ZVN0eWxlKCk7Ci0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFn
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBp
ZiAoUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgp
KQogICAgICAgICBwYWdlQWdlbnQtPmRpZFJlY2FsY3VsYXRlU3R5bGUoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBEb2N1bWVudCYgZG9j
dW1lbnQpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAo
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxp
bmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRTY2hlZHVsZVN0eWxlUmVjYWxj
dWxhdGlvbihkb2N1bWVudC5mcmFtZSgpKTsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFNj
aGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKGRvY3VtZW50KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmFwcGx5RW11bGF0ZWRNZWRpYUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgU3RyaW5nJiBtZWRpYSkKIHsKLSAgICBpZiAoSW5zcGVj
dG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBh
Z2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMucGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+YXBwbHlFbXVsYXRlZE1lZGlh
KG1lZGlhKTsKIH0KIApAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsU2VuZFJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1l
CiAgICAgaWYgKCFsb2FkZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0
b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VB
Z2VudC0+d2lsbFNlbmRSZXF1ZXN0KGlkZW50aWZpZXIsICpsb2FkZXIsIHJlcXVlc3QsIHJlZGly
ZWN0UmVzcG9uc2UpOwogfQogCkBAIC01NTksNyArNTU5LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVySW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJgogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFya1Jlc291cmNlQXNDYWNo
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcikKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVz
b3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgp
KQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPm1hcmtSZXNvdXJj
ZUFzQ2FjaGVkKGlkZW50aWZpZXIpOwogfQogCkBAIC01NzEsNyArNTcxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUltcGwo
SW5zdHJ1bWVudGluZ0EKICAgICBpZiAoIWxvYWRlciB8fCAhY2FjaGVkUmVzb3VyY2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAg
aWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJl
c291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkTG9hZFJlc291cmNlRnJv
bU1lbW9yeUNhY2hlKCpsb2FkZXIsICpjYWNoZWRSZXNvdXJjZSk7CiB9CiAKQEAgLTU5MCw3ICs1
OTAsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNl
UmVzcG9uc2VJbXBsKGNvbnN0IEluc3BlY3RvcklucwogCiAgICAgSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cyA9ICpjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpOwog
Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VB
Z2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgp
KQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwg
KmxvYWRlciwgcmVzcG9uc2UsIHJlc291cmNlTG9hZGVyKTsKICAgICBpZiAoV2ViQ29uc29sZUFn
ZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgp
KQogICAgICAgICBjb25zb2xlQWdlbnQtPmRpZFJlY2VpdmVSZXNwb25zZShpZGVudGlmaWVyLCBy
ZXNwb25zZSk7IC8vIFRoaXMgc2hvdWxkIGNvbWUgQUZURVIgcmVzb3VyY2Ugbm90aWZpY2F0aW9u
LCBmcm9udC1lbmQgcmVsaWVzIG9uIHRoaXMuCkBAIC02MjIsNyArNjIyLDcgQEAgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeUlnbm9yZUltcGwoRnJhbWUq
IGZyYW1lLCBEb2N1bWUKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2Vp
dmVEYXRhSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoLCBp
bnQgZW5jb2RlZERhdGFMZW5ndGgpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdl
bnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNl
aXZlRGF0YShpZGVudGlmaWVyLCBkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0aCk7
CiB9CiAKQEAgLTYzMSw3ICs2MzEsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkRmluaXNoTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bQogICAgIGlm
ICghbG9hZGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRp
ZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllciwgKmxvYWRlciwgZmluaXNoVGltZSk7CiB9CiAKQEAg
LTY0MCw3ICs2NDAsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExv
YWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbgogICAgIGlmICghbG9hZGVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVz
b3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgp
KQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZEZhaWxMb2Fk
aW5nKGlkZW50aWZpZXIsICpsb2FkZXIsIGVycm9yKTsKICAgICBpZiAoV2ViQ29uc29sZUFnZW50
KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKQog
ICAgICAgICBjb25zb2xlQWdlbnQtPmRpZEZhaWxMb2FkaW5nKGlkZW50aWZpZXIsIGVycm9yKTsg
Ly8gVGhpcyBzaG91bGQgY29tZSBBRlRFUiByZXNvdXJjZSBub3RpZmljYXRpb24sIGZyb250LWVu
ZCByZWxpZXMgb24gdGhpcy4KQEAgLTY0OCwxOSArNjQ4LDE5IEBAIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5z
dHJ1bWVuCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkb2N1bWVudFRocmVhZGFi
bGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdl
bnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kb2N1bWVu
dFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudChpZGVudGlmaWVyLCBjbGll
bnQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBi
b29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYgZm9ybURhdGEsIGNvbnN0IEhUVFBIZWFkZXJN
YXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQogewotICAgIGlmIChJbnNwZWN0
b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNw
ZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3Vy
Y2VBZ2VudC0+d2lsbExvYWRYSFIoY2xpZW50LCBtZXRob2QsIHVybCwgYXN5bmMsIFdURjo6bW92
ZShmb3JtRGF0YSksIGhlYWRlcnMsIGluY2x1ZGVDcmVkZW50aWFscyk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsWEhSTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xp
ZW50KQogewotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJl
c291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNl
QWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkRmFpbFhIUkxvYWRpbmcoY2xpZW50
KTsKIH0KIApAQCAtNjY4LDU4ICs2NjgsNTggQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEZpbmlzaFhIUkxvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3QKIHsK
ICAgICBpZiAoV2ViQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLndlYkNvbnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPmRpZEZpbmlzaFhI
UkxvYWRpbmcoaWRlbnRpZmllciwgdXJsLCBzZW5kVVJMLCBzZW5kTGluZU51bWJlciwgc2VuZENv
bHVtbk51bWJlcik7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBp
ZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVz
b3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRGaW5pc2hYSFJMb2FkaW5n
KGNsaWVudCwgaWRlbnRpZmllciwgc291cmNlU3RyaW5nKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVYSFJSZXNwb25zZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewot
ICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdl
bnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkK
ICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkUmVjZWl2ZVhIUlJlc3BvbnNlKGlkZW50aWZpZXIp
OwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJTeW5jaHJv
bm91c2x5SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewot
ICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdl
bnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkK
ICAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbExvYWRYSFJTeW5jaHJvbm91c2x5KCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMb2FkWEhSU3luY2hyb25vdXNseUlt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAo
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNv
dXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAg
IHJlc291cmNlQWdlbnQtPmRpZExvYWRYSFJTeW5jaHJvbm91c2x5KCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRJbXBvcnRlZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVN0cmluZykKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPnNldElu
aXRpYWxTY3JpcHRDb250ZW50KGlkZW50aWZpZXIsIHNvdXJjZVN0cmluZyk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1BJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFN0cmluZyYg
ZGlyZWN0aXZlVGV4dCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdn
ZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpKQor
ICAgIGlmIChEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5kZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPnNjcmlwdEV4ZWN1dGlv
bkJsb2NrZWRCeUNTUChkaXJlY3RpdmVUZXh0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFJlY2VpdmVTY3JpcHRSZXNwb25zZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewotICAg
IGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAg
ICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkUmVjZWl2ZVNjcmlwdFJlc3BvbnNlKGlkZW50aWZpZXIp
OwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9tQ29udGVudExvYWRlZEV2
ZW50RmlyZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZy
YW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAg
IGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50
aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZE1hcmtET01Db250ZW50
RXZlbnQoZnJhbWUpOwogCiAgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9tQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5t
YWluRnJhbWVET01Db250ZW50TG9hZGVkKCk7CiAKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50
KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQor
ICAgIGlmIChQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFn
ZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZG9tQ29udGVudEV2ZW50RmlyZWQoKTsKIH0KIApA
QCAtNzI4LDI2ICs3MjgsMjYgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvYWRF
dmVudEZpcmVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW4KICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCog
dGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZE1hcmtM
b2FkRXZlbnQoKmZyYW1lKTsKIAogICAgIGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2Vu
dCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKSkKICAgICAgICAg
cGFnZUFnZW50LT5sb2FkRXZlbnRGaXJlZCgpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9y
UGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VB
Z2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMucGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZnJhbWVEZXRhY2hlZChmcmFtZSk7
CiAKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAg
aWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVwbGF5
QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPmZyYW1lRGV0YWNoZWQoZnJhbWUpOwogI2Vu
ZGlmCiB9CkBAIC03NjQsMzAgKzc2NCwzMCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQ29tbWl0TG9hZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudAogICAg
ICAgICBpZiAoV2ViQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLndlYkNvbnNvbGVBZ2VudCgpKQogICAgICAgICAgICAgY29uc29sZUFnZW50LT5yZXNldCgp
OwogCi0gICAgICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgICAgIGlm
IChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNv
dXJjZUFnZW50KCkpCiAgICAgICAgICAgICByZXNvdXJjZUFnZW50LT5tYWluRnJhbWVOYXZpZ2F0
ZWQoKmxvYWRlcik7CiAKLSAgICAgICAgaWYgKEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yQ1NTQWdlbnQoKSkKKyAgICAgICAgaWYgKENT
U0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuY3NzQWdlbnQoKSkKICAgICAg
ICAgICAgIGNzc0FnZW50LT5yZXNldCgpOwogCi0gICAgICAgIGlmIChJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50KiBkYXRhYmFzZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JEYXRh
YmFzZUFnZW50KCkpCisgICAgICAgIGlmIChEYXRhYmFzZUFnZW50KiBkYXRhYmFzZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5kYXRhYmFzZUFnZW50KCkpCiAgICAgICAgICAgICBkYXRhYmFz
ZUFnZW50LT5jbGVhclJlc291cmNlcygpOwogCi0gICAgICAgIGlmIChJbnNwZWN0b3JET01BZ2Vu
dCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisg
ICAgICAgIGlmIChET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbUFn
ZW50KCkpCiAgICAgICAgICAgICBkb21BZ2VudC0+c2V0RG9jdW1lbnQocGFnZS0+bWFpbkZyYW1l
KCkuZG9jdW1lbnQoKSk7CiAKLSAgICAgICAgaWYgKEluc3BlY3RvckxheWVyVHJlZUFnZW50KiBs
YXllclRyZWVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQoKSkKKyAgICAgICAgaWYgKExheWVyVHJlZUFnZW50KiBsYXllclRyZWVBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMubGF5ZXJUcmVlQWdlbnQoKSkKICAgICAgICAgICAgIGxheWVyVHJlZUFn
ZW50LT5yZXNldCgpOwogICAgIH0KIAotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERP
TUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAg
ICAgZG9tQWdlbnQtPmRpZENvbW1pdExvYWQobG9hZGVyLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsK
IAotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2VudCogcGFnZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKSkKICAgICAgICAgcGFnZUFnZW50LT5m
cmFtZU5hdmlnYXRlZChsb2FkZXIpOwogCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0gICAgaWYg
KEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
aW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICByZXBsYXlBZ2Vu
dC0+ZnJhbWVOYXZpZ2F0ZWQobG9hZGVyKTsKICNlbmRpZgogfQpAQCAtNzk2LDUwICs3OTYsNTAg
QEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lRG9jdW1lbnRVcGRhdGVkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnMKIHsKICAgICBpZiAoIWluc3RydW1lbnRpbmdBZ2Vu
dHMuaW5zcGVjdG9yRW52aXJvbm1lbnQoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9t
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50
LT5mcmFtZURvY3VtZW50VXBkYXRlZChmcmFtZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpsb2FkZXJEZXRhY2hlZEZyb21GcmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRG9jdW1lbnRMb2FkZXImIGxvYWRlcikKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQqIGluc3BlY3Rv
clBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCkpCiAgICAgICAgIGlu
c3BlY3RvclBhZ2VBZ2VudC0+bG9hZGVyRGV0YWNoZWRGcm9tRnJhbWUobG9hZGVyKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lU3RhcnRlZExvYWRpbmdJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSkKIHsK
LSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQqIGlu
c3BlY3RvclBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCkpCiAgICAg
ICAgIGluc3BlY3RvclBhZ2VBZ2VudC0+ZnJhbWVTdGFydGVkTG9hZGluZyhmcmFtZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVN0b3BwZWRMb2FkaW5nSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUpCiB7
Ci0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBp
bnNwZWN0b3JQYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAg
ICAgICBpbnNwZWN0b3JQYWdlQWdlbnQtPmZyYW1lU3RvcHBlZExvYWRpbmcoZnJhbWUpOwogfQog
CiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVTY2hlZHVsZWROYXZpZ2F0aW9u
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJh
bWUsIGRvdWJsZSBkZWxheSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0
b3JQYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQor
ICAgIGlmIChQYWdlQWdlbnQqIGluc3BlY3RvclBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMucGFnZUFnZW50KCkpCiAgICAgICAgIGluc3BlY3RvclBhZ2VBZ2VudC0+ZnJhbWVTY2hlZHVs
ZWROYXZpZ2F0aW9uKGZyYW1lLCBkZWxheSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUpCiB7Ci0gICAgaWYgKElu
c3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdl
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAgICBpbnNwZWN0
b3JQYWdlQWdlbnQtPmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oZnJhbWUpOwogfQog
CiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsUnVuSmF2YVNjcmlwdERpYWxvZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWVudGluZ0FnZW50cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIGlmIChJbnNwZWN0
b3JQYWdlQWdlbnQqIGluc3BlY3RvclBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5z
cGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKSkKICAgICAgICAgaW5zcGVjdG9yUGFn
ZUFnZW50LT53aWxsUnVuSmF2YVNjcmlwdERpYWxvZyhtZXNzYWdlKTsKICAgICByZXR1cm4gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIDApOwogfQog
CiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUnVuSmF2YVNjcmlwdERpYWxvZ0lt
cGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCiB7Ci0gICAg
aWYgKEluc3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gY29va2llLmluc3Ry
dW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2Vu
dCogaW5zcGVjdG9yUGFnZUFnZW50ID0gY29va2llLmluc3RydW1lbnRpbmdBZ2VudHMoKS0+cGFn
ZUFnZW50KCkpCiAgICAgICAgIGluc3BlY3RvclBhZ2VBZ2VudC0+ZGlkUnVuSmF2YVNjcmlwdERp
YWxvZygpOwogfQogCkBAIC04NDksNyArODQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2VJbXBsKENhY2hlZFJlc291cmNlJiBjYWMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnQgOiAq
c19pbnN0cnVtZW50aW5nQWdlbnRzU2V0KSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50KiBpbnNwZWN0b3JSZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50LT5pbnNw
ZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgICAgIGlmIChSZXNvdXJjZUFnZW50KiBpbnNwZWN0
b3JSZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50LT5yZXNvdXJjZUFnZW50KCkpCiAg
ICAgICAgICAgICBpbnNwZWN0b3JSZXNvdXJjZUFnZW50LT53aWxsRGVzdHJveUNhY2hlZFJlc291
cmNlKGNhY2hlZFJlc291cmNlKTsKICAgICB9CiB9CkBAIC04NTcsNyArODU3LDcgQEAgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2VJbXBsKENh
Y2hlZFJlc291cmNlJiBjYWMKIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxXcml0ZUhUTUxJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIHN0YXJ0TGluZSwgRnJhbWUqIGZyYW1lKQog
ewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1l
bGluZUFnZW50KCkpIHsKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdl
bnQtPndpbGxXcml0ZUhUTUwoc3RhcnRMaW5lLCBmcmFtZSk7CiAgICAgICAgIHRpbWVsaW5lQWdl
bnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CiAgICAgfQpAQCAtODY2LDExICs4NjYsMTEgQEAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbFdyaXRlSFRNTEltcGwoSW5zdHIKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZFdyaXRlSFRNTEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBj
b29raWUsIHVuc2lnbmVkIGVuZExpbmUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdl
bnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKKyAgICBp
ZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChj
b29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRXcml0ZUhUTUwoZW5kTGluZSk7CiB9
CiAKLS8vIEphdmFTY3JpcHRDb3JlIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgc2hvdWxkIGtub3cg
Q29uc29sZSBNZXNzYWdlVHlwZXMuCisvLyBKYXZhU2NyaXB0Q29yZSBEZWJ1Z2dlckFnZW50IHNo
b3VsZCBrbm93IENvbnNvbGUgTWVzc2FnZVR5cGVzLgogc3RhdGljIGJvb2wgaXNDb25zb2xlQXNz
ZXJ0TWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSkKIHsKICAg
ICByZXR1cm4gc291cmNlID09IE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEkgJiYgdHlwZSA9PSBN
ZXNzYWdlVHlwZTo6QXNzZXJ0OwpAQCAtODg0LDggKzg4NCw4IEBAIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiBpbnN0CiAKICAgICBpZiAoV2ViQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPmFk
ZE1lc3NhZ2VUb0NvbnNvbGUoV1RGOjptb3ZlKG1lc3NhZ2UpKTsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQganVzdCBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRoZSBkZWJ1Z2dlciBhZ2VudC4g
SmF2YVNjcmlwdENvcmUgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCBzaG91bGQga25vdyBDb25zb2xl
IE1lc3NhZ2VUeXBlcy4KLSAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpKSB7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGp1c3QgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUg
ZGVidWdnZXIgYWdlbnQuIEphdmFTY3JpcHRDb3JlIERlYnVnZ2VyQWdlbnQgc2hvdWxkIGtub3cg
Q29uc29sZSBNZXNzYWdlVHlwZXMuCisgICAgaWYgKERlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRlYnVnZ2VyQWdlbnQoKSkgewogICAgICAgICBpZiAo
aXNDb25zb2xlQXNzZXJ0TWVzc2FnZShzb3VyY2UsIHR5cGUpKQogICAgICAgICAgICAgZGVidWdn
ZXJBZ2VudC0+aGFuZGxlQ29uc29sZUFzc2VydChtZXNzYWdlVGV4dCk7CiAgICAgfQpAQCAtODk5
LDcgKzg5OSw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpCiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiB0aXRsZSkK
IHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGlu
ZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50
KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPnRpbWUoZnJhbWUsIHRpdGxlKTsKICAgICBpZiAo
V2ViQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLndlYkNv
bnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnN0YXJ0VGltaW5nKHRpdGxlKTsK
QEAgLTkwOSwxMyArOTA5LDEzIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9w
Q29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1CiB7CiAgICAgaWYg
KFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy53ZWJD
b25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5zdG9wVGltaW5nKHRpdGxlLCBz
dGFjayk7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAoVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVB
Z2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT50aW1lRW5kKGZyYW1lLCB0aXRsZSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlVGltZVN0YW1wSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUsIFJl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JU
aW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0
b3JUaW1lbGluZUFnZW50KCkpIHsKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIFN0cmlu
ZyBtZXNzYWdlOwogICAgICAgICBhcmd1bWVudHMtPmdldEZpcnN0QXJndW1lbnRBc1N0cmluZyht
ZXNzYWdlKTsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkVGltZVN0YW1wKGZyYW1lLCBtZXNz
YWdlKTsKQEAgLTkyNCwxMyArOTI0LDEzIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpjb25zb2xlVGltZVN0YW1wSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtCiAKIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydFByb2ZpbGluZ0ltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRJbnNwZWN0b3JUaW1l
bGluZUFnZW50KCkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRUaW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVs
aW5lQWdlbnQtPnN0YXJ0RnJvbUNvbnNvbGUoZXhlYywgdGl0bGUpOwogfQogCiBSZWZQdHI8SlND
OjpQcm9maWxlPiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmdJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFn
ZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50SW5zcGVj
dG9yVGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50VGltZWxpbmVBZ2VudCgpKQogICAgICAg
ICByZXR1cm4gdGltZWxpbmVBZ2VudC0+c3RvcEZyb21Db25zb2xlKGV4ZWMsIHRpdGxlKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTkzOSwyNiArOTM5LDI2IEBAIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lCiB7CiAgICAgaWYgKCFpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckVudmly
b25tZW50KCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
aWYgKEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGRiQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Lmluc3BlY3RvckRhdGFiYXNlQWdlbnQoKSkKKyAgICBpZiAoRGF0YWJhc2VBZ2VudCogZGJBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZGF0YWJhc2VBZ2VudCgpKQogICAgICAgICBkYkFnZW50
LT5kaWRPcGVuRGF0YWJhc2UoZGF0YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lvbik7CiB9CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVu
dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUs
IFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4s
IFBhZ2UqIHBhZ2UpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogZG9tU3Rv
cmFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01TdG9yYWdlQWdlbnQo
KSkKKyAgICBpZiAoRE9NU3RvcmFnZUFnZW50KiBkb21TdG9yYWdlQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLmRvbVN0b3JhZ2VBZ2VudCgpKQogICAgICAgICBkb21TdG9yYWdlQWdlbnQtPmRp
ZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzdG9yYWdl
VHlwZSwgc2VjdXJpdHlPcmlnaW4sIHBhZ2UpOwogfQogCiBib29sIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c2hvdWxkUGF1c2VEZWRpY2F0ZWRXb3JrZXJPblN0YXJ0SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JXb3Jr
ZXJBZ2VudCogd29ya2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3Rvcldvcmtl
ckFnZW50KCkpCisgICAgaWYgKFdvcmtlckFnZW50KiB3b3JrZXJBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMud29ya2VyQWdlbnQoKSkKICAgICAgICAgcmV0dXJuIHdvcmtlckFnZW50LT5zaG91
bGRQYXVzZURlZGljYXRlZFdvcmtlck9uU3RhcnQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTdGFydFdvcmtlckdsb2JhbFNjb3Bl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBXb3JrZXJHbG9i
YWxTY29wZVByb3h5KiB3b3JrZXJHbG9iYWxTY29wZVByb3h5LCBjb25zdCBVUkwmIHVybCkKIHsK
LSAgICBpZiAoSW5zcGVjdG9yV29ya2VyQWdlbnQqIHdvcmtlckFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JXb3JrZXJBZ2VudCgpKQorICAgIGlmIChXb3JrZXJBZ2VudCogd29y
a2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLndvcmtlckFnZW50KCkpCiAgICAgICAgIHdv
cmtlckFnZW50LT5kaWRTdGFydFdvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlUHJv
eHksIHVybCk7CiB9CiAKQEAgLTk3Nyw3ICs5NzcsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbEV2YWx1YXRlV29ya2VyU2NyaXB0KFdvcmtlckdsb2JhbFNjb3BlKiB3b3Jr
ZQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d29ya2VyR2xvYmFsU2NvcGVUZXJt
aW5hdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBXb3Jr
ZXJHbG9iYWxTY29wZVByb3h5KiBwcm94eSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yV29ya2VyQWdl
bnQqIHdvcmtlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JXb3JrZXJBZ2Vu
dCgpKQorICAgIGlmIChXb3JrZXJBZ2VudCogd29ya2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLndvcmtlckFnZW50KCkpCiAgICAgICAgIHdvcmtlckFnZW50LT53b3JrZXJHbG9iYWxTY29w
ZVRlcm1pbmF0ZWQocHJveHkpOwogfQogCkBAIC05OTAsOSArOTkwLDkgQEAgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYlNvY2tldEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHIKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAg
ICAgIHJlc291cmNlQWdlbnQtPmRpZENyZWF0ZVdlYlNvY2tldChpZGVudGlmaWVyLCByZXF1ZXN0
VVJMKTsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChUaW1l
bGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFn
ZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZENyZWF0ZVdlYlNvY2tldChpZGVudGlm
aWVyLCByZXF1ZXN0VVJMLCBwcm90b2NvbCwgZG9jdW1lbnQtPmZyYW1lKCkpOwogfQogCkBAIC0x
MDAxLDkgKzEwMDEsOSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0SW1wbChJbnN0cnVtZW50aQogICAgIGlmICghZG9jdW1l
bnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50
KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbFNlbmRX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KGlkZW50aWZpZXIsIHJlcXVlc3QpOwotICAgIGlmIChJ
bnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVs
aW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAg
dGltZWxpbmVBZ2VudC0+d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KGlkZW50aWZp
ZXIsIGRvY3VtZW50LT5mcmFtZSgpKTsKIH0KIApAQCAtMTAxMiw5ICsxMDEyLDkgQEAgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZUltcGwoSW5zdHJ1bWUKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFn
ZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkp
CiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZShpZGVudGlmaWVyLCByZXNwb25zZSk7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdl
bnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5l
QWdlbnQoKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRS
ZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoaWRlbnRpZmllciwgZG9jdW1lbnQtPmZy
YW1lKCkpOwogfQogCkBAIC0xMDIzLDI1ICsxMDIzLDI1IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNvY2tldEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5z
dHJ1CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluc3Bl
Y3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmlu
c3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNv
dXJjZUFnZW50LT5kaWRDbG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKLSAgICBpZiAoSW5zcGVj
dG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5z
cGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVs
aW5lQWdlbnQtPmRpZERlc3Ryb3lXZWJTb2NrZXQoaWRlbnRpZmllciwgZG9jdW1lbnQtPmZyYW1l
KCkpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNv
Y2tldEZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKIHsK
LSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFn
ZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkp
CiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZShpZGVudGlm
aWVyLCBmcmFtZSk7CiB9CiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2
ZVdlYlNvY2tldEZyYW1lRXJyb3JJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRp
bmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAo
UmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3Vy
Y2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlV2ViU29ja2V0RnJh
bWVFcnJvcihpZGVudGlmaWVyLCBlcnJvck1lc3NhZ2UpOwogfQogdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFNlbmRXZWJTb2NrZXRGcmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBX
ZWJTb2NrZXRGcmFtZSYgZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdl
bnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRTZW5k
V2ViU29ja2V0RnJhbWUoaWRlbnRpZmllciwgZnJhbWUpOwogfQogI2VuZGlmCkBAIC0xMDQ5LDEx
MyArMTA0OSwxMTMgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNlbmRXZWJT
b2NrZXRGcmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW4KICNpZiBFTkFCTEUoV0VCX1JF
UExBWSkKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNl
c3Npb24+JiYgc2Vzc2lvbikKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxh
eUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAg
IGlmIChSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxh
eUFnZW50KCkpCiAgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uQ3JlYXRlZChXVEY6Om1vdmUo
c2Vzc2lvbikpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkxv
YWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRy
PFJlcGxheVNlc3Npb24+JiYgc2Vzc2lvbikKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdl
bnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2Vu
dCgpKQorICAgIGlmIChSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLnJlcGxheUFnZW50KCkpCiAgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTG9hZGVkKFdU
Rjo6bW92ZShzZXNzaW9uKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
ZXNzaW9uTW9kaWZpZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7Ci0gICAgaWYgKEluc3BlY3Rv
clJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
UmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lv
bk1vZGlmaWVkKFdURjo6bW92ZShzZXNzaW9uKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7
Ci0gICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJl
cGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICBy
ZXBsYXlBZ2VudC0+c2VnbWVudENyZWF0ZWQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4mJiBzZWdtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAg
aWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVwbGF5
QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRDb21wbGV0ZWQoV1RGOjptb3Zl
KHNlZ21lbnQpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRM
b2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFJlZlB0
cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JS
ZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJl
cGxheUFnZW50KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRM
b2FkZWQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlZ21lbnRVbmxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVu
dGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChS
ZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50
KCkpCiAgICAgICAgIHJlcGxheUFnZW50LT5zZWdtZW50VW5sb2FkZWQoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdGFydGVkSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlB
Z2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFn
ZW50KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPmNhcHR1cmVTdGFydGVk
KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYXB0dXJlU3RvcHBlZElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAo
SW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkpCiAgICAgICAgIHJlcGxheUFnZW50
LT5jYXB0dXJlU3RvcHBlZCgpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
cGxheWJhY2tTdGFydGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdl
bnRzKQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgaWYgKFJlcGxheUFn
ZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVwbGF5QWdlbnQoKSkKICAg
ICAgICAgcmVwbGF5QWdlbnQtPnBsYXliYWNrU3RhcnRlZCgpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6cGxheWJhY2tQYXVzZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlvbikKIHsK
LSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBsYXlBZ2VudCogcmVw
bGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkpCiAgICAgICAgIHJl
cGxheUFnZW50LT5wbGF5YmFja1BhdXNlZChwb3NpdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja0hpdFBvc2l0aW9uSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24p
CiB7Ci0gICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQq
IHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAg
ICByZXBsYXlBZ2VudC0+cGxheWJhY2tIaXRQb3NpdGlvbihwb3NpdGlvbik7CiB9CiAKIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja0ZpbmlzaGVkSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JSZXBs
YXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxh
eUFnZW50KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPnBsYXliYWNrRmlu
aXNoZWQoKTsKIH0KICNlbmRpZgogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0
d29ya1N0YXRlQ2hhbmdlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0Fn
ZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNh
dGlvbkNhY2hlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudCgpKQorICAgIGlmIChBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIGFwcGxpY2F0aW9u
Q2FjaGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuYXBwbGljYXRpb25DYWNoZUFnZW50KCkp
CiAgICAgICAgIGFwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwog
fQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNo
ZVN0YXR1c0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJh
bWUqIGZyYW1lKQogewotICAgIGlmIChJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIGFw
cGxpY2F0aW9uQ2FjaGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50KCkpCisgICAgaWYgKEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGlj
YXRpb25DYWNoZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5hcHBsaWNhdGlvbkNhY2hlQWdl
bnQoKSkKICAgICAgICAgYXBwbGljYXRpb25DYWNoZUFnZW50LT51cGRhdGVBcHBsaWNhdGlvbkNh
Y2hlU3RhdHVzKGZyYW1lKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNv
bnNvbGVBZ2VudEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkKIHsKICAgICBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
Ci0gICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzID8gaW5zdHJ1bWVudGluZ0FnZW50cy0+d2ViQ29uc29sZUFnZW50KCkgOiBudWxscHRy
OworICAgIENvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cyA/
IGluc3RydW1lbnRpbmdBZ2VudHMtPndlYkNvbnNvbGVBZ2VudCgpIDogbnVsbHB0cjsKICAgICBy
ZXR1cm4gY29uc29sZUFnZW50ICYmIGNvbnNvbGVBZ2VudC0+ZW5hYmxlZCgpOwogfQogCiBib29s
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dGltZWxpbmVBZ2VudEVuYWJsZWQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKIHsKICAgICBJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgcmV0dXJuIGluc3RydW1lbnRpbmdB
Z2VudHMgJiYgaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOwor
ICAgIHJldHVybiBpbnN0cnVtZW50aW5nQWdlbnRzICYmIGluc3RydW1lbnRpbmdBZ2VudHMtPnRp
bWVsaW5lQWdlbnQoKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlcGxh
eUFnZW50RW5hYmxlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KQogewogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50cyAmJiBp
bnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpOworICAgIHJldHVybiBp
bnN0cnVtZW50aW5nQWdlbnRzICYmIGluc3RydW1lbnRpbmdBZ2VudHMtPnJlcGxheUFnZW50KCk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMTY0LDEzICsxMTY0LDEzIEBAIGJvb2wgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpyZXBsYXlBZ2VudEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJ
Zk5lZWRlZChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBib29sIGlz
RE9NRXZlbnQsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3VzKQogewot
ICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKERP
TURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRv
bURlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+cGF1c2VPbk5hdGl2
ZUV2ZW50SWZOZWVkZWQoaXNET01FdmVudCwgZXZlbnROYW1lLCBzeW5jaHJvbm91cyk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYW5jZWxQYXVzZU9uTmF0aXZlRXZlbnQo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5z
cGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
aW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpKQorICAgIGlmIChEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dl
ckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRl
YnVnZ2VyQWdlbnQtPmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCk7CiB9CiAKQEAgLTExNzgs
NyArMTE3OCw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmCiB7CiAgICAgcGF1c2VPbk5hdGl2
ZUV2ZW50SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgZmFsc2UsIHJlcXVlc3RBbmltYXRp
b25GcmFtZUV2ZW50TmFtZSwgdHJ1ZSk7CiAKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVB
Z2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFJl
cXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFja0lkLCBmcmFtZSk7CiB9CiAKQEAgLTExODYsNyAr
MTE4Niw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYW5jZWxBbmltYXRp
b25GcmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYKIHsKICAgICBwYXVzZU9uTmF0aXZlRXZl
bnRJZk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBmYWxzZSwgY2FuY2VsQW5pbWF0aW9uRnJh
bWVFdmVudE5hbWUsIHRydWUpOwogCi0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQo
KSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMudGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRDYW5jZWxB
bmltYXRpb25GcmFtZShjYWxsYmFja0lkLCBmcmFtZSk7CiB9CiAKQEAgLTExOTUsNyArMTE5NSw3
IEBAIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxGaXJlQW5pbWF0aW9uRnJhbWVJCiAgICAgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVk
ZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgZmFsc2UsIGFuaW1hdGlvbkZyYW1lRmlyZWRFdmVudE5h
bWUsIGZhbHNlKTsKIAogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIGlmIChJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxp
bmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAg
IHRpbWVsaW5lQWdlbnQtPndpbGxGaXJlQW5pbWF0aW9uRnJhbWUoY2FsbGJhY2tJZCwgZnJhbWUp
OwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0K
QEAgLTEyMDQsNyArMTIwNCw3IEBAIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxGaXJlQW5pbWF0aW9uRnJhbWVJCiAKIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaXJlQW5pbWF0aW9uRnJhbWVJbXBsKGNvbnN0IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQogewotICAgIGlmIChJbnNwZWN0
b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNv
b2tpZSkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRp
bWVsaW5lQWdlbnQoY29va2llKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRmlyZUFuaW1h
dGlvbkZyYW1lKCk7CiB9CiAKQEAgLTEyMjgsMTIgKzEyMjgsMTIgQEAgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnVucmVnaXN0ZXJJbnN0cnVtZW50aW5nQWdlbnRzKEluc3RydW1lbnRp
bmdBZ2VudHMKICAgICB9CiB9CiAKLUluc3BlY3RvclRpbWVsaW5lQWdlbnQqIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6cmV0cmlldmVUaW1lbGluZUFnZW50KGNvbnN0IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQorVGltZWxpbmVBZ2VudCogSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpyZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llJiBjb29raWUpCiB7CiAgICAgaWYgKCFjb29raWUuaXNWYWxpZCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVs
aW5lQWdlbnQgPSBjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KCk7CisgICAgVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGNvb2tpZS5pbnN0
cnVtZW50aW5nQWdlbnRzKCktPnRpbWVsaW5lQWdlbnQoKTsKICAgICBpZiAodGltZWxpbmVBZ2Vu
dCAmJiBjb29raWUuaGFzTWF0Y2hpbmdUaW1lbGluZUFnZW50SWQodGltZWxpbmVBZ2VudC0+aWQo
KSkpCiAgICAgICAgIHJldHVybiB0aW1lbGluZUFnZW50OwogICAgIHJldHVybiBudWxscHRyOwpA
QCAtMTI3MCwxOSArMTI3MCwxOSBAQCBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JOb25Eb2N1bWVudAogCiB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bGF5ZXJUcmVlRGlkQ2hhbmdlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JMYXll
clRyZWVBZ2VudCogbGF5ZXJUcmVlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3Rv
ckxheWVyVHJlZUFnZW50KCkpCisgICAgaWYgKExheWVyVHJlZUFnZW50KiBsYXllclRyZWVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMubGF5ZXJUcmVlQWdlbnQoKSkKICAgICAgICAgbGF5ZXJU
cmVlQWdlbnQtPmxheWVyVHJlZURpZENoYW5nZSgpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6cmVuZGVyTGF5ZXJEZXN0cm95ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFJlbmRlckxheWVyJiByZW5kZXJMYXllcikKIHsK
LSAgICBpZiAoSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQqIGxheWVyVHJlZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JMYXllclRyZWVBZ2VudCgpKQorICAgIGlmIChMYXllclRy
ZWVBZ2VudCogbGF5ZXJUcmVlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmxheWVyVHJlZUFn
ZW50KCkpCiAgICAgICAgIGxheWVyVHJlZUFnZW50LT5yZW5kZXJMYXllckRlc3Ryb3llZChyZW5k
ZXJMYXllcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwc2V1ZG9FbGVt
ZW50RGVzdHJveWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JMYXll
clRyZWVBZ2VudCogbGF5ZXJUcmVlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3Rv
ckxheWVyVHJlZUFnZW50KCkpCisgICAgaWYgKExheWVyVHJlZUFnZW50KiBsYXllclRyZWVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMubGF5ZXJUcmVlQWdlbnQoKSkKICAgICAgICAgbGF5ZXJU
cmVlQWdlbnQtPnBzZXVkb0VsZW1lbnREZXN0cm95ZWQocHNldWRvRWxlbWVudCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aAppbmRleCA2MTBjNGNkZTQ4OTc0YjNmYmM4NTIxYjkzZjc3ZWU2OTY1MDJmNmU2Li5kZDE3OTdj
NmU2NjEwY2YxZDk2NTMzMWQzNzBjZDBiZDM0OGU0ZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC02OCw2ICs2OCw3
IEBAIGNsYXNzIFByb2ZpbGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTQWdl
bnQ7CiBjbGFzcyBDU1NSdWxlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFzcyBDaGFyYWN0
ZXJEYXRhOwpAQCAtODAsMTIgKzgxLDkgQEAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xh
c3MgSFRUUEhlYWRlck1hcDsKLWNsYXNzIEluc3BlY3RvckNTU0FnZW50OwogY2xhc3MgSW5zcGVj
dG9yQ1NTT01XcmFwcGVyczsKIGNsYXNzIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjsKLWNsYXNz
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwotY2xh
c3MgVVJMOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBzZXVkb0VsZW1lbnQ7CiBjbGFzcyBSZW5kZXJM
YXllcjsKQEAgLTEwMCw2ICs5OCw4IEBAIGNsYXNzIFN0b3JhZ2VBcmVhOwogY2xhc3MgU3R5bGVS
ZXNvbHZlcjsKIGNsYXNzIFN0eWxlUnVsZTsKIGNsYXNzIFRocmVhZGFibGVMb2FkZXJDbGllbnQ7
CitjbGFzcyBUaW1lbGluZUFnZW50OworY2xhc3MgVVJMOwogY2xhc3MgV29ya2VyR2xvYmFsU2Nv
cGU7CiBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZVByb3h5OwogY2xhc3MgWE1MSHR0cFJlcXVlc3Q7
CkBAIC00NjIsNyArNDYyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKFdvcmtlckdsb2Jh
bFNjb3BlKik7CiAgICAgc3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHNGb3JOb25Eb2N1bWVudENvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCi0g
ICAgc3RhdGljIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHJldHJpZXZlVGltZWxpbmVBZ2VudChj
b25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKKyAgICBzdGF0aWMgVGltZWxp
bmVBZ2VudCogcmV0cmlldmVUaW1lbGluZUFnZW50KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSYpOwogCiAgICAgc3RhdGljIHZvaWQgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVk
ZWQoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGJvb2wgaXNET01FdmVudCwgY29uc3QgU3RyaW5nJiBl
dmVudE5hbWUsIGJvb2wgc3luY2hyb25vdXMpOwogICAgIHN0YXRpYyB2b2lkIGNhbmNlbFBhdXNl
T25OYXRpdmVFdmVudChJbnN0cnVtZW50aW5nQWdlbnRzJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAppbmRleCBiZTY0NDk2
ZTQ2MzhkMDBjM2VjMjg5MDg2NTZhZTY3N2E3Mzg5NzU4Li45Y2IxZjBhYTA0ZWRiM2NkODIzN2Ri
N2Y1OTM3MDQ2NzAyYTAxZmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTQ2LDIzICs0NiwyMyBAQCB1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3Rvckxh
eWVyVHJlZUFnZW50OjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzKQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0
ZXJhbCgiTGF5ZXJUcmVlIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCitMYXllclRyZWVBZ2VudDo6
TGF5ZXJUcmVlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykK
KyAgICA6IFdlYkFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkxheWVyVHJlZSIpLCBpbnN0cnVtZW50
aW5nQWdlbnRzKQogewogfQogCi1JbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6fkluc3BlY3Rvckxh
eWVyVHJlZUFnZW50KCkKK0xheWVyVHJlZUFnZW50Ojp+TGF5ZXJUcmVlQWdlbnQoKQogewogICAg
IHJlc2V0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpZENyZWF0ZUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFu
bmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3Zv
aWQgTGF5ZXJUcmVlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9
IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpMYXllclRyZWVGcm9udGVuZERpc3BhdGNoZXI+
KGZyb250ZW5kQ2hhbm5lbCk7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3Rvcjo6
TGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhp
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKK3ZvaWQgTGF5ZXJUcmVl
QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CiAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIEluc3BlY3Rv
ckxheWVyVHJlZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lYwogICAgIGRpc2FibGUodW51c2VkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6cmVzZXQoKQordm9pZCBMYXllclRyZWVBZ2VudDo6cmVzZXQoKQogewogICAg
IG1fZG9jdW1lbnRMYXllclRvSWRNYXAuY2xlYXIoKTsKICAgICBtX2lkVG9MYXllci5jbGVhcigp
OwpAQCAtNzksMzYgKzc5LDM2IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlc2V0
KCkKICAgICBtX2lkVG9Qc2V1ZG9FbGVtZW50LmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCit2b2lkIExheWVyVHJlZUFnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmKQogewotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQodGhpcyk7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRz
LT5zZXRMYXllclRyZWVBZ2VudCh0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCit2b2lkIExheWVyVHJlZUFnZW50OjpkaXNhYmxl
KEVycm9yU3RyaW5nJikKIHsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3Rv
ckxheWVyVHJlZUFnZW50KG51bGxwdHIpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0
TGF5ZXJUcmVlQWdlbnQobnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQ6OmxheWVyVHJlZURpZENoYW5nZSgpCit2b2lkIExheWVyVHJlZUFnZW50OjpsYXllclRyZWVE
aWRDaGFuZ2UoKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sYXllclRyZWVEaWRDaGFu
Z2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVuZGVyTGF5ZXJEZXN0
cm95ZWQoY29uc3QgUmVuZGVyTGF5ZXImIHJlbmRlckxheWVyKQordm9pZCBMYXllclRyZWVBZ2Vu
dDo6cmVuZGVyTGF5ZXJEZXN0cm95ZWQoY29uc3QgUmVuZGVyTGF5ZXImIHJlbmRlckxheWVyKQog
ewogICAgIHVuYmluZCgmcmVuZGVyTGF5ZXIpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJl
ZUFnZW50Ojpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKFBzZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1l
bnQpCit2b2lkIExheWVyVHJlZUFnZW50Ojpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKFBzZXVkb0Vs
ZW1lbnQmIHBzZXVkb0VsZW1lbnQpCiB7CiAgICAgdW5iaW5kUHNldWRvRWxlbWVudCgmcHNldWRv
RWxlbWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5v
ZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+
JiBsYXllcnMpCit2b2lkIExheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQogewog
ICAgIGxheWVycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkxheWVyVHJlZTo6TGF5ZXI+OjpjcmVhdGUoKTsKIAotICAgIE5vZGUqIG5vZGUgPSBtX2lu
c3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQp
OworICAgIE5vZGUqIG5vZGUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmRvbUFnZW50KCktPm5v
ZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkgewogICAgICAgICBlcnJvclN0cmluZyA9
IEFTQ0lJTGl0ZXJhbCgiUHJvdmlkZWQgbm9kZSBpZCBkb2Vzbid0IG1hdGNoIGFueSBrbm93biBu
b2RlIik7CiAgICAgICAgIHJldHVybjsKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEluc3BlY3Rv
ckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZAogICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVy
cm9yU3RyaW5nLCByZW5kZXJlciwgbGF5ZXJzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+
JiBsYXllcnMpCit2b2lkIExheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9i
amVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykKIHsKICAgICBpZiAocmVuZGVyZXItPmhh
c0xheWVyKCkpIHsKICAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNo
eShlcnJvclN0cmluZywgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJlbmRlcmVy
KS5sYXllcigpLCBsYXllcnMpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KEVycm9y
U3RyaW5nCiAgICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVy
cm9yU3RyaW5nLCByZW5kZXJlciwgbGF5ZXJzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5kZXJMYXllciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+
PiYgbGF5ZXJzKQordm9pZCBMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJM
YXllckhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5k
ZXJMYXllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJMYXll
ci0+aXNDb21wb3NpdGVkKCkpCiAgICAgICAgIGxheWVycy0+YWRkSXRlbShidWlsZE9iamVjdEZv
ckxheWVyKGVycm9yU3RyaW5nLCByZW5kZXJMYXllcikpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZv
aWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJI
aWVyYXJjaHkoRXJyb3JTdHJpbmcmCiAgICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5
ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIHJlbmRlckxheWVyLCBsYXllcnMpOwogfQogCi1SZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZW5k
ZXJMYXllciogcmVuZGVyTGF5ZXIpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVl
OjpMYXllcj4gTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCiB7CiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9ICZyZW5kZXJMYXllci0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJMYXll
ckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOwpAQCAtMjAyLDEyICsy
MDIsMTIgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3Bl
Y3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEYKICAgICByZXR1cm4gV1RGOjptb3ZlKGxh
eWVyT2JqZWN0KTsKIH0KIAotaW50IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjppZEZvck5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBOb2RlKiBub2RlKQoraW50IExheWVyVHJlZUFnZW50
OjppZEZvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBOb2RlKiBub2RlKQogewogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJbnNwZWN0b3JET01BZ2VudCog
ZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCk7Cisg
ICAgRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5kb21BZ2VudCgp
OwogICAgIAogICAgIGludCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQobm9kZSk7CiAg
ICAgaWYgKCFub2RlSWQpCkBAIC0yMTYsNyArMjE2LDcgQEAgaW50IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjppZEZvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBOb2RlKiBub2RlKQog
ICAgIHJldHVybiBub2RlSWQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkludFJlY3Q+IExheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJU
cmVlOjpJbnRSZWN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0WChyZWN0LngoKSkKQEAgLTIyNiw3
ICsyMjYsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplYwogICAgICAgICAucmVsZWFzZSgpOwog
fQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdM
YXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYg
Y29tcG9zaXRpbmdSZWFzb25zUmVzdWx0KQordm9pZCBMYXllclRyZWVBZ2VudDo6cmVhc29uc0Zv
ckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGxheWVySWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0
aW5nUmVhc29ucz4mIGNvbXBvc2l0aW5nUmVhc29uc1Jlc3VsdCkKIHsKICAgICBjb25zdCBSZW5k
ZXJMYXllciogcmVuZGVyTGF5ZXIgPSBtX2lkVG9MYXllci5nZXQobGF5ZXJJZCk7CiAKQEAgLTMx
Myw3ICszMTMsNyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29t
cG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogICAgIGNvbXBvc2l0aW5nUmVh
c29uc1Jlc3VsdCA9IFdURjo6bW92ZShjb21wb3NpdGluZ1JlYXNvbnMpOwogfQogCi1TdHJpbmcg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQor
U3RyaW5nIExheWVyVHJlZUFnZW50OjpiaW5kKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikKIHsK
ICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKQEAgLTMyNiw3
ICszMjYsNyBAQCBTdHJpbmcgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVu
ZGVyTGF5ZXIqIGxheWVyKQogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQogCi12b2lkIEluc3Bl
Y3RvckxheWVyVHJlZUFnZW50Ojp1bmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQordm9p
ZCBMYXllclRyZWVBZ2VudDo6dW5iaW5kKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikKIHsKICAg
ICBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgU3RyaW5nPjo6aXRlcmF0b3IgaXRlcmF0b3Ig
PSBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwLmZpbmQobGF5ZXIpOwogICAgIGlmIChpdGVyYXRvciA9
PSBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwLmVuZCgpKQpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnVuYmluZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIp
CiAgICAgbV9kb2N1bWVudExheWVyVG9JZE1hcC5yZW1vdmUoaXRlcmF0b3IpOwogfQogCi1TdHJp
bmcgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmRQc2V1ZG9FbGVtZW50KFBzZXVkb0VsZW1l
bnQqIHBzZXVkb0VsZW1lbnQpCitTdHJpbmcgTGF5ZXJUcmVlQWdlbnQ6OmJpbmRQc2V1ZG9FbGVt
ZW50KFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQpCiB7CiAgICAgaWYgKCFwc2V1ZG9FbGVt
ZW50KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKQEAgLTM0OCw3ICszNDgsNyBAQCBT
dHJpbmcgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmRQc2V1ZG9FbGVtZW50KFBzZXVkb0Vs
ZW1lbnQqIHBzZXVkb0VsZW1lbnQpCiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnVuYmluZFBzZXVkb0VsZW1lbnQoUHNldWRvRWxlbWVu
dCogcHNldWRvRWxlbWVudCkKK3ZvaWQgTGF5ZXJUcmVlQWdlbnQ6OnVuYmluZFBzZXVkb0VsZW1l
bnQoUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCkKIHsKICAgICBIYXNoTWFwPFBzZXVkb0Vs
ZW1lbnQqLCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fcHNldWRvRWxlbWVudFRvSWRN
YXAuZmluZChwc2V1ZG9FbGVtZW50KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9wc2V1ZG9FbGVt
ZW50VG9JZE1hcC5lbmQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50LmgKaW5kZXggNWFiYzEzNzUzMjU2ZDg0NDUyNmUyYjM1OThmNGFj
MTJiM2NlNTc1MS4uMzJkY2YzODJkZDM2NmI1YjFlOGMzMGVhZDBmYThkM2NjNDEzYjIyNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50
LmgKQEAgLTQ0LDExICs0NCwxMSBAQCBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogCiB0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpMYXll
clRyZWVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworY2xhc3MgTGF5ZXJUcmVlQWdlbnQgZmlu
YWwgOiBwdWJsaWMgV2ViQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpMYXllclRyZWVCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIGV4cGxpY2l0IEluc3BlY3RvckxheWVyVHJlZUFnZW50KEluc3RydW1lbnRpbmdB
Z2VudHMqKTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JMYXllclRyZWVBZ2VudCgpOworICAgIGV4
cGxpY2l0IExheWVyVHJlZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqKTsKKyAgICB2aXJ0dWFs
IH5MYXllclRyZWVBZ2VudCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXgg
OGY5Y2NlNzc2ODBmNjIyNmRlNDY4OWMxMmIzZjUwNDZkYzM0MWI5ZS4uNDM0ZDg0NjU1ZTFhZWZl
ZTI1ODgyMjIwMTFiZTI0MGY4OTM5OTQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTExMiw4ICsxMTIsOCBAQCBzdGF0aWMgYm9v
bCBwcmVwYXJlQ2FjaGVkUmVzb3VyY2VCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291
cmNlLCBib29sKiBoYQogCiBzdGF0aWMgYm9vbCBoYXNUZXh0Q29udGVudChDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkUmVzb3VyY2UpCiB7Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5
cGUgdHlwZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKCpjYWNoZWRS
ZXNvdXJjZSk7Ci0gICAgcmV0dXJuIHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVu
dFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3Vy
Y2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlIHx8IHR5cGUg
PT0gSW5zcGVjdG9yUGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKKyAgICBQYWdlQWdlbnQ6OlJlc291
cmNlVHlwZSB0eXBlID0gUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNhY2hlZFJlc291
cmNlKTsKKyAgICByZXR1cm4gdHlwZSA9PSBQYWdlQWdlbnQ6OkRvY3VtZW50UmVzb3VyY2UgfHwg
dHlwZSA9PSBQYWdlQWdlbnQ6OlN0eWxlc2hlZXRSZXNvdXJjZSB8fCB0eXBlID09IFBhZ2VBZ2Vu
dDo6U2NyaXB0UmVzb3VyY2UgfHwgdHlwZSA9PSBQYWdlQWdlbnQ6OlhIUlJlc291cmNlOwogfQog
CiBzdGF0aWMgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZVhIUlRleHREZWNvZGVy
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSkK
QEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNy
ZWF0ZVhIUlRleHREZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsCiAgICAgcmV0dXJuIFdU
Rjo6bW92ZShkZWNvZGVyKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJl
c291cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyogcmVz
dWx0LCBib29sKiBiYXNlNjRFbmNvZGVkKQorYm9vbCBQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNl
Q29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyogcmVzdWx0LCBi
b29sKiBiYXNlNjRFbmNvZGVkKQogewogICAgIGJvb2wgaGFzWmVyb1NpemU7CiAgICAgYm9vbCBw
cmVwYXJlZCA9IHByZXBhcmVDYWNoZWRSZXNvdXJjZUJ1ZmZlcihjYWNoZWRSZXNvdXJjZSwgJmhh
c1plcm9TaXplKTsKQEAgLTE3OSwyMSArMTc5LDIxIEBAIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50
OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBT
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6bWFpblJl
c291cmNlQ29udGVudChGcmFtZSogZnJhbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5n
KiByZXN1bHQpCitib29sIFBhZ2VBZ2VudDo6bWFpblJlc291cmNlQ29udGVudChGcmFtZSogZnJh
bWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpCiB7CiAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkt
Pm1haW5SZXNvdXJjZURhdGEoKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRhdGFDb250ZW50KGJ1ZmZlci0+
ZGF0YSgpLCBidWZmZXItPnNpemUoKSwgZnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2Rpbmco
KSwgd2l0aEJhc2U2NEVuY29kZSwgcmVzdWx0KTsKKyAgICByZXR1cm4gUGFnZUFnZW50OjpkYXRh
Q29udGVudChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCksIGZyYW1lLT5kb2N1bWVudCgp
LT5pbnB1dEVuY29kaW5nKCksIHdpdGhCYXNlNjRFbmNvZGUsIHJlc3VsdCk7CiB9CiAKIC8vIHN0
YXRpYwotYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQoUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1l
LCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQorYm9vbCBQYWdlQWdlbnQ6
OnNoYXJlZEJ1ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29u
c3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmlu
ZyogcmVzdWx0KQogewogICAgIHJldHVybiBkYXRhQ29udGVudChidWZmZXIgPyBidWZmZXItPmRh
dGEoKSA6IG51bGxwdHIsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgpIDogMCwgdGV4dEVuY29kaW5n
TmFtZSwgd2l0aEJhc2U2NEVuY29kZSwgcmVzdWx0KTsKIH0KIAotYm9vbCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNvbnN0
IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcq
IHJlc3VsdCkKK2Jvb2wgUGFnZUFnZW50OjpkYXRhQ29udGVudChjb25zdCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBzaXplLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJh
c2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpCiB7CiAgICAgaWYgKHdpdGhCYXNlNjRFbmNvZGUp
IHsKICAgICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZShkYXRhLCBzaXplKTsKQEAgLTIwNCw3
ICsyMDQsNyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29uc3QgY2hh
ciogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaQogfQogCiAvLyBzdGF0aWMKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCog
YmFzZTY0RW5jb2RlZCkKK3ZvaWQgUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcqIHJl
c3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKIHsKICAgICBEb2N1bWVudExvYWRlciogbG9hZGVy
ID0gYXNzZXJ0RG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKICAgICBpZiAoIWxv
YWRlcikKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3Vy
Y2VDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLAogfQogCiAv
L3N0YXRpYwotU3RyaW5nIEluc3BlY3RvclBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQorU3RyaW5nIFBhZ2VBZ2VudDo6c291
cmNlTWFwVVJMRm9yUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQogewog
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNvdXJjZU1hcEhUVFBI
ZWFkZXIsIChBU0NJSUxpdGVyYWwoIlNvdXJjZU1hcCIpKSk7CiAgICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc291cmNlTWFwSFRUUEhlYWRlckRlcHJlY2F0ZWQsIChB
U0NJSUxpdGVyYWwoIlgtU291cmNlTWFwIikpKTsKQEAgLTI0NywxMyArMjQ3LDEzIEBAIFN0cmlu
ZyBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKENhY2hlZFJlc291
cmNlKiBjYWNoZWRSZXNvdXJjCiAKICAgICBTdHJpbmcgY29udGVudDsKICAgICBib29sIGJhc2U2
NEVuY29kZWQ7Ci0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250
ZW50KGNhY2hlZFJlc291cmNlLCAmY29udGVudCwgJmJhc2U2NEVuY29kZWQpICYmICFiYXNlNjRF
bmNvZGVkKQorICAgIGlmIChQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudChjYWNoZWRS
ZXNvdXJjZSwgJmNvbnRlbnQsICZiYXNlNjRFbmNvZGVkKSAmJiAhYmFzZTY0RW5jb2RlZCkKICAg
ICAgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmZpbmRTdHlsZXNoZWV0U291cmNl
TWFwVVJMKGNvbnRlbnQpOwogCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1DYWNoZWRSZXNv
dXJjZSogSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShGcmFtZSogZnJhbWUsIGNv
bnN0IFVSTCYgdXJsKQorQ2FjaGVkUmVzb3VyY2UqIFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2Uo
RnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKIHsKICAgICBDYWNoZWRSZXNvdXJjZSogY2Fj
aGVkUmVzb3VyY2UgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5j
YWNoZWRSZXNvdXJjZSh1cmwpOwogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpIHsKQEAgLTI2Nyw3
ICsyNjcsNyBAQCBDYWNoZWRSZXNvdXJjZSogSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNv
dXJjZShGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiBjYWNoZWRSZXNv
dXJjZTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291
cmNlVHlwZSByZXNvdXJjZVR5cGUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJj
ZVR5cGUgUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKFBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBl
IHJlc291cmNlVHlwZSkKIHsKICAgICBzd2l0Y2ggKHJlc291cmNlVHlwZSkgewogICAgIGNhc2Ug
RG9jdW1lbnRSZXNvdXJjZToKQEAgLTI5MCw0MSArMjkwLDQxIEBAIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpz
b24oSW5zCiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6T3RoZXI7CiB9CiAKLUluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIEluc3BlY3Rv
clBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNo
ZWRSZXNvdXJjZSkKK1BhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIFBhZ2VBZ2VudDo6Y2FjaGVkUmVz
b3VyY2VUeXBlKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKICAgICBz
d2l0Y2ggKGNhY2hlZFJlc291cmNlLnR5cGUoKSkgewogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OkltYWdl
UmVzb3VyY2U7CisgICAgICAgIHJldHVybiBQYWdlQWdlbnQ6OkltYWdlUmVzb3VyY2U7CiAjaWYg
RU5BQkxFKFNWR19GT05UUykKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3Vy
Y2U6CiAjZW5kaWYKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OkZvbnRSZXNvdXJjZTsKKyAgICAgICAgcmV0
dXJuIFBhZ2VBZ2VudDo6Rm9udFJlc291cmNlOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNT
U1N0eWxlU2hlZXQ6CiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KICNpZiBFTkFCTEUoWFNMVCkK
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgogI2VuZGlmCi0gICAgICAg
IHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OlN0eWxlc2hlZXRSZXNvdXJjZTsKKyAgICAgICAg
cmV0dXJuIFBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291cmNlOwogICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OlNjcmlwdDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0
UmVzb3VyY2U7CisgICAgICAgIHJldHVybiBQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlOwogICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yUGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKKyAgICAgICAgcmV0dXJuIFBhZ2VBZ2VudDo6WEhS
UmVzb3VyY2U7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgotICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlOworICAgICAgICBy
ZXR1cm4gUGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291
cmNlOworICAgIHJldHVybiBQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2U7CiB9CiAKLUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hl
ZFJlc291cmNlVHlwZUpzb24oY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQor
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIFBhZ2VBZ2VudDo6Y2FjaGVk
UmVzb3VyY2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7
CiAgICAgcmV0dXJuIHJlc291cmNlVHlwZUpzb24oY2FjaGVkUmVzb3VyY2VUeXBlKGNhY2hlZFJl
c291cmNlKSk7CiB9CiAKLUluc3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3Bl
Y3RvckNsaWVudCogY2xpZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQotICAgIDogSW5z
cGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiUGFnZSIpLCBpbnN0cnVtZW50aW5nQWdlbnRz
KQorUGFnZUFnZW50OjpQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3Rvck92
ZXJsYXkqIG92ZXJsYXkpCisgICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJQYWdlIiks
IGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX3BhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50
KGNsaWVudCkKICAgICAsIG1fb3ZlcmxheShvdmVybGF5KQpAQCAtMzM3LDEzICszMzcsMTMgQEAg
SW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cywKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCog
ZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcikKK3ZvaWQgUGFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6UGFnZUZyb250ZW5kRGlzcGF0Y2hl
cj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9y
OjpQYWdlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIFBhZ2VBZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLmNsZWFyKCk7CkBAIC0zNTUsMjUgKzM1NSwyNSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
cwogI2VuZGlmCiB9CiAKLWRvdWJsZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnRpbWVzdGFtcCgpCitk
b3VibGUgUGFnZUFnZW50Ojp0aW1lc3RhbXAoKQogewogICAgIHJldHVybiBtX2luc3RydW1lbnRp
bmdBZ2VudHMtPmluc3BlY3RvckVudmlyb25tZW50KCkuZXhlY3V0aW9uU3RvcHdhdGNoKCktPmVs
YXBzZWRUaW1lKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjplbmFibGUoRXJyb3JT
dHJpbmcmKQordm9pZCBQYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgbV9l
bmFibGVkID0gdHJ1ZTsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclBh
Z2VBZ2VudCh0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFBhZ2VBZ2VudCh0
aGlzKTsKIAogICAgIGlmIChGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKSkKICAgICAgICAgbV9v
cmlnaW5hbFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkID0gIWZyYW1lLT5zZXR0aW5ncygpLmlzU2Ny
aXB0RW5hYmxlZCgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJv
clN0cmluZyYpCit2b2lkIFBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAg
bV9lbmFibGVkID0gZmFsc2U7CiAgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5jbGVhcigp
OwotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yUGFnZUFnZW50KG51bGxw
dHIpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0UGFnZUFnZW50KG51bGxwdHIpOwog
CiAgICAgRXJyb3JTdHJpbmcgdW51c2VkOwogICAgIHNldFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVk
KHVudXNlZCwgbV9vcmlnaW5hbFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkKTsKQEAgLTM4MSw3ICsz
ODEsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAg
ICAgc2V0RW11bGF0ZWRNZWRpYSh1bnVzZWQsIGVtcHR5U3RyaW5nKCkpOwogfQogCi12b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgc291cmNlLCBTdHJpbmcqIGlkZW50aWZpZXIpCit2b2lkIFBhZ2VBZ2Vu
dDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c291cmNlLCBTdHJpbmcqIGlkZW50aWZpZXIpCiB7CiAgICAgaWYgKCFtX3NjcmlwdHNUb0V2YWx1
YXRlT25Mb2FkKQogICAgICAgICBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgcwogICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQtPnNldFN0cmluZygqaWRlbnRpZmll
ciwgc291cmNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbW92ZVNjcmlwdFRv
RXZhbHVhdGVPbkxvYWQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIpCit2b2lkIFBhZ2VBZ2VudDo6cmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0
cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICBpZiAoIW1fc2Ny
aXB0c1RvRXZhbHVhdGVPbkxvYWQgfHwgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC0+ZmluZChp
ZGVudGlmaWVyKSA9PSBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLT5lbmQoKSkgewogICAgICAg
ICBlcnJvciA9IEFTQ0lJTGl0ZXJhbCgiU2NyaXB0IG5vdCBmb3VuZCIpOwpAQCAtNDA1LDEzICs0
MDUsMTMgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbW92ZVNjcmlwdFRvRXZhbHVhdGVP
bkxvYWQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdAogICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVP
bkxvYWQtPnJlbW92ZShpZGVudGlmaWVyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OnJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSWdub3JlQ2Fj
aGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKQordm9pZCBQ
YWdlQWdlbnQ6OnJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFs
SWdub3JlQ2FjaGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTY3JpcHRUb0V2YWx1YXRlT25Mb2Fk
KQogewogICAgIG1fcGVuZGluZ1NjcmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlID0gb3B0aW9uYWxT
Y3JpcHRUb0V2YWx1YXRlT25Mb2FkID8gKm9wdGlvbmFsU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCA6
ICIiOwogICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkucmVsb2FkKG9wdGlvbmFsSWdu
b3JlQ2FjaGUgPyAqb3B0aW9uYWxJZ25vcmVDYWNoZSA6IGZhbHNlKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwp
Cit2b2lkIFBhZ2VBZ2VudDo6bmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVy
bCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nl
c3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUo
KTsKQEAgLTQ4Niw3ICs0ODYsNyBAQCBzdGF0aWMgVmVjdG9yPFVSTD4gYWxsUmVzb3VyY2VzVVJM
c0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiYg
Y29va2llcykKK3ZvaWQgUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZT4+JiBjb29raWVzKQogewogICAgIC8vIElmIHdlIGNhbiBnZXQgcmF3IGNvb2tpZXMuCiAg
ICAgTGlzdEhhc2hTZXQ8Q29va2llPiByYXdDb29raWVzTGlzdDsKQEAgLTUyOCwxOSArNTI4LDE5
IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFyCiAgICAgICAgIGNvb2tpZXMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVh
dGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCit2b2lk
IFBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29r
aWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBVUkwgcGFyc2VkVVJMKFBhcnNlZFVS
TFN0cmluZywgdXJsKTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQogICAgICAg
ICBXZWJDb3JlOjpkZWxldGVDb29raWUoZnJhbWUtPmRvY3VtZW50KCksIHBhcnNlZFVSTCwgY29v
a2llTmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUo
RXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNv
dXJjZVRyZWU+JiBvYmplY3QpCit2b2lkIFBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiYgb2JqZWN0KQogewogICAgIG9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKCZt
X3BhZ2UtPm1haW5GcmFtZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJl
c291cmNlQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5j
b2RlZCkKK3ZvaWQgUGFnZUFnZW50OjpnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBTdHJp
bmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUpCkBAIC01
NTQsNyArNTU0LDcgQEAgc3RhdGljIGJvb2wgdGV4dENvbnRlbnRGb3JDYWNoZWRSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyoKICAgICBpZiAoaGFzVGV4dENv
bnRlbnQoY2FjaGVkUmVzb3VyY2UpKSB7CiAgICAgICAgIFN0cmluZyBjb250ZW50OwogICAgICAg
ICBib29sIGJhc2U2NEVuY29kZWQ7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQ6OmNh
Y2hlZFJlc291cmNlQ29udGVudChjYWNoZWRSZXNvdXJjZSwgcmVzdWx0LCAmYmFzZTY0RW5jb2Rl
ZCkpIHsKKyAgICAgICAgaWYgKFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KGNhY2hl
ZFJlc291cmNlLCByZXN1bHQsICZiYXNlNjRFbmNvZGVkKSkgewogICAgICAgICAgICAgQVNTRVJU
KCFiYXNlNjRFbmNvZGVkKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBA
IC01NjIsNyArNTYyLDcgQEAgc3RhdGljIGJvb2wgdGV4dENvbnRlbnRGb3JDYWNoZWRSZXNvdXJj
ZShDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyoKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBj
b25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNo
Pj4mIHJlc3VsdHMpCit2b2lkIFBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgcXVlcnksIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3Qg
Ym9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiBy
ZXN1bHRzKQogewogICAgIHJlc3VsdHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7CiAK
QEAgLTYwNSw3ICs2MDUsNyBAQCBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoYwogICAgICAgICAucmVs
ZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlv
bmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2VhcmNoUmVzdWx0Pj4mIHJlc3VsdCkKK3ZvaWQgUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNl
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qgb3B0
aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQogewogICAgIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD46OmNy
ZWF0ZSgpOwogCkBAIC02MzIsNyArNjMyLDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNl
YXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb24KICAg
ICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXREb2N1bWVudENvbnRlbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmlu
ZyYgaHRtbCkKK3ZvaWQgUGFnZUFnZW50OjpzZXREb2N1bWVudENvbnRlbnQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgaHRtbCkK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBhc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7
CiAgICAgaWYgKCFmcmFtZSkKQEAgLTY0Niw3ICs2NDYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0RG9jdW1lbnRDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaQogICAgIERPTVBhdGNoU3VwcG9ydDo6cGF0Y2hEb2N1bWVudChkb2N1bWVudCwgaHRtbCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0
cmluZyYsIGJvb2wgc2hvdykKK3ZvaWQgUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJv
clN0cmluZyYsIGJvb2wgc2hvdykKIHsKICAgICBtX3Nob3dQYWludFJlY3RzID0gc2hvdzsKICAg
ICBtX2NsaWVudC0+c2V0U2hvd1BhaW50UmVjdHMoc2hvdyk7CkBAIC02NTcsNyArNjU3LDcgQEAg
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nJiwg
Ym9vbCBzaG93KQogICAgIG1fb3ZlcmxheS0+c2V0U2hvd2luZ1BhaW50UmVjdHMoc2hvdyk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJy
b3JTdHJpbmcmLCBJbnNwZWN0b3I6OlBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3Vs
dCogc3RhdHVzKQordm9pZCBQYWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJv
clN0cmluZyYsIEluc3BlY3Rvcjo6UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0
KiBzdGF0dXMpCiB7CiAgICAgYm9vbCBkaXNhYmxlZEJ5U2NyaXB0Q29udHJvbGxlciA9IGZhbHNl
OwogICAgIGJvb2wgZGlzYWJsZWRJblNldHRpbmdzID0gZmFsc2U7CkBAIC02NzgsNyArNjc4LDcg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJv
clN0cmluZyYsIEluc3BlY3Rvcjo6UGFnZUIKICAgICAgICAgKnN0YXR1cyA9IEluc3BlY3Rvcjo6
UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0OjpGb3JiaWRkZW47CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxlZChFcnJvclN0
cmluZyYsIGJvb2wgdmFsdWUpCit2b2lkIFBhZ2VBZ2VudDo6c2V0U2NyaXB0RXhlY3V0aW9uRGlz
YWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIHZhbHVlKQogewogICAgIGlmICghbWFpbkZyYW1lKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTY4OCw3ICs2ODgsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIHZhbHVl
KQogICAgIG1faWdub3JlU2NyaXB0c0VuYWJsZWROb3RpZmljYXRpb24gPSBmYWxzZTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFt
ZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCit2b2lkIFBhZ2VBZ2VudDo6ZGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCkKIHsKICAgICBpZiAoJndvcmxkICE9ICZtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzA4LDE4ICs3MDgsMTggQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3IK
ICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHQobV9zY3JpcHRUb0V2YWx1YXRl
T25Mb2FkT25jZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpkb21Db250ZW50RXZl
bnRGaXJlZCgpCit2b2lkIFBhZ2VBZ2VudDo6ZG9tQ29udGVudEV2ZW50RmlyZWQoKQogewogICAg
IG1faXNGaXJzdExheW91dEFmdGVyT25Mb2FkID0gdHJ1ZTsKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZG9tQ29udGVudEV2ZW50RmlyZWQodGltZXN0YW1wKCkpOwogfQogCi12b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6bG9hZEV2ZW50RmlyZWQoKQordm9pZCBQYWdlQWdlbnQ6OmxvYWRFdmVu
dEZpcmVkKCkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZEV2ZW50RmlyZWQodGlt
ZXN0YW1wKCkpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQo
RG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3ZvaWQgUGFnZUFnZW50OjpmcmFtZU5hdmlnYXRlZChE
b2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIGlmIChsb2FkZXItPmZyYW1lKCktPmlzTWFp
bkZyYW1lKCkpIHsKICAgICAgICAgbV9zY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZSA9IG1fcGVu
ZGluZ1NjcmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlOwpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciogbG9hZGVy
KQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5mcmFtZU5hdmlnYXRlZChidWlsZE9iamVjdEZv
ckZyYW1lKGxvYWRlci0+ZnJhbWUoKSkpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZnJhbWVEZXRhY2hlZChGcmFtZSYgZnJhbWUpCit2b2lkIFBhZ2VBZ2VudDo6ZnJhbWVEZXRhY2hl
ZChGcmFtZSYgZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIFN0cmluZz46Oml0ZXJhdG9y
IGl0ZXJhdG9yID0gbV9mcmFtZVRvSWRlbnRpZmllci5maW5kKCZmcmFtZSk7CiAgICAgaWYgKGl0
ZXJhdG9yICE9IG1fZnJhbWVUb0lkZW50aWZpZXIuZW5kKCkpIHsKQEAgLTczOCwxOCArNzM4LDE4
IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lJiBmcmFtZSkK
ICAgICB9CiB9CiAKLUZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om1haW5GcmFtZSgpCitGcmFt
ZSogUGFnZUFnZW50OjptYWluRnJhbWUoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBy
ZXR1cm4gYSBGcmFtZSYKICAgICByZXR1cm4gJm1fcGFnZS0+bWFpbkZyYW1lKCk7CiB9CiAKLUZy
YW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRm9ySWQoY29uc3QgU3RyaW5nJiBmcmFtZUlk
KQorRnJhbWUqIFBhZ2VBZ2VudDo6ZnJhbWVGb3JJZChjb25zdCBTdHJpbmcmIGZyYW1lSWQpCiB7
CiAgICAgcmV0dXJuIGZyYW1lSWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faWRlbnRpZmllclRv
RnJhbWUuZ2V0KGZyYW1lSWQpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFt
ZUlkKEZyYW1lKiBmcmFtZSkKK1N0cmluZyBQYWdlQWdlbnQ6OmZyYW1lSWQoRnJhbWUqIGZyYW1l
KQogewogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAiIjsKQEAgLTc2MiwxMiArNzYy
LDEyIEBAIFN0cmluZyBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lSWQoRnJhbWUqIGZyYW1lKQog
ICAgIHJldHVybiBpZGVudGlmaWVyOwogfQogCi1ib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6aGFz
SWRGb3JGcmFtZShGcmFtZSogZnJhbWUpIGNvbnN0Citib29sIFBhZ2VBZ2VudDo6aGFzSWRGb3JG
cmFtZShGcmFtZSogZnJhbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZyYW1lICYmIG1fZnJhbWVU
b0lkZW50aWZpZXIuY29udGFpbnMoZnJhbWUpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yUGFnZUFn
ZW50Ojpsb2FkZXJJZChEb2N1bWVudExvYWRlciogbG9hZGVyKQorU3RyaW5nIFBhZ2VBZ2VudDo6
bG9hZGVySWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAoIWxvYWRlcikKICAg
ICAgICAgcmV0dXJuICIiOwpAQCAtNzc5LDcgKzc3OSw3IEBAIFN0cmluZyBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmxvYWRlcklkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgcmV0dXJuIGlkZW50
aWZpZXI7CiB9CiAKLUZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZpbmRGcmFtZVdpdGhTZWN1
cml0eU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpblJhd1N0cmluZykKK0ZyYW1lKiBQYWdlQWdl
bnQ6OmZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpblJhd1N0
cmluZykKIHsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gZG9jdW1lbnRPcmlnaW4gPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKTsKQEAgLTc4OSw3ICs3ODksNyBAQCBGcmFtZSogSW5zcGVjdG9yUGFn
ZUFnZW50OjpmaW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5S
YXdTdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50
Ojphc3NlcnRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJh
bWVJZCkKK0ZyYW1lKiBQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1l
Rm9ySWQoZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTc5OCw3ICs3OTgsNyBAQCBGcmFt
ZSogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgZgogfQogCiAvLyBzdGF0aWMKLURvY3VtZW50TG9hZGVyKiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmFzc2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgRnJhbWUqIGZyYW1lKQorRG9jdW1lbnRMb2FkZXIqIFBhZ2VBZ2VudDo6YXNzZXJ0RG9j
dW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCiB7CiAg
ICAgRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwogICAgIERvY3Vt
ZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lTG9hZGVyLmRvY3VtZW50TG9hZGVyKCk7
CkBAIC04MDcsNDIgKzgwNyw0MiBAQCBEb2N1bWVudExvYWRlciogSW5zcGVjdG9yUGFnZUFnZW50
Ojphc3NlcnREb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogICAgIHJldHVy
biBkb2N1bWVudExvYWRlcjsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRlckRl
dGFjaGVkRnJvbUZyYW1lKERvY3VtZW50TG9hZGVyJiBsb2FkZXIpCit2b2lkIFBhZ2VBZ2VudDo6
bG9hZGVyRGV0YWNoZWRGcm9tRnJhbWUoRG9jdW1lbnRMb2FkZXImIGxvYWRlcikKIHsKICAgICBt
X2xvYWRlclRvSWRlbnRpZmllci5yZW1vdmUoJmxvYWRlcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpmcmFtZVN0YXJ0ZWRMb2FkaW5nKEZyYW1lJiBmcmFtZSkKK3ZvaWQgUGFnZUFn
ZW50OjpmcmFtZVN0YXJ0ZWRMb2FkaW5nKEZyYW1lJiBmcmFtZSkKIHsKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+ZnJhbWVTdGFydGVkTG9hZGluZyhmcmFtZUlkKCZmcmFtZSkpOwogfQogCi12
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVTdG9wcGVkTG9hZGluZyhGcmFtZSYgZnJhbWUp
Cit2b2lkIFBhZ2VBZ2VudDo6ZnJhbWVTdG9wcGVkTG9hZGluZyhGcmFtZSYgZnJhbWUpCiB7CiAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmZyYW1lU3RvcHBlZExvYWRpbmcoZnJhbWVJZCgmZnJh
bWUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lU2NoZWR1bGVkTmF2aWdh
dGlvbihGcmFtZSYgZnJhbWUsIGRvdWJsZSBkZWxheSkKK3ZvaWQgUGFnZUFnZW50OjpmcmFtZVNj
aGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lLCBkb3VibGUgZGVsYXkpCiB7CiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbihmcmFtZUlkKCZmcmFt
ZSksIGRlbGF5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lQ2xlYXJlZFNj
aGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lKQordm9pZCBQYWdlQWdlbnQ6OmZyYW1lQ2xl
YXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lKQogewogICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5mcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKGZyYW1lSWQoJmZyYW1l
KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojp3aWxsUnVuSmF2YVNjcmlwdERpYWxv
Zyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFBhZ2VBZ2VudDo6d2lsbFJ1bkphdmFTY3Jp
cHREaWFsb2coY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5qYXZhc2NyaXB0RGlhbG9nT3BlbmluZyhtZXNzYWdlKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmRpZFJ1bkphdmFTY3JpcHREaWFsb2coKQordm9pZCBQYWdlQWdlbnQ6OmRp
ZFJ1bkphdmFTY3JpcHREaWFsb2coKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5qYXZh
c2NyaXB0RGlhbG9nQ2xvc2VkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRQ
YWludChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQordm9p
ZCBQYWdlQWdlbnQ6OmRpZFBhaW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91
dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX2VuYWJsZWQgfHwgIW1fc2hvd1BhaW50UmVjdHMp
CiAgICAgICAgIHJldHVybjsKQEAgLTg2NCw3ICs4NjQsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6ZGlkUGFpbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVjdCYg
cmVjdAogICAgIG1fb3ZlcmxheS0+c2hvd1BhaW50UmVjdChyb290UmVjdCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRMYXlvdXQoKQordm9pZCBQYWdlQWdlbnQ6OmRpZExheW91
dCgpCiB7CiAgICAgYm9vbCBpc0ZpcnN0TGF5b3V0ID0gbV9pc0ZpcnN0TGF5b3V0QWZ0ZXJPbkxv
YWQ7CiAgICAgaWYgKGlzRmlyc3RMYXlvdXQpCkBAIC04NzYsMTkgKzg3NiwxOSBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZGlkTGF5b3V0KCkKICAgICBtX292ZXJsYXktPnVwZGF0ZSgpOwog
fQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkU2Nyb2xsKCkKK3ZvaWQgUGFnZUFnZW50
OjpkaWRTY3JvbGwoKQogewogICAgIGlmIChtX2VuYWJsZWQpCiAgICAgICAgIG1fb3ZlcmxheS0+
dXBkYXRlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0
eWxlKCkKK3ZvaWQgUGFnZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkKIHsKICAgICBpZiAo
bV9lbmFibGVkKQogICAgICAgICBtX292ZXJsYXktPnVwZGF0ZSgpOwogfQogCi12b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2NyaXB0c0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCit2b2lkIFBhZ2VB
Z2VudDo6c2NyaXB0c0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCiB7CiAgICAgaWYgKG1faWdub3Jl
U2NyaXB0c0VuYWJsZWROb3RpZmljYXRpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTg5Niw3ICs4
OTYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2NyaXB0c0VuYWJsZWQoYm9vbCBpc0Vu
YWJsZWQpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNjcmlwdHNFbmFibGVkKGlzRW5hYmxl
ZCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9y
UGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK1JlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1l
KEZyYW1lKiBmcmFtZSkKIHsKICAgICBhdXRvIGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJZChmcmFtZUlkKGZyYW1l
KSkKQEAgLTkxNyw3ICs5MTcsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJh
bWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcgogICAgIHJldHVy
biBXVEY6Om1vdmUoZnJhbWVPYmplY3QpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RG
b3JGcmFtZVRyZWUoRnJhbWUqIGZyYW1lKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlPiBQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZy
YW1lKiBmcmFtZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+
IGZyYW1lT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShmcmFtZSk7CiAgICAgYXV0byBzdWJy
ZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7CkBAIC05MzYsNyArOTM2LDcgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRDYW5j
ZWxlZCh0cnVlKTsKICAgICAgICAgZWxzZSBpZiAoY2FjaGVkUmVzb3VyY2UtPnN0YXR1cygpID09
IENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpCiAgICAgICAgICAgICByZXNvdXJjZU9iamVjdC0+
c2V0RmFpbGVkKHRydWUpOwotICAgICAgICBTdHJpbmcgc291cmNlTWFwcGluZ1VSTCA9IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UpOwor
ICAgICAgICBTdHJpbmcgc291cmNlTWFwcGluZ1VSTCA9IFBhZ2VBZ2VudDo6c291cmNlTWFwVVJM
Rm9yUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UpOwogICAgICAgICBpZiAoIXNvdXJjZU1hcHBpbmdV
UkwuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVzb3VyY2VPYmplY3QtPnNldFNvdXJjZU1hcFVS
TChzb3VyY2VNYXBwaW5nVVJMKTsKICAgICAgICAgc3VicmVzb3VyY2VzLT5hZGRJdGVtKFdURjo6
bW92ZShyZXNvdXJjZU9iamVjdCkpOwpAQCAtOTU0LDE0ICs5NTQsMTQgQEAgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmJ1aWxkT2JqZWMKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6dXBkYXRlVG91Y2hFdmVudEVtdWxhdGlvbkluUGFnZShib29sIGVuYWJsZWQp
Cit2b2lkIFBhZ2VBZ2VudDo6dXBkYXRlVG91Y2hFdmVudEVtdWxhdGlvbkluUGFnZShib29sIGVu
YWJsZWQpCiB7CiAgICAgaWYgKG1haW5GcmFtZSgpKQogICAgICAgICBtYWluRnJhbWUoKS0+c2V0
dGluZ3MoKS5zZXRUb3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KICNlbmRp
ZgogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0VG91Y2hFbXVsYXRpb25FbmFibGVkKEVy
cm9yU3RyaW5nJiBlcnJvciwgYm9vbCBlbmFibGVkKQordm9pZCBQYWdlQWdlbnQ6OnNldFRvdWNo
RW11bGF0aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3IsIGJvb2wgZW5hYmxlZCkKIHsKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CkBAIC05NzIs
NyArOTcyLDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFRvdWNoRW11bGF0aW9uRW5h
YmxlZChFcnJvclN0cmluZyYgZXJyb3IsIGJvb2wgZW5hYmwKICNlbmRpZgogfQogCi12b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgbWVkaWEpCit2b2lkIFBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCiB7CiAgICAgaWYgKG1lZGlhID09IG1fZW11bGF0ZWRN
ZWRpYSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTg1LDI5ICs5ODUsMjkgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG1lZGlhKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFwcGx5RW11bGF0
ZWRNZWRpYShTdHJpbmcmIG1lZGlhKQordm9pZCBQYWdlQWdlbnQ6OmFwcGx5RW11bGF0ZWRNZWRp
YShTdHJpbmcmIG1lZGlhKQogewogICAgIGlmICghbV9lbXVsYXRlZE1lZGlhLmlzRW1wdHkoKSkK
ICAgICAgICAgbWVkaWEgPSBtX2VtdWxhdGVkTWVkaWE7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKEVycm9yU3RyaW5nJiwgYm9vbCog
b3V0UGFyYW0pCit2b2lkIFBhZ2VBZ2VudDo6Z2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShF
cnJvclN0cmluZyYsIGJvb2wqIG91dFBhcmFtKQogewogICAgICpvdXRQYXJhbSA9IG1fcGFnZS0+
c2V0dGluZ3MoKS5zaG93RGVidWdCb3JkZXJzKCkgfHwgbV9wYWdlLT5zZXR0aW5ncygpLnNob3dS
ZXBhaW50Q291bnRlcigpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29tcG9z
aXRpbmdCb3JkZXJzVmlzaWJsZShFcnJvclN0cmluZyYsIGJvb2wgdmlzaWJsZSkKK3ZvaWQgUGFn
ZUFnZW50OjpzZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKEVycm9yU3RyaW5nJiwgYm9vbCB2
aXNpYmxlKQogewogICAgIG1fcGFnZS0+c2V0dGluZ3MoKS5zZXRTaG93RGVidWdCb3JkZXJzKHZp
c2libGUpOwogICAgIG1fcGFnZS0+c2V0dGluZ3MoKS5zZXRTaG93UmVwYWludENvdW50ZXIodmlz
aWJsZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdE5vZGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBTdHJpbmcqIG91dERhdGFVUkwpCit2b2lk
IFBhZ2VBZ2VudDo6c25hcHNob3ROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5v
ZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJMKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1haW5GcmFt
ZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCk7CisgICAgRE9N
QWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5kb21BZ2VudCgpOwogICAg
IEFTU0VSVChkb21BZ2VudCk7CiAgICAgTm9kZSogbm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2Rl
KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTEwMjIsNyArMTAyMiw3
IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdE5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBTdHJpCiAgICAgKm91dERhdGFVUkwgPSBzbmFwc2hvdC0+
dG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwogfQogCi12b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5
c3RlbSwgU3RyaW5nKiBvdXREYXRhVVJMKQordm9pZCBQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwpA
QCAtMTA0MiwxMyArMTA0MiwxMyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3RS
ZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgsIGludCB5LCBpbgogICAgICpvdXRE
YXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTChBU0NJSUxpdGVyYWwoImltYWdlL3BuZyIpKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmhhbmRsZUphdmFTY3JpcHREaWFsb2coRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGFjY2VwdCwgY29uc3QgU3RyaW5nKiBwcm9tcHRU
ZXh0KQordm9pZCBQYWdlQWdlbnQ6OmhhbmRsZUphdmFTY3JpcHREaWFsb2coRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGFjY2VwdCwgY29uc3QgU3RyaW5nKiBwcm9tcHRUZXh0KQogewog
ICAgIGlmICghbV9jbGllbnQtPmhhbmRsZUphdmFTY3JpcHREaWFsb2coYWNjZXB0LCBwcm9tcHRU
ZXh0KSkKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBoYW5k
bGUgSmF2YVNjcmlwdCBkaWFsb2ciKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFy
Y2hpdmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBTdHJpbmcqIGRhdGEpCit2b2lkIFBhZ2VB
Z2VudDo6YXJjaGl2ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggY2M2ZTEw
ZmFmY2VmZThhODNjZTQ1YmU1MzliMjBmMjY0MmEzMjQ5My4uMDJiMWQ0NmNkNThlNDI4ODhkMGY0
ZjAyM2UxZTBiYjJkYTc0Y2ZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuaApAQCAtNTYsMTkgKzU2LDE5IEBAIGNsYXNzIEZyb250ZW5kOwogY2xh
c3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3Ry
dW1lbnRpbmdBZ2VudHM7Ci1jbGFzcyBVUkw7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVuZGVyT2Jq
ZWN0OwogY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKK2Ns
YXNzIFVSTDsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3Rv
clBhZ2VBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNw
ZWN0b3I6OlBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvclBhZ2VBZ2VudCk7CitjbGFzcyBQYWdlQWdlbnQgZmluYWwgOiBwdWJs
aWMgV2ViQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpQYWdlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlQWdlbnQpOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEluc3BlY3RvclBhZ2VBZ2VudChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJs
YXkqKTsKKyAgICBQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0
b3JDbGllbnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAKICAgICBlbnVtIFJlc291cmNlVHlwZSB7
CiAgICAgICAgIERvY3VtZW50UmVzb3VyY2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcAppbmRleCAyZjY4NzUzMjA1OTY5NzQ4MThmNjJh
NjVkMThlOTc2M2QzNDQ2N2M4Li4zMDE1NDdkZGIzNTQzY2NhYmM0ODBiZTZmMTE4ZjUwNzUzZGIx
NDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlB
Z2VudC5jcHAKQEAgLTE1MCwyOSArMTUwLDI5IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTCiAg
ICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLUluc3BlY3RvclJlcGxheUFnZW50OjpJbnNwZWN0b3JS
ZXBsYXlBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNw
ZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCkKLSAgICA6IEluc3BlY3RvckFnZW50QmFzZShBU0NJ
SUxpdGVyYWwoIlJlcGxheSIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorUmVwbGF5QWdlbnQ6OlJl
cGxheUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2VB
Z2VudCogcGFnZUFnZW50KQorICAgIDogV2ViQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiUmVwbGF5
IiksIGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX3BhZ2UoKnBhZ2VBZ2VudC0+cGFnZSgp
KQogewogfQogCi1JbnNwZWN0b3JSZXBsYXlBZ2VudDo6fkluc3BlY3RvclJlcGxheUFnZW50KCkK
K1JlcGxheUFnZW50Ojp+UmVwbGF5QWdlbnQoKQogewogICAgIEFTU0VSVCghbV9zZXNzaW9uc01h
cC5zaXplKCkpOwogICAgIEFTU0VSVCghbV9zZWdtZW50c01hcC5zaXplKCkpOwogfQogCi1XZWJD
b3JlOjpTZXNzaW9uU3RhdGUgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSgpIGNv
bnN0CitXZWJDb3JlOjpTZXNzaW9uU3RhdGUgUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc2Vzc2lvblN0YXRl
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3ZvaWQgUmVwbGF5
QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91
bmlxdWU8SW5zcGVjdG9yOjpSZXBsYXlGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5l
bCk7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3Rvcjo6UmVwbGF5QmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiAKLSAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclJlcGxheUFnZW50KHRoaXMpOworICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy0+c2V0UmVwbGF5QWdlbnQodGhpcyk7CiAgICAgQVNTRVJUKHNlc3Np
b25TdGF0ZSgpID09IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpOwogCiAgICAgLy8g
S2VlcCB0cmFjayBvZiB0aGUgKGRlZmF1bHQpIHNlc3Npb24gY3VycmVudGx5IGxvYWRlZCBieSBS
ZXBsYXlDb250cm9sbGVyLApAQCAtMTg0LDM3ICsxODQsMzcgQEAgdm9pZCBJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmUKICAgICAgICAgbV9zZWdtZW50c01hcC5hZGQoKCppdCktPmlkZW50aWZpZXIoKSwgKml0
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQordm9pZCBSZXBsYXlBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLmNsZWFyKCk7CiAKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3Bl
Y3RvclJlcGxheUFnZW50KG51bGxwdHIpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0
UmVwbGF5QWdlbnQobnVsbHB0cik7CiAKICAgICAvLyBEcm9wIHJlZmVyZW5jZXMgdG8gYWxsIHNl
c3Npb25zIGFuZCBzZWdtZW50cy4KICAgICBtX3Nlc3Npb25zTWFwLmNsZWFyKCk7CiAgICAgbV9z
ZWdtZW50c01hcC5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpmcmFt
ZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciogbG9hZGVyKQordm9pZCBSZXBsYXlBZ2VudDo6ZnJh
bWVOYXZpZ2F0ZWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAoc2Vzc2lvblN0
YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkKICAgICAgICAgbV9wYWdl
LnJlcGxheUNvbnRyb2xsZXIoKS5mcmFtZU5hdmlnYXRlZChsb2FkZXIpOwogfQogCi12b2lkIElu
c3BlY3RvclJlcGxheUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lJiBmcmFtZSkKK3ZvaWQgUmVw
bGF5QWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUmIGZyYW1lKQogewogICAgIGlmIChzZXNzaW9u
U3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3Bh
Z2UucmVwbGF5Q29udHJvbGxlcigpLmZyYW1lRGV0YWNoZWQoZnJhbWUpOwogfQogCi12b2lkIElu
c3BlY3RvclJlcGxheUFnZW50Ojp3aWxsRGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCYgZXZlbnQs
IEZyYW1lKiBmcmFtZSkKK3ZvaWQgUmVwbGF5QWdlbnQ6OndpbGxEaXNwYXRjaEV2ZW50KGNvbnN0
IEV2ZW50JiBldmVudCwgRnJhbWUqIGZyYW1lKQogewogICAgIGlmIChzZXNzaW9uU3RhdGUoKSAh
PSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3BhZ2UucmVwbGF5
Q29udHJvbGxlcigpLndpbGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBmcmFtZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25DcmVhdGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9u
PiYmIHNlc3Npb24pCit2b2lkIFJlcGxheUFnZW50OjpzZXNzaW9uQ3JlYXRlZChSZWZQdHI8UmVw
bGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uc01h
cC5hZGQoc2Vzc2lvbi0+aWRlbnRpZmllcigpLCBzZXNzaW9uKTsKICAgICAvLyBDYW4ndCBoYXZl
IHR3byBzZXNzaW9ucyB3aXRoIHNhbWUgaWRlbnRpZmllci4KQEAgLTIyMywxMiArMjIzLDEyIEBA
IHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25DcmVhdGVkKFJlZlB0cjxSZXBsYXlT
ZXNzaW9uPiYmIHNlc3Npb24pCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNlc3Npb25DcmVh
dGVkKHNlc3Npb24tPmlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdl
bnQ6OnNlc3Npb25Nb2RpZmllZChSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQordm9p
ZCBSZXBsYXlBZ2VudDo6c2Vzc2lvbk1vZGlmaWVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNl
c3Npb24pCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNlc3Npb25Nb2RpZmllZChzZXNz
aW9uLT5pZGVudGlmaWVyKCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpzZXNz
aW9uTG9hZGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCit2b2lkIFJlcGxheUFn
ZW50OjpzZXNzaW9uTG9hZGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7CiAg
ICAgLy8gSW4gY2FzZSB3ZSBkaWRuJ3Qga25vdyBhYm91dCB0aGUgbG9hZGVkIHNlc3Npb24sIGFk
ZCBoZXJlLgogICAgIG1fc2Vzc2lvbnNNYXAuYWRkKHNlc3Npb24tPmlkZW50aWZpZXIoKSwgc2Vz
c2lvbik7CkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vz
c2lvbkxvYWRlZChSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5zZXNzaW9uTG9hZGVkKHNlc3Npb24tPmlkZW50aWZpZXIoKSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21lbnRDcmVhdGVkKFJlZlB0cjxSZXBsYXlT
ZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQordm9pZCBSZXBsYXlBZ2VudDo6c2VnbWVudENyZWF0
ZWQoUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7CiAgICAgYXV0byBy
ZXN1bHQgPSBtX3NlZ21lbnRzTWFwLmFkZChzZWdtZW50LT5pZGVudGlmaWVyKCksIHNlZ21lbnQp
OwogICAgIC8vIENhbid0IGhhdmUgdHdvIHNlZ21lbnRzIHdpdGggdGhlIHNhbWUgaWRlbnRpZmll
ci4KQEAgLTI0NSwxMiArMjQ1LDEyIEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21l
bnRDcmVhdGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50CiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnNlZ21lbnRDcmVhdGVkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21lbnRDb21wbGV0ZWQoUmVmUHRy
PFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCit2b2lkIFJlcGxheUFnZW50OjpzZWdt
ZW50Q29tcGxldGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQogewog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zZWdtZW50Q29tcGxldGVkKHNlZ21lbnQtPmlkZW50
aWZpZXIoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21lbnRMb2FkZWQo
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCit2b2lkIFJlcGxheUFnZW50
OjpzZWdtZW50TG9hZGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQog
ewogICAgIC8vIEluIGNhc2Ugd2UgZGlkbid0IGtub3cgYWJvdXQgdGhlIGxvYWRlZCBzZWdtZW50
LCBhZGQgaGVyZS4KICAgICBtX3NlZ21lbnRzTWFwLmFkZChzZWdtZW50LT5pZGVudGlmaWVyKCks
IHNlZ21lbnQuY29weVJlZigpKTsKQEAgLTI1OCw1MiArMjU4LDUyIEBAIHZvaWQgSW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OnNlZ21lbnRMb2FkZWQoUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYm
IHNlZ21lbnQpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNlZ21lbnRMb2FkZWQoc2VnbWVu
dC0+aWRlbnRpZmllcigpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2VnbWVu
dFVubG9hZGVkKCkKK3ZvaWQgUmVwbGF5QWdlbnQ6OnNlZ21lbnRVbmxvYWRlZCgpCiB7CiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnNlZ21lbnRVbmxvYWRlZCgpOwogfQogCi12b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50OjpjYXB0dXJlU3RhcnRlZCgpCit2b2lkIFJlcGxheUFnZW50OjpjYXB0
dXJlU3RhcnRlZCgpCiB7CiAgICAgTE9HKFdlYlJlcGxheSwgIi0tLS0tQ0FQVFVSRSBTVEFSVC0t
LS0tIik7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FwdHVyZVN0YXJ0ZWQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y2FwdHVyZVN0b3BwZWQoKQordm9pZCBSZXBs
YXlBZ2VudDo6Y2FwdHVyZVN0b3BwZWQoKQogewogICAgIExPRyhXZWJSZXBsYXksICItLS0tLUNB
UFRVUkUgU1RPUC0tLS0tIik7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FwdHVyZVN0
b3BwZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJhY2tTdGFydGVk
KCkKK3ZvaWQgUmVwbGF5QWdlbnQ6OnBsYXliYWNrU3RhcnRlZCgpCiB7CiAgICAgTE9HKFdlYlJl
cGxheSwgIi0tLS0tUkVQTEFZIFNUQVJULS0tLS0iKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5wbGF5YmFja1N0YXJ0ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6
cGxheWJhY2tQYXVzZWQoY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQordm9pZCBSZXBs
YXlBZ2VudDo6cGxheWJhY2tQYXVzZWQoY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQog
ewogICAgIExPRyhXZWJSZXBsYXksICItLS0tLVJFUExBWSBQQVVTRUQtLS0tLSIpOwogCiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnBsYXliYWNrUGF1c2VkKGJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9yUG9zaXRpb24ocG9zaXRpb24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6
cGxheWJhY2tIaXRQb3NpdGlvbihjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24pCit2b2lk
IFJlcGxheUFnZW50OjpwbGF5YmFja0hpdFBvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9uJiBw
b3NpdGlvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cGxheWJhY2tIaXRQb3NpdGlv
bihidWlsZEluc3BlY3Rvck9iamVjdEZvclBvc2l0aW9uKHBvc2l0aW9uKSwgbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpwbGF5
YmFja0ZpbmlzaGVkKCkKK3ZvaWQgUmVwbGF5QWdlbnQ6OnBsYXliYWNrRmluaXNoZWQoKQogewog
ICAgIExPRyhXZWJSZXBsYXksICItLS0tLVJFUExBWSBGSU5JU0hFRC0tLS0tIik7CiAKICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+cGxheWJhY2tGaW5pc2hlZCgpOwogfQogCi12b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50OjpzdGFydENhcHR1cmluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
Cit2b2lkIFJlcGxheUFnZW50OjpzdGFydENhcHR1cmluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCiB7CiAgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6
SW5hY3RpdmUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHN0
YXJ0IGNhcHR1cmluZyBpZiB0aGUgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZyBvciByZXBs
YXlpbmcuIik7CkBAIC0zMTMsNyArMzEzLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6
c3RhcnRDYXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIG1fcGFnZS5yZXBs
YXlDb250cm9sbGVyKCkuc3RhcnRDYXB0dXJpbmcoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6c3RvcENhcHR1cmluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCit2b2lkIFJl
cGxheUFnZW50OjpzdG9wQ2FwdHVyaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAg
ICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcp
IHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHN0b3AgY2FwdHVy
aW5nIGlmIGNhcHR1cmUgaXMgbm90IGluIHByb2dyZXNzLiIpOwpAQCAtMzIzLDcgKzMyMyw3IEBA
IHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQogICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc3RvcENhcHR1cmluZygp
OwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwb3Np
dGlvbk9iamVjdCwgYm9vbCBmYXN0UmVwbGF5KQordm9pZCBSZXBsYXlBZ2VudDo6cmVwbGF5VG9Q
b3NpdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgcG9zaXRpb25PYmplY3QsIGJvb2wgZmFzdFJlcGxheSkKIHsKICAgICBSZXBsYXlQ
b3NpdGlvbiBwb3NpdGlvbjsKICAgICBpZiAoIXBvc2l0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKEFT
Q0lJTGl0ZXJhbCgic2VnbWVudE9mZnNldCIpLCBwb3NpdGlvbi5zZWdtZW50T2Zmc2V0KSkgewpA
QCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9z
aXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQCiAgICAgbV9wYWdlLnJl
cGxheUNvbnRyb2xsZXIoKS5yZXBsYXlUb1Bvc2l0aW9uKHBvc2l0aW9uLCAoZmFzdFJlcGxheSkg
PyBEaXNwYXRjaFNwZWVkOjpGYXN0Rm9yd2FyZCA6IERpc3BhdGNoU3BlZWQ6OlJlYWxUaW1lKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21wbGV0aW9uKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBmYXN0UmVwbGF5KQordm9pZCBSZXBsYXlBZ2VudDo6
cmVwbGF5VG9Db21wbGV0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBmYXN0UmVw
bGF5KQogewogICAgIGlmIChzZXNzaW9uU3RhdGUoKSA9PSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6
OkNhcHR1cmluZykgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qg
c3RhcnQgcmVwbGF5IHdoaWxlIGNhcHR1cmUgaXMgaW4gcHJvZ3Jlc3MuIik7CkBAIC0zNTQsNyAr
MzU0LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21wbGV0aW9uKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBmYXMKICAgICBtX3BhZ2UucmVwbGF5Q29udHJv
bGxlcigpLnJlcGxheVRvQ29tcGxldGlvbigoZmFzdFJlcGxheSkgPyBEaXNwYXRjaFNwZWVkOjpG
YXN0Rm9yd2FyZCA6IERpc3BhdGNoU3BlZWQ6OlJlYWxUaW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6cGF1c2VQbGF5YmFjayhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCit2
b2lkIFJlcGxheUFnZW50OjpwYXVzZVBsYXliYWNrKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykK
IHsKICAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpSZXBs
YXlpbmcpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHBhdXNl
IHBsYXliYWNrIGlmIHBsYXliYWNrIGlzIG5vdCBpbiBwcm9ncmVzcy4iKTsKQEAgLTM2NCw3ICsz
NjQsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpwYXVzZVBsYXliYWNrKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZykKICAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnBhdXNlUGxh
eWJhY2soKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y2FuY2VsUGxheWJhY2so
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQordm9pZCBSZXBsYXlBZ2VudDo6Y2FuY2VsUGxheWJh
Y2soRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogewogICAgIGlmIChzZXNzaW9uU3RhdGUoKSA9
PSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZykgewogICAgICAgICBlcnJvclN0cmlu
ZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3QgY2FuY2VsIHBsYXliYWNrIGlmIGNhcHR1cmUgaXMgaW4g
cHJvZ3Jlc3MuIik7CkBAIC0zNzQsNyArMzc0LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6Y2FuY2VsUGxheWJhY2soRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIG1fcGFnZS5y
ZXBsYXlDb250cm9sbGVyKCkuY2FuY2VsUGxheWJhY2soKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JS
ZXBsYXlBZ2VudDo6c3dpdGNoU2Vzc2lvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3Zv
aWQgUmVwbGF5QWdlbnQ6OnN3aXRjaFNlc3Npb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIp
CiB7CiAgICAgQVNTRVJUX0FSRyhpZGVudGlmaWVyLCBpZGVudGlmaWVyID4gMCk7CiAKQEAgLTM5
MCw3ICszOTAsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9uKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yOjpQcgogICAgIG1fcGFnZS5yZXBsYXlD
b250cm9sbGVyKCkuc3dpdGNoU2Vzc2lvbihXVEY6Om1vdmUoc2Vzc2lvbikpOwogfQogCi12b2lk
IEluc3BlY3RvclJlcGxheUFnZW50OjppbnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZp
ZXIgc2Vzc2lvbklkZW50aWZpZXIsIFNlZ21lbnRJZGVudGlmaWVyIHNlZ21lbnRJZGVudGlmaWVy
LCBpbnQgc2VnbWVudEluZGV4KQordm9pZCBSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21l
bnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6
OlNlc3Npb25JZGVudGlmaWVyIHNlc3Npb25JZGVudGlmaWVyLCBTZWdtZW50SWRlbnRpZmllciBz
ZWdtZW50SWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkKIHsKICAgICBBU1NFUlRfQVJHKHNl
c3Npb25JZGVudGlmaWVyLCBzZXNzaW9uSWRlbnRpZmllciA+IDApOwogICAgIEFTU0VSVF9BUkco
c2VnbWVudElkZW50aWZpZXIsIHNlZ21lbnRJZGVudGlmaWVyID4gMCk7CkBAIC00MTYsNyArNDE2
LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWMKICAgICBzZXNzaW9uTW9kaWZpZWQoV1RGOjpt
b3ZlKHNlc3Npb24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVtb3ZlU2Vz
c2lvblNlZ21lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgp
Cit2b2lkIFJlcGxheUFnZW50OjpyZW1vdmVTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIg
aWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkKIHsKICAgICBBU1NFUlRfQVJHKGlkZW50aWZp
ZXIsIGlkZW50aWZpZXIgPiAwKTsKICAgICBBU1NFUlRfQVJHKHNlZ21lbnRJbmRleCwgc2VnbWVu
dEluZGV4ID49IDApOwpAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdl
bnQ6OnJlbW92ZVNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVj
CiAgICAgc2Vzc2lvbk1vZGlmaWVkKFdURjo6bW92ZShzZXNzaW9uKSk7CiB9CiAKLVJlZlB0cjxS
ZXBsYXlTZXNzaW9uPiBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZmluZFNlc3Npb24oRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVyKQorUmVmUHRyPFJl
cGxheVNlc3Npb24+IFJlcGxheUFnZW50OjpmaW5kU2Vzc2lvbihFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIFNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUX0FSRyhp
ZGVudGlmaWVyLCBpZGVudGlmaWVyID4gMCk7CiAKQEAgLTQ1Myw3ICs0NTMsNyBAQCBSZWZQdHI8
UmVwbGF5U2Vzc2lvbj4gSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZpbmRTZXNzaW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLVJlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4gSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZpbmRTZWdtZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgU2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllcikKK1JlZlB0
cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gUmVwbGF5QWdlbnQ6OmZpbmRTZWdtZW50KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgU2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKICAgICBB
U1NFUlRfQVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIgPiAwKTsKIApAQCAtNDY2LDcgKzQ2Niw3
IEBAIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZp
bmRTZWdtZW50KEVycm9yU3RyaW5nJiBlcnJvCiAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVycm9yU3RyaW5n
JiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciogc2Vzc2lv
bklkZW50aWZpZXIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZXBsYXk6OlNlZ21lbnRJZGVudGlmaWVyPiogc2VnbWVudElkZW50aWZpZXIsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblN0YXRlKiBzZXNzaW9uU3RhdGUsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudFN0YXRlKiBzZWdtZW50U3RhdGUsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiYgcmVwbGF5
UG9zaXRpb24pCit2b2lkIFJlcGxheUFnZW50OjpjdXJyZW50UmVwbGF5U3RhdGUoRXJyb3JTdHJp
bmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyKiBzZXNz
aW9uSWRlbnRpZmllciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXI+KiBzZWdtZW50SWRlbnRpZmllciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU3RhdGUqIHNlc3Npb25TdGF0ZSwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZWdtZW50U3RhdGUqIHNlZ21lbnRTdGF0ZSwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+JiByZXBs
YXlQb3NpdGlvbikKIHsKICAgICAqc2Vzc2lvblN0YXRlID0gYnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JTZXNzaW9uU3RhdGUobV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zZXNzaW9uU3RhdGUoKSk7
CiAgICAgKnNlZ21lbnRTdGF0ZSA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFN0YXRl
KG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc2VnbWVudFN0YXRlKCkpOwpAQCAtNDc4LDE0ICs0
NzgsMTQgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVy
cm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDoKICAgICByZXBsYXlQb3NpdGlvbiA9IGJ1
aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24obV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5j
dXJyZW50UG9zaXRpb24oKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldEF2
YWlsYWJsZVNlc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFNlc3Npb25JZGVudGlmaWVyPj4mIHNlc3Npb25zTGlzdCkKK3ZvaWQgUmVwbGF5QWdl
bnQ6OmdldEF2YWlsYWJsZVNlc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFNlc3Npb25JZGVudGlmaWVyPj4mIHNlc3Npb25zTGlzdCkKIHsKICAg
ICBzZXNzaW9uc0xpc3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChh
dXRvJiBwYWlyIDogbV9zZXNzaW9uc01hcCkKICAgICAgICAgc2Vzc2lvbnNMaXN0LT5hZGRJdGVt
KHBhaXIua2V5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRh
dGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6
OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSZXBsYXk6OlJlcGxheVNlc3Npb24+JiBzZXJpYWxpemVkT2JqZWN0KQordm9pZCBSZXBsYXlB
Z2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+JiBzZXJpYWxpemVkT2Jq
ZWN0KQogewogICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gZmluZFNlc3Npb24o
ZXJyb3JTdHJpbmcsIGlkZW50aWZpZXIpOwogICAgIGlmICghc2Vzc2lvbikgewpAQCAtNDk2LDcg
KzQ5Niw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlc3Npb25EYXRhKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yOjpQCiAgICAgc2VyaWFsaXplZE9iamVjdCA9
IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihXVEY6Om1vdmUoc2Vzc2lvbikpOwogfQog
Ci12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZp
ZXIgaWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lv
blNlZ21lbnQ+JiBzZXJpYWxpemVkT2JqZWN0KQordm9pZCBSZXBsYXlBZ2VudDo6Z2V0U2VnbWVu
dERhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBs
YXk6OlNlZ21lbnRJZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiYgc2VyaWFsaXplZE9iamVjdCkKIHsKICAgICBS
ZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnQgPSBmaW5kU2VnbWVudChlcnJvclN0
cmluZywgaWRlbnRpZmllcik7CiAgICAgaWYgKCFzZWdtZW50KSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oCmluZGV4IDMzYmYyOWMxMWE1MTBj
YmE5MzNmODVhZTVhMmU1ZjIyNDA2NTYwNGIuLjZiNjUwNmE2ZjczMDg3NzI0ODJjY2M4MmEyMjU0
MWJmYmFmY2FhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXBsYXlBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXBsYXlBZ2VudC5oCkBAIC00Miw5ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IERvY3VtZW50TG9hZGVyOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIEluc3Bl
Y3RvclBhZ2VBZ2VudDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBQYWdlOwor
Y2xhc3MgUGFnZUFnZW50OwogY2xhc3MgUmVwbGF5U2Vzc2lvbjsKIGNsYXNzIFJlcGxheVNlc3Np
b25TZWdtZW50OwogCkBAIC01NiwxMyArNTYsMTMgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiB0eXBlZGVmIGludCBTZXNzaW9uSWRlbnRpZmllcjsKIHR5cGVkZWYgaW50IFNlZ21lbnRJ
ZGVudGlmaWVyOwogCi1jbGFzcyBJbnNwZWN0b3JSZXBsYXlBZ2VudCBmaW5hbAotICAgIDogcHVi
bGljIEluc3BlY3RvckFnZW50QmFzZQorY2xhc3MgUmVwbGF5QWdlbnQgZmluYWwKKyAgICA6IHB1
YmxpYyBXZWJBZ2VudEJhc2UKICAgICAsIHB1YmxpYyBJbnNwZWN0b3I6OlJlcGxheUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUmVw
bGF5QWdlbnQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlcGxheUFnZW50KTsKIHB1Ymxp
YzoKLSAgICBJbnNwZWN0b3JSZXBsYXlBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVj
dG9yUGFnZUFnZW50Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yUmVwbGF5QWdlbnQoKTsKKyAg
ICBSZXBsYXlBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZUFnZW50Kik7CisgICAgdmly
dHVhbCB+UmVwbGF5QWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0b3I6OkJhY2tl
bmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5j
cHAKaW5kZXggZjliYmY4MDhlMGIyMTYyYjZlYzgxODNhNjA3OThhZTQwYjUxOTE0OS4uYTQ4YjIy
ZmI4MTQ5ZjJiMWQxZDUyZTJmY2RjNjlhODg4MDMwNTljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMTYxLDggKzE2
MSw4IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlCiAKLUluc3BlY3RvclJlc291cmNlQWdl
bnQ6Okluc3BlY3RvclJlc291cmNlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvckNsaWVu
dCogY2xpZW50KQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiTmV0d29y
ayIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorUmVzb3VyY2VBZ2VudDo6UmVzb3VyY2VBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlQWdlbnQqIHBhZ2VB
Z2VudCwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlM
aXRlcmFsKCJOZXR3b3JrIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX3BhZ2VBZ2Vu
dChwYWdlQWdlbnQpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3Jlc291cmNlc0Rh
dGEoc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrUmVzb3VyY2VzRGF0YT4oKSkKQEAgLTE3MywxMyAr
MTczLDEzIEBAIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Okluc3BlY3RvclJlc291cmNlQWdlbnQo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRDcmVhdGVGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5l
bCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6TmV0
d29ya0Zyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gSW5zcGVjdG9yOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShi
YWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
c29uKQordm9pZCBSZXNvdXJjZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIg
PSBudWxscHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKQEAgLTI0OSwzNSAr
MjQ5LDM1IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVk
UmVzb3VyY2U+IGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzCiB7CiAgICAgYXV0byByZXNvdXJjZU9i
amVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlOjpjcmVh
dGUoKQogICAgICAgICAuc2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwoKSkKLSAgICAgICAgLnNl
dFR5cGUoSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uKCpjYWNoZWRS
ZXNvdXJjZSkpCisgICAgICAgIC5zZXRUeXBlKFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBl
SnNvbigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAuc2V0Qm9keVNpemUoY2FjaGVkUmVzb3Vy
Y2UtPmVuY29kZWRTaXplKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBhdXRvIHJlc291
cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3Vy
Y2UtPnJlc3BvbnNlKCksIGxvYWRlcik7CiAgICAgcmVzb3VyY2VPYmplY3QtPnNldFJlc3BvbnNl
KFdURjo6bW92ZShyZXNvdXJjZVJlc3BvbnNlKSk7CiAKLSAgICBTdHJpbmcgc291cmNlTWFwcGlu
Z1VSTCA9IEluc3BlY3RvclBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoY2FjaGVk
UmVzb3VyY2UpOworICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMID0gUGFnZUFnZW50Ojpzb3Vy
Y2VNYXBVUkxGb3JSZXNvdXJjZShjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFzb3VyY2VNYXBw
aW5nVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmVzb3VyY2VPYmplY3QtPnNldFNvdXJjZU1hcFVS
TChzb3VyY2VNYXBwaW5nVVJMKTsKIAogICAgIHJldHVybiBXVEY6Om1vdmUocmVzb3VyY2VPYmpl
Y3QpOwogfQogCi1JbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp+SW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCgpCitSZXNvdXJjZUFnZW50Ojp+UmVzb3VyY2VBZ2VudCgpCiB7CiAgICAgaWYgKG1fZW5hYmxl
ZCkgewogICAgICAgICBFcnJvclN0cmluZyB1bnVzZWQ7CiAgICAgICAgIGRpc2FibGUodW51c2Vk
KTsKICAgICB9Ci0gICAgQVNTRVJUKCFtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJl
c291cmNlQWdlbnQoKSk7CisgICAgQVNTRVJUKCFtX2luc3RydW1lbnRpbmdBZ2VudHMtPnJlc291
cmNlQWdlbnQoKSk7CiB9CiAKLWRvdWJsZSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp0aW1lc3Rh
bXAoKQorZG91YmxlIFJlc291cmNlQWdlbnQ6OnRpbWVzdGFtcCgpCiB7CiAgICAgcmV0dXJuIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9w
d2F0Y2goKS0+ZWxhcHNlZFRpbWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRl
ciYgbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlZGlyZWN0UmVzcG9uc2UpCit2b2lkIFJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVz
dCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyJiBsb2FkZXIsIFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKIHsKICAgICBpZiAocmVxdWVzdC5oaWRkZW5Gcm9tSW5zcGVjdG9yKCkpIHsKICAgICAg
ICAgbV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIpOwpAQCAtMjg3LDE1
ICsyODcsMTUgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3Qo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICBTdHJpbmcgcmVxdWVzdElk
ID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7CiAgICAgbV9yZXNv
dXJjZXNEYXRhLT5yZXNvdXJjZUNyZWF0ZWQocmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+bG9hZGVy
SWQoJmxvYWRlcikpOwogCi0gICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gSW5z
cGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShsb2FkZXIuZnJhbWUoKSwgcmVxdWVzdC51
cmwoKSk7Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSA9IGNhY2hl
ZFJlc291cmNlID8gSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNhY2hl
ZFJlc291cmNlKSA6IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCk7Ci0g
ICAgaWYgKHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlKSB7CisgICAg
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZShsb2FkZXIuZnJhbWUoKSwgcmVxdWVzdC51cmwoKSk7CisgICAgUGFnZUFnZW50OjpSZXNvdXJj
ZVR5cGUgdHlwZSA9IGNhY2hlZFJlc291cmNlID8gUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5
cGUoKmNhY2hlZFJlc291cmNlKSA6IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVl
c3RJZCk7CisgICAgaWYgKHR5cGUgPT0gUGFnZUFnZW50OjpPdGhlclJlc291cmNlKSB7CiAgICAg
ICAgIGlmIChtX2xvYWRpbmdYSFJTeW5jaHJvbm91c2x5KQotICAgICAgICAgICAgdHlwZSA9IElu
c3BlY3RvclBhZ2VBZ2VudDo6WEhSUmVzb3VyY2U7CisgICAgICAgICAgICB0eXBlID0gUGFnZUFn
ZW50OjpYSFJSZXNvdXJjZTsKICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50
SWRlbnRpZmllcihyZXF1ZXN0LnVybCgpLCBsb2FkZXIuZnJhbWVMb2FkZXIoKS0+aWNvbigpLnVy
bCgpKSkKLSAgICAgICAgICAgIHR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OkltYWdlUmVzb3Vy
Y2U7CisgICAgICAgICAgICB0eXBlID0gUGFnZUFnZW50OjpJbWFnZVJlc291cmNlOwogICAgICAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHJlcXVlc3QudXJsKCks
IGxvYWRlci51cmwoKSkgJiYgIWxvYWRlci5pc0NvbW1pdHRlZCgpKQotICAgICAgICAgICAgdHlw
ZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZTsKKyAgICAgICAgICAgIHR5
cGUgPSBQYWdlQWdlbnQ6OkRvY3VtZW50UmVzb3VyY2U7CiAgICAgfQogCiAgICAgbV9yZXNvdXJj
ZXNEYXRhLT5zZXRSZXNvdXJjZVR5cGUocmVxdWVzdElkLCB0eXBlKTsKQEAgLTMxOCwxMyArMzE4
LDEzIEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDYWNoZUNvbnRyb2wsICJuby1jYWNoZSIpOwogICAg
IH0KIAotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSByZXNvdXJj
ZVR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24odHlwZSk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSA9IFBh
Z2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbih0eXBlKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IGluaXRpYXRvck9iamVjdCA9IGJ1aWxkSW5p
dGlhdG9yT2JqZWN0KGxvYWRlci5mcmFtZSgpID8gbG9hZGVyLmZyYW1lKCktPmRvY3VtZW50KCkg
OiBudWxscHRyKTsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQo
cmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXIuZnJhbWUoKSksIG1fcGFnZUFn
ZW50LT5sb2FkZXJJZCgmbG9hZGVyKSwgbG9hZGVyLnVybCgpLnN0cmluZygpLCBidWlsZE9iamVj
dEZvclJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgdGltZXN0YW1wKCksIGluaXRpYXRvck9iamVj
dCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UsICZsb2Fk
ZXIpLCB0eXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZSA/ICZyZXNvdXJj
ZVR5cGUgOiBudWxscHRyKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxC
ZVNlbnQocmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXIuZnJhbWUoKSksIG1f
cGFnZUFnZW50LT5sb2FkZXJJZCgmbG9hZGVyKSwgbG9hZGVyLnVybCgpLnN0cmluZygpLCBidWls
ZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgdGltZXN0YW1wKCksIGluaXRpYXRv
ck9iamVjdCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2Us
ICZsb2FkZXIpLCB0eXBlICE9IFBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZSA/ICZyZXNvdXJjZVR5
cGUgOiBudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjptYXJrUmVz
b3VyY2VBc0NhY2hlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit2b2lkIFJlc291cmNlQWdl
bnQ6Om1hcmtSZXNvdXJjZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAg
ICBpZiAobV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMuY29udGFpbnMoaWRlbnRpZmllcikpCiAg
ICAgICAgIHJldHVybjsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNl
QWdlbnQ6Om1hcmtSZXNvdXJjZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFNlcnZlZEZyb21DYWNoZShJZGVudGlmaWVy
c0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIm
IGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlTG9hZGVy
KiByZXNvdXJjZUxvYWRlcikKIHsKICAgICBpZiAobV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMu
Y29udGFpbnMoaWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybjsKQEAgLTM0Niw3ICszNDYsNyBA
QCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZQogICAgIGlmIChyZXNvdXJjZUxvYWRlciAmJiByZXNv
dXJjZUxvYWRlci0+aXNTdWJyZXNvdXJjZUxvYWRlcigpICYmICFpc05vdE1vZGlmaWVkKQogICAg
ICAgICBjYWNoZWRSZXNvdXJjZSA9IHN0YXRpY19jYXN0PFN1YnJlc291cmNlTG9hZGVyKj4ocmVz
b3VyY2VMb2FkZXIpLT5jYWNoZWRSZXNvdXJjZSgpOwogICAgIGlmICghY2FjaGVkUmVzb3VyY2Up
Ci0gICAgICAgIGNhY2hlZFJlc291cmNlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNv
dXJjZShsb2FkZXIuZnJhbWUoKSwgcmVzcG9uc2UudXJsKCkpOworICAgICAgICBjYWNoZWRSZXNv
dXJjZSA9IFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UobG9hZGVyLmZyYW1lKCksIHJlc3BvbnNl
LnVybCgpKTsKIAogICAgIGlmIChjYWNoZWRSZXNvdXJjZSkgewogICAgICAgICAvLyBVc2UgbWlt
ZSB0eXBlIGZyb20gY2FjaGVkIHJlc291cmNlIGluIGNhc2UgdGhlIG9uZSBpbiByZXNwb25zZSBp
cyBlbXB0eS4KQEAgLTM1NSwxOCArMzU1LDE4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lCiAg
ICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+YWRkQ2FjaGVkUmVzb3VyY2UocmVxdWVzdElkLCBjYWNo
ZWRSZXNvdXJjZSk7CiAgICAgfQogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5
cGUgdHlwZSA9IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCk7Ci0gICAg
SW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgbmV3VHlwZSA9IGNhY2hlZFJlc291cmNl
ID8gSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNhY2hlZFJlc291cmNl
KSA6IHR5cGU7CisgICAgUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSA9IG1fcmVzb3VyY2Vz
RGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCk7CisgICAgUGFnZUFnZW50OjpSZXNvdXJjZVR5
cGUgbmV3VHlwZSA9IGNhY2hlZFJlc291cmNlID8gUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5
cGUoKmNhY2hlZFJlc291cmNlKSA6IHR5cGU7CiAKICAgICAvLyBGSVhNRTogWEhSUmVzb3VyY2Ug
aXMgcmV0dXJuZWQgZm9yIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZSwgaXQgc2hvdWxkIGJl
IE90aGVyUmVzb3VyY2UgdW5sZXNzIGl0IHRydWx5IGlzIGFuIFhIUi4KICAgICAvLyBSYXdSZXNv
dXJjZSBpcyB1c2VkIGZvciBsb2FkaW5nIHdvcmtlciBzY3JpcHRzLCBhbmQgdGhvc2Ugc2hvdWxk
IHN0YXkgYXMgU2NyaXB0UmVzb3VyY2UgYW5kIG5vdCBjaGFuZ2UgdG8gWEhSUmVzb3VyY2UuCi0g
ICAgaWYgKHR5cGUgIT0gbmV3VHlwZSAmJiBuZXdUeXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6
WEhSUmVzb3VyY2UgJiYgbmV3VHlwZSAhPSBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3Vy
Y2UpCisgICAgaWYgKHR5cGUgIT0gbmV3VHlwZSAmJiBuZXdUeXBlICE9IFBhZ2VBZ2VudDo6WEhS
UmVzb3VyY2UgJiYgbmV3VHlwZSAhPSBQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpCiAgICAgICAg
IHR5cGUgPSBuZXdUeXBlOwogCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5yZXNwb25zZVJlY2VpdmVk
KHJlcXVlc3RJZCwgbV9wYWdlQWdlbnQtPmZyYW1lSWQobG9hZGVyLmZyYW1lKCkpLCByZXNwb25z
ZSk7CiAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZVR5cGUocmVxdWVzdElkLCB0eXBl
KTsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZVJlY2VpdmVkKHJlcXVlc3RJ
ZCwgbV9wYWdlQWdlbnQtPmZyYW1lSWQobG9hZGVyLmZyYW1lKCkpLCBtX3BhZ2VBZ2VudC0+bG9h
ZGVySWQoJmxvYWRlciksIHRpbWVzdGFtcCgpLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNl
VHlwZUpzb24odHlwZSksIHJlc291cmNlUmVzcG9uc2UpOworICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5yZXNwb25zZVJlY2VpdmVkKHJlcXVlc3RJZCwgbV9wYWdlQWdlbnQtPmZyYW1lSWQobG9h
ZGVyLmZyYW1lKCkpLCBtX3BhZ2VBZ2VudC0+bG9hZGVySWQoJmxvYWRlciksIHRpbWVzdGFtcCgp
LCBQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24odHlwZSksIHJlc291cmNlUmVzcG9uc2UpOwog
CiAgICAgLy8gSWYgd2UgcmV2YWxpZGF0ZWQgdGhlIHJlc291cmNlIGFuZCBnb3QgTm90IG1vZGlm
aWVkLCBzZW5kIGNvbnRlbnQgbGVuZ3RoIGZvbGxvd2luZyBkaWRSZWNlaXZlUmVzcG9uc2UKICAg
ICAvLyBhcyB0aGVyZSB3aWxsIGJlIG5vIGNhbGxzIHRvIGRpZFJlY2VpdmVEYXRhIGZyb20gdGhl
IG5ldHdvcmsgc3RhY2suCkBAIC0zNzksNyArMzc5LDcgQEAgc3RhdGljIGJvb2wgaXNFcnJvclN0
YXR1c0NvZGUoaW50IHN0YXR1c0NvZGUpCiAgICAgcmV0dXJuIHN0YXR1c0NvZGUgPj0gNDAwOwog
fQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVEYXRhKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgsIGludCBl
bmNvZGVkRGF0YUxlbmd0aCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZURhdGEodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCwg
aW50IGVuY29kZWREYXRhTGVuZ3RoKQogewogICAgIGlmIChtX2hpZGRlblJlcXVlc3RJZGVudGlm
aWVycy5jb250YWlucyhpZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzk1LDEzICsz
OTUsMTMgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlRGF0YSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IGNoYXIKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+ZGF0YVJlY2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29k
ZWREYXRhTGVuZ3RoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRGaW5p
c2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXImIGxvYWRl
ciwgZG91YmxlIGZpbmlzaFRpbWUpCit2b2lkIFJlc291cmNlQWdlbnQ6OmRpZEZpbmlzaExvYWRp
bmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciYgbG9hZGVyLCBkb3Vi
bGUgZmluaXNoVGltZSkKIHsKICAgICBpZiAobV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMucmVt
b3ZlKGlkZW50aWZpZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgcmVxdWVzdElk
ID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7Ci0gICAgaWYgKG1f
cmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCkgPT0gSW5zcGVjdG9yUGFnZUFn
ZW50OjpEb2N1bWVudFJlc291cmNlKQorICAgIGlmIChtX3Jlc291cmNlc0RhdGEtPnJlc291cmNl
VHlwZShyZXF1ZXN0SWQpID09IFBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZSkKICAgICAgICAg
bV9yZXNvdXJjZXNEYXRhLT5hZGRSZXNvdXJjZVNoYXJlZEJ1ZmZlcihyZXF1ZXN0SWQsIGxvYWRl
ci5mcmFtZUxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VEYXRhKCksIGxv
YWRlci5mcmFtZSgpLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCkpOwogCiAgICAgbV9yZXNv
dXJjZXNEYXRhLT5tYXliZURlY29kZURhdGFUb0NvbnRlbnQocmVxdWVzdElkKTsKQEAgLTQxNSwx
OSArNDE1LDE5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkRmluaXNoTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50CiAgICAgU3RyaW5nIHNvdXJjZU1h
cHBpbmdVUkw7CiAgICAgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSBjb25zdCog
cmVzb3VyY2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVlc3RJZCk7CiAgICAgaWYg
KHJlc291cmNlRGF0YSAmJiByZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAgICAg
IHNvdXJjZU1hcHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJl
c291cmNlKHJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSk7CisgICAgICAgIHNvdXJjZU1h
cHBpbmdVUkwgPSBQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKHJlc291cmNlRGF0
YS0+Y2FjaGVkUmVzb3VyY2UoKSk7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGlu
Z0ZpbmlzaGVkKHJlcXVlc3RJZCwgZmluaXNoVGltZSwgIXNvdXJjZU1hcHBpbmdVUkwuaXNFbXB0
eSgpID8gJnNvdXJjZU1hcHBpbmdVUkwgOiBudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERv
Y3VtZW50TG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBS
ZXNvdXJjZUFnZW50OjpkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERv
Y3VtZW50TG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAg
IGlmIChtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVycy5yZW1vdmUoaWRlbnRpZmllcikpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6
OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKIAotICAgIGlmIChtX3Jlc291cmNlc0RhdGEtPnJlc291
cmNlVHlwZShyZXF1ZXN0SWQpID09IEluc3BlY3RvclBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJj
ZSkgeworICAgIGlmIChtX3Jlc291cmNlc0RhdGEtPnJlc291cmNlVHlwZShyZXF1ZXN0SWQpID09
IFBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZSkgewogICAgICAgICBGcmFtZSogZnJhbWUgPSBs
b2FkZXIuZnJhbWUoKTsKICAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5sb2FkZXIoKS5kb2N1
bWVudExvYWRlcigpICYmIGZyYW1lLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBtX3Jlc291
cmNlc0RhdGEtPmFkZFJlc291cmNlU2hhcmVkQnVmZmVyKHJlcXVlc3RJZCwKQEAgLTQ0MCw3ICs0
NDAsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMbwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5sb2FkaW5nRmFpbGVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKCksIGNhbmNlbGVkID8gJmNhbmNlbGVkIDogbnVsbHB0cik7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERv
Y3VtZW50TG9hZGVyJiBsb2FkZXIsIENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3ZvaWQgUmVz
b3VyY2VBZ2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVy
JiBsb2FkZXIsIENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKIHsKICAgICBTdHJpbmcgbG9hZGVy
SWQgPSBtX3BhZ2VBZ2VudC0+bG9hZGVySWQoJmxvYWRlcik7CiAgICAgU3RyaW5nIGZyYW1lSWQg
PSBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXIuZnJhbWUoKSk7CkBAIC00NTgsMTcgKzQ1OCwx
NyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1v
cnlDYWNoZShEb2N1bWVudExvYWRlciYgbG9hZAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5y
ZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQs
IGxvYWRlci51cmwoKS5zdHJpbmcoKSwgdGltZXN0YW1wKCksIGluaXRpYXRvck9iamVjdCwgYnVp
bGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSgmcmVzb3VyY2UsICZsb2FkZXIpKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRJbml0aWFsU2NyaXB0Q29udGVudCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQordm9pZCBSZXNv
dXJjZUFnZW50OjpzZXRJbml0aWFsU2NyaXB0Q29udGVudCh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQogewogICAgIG1fcmVzb3VyY2VzRGF0YS0+
c2V0UmVzb3VyY2VDb250ZW50KElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZp
ZXIpLCBzb3VyY2VTdHJpbmcpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRp
ZFJlY2VpdmVTY3JpcHRSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit2b2lkIFJl
c291cmNlQWdlbnQ6OmRpZFJlY2VpdmVTY3JpcHRSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIpCiB7Ci0gICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZVR5cGUoSWRlbnRpZmll
cnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIEluc3BlY3RvclBhZ2VBZ2VudDo6U2Ny
aXB0UmVzb3VyY2UpOworICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VUeXBlKElkZW50
aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCBQYWdlQWdlbnQ6OlNjcmlwdFJl
c291cmNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpkb2N1bWVudFRocmVh
ZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudCh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6
ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnQodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQpCiB7CiAgICAg
aWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4MiwxOSArNDgyLDE5IEBAIHZvaWQg
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExv
YWRpbmdGb3JDbGllbnQodW5zCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRYSFJSZXBsYXlEYXRh
KHJlcXVlc3RJZCwgeGhyUmVwbGF5RGF0YSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6d2lsbExvYWRYSFIoVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFJlZlB0cjxGb3JtRGF0
YT4mJiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRl
Q3JlZGVudGlhbHMpCit2b2lkIFJlc291cmNlQWdlbnQ6OndpbGxMb2FkWEhSKFRocmVhZGFibGVM
b2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYgdXJs
LCBib29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYgZm9ybURhdGEsIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQogewogICAgIFJlZlB0cjxY
SFJSZXBsYXlEYXRhPiB4aHJSZXBsYXlEYXRhID0gWEhSUmVwbGF5RGF0YTo6Y3JlYXRlKG1ldGhv
ZCwgdXJsLCBhc3luYywgV1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVycywgaW5jbHVkZUNyZWRl
bnRpYWxzKTsKIAogICAgIG1fcGVuZGluZ1hIUlJlcGxheURhdGEuc2V0KGNsaWVudCwgV1RGOjpt
b3ZlKHhoclJlcGxheURhdGEpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpk
aWRGYWlsWEhSTG9hZGluZyhUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQpCit2b2lkIFJl
c291cmNlQWdlbnQ6OmRpZEZhaWxYSFJMb2FkaW5nKFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNs
aWVudCkKIHsKICAgICBtX3BlbmRpbmdYSFJSZXBsYXlEYXRhLnJlbW92ZShjbGllbnQpOwogfQog
Ci12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZEZpbmlzaFhIUkxvYWRpbmcoVGhyZWFk
YWJsZUxvYWRlckNsaWVudCogY2xpZW50LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlU3RyaW5nKQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRGaW5pc2hYSFJM
b2FkaW5nKFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZykKIHsKICAgICAvLyBGb3IgQXN5bmNo
cm9ub3VzIFhIUnMsIHRoZSBpbnNwZWN0b3IgY2FuIGdyYWIgdGhlIGRhdGEgZGlyZWN0bHkgb2Zm
IG9mIHRoZSBDYWNoZWRSZXNvdXJjZS4gRm9yIHN5bmMgWEhScywgd2UgbmVlZCB0bwogICAgIC8v
IHByb3ZpZGUgdGhlIGRhdGEgaGVyZSwgc2luY2Ugbm8gQ2FjaGVkUmVzb3VyY2Ugd2FzIGludm9s
dmVkLgpAQCAtNTAzLDIyICs1MDMsMjIgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpk
aWRGaW5pc2hYSFJMb2FkaW5nKFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwKICAgICBt
X3BlbmRpbmdYSFJSZXBsYXlEYXRhLnJlbW92ZShjbGllbnQpOwogfQogCi12b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVYSFJSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIpCit2b2lkIFJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVYSFJSZXNwb25zZSh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpCiB7Ci0gICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZVR5
cGUoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIEluc3BlY3RvclBh
Z2VBZ2VudDo6WEhSUmVzb3VyY2UpOworICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VU
eXBlKElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCBQYWdlQWdlbnQ6
OlhIUlJlc291cmNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9h
ZFhIUlN5bmNocm9ub3VzbHkoKQordm9pZCBSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUlN5bmNo
cm9ub3VzbHkoKQogewogICAgIG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgPSB0cnVlOwogfQog
Ci12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZExvYWRYSFJTeW5jaHJvbm91c2x5KCkK
K3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlkTG9hZFhIUlN5bmNocm9ub3VzbHkoKQogewogICAgIG1f
bG9hZGluZ1hIUlN5bmNocm9ub3VzbHkgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50Ojp3aWxsRGVzdHJveUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlJiBjYWNo
ZWRSZXNvdXJjZSkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6d2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJj
ZShDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4g
cmVxdWVzdElkcyA9IG1fcmVzb3VyY2VzRGF0YS0+cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoJmNhY2hl
ZFJlc291cmNlKTsKICAgICBpZiAoIXJlcXVlc3RJZHMuc2l6ZSgpKQpAQCAtNTI2LDMxICs1MjYs
MzEgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsRGVzdHJveUNhY2hlZFJlc291
cmNlKENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXMKIAogICAgIFN0cmluZyBjb250ZW50OwogICAg
IGJvb2wgYmFzZTY0RW5jb2RlZDsKLSAgICBpZiAoIUluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVk
UmVzb3VyY2VDb250ZW50KCZjYWNoZWRSZXNvdXJjZSwgJmNvbnRlbnQsICZiYXNlNjRFbmNvZGVk
KSkKKyAgICBpZiAoIVBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KCZjYWNoZWRSZXNv
dXJjZSwgJmNvbnRlbnQsICZiYXNlNjRFbmNvZGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIFZl
Y3RvcjxTdHJpbmc+OjppdGVyYXRvciBlbmQgPSByZXF1ZXN0SWRzLmVuZCgpOwogICAgIGZvciAo
VmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gcmVxdWVzdElkcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCiAgICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KCpp
dCwgY29udGVudCwgYmFzZTY0RW5jb2RlZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6d2lsbFJlY2FsY3VsYXRlU3R5bGUoKQordm9pZCBSZXNvdXJjZUFnZW50Ojp3aWxsUmVj
YWxjdWxhdGVTdHlsZSgpCiB7CiAgICAgbV9pc1JlY2FsY3VsYXRpbmdTdHlsZSA9IHRydWU7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjYWxjdWxhdGVTdHlsZSgpCit2
b2lkIFJlc291cmNlQWdlbnQ6OmRpZFJlY2FsY3VsYXRlU3R5bGUoKQogewogICAgIG1faXNSZWNh
bGN1bGF0aW5nU3R5bGUgPSBmYWxzZTsKICAgICBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRv
ciA9IG51bGxwdHI7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkU2NoZWR1
bGVTdHlsZVJlY2FsY3VsYXRpb24oRG9jdW1lbnQmIGRvY3VtZW50KQordm9pZCBSZXNvdXJjZUFn
ZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7
CiAgICAgaWYgKCFtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvcikKICAgICAgICAgbV9zdHls
ZVJlY2FsY3VsYXRpb25Jbml0aWF0b3IgPSBidWlsZEluaXRpYXRvck9iamVjdCgmZG9jdW1lbnQp
OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9j
dW1lbnQpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBS
ZXNvdXJjZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQpCiB7
CiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gc3RhY2tUcmFjZSA9IGNyZWF0ZVNjcmlwdENh
bGxTdGFjayhKU01haW5UaHJlYWRFeGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSgpLCBTY3JpcHRDYWxs
U3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpOwogICAgIGlmIChzdGFja1RyYWNlICYm
IHN0YWNrVHJhY2UtPnNpemUoKSA+IDApIHsKQEAgLTU4MCwxMiArNTgwLDEyIEBAIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3RvclJlc291cmNl
QWdlbnQ6OmJ1aWxkSW5pCiAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAKLXZvaWQgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgVVJMJiByZXF1ZXN0VVJMKQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRDcmVh
dGVXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVUkwmIHJlcXVlc3RV
UkwpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldENyZWF0ZWQoSWRlbnRp
ZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHJlcXVlc3RVUkwuc3RyaW5nKCkp
OwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5k
c2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQogewogICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRI
ZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkp
CkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2Vu
ZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGUKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0KElkZW50aWZp
ZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgV1RGOjptb3Zl
KHJlcXVlc3RPYmplY3QpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRS
ZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6
ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgYXV0byByZXNw
b25zZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlc3Bv
bnNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U3RhdHVzKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkpCkBAIC02MDMsMTIgKzYwMywxMiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRp
ZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25nCiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQoSWRl
bnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCBXVEY6
Om1vdmUocmVzcG9uc2VPYmplY3QpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpkaWRDbG9zZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit2b2lkIFJlc291
cmNlQWdlbnQ6OmRpZENsb3NlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsK
ICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0Q2xvc2VkKElkZW50aWZpZXJzRmFj
dG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEZyYW1lKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQordm9pZCBSZXNvdXJj
ZUFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWUodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCiB7CiAgICAgYXV0byBmcmFtZU9iamVjdCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0T3Bjb2RlKGZyYW1lLm9wQ29kZSkKQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lk
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZSh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZy
YW1lUmVjZWl2ZWQoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRp
bWVzdGFtcCgpLCBXVEY6Om1vdmUoZnJhbWVPYmplY3QpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpkaWRTZW5kV2ViU29ja2V0RnJhbWUodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCit2b2lkIFJlc291cmNlQWdlbnQ6OmRp
ZFNlbmRXZWJTb2NrZXRGcmFtZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNv
Y2tldEZyYW1lJiBmcmFtZSkKIHsKICAgICBhdXRvIGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRP
cGNvZGUoZnJhbWUub3BDb2RlKQpAQCAtNjI4LDQwICs2MjgsNDAgQEAgdm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpkaWRTZW5kV2ViU29ja2V0RnJhbWUodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb24KICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVTZW50KElk
ZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgV1RG
Ojptb3ZlKGZyYW1lT2JqZWN0KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
ZGlkUmVjZWl2ZVdlYlNvY2tldEZyYW1lRXJyb3IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2
ZVdlYlNvY2tldEZyYW1lRXJyb3IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0
RnJhbWVFcnJvcihJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGlt
ZXN0YW1wKCksIGVycm9yTWVzc2FnZSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tF
VFMpCiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikK
K3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIHsKICAgICBlbmFibGUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjplbmFibGUoKQordm9pZCBSZXNv
dXJjZUFnZW50OjplbmFibGUoKQogewogICAgIGlmICghbV9mcm9udGVuZERpc3BhdGNoZXIpCiAg
ICAgICAgIHJldHVybjsKICAgICBtX2VuYWJsZWQgPSB0cnVlOwotICAgIG1faW5zdHJ1bWVudGlu
Z0FnZW50cy0+c2V0SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCh0aGlzKTsKKyAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMtPnNldFJlc291cmNlQWdlbnQodGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCit2b2lkIFJlc291cmNlQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwotICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yUmVzb3VyY2VBZ2VudChudWxscHRyKTsK
KyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFJlc291cmNlQWdlbnQobnVsbHB0cik7CiAg
ICAgbV9yZXNvdXJjZXNEYXRhLT5jbGVhcigpOwogICAgIG1fZXh0cmFSZXF1ZXN0SGVhZGVycy5j
bGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNldEV4dHJhSFRUUEhl
YWRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGhlYWRl
cnMpCit2b2lkIFJlc291cmNlQWdlbnQ6OnNldEV4dHJhSFRUUEhlYWRlcnMoRXJyb3JTdHJpbmcm
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGhlYWRlcnMpCiB7CiAgICAgbV9leHRy
YVJlcXVlc3RIZWFkZXJzID0gaGVhZGVycy5jb3B5UmVmKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudDo6Z2V0UmVzcG9uc2VCb2R5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5j
b2RlZCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6Z2V0UmVzcG9uc2VCb2R5KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmluZyogY29udGVudCwgYm9v
bCogYmFzZTY0RW5jb2RlZCkKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VE
YXRhIGNvbnN0KiByZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRhdGEocmVxdWVzdElk
KTsKICAgICBpZiAoIXJlc291cmNlRGF0YSkgewpAQCAtNjgyLDE5ICs2ODIsMTkgQEAgdm9pZCBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OjpnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHIKIAogICAgIGlmIChyZXNvdXJjZURhdGEtPmJ1ZmZlcigpICYmICFy
ZXNvdXJjZURhdGEtPnRleHRFbmNvZGluZ05hbWUoKS5pc051bGwoKSkgewogICAgICAgICAqYmFz
ZTY0RW5jb2RlZCA9IGZhbHNlOwotICAgICAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFy
ZWRCdWZmZXJDb250ZW50KHJlc291cmNlRGF0YS0+YnVmZmVyKCksIHJlc291cmNlRGF0YS0+dGV4
dEVuY29kaW5nTmFtZSgpLCAqYmFzZTY0RW5jb2RlZCwgY29udGVudCkpCisgICAgICAgIGlmIChQ
YWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwgcmVz
b3VyY2VEYXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksICpiYXNlNjRFbmNvZGVkLCBjb250ZW50KSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAocmVzb3VyY2VEYXRhLT5jYWNo
ZWRSZXNvdXJjZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJl
c291cmNlQ29udGVudChyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCksIGNvbnRlbnQsIGJh
c2U2NEVuY29kZWQpKQorICAgICAgICBpZiAoUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRl
bnQocmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVk
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBlcnJvclN0cmluZyA9IEFTQ0lJ
TGl0ZXJhbCgiTm8gZGF0YSBmb3VuZCBmb3IgcmVzb3VyY2Ugd2l0aCBnaXZlbiBpZGVudGlmaWVy
Iik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVwbGF5WEhSKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpCit2b2lkIFJlc291cmNlQWdlbnQ6OnJlcGxh
eVhIUihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKQogewogICAgIFJlZlB0
cjxYTUxIdHRwUmVxdWVzdD4geGhyID0gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZSgqbV9wYWdlQWdl
bnQtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKTsKICAgICBTdHJpbmcgYWN0dWFsUmVxdWVzdElk
ID0gcmVxdWVzdElkOwpAQCAtNzE4LDM0ICs3MTgsMzQgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpyZXBsYXlYSFIoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkK
ICAgICB4aHItPnNlbmRGb3JJbnNwZWN0b3JYSFJSZXBsYXkoeGhyUmVwbGF5RGF0YS0+Zm9ybURh
dGEoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6Y2FuQ2xlYXJCcm93c2VyQ2FjaGUoRXJyb3JTdHJpbmcmLCBib29sKiByZXN1bHQpCit2b2lk
IFJlc291cmNlQWdlbnQ6OmNhbkNsZWFyQnJvd3NlckNhY2hlKEVycm9yU3RyaW5nJiwgYm9vbCog
cmVzdWx0KQogewogICAgICpyZXN1bHQgPSBtX2NsaWVudC0+Y2FuQ2xlYXJCcm93c2VyQ2FjaGUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjbGVhckJyb3dzZXJDYWNoZShF
cnJvclN0cmluZyYpCit2b2lkIFJlc291cmNlQWdlbnQ6OmNsZWFyQnJvd3NlckNhY2hlKEVycm9y
U3RyaW5nJikKIHsKICAgICBtX2NsaWVudC0+Y2xlYXJCcm93c2VyQ2FjaGUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjYW5DbGVhckJyb3dzZXJDb29raWVzKEVycm9yU3Ry
aW5nJiwgYm9vbCogcmVzdWx0KQordm9pZCBSZXNvdXJjZUFnZW50OjpjYW5DbGVhckJyb3dzZXJD
b29raWVzKEVycm9yU3RyaW5nJiwgYm9vbCogcmVzdWx0KQogewogICAgICpyZXN1bHQgPSBtX2Ns
aWVudC0+Y2FuQ2xlYXJCcm93c2VyQ29va2llcygpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291
cmNlQWdlbnQ6OmNsZWFyQnJvd3NlckNvb2tpZXMoRXJyb3JTdHJpbmcmKQordm9pZCBSZXNvdXJj
ZUFnZW50OjpjbGVhckJyb3dzZXJDb29raWVzKEVycm9yU3RyaW5nJikKIHsKICAgICBtX2NsaWVu
dC0+Y2xlYXJCcm93c2VyQ29va2llcygpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdl
bnQ6OnNldENhY2hlRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGNhY2hlRGlzYWJsZWQpCit2
b2lkIFJlc291cmNlQWdlbnQ6OnNldENhY2hlRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGNh
Y2hlRGlzYWJsZWQpCiB7CiAgICAgbV9jYWNoZURpc2FibGVkID0gY2FjaGVEaXNhYmxlZDsKICAg
ICBpZiAoY2FjaGVEaXNhYmxlZCkKICAgICAgICAgTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLmV2
aWN0UmVzb3VyY2VzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bG9hZFJl
c291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZywgUmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxi
YWNrKQordm9pZCBSZXNvdXJjZUFnZW50Ojpsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBS
ZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gbV9wYWdlQWdlbnQtPmFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBp
ZiAoIWZyYW1lKQpAQCAtNzg1LDcgKzc4NSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6bG9hZFJlc291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAg
ICAgaW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudC0+c2V0TG9hZGVyKGxvYWRlci5yZWxl
YXNlKCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Om1haW5GcmFtZU5hdmln
YXRlZChEb2N1bWVudExvYWRlciYgbG9hZGVyKQordm9pZCBSZXNvdXJjZUFnZW50OjptYWluRnJh
bWVOYXZpZ2F0ZWQoRG9jdW1lbnRMb2FkZXImIGxvYWRlcikKIHsKICAgICBpZiAobV9jYWNoZURp
c2FibGVkKQogICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkuZXZpY3RSZXNvdXJjZXMo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5oCmluZGV4IDg0YzNiZmRjZTRkODExNGRlNTM2NzA5ZGYyMTYwNTQ5NGMwZTA0MWEuLmQwN2Nk
YWVmNDhhYjY5MmU4ZDlmODZhNjAxMzYzNDQzMDc5NDBiYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaApAQCAtNTMsMTAgKzUzLDEw
IEBAIGNsYXNzIEZvcm1EYXRhOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBIVFRQSGVhZGVyTWFwOwog
Y2xhc3MgSW5zcGVjdG9yQ2xpZW50OwotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3Mg
SW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIE5ldHdvcmtSZXNvdXJjZXNEYXRhOwogY2xhc3Mg
UGFnZTsKK2NsYXNzIFBhZ2VBZ2VudDsKIGNsYXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBSZXNv
dXJjZUxvYWRlcjsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAgLTczLDExICs3MywxMSBAQCBz
dHJ1Y3QgV2ViU29ja2V0RnJhbWU7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1j
bGFzcyBJbnNwZWN0b3JSZXNvdXJjZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50
QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CitjbGFzcyBSZXNvdXJjZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkFnZW50QmFzZSwgcHVibGlj
IEluc3BlY3Rvcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yQ2xpZW50
Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpOworICAgIFJlc291cmNl
QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2VBZ2VudCosIEluc3BlY3RvckNsaWVudCop
OworICAgIHZpcnR1YWwgflJlc291cmNlQWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikg
b3ZlcnJpZGU7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHJpdmF0ZToKIAogICAgIGRvdWJsZSB0aW1l
c3RhbXAoKTsKIAotICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CisgICAgUGFn
ZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6Ok5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI+IG1f
ZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6Ok5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE1MCw3ICsxNTAsNyBAQCBwcml2
YXRlOgogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBSZWZQ
dHI8WEhSUmVwbGF5RGF0YT4+IFBlbmRpbmdYSFJSZXBsYXlEYXRhTWFwOwogICAgIFBlbmRpbmdY
SFJSZXBsYXlEYXRhTWFwIG1fcGVuZGluZ1hIUlJlcGxheURhdGE7Ci0gICAgLy8gRklYTUU6IElu
c3BlY3RvclJlc291cmNlQWdlbnQgc2hvdWxkIG5vdyBiZSBhd2FyZSBvZiBzdHlsZSByZWNhbGN1
bGF0aW9uLgorICAgIC8vIEZJWE1FOiBSZXNvdXJjZUFnZW50IHNob3VsZCBub3cgYmUgYXdhcmUg
b2Ygc3R5bGUgcmVjYWxjdWxhdGlvbi4KICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yPiBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvcjsKICAgICBi
b29sIG1faXNSZWNhbGN1bGF0aW5nU3R5bGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDA4YmRiZWUxMzZhYzcyY2RjZWQ2
ZWU0NGFhNmVhNzdlOGU0MjgxOGMuLjA5YjdkOTdjZDk4NWU0OTIyOGUwYjg0ZDhjOTA1NjgzYTQz
Njk0NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAKQEAgLTI0Myw3ICsyNDMsNyBAQCBzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hh
aW4oQ1NTUnVsZSogcnVsZSwgQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDUwogICAg
ICAgICBpZiAocGFyZW50U3R5bGVTaGVldCkgewogICAgICAgICAgICAgc291cmNlVVJMID0gcGFy
ZW50U3R5bGVTaGVldC0+Y29udGVudHMoKS5iYXNlVVJMKCk7CiAgICAgICAgICAgICBpZiAoc291
cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBJbnNwZWN0b3JE
T01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJpbmcocGFyZW50U3R5bGVTaGVldC0+b3duZXJEb2N1bWVu
dCgpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBET01BZ2VudDo6ZG9jdW1lbnRVUkxT
dHJpbmcocGFyZW50U3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBzb3VyY2VVUkwgPSAiIjsKIApAQCAtNTYxLDcgKzU2MSw3IEBAIFZlY3Rv
cjxTdHJpbmc+IEluc3BlY3RvclN0eWxlOjpsb25naGFuZFByb3BlcnRpZXMoY29uc3QgU3RyaW5n
JiBzaG9ydGhhbmRQcm9wZXJ0CiAgICAgcmV0dXJuIHByb3BlcnRpZXM7CiB9CiAKLVJlZjxJbnNw
ZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFn
ZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiYmIHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVu
ZXIpCitSZWY8SW5zcGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRl
KFBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVT
aGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxp
c3RlbmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvclN0eWxlU2hlZXQo
cGFnZUFnZW50LCBpZCwgV1RGOjptb3ZlKHBhZ2VTdHlsZVNoZWV0KSwgb3JpZ2luLCBkb2N1bWVu
dFVSTCwgbGlzdGVuZXIpKTsKIH0KQEAgLTU3NCw3ICs1NzQsNyBAQCBTdHJpbmcgSW5zcGVjdG9y
U3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCkK
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5z
cGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3Ry
aW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3RvclN0eWxlU2hlZXQ6Oklu
c3BlY3RvclN0eWxlU2hlZXQoUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQs
IFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50
VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAgOiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAg
ICAgLCBtX2lkKGlkKQogICAgICwgbV9wYWdlU3R5bGVTaGVldChXVEY6Om1vdmUocGFnZVN0eWxl
U2hlZXQpKQpAQCAtNjk5LDcgKzY5OSw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVT
aGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRpb25Db2RlCiAgICAg
Q1NTUnVsZSogcnVsZSA9IG1fcGFnZVN0eWxlU2hlZXQtPml0ZW0obGFzdFJ1bGVJbmRleCk7CiAg
ICAgQVNTRVJUKHJ1bGUpOwogCi0gICAgQ1NTU3R5bGVSdWxlKiBzdHlsZVJ1bGUgPSBJbnNwZWN0
b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUoKnJ1bGUpOworICAgIENTU1N0eWxlUnVsZSogc3R5
bGVSdWxlID0gQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKCpydWxlKTsKICAgICBpZiAoIXN0eWxl
UnVsZSkgewogICAgICAgICAvLyBXaGF0IHdlIGp1c3QgYWRkZWQgaGFzIHRvIGJlIGEgQ1NTU3R5
bGVSdWxlIC0gd2UgY2Fubm90IGhhbmRsZSBvdGhlciB0eXBlcyBvZiBydWxlcyB5ZXQuCiAgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBhIHN0eWxlIHJ1bGUsIHByZXRlbmQgd2UgbmV2ZXIgdG91Y2hl
ZCB0aGUgc3R5bGVzaGVldC4KQEAgLTExODUsNyArMTE4NSw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5
bGVTaGVldDo6cmVzb3VyY2VTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIAog
ICAgIFN0cmluZyBlcnJvcjsKICAgICBib29sIGJhc2U2NEVuY29kZWQ7Ci0gICAgSW5zcGVjdG9y
UGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoZXJyb3IsIG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUo
KSwgVVJMKFBhcnNlZFVSTFN0cmluZywgbV9wYWdlU3R5bGVTaGVldC0+aHJlZigpKSwgcmVzdWx0
LCAmYmFzZTY0RW5jb2RlZCk7CisgICAgUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoZXJyb3Is
IG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSwgVVJMKFBhcnNlZFVSTFN0cmluZywgbV9wYWdlU3R5
bGVTaGVldC0+aHJlZigpKSwgcmVzdWx0LCAmYmFzZTY0RW5jb2RlZCk7CiAgICAgcmV0dXJuIGVy
cm9yLmlzRW1wdHkoKSAmJiAhYmFzZTY0RW5jb2RlZDsKIH0KIApAQCAtMTIyOCw3ICsxMjI4LDcg
QEAgdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0cjxDU1NS
dWxlTGlzdD4mJiBydWxlTGlzdCwgQ1NTU3QKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNp
emUgPSBydWxlTGlzdC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgQ1NTUnVs
ZSogcnVsZSA9IHJ1bGVMaXN0LT5pdGVtKGkpOwotICAgICAgICBDU1NTdHlsZVJ1bGUqIHN0eWxl
UnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZSgqcnVsZSk7CisgICAgICAg
IENTU1N0eWxlUnVsZSogc3R5bGVSdWxlID0gQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKCpydWxl
KTsKICAgICAgICAgaWYgKHN0eWxlUnVsZSkKICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHN0
eWxlUnVsZSk7CiAgICAgICAgIGVsc2UgewpAQCAtMTIzOSwxMiArMTIzOSwxMiBAQCB2b2lkIElu
c3BlY3RvclN0eWxlU2hlZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUmVmUHRyPENTU1J1bGVMaXN0PiYm
IHJ1bGVMaXN0LCBDU1NTdAogICAgIH0KIH0KIAotUmVmPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5z
cGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVt
ZW50PiYmIGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKFBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8RWxlbWVudD4mJiBl
bGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKHBhZ2VBZ2VudCwgaWQsIFdURjo6bW92ZShlbGVt
ZW50KSwgb3JpZ2luLCBsaXN0ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdl
QWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPEVsZW1lbnQ+JiYgZWxl
bWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwg
TGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNv
bnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYmIGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikK
ICAgICA6IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgbnVsbHB0ciwgb3JpZ2lu
LCBTdHJpbmcoKSwgbGlzdGVuZXIpCiAgICAgLCBtX2VsZW1lbnQoV1RGOjptb3ZlKGVsZW1lbnQp
KQogICAgICwgbV9ydWxlU291cmNlRGF0YShudWxscHRyKQpAQCAtMTI3OCw3ICsxMjc4LDcgQEAg
Ym9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldFN0eWxlVGV4dChDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwKICAgICBBU1NFUlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9
PSBpbmxpbmVTdHlsZSgpKTsKIAogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yQ1NTQWdlbnQ6Oklu
bGluZVN0eWxlT3ZlcnJpZGVTY29wZSBvdmVycmlkZVNjb3BlKCZtX2VsZW1lbnQtPmRvY3VtZW50
KCkpOworICAgICAgICBDU1NBZ2VudDo6SW5saW5lU3R5bGVPdmVycmlkZVNjb3BlIG92ZXJyaWRl
U2NvcGUoJm1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIG1fZWxlbWVudC0+c2V0QXR0
cmlidXRlKCJzdHlsZSIsIHRleHQsIGVjKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IDlhODIxODdiODJjYzAxNjIyNzMw
NGFlYWFjODAxYTcwYmEyN2Y0MzUuLmI1NTAxNDI5MjUxYjViMmIyM2Q5NTNlZGQyZjZjZDVmNjk5
M2Y0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaApAQCAtNDcsOCArNDcsOCBAQCBjbGFzcyBDU1NTdHlsZVJ1bGU7CiBjbGFzcyBDU1NTdHls
ZVNoZWV0OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3MgSW5zcGVjdG9y
UGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldDsKK2NsYXNzIFBhZ2VBZ2VudDsK
IAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKQEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJs
aWM6CiAgICAgfTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwg
UmVmUHRyPEluc3BlY3RvclN0eWxlPj4gSW5zcGVjdG9yU3R5bGVNYXA7Ci0gICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3Qg
U3RyaW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1
bWVudFVSTCwgTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMgUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+
IGNyZWF0ZShQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwogICAgIHN0YXRp
YyBTdHJpbmcgc3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCk7CiAK
ICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7CkBAIC0xOTUsNyArMTk1LDcgQEAg
cHVibGljOgogICAgIEluc3BlY3RvckNTU0lkIHN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpIGNvbnN0IHsgcmV0dXJuIHJ1bGVPclN0eWxlSWQoc3R5bGUpOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0
cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1l
bnRVUkwsIExpc3RlbmVyKik7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldChQYWdlQWdlbnQqLCBj
b25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcm
IGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwogCiAgICAgYm9vbCBjYW5CaW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcmlnaW4gIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpVc2VyQWdlbnQgJiYgbV9vcmlnaW4gIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luOjpVc2VyOyB9CiAgICAgSW5zcGVjdG9yQ1NTSWQgcnVsZU9yU3R5bGVJ
ZChDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CkBAIC0yMjcsNyArMjI3LDcgQEAgcHJpdmF0
ZToKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRP
YmplY3RGb3JTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIEVsZW1lbnQqKTsKICAgICBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+IGJ1aWxkT2JqZWN0Rm9yU2Vs
ZWN0b3JMaXN0KENTU1N0eWxlUnVsZSosIEVsZW1lbnQqKTsKIAotICAgIEluc3BlY3RvclBhZ2VB
Z2VudCogbV9wYWdlQWdlbnQ7CisgICAgUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBTdHJp
bmcgbV9pZDsKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9wYWdlU3R5bGVTaGVldDsKICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gbV9vcmlnaW47CkBA
IC0yMzksMTQgKzIzOSwxNCBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGUgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yU3R5bGVTaGVldCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IGNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8RWxlbWVu
dD4mJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBMaXN0ZW5l
ciopOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBj
cmVhdGUoUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPEVsZW1lbnQ+JiYsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKIAog
ICAgIHZvaWQgZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBn
ZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25z
dCBvdmVycmlkZSB7IEFTU0VSVF9VTlVTRUQoaWQsICFpZC5vcmRpbmFsKCkpOyByZXR1cm4gaW5s
aW5lU3R5bGUoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxF
bGVtZW50PiYmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIExp
c3RlbmVyKik7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKFBhZ2VBZ2Vu
dCosIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYmLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIExpc3RlbmVyKik7CiAKICAgICB2aXJ0dWFsIERv
Y3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9VTlVTRUQoc3R5bGUsIHN0eWxlID09
IGlubGluZVN0eWxlKCkpOyByZXR1cm4gbV9ydWxlU291cmNlRGF0YTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCmluZGV4IDFh
NGQ2ZTc3MzJiNTZiODU2YTE1MjA2MTQwMWY0M2ViOGNlNThmNWEuLmZiYzgzMWEzMDM1MjRmNDJi
YTJjZGYwYzUxMGE3ODQ0NGY3Y2I2M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKQEAgLTU4LDI3ICs1OCwyNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6On5JbnNwZWN0b3JUaW1lbGluZUFnZW50KCkKK1RpbWVsaW5lQWdlbnQ6
On5UaW1lbGluZUFnZW50KCkKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZy
b250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpUaW1lbGluZUZyb250ZW5kRGlz
cGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5z
cGVjdG9yOjpUaW1lbGluZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNo
ZXIsIHRoaXMpOwogCi0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRQZXJzaXN0ZW50SW5z
cGVjdG9yVGltZWxpbmVBZ2VudCh0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNl
dFBlcnNpc3RlbnRUaW1lbGluZUFnZW50KHRoaXMpOwogCiAgICAgaWYgKG1fc2NyaXB0RGVidWdT
ZXJ2ZXIpCiAgICAgICAgIG1fc2NyaXB0RGVidWdTZXJ2ZXItPnJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uIHJlYXNvbikKK3ZvaWQg
VGltZWxpbmVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpE
aXNjb25uZWN0UmVhc29uIHJlYXNvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51
bGxwdHI7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCi0gICAgbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLT5zZXRQZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxpbmVBZ2VudChudWxscHRy
KTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFBlcnNpc3RlbnRUaW1lbGluZUFnZW50
KG51bGxwdHIpOwogCiAgICAgaWYgKHJlYXNvbiAhPSBJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFz
b246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCkgewogICAgICAgICBpZiAobV9zY3JpcHREZWJ1
Z1NlcnZlcikKQEAgLTg5LDIxICs4OSwyMSBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdAogICAg
IHN0b3AodW51c2VkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydChF
cnJvclN0cmluZyYsIGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGgpCit2b2lkIFRpbWVsaW5l
QWdlbnQ6OnN0YXJ0KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkK
IHsKICAgICBtX2VuYWJsZWRGcm9tRnJvbnRlbmQgPSB0cnVlOwogCiAgICAgaW50ZXJuYWxTdGFy
dChtYXhDYWxsU3RhY2tEZXB0aCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
c3RvcChFcnJvclN0cmluZyYpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OnN0b3AoRXJyb3JTdHJpbmcm
KQogewogICAgIGludGVybmFsU3RvcCgpOwogCiAgICAgbV9lbmFibGVkRnJvbUZyb250ZW5kID0g
ZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdGFydChj
b25zdCBpbnQqIG1heENhbGxTdGFja0RlcHRoKQordm9pZCBUaW1lbGluZUFnZW50OjppbnRlcm5h
bFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGgpCiB7CiAgICAgaWYgKG1heENhbGxT
dGFja0RlcHRoICYmICptYXhDYWxsU3RhY2tEZXB0aCA+IDApCiAgICAgICAgIG1fbWF4Q2FsbFN0
YWNrRGVwdGggPSAqbWF4Q2FsbFN0YWNrRGVwdGg7CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0
YWNrRGVwdGgpCiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckVudmlyb25t
ZW50KCkuZXhlY3V0aW9uU3RvcHdhdGNoKCktPnN0YXJ0KCk7CiAKLSAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMtPnNldEluc3BlY3RvclRpbWVsaW5lQWdlbnQodGhpcyk7CisgICAgbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLT5zZXRUaW1lbGluZUFnZW50KHRoaXMpOwogCiAgICAgaWYgKG1fc2NyaXB0
RGVidWdTZXJ2ZXIpCiAgICAgICAgIG1fc2NyaXB0RGVidWdTZXJ2ZXItPmFkZExpc3RlbmVyKHRo
aXMpOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW50
ZXJuYWxTdGFydChjb25zdCBpbnQqIG1heENhbGxTdGFja0RlcHRoKQogICAgICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+cmVjb3JkaW5nU3RhcnRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmludGVybmFsU3RvcCgpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmludGVybmFs
U3RvcCgpCiB7CiAgICAgaWYgKCFtX2VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTEzMyw3
ICsxMzMsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmludGVybmFsU3RvcCgpCiAg
ICAgaWYgKHN0b3B3YXRjaC0+aXNBY3RpdmUoKSkKICAgICAgICAgc3RvcHdhdGNoLT5zdG9wKCk7
CiAKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclRpbWVsaW5lQWdlbnQo
bnVsbHB0cik7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRUaW1lbGluZUFnZW50KG51
bGxwdHIpOwogCiAgICAgaWYgKG1fc2NyaXB0RGVidWdTZXJ2ZXIpCiAgICAgICAgIG1fc2NyaXB0
RGVidWdTZXJ2ZXItPnJlbW92ZUxpc3RlbmVyKHRoaXMsIHRydWUpOwpAQCAtMTQ2LDEyICsxNDYs
MTIgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0b3AoKQogICAgICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVjb3JkaW5nU3RvcHBlZCgpOwogfQogCi1kb3VibGUg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dGltZXN0YW1wKCkKK2RvdWJsZSBUaW1lbGluZUFnZW50
Ojp0aW1lc3RhbXAoKQogewogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvckVudmlyb25tZW50KCkuZXhlY3V0aW9uU3RvcHdhdGNoKCktPmVsYXBzZWRUaW1lKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0UGFnZVNjcmlwdERlYnVnU2VydmVy
KFBhZ2VTY3JpcHREZWJ1Z1NlcnZlciogc2NyaXB0RGVidWdTZXJ2ZXIpCit2b2lkIFRpbWVsaW5l
QWdlbnQ6OnNldFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcihQYWdlU2NyaXB0RGVidWdTZXJ2ZXIqIHNj
cmlwdERlYnVnU2VydmVyKQogewogICAgIEFTU0VSVCghbV9lbmFibGVkKTsKICAgICBBU1NFUlQo
IW1fc2NyaXB0RGVidWdTZXJ2ZXIpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IHN0b3BQcm9maWxpbmcoRnJhbWUqIGZyYW1lLCBjb25z
dCBTdHJpbmcmCiAgICAgcmV0dXJuIHN0b3BQcm9maWxpbmcodG9KU0RPTVdpbmRvdyhmcmFtZSwg
ZGVidWdnZXJXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCB0aXRsZSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nICZ0aXRsZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29s
ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nICZ0aXRsZSkKIHsKICAgICAvLyBP
bmx5IGFsbG93IHJlY29yZGluZyBvZiBhIHByb2ZpbGUgaWYgaXQgaXMgYW5vbnltb3VzIChlbXB0
eSB0aXRsZSkgb3IgZG9lcyBub3QgbWF0Y2gKICAgICAvLyB0aGUgdGl0bGUgb2YgYW4gYWxyZWFk
eSByZWNvcmRpbmcgcHJvZmlsZS4KQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OnN0YXJ0RnJvbUNvbnNvbGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZwogICAgIG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkcy5hcHBlbmQoY3JlYXRl
UmVjb3JkRW50cnkoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVDb25zb2xlUHJvZmlsZURh
dGEodGl0bGUpLCBUaW1lbGluZVJlY29yZFR5cGU6OkNvbnNvbGVQcm9maWxlLCB0cnVlLCBmcmFt
ZUZyb21FeGVjU3RhdGUoZXhlYykpKTsKIH0KIAotUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiB0aXRsZSkKK1Bhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiBUaW1lbGlu
ZUFnZW50OjpzdG9wRnJvbUNvbnNvbGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCiB7CiAgICAgLy8gU3RvcCBwcm9maWxlcyBpbiByZXZlcnNlIG9yZGVyLiBJZiB0
aGUgdGl0bGUgaXMgZW1wdHksIHRoZW4gc3RvcCB0aGUgbGFzdCBwcm9maWxlLgogICAgIC8vIE90
aGVyd2lzZSwgbWF0Y2ggdGhlIHRpdGxlIG9mIHRoZSBwcm9maWxlIHRvIHN0b3AuCkBAIC0yMzMs
NyArMjMzLDcgQEAgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSoKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsQ2FsbEZ1bmN0aW9uKGNvbnN0
IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUsIEZyYW1lKiBmcmFtZSkKK3ZvaWQg
VGltZWxpbmVBZ2VudDo6d2lsbENhbGxGdW5jdGlvbihjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUs
IGludCBzY3JpcHRMaW5lLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQo
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKHNjcmlwdE5hbWUs
IHNjcmlwdExpbmUpLCBUaW1lbGluZVJlY29yZFR5cGU6OkZ1bmN0aW9uQ2FsbCwgdHJ1ZSwgZnJh
bWUpOwogCkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3
aWxsQ2FsbEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmkKICAgICAr
K21fY2FsbFN0YWNrRGVwdGg7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlk
Q2FsbEZ1bmN0aW9uKEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkQ2FsbEZ1
bmN0aW9uKEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoZnJhbWUgJiYgbV9jYWxsU3RhY2tEZXB0
aCkgewogICAgICAgICAtLW1fY2FsbFN0YWNrRGVwdGg7CkBAIC0yNjUsMjIgKzI2NSwyMiBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENhbGxGdW5jdGlvbihGcmFtZSogZnJhbWUp
CiAgICAgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZTo6RnVuY3Rp
b25DYWxsKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsRGlzcGF0Y2hF
dmVudChjb25zdCBFdmVudCYgZXZlbnQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2Vu
dDo6d2lsbERpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQmIGV2ZW50LCBGcmFtZSogZnJhbWUpCiB7
CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmVu
dERpc3BhdGNoRGF0YShldmVudCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNwYXRjaCwg
ZmFsc2UsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWREaXNw
YXRjaEV2ZW50KCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkRGlzcGF0Y2hFdmVudCgpCiB7CiAg
ICAgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNw
YXRjaCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkSW52YWxpZGF0ZUxh
eW91dChGcmFtZSYgZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZEludmFsaWRhdGVMYXlv
dXQoRnJhbWUmIGZyYW1lKQogewogICAgIGFwcGVuZFJlY29yZChJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpLCBUaW1lbGluZVJlY29yZFR5cGU6OkludmFsaWRhdGVMYXlvdXQsIHRydWUsICZmcmFt
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbExheW91dChGcmFtZSYg
ZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OndpbGxMYXlvdXQoRnJhbWUmIGZyYW1lKQogewog
ICAgIFJlbmRlck9iamVjdCogcm9vdCA9IGZyYW1lLnZpZXcoKS0+bGF5b3V0Um9vdCgpOwogICAg
IGJvb2wgcGFydGlhbExheW91dCA9ICEhcm9vdDsKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxMYXlvdXQoRnJhbWUmIGZyYW1lKQogICAgIHB1c2hD
dXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTGF5b3V0RGF0YShkaXJ0
eU9iamVjdHMsIHRvdGFsT2JqZWN0cywgcGFydGlhbExheW91dCksIFRpbWVsaW5lUmVjb3JkVHlw
ZTo6TGF5b3V0LCB0cnVlLCAmZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmRpZExheW91dChSZW5kZXJPYmplY3QqIHJvb3QpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRp
ZExheW91dChSZW5kZXJPYmplY3QqIHJvb3QpCiB7CiAgICAgaWYgKG1fcmVjb3JkU3RhY2suaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0zMTMsMjcgKzMxMywyNyBAQCB2b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OmRpZExheW91dChSZW5kZXJPYmplY3QqIHJvb3QpCiAgICAgZGlk
Q29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZTo6TGF5b3V0KTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlv
bihGcmFtZSogZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZFNjaGVkdWxlU3R5bGVSZWNh
bGN1bGF0aW9uKEZyYW1lKiBmcmFtZSkKIHsKICAgICBhcHBlbmRSZWNvcmQoSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpTY2hlZHVsZVN0eWxlUmVjYWxjdWxh
dGlvbiwgdHJ1ZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Ondp
bGxSZWNhbGN1bGF0ZVN0eWxlKEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2ls
bFJlY2FsY3VsYXRlU3R5bGUoRnJhbWUqIGZyYW1lKQogewogICAgIHB1c2hDdXJyZW50UmVjb3Jk
KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6UmVjYWxjdWxh
dGVTdHlsZXMsIHRydWUsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkUmVjYWxjdWxh
dGVTdHlsZSgpCiB7CiAgICAgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3Jk
VHlwZTo6UmVjYWxjdWxhdGVTdHlsZXMpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OndpbGxQYWludChGcmFtZSYgZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OndpbGxQYWlu
dChGcmFtZSYgZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpQYWludCwgdHJ1ZSwgJmZyYW1lKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRQYWludChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6
ZGlkUGFpbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJl
Y3QpCiB7CiAgICAgVGltZWxpbmVSZWNvcmRFbnRyeSYgZW50cnkgPSBtX3JlY29yZFN0YWNrLmxh
c3QoKTsKICAgICBBU1NFUlQoZW50cnkudHlwZSA9PSBUaW1lbGluZVJlY29yZFR5cGU6OlBhaW50
KTsKQEAgLTM0MywyMiArMzQzLDIyIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlk
UGFpbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVjdCYKICAgICBkaWRD
b21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlOjpQYWludCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbFNjcm9sbChGcmFtZSYgZnJhbWUpCit2b2lk
IFRpbWVsaW5lQWdlbnQ6OndpbGxTY3JvbGwoRnJhbWUmIGZyYW1lKQogewogICAgIHB1c2hDdXJy
ZW50UmVjb3JkKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6
U2Nyb2xsTGF5ZXIsIGZhbHNlLCAmZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OmRpZFNjcm9sbCgpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZFNjcm9sbCgpCiB7CiAg
ICAgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZTo6U2Nyb2xsTGF5
ZXIpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxXcml0ZUhUTUwodW5z
aWduZWQgc3RhcnRMaW5lLCBGcmFtZSogZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OndpbGxX
cml0ZUhUTUwodW5zaWduZWQgc3RhcnRMaW5lLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1
cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYXJzZUhUTUxEYXRhKHN0
YXJ0TGluZSksIFRpbWVsaW5lUmVjb3JkVHlwZTo6UGFyc2VIVE1MLCB0cnVlLCBmcmFtZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkV3JpdGVIVE1MKHVuc2lnbmVkIGVu
ZExpbmUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZFdyaXRlSFRNTCh1bnNpZ25lZCBlbmRMaW5l
KQogewogICAgIGlmICghbV9yZWNvcmRTdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgY29uc3Qg
VGltZWxpbmVSZWNvcmRFbnRyeSYgZW50cnkgPSBtX3JlY29yZFN0YWNrLmxhc3QoKTsKQEAgLTM2
Nyw0NyArMzY3LDQ3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkV3JpdGVIVE1M
KHVuc2lnbmVkIGVuZExpbmUpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmRpZEluc3RhbGxUaW1lcihpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xl
U2hvdCwgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRJbnN0YWxsVGltZXIo
aW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QsIEZyYW1lKiBmcmFtZSkK
IHsKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lcklu
c3RhbGxEYXRhKHRpbWVySWQsIHRpbWVvdXQsIHNpbmdsZVNob3QpLCBUaW1lbGluZVJlY29yZFR5
cGU6OlRpbWVySW5zdGFsbCwgdHJ1ZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OmRpZFJlbW92ZVRpbWVyKGludCB0aW1lcklkLCBGcmFtZSogZnJhbWUpCit2b2lk
IFRpbWVsaW5lQWdlbnQ6OmRpZFJlbW92ZVRpbWVyKGludCB0aW1lcklkLCBGcmFtZSogZnJhbWUp
CiB7CiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJp
Y1RpbWVyRGF0YSh0aW1lcklkKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lclJlbW92ZSwgdHJ1
ZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxGaXJlVGlt
ZXIoaW50IHRpbWVySWQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2lsbEZp
cmVUaW1lcihpbnQgdGltZXJJZCwgRnJhbWUqIGZyYW1lKQogewogICAgIHB1c2hDdXJyZW50UmVj
b3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YSh0aW1lcklk
KSwgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lckZpcmUsIGZhbHNlLCBmcmFtZSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkRmlyZVRpbWVyKCkKK3ZvaWQgVGltZWxpbmVB
Z2VudDo6ZGlkRmlyZVRpbWVyKCkKIHsKICAgICBkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGlt
ZWxpbmVSZWNvcmRUeXBlOjpUaW1lckZpcmUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OndpbGxEaXNwYXRjaFhIUlJlYWR5U3RhdGVDaGFuZ2VFdmVudChjb25zdCBTdHJpbmcm
IHVybCwgaW50IHJlYWR5U3RhdGUsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6
d2lsbERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgdXJsLCBp
bnQgcmVhZHlTdGF0ZSwgRnJhbWUqIGZyYW1lKQogewogICAgIHB1c2hDdXJyZW50UmVjb3JkKFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSUmVhZHlTdGF0ZUNoYW5nZURhdGEodXJsLCBy
ZWFkeVN0YXRlKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpYSFJSZWFkeVN0YXRlQ2hhbmdlLCBmYWxz
ZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZERpc3BhdGNo
WEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkRGlzcGF0
Y2hYSFJSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoKQogewogICAgIGRpZENvbXBsZXRlQ3VycmVudFJl
Y29yZChUaW1lbGluZVJlY29yZFR5cGU6OlhIUlJlYWR5U3RhdGVDaGFuZ2UpOwogfQogCi12b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxEaXNwYXRjaFhIUkxvYWRFdmVudChjb25zdCBT
dHJpbmcmIHVybCwgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxsRGlzcGF0
Y2hYSFJMb2FkRXZlbnQoY29uc3QgU3RyaW5nJiB1cmwsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBw
dXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVhIUkxvYWREYXRh
KHVybCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6WEhSTG9hZCwgdHJ1ZSwgZnJhbWUpOwogfQogCi12
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZERpc3BhdGNoWEhSTG9hZEV2ZW50KCkKK3Zv
aWQgVGltZWxpbmVBZ2VudDo6ZGlkRGlzcGF0Y2hYSFJMb2FkRXZlbnQoKQogewogICAgIGRpZENv
bXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5cGU6OlhIUkxvYWQpOwogfQogCi12
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxFdmFsdWF0ZVNjcmlwdChjb25zdCBTdHJp
bmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIEZyYW1lJiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2Vu
dDo6d2lsbEV2YWx1YXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlciwg
RnJhbWUmIGZyYW1lKQogewogICAgIHB1c2hDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlRXZhbHVhdGVTY3JpcHREYXRhKHVybCwgbGluZU51bWJlciksIFRpbWVsaW5l
UmVjb3JkVHlwZTo6RXZhbHVhdGVTY3JpcHQsIHRydWUsICZmcmFtZSk7CiAKQEAgLTQxNyw3ICs0
MTcsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxFdmFsdWF0ZVNjcmlwdChj
b25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpkaWRFdmFsdWF0ZVNjcmlwdChGcmFtZSYgZnJhbWUpCit2b2lkIFRp
bWVsaW5lQWdlbnQ6OmRpZEV2YWx1YXRlU2NyaXB0KEZyYW1lJiBmcmFtZSkKIHsKICAgICBpZiAo
bV9jYWxsU3RhY2tEZXB0aCkgewogICAgICAgICAtLW1fY2FsbFN0YWNrRGVwdGg7CkBAIC00Mzks
NzMgKzQzOSw3MyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZEV2YWx1YXRlU2Ny
aXB0KEZyYW1lJiBmcmFtZSkKICAgICBkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVS
ZWNvcmRUeXBlOjpFdmFsdWF0ZVNjcmlwdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6ZGlkVGltZVN0YW1wKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
dm9pZCBUaW1lbGluZUFnZW50OjpkaWRUaW1lU3RhbXAoRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCiB7CiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlVGltZVN0YW1wRGF0YShtZXNzYWdlKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lU3Rh
bXAsIHRydWUsICZmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dGlt
ZShGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgVGltZWxpbmVBZ2Vu
dDo6dGltZShGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBhcHBl
bmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lU3RhbXBEYXRhKG1lc3Nh
Z2UpLCBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWUsIHRydWUsICZmcmFtZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dGltZUVuZChGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6dGltZUVuZChGcmFtZSYgZnJhbWUsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVUaW1lU3RhbXBEYXRhKG1lc3NhZ2UpLCBUaW1lbGluZVJlY29yZFR5cGU6
OlRpbWVFbmQsIHRydWUsICZmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkTWFya0RPTUNvbnRlbnRFdmVudChGcmFtZSYgZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdl
bnQ6OmRpZE1hcmtET01Db250ZW50RXZlbnQoRnJhbWUmIGZyYW1lKQogewogICAgIGFwcGVuZFJl
Y29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZU1hcmtEYXRhKGZyYW1lLmlzTWFpbkZy
YW1lKCkpLCBUaW1lbGluZVJlY29yZFR5cGU6Ok1hcmtET01Db250ZW50LCBmYWxzZSwgJmZyYW1l
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRNYXJrTG9hZEV2ZW50KEZy
YW1lJiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkTWFya0xvYWRFdmVudChGcmFtZSYg
ZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRl
TWFya0RhdGEoZnJhbWUuaXNNYWluRnJhbWUoKSksIFRpbWVsaW5lUmVjb3JkVHlwZTo6TWFya0xv
YWQsIGZhbHNlLCAmZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRp
ZENvbW1pdExvYWQoKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRDb21taXRMb2FkKCkKIHsKICAg
ICBjbGVhclJlY29yZFN0YWNrKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
ZGlkUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkLCBGcmFtZSogZnJhbWUpCit2
b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZFJlcXVlc3RBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJ
ZCwgRnJhbWUqIGZyYW1lKQogewogICAgIGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rv
cnk6OmNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YShjYWxsYmFja0lkKSwgVGltZWxpbmVSZWNvcmRU
eXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIHRydWUsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDYW5jZWxBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJ
ZCwgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRDYW5jZWxBbmltYXRpb25G
cmFtZShpbnQgY2FsbGJhY2tJZCwgRnJhbWUqIGZyYW1lKQogewogICAgIGFwcGVuZFJlY29yZChU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YShjYWxsYmFja0lk
KSwgVGltZWxpbmVSZWNvcmRUeXBlOjpDYW5jZWxBbmltYXRpb25GcmFtZSwgdHJ1ZSwgZnJhbWUp
OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxGaXJlQW5pbWF0aW9uRnJh
bWUoaW50IGNhbGxiYWNrSWQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2ls
bEZpcmVBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCwgRnJhbWUqIGZyYW1lKQogewogICAg
IHB1c2hDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQW5pbWF0aW9u
RnJhbWVEYXRhKGNhbGxiYWNrSWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OkZpcmVBbmltYXRpb25G
cmFtZSwgZmFsc2UsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpk
aWRGaXJlQW5pbWF0aW9uRnJhbWUoKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRGaXJlQW5pbWF0
aW9uRnJhbWUoKQogewogICAgIGRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29y
ZFR5cGU6OkZpcmVBbmltYXRpb25GcmFtZSk7CiB9CiAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMp
Ci12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
LCBGcmFtZSogZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlV2ViU29ja2V0Q3JlYXRlRGF0YShpZGVudGlmaWVyLCB1cmwsIHByb3Rv
Y29sKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpXZWJTb2NrZXRDcmVhdGUsIHRydWUsIGZyYW1lKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRz
aGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBGcmFtZSogZnJhbWUpCit2b2lk
IFRpbWVsaW5lQWdlbnQ6OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBhcHBlbmRSZWNvcmQoVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljV2ViU29ja2V0RGF0YShpZGVudGlmaWVy
KSwgVGltZWxpbmVSZWNvcmRUeXBlOjpXZWJTb2NrZXRTZW5kSGFuZHNoYWtlUmVxdWVzdCwgdHJ1
ZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFJlY2VpdmVX
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEZyYW1l
KiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFr
ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRnJhbWUqIGZyYW1lKQogewogICAg
IGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNXZWJTb2Nr
ZXREYXRhKGlkZW50aWZpZXIpLCBUaW1lbGluZVJlY29yZFR5cGU6OldlYlNvY2tldFJlY2VpdmVI
YW5kc2hha2VSZXNwb25zZSwgZmFsc2UsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpkaWREZXN0cm95V2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWREZXN0cm95V2ViU29ja2V0KHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRnJhbWUqIGZyYW1lKQogewogICAgIGFwcGVuZFJlY29y
ZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNXZWJTb2NrZXREYXRhKGlkZW50
aWZpZXIpLCBUaW1lbGluZVJlY29yZFR5cGU6OldlYlNvY2tldERlc3Ryb3ksIHRydWUsIGZyYW1l
KTsKIH0KQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRp
ZERlc3Ryb3lXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBGcmFtZQogCiAvLyBT
Y3JpcHREZWJ1Z0xpc3RlbmVyCiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YnJlYWtw
b2ludEFjdGlvblByb2JlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnNwZWN0b3I6OlNj
cmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwgdW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQg
c2FtcGxlSWQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJikKK3ZvaWQgVGltZWxpbmVB
Z2VudDo6YnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
bnNwZWN0b3I6OlNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwgdW5zaWduZWQgYmF0Y2hJ
ZCwgdW5zaWduZWQgc2FtcGxlSWQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJikKIHsK
ICAgICBVTlVTRURfUEFSQU0oYmF0Y2hJZCk7CiAgICAgQVNTRVJUKGV4ZWMpOwpAQCAtNTk2LDcg
KzU5Niw3IEBAIHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBl
IHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKK3ZvaWQgVGltZWxpbmVB
Z2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHJlY29y
ZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJUX0FSRyhyZWNvcmQsIHJl
Y29yZCk7CiAgICAgcmVjb3JkLT5zZXRTdHJpbmcoInR5cGUiLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3RvY29sKHR5cGUpKSk7CkBAIC02MTAsNyArNjEw
LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVjb3IKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6c2V0RnJhbWVJZGVudGlmaWVyKEluc3BlY3Rvck9iamVjdCogcmVjb3Jk
LCBGcmFtZSogZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OnNldEZyYW1lSWRlbnRpZmllcihJ
bnNwZWN0b3JPYmplY3QqIHJlY29yZCwgRnJhbWUqIGZyYW1lKQogewogICAgIGlmICghZnJhbWUg
fHwgIW1fcGFnZUFnZW50KQogICAgICAgICByZXR1cm47CkBAIC02MjAsNyArNjIwLDcgQEAgdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRGcmFtZUlkZW50aWZpZXIoSW5zcGVjdG9yT2Jq
ZWN0KiByZWNvcmQsIEZyYW1lKgogICAgIHJlY29yZC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgZnJh
bWVJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVSZWNv
cmRFbnRyeShjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5JiBlbnRyeSkKK3ZvaWQgVGltZWxpbmVB
Z2VudDo6ZGlkQ29tcGxldGVSZWNvcmRFbnRyeShjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5JiBl
bnRyeSkKIHsKICAgICBlbnRyeS5yZWNvcmQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImRhdGEi
KSwgZW50cnkuZGF0YSk7CiAgICAgZW50cnkucmVjb3JkLT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNoaWxkcmVuIiksIGVudHJ5LmNoaWxkcmVuKTsKQEAgLTYyOCw3ICs2MjgsNyBAQCB2b2lkIElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxp
bmVSZWNvcmRFbnRyeSYgZQogICAgIGFkZFJlY29yZFRvVGltZWxpbmUoZW50cnkucmVjb3JkLmNv
cHlSZWYoKSwgZW50cnkudHlwZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
ZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQordm9pZCBU
aW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBl
IHR5cGUpCiB7CiAgICAgLy8gQW4gZW1wdHkgc3RhY2sgY291bGQgbWVyZWx5IG1lYW4gdGhhdCB0
aGUgdGltZWxpbmUgYWdlbnQgd2FzIHR1cm5lZCBvbiBpbiB0aGUgbWlkZGxlIG9mCiAgICAgLy8g
YW4gZXZlbnQuICBEb24ndCB0cmVhdCBhcyBhbiBlcnJvci4KQEAgLTY0MCw4ICs2NDAsOCBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1l
bGluZVJlY29yZFR5cGUgdHlwZSkKICAgICB9CiB9CiAKLUluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
Okluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclR5cGUgdHlw
ZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVND
SUlMaXRlcmFsKCJUaW1lbGluZSIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorVGltZWxpbmVBZ2Vu
dDo6VGltZWxpbmVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yVHlwZSB0eXBlLCBJbnNwZWN0b3JDbGll
bnQqIGNsaWVudCkKKyAgICA6IFdlYkFnZW50QmFzZShBU0NJSUxpdGVyYWwoIlRpbWVsaW5lIiks
IGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAg
LCBtX3NjcmlwdERlYnVnU2VydmVyKG51bGxwdHIpCiAgICAgLCBtX2lkKDEpCkBAIC02NTQsNyAr
NjU0LDcgQEAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW4KIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjphcHBlbmRSZWNvcmQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRh
LCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSog
ZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxs
U3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQg
PSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCks
IGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7CiAgICAgcmVjb3Jk
LT5zZXRPYmplY3QoImRhdGEiLCBXVEY6Om1vdmUoZGF0YSkpOwpAQCAtNjYyLDcgKzY2Miw3IEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3JkKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpCiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShXVEY6Om1v
dmUocmVjb3JkKSwgdHlwZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2Vu
ZEV2ZW50KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZXZlbnQpCit2b2lkIFRpbWVsaW5lQWdl
bnQ6OnNlbmRFdmVudChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGV2ZW50KQogewogICAgIGlm
ICghbV9mcm9udGVuZERpc3BhdGNoZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTY3MiwyNSArNjcy
LDI1IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgZXZlbnQpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2ZW50UmVj
b3JkZWQoV1RGOjptb3ZlKHJlY29yZENoZWNrZWQpKTsKIH0KIAotSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVS
ZWNvcmRFbnRyeShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3Jk
VHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKK1RpbWVsaW5l
QWdlbnQ6OlRpbWVsaW5lUmVjb3JkRW50cnkgVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50
cnkoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmlj
UmVjb3JkKHRpbWVzdGFtcCgpLCBjYXB0dXJlQ2FsbFN0YWNrID8gbV9tYXhDYWxsU3RhY2tEZXB0
aCA6IDApOwogICAgIHNldEZyYW1lSWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7CiAg
ICAgcmV0dXJuIFRpbWVsaW5lUmVjb3JkRW50cnkoV1RGOjptb3ZlKHJlY29yZCksIFdURjo6bW92
ZShkYXRhKSwgSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3Rh
Y2ssIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQo
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwg
Ym9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRS
ZWNvcmQoY3JlYXRlUmVjb3JkRW50cnkoV1RGOjptb3ZlKGRhdGEpLCB0eXBlLCBjYXB0dXJlQ2Fs
bFN0YWNrLCBmcmFtZSkpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNsZWFy
UmVjb3JkU3RhY2soKQordm9pZCBUaW1lbGluZUFnZW50OjpjbGVhclJlY29yZFN0YWNrKCkKIHsK
ICAgICBtX3JlY29yZFN0YWNrLmNsZWFyKCk7CiAgICAgbV9pZCsrOwogfQogCi12b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OmxvY2FsVG9QYWdlUXVhZChjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBGbG9hdFF1YWQqIHF1YWQpCit2b2lkIFRp
bWVsaW5lQWdlbnQ6OmxvY2FsVG9QYWdlUXVhZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBGbG9hdFF1YWQqIHF1YWQpCiB7CiAgICAgY29uc3Qg
RnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CiAgICAg
RmxvYXRRdWFkIGFic29sdXRlID0gcmVuZGVyZXIubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1
YWQocmVjdCkpOwpAQCAtNzAwLDcgKzcwMCw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6bG9jYWxUb1BhZ2VRdWFkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0CiAg
ICAgcXVhZC0+c2V0UDQoZnJhbWVWaWV3LmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9p
bnQoYWJzb2x1dGUucDQoKSkpKTsKIH0KIAotUGFnZSogSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
cGFnZSgpCitQYWdlKiBUaW1lbGluZUFnZW50OjpwYWdlKCkKIHsKICAgICByZXR1cm4gbV9wYWdl
QWdlbnQgPyBtX3BhZ2VBZ2VudC0+cGFnZSgpIDogbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IDQ1YWY2MzU5
OWY4Y2U3ZDM1ZjcxOTExZGE4OTE2MjdkMGNmOWVjN2EuLmYyZDcyNDM3ZTc0MzY4NDM5NjU0Y2Iz
N2JmM2YyMTg1M2FjYThkMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JUaW1lbGluZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaApAQCAtNTIsMTUgKzUyLDE1IEBAIGNsYXNzIEV2ZW50Owog
Y2xhc3MgRmxvYXRRdWFkOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7Ci1j
bGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xh
c3MgSW50UmVjdDsKLWNsYXNzIFVSTDsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQYWdlQWdlbnQ7CiBj
bGFzcyBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBS
ZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworY2xhc3MgVVJMOwogCiB0
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIApAQCAtMTA1LDE3ICsxMDUsMTcgQEAgZW51bSBj
bGFzcyBUaW1lbGluZVJlY29yZFR5cGUgewogICAgIFdlYlNvY2tldERlc3Ryb3kKIH07CiAKLWNs
YXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQgZmluYWwKLSAgICA6IHB1YmxpYyBJbnNwZWN0b3JB
Z2VudEJhc2UKK2NsYXNzIFRpbWVsaW5lQWdlbnQgZmluYWwKKyAgICA6IHB1YmxpYyBXZWJBZ2Vu
dEJhc2UKICAgICAsIHB1YmxpYyBJbnNwZWN0b3I6OlRpbWVsaW5lQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCiAgICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpTY3JpcHREZWJ1Z0xpc3RlbmVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JUaW1lbGluZUFnZW50KTsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUaW1lbGluZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEluc3BlY3RvclR5cGUgeyBQYWdlSW5zcGVjdG9yLCBX
b3JrZXJJbnNwZWN0b3IgfTsKIAotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyosIEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3RvclR5cGUsIEluc3BlY3Rv
ckNsaWVudCopOwotICAgIHZpcnR1YWwgfkluc3BlY3RvclRpbWVsaW5lQWdlbnQoKTsKKyAgICBU
aW1lbGluZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlQWdlbnQqLCBJbnNwZWN0b3JU
eXBlLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5UaW1lbGluZUFnZW50KCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpAQCAtMjI2LDcgKzIyNiw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBsb2NhbFRvUGFnZVF1YWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
TGF5b3V0UmVjdCYsIEZsb2F0UXVhZCopOwogICAgIFBhZ2UqIHBhZ2UoKTsKIAotICAgIEluc3Bl
Y3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CisgICAgUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsK
ICAgICBQYWdlU2NyaXB0RGVidWdTZXJ2ZXIqIG1fc2NyaXB0RGVidWdTZXJ2ZXI7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpUaW1lbGluZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9m
cm9udGVuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yV2ViQWdlbnRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV2ViQWdlbnRCYXNlLmgKaW5kZXggZGZjYzRhODQ1M2JhMjA3ZmIxM2Q3Njk5Mzk4YmE3OGZm
ZWEyZWY1Yy4uYTg4NjY1MmE0YTZjNjY1NjkyMTEzOTBlN2NlZWFiNWE2MjA2ZTcwNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldlYkFnZW50QmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJBZ2VudEJhc2UuaApAQCAt
MzUsMTcgKzM1LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5zdHJ1bWVudGlu
Z0FnZW50czsKIAotY2xhc3MgSW5zcGVjdG9yQWdlbnRCYXNlIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yQWdlbnRCYXNlIHsKK2NsYXNzIFdlYkFnZW50QmFzZSA6IHB1YmxpYyBJbnNwZWN0
b3I6OkFnZW50QmFzZSB7CiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yQWdlbnRCYXNlKGNvbnN0
IFN0cmluZyYgbmFtZSwgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykK
LSAgICAgICAgOiBJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50QmFzZShuYW1lKQorICAgIFdlYkFn
ZW50QmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMpCisgICAgICAgIDogSW5zcGVjdG9yOjpBZ2VudEJhc2UobmFtZSkKICAgICAg
ICAgLCBtX2luc3RydW1lbnRpbmdBZ2VudHMoaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICB7CiAg
ICAgfQogCiAgICAgSW5zdHJ1bWVudGluZ0FnZW50cyogbV9pbnN0cnVtZW50aW5nQWdlbnRzOwog
fTsKLSAgICAKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yV2ViQWdlbnRCYXNlX2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvcldvcmtlckFnZW50LmNwcAppbmRleCBkODRiYjA1OWJmZGJjMDUzMjIzN2E0NGMy
NjQ4YWE4YWI1Mzk0ZTMxLi44MjNjZmY4OGVkNDc5YjNiNmE3Nzc5ZTc3Nzc4MmY4Zjk4MTZhYTcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2Vu
dC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6V29ya2VyRnJv
bnRlbmRDaGFubmVsIDogcHVibGljIFdvcmtlckdsb2JhbFNjb3BlUHJveHk6OlBhZ2VJbnNwZWN0
b3IgeworY2xhc3MgV29ya2VyQWdlbnQ6OldvcmtlckZyb250ZW5kQ2hhbm5lbCA6IHB1YmxpYyBX
b3JrZXJHbG9iYWxTY29wZVByb3h5OjpQYWdlSW5zcGVjdG9yIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBXb3JrZXJGcm9udGVuZENoYW5uZWwo
SW5zcGVjdG9yOjpXb3JrZXJGcm9udGVuZERpc3BhdGNoZXIqIGZyb250ZW5kRGlzcGF0Y2hlciwg
V29ya2VyR2xvYmFsU2NvcGVQcm94eSogcHJveHkpCkBAIC05OSwyOCArOTksMjggQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgaW50IHNfbmV4dElkOwogfTsKIAotaW50IEluc3BlY3RvcldvcmtlckFn
ZW50OjpXb3JrZXJGcm9udGVuZENoYW5uZWw6OnNfbmV4dElkID0gMTsKK2ludCBXb3JrZXJBZ2Vu
dDo6V29ya2VyRnJvbnRlbmRDaGFubmVsOjpzX25leHRJZCA9IDE7CiAKLUluc3BlY3Rvcldvcmtl
ckFnZW50OjpJbnNwZWN0b3JXb3JrZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzKQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiV29y
a2VyIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCitXb3JrZXJBZ2VudDo6V29ya2VyQWdlbnQoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKKyAgICA6IFdlYkFnZW50QmFz
ZShBU0NJSUxpdGVyYWwoIldvcmtlciIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQogICAgICwgbV9l
bmFibGVkKGZhbHNlKQogICAgICwgbV9zaG91bGRQYXVzZURlZGljYXRlZFdvcmtlck9uU3RhcnQo
ZmFsc2UpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JXb3JrZXJB
Z2VudCh0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFdvcmtlckFnZW50KHRo
aXMpOwogfQogCi1JbnNwZWN0b3JXb3JrZXJBZ2VudDo6fkluc3BlY3RvcldvcmtlckFnZW50KCkK
K1dvcmtlckFnZW50Ojp+V29ya2VyQWdlbnQoKQogewotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50
cy0+c2V0SW5zcGVjdG9yV29ya2VyQWdlbnQobnVsbHB0cik7CisgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLT5zZXRXb3JrZXJBZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3Jr
ZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKQordm9pZCBXb3JrZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OldvcmtlckZyb250
ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gSW5zcGVjdG9yOjpXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNw
YXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQordm9pZCBX
b3JrZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNj
b25uZWN0UmVhc29uKQogewogICAgIG1fc2hvdWxkUGF1c2VEZWRpY2F0ZWRXb3JrZXJPblN0YXJ0
ID0gZmFsc2U7CiAgICAgRXJyb3JTdHJpbmcgdW51c2VkOwpAQCAtMTMwLDcgKzEzMCw3IEBAIHZv
aWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RGlzY29ubmVjdFJlCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwog
fQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQordm9p
ZCBXb3JrZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIHsKICAgICBtX2VuYWJsZWQgPSB0
cnVlOwogICAgIGlmICghbV9mcm9udGVuZERpc3BhdGNoZXIpCkBAIC0xMzksNyArMTM5LDcgQEAg
dm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICBjcmVh
dGVXb3JrZXJGcm9udGVuZENoYW5uZWxzRm9yRXhpc3RpbmdXb3JrZXJzKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQordm9pZCBXb3JrZXJB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAg
ICAgaWYgKCFtX2Zyb250ZW5kRGlzcGF0Y2hlcikKQEAgLTE0OCwxMiArMTQ4LDEyIEBAIHZvaWQg
SW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogICAgIGRlc3Ryb3lX
b3JrZXJGcm9udGVuZENoYW5uZWxzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6
OmNhbkluc3BlY3RXb3JrZXJzKEVycm9yU3RyaW5nJiwgYm9vbCogcmVzdWx0KQordm9pZCBXb3Jr
ZXJBZ2VudDo6Y2FuSW5zcGVjdFdvcmtlcnMoRXJyb3JTdHJpbmcmLCBib29sKiByZXN1bHQpCiB7
CiAgICAgKnJlc3VsdCA9IHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNv
bm5lY3RUb1dvcmtlcihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3JrZXJJZCkKK3ZvaWQgV29y
a2VyQWdlbnQ6OmNvbm5lY3RUb1dvcmtlcihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3JrZXJJ
ZCkKIHsKICAgICBXb3JrZXJGcm9udGVuZENoYW5uZWwqIGNoYW5uZWwgPSBtX2lkVG9DaGFubmVs
LmdldCh3b3JrZXJJZCk7CiAgICAgaWYgKGNoYW5uZWwpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9p
ZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6Y29ubmVjdFRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJv
ciwgaW50IHdvcmtlcklkKQogICAgICAgICBlcnJvciA9IEFTQ0lJTGl0ZXJhbCgiV29ya2VyIGlz
IGdvbmUiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGlzY29ubmVjdEZyb21X
b3JrZXIoRXJyb3JTdHJpbmcmIGVycm9yLCBpbnQgd29ya2VySWQpCit2b2lkIFdvcmtlckFnZW50
OjpkaXNjb25uZWN0RnJvbVdvcmtlcihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3JrZXJJZCkK
IHsKICAgICBXb3JrZXJGcm9udGVuZENoYW5uZWwqIGNoYW5uZWwgPSBtX2lkVG9DaGFubmVsLmdl
dCh3b3JrZXJJZCk7CiAgICAgaWYgKGNoYW5uZWwpCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBJ
bnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGlzY29ubmVjdEZyb21Xb3JrZXIoRXJyb3JTdHJpbmcmIGVy
cm9yLCBpbnQgd29ya2VySWQKICAgICAgICAgZXJyb3IgPSBBU0NJSUxpdGVyYWwoIldvcmtlciBp
cyBnb25lIik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9X
b3JrZXIoRXJyb3JTdHJpbmcmIGVycm9yLCBpbnQgd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9X
b3JrZXIoRXJyb3JTdHJpbmcmIGVycm9yLCBpbnQgd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBXb3JrZXJGcm9udGVuZENoYW5uZWwqIGNo
YW5uZWwgPSBtX2lkVG9DaGFubmVsLmdldCh3b3JrZXJJZCk7CiAgICAgaWYgKGNoYW5uZWwpCkBA
IC0xODAsMjQgKzE4MCwyNCBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2Fn
ZVRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklkLAogICAgICAgICBlcnJv
ciA9IEFTQ0lJTGl0ZXJhbCgiV29ya2VyIGlzIGdvbmUiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JX
b3JrZXJBZ2VudDo6c2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMoRXJyb3JTdHJpbmcmLCBib29sIHZh
bHVlKQordm9pZCBXb3JrZXJBZ2VudDo6c2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMoRXJyb3JTdHJp
bmcmLCBib29sIHZhbHVlKQogewogICAgIG1fc2hvdWxkUGF1c2VEZWRpY2F0ZWRXb3JrZXJPblN0
YXJ0ID0gdmFsdWU7CiB9CiAKLWJvb2wgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNob3VsZFBhdXNl
RGVkaWNhdGVkV29ya2VyT25TdGFydCgpIGNvbnN0Citib29sIFdvcmtlckFnZW50OjpzaG91bGRQ
YXVzZURlZGljYXRlZFdvcmtlck9uU3RhcnQoKSBjb25zdAogewogICAgIHJldHVybiBtX3Nob3Vs
ZFBhdXNlRGVkaWNhdGVkV29ya2VyT25TdGFydDsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJB
Z2VudDo6ZGlkU3RhcnRXb3JrZXJHbG9iYWxTY29wZShXb3JrZXJHbG9iYWxTY29wZVByb3h5KiB3
b3JrZXJHbG9iYWxTY29wZVByb3h5LCBjb25zdCBVUkwmIHVybCkKK3ZvaWQgV29ya2VyQWdlbnQ6
OmRpZFN0YXJ0V29ya2VyR2xvYmFsU2NvcGUoV29ya2VyR2xvYmFsU2NvcGVQcm94eSogd29ya2Vy
R2xvYmFsU2NvcGVQcm94eSwgY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgbV9kZWRpY2F0ZWRXb3Jr
ZXJzLnNldCh3b3JrZXJHbG9iYWxTY29wZVByb3h5LCB1cmwuc3RyaW5nKCkpOwogICAgIGlmICht
X2Zyb250ZW5kRGlzcGF0Y2hlciAmJiBtX2VuYWJsZWQpCiAgICAgICAgIGNyZWF0ZVdvcmtlckZy
b250ZW5kQ2hhbm5lbCh3b3JrZXJHbG9iYWxTY29wZVByb3h5LCB1cmwuc3RyaW5nKCkpOwogfQog
Ci12b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3b3JrZXJHbG9iYWxTY29wZVRlcm1pbmF0ZWQo
V29ya2VyR2xvYmFsU2NvcGVQcm94eSogcHJveHkpCit2b2lkIFdvcmtlckFnZW50Ojp3b3JrZXJH
bG9iYWxTY29wZVRlcm1pbmF0ZWQoV29ya2VyR2xvYmFsU2NvcGVQcm94eSogcHJveHkpCiB7CiAg
ICAgbV9kZWRpY2F0ZWRXb3JrZXJzLnJlbW92ZShwcm94eSk7CiAgICAgZm9yIChXb3JrZXJDaGFu
bmVsczo6aXRlcmF0b3IgaXQgPSBtX2lkVG9DaGFubmVsLmJlZ2luKCk7IGl0ICE9IG1faWRUb0No
YW5uZWwuZW5kKCk7ICsraXQpIHsKQEAgLTIxMCwxMyArMjEwLDEzIEBAIHZvaWQgSW5zcGVjdG9y
V29ya2VyQWdlbnQ6Ondvcmtlckdsb2JhbFNjb3BlVGVybWluYXRlZChXb3JrZXJHbG9iYWxTY29w
ZVByb3h5KiBwCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGVX
b3JrZXJGcm9udGVuZENoYW5uZWxzRm9yRXhpc3RpbmdXb3JrZXJzKCkKK3ZvaWQgV29ya2VyQWdl
bnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKQogewog
ICAgIGZvciAoRGVkaWNhdGVkV29ya2Vyczo6aXRlcmF0b3IgaXQgPSBtX2RlZGljYXRlZFdvcmtl
cnMuYmVnaW4oKTsgaXQgIT0gbV9kZWRpY2F0ZWRXb3JrZXJzLmVuZCgpOyArK2l0KQogICAgICAg
ICBjcmVhdGVXb3JrZXJGcm9udGVuZENoYW5uZWwoaXQtPmtleSwgaXQtPnZhbHVlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGVzdHJveVdvcmtlckZyb250ZW5kQ2hhbm5lbHMo
KQordm9pZCBXb3JrZXJBZ2VudDo6ZGVzdHJveVdvcmtlckZyb250ZW5kQ2hhbm5lbHMoKQogewog
ICAgIGZvciAoV29ya2VyQ2hhbm5lbHM6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvQ2hhbm5lbC5iZWdp
bigpOyBpdCAhPSBtX2lkVG9DaGFubmVsLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGl0LT52YWx1
ZS0+ZGlzY29ubmVjdEZyb21Xb3JrZXJHbG9iYWxTY29wZSgpOwpAQCAtMjI1LDcgKzIyNSw3IEBA
IHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRlc3Ryb3lXb3JrZXJGcm9udGVuZENoYW5uZWxz
KCkKICAgICBtX2lkVG9DaGFubmVsLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2Vy
QWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChXb3JrZXJHbG9iYWxTY29wZVByb3h5
KiB3b3JrZXJHbG9iYWxTY29wZVByb3h5LCBjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgV29ya2Vy
QWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChXb3JrZXJHbG9iYWxTY29wZVByb3h5
KiB3b3JrZXJHbG9iYWxTY29wZVByb3h5LCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBXb3Jr
ZXJGcm9udGVuZENoYW5uZWwqIGNoYW5uZWwgPSBuZXcgV29ya2VyRnJvbnRlbmRDaGFubmVsKG1f
ZnJvbnRlbmREaXNwYXRjaGVyLmdldCgpLCB3b3JrZXJHbG9iYWxTY29wZVByb3h5KTsKICAgICBt
X2lkVG9DaGFubmVsLnNldChjaGFubmVsLT5pZCgpLCBjaGFubmVsKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmgKaW5kZXggNGU3M2NmYjkxNzBm
MjM0MGJiMDQ4OWM2ZDkxYWYzYzlmMzk4YTU5Mi4uMTZkYTgwNjk4ODlhMGI3N2Y0MjRiMzhiZGMz
NjRmN2I4YjNlYjhiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvcldvcmtlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
cldvcmtlckFnZW50LmgKQEAgLTQ4LDExICs0OCwxMSBAQCBjbGFzcyBXb3JrZXJHbG9iYWxTY29w
ZVByb3h5OwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9y
V29ya2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5z
cGVjdG9yOjpXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworY2xhc3MgV29ya2VyQWdl
bnQgZmluYWwgOiBwdWJsaWMgV2ViQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpXb3JrZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIGV4cGxpY2l0IEluc3BlY3RvcldvcmtlckFnZW50KEluc3RydW1lbnRpbmdB
Z2VudHMqKTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JXb3JrZXJBZ2VudCgpOworICAgIGV4cGxp
Y2l0IFdvcmtlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqKTsKKyAgICB2aXJ0dWFsIH5Xb3Jr
ZXJBZ2VudCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNo
ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcAppbmRleCBlYzA0NjQy
MWJmMjZkZDc4ZjQ0ZmM2ZDRjZTY2ZDA5ZmI2MjU1ZGRjLi5kMDA4Yjc5MzkyNDllNjlkODQ0ZGM1
NzlmNGYxYjhlYjlmMDU3MDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zdHJ1bWVudGluZ0FnZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3RydW1lbnRpbmdBZ2VudHMuY3BwCkBAIC00NSw1MiArNDUsNTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogSW5zdHJ1bWVudGluZ0FnZW50czo6SW5zdHJ1bWVudGluZ0FnZW50cyhJbnNwZWN0b3JF
bnZpcm9ubWVudCYgZW52aXJvbm1lbnQpCiAgICAgOiBtX2Vudmlyb25tZW50KGVudmlyb25tZW50
KQogICAgICwgbV9pbnNwZWN0b3JBZ2VudChudWxscHRyKQotICAgICwgbV9pbnNwZWN0b3JQYWdl
QWdlbnQobnVsbHB0cikKLSAgICAsIG1faW5zcGVjdG9yQ1NTQWdlbnQobnVsbHB0cikKLSAgICAs
IG1faW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQobnVsbHB0cikKKyAgICAsIG1fcGFnZUFnZW50KG51
bGxwdHIpCisgICAgLCBtX2Nzc0FnZW50KG51bGxwdHIpCisgICAgLCBtX2xheWVyVHJlZUFnZW50
KG51bGxwdHIpCiAgICAgLCBtX3dlYkNvbnNvbGVBZ2VudChudWxscHRyKQotICAgICwgbV9pbnNw
ZWN0b3JET01BZ2VudChudWxscHRyKQotICAgICwgbV9pbnNwZWN0b3JSZXNvdXJjZUFnZW50KG51
bGxwdHIpCisgICAgLCBtX2RvbUFnZW50KG51bGxwdHIpCisgICAgLCBtX3Jlc291cmNlQWdlbnQo
bnVsbHB0cikKICAgICAsIG1fcGFnZVJ1bnRpbWVBZ2VudChudWxscHRyKQogICAgICwgbV93b3Jr
ZXJSdW50aW1lQWdlbnQobnVsbHB0cikKLSAgICAsIG1faW5zcGVjdG9yVGltZWxpbmVBZ2VudChu
dWxscHRyKQotICAgICwgbV9wZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxpbmVBZ2VudChudWxscHRy
KQotICAgICwgbV9pbnNwZWN0b3JET01TdG9yYWdlQWdlbnQobnVsbHB0cikKKyAgICAsIG1fdGlt
ZWxpbmVBZ2VudChudWxscHRyKQorICAgICwgbV9wZXJzaXN0ZW50VGltZWxpbmVBZ2VudChudWxs
cHRyKQorICAgICwgbV9kb21TdG9yYWdlQWdlbnQobnVsbHB0cikKICNpZiBFTkFCTEUoV0VCX1JF
UExBWSkKLSAgICAsIG1faW5zcGVjdG9yUmVwbGF5QWdlbnQobnVsbHB0cikKKyAgICAsIG1fcmVw
bGF5QWdlbnQobnVsbHB0cikKICNlbmRpZgotICAgICwgbV9pbnNwZWN0b3JEYXRhYmFzZUFnZW50
KG51bGxwdHIpCi0gICAgLCBtX2luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudChudWxscHRy
KQotICAgICwgbV9pbnNwZWN0b3JEZWJ1Z2dlckFnZW50KG51bGxwdHIpCisgICAgLCBtX2RhdGFi
YXNlQWdlbnQobnVsbHB0cikKKyAgICAsIG1fYXBwbGljYXRpb25DYWNoZUFnZW50KG51bGxwdHIp
CisgICAgLCBtX2RlYnVnZ2VyQWdlbnQobnVsbHB0cikKICAgICAsIG1fcGFnZURlYnVnZ2VyQWdl
bnQobnVsbHB0cikKLSAgICAsIG1faW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudChudWxscHRyKQot
ICAgICwgbV9pbnNwZWN0b3JXb3JrZXJBZ2VudChudWxscHRyKQorICAgICwgbV9kb21EZWJ1Z2dl
ckFnZW50KG51bGxwdHIpCisgICAgLCBtX3dvcmtlckFnZW50KG51bGxwdHIpCiB7CiB9CiAKIHZv
aWQgSW5zdHJ1bWVudGluZ0FnZW50czo6cmVzZXQoKQogewogICAgIG1faW5zcGVjdG9yQWdlbnQg
PSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yUGFnZUFnZW50ID0gbnVsbHB0cjsKLSAgICBtX2lu
c3BlY3RvckNTU0FnZW50ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3RvckxheWVyVHJlZUFnZW50
ID0gbnVsbHB0cjsKKyAgICBtX3BhZ2VBZ2VudCA9IG51bGxwdHI7CisgICAgbV9jc3NBZ2VudCA9
IG51bGxwdHI7CisgICAgbV9sYXllclRyZWVBZ2VudCA9IG51bGxwdHI7CiAgICAgbV93ZWJDb25z
b2xlQWdlbnQgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yRE9NQWdlbnQgPSBudWxscHRyOwot
ICAgIG1faW5zcGVjdG9yUmVzb3VyY2VBZ2VudCA9IG51bGxwdHI7CisgICAgbV9kb21BZ2VudCA9
IG51bGxwdHI7CisgICAgbV9yZXNvdXJjZUFnZW50ID0gbnVsbHB0cjsKICAgICBtX3BhZ2VSdW50
aW1lQWdlbnQgPSBudWxscHRyOwogICAgIG1fd29ya2VyUnVudGltZUFnZW50ID0gbnVsbHB0cjsK
LSAgICBtX2luc3BlY3RvclRpbWVsaW5lQWdlbnQgPSBudWxscHRyOwotICAgIG1fcGVyc2lzdGVu
dEluc3BlY3RvclRpbWVsaW5lQWdlbnQgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50ID0gbnVsbHB0cjsKKyAgICBtX3RpbWVsaW5lQWdlbnQgPSBudWxscHRyOworICAg
IG1fcGVyc2lzdGVudFRpbWVsaW5lQWdlbnQgPSBudWxscHRyOworICAgIG1fZG9tU3RvcmFnZUFn
ZW50ID0gbnVsbHB0cjsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBtX2luc3BlY3RvclJl
cGxheUFnZW50ID0gbnVsbHB0cjsKKyAgICBtX3JlcGxheUFnZW50ID0gbnVsbHB0cjsKICNlbmRp
ZgotICAgIG1faW5zcGVjdG9yRGF0YWJhc2VBZ2VudCA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yRGVidWdn
ZXJBZ2VudCA9IG51bGxwdHI7CisgICAgbV9kYXRhYmFzZUFnZW50ID0gbnVsbHB0cjsKKyAgICBt
X2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9IG51bGxwdHI7CisgICAgbV9kZWJ1Z2dlckFnZW50ID0g
bnVsbHB0cjsKICAgICBtX3BhZ2VEZWJ1Z2dlckFnZW50ID0gbnVsbHB0cjsKLSAgICBtX2luc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yV29ya2VyQWdl
bnQgPSBudWxscHRyOworICAgIG1fZG9tRGVidWdnZXJBZ2VudCA9IG51bGxwdHI7CisgICAgbV93
b3JrZXJBZ2VudCA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oCmluZGV4IGY5MWE2
ODU5ZTQ3NzVkYzA0Nzg0ZmEzMTc0ODJiMzhlOGQ5OWRhNjUuLmNiOWEyYWI2NjgyYTA1ZDg3OTk0
ODNjZjIwNDg2MWQ3ZWRlNjFiM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnN0cnVtZW50aW5nQWdlbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3RydW1lbnRpbmdBZ2VudHMuaApAQCAtMzksMjggKzM5LDI4IEBACiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CitjbGFzcyBEZWJ1Z2dlckFnZW50
OwogY2xhc3MgSW5zcGVjdG9yQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Owog
fQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudDsKLWNsYXNzIEluc3BlY3RvckNTU0FnZW50OwotY2xhc3MgSW5zcGVjdG9yRE9NQWdl
bnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OwotY2xhc3MgSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OwotY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDsKLWNsYXNzIEluc3Bl
Y3RvckxheWVyVHJlZUFnZW50OwotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwotY2xhc3MgSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDsKLWNsYXNzIEluc3BlY3RvclJlcGxheUFnZW50OwotY2xhc3Mg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKLWNsYXNzIEluc3BlY3RvcldvcmtlckFnZW50OworY2xh
c3MgQXBwbGljYXRpb25DYWNoZUFnZW50OworY2xhc3MgQ1NTQWdlbnQ7CitjbGFzcyBEYXRhYmFz
ZUFnZW50OworY2xhc3MgRE9NQWdlbnQ7CitjbGFzcyBET01EZWJ1Z2dlckFnZW50OworY2xhc3Mg
RE9NU3RvcmFnZUFnZW50OworY2xhc3MgTGF5ZXJUcmVlQWdlbnQ7CiBjbGFzcyBQYWdlOworY2xh
c3MgUGFnZUFnZW50OwogY2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBQYWdlUnVudGlt
ZUFnZW50OworY2xhc3MgUmVwbGF5QWdlbnQ7CitjbGFzcyBSZXNvdXJjZUFnZW50OworY2xhc3Mg
VGltZWxpbmVBZ2VudDsKIGNsYXNzIFdlYkNvbnNvbGVBZ2VudDsKK2NsYXNzIFdvcmtlckFnZW50
OwogY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7CiBjbGFzcyBXb3JrZXJSdW50aW1lQWdlbnQ7CiAK
QEAgLTY4LDkgKzY4LDkgQEAgY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50cyA6IHB1YmxpYyBSZWZD
b3VudGVkPEluc3RydW1lbnRpbmdBZ2VudHM+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnN0cnVtZW50aW5nQWdlbnRzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnN0cnVtZW50aW5nQWdlbnRzPiBjcmVhdGUoSW5z
cGVjdG9yOjpJbnNwZWN0b3JFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQpCisgICAgc3RhdGljIFJl
ZjxJbnN0cnVtZW50aW5nQWdlbnRzPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JFbnZpcm9u
bWVudCYgZW52aXJvbm1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElu
c3RydW1lbnRpbmdBZ2VudHMoZW52aXJvbm1lbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW5zdHJ1bWVudGluZ0FnZW50cyhlbnZpcm9ubWVudCkpOwogICAgIH0KICAgICB+SW5z
dHJ1bWVudGluZ0FnZW50cygpIHsgfQogICAgIHZvaWQgcmVzZXQoKTsKQEAgLTgwLDIwICs4MCwy
MCBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdl
bnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckFnZW50OyB9CiAgICAgdm9pZCBzZXRJbnNw
ZWN0b3JBZ2VudChJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3Rv
ckFnZW50ID0gYWdlbnQ7IH0KIAotICAgIEluc3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFn
ZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JQYWdlQWdlbnQ7IH0KLSAgICB2b2lk
IHNldEluc3BlY3RvclBhZ2VBZ2VudChJbnNwZWN0b3JQYWdlQWdlbnQqIGFnZW50KSB7IG1faW5z
cGVjdG9yUGFnZUFnZW50ID0gYWdlbnQ7IH0KKyAgICBQYWdlQWdlbnQqIHBhZ2VBZ2VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnZUFnZW50OyB9CisgICAgdm9pZCBzZXRQYWdlQWdlbnQoUGFnZUFn
ZW50KiBhZ2VudCkgeyBtX3BhZ2VBZ2VudCA9IGFnZW50OyB9CiAKLSAgICBJbnNwZWN0b3JDU1NB
Z2VudCogaW5zcGVjdG9yQ1NTQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckNTU0Fn
ZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JDU1NBZ2VudChJbnNwZWN0b3JDU1NBZ2VudCog
YWdlbnQpIHsgbV9pbnNwZWN0b3JDU1NBZ2VudCA9IGFnZW50OyB9CisgICAgQ1NTQWdlbnQqIGNz
c0FnZW50KCkgY29uc3QgeyByZXR1cm4gbV9jc3NBZ2VudDsgfQorICAgIHZvaWQgc2V0Q1NTQWdl
bnQoQ1NTQWdlbnQqIGFnZW50KSB7IG1fY3NzQWdlbnQgPSBhZ2VudDsgfQogCiAgICAgV2ViQ29u
c29sZUFnZW50KiB3ZWJDb25zb2xlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3dlYkNvbnNvbGVB
Z2VudDsgfQogICAgIHZvaWQgc2V0V2ViQ29uc29sZUFnZW50KFdlYkNvbnNvbGVBZ2VudCogYWdl
bnQpIHsgbV93ZWJDb25zb2xlQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9yRE9NQWdl
bnQqIGluc3BlY3RvckRPTUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JET01BZ2Vu
dDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yRE9NQWdlbnQqIGFn
ZW50KSB7IG1faW5zcGVjdG9yRE9NQWdlbnQgPSBhZ2VudDsgfQorICAgIERPTUFnZW50KiBkb21B
Z2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tQWdlbnQ7IH0KKyAgICB2b2lkIHNldERPTUFnZW50
KERPTUFnZW50KiBhZ2VudCkgeyBtX2RvbUFnZW50ID0gYWdlbnQ7IH0KIAotICAgIEluc3BlY3Rv
clJlc291cmNlQWdlbnQqIGluc3BlY3RvclJlc291cmNlQWdlbnQoKSBjb25zdCB7IHJldHVybiBt
X2luc3BlY3RvclJlc291cmNlQWdlbnQ7IH0KLSAgICB2b2lkIHNldEluc3BlY3RvclJlc291cmNl
QWdlbnQoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JSZXNvdXJj
ZUFnZW50ID0gYWdlbnQ7IH0KKyAgICBSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50KCkgY29u
c3QgeyByZXR1cm4gbV9yZXNvdXJjZUFnZW50OyB9CisgICAgdm9pZCBzZXRSZXNvdXJjZUFnZW50
KFJlc291cmNlQWdlbnQqIGFnZW50KSB7IG1fcmVzb3VyY2VBZ2VudCA9IGFnZW50OyB9CiAKICAg
ICBQYWdlUnVudGltZUFnZW50KiBwYWdlUnVudGltZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9w
YWdlUnVudGltZUFnZW50OyB9CiAgICAgdm9pZCBzZXRQYWdlUnVudGltZUFnZW50KFBhZ2VSdW50
aW1lQWdlbnQqIGFnZW50KSB7IG1fcGFnZVJ1bnRpbWVBZ2VudCA9IGFnZW50OyB9CkBAIC0xMDEs
NDAgKzEwMSw0MCBAQCBwdWJsaWM6CiAgICAgV29ya2VyUnVudGltZUFnZW50KiB3b3JrZXJSdW50
aW1lQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlclJ1bnRpbWVBZ2VudDsgfQogICAgIHZv
aWQgc2V0V29ya2VyUnVudGltZUFnZW50KFdvcmtlclJ1bnRpbWVBZ2VudCogYWdlbnQpIHsgbV93
b3JrZXJSdW50aW1lQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yVGltZWxpbmVBZ2VudChJbnNwZWN0
b3JUaW1lbGluZUFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvclRpbWVsaW5lQWdlbnQgPSBhZ2Vu
dDsgfQorICAgIFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQoKSBjb25zdCB7IHJldHVybiBt
X3RpbWVsaW5lQWdlbnQ7IH0KKyAgICB2b2lkIHNldFRpbWVsaW5lQWdlbnQoVGltZWxpbmVBZ2Vu
dCogYWdlbnQpIHsgbV90aW1lbGluZUFnZW50ID0gYWdlbnQ7IH0KIAotICAgIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQqIHBlcnNpc3RlbnRJbnNwZWN0b3JUaW1lbGluZUFnZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9wZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxpbmVBZ2VudDsgfQotICAgIHZvaWQgc2V0
UGVyc2lzdGVudEluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCog
YWdlbnQpIHsgbV9wZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxpbmVBZ2VudCA9IGFnZW50OyB9Cisg
ICAgVGltZWxpbmVBZ2VudCogcGVyc2lzdGVudFRpbWVsaW5lQWdlbnQoKSBjb25zdCB7IHJldHVy
biBtX3BlcnNpc3RlbnRUaW1lbGluZUFnZW50OyB9CisgICAgdm9pZCBzZXRQZXJzaXN0ZW50VGlt
ZWxpbmVBZ2VudChUaW1lbGluZUFnZW50KiBhZ2VudCkgeyBtX3BlcnNpc3RlbnRUaW1lbGluZUFn
ZW50ID0gYWdlbnQ7IH0KIAotICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogaW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ7IH0KLSAgICB2b2lkIHNldEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50ID0gYWdlbnQ7
IH0KKyAgICBET01TdG9yYWdlQWdlbnQqIGRvbVN0b3JhZ2VBZ2VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZG9tU3RvcmFnZUFnZW50OyB9CisgICAgdm9pZCBzZXRET01TdG9yYWdlQWdlbnQoRE9NU3Rv
cmFnZUFnZW50KiBhZ2VudCkgeyBtX2RvbVN0b3JhZ2VBZ2VudCA9IGFnZW50OyB9CiAKICNpZiBF
TkFCTEUoV0VCX1JFUExBWSkKLSAgICBJbnNwZWN0b3JSZXBsYXlBZ2VudCogaW5zcGVjdG9yUmVw
bGF5QWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclJlcGxheUFnZW50OyB9Ci0gICAg
dm9pZCBzZXRJbnNwZWN0b3JSZXBsYXlBZ2VudChJbnNwZWN0b3JSZXBsYXlBZ2VudCogYWdlbnQp
IHsgbV9pbnNwZWN0b3JSZXBsYXlBZ2VudCA9IGFnZW50OyB9CisgICAgUmVwbGF5QWdlbnQqIHJl
cGxheUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXlBZ2VudDsgfQorICAgIHZvaWQgc2V0
UmVwbGF5QWdlbnQoUmVwbGF5QWdlbnQqIGFnZW50KSB7IG1fcmVwbGF5QWdlbnQgPSBhZ2VudDsg
fQogI2VuZGlmCiAKLSAgICBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KiBpbnNwZWN0b3JEYXRhYmFz
ZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JEYXRhYmFzZUFnZW50OyB9Ci0gICAg
dm9pZCBzZXRJbnNwZWN0b3JEYXRhYmFzZUFnZW50KEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGFn
ZW50KSB7IG1faW5zcGVjdG9yRGF0YWJhc2VBZ2VudCA9IGFnZW50OyB9CisgICAgRGF0YWJhc2VB
Z2VudCogZGF0YWJhc2VBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VBZ2VudDsgfQor
ICAgIHZvaWQgc2V0RGF0YWJhc2VBZ2VudChEYXRhYmFzZUFnZW50KiBhZ2VudCkgeyBtX2RhdGFi
YXNlQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
KiBpbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50KEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYWdlbnQpIHsg
bV9pbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBhZ2VudDsgfQorICAgIEFwcGxpY2F0
aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRpb25DYWNoZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9h
cHBsaWNhdGlvbkNhY2hlQWdlbnQ7IH0KKyAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dChBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIGFnZW50KSB7IG1fYXBwbGljYXRpb25DYWNoZUFnZW50
ID0gYWdlbnQ7IH0KIAotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogaW5z
cGVjdG9yRGVidWdnZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRGVidWdnZXJB
Z2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0b3I6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yRGVidWdnZXJBZ2VudCA9
IGFnZW50OyB9CisgICAgSW5zcGVjdG9yOjpEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50OyB9CisgICAgdm9pZCBzZXREZWJ1Z2dlckFn
ZW50KEluc3BlY3Rvcjo6RGVidWdnZXJBZ2VudCogYWdlbnQpIHsgbV9kZWJ1Z2dlckFnZW50ID0g
YWdlbnQ7IH0KIAogICAgIFBhZ2VEZWJ1Z2dlckFnZW50KiBwYWdlRGVidWdnZXJBZ2VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnZURlYnVnZ2VyQWdlbnQ7IH0KICAgICB2b2lkIHNldFBhZ2VEZWJ1
Z2dlckFnZW50KFBhZ2VEZWJ1Z2dlckFnZW50KiBhZ2VudCkgeyBtX3BhZ2VEZWJ1Z2dlckFnZW50
ID0gYWdlbnQ7IH0KIAotICAgIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIGluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ7IH0KLSAgICB2b2lkIHNldEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50ID0gYWdl
bnQ7IH0KKyAgICBET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9kb21EZWJ1Z2dlckFnZW50OyB9CisgICAgdm9pZCBzZXRET01EZWJ1Z2dlckFnZW50
KERPTURlYnVnZ2VyQWdlbnQqIGFnZW50KSB7IG1fZG9tRGVidWdnZXJBZ2VudCA9IGFnZW50OyB9
CiAKLSAgICBJbnNwZWN0b3JXb3JrZXJBZ2VudCogaW5zcGVjdG9yV29ya2VyQWdlbnQoKSBjb25z
dCB7IHJldHVybiBtX2luc3BlY3RvcldvcmtlckFnZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0
b3JXb3JrZXJBZ2VudChJbnNwZWN0b3JXb3JrZXJBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JX
b3JrZXJBZ2VudCA9IGFnZW50OyB9CisgICAgV29ya2VyQWdlbnQqIHdvcmtlckFnZW50KCkgY29u
c3QgeyByZXR1cm4gbV93b3JrZXJBZ2VudDsgfQorICAgIHZvaWQgc2V0V29ya2VyQWdlbnQoV29y
a2VyQWdlbnQqIGFnZW50KSB7IG1fd29ya2VyQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQqIGluc3BlY3RvckxheWVyVHJlZUFnZW50KCkgY29uc3QgeyByZXR1
cm4gbV9pbnNwZWN0b3JMYXllclRyZWVBZ2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQoSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQgPSBhZ2VudDsgfQorICAgIExheWVyVHJlZUFnZW50KiBsYXllclRyZWVB
Z2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQWdlbnQ7IH0KKyAgICB2b2lkIHNldExh
eWVyVHJlZUFnZW50KExheWVyVHJlZUFnZW50KiBhZ2VudCkgeyBtX2xheWVyVHJlZUFnZW50ID0g
YWdlbnQ7IH0KIAogcHJpdmF0ZToKICAgICBJbnN0cnVtZW50aW5nQWdlbnRzKEluc3BlY3Rvcjo6
SW5zcGVjdG9yRW52aXJvbm1lbnQmKTsKQEAgLTE0MiwyNiArMTQyLDI2IEBAIHByaXZhdGU6CiAg
ICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JFbnZpcm9ubWVudCYgbV9lbnZpcm9ubWVudDsKIAogICAg
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7Ci0gICAgSW5zcGVj
dG9yUGFnZUFnZW50KiBtX2luc3BlY3RvclBhZ2VBZ2VudDsKLSAgICBJbnNwZWN0b3JDU1NBZ2Vu
dCogbV9pbnNwZWN0b3JDU1NBZ2VudDsKLSAgICBJbnNwZWN0b3JMYXllclRyZWVBZ2VudCogbV9p
bnNwZWN0b3JMYXllclRyZWVBZ2VudDsKKyAgICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50OworICAg
IENTU0FnZW50KiBtX2Nzc0FnZW50OworICAgIExheWVyVHJlZUFnZW50KiBtX2xheWVyVHJlZUFn
ZW50OwogICAgIFdlYkNvbnNvbGVBZ2VudCogbV93ZWJDb25zb2xlQWdlbnQ7Ci0gICAgSW5zcGVj
dG9yRE9NQWdlbnQqIG1faW5zcGVjdG9yRE9NQWdlbnQ7Ci0gICAgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCogbV9pbnNwZWN0b3JSZXNvdXJjZUFnZW50OworICAgIERPTUFnZW50KiBtX2RvbUFnZW50
OworICAgIFJlc291cmNlQWdlbnQqIG1fcmVzb3VyY2VBZ2VudDsKICAgICBQYWdlUnVudGltZUFn
ZW50KiBtX3BhZ2VSdW50aW1lQWdlbnQ7CiAgICAgV29ya2VyUnVudGltZUFnZW50KiBtX3dvcmtl
clJ1bnRpbWVBZ2VudDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiBtX2luc3BlY3RvclRp
bWVsaW5lQWdlbnQ7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogbV9wZXJzaXN0ZW50SW5z
cGVjdG9yVGltZWxpbmVBZ2VudDsKLSAgICBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQqIG1faW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OworICAgIFRpbWVsaW5lQWdlbnQqIG1fdGltZWxpbmVBZ2Vu
dDsKKyAgICBUaW1lbGluZUFnZW50KiBtX3BlcnNpc3RlbnRUaW1lbGluZUFnZW50OworICAgIERP
TVN0b3JhZ2VBZ2VudCogbV9kb21TdG9yYWdlQWdlbnQ7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkp
Ci0gICAgSW5zcGVjdG9yUmVwbGF5QWdlbnQqIG1faW5zcGVjdG9yUmVwbGF5QWdlbnQ7CisgICAg
UmVwbGF5QWdlbnQqIG1fcmVwbGF5QWdlbnQ7CiAjZW5kaWYKLSAgICBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50KiBtX2luc3BlY3RvckRhdGFiYXNlQWdlbnQ7Ci0gICAgSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50KiBtX2luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDsKLSAgICBJbnNw
ZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIG1faW5zcGVjdG9yRGVidWdnZXJBZ2VudDsK
KyAgICBEYXRhYmFzZUFnZW50KiBtX2RhdGFiYXNlQWdlbnQ7CisgICAgQXBwbGljYXRpb25DYWNo
ZUFnZW50KiBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudDsKKyAgICBJbnNwZWN0b3I6OkRlYnVnZ2Vy
QWdlbnQqIG1fZGVidWdnZXJBZ2VudDsKICAgICBQYWdlRGVidWdnZXJBZ2VudCogbV9wYWdlRGVi
dWdnZXJBZ2VudDsKLSAgICBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBtX2luc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ7Ci0gICAgSW5zcGVjdG9yV29ya2VyQWdlbnQqIG1faW5zcGVjdG9yV29y
a2VyQWdlbnQ7CisgICAgRE9NRGVidWdnZXJBZ2VudCogbV9kb21EZWJ1Z2dlckFnZW50OworICAg
IFdvcmtlckFnZW50KiBtX3dvcmtlckFnZW50OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKaW5kZXggNTFlYzVmMjlhNjZm
MDM3ODY0ZDBjMDVjOTU1OGQ2OTllYmUwNDEwZi4uMmVkOTI1ZmE3ZThkOGIxYzBmNGEzOGNlNjYz
OTY2MWNiMDQ3YWI2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdv
cmtSZXNvdXJjZXNEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29y
a1Jlc291cmNlc0RhdGEuY3BwCkBAIC03MCw3ICs3MCw3IEBAIE5ldHdvcmtSZXNvdXJjZXNEYXRh
OjpSZXNvdXJjZURhdGE6OlJlc291cmNlRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QKICAgICAsIG1fbG9hZGVySWQobG9hZGVySWQpCiAgICAgLCBtX2Jhc2U2NEVuY29kZWQoZmFs
c2UpCiAgICAgLCBtX2lzQ29udGVudEV2aWN0ZWQoZmFsc2UpCi0gICAgLCBtX3R5cGUoSW5zcGVj
dG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlKQorICAgICwgbV90eXBlKFBhZ2VBZ2VudDo6T3Ro
ZXJSZXNvdXJjZSkKICAgICAsIG1fY2FjaGVkUmVzb3VyY2UobnVsbHB0cikKIHsKIH0KQEAgLTE3
OSw3ICsxNzksNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpyZXNwb25zZVJlY2VpdmVk
KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbgogICAgIHJlc291cmNlRGF0YS0+
c2V0SFRUUFN0YXR1c0NvZGUocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiB9CiAKLXZvaWQg
TmV0d29ya1Jlc291cmNlc0RhdGE6OnNldFJlc291cmNlVHlwZShjb25zdCBTdHJpbmcmIHJlcXVl
c3RJZCwgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSkKK3ZvaWQgTmV0d29y
a1Jlc291cmNlc0RhdGE6OnNldFJlc291cmNlVHlwZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwg
UGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSkKIHsKICAgICBSZXNvdXJjZURhdGEqIHJlc291
cmNlRGF0YSA9IHJlc291cmNlRGF0YUZvclJlcXVlc3RJZChyZXF1ZXN0SWQpOwogICAgIGlmICgh
cmVzb3VyY2VEYXRhKQpAQCAtMTg3LDExICsxODcsMTEgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2Vz
RGF0YTo6c2V0UmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBJbnNwZWN0b3JQ
YWcKICAgICByZXNvdXJjZURhdGEtPnNldFR5cGUodHlwZSk7CiB9CiAKLUluc3BlY3RvclBhZ2VB
Z2VudDo6UmVzb3VyY2VUeXBlIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpyZXNvdXJjZVR5cGUoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQpCitQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBOZXR3b3JrUmVz
b3VyY2VzRGF0YTo6cmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKQogewogICAg
IFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gcmVzb3VyY2VEYXRhRm9yUmVxdWVzdElkKHJl
cXVlc3RJZCk7CiAgICAgaWYgKCFyZXNvdXJjZURhdGEpCi0gICAgICAgIHJldHVybiBJbnNwZWN0
b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2U7CisgICAgICAgIHJldHVybiBQYWdlQWdlbnQ6Ok90
aGVyUmVzb3VyY2U7CiAgICAgcmV0dXJuIHJlc291cmNlRGF0YS0+dHlwZSgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oCmluZGV4IGIy
NmNiOGNlOWQ0NzNmNmNhM2QzNjg3Y2M2OTUzN2MwOTU1MjBkY2YuLmZmNmVjZDUyNzIwMDlhYTVm
NTc2ZDE4NDk3OWQ3ODAyZGQ4NTQ3N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oCkBAIC05Niw4ICs5Niw4IEBAIHB1YmxpYzoKICAgICAg
ICAgYm9vbCBpc0NvbnRlbnRFdmljdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnRlbnRFdmlj
dGVkOyB9CiAgICAgICAgIHVuc2lnbmVkIGV2aWN0Q29udGVudCgpOwogCi0gICAgICAgIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgdm9pZCBzZXRUeXBlKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBl
IHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQorICAgICAgICBQYWdlQWdlbnQ6OlJlc291cmNlVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIHZvaWQgc2V0VHlwZShQ
YWdlQWdlbnQ6OlJlc291cmNlVHlwZSB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KIAogICAgICAg
ICBpbnQgaHR0cFN0YXR1c0NvZGUoKSBjb25zdCB7IHJldHVybiBtX2h0dHBTdGF0dXNDb2RlOyB9
CiAgICAgICAgIHZvaWQgc2V0SFRUUFN0YXR1c0NvZGUoaW50IGh0dHBTdGF0dXNDb2RlKSB7IG1f
aHR0cFN0YXR1c0NvZGUgPSBodHRwU3RhdHVzQ29kZTsgfQpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgYm9vbCBtX2Jhc2U2NEVuY29kZWQ7CiAgICAgICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IG1fZGF0YUJ1ZmZlcjsKICAgICAgICAgYm9vbCBtX2lzQ29udGVudEV2aWN0ZWQ7
Ci0gICAgICAgIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIG1fdHlwZTsKKyAgICAg
ICAgUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgbV90eXBlOwogICAgICAgICBpbnQgbV9odHRwU3Rh
dHVzQ29kZTsKIAogICAgICAgICBTdHJpbmcgbV90ZXh0RW5jb2RpbmdOYW1lOwpAQCAtMTQ4LDgg
KzE0OCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzb3VyY2VDcmVhdGVkKGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkKTsKICAgICB2b2lkIHJlc3BvbnNl
UmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQgc2V0UmVzb3VyY2VUeXBlKGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSk7Ci0g
ICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkKTsKKyAgICB2b2lkIHNldFJlc291cmNlVHlwZShjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUpOworICAgIFBhZ2VBZ2VudDo6UmVz
b3VyY2VUeXBlIHJlc291cmNlVHlwZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCk7CiAgICAgdm9p
ZCBzZXRSZXNvdXJjZUNvbnRlbnQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkID0gZmFsc2UpOwogICAgIHZvaWQgbWF5YmVB
ZGRSZXNvdXJjZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBkYXRhTGVuZ3RoKTsKICAgICB2b2lkIG1heWJlRGVjb2RlRGF0YVRvQ29udGVudChj
b25zdCBTdHJpbmcmIHJlcXVlc3RJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvUGFnZUNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZUNvbnNvbGVBZ2VudC5jcHAKaW5kZXggZTc1OWFhODA1NzY5ODUwZTNmMzk1OWZjMzRjMGM1ZDY1
MTI3ZGMxNy4uMTMyOGM3ZTkzYzdkMDU0NDc0ZWNkMWE1M2Y4YjZlYWExY2IwN2Y5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VDb25zb2xlQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmNwcApAQCAtNDAsMTUg
KzQwLDE1IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFnZUNvbnNvbGVBZ2VudDo6UGFnZUNvbnNvbGVBZ2VudChXZWJJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFn
ZW50KQorUGFnZUNvbnNvbGVBZ2VudDo6UGFnZUNvbnNvbGVBZ2VudChXZWJJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgRE9NQWdlbnQqIGRvbUFnZW50KQogICAg
IDogV2ViQ29uc29sZUFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICAsIG1faW5zcGVj
dG9yRE9NQWdlbnQoZG9tQWdlbnQpCisgICAgLCBtX2RvbUFnZW50KGRvbUFnZW50KQogewogfQog
CiB2b2lkIFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQogewotICAgIG1faW5zcGVjdG9yRE9NQWdlbnQtPnJlbGVhc2VEYW5nbGluZ05vZGVz
KCk7CisgICAgbV9kb21BZ2VudC0+cmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKIAogICAgIFdlYkNv
bnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhlcnJvclN0cmluZyk7CiB9CkBAIC01OCw3ICs1OCw3
IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbnNwZWN0YWJsZU5vZGUoTm9kZSogbm9kZSkgOiBt
X25vZGUobm9kZSkgeyB9CiAgICAgdmlydHVhbCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBnZXQo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0dXJuIElu
c3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShzdGF0ZSwgbV9ub2RlLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIERPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShzdGF0ZSwgbV9ub2Rl
LmdldCgpKTsKICAgICB9CiBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CkBAIC02
Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAKIHZvaWQgUGFnZUNvbnNvbGVBZ2VudDo6YWRkSW5zcGVj
dGVkTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiB7Ci0gICAgTm9k
ZSogbm9kZSA9IG1faW5zcGVjdG9yRE9NQWdlbnQtPm5vZGVGb3JJZChub2RlSWQpOworICAgIE5v
ZGUqIG5vZGUgPSBtX2RvbUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUg
fHwgbm9kZS0+aXNJblNoYWRvd1RyZWUoKSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJ
TGl0ZXJhbCgibm9kZUlkIGlzIG5vdCB2YWxpZCIpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZUNvbnNvbGVBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VDb25zb2xlQWdlbnQuaAppbmRleCAzNmMzMGMyNGQ4MjYz
YjgwMGYzZmIyNDlmMDY5YTY1YmU5NDlhMDJiLi5kZWUyOWNmYjkyN2QzOTNmNzNkNDMxMzkyYWYw
ODViNzAwMGMwMDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZUNv
bnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlQ29uc29sZUFn
ZW50LmgKQEAgLTM1LDEzICszNSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEluc3BlY3RvckRPTUFnZW50OworY2xhc3MgRE9NQWdlbnQ7CiAKIGNsYXNzIFBhZ2VDb25zb2xl
QWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViQ29uc29sZUFnZW50IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQYWdlQ29uc29sZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBQYWdlQ29uc29sZUFnZW50KFdlYkluamVjdGVkU2NyaXB0TWFuYWdlcios
IEluc3BlY3RvckRPTUFnZW50Kik7CisgICAgUGFnZUNvbnNvbGVBZ2VudChXZWJJbmplY3RlZFNj
cmlwdE1hbmFnZXIqLCBET01BZ2VudCopOwogICAgIHZpcnR1YWwgflBhZ2VDb25zb2xlQWdlbnQo
KSB7IH0KIAogcHJpdmF0ZToKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJNZXNzYWdlcyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBhZGRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7
CiAKLSAgICBJbnNwZWN0b3JET01BZ2VudCogbV9pbnNwZWN0b3JET01BZ2VudDsKKyAgICBET01B
Z2VudCogbV9kb21BZ2VudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDVlNWFkZDI5
YzJiMjU5YzJhNTU5N2Y3OGY4YzQ0ODQ1YmIyMmY0NGQuLjgxNWJkMDMyNmVhNWQzMGVhZmExYWY3
YjdkNTI0MzI3NjQwYzhiOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Q
YWdlRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VE
ZWJ1Z2dlckFnZW50LmNwcApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVi
dWdnZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwg
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCitQYWdlRGVidWdnZXJB
Z2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBh
Z2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogV2Vi
RGVidWdnZXJBZ2VudChpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGluc3RydW1lbnRpbmdBZ2VudHMp
CiAgICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX292ZXJsYXkob3ZlcmxheSkK
QEAgLTg2LDcgKzg2LDcgQEAgU3RyaW5nIFBhZ2VEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxG
b3JTY3JpcHQoY29uc3QgU2NyaXB0JiBzY3JpcHQpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c291cmNlTWFwVVJMRm9yU2NyaXB0KHNjcmlw
dCk7CisgICAgcmV0dXJuIERlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChzY3Jp
cHQpOwogfQogCiB2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpzdGFydExpc3RlbmluZ1NjcmlwdERl
YnVnU2VydmVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50
LmgKaW5kZXggNTQ5ZjdkM2ZjNmViOTFmMDlmMDNmNzdiNTViMWZhNTg2NTBkZmE0Zi4uNjQ0MmNh
OWVkNjkwNTEwMTcwZmRkOTRkOTRmMTU2NTE5MmQzMzI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKQEAgLTM3LDE2ICszNywxNiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwotY2xhc3MgSW5zcGVjdG9y
UGFnZUFnZW50OwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIFBhZ2U7CitjbGFz
cyBQYWdlQWdlbnQ7CiBjbGFzcyBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI7CiAKIGNsYXNzIFBhZ2VE
ZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIFdlYkRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFBhZ2VEZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQYWdlRGVidWdnZXJBZ2VudChJbnNwZWN0b3I6OkluamVj
dGVkU2NyaXB0TWFuYWdlciosIEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdl
bnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CisgICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zcGVjdG9y
OjpJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZUFnZW50
KiwgSW5zcGVjdG9yT3ZlcmxheSopOwogICAgIHZpcnR1YWwgflBhZ2VEZWJ1Z2dlckFnZW50KCkg
eyB9CiAKICAgICB2b2lkIGRpZENsZWFyTWFpbkZyYW1lV2luZG93T2JqZWN0KCk7CkBAIC03MCw3
ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9u
Q29udGV4dElkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcmxheU1lc3NhZ2Uo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqKSBvdmVycmlkZTsKIAotICAgIEluc3BlY3RvclBh
Z2VBZ2VudCogbV9wYWdlQWdlbnQ7CisgICAgUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBJ
bnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXk7CiAgICAgUGFnZVNjcmlwdERlYnVnU2VydmVyIG1f
c2NyaXB0RGVidWdTZXJ2ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VS
dW50aW1lQWdlbnQuY3BwCmluZGV4IGUxMjNjMGIzNTlkNjc4MmRiMjQ3MDJkZjA3ZjgyODI4ZTFj
NzFlNDQuLmM5OWE0NzIwZjdlODc4YjJmMDNiMjc5MjY0MGEyNDllNmY4MjhlNTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKQEAgLTUxLDggKzUx
LDggQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JQYWdlQWdlbnQq
IHBhZ2VBZ2VudCkKLSAgICA6IEluc3BlY3RvclJ1bnRpbWVBZ2VudChpbmplY3RlZFNjcmlwdE1h
bmFnZXIpCitQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBQYWdlKiBwYWdlLCBQYWdlQWdlbnQqIHBh
Z2VBZ2VudCkKKyAgICA6IFJ1bnRpbWVBZ2VudChpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAg
LCBtX2luc3BlY3RlZFBhZ2UocGFnZSkKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAg
ICAsIG1fbWFpbldvcmxkQ29udGV4dENyZWF0ZWQoZmFsc2UpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgUGFnZVJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uCiAgICAgU3RyaW5nIHVudXNlZDsKICAgICBkaXNhYmxlKHVu
dXNlZCk7CiAKLSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKHJlYXNvbik7CisgICAgUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChyZWFzb24pOwogfQogCiB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgUGFnZVJ1bnRp
bWVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICBpZiAoZW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJs
ZShlcnJvclN0cmluZyk7CisgICAgUnVudGltZUFnZW50OjplbmFibGUoZXJyb3JTdHJpbmcpOwog
CiAgICAgLy8gT25seSByZXBvcnQgZXhpc3RpbmcgY29udGV4dHMgaWYgdGhlIHBhZ2UgZGlkIGNv
bW1pdCBsb2FkLCBvdGhlcndpc2Ugd2UgbWF5CiAgICAgLy8gdW5pbnRlbnRpb25hbGx5IGluaXRp
YWxpemUgY29udGV4dHMgaW4gdGhlIGZyYW1lcyB3aGljaCBtYXkgdHJpZ2dlciBzb21lIGxpc3Rl
bmVycwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmRpc2FibGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOwor
ICAgIFJ1bnRpbWVBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CiB9CiAKIHZvaWQgUGFnZVJ1
bnRpbWVBZ2VudDo6ZGlkQ3JlYXRlTWFpbldvcmxkQ29udGV4dChGcmFtZSYgZnJhbWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQuaAppbmRleCBlN2IyYzI0ZDhk
MGU1NDQ5Y2U3MmYxMTk0YzhkMjM0YjczMGZhYWY5Li5hNDBhNWE0MDQxZThiY2U0MTRhMDRkYTNh
ZjE2MjZiYTYxYzBkZjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZVJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGlt
ZUFnZW50LmgKQEAgLTQ0LDE2ICs0NCwxNiBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xh
c3MgRnJhbWU7CiBjbGFzcyBQYWdlOworY2xhc3MgUGFnZUFnZW50OwogY2xhc3MgU2VjdXJpdHlP
cmlnaW47CiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgUGFnZVJ1bnRpbWVB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudCB7Citj
bGFzcyBQYWdlUnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6UnVudGltZUFn
ZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQYWdlUnVu
dGltZUFnZW50KEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgUGFnZSosIEluc3Bl
Y3RvclBhZ2VBZ2VudCopOworICAgIFBhZ2VSdW50aW1lQWdlbnQoSW5zcGVjdG9yOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqLCBQYWdlKiwgUGFnZUFnZW50Kik7CiAgICAgdmlydHVhbCB+UGFnZVJ1
bnRpbWVBZ2VudCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKSBvdmVycmlkZTsKQEAgLTczLDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IG5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpFeGVjU3Rh
dGUqLCBTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNQYWdlQ29udGV4dCk7CiAKICAgICBQYWdlKiBt
X2luc3BlY3RlZFBhZ2U7Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAg
ICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6
OlJ1bnRpbWVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKICAgICBib29sIG1fbWFpbldvcmxkQ29udGV4dENyZWF0ZWQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9XZWJDb25zb2xlQWdlbnQuY3BwCmluZGV4IDQ3MDA1OGVlNDNlOTJiOTUy
NTA0OTFlOWE4YWY1M2ZlNjI0NTI2OGEuLjJmNDcyNTdkMzYwNzQ2ZjY0YjI5OTljOTg2MWE3NWIw
YzgyOTQwMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJDb25zb2xl
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJDb25zb2xlQWdlbnQu
Y3BwCkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFdlYkNvbnNvbGVBZ2VudDo6V2ViQ29uc29sZUFnZW50KFdlYkluamVj
dGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDogSW5zcGVjdG9y
Q29uc29sZUFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICA6IENvbnNvbGVBZ2VudChp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX21vbml0b3JpbmdYSFJFbmFibGVkKGZhbHNl
KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkNvbnNvbGVB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5oCmluZGV4
IGNhZjFiMWRlYTU0MTE5Mjk1OWI3MTJhM2QwYmY2ZWQ5YzEwMWY5OWUuLjM2N2UyNzg1MzZiNzcw
YWFiMGY0NjI2NmMwMzVlOGRkZTA0NmQ1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9XZWJDb25zb2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
V2ViQ29uc29sZUFnZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgUmVzb3VyY2VSZXNwb25z
ZTsKIGNsYXNzIFdlYkluamVjdGVkU2NyaXB0TWFuYWdlcjsKIHR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogCi1jbGFzcyBXZWJDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JDb25zb2xlQWdlbnQgeworY2xhc3MgV2ViQ29uc29sZUFnZW50IDogcHVibGljIEluc3Bl
Y3Rvcjo6Q29uc29sZUFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJDb25zb2xl
QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGRkNjllNWYzZjE0
MjRmYzhjM2U1NDZkZWUyYTJmN2Y5YjY1ZDk5MTYuLjc1YTBmNWIxNzY5M2JkYTBkZjc1OGI4OGU2
YjEyMDVkMDIzZWZlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJE
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViRGVidWdn
ZXJBZ2VudC5jcHAKQEAgLTMzLDIxICszMywyMSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXZWJEZWJ1Z2dlckFnZW50OjpXZWJEZWJ1Z2dlckFn
ZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQotICAgIDogSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudChpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBEZWJ1Z2dlckFnZW50KGluamVj
dGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1faW5zdHJ1bWVudGluZ0FnZW50cyhpbnN0cnVtZW50
aW5nQWdlbnRzKQogewogfQogCiB2b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpCiB7Ci0g
ICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCk7Ci0gICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLT5zZXRJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KHRoaXMpOworICAgIERlYnVnZ2VyQWdl
bnQ6OmVuYWJsZSgpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0RGVidWdnZXJBZ2Vu
dCh0aGlzKTsKIH0KIAogdm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNCZWlu
Z0Rlc3Ryb3llZCkKIHsKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGlzQmVp
bmdEZXN0cm95ZWQpOwotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudChudWxscHRyKTsKKyAgICBEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGlzQmVpbmdE
ZXN0cm95ZWQpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0RGVidWdnZXJBZ2VudChu
dWxscHRyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1dlYkRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9XZWJEZWJ1Z2dlckFnZW50LmgKaW5kZXggMDc0MTY2MjE2MWRjYzE1NWJkMTI5MWRl
YjZhODUzNGVjNGI5M2RiZC4uMjVhZWIxMjUwZWVmNDM4MDI0NDRmNTU4YmJlNWRjY2U3YjY1MTFm
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkRlYnVnZ2VyQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViRGVidWdnZXJBZ2VudC5oCkBAIC0z
Myw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2Vu
dHM7CiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgV2ViRGVidWdnZXJBZ2Vu
dCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQgeworY2xhc3MgV2Vi
RGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6OkRlYnVnZ2VyQWdlbnQgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFdlYkRlYnVnZ2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGYxZmU0MTAwNWFkZmVhNGJjMDFl
MGFkNWI3N2Y1OGYwYjk2YzI3MGQuLjhlZDYzODUxY2JmYmRiM2VhNGMyMDBmY2EyYmNkODMyN2Q3
NjdiZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0
b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTkyLDcgKzkyLDcgQEAgV29ya2VySW5zcGVjdG9yQ29u
dHJvbGxlcjo6V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcihXb3JrZXJHbG9iYWxTY29wZSYgd29y
a2VyR2wKICAgICBtX3J1bnRpbWVBZ2VudC0+c2V0U2NyaXB0RGVidWdTZXJ2ZXIoJmRlYnVnZ2Vy
QWdlbnQtPnNjcmlwdERlYnVnU2VydmVyKCkpOwogICAgIG1fYWdlbnRzLmFwcGVuZChXVEY6Om1v
dmUoZGVidWdnZXJBZ2VudCkpOwogCi0gICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlx
dWU8SW5zcGVjdG9yVGltZWxpbmVBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBu
dWxscHRyLCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpXb3JrZXJJbnNwZWN0b3IsIG51bGxwdHIp
KTsKKyAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxUaW1lbGluZUFnZW50Piht
X2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG51bGxwdHIsIFRpbWVsaW5lQWdlbnQ6Oldvcmtl
ckluc3BlY3RvciwgbnVsbHB0cikpOwogICAgIG1fYWdlbnRzLmFwcGVuZChXVEY6Om1vdmUoY29u
c29sZUFnZW50KSk7CiAKICAgICBpZiAoQ29tbWFuZExpbmVBUElIb3N0KiBjb21tYW5kTGluZUFQ
SUhvc3QgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+Y29tbWFuZExpbmVBUElIb3N0KCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKaW5k
ZXggOWVhMjg1YzZlZGUyZDNjZjI1YTViNjI4OGVhODM5ZmNiM2U3NmJiMC4uZmY1MDA3YmYwNTI5
YzBjNmQzZTg3NDU5ZmVhYmFmNzRkM2M4OWNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV29ya2VyUnVudGltZUFn
ZW50OjpXb3JrZXJSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJHbG9iYWxTY29wZSkKLSAgICA6
IEluc3BlY3RvclJ1bnRpbWVBZ2VudChpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBSdW50
aW1lQWdlbnQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV93b3JrZXJHbG9iYWxTY29w
ZSh3b3JrZXJHbG9iYWxTY29wZSkKICAgICAsIG1fcGF1c2VkKGZhbHNlKQogewpAQCAtNjEsNyAr
NjEsNyBAQCB2b2lkIFdvcmtlclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhcwogewogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXIuY2xlYXIoKTsKIAotICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQocmVhc29uKTsKKyAgICBSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKHJlYXNvbik7CiB9CiAKIEluamVjdGVkU2NyaXB0IFdvcmtlclJ1bnRp
bWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3Qg
aW50KiBleGVjdXRpb25Db250ZXh0SWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VyUnVudGltZUFnZW50LmgKaW5kZXggODc4YmRkMjQ4YjA4YmUxYzhhZjRlZjQ1NzI3MzM0ZTcw
OGE5MGMzYS4uZjFmZDhlNDllNzY2MWU0NjdiNzY3OTQ3N2I4MDU5NDkzZjhhNjFkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuaApAQCAtMzgsNyAr
MzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKIHR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBXb3JrZXJSdW50aW1lQWdlbnQgZmlu
YWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQgeworY2xhc3MgV29y
a2VyUnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6UnVudGltZUFnZW50IHsK
IHB1YmxpYzoKICAgICBXb3JrZXJSdW50aW1lQWdlbnQoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dE1hbmFnZXIqLCBXb3JrZXJHbG9iYWxTY29wZSopOwogICAgIHZpcnR1YWwgfldvcmtlclJ1bnRp
bWVBZ2VudCgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUNv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmgKaW5k
ZXggMDY1YTQ5NGExMjkwYmEyZTk3NTFjY2JkNGJhYTJhMGJjY2RmYjMwOS4uZjVhZGViOTU1NTA1
NWM5NWViMTFkYzJmZDEyMjEzZmMxNTU5NTBkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVw
bGF5Q29udHJvbGxlci5oCkBAIC0xMzAsNyArMTMwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
d2l0Y2hTZXNzaW9uKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKIAotICAgIC8vIEluc3BlY3Rv
clJlcGxheUFnZW50IG5vdGlmaWNhdGlvbnMuCisgICAgLy8gUmVwbGF5QWdlbnQgbm90aWZpY2F0
aW9ucy4KICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKik7CiAgICAgdm9p
ZCBmcmFtZURldGFjaGVkKEZyYW1lJik7CiAgICAgdm9pZCB3aWxsRGlzcGF0Y2hFdmVudChjb25z
dCBFdmVudCYsIEZyYW1lKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXgg
MTBiYTNjZGE2NjJlMzBlN2UxZDE3NWRkYjliOTdjODRiOTljMjliZS4uMGNhYmU4YjYzMTYzY2Mz
ZWYxNmM4NWIwN2Y3M2Y2MjQ5ZWFlN2U0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcApAQCAtMTUxNyw3ICsxNTE3LDcgQEAgVmVjdG9yPFN0cmluZz4gSW50ZXJuYWxzOjpjb25z
b2xlTWVzc2FnZUFyZ3VtZW50Q291bnRzKCkgY29uc3QKICAgICBpZiAoIWluc3RydW1lbnRpbmdB
Z2VudHMpCiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCi0gICAgSW5zcGVjdG9y
Q29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT53ZWJDb25z
b2xlQWdlbnQoKTsKKyAgICBDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMtPndlYkNvbnNvbGVBZ2VudCgpOwogICAgIGlmICghY29uc29sZUFnZW50KQogICAg
ICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246609</attachid>
            <date>2015-02-14 19:27:04 -0800</date>
            <delta_ts>2015-02-27 10:49:46 -0800</delta_ts>
            <desc>Proposed Fix</desc>
            <filename>bug-141608-20150214192700.patch</filename>
            <type>text/plain</type>
            <size>420637</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
Y2FhOTIzNWY2NjMzZGY4OGE3ZjJjYWJjYjU4MjlkYmE4ZWU4NzExLi45ZTI2ZDFlZDJjZDhhN2Nh
ZmEwMmYyODVlMzI5YWNhNjU0YjYyZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNS0wMi0xNCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVtb3ZlIEluc3BlY3RvciBwcmVmaXhl
cyBmcm9tIGluc3BlY3RvciBhZ2VudCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbiBwcmVwYXJhdGlvbiBmb3IgbW92aW5nIGFsbCBpbnNw
ZWN0b3IgYWdlbnRzIHRvIHRoZSBJbnNwZWN0b3IgbmFtZXNwYWNlLAorICAgICAgICB0aGlzIHBh
dGNoIHJlbW92ZXMgdGhlIEluc3BlY3RvciBwcmVmaXggZnJvbSBhZ2VudCBjbGFzc2VzIGFuZCBh
c3NvY2lhdGVkCisgICAgICAgIG1lbWJlcnMsIGdldHRlcnMsIGFuZCBzZXR0ZXJzLgorCisgICAg
ICAgIEZ1bGwgY2hhbmdlbG9nIGhhcyBiZWVuIGVsaWRlZCBmb3IgYWdlbnQgY2xhc3Nlcywgc2lu
Y2UgZXZlcnkgYWdlbnQgbWV0aG9kCisgICAgICAgIHNpZ25hdHVyZSBpcyBtZWNoYW5pY2FsbHkg
Y2hhbmdlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudEJhc2UuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHA6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVnaXN0cnkuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjphcHBl
bmRFeHRyYUFnZW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0
b3JDb250cm9sbGVyOjpmcm9udGVuZEluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdENvbnNvbGVB
Z2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50
OjpKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjpKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2Vu
dC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50OjpK
U0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFs
T2JqZWN0UnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9hdWdtZW50YWJsZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hdWdtZW50YWJsZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
ci5weToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6QWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisKIDIw
MTUtMDItMDkgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IHJlbW92ZSBzb21lIHVubmVjZXNzYXJ5IEluc3BlY3RvciBwcmVm
aXhlcyBmcm9tIGNsYXNzIG5hbWVzIGluIEluc3BlY3RvciBuYW1lc3BhY2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBjZDRlYjY3ZmZkZGU5NzUzOTYyOTVkODhjNTY0YmNlNGJjMWJmNGZkLi4xYTM4ZGNiMjYyM2Jm
ODQ2MTI2MzQxYzQzNjM0Y2E5NDhhMWFhZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEwIEBA
CisyMDE1LTAyLTE0ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1vdmUgSW5zcGVjdG9yIHByZWZpeGVzIGZyb20gaW5z
cGVjdG9yIGFnZW50IGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIGZvciBtb3ZpbmcgYWxsIGluc3BlY3RvciBhZ2Vu
dHMgdG8gdGhlIEluc3BlY3RvciBuYW1lc3BhY2UsCisgICAgICAgIHRoaXMgcGF0Y2ggcmVtb3Zl
cyB0aGUgSW5zcGVjdG9yIHByZWZpeCBmcm9tIGFnZW50IGNsYXNzZXMgYW5kIGFzc29jaWF0ZWQK
KyAgICAgICAgbWVtYmVycywgZ2V0dGVycywgYW5kIHNldHRlcnMuCisKKyAgICAgICAgRnVsbCBj
aGFuZ2Vsb2cgaGFzIGJlZW4gZWxpZGVkIGZvciBhZ2VudCBjbGFzc2VzLCBzaW5jZSBldmVyeSBh
Z2VudCBtZXRob2QKKyAgICAgICAgc2lnbmF0dXJlIGlzIG1lY2hhbmljYWxseSBjaGFuZ2VkLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogaW5zcGVjdG9yL0NvbW1hbmRM
aW5lQVBJSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tbWFuZExpbmVBUElIb3N0Ojppbml0
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNw
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnByb2ZpbGVyRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRQcm9maWxlckVuYWJsZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckxheWVyVHJlZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJU
cmVlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yUmVwbGF5QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsTWVkaWFMaXN0Q2hhaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpyZXNvdXJjZVN0eWxlU2hlZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6OmNvbGxlY3RGbGF0UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjpzZXRTdHlsZVRleHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvcldlYkFnZW50QmFzZS5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvcldvcmtlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2Vu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGluZ0FnZW50czo6SW5zdHJ1bWVu
dGluZ0FnZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnN0cnVtZW50aW5nQWdlbnRzOjpyZXNl
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3RydW1lbnRpbmdBZ2VudHM6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtS
ZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OlJlc291cmNlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6c2V0UmVzb3VyY2VUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpyZXNvdXJjZVR5cGUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29y
a1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhOjpzZXRUeXBlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvUGFnZUNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29u
c29sZUFnZW50OjpQYWdlQ29uc29sZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25z
b2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVB
Z2VudDo6YWRkSW5zcGVjdGVkTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VDb25zb2xl
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQp
OgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VSdW50
aW1lQWdlbnQ6OlBhZ2VSdW50aW1lQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRp
bWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZVJ1bnRpbWVBZ2VudDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VSdW50
aW1lQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlUnVudGltZUFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJDb25zb2xlQWdlbnQ6OldlYkNvbnNvbGVBZ2VudCk6CisgICAgICAgICogaW5z
cGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9XZWJEZWJ1Z2dl
ckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkRlYnVnZ2VyQWdlbnQ6OldlYkRlYnVn
Z2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAq
IGluc3BlY3Rvci9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtl
ckluc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VySW5zcGVj
dG9yQ29udHJvbGxlcjo6V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5z
cGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJS
dW50aW1lQWdlbnQ6OldvcmtlclJ1bnRpbWVBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogcmVwbGF5L1JlcGxh
eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6OmNvbnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMpOgorCiAy
MDE1LTAyLTA5ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiByZW1vdmUgc29tZSB1bm5lY2Vzc2FyeSBJbnNwZWN0b3IgcHJl
Zml4ZXMgZnJvbSBjbGFzcyBuYW1lcyBpbiBJbnNwZWN0b3IgbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50QmFzZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudEJhc2UuaAppbmRl
eCA2MzQwNGNmNTQyNTRhZDZhM2VhYTFhNWYyN2M0OWI5MTc3MmM4NTE0Li42NTJkZjViODZiZjVh
NmVlMmQxYzVkYzQ2ZWQwNTU5ZmU5OTk4OTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50QmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRCYXNlLmgKQEAgLTM5LDkgKzM5LDkgQEAg
ZW51bSBjbGFzcyBEaXNjb25uZWN0UmVhc29uIHsKICAgICBJbnNwZWN0b3JEZXN0cm95ZWQKIH07
CiAKLWNsYXNzIEluc3BlY3RvckFnZW50QmFzZSB7CitjbGFzcyBBZ2VudEJhc2UgewogcHVibGlj
OgotICAgIHZpcnR1YWwgfkluc3BlY3RvckFnZW50QmFzZSgpIHsgfQorICAgIHZpcnR1YWwgfkFn
ZW50QmFzZSgpIHsgfQogCiAgICAgU3RyaW5nIGRvbWFpbk5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KIApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRp
c2NhcmRBZ2VudCgpIHsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yQWdlbnRCYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSkKKyAgICBBZ2VudEJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKQogICAg
ICAgICA6IG1fbmFtZShuYW1lKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcAppbmRl
eCBiY2MwOTg4MjE0YTYxZGYxZWE2NzM0M2Q1MzIyNjE1MjVlN2VmNDM5Li40ZDEzMzIwMzk3NjU1
MzI3YzUxMjE2ZDI3NDA4YzIxMDhjMzUzNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAKQEAgLTM1
LDEzICszNSwxMyBAQCBBZ2VudFJlZ2lzdHJ5OjpBZ2VudFJlZ2lzdHJ5KCkKIHsKIH0KIAotdm9p
ZCBBZ2VudFJlZ2lzdHJ5OjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckFnZW50QmFz
ZT4gYWdlbnQpCit2b2lkIEFnZW50UmVnaXN0cnk6OmFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QWdl
bnRCYXNlPiBhZ2VudCkKIHsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKGFnZW50KSk7
CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXZvaWQg
QWdlbnRSZWdpc3RyeTo6YXBwZW5kRXh0cmFBZ2VudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
QWdlbnRCYXNlPiBhZ2VudCkKK3ZvaWQgQWdlbnRSZWdpc3RyeTo6YXBwZW5kRXh0cmFBZ2VudChz
dGQ6OnVuaXF1ZV9wdHI8QWdlbnRCYXNlPiBhZ2VudCkKIHsKICAgICBtX2V4dHJhRG9tYWlucy5h
cHBlbmQoYWdlbnQtPmRvbWFpbk5hbWUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmgKaW5kZXggOTYyZjAw
NmRmNzI3MTNjMmQ5NDdmZTg3NTc5NGM4Nzk4MDk1NmM0Ny4uNjYxNDI3Y2YyNzRhMWMyNmJlZWQ0
YzdiYzM4YTFjNDhkM2E5YjdlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmgKQEAgLTMyLDkgKzMyLDkgQEAK
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKK2NsYXNzIEFnZW50QmFzZTsKIGNsYXNzIEJhY2tl
bmREaXNwYXRjaGVyOwogY2xhc3MgRnJvbnRlbmRDaGFubmVsOwotY2xhc3MgSW5zcGVjdG9yQWdl
bnRCYXNlOwogCiBlbnVtIGNsYXNzIERpc2Nvbm5lY3RSZWFzb247CiAKQEAgLTQyLDE0ICs0Miwx
NCBAQCBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBBZ2VudFJlZ2lzdHJ5IHsKIHB1YmxpYzoKICAg
ICBBZ2VudFJlZ2lzdHJ5KCk7CiAKLSAgICB2b2lkIGFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yQWdlbnRCYXNlPik7CisgICAgdm9pZCBhcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEFnZW50
QmFzZT4pOwogCiAgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRD
aGFubmVsKiwgQmFja2VuZERpc3BhdGNoZXIqKTsKICAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pOwogICAgIHZvaWQgZGlzY2FyZEFnZW50cygp
OwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgdm9p
ZCBhcHBlbmRFeHRyYUFnZW50KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JBZ2VudEJhc2U+KTsK
KyAgICB2b2lkIGFwcGVuZEV4dHJhQWdlbnQoc3RkOjp1bmlxdWVfcHRyPEFnZW50QmFzZT4pOwog
ICAgIFZlY3RvcjxTdHJpbmc+IGV4dHJhRG9tYWlucygpIGNvbnN0IHsgcmV0dXJuIG1fZXh0cmFE
b21haW5zOyB9CiAjZW5kaWYKIApAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIEFnZW50
UmVnaXN0cnkoY29uc3QgQWdlbnRSZWdpc3RyeSYpID0gZGVsZXRlOwogICAgIEFnZW50UmVnaXN0
cnkmIG9wZXJhdG9yPShjb25zdCBBZ2VudFJlZ2lzdHJ5JikgPSBkZWxldGU7CiAKLSAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckFnZW50QmFzZT4+IG1fYWdlbnRzOworICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWdlbnRCYXNlPj4gbV9hZ2VudHM7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgVmVjdG9yPFN0cmluZz4gbV9leHRy
YURvbWFpbnM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcAppbmRleCBkZWY5
ZDEyNDkwZGRiYTRhYTUyZTBlMTE1N2FjNGUxYzk1Y2I3Y2IxLi5kMmM1NTIxNzM4OTJlMmEyNTYw
MmUwMDhiZjQ2YmNkYzc4OGFlZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCkBA
IC02NCw3ICs2NCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojppbml0aWFs
aXplTG9nVG9TeXN0ZW1Db25zb2xlKCkKICNlbmRpZgogfQogCi1KU0dsb2JhbE9iamVjdENvbnNv
bGVDbGllbnQ6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudChJbnNwZWN0b3JDb25zb2xlQWdl
bnQqIGNvbnNvbGVBZ2VudCkKK0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6SlNHbG9iYWxP
YmplY3RDb25zb2xlQ2xpZW50KENvbnNvbGVBZ2VudCogY29uc29sZUFnZW50KQogICAgIDogQ29u
c29sZUNsaWVudCgpCiAgICAgLCBtX2NvbnNvbGVBZ2VudChjb25zb2xlQWdlbnQpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29u
c29sZUNsaWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdENvbnNvbGVDbGllbnQuaAppbmRleCBlMzVlOWI2MDEwZjlkODZhZDRlZGE3MzhlZDM5YTNl
YzYwZjM2NTVjLi5kNDI4NzViMjg5ZjE1YWM2ZjdhYTE5MmRmNDNiZWZhM2ExMWIxMmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29u
c29sZUNsaWVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50LmgKQEAgLTMwLDEyICszMCwxMiBAQAogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50OworY2xhc3MgQ29uc29s
ZUFnZW50OwogCiBjbGFzcyBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQgZmluYWwgOiBwdWJs
aWMgSlNDOjpDb25zb2xlQ2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQoSW5zcGVjdG9y
Q29uc29sZUFnZW50Kik7CisgICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50
KENvbnNvbGVBZ2VudCopOwogICAgIHZpcnR1YWwgfkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVu
dCgpIHsgfQogCiAgICAgc3RhdGljIGJvb2wgbG9nVG9TeXN0ZW1Db25zb2xlKCk7CkBAIC01NSw3
ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3YXJuVW5pbXBsZW1lbnRlZChjb25zdCBTdHJp
bmcmIG1ldGhvZCk7CiAgICAgdm9pZCBpbnRlcm5hbEFkZE1lc3NhZ2UoTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmKTsK
IAotICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CisgICAgQ29uc29s
ZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0
b3JDb250cm9sbGVyLmNwcAppbmRleCA2NTdjZWQ0NzkwMDg5NTkzMTQxMzc5Y2VjYjg1Y2YwMGI3
NGZiNmY5Li4wNTA2Yjg4MmE1NGIzZTFhZjY4ODUyYmY5NDNmMjEyMzZmZmIzNGM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yNDEsNyArMjQxLDcgQEAg
UmVmPFN0b3B3YXRjaD4gSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRp
b25TdG9wd2F0Y2goKQogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi12b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6YXBwZW5kRXh0
cmFBZ2VudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQWdlbnRCYXNlPiBhZ2VudCkKK3ZvaWQg
SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjphcHBlbmRFeHRyYUFnZW50KHN0ZDo6
dW5pcXVlX3B0cjxBZ2VudEJhc2U+IGFnZW50KQogewogICAgIFN0cmluZyBkb21haW5OYW1lID0g
YWdlbnQtPmRvbWFpbk5hbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVy
LmgKaW5kZXggYWIwYTUyODAzYWRlNzU1YTY0MjJjYjhiNmFlYTZiN2I1OGQ5MmZhMy4uYjNmYWYz
NDUyYjNiZDZmOTJhMDBiMTg3ODcwMWZkOTBmZWE1MTk1NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC01MSwxMSArNTEsMTEgQEAgY2xhc3MgSlNWYWx1ZTsKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKK2NsYXNzIENv
bnNvbGVBZ2VudDsKK2NsYXNzIERlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBGcm9udGVuZENoYW5uZWw7
CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKLWNs
YXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKLWNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7
CiBjbGFzcyBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ7CiBjbGFzcyBTY3JpcHRDYWxsU3Rh
Y2s7CiAKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQoQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyQ2xpZW50KiBjbGllbnQpIG92ZXJyaWRlIHsgbV9hdWdtZW50aW5nQ2xpZW50ID0gY2xp
ZW50OyB9CiAKICAgICB2aXJ0dWFsIEZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mcm9udGVuZENoYW5uZWw7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kRXh0cmFBZ2VudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQWdlbnRCYXNl
Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEV4dHJhQWdlbnQoc3RkOjp1bmlx
dWVfcHRyPEFnZW50QmFzZT4pIG92ZXJyaWRlOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xMDgs
OCArMTA4LDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyPiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50PiBtX2NvbnNvbGVDbGllbnQ7CiAgICAgSW5zcGVjdG9y
QWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7Ci0gICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBtX2Nv
bnNvbGVBZ2VudDsKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBtX2RlYnVnZ2VyQWdlbnQ7
CisgICAgQ29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKKyAgICBEZWJ1Z2dlckFnZW50KiBt
X2RlYnVnZ2VyQWdlbnQ7CiAgICAgQWdlbnRSZWdpc3RyeSBtX2FnZW50czsKICAgICBGcm9udGVu
ZENoYW5uZWwqIG1fZnJvbnRlbmRDaGFubmVsOwogICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcAppbmRleCBiZjI0MWJhNzc4
MmQ5YzA5Y2E2ZGFkMzYwOTJiODIxYTcyYTgzOGFhLi43YzBkMjkxMTA2ZTFhM2I5OGIyNTkzZWY4
NWZkOTM1ZDhiN2NmODRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC0zOCw3ICszOCw3IEBACiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5zcGVjdG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KElu
c3BlY3RvckVudmlyb25tZW50JiBlbnZpcm9ubWVudCkKLSAgICA6IEluc3BlY3RvckFnZW50QmFz
ZShBU0NJSUxpdGVyYWwoIkluc3BlY3RvciIpKQorICAgIDogQWdlbnRCYXNlKEFTQ0lJTGl0ZXJh
bCgiSW5zcGVjdG9yIikpCiAgICAgLCBtX2Vudmlyb25tZW50KGVudmlyb25tZW50KQogICAgICwg
bV9lbmFibGVkKGZhbHNlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKaW5kZXggNGM2ZWY3ODJjMTc3ZmUyYzg1
YjI4YWRlYTVlNjRkYzczNjY5ZjljNS4uYzc1N2QxOTA5ZTFlNjJhZTBiNGZmZmM5OGExZGVjMTdl
MjFjNzRiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIEluc3BlY3Rv
ck9iamVjdDsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEpTX0VYUE9S
VF9QUklWQVRFIEluc3BlY3RvckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFz
ZSwgcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBZ2VudCBmaW5hbCA6IHB1YmxpYyBBZ2VudEJhc2UsIHB1
YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4IDgxNGEwYzExY2Y2
MDhlYzY5ODk5Y2ViZjFiYWMxNGVhYmMxOWJhZDYuLjdhMDg5ZjNkZjZiZTcyMzlkZTYzZWM0MjA4
ZDA4NjVhYzMzMGMxZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApAQCAtNDIs
OCArNDIsOCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
YXhpbXVtQ29uc29sZU1lc3NhZ2VzID0gMTAwMDsKIHN0YXRpYyBjb25zdCBpbnQgZXhwaXJlQ29u
c29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsKIAotSW5zcGVjdG9yQ29uc29sZUFnZW50OjpJbnNwZWN0
b3JDb25zb2xlQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJDb25zb2xlIikpCitD
b25zb2xlQWdlbnQ6OkNvbnNvbGVBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVk
U2NyaXB0TWFuYWdlcikKKyAgICA6IEFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkNvbnNvbGUiKSkK
ICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAg
ICAsIG1fcHJldmlvdXNNZXNzYWdlKG51bGxwdHIpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVz
c2FnZUNvdW50KDApCkBAIC01MSwxNyArNTEsMTcgQEAgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpJ
bnNwZWN0b3JDb25zb2xlQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmkK
IHsKIH0KIAotSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp+SW5zcGVjdG9yQ29uc29sZUFnZW50KCkK
K0NvbnNvbGVBZ2VudDo6fkNvbnNvbGVBZ2VudCgpCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRDaGFubmVsKiBm
cm9udGVuZENoYW5uZWwsIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3Zv
aWQgQ29uc29sZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRDaGFu
bmVsKiBmcm9udGVuZENoYW5uZWwsIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc29s
ZUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyID0gQ29uc29sZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNo
ZXIsIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKK3ZvaWQgQ29uc29sZUFnZW50Ojp3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewogICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNs
ZWFyKCk7CkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogICAgIGRpc2FibGUo
ZXJyb3JTdHJpbmcpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZW5hYmxlKEVy
cm9yU3RyaW5nJikKK3ZvaWQgQ29uc29sZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogewog
ICAgIGlmIChtX2VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTg3LDcgKzg3LDcgQEAgdm9p
ZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgIG1f
Y29uc29sZU1lc3NhZ2VzW2ldLT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmREaXNwYXRjaGVyLmdl
dCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgZmFsc2UpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCit2b2lkIENvbnNvbGVBZ2VudDo6
ZGlzYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgaWYgKCFtX2VuYWJsZWQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwogfQogCi12b2lkIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmluZyYpCit2b2lkIENvbnNv
bGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmluZyYpCiB7CiAgICAgbV9jb25zb2xlTWVz
c2FnZXMuY2xlYXIoKTsKICAgICBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50ID0gMDsKQEAg
LTEwNyw3ICsxMDcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdl
cyhFcnJvclN0cmluZyYpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5tZXNzYWdlc0Ns
ZWFyZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJlc2V0KCkKK3ZvaWQg
Q29uc29sZUFnZW50OjpyZXNldCgpCiB7CiAgICAgRXJyb3JTdHJpbmcgdW51c2VkOwogICAgIGNs
ZWFyTWVzc2FnZXModW51c2VkKTsKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6cmVzZXQoKQogICAgIG1fY291bnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKHN0ZDo6dW5pcXVlX3B0cjxD
b25zb2xlTWVzc2FnZT4gbWVzc2FnZSkKK3ZvaWQgQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9D
b25zb2xlKHN0ZDo6dW5pcXVlX3B0cjxDb25zb2xlTWVzc2FnZT4gbWVzc2FnZSkKIHsKICAgICBp
ZiAoIW1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmRldmVs
b3BlckV4dHJhc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI5LDcgKzEyOSw3IEBA
IHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKHN0ZDo6dW5p
cXVlX3B0cjxDb25zb2xlTWVzc2FnZT4KICAgICBhZGRDb25zb2xlTWVzc2FnZShXVEY6Om1vdmUo
bWVzc2FnZSkpOwogfQogCi1WZWN0b3I8dW5zaWduZWQ+IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
Y29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50cygpIGNvbnN0CitWZWN0b3I8dW5zaWduZWQ+IENv
bnNvbGVBZ2VudDo6Y29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50cygpIGNvbnN0CiB7CiAgICAg
VmVjdG9yPHVuc2lnbmVkPiByZXN1bHQobV9jb25zb2xlTWVzc2FnZXMuc2l6ZSgpKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKTsgaSsrKQpAQCAt
MTM3LDcgKzEzNyw3IEBAIFZlY3Rvcjx1bnNpZ25lZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpj
b25zb2xlTWVzc2FnZUFyZ3VtZW50Q291bnRzKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c3RhcnRUaW1pbmcoY29uc3QgU3RyaW5n
JiB0aXRsZSkKK3ZvaWQgQ29uc29sZUFnZW50OjpzdGFydFRpbWluZyhjb25zdCBTdHJpbmcmIHRp
dGxlKQogewogICAgIC8vIEZvbGxvdyBGaXJlYnVnJ3MgYmVoYXZpb3Igb2YgcmVxdWlyaW5nIGEg
dGl0bGUgdGhhdCBpcyBub3QgbnVsbCBvcgogICAgIC8vIHVuZGVmaW5lZCBmb3IgdGltaW5nIGZ1
bmN0aW9ucwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpz
dGFydFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlKQogICAgIG1fdGltZXMuYWRkKHRpdGxlLCBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjpzdG9wVGltaW5nKGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiBjYWxsU3RhY2spCit2b2lkIENvbnNvbGVBZ2VudDo6c3RvcFRpbWluZyhjb25z
dCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKQog
ewogICAgIC8vIEZvbGxvdyBGaXJlYnVnJ3MgYmVoYXZpb3Igb2YgcmVxdWlyaW5nIGEgdGl0bGUg
dGhhdCBpcyBub3QgbnVsbCBvcgogICAgIC8vIHVuZGVmaW5lZCBmb3IgdGltaW5nIGZ1bmN0aW9u
cwpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzdG9wVGlt
aW5nKGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsCiAgICAgYWRkTWVz
c2FnZVRvQ29uc29sZShzdGQ6Om1ha2VfdW5pcXVlPENvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291
cmNlOjpDb25zb2xlQVBJLCBNZXNzYWdlVHlwZTo6VGltaW5nLCBNZXNzYWdlTGV2ZWw6OkRlYnVn
LCBtZXNzYWdlLCBjYWxsU3RhY2spKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6
OmNvdW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+
IGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUFnZW50Ojpjb3VudChKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7CiAgICAgUmVmUHRy
PFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNv
bGUoc3RhdGUsIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwog
ICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENhbGxlciA9IGNhbGxTdGFjay0+YXQoMCk7
CkBAIC0xOTgsNyArMTk4LDcgQEAgc3RhdGljIGJvb2wgaXNHcm91cE1lc3NhZ2UoTWVzc2FnZVR5
cGUgdHlwZSkKICAgICAgICAgfHwgdHlwZSA9PSBNZXNzYWdlVHlwZTo6RW5kR3JvdXA7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25zb2xlTWVzc2FnZShzdGQ6OnVuaXF1
ZV9wdHI8Q29uc29sZU1lc3NhZ2U+IGNvbnNvbGVNZXNzYWdlKQordm9pZCBDb25zb2xlQWdlbnQ6
OmFkZENvbnNvbGVNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxDb25zb2xlTWVzc2FnZT4gY29uc29s
ZU1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbnNwZWN0
b3JFbnZpcm9ubWVudCgpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSk7CiAgICAgQVNTRVJUX0FS
Ryhjb25zb2xlTWVzc2FnZSwgY29uc29sZU1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdl
bnQuaAppbmRleCBiOWRhOTlkMzgyZWZjYjFiMjZkOTdjMjU3ZTZkMGQ0YzUwNWYyMTIwLi4xZDY4
YzhjNjA2NTk5NTIxODYxNmQ2NTYyYWE5OTkwYjRhNmZkMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25z
b2xlQWdlbnQuaApAQCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFNjcmlwdEFyZ3VtZW50czsKIGNs
YXNzIFNjcmlwdENhbGxTdGFjazsKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5zcGVj
dG9yQWdlbnRCYXNlLCBwdWJsaWMgQ29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ29uc29sZUFnZW50KTsKK2NsYXNzIEpT
X0VYUE9SVF9QUklWQVRFIENvbnNvbGVBZ2VudCA6IHB1YmxpYyBBZ2VudEJhc2UsIHB1YmxpYyBD
b25zb2xlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDb25zb2xlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKLSAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JDb25zb2xlQWdlbnQoKTsKKyAgICBDb25zb2xlQWdlbnQoSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgdmlydHVhbCB+Q29uc29sZUFnZW50KCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kQ2hhbm5lbCos
IEJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAyYWNiY2Y0OTM0MzZmMDY2ODUzYjM0N2Uy
M2U4ZmYzN2QxMzk5NGYzLi43YjI3NGYxMWI1NDk2ZjEzYWRiYTc3Zjk3ZjVjNWI1NTkwZGE2YTE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNDMsNyArNDMsNyBAQAog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotY29uc3QgY2hhciogSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXAgPSAiYmFja3RyYWNlIjsKK2NvbnN0IGNoYXIqIERl
YnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwID0gImJhY2t0cmFjZSI7CiAKIC8vIE9i
amVjdHMgY3JlYXRlZCBhbmQgcmV0YWluZWQgYnkgZXZhbHVhdGluZyBicmVha3BvaW50IGFjdGlv
bnMgYXJlIHB1dCBpbnRvIG9iamVjdCBncm91cHMKIC8vIGFjY29yZGluZyB0byB0aGUgYnJlYWtw
b2ludCBhY3Rpb24gaWRlbnRpZmllciBhc3NpZ25lZCBieSB0aGUgZnJvbnRlbmQuIEEgYnJlYWtw
b2ludCBtYXkKQEAgLTU1LDggKzU1LDggQEAgc3RhdGljIFN0cmluZyBvYmplY3RHcm91cEZvckJy
ZWFrcG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0aW8KICAgICBy
ZXR1cm4gbWFrZVN0cmluZyhvYmplY3RHcm91cCwgU3RyaW5nOjpudW1iZXIoYWN0aW9uLmlkZW50
aWZpZXIpKTsKIH0KIAotSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6
IEluc3BlY3RvckFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkRlYnVnZ2VyIikpCitEZWJ1Z2dlckFn
ZW50OjpEZWJ1Z2dlckFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKQorICAgIDogQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiRGVidWdnZXIiKSkKICAgICAs
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1f
Y29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEKEpTQzo6bm9CcmVha3BvaW50SUQpCiB7CkBA
IC02NCwxNyArNjQsMTcgQEAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2MKICAgICBjbGVhckJyZWFr
RGV0YWlscygpOwogfQogCi1JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudCgpCitEZWJ1Z2dlckFnZW50Ojp+RGVidWdnZXJBZ2VudCgpCiB7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250
ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyID0gRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uIHJlYXNv
bikKK3ZvaWQgRGVidWdnZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlz
Y29ubmVjdFJlYXNvbiByZWFzb24pCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxs
cHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKQEAgLTgzLDcgKzgzLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChEaXNjb25uZWN0UmVhc29uIHJlYXMKICAgICBkaXNhYmxlKHNraXBSZWNvbXBpbGUpOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpCit2b2lkIERlYnVnZ2VyQWdl
bnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAt
OTcsNyArOTcsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpCiAgICAg
bV9lbmFibGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShi
b29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgaWYgKCFtX2VuYWJsZWQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTExMywxNyArMTEzLDE3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK3Zv
aWQgRGVidWdnZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIHsKICAgICBlbmFibGUoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikK
K3ZvaWQgRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgZGlzYWJs
ZShmYWxzZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2lu
dHNBY3RpdmUoRXJyb3JTdHJpbmcmLCBib29sIGFjdGl2ZSkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcmLCBib29sIGFjdGl2ZSkKIHsKICAgICBp
ZiAoYWN0aXZlKQogICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmFjdGl2YXRlQnJlYWtwb2lu
dHMoKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUpCiAgICAgICAgIHNj
cmlwdERlYnVnU2VydmVyKCkuZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiB9CiAKLWJvb2wgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6aXNQYXVzZWQoKQorYm9vbCBEZWJ1Z2dlckFnZW50Ojppc1Bh
dXNlZCgpCiB7CiAgICAgcmV0dXJuIHNjcmlwdERlYnVnU2VydmVyKCkuaXNQYXVzZWQoKTsKIH0K
QEAgLTE1Miw3ICsxNTIsNyBAQCBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRD
U1BWaW9sYXRpb25QYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVjdAogICAgIHJldHVybiBy
ZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oSlNDOjpCcmVh
a3BvaW50SUQgZGVidWdnZXJCcmVha3BvaW50SWRlbnRpZmllcikKK1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IERlYnVnZ2VyQWdlbnQ6OmJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29uKEpTQzo6QnJl
YWtwb2ludElEIGRlYnVnZ2VyQnJlYWtwb2ludElkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKGRl
YnVnZ2VyQnJlYWtwb2ludElkZW50aWZpZXIgIT0gSlNDOjpub0JyZWFrcG9pbnRJRCk7CiAgICAg
YXV0byBpdCA9IG1fZGVidWdnZXJCcmVha3BvaW50SWRlbnRpZmllclRvSW5zcGVjdG9yQnJlYWtw
b2ludElkZW50aWZpZXIuZmluZChkZWJ1Z2dlckJyZWFrcG9pbnRJZGVudGlmaWVyKTsKQEAgLTE2
NSw3ICsxNjUsNyBAQCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpidWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihKU0M6OgogICAgIHJldHVybiByZWFzb24t
Pm9wZW5BY2Nlc3NvcnMoKTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6YnVpbGRFeGNlcHRpb25QYXVzZVJlYXNvbihjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRT
Y3JpcHQpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBEZWJ1Z2dlckFnZW50OjpidWlsZEV4Y2Vw
dGlvblBhdXNlUmVhc29uKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBleGNlcHRpb24s
IGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCkKIHsKICAgICBBU1NFUlQoIWV4
Y2VwdGlvbi5oYXNOb1ZhbHVlKCkpOwogICAgIGlmIChleGNlcHRpb24uaGFzTm9WYWx1ZSgpKQpA
QCAtMTc1LDEwICsxNzUsMTAgQEAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6YnVpbGRFeGNlcHRpb25QYXVzZVJlYXNvbihjb25zdAogICAgIGlmIChpbmpl
Y3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
cmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QoZXhjZXB0aW9uLCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCktPm9wZW5BY2Nlc3NvcnMoKTsKKyAgICBy
ZXR1cm4gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChleGNlcHRpb24sIERlYnVnZ2VyQWdlbnQ6
OmJhY2t0cmFjZU9iamVjdEdyb3VwKS0+b3BlbkFjY2Vzc29ycygpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmhhbmRsZUNvbnNvbGVBc3NlcnQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQordm9pZCBEZWJ1Z2dlckFnZW50OjpoYW5kbGVDb25zb2xlQXNzZXJ0KGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKIHsKICAgICBpZiAoc2NyaXB0RGVidWdTZXJ2ZXIoKS5wYXVzZU9uRXhjZXB0
aW9uc1N0YXRlKCkgIT0gSlNDOjpEZWJ1Z2dlcjo6RG9udFBhdXNlT25FeGNlcHRpb25zKQogICAg
ICAgICBicmVha1Byb2dyYW0oRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QXNz
ZXJ0LCBidWlsZEFzc2VydFBhdXNlUmVhc29uKG1lc3NhZ2UpKTsKQEAgLTIzMSw3ICsyMzEsNyBA
QCBzdGF0aWMgYm9vbCBicmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhjb25zdCBTdHJpbmcm
IHR5cGVTdHJpbmcsIFNjcmlwdEJyZWFrcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGFjdGlvbnMsIEJy
ZWFrcG9pbnRBY3Rpb25zKiByZXN1bHQpCitib29sIERlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRB
Y3Rpb25zRnJvbVByb3RvY29sKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYgYWN0aW9ucywgQnJlYWtwb2ludEFjdGlvbnMqIHJlc3VsdCkKIHsKICAgICBp
ZiAoIWFjdGlvbnMpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc1LDcgKzI3NSw3IEBAIGJv
b2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbnNGcm9tUHJvdG9jb2wo
RXJyb3JTdHJpbmcmIGVycm9yU3RyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNv
bnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBjb25zdCBvcHRp
b25hbENvbHVtbk51bWJlciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvcHRpb25z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3Bv
aW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpCit2b2lkIERlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJp
bmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qgb3B0aW9uYWxDb2x1
bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3B0aW9ucywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkZW50
aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKQogewogICAgIGxvY2F0aW9ucyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj46OmNyZWF0ZSgpOwogICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFs
VVJMUmVnZXgpIHsKQEAgLTMzNiw3ICszMzYsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9u
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yT2JqZWN0JiBsb2NhdGlvbiwgSgog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJy
ZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlv
bnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFr
cG9pbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9p
bnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlvbnMsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJ
ZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9u
PiYgYWN0dWFsTG9jYXRpb24pCiB7CiAgICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRDsKICAgICB1
bnNpZ25lZCBsaW5lTnVtYmVyOwpAQCAtMzczLDcgKzM3Myw3IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFJlZlB0CiAgICAgKm91dEJyZWFrcG9pbnRJZGVudGlmaWVyID0gYnJlYWtwb2ludElkZW50aWZp
ZXI7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIpCit2b2lkIERl
YnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGJyZWFrcG9pbnRJZGVudGlmaWVyKQogewogICAgIG1famF2YVNjcmlwdEJyZWFrcG9pbnRzLnJl
bW92ZShicmVha3BvaW50SWRlbnRpZmllcik7CiAKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGJyZWFrcAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9uKQordm9pZCBEZWJ1Z2dlckFnZW50Ojpjb250
aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9uKQogewogICAgIGlmIChtX2NvbnRpbnVlVG9Mb2NhdGlv
bkJyZWFrcG9pbnRJRCAhPSBKU0M6Om5vQnJlYWtwb2ludElEKSB7CiAgICAgICAgIHNjcmlwdERl
YnVnU2VydmVyKCkucmVtb3ZlQnJlYWtwb2ludChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9p
bnRJRCk7CkBAIC00MDYsNyArNDA2LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
b250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIHJl
c3VtZShlcnJvclN0cmluZyk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIsIEpTQzo6U291cmNlSUQgc291cmNl
SUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCitSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBKU0M6OlNvdXJjZUlE
IHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQogewogICAgIFNj
cmlwdHNNYXA6Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291cmNl
SUQpOwogICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCkBAIC00MzYs
NyArNDM2LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlv
bj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUIKICAgICByZXR1cm4gV1RGOjptb3Zl
KGxvY2F0aW9uKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNv
bnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBjb25z
dCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0
cykKK3ZvaWQgRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nJiBlcnJv
ciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRFN0ciwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3Qg
Ym9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpH
ZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCiB7CiAgICAgSlNDOjpTb3VyY2VJ
RCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7CiAgICAgYXV0byBpdCA9IG1fc2Ny
aXB0cy5maW5kKHNvdXJjZUlEKTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0
cmluZyYgcwogICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRl
eHRCeUxpbmVzKGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJy
b3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBTdHJpbmcqIHNjcmlw
dFNvdXJjZSkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5n
JiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRFN0ciwgU3RyaW5nKiBzY3JpcHRTb3VyY2Up
CiB7CiAgICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7
CiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7
CkBAIC00NjAsNyArNDYwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3Jp
cHRTb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKICAgICAgICAgZXJy
b3IgPSBBU0NJSUxpdGVyYWwoIk5vIHNjcmlwdCBmb3IgaWQ6ICIpICsgc2NyaXB0SURTdHI7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIGRldGFpbHMpCit2
b2lkIERlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQogewogICAgIEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQoZnVuY3Rpb25JZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhh
c05vVmFsdWUoKSkgewpAQCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QK
ICAgICBpbmplY3RlZFNjcmlwdC5nZXRGdW5jdGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGZ1bmN0
aW9uSWQsICZkZXRhaWxzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hl
ZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFz
b24gYnJlYWtSZWFzb24sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSkKK3ZvaWQgRGVi
dWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChEZWJ1Z2dlckZyb250ZW5k
RGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IGRhdGEpCiB7CiAgICAgaWYgKG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC00ODEsNyArNDgxLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
Y2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KERlYnVnZ2VyRnJvbnRlbmREaXNwYXQKICAgICBz
Y3JpcHREZWJ1Z1NlcnZlcigpLnNldFBhdXNlT25OZXh0U3RhdGVtZW50KHRydWUpOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCkK
K3ZvaWQgRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKQogewogICAg
IGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDkw
LDE0ICs0OTAsMTQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9u
TmV4dFN0YXRlbWVudCgpCiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5zZXRQYXVzZU9uTmV4dFN0
YXRlbWVudChmYWxzZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cGF1c2Uo
RXJyb3JTdHJpbmcmKQordm9pZCBEZWJ1Z2dlckFnZW50OjpwYXVzZShFcnJvclN0cmluZyYpCiB7
CiAgICAgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uOjpQYXVzZU9uTmV4dFN0YXRlbWVudCwgbnVsbHB0cik7CiAKICAgICBtX2ph
dmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6cmVzdW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK3ZvaWQgRGVidWdnZXJB
Z2VudDo6cmVzdW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBpZiAoIWFzc2Vy
dFBhdXNlZChlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVybjsKQEAgLTUwNSw3ICs1MDUsNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcpCiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5jb250aW51ZVByb2dyYW0oKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3ZlcihFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnN0ZXBPdmVyKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKIHsKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCiAgICAgICAgIHJl
dHVybjsKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0
ZXBPdmVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICBzY3JpcHREZWJ1Z1NlcnZlcigp
LnN0ZXBPdmVyU3RhdGVtZW50KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c3RlcEludG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQordm9pZCBEZWJ1Z2dlckFnZW50Ojpz
dGVwSW50byhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAgaWYgKCFhc3NlcnRQYXVz
ZWQoZXJyb3JTdHJpbmcpKQogICAgICAgICByZXR1cm47CkBAIC01MjQsNyArNTI0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50byhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCiAgICAgICAgIG1fbGlzdGVuZXItPnN0ZXBJbnRvKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c3RlcE91dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCit2b2lkIERl
YnVnZ2VyQWdlbnQ6OnN0ZXBPdXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogewogICAgIGlm
ICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTMyLDcg
KzUzMiw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE91dChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcpCiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5zdGVwT3V0T2ZGdW5jdGlv
bigpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25FeGNlcHRp
b25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzdHJpbmdQYXVzZVN0
YXRlKQordm9pZCBEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3RyaW5nUGF1c2VTdGF0ZSkKIHsKICAgICBK
U0M6OkRlYnVnZ2VyOjpQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlU3RhdGU7CiAgICAgaWYg
KHN0cmluZ1BhdXNlU3RhdGUgPT0gIm5vbmUiKQpAQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlvbnMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zCiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRl
cm5hbCBlcnJvci4gQ291bGQgbm90IGNoYW5nZSBwYXVzZSBvbiBleGNlcHRpb25zIHN0YXRlIik7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29u
c3QgYm9vbCogY29uc3QgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBjb25zdCBk
b05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIGNvbnN0IHJl
dHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCit2b2lkIERlYnVnZ2VyQWdlbnQ6
OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyog
Y29uc3Qgb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGluZUFQ
SSwgY29uc3QgYm9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xl
LCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVBy
ZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3du
KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY2FsbEZyYW1lSWQpOwogICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTU3NSwxNyArNTc1LDE3IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldE92ZXJsYXlNZXNzYWdlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKikKK3Zv
aWQgRGVidWdnZXJBZ2VudDo6c2V0T3ZlcmxheU1lc3NhZ2UoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcqKQogewogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjcmlwdEV4ZWN1
dGlvbkJsb2NrZWRCeUNTUChjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpCit2b2lkIERlYnVn
Z2VyQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUChjb25zdCBTdHJpbmcmIGRpcmVj
dGl2ZVRleHQpCiB7CiAgICAgaWYgKHNjcmlwdERlYnVnU2VydmVyKCkucGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSgpICE9IEpTQzo6RGVidWdnZXI6OkRvbnRQYXVzZU9uRXhjZXB0aW9ucykKICAgICAg
ICAgYnJlYWtQcm9ncmFtKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkNTUFZp
b2xhdGlvbiwgYnVpbGRDU1BWaW9sYXRpb25QYXVzZVJlYXNvbihkaXJlY3RpdmVUZXh0KSk7CiB9
CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxG
cmFtZXMoSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQpCitSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IERl
YnVnZ2VyQWdlbnQ6OmN1cnJlbnRDYWxsRnJhbWVzKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0KQogewogICAgIEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKTsKICAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQpAQCAtNTk0LDEyICs1OTQsMTIgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpDYWxsRnJhbWU+PiBJbnNwZWMKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQud3JhcENhbGxG
cmFtZXMobV9jdXJyZW50Q2FsbFN0YWNrKTsKIH0KIAotU3RyaW5nIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmIHNjcmlwdCkKK1N0cmlu
ZyBEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgU2NyaXB0JiBzY3Jp
cHQpCiB7CiAgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmZpbmRTY3JpcHRTb3Vy
Y2VNYXBVUkwoc2NyaXB0LnNvdXJjZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0JiBp
blNjcmlwdCkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJ
RCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0JiBpblNjcmlwdCkKIHsKICAgICBTY3JpcHQgc2NyaXB0
ID0gaW5TY3JpcHQ7CiAgICAgaWYgKHNjcmlwdC5zdGFydExpbmUgPD0gMCAmJiAhc2NyaXB0LnN0
YXJ0Q29sdW1uKQpAQCAtNjUwLDEyICs2NTAsMTIgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHQK
ICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZmFpbGVkVG9QYXJzZVNv
dXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5l
LCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3ZvaWQgRGVidWdn
ZXJBZ2VudDo6ZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0RmFpbGVkVG9Q
YXJzZSh1cmwsIGRhdGEsIGZpcnN0TGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpTQzo6RXhlY1N0YXRlKiBz
Y3JpcHRTdGF0ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBleGNlcHRpb25PckNhdWdodFZhbHVlKQordm9p
ZCBEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uT3JDYXVnaHRWYWx1ZSkKIHsKICAgICBBU1NFUlQoc2Ny
aXB0U3RhdGUgJiYgIW1fcGF1c2VkU2NyaXB0U3RhdGUpOwogICAgIG1fcGF1c2VkU2NyaXB0U3Rh
dGUgPSBzY3JpcHRTdGF0ZTsKQEAgLTcxOSwxMiArNzE5LDEyIEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBE
ZXByZWNhCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9p
bnRBY3Rpb25Tb3VuZChpbnQgYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpCit2b2lkIERlYnVn
Z2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Tb3VuZChpbnQgYnJlYWtwb2ludEFjdGlvbklkZW50
aWZpZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnBsYXlCcmVha3BvaW50QWN0aW9u
U291bmQoYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0
U3RhdGUsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwgdW5zaWduZWQgYmF0
Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBz
YW1wbGUpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlv
biwgdW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBzYW1wbGUpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3Rh
dGUpOwogICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBwYXlsb2Fk
ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChzYW1wbGUsIG9iamVjdEdyb3VwRm9yQnJlYWtw
b2ludEFjdGlvbihhY3Rpb24pKTsKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0
U3RhdGUsCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRpZFNhbXBsZVByb2JlKFdURjo6bW92
ZShyZXN1bHQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51
ZSgpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKIHsKICAgICBpZiAobV9kaWRQ
YXVzZVN0b3B3YXRjaCkgewogICAgICAgICBtX2RpZFBhdXNlU3RvcHdhdGNoID0gZmFsc2U7CkBA
IC03NDgsMjEgKzc0OCwyMSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRp
bnVlKCkKIAogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSBudWxscHRyOwogICAgIG1fY3VycmVu
dENhbGxTdGFjayA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCk7Ci0gICAgbV9pbmplY3RlZFNj
cmlwdE1hbmFnZXItPnJlbGVhc2VPYmplY3RHcm91cChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpi
YWNrdHJhY2VPYmplY3RHcm91cCk7CisgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPnJlbGVh
c2VPYmplY3RHcm91cChEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCk7CiAgICAg
Y2xlYXJCcmVha0RldGFpbHMoKTsKICAgICBjbGVhckV4Y2VwdGlvblZhbHVlKCk7CiAKICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29u
IGJyZWFrUmVhc29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpCit2b2lkIERlYnVn
Z2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29u
IGJyZWFrUmVhc29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpCiB7CiAgICAgbV9i
cmVha1JlYXNvbiA9IGJyZWFrUmVhc29uOwogICAgIG1fYnJlYWtBdXhEYXRhID0gV1RGOjptb3Zl
KGRhdGEpOwogICAgIHNjcmlwdERlYnVnU2VydmVyKCkuYnJlYWtQcm9ncmFtKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUo
KQordm9pZCBEZWJ1Z2dlckFnZW50OjpjbGVhckluc3BlY3RvckJyZWFrcG9pbnRTdGF0ZSgpCiB7
CiAgICAgRXJyb3JTdHJpbmcgZHVtbXlFcnJvcjsKICAgICBWZWN0b3I8U3RyaW5nPiBicmVha3Bv
aW50SWRlbnRpZmllcnM7CkBAIC03NzUsNyArNzc1LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpjbGVhckluc3BlY3RvckJyZWFrcG9pbnRTdGF0ZSgpCiAgICAgY2xlYXJEZWJ1Z2dl
ckJyZWFrcG9pbnRTdGF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNs
ZWFyRGVidWdnZXJCcmVha3BvaW50U3RhdGUoKQordm9pZCBEZWJ1Z2dlckFnZW50OjpjbGVhckRl
YnVnZ2VyQnJlYWtwb2ludFN0YXRlKCkKIHsKICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmNsZWFy
QnJlYWtwb2ludHMoKTsKIApAQCAtNzkyLDcgKzc5Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Y2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpCiAgICAgc2NyaXB0RGVidWdT
ZXJ2ZXIoKS5jb250aW51ZVByb2dyYW0oKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRDbGVhckdsb2JhbE9iamVjdCgpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpZENsZWFy
R2xvYmFsT2JqZWN0KCkKIHsKICAgICAvLyBDbGVhciBicmVha3BvaW50cyBmcm9tIHRoZSBkZWJ1
Z2dlciwgYnV0IGtlZXAgdGhlIGluc3BlY3RvcidzIG1vZGVsIG9mIHdoaWNoCiAgICAgLy8gcGFn
ZXMgaGF2ZSB3aGF0IGJyZWFrcG9pbnRzLCBhcyB0aGUgbWFwcGluZyBpcyBvbmx5IHNlbnQgdG8g
RGVidWdnZXJBZ2VudCBvbmNlLgpAQCAtODAyLDcgKzgwMiw3IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkQ2xlYXJHbG9iYWxPYmplY3QoKQogICAgICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwogfQogCi1ib29sIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmFzc2VydFBhdXNlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitib29sIERl
YnVnZ2VyQWdlbnQ6OmFzc2VydFBhdXNlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAg
ICAgaWYgKCFtX3BhdXNlZFNjcmlwdFN0YXRlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVND
SUlMaXRlcmFsKCJDYW4gb25seSBwZXJmb3JtIG9wZXJhdGlvbiB3aGlsZSBwYXVzZWQuIik7CkBA
IC04MTIsMTMgKzgxMiwxMyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmFzc2VydFBh
dXNlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJCcmVha0RldGFpbHMoKQordm9pZCBEZWJ1
Z2dlckFnZW50OjpjbGVhckJyZWFrRGV0YWlscygpCiB7CiAgICAgbV9icmVha1JlYXNvbiA9IERl
YnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246Ok90aGVyOwogICAgIG1fYnJlYWtBdXhE
YXRhID0gbnVsbHB0cjsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckV4
Y2VwdGlvblZhbHVlKCkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6Y2xlYXJFeGNlcHRpb25WYWx1ZSgp
CiB7CiAgICAgaWYgKG1faGFzRXhjZXB0aW9uVmFsdWUpIHsKICAgICAgICAgbV9pbmplY3RlZFNj
cmlwdE1hbmFnZXItPmNsZWFyRXhjZXB0aW9uVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuaAppbmRleCA3OWNkM2UwZDhmM2JkMTZjY2JjY2Q2NWFjNWFkYTRkMDVkMWMyNjczLi4z
MjRmMTA3ZTJiY2I5ZTgxM2Q3NmU1NGNkZjI1NDU0OGQ3YmU0YWU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5oCkBAIC01NywxMyArNTcsMTMgQEAgY2xhc3MgSW5zcGVjdG9yVmFsdWU7
CiBjbGFzcyBTY3JpcHREZWJ1Z1NlcnZlcjsKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
Ci1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGlj
IEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIFNjcmlwdERlYnVnTGlzdGVuZXIsIHB1YmxpYyBE
ZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCk7CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1
Z2dlckFnZW50IDogcHVibGljIEFnZW50QmFzZSwgcHVibGljIFNjcmlwdERlYnVnTGlzdGVuZXIs
IHB1YmxpYyBEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGVidWdnZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGJhY2t0cmFjZU9iamVjdEdyb3VwOwog
Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpOworICAgIHZpcnR1YWwgfkRl
YnVnZ2VyQWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJh
Y2tlbmQoRnJvbnRlbmRDaGFubmVsKiwgQmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CkBAIC03MSw4ICs3MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2lu
dHNBY3RpdmUoRXJyb3JTdHJpbmcmLCBib29sIGFjdGl2ZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVnZXgs
IGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludElkKiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVnZXgs
IGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9p
bnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3B0
aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlv
bikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgY29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNv
bnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29u
c3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jikgb3Zl
cnJpZGU7CkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2NyaXB0RGVi
dWdTZXJ2ZXImIHNjcmlwdERlYnVnU2VydmVyKCkgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBEZWJ1Z2dl
ckFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciopOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcjsgfQogICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4IGY0NTM5MzVlYjA4N2VkNjMyNDBh
MGQ5ODM3OTIzMmJlOTQ4YThiYjguLjE1ZjhkMTlmMjU1OTczNWUxZmI4NzdjMWQzZGI3MjkyNmZm
ZmI0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAtNTUsOCArNTUsOCBA
QCBzdGF0aWMgYm9vbCBhc0Jvb2woY29uc3QgYm9vbCogY29uc3QgYikKICAgICByZXR1cm4gYiA/
ICpiIDogZmFsc2U7CiB9CiAKLUluc3BlY3RvclJ1bnRpbWVBZ2VudDo6SW5zcGVjdG9yUnVudGlt
ZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAg
IDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiUnVudGltZSIpKQorUnVudGltZUFn
ZW50OjpSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1h
bmFnZXIpCisgICAgOiBBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJSdW50aW1lIikpCiAgICAgLCBt
X2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX3Nj
cmlwdERlYnVnU2VydmVyKG51bGxwdHIpCiAgICAgLCBtX2VuYWJsZWQoZmFsc2UpCkBAIC02NCw3
ICs2NCw3IEBAIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6SW5zcGVjdG9yUnVudGltZUFnZW50KElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpCiB7CiB9CiAKLUluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6fkluc3BlY3RvclJ1bnRpbWVBZ2VudCgpCitSdW50aW1lQWdlbnQ6On5SdW50aW1l
QWdlbnQoKQogewogfQogCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0KGNvbnN0
CiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojpw
YXJzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQordm9pZCBSdW50aW1lQWdlbnQ6OnBh
cnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiYgcmFuZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
Vk0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBJbnNwZWMKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29u
c3QgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBj
b25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZp
ZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQor
dm9pZCBSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBj
b25zdCBib29sKiBjb25zdCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGNvbnN0
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRp
b25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+
KiB3YXNUaHJvd24pCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmpl
Y3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CiAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGV4cAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+JiYgb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikKK3ZvaWQgUnVudGltZUFnZW50OjpjYWxsRnVu
Y3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYm
IG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRp
b25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PGJvb2w+KiB3YXNUaHJvd24pCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQg
PSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmpl
Y3RJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewpAQCAtMTYwLDcg
KzE2MCw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluCiAgICAgfQogfQogCi12b2lkIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIGNvbnN0IG93blByb3BlcnRpZXMs
IGNvbnN0IGJvb2wqIGNvbnN0IG93bkFuZEdldHRlclByb3BlcnRpZXMsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+PiYgcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+
PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKQordm9pZCBSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBi
b29sKiBjb25zdCBvd25Qcm9wZXJ0aWVzLCBjb25zdCBib29sKiBjb25zdCBvd25BbmRHZXR0ZXJQ
cm9wZXJ0aWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oklu
dGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykKIHsKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5p
bmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3Jp
cHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcKICAgICBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKG1fc2NyaXB0RGVidWdTZXJ2ZXIs
IHByZXZpb3VzUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVu
dGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0
IGludCogc3RhcnRJbmRleCwgY29uc3QgaW50KiBudW1iZXJUb0ZldGNoLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6Q29sbGVj
dGlvbkVudHJ5Pj4mIGVudHJpZXMpCit2b2lkIFJ1bnRpbWVBZ2VudDo6Z2V0Q29sbGVjdGlvbkVu
dHJpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBj
b25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBpbnQqIHN0YXJ0SW5kZXgsIGNvbnN0IGlu
dCogbnVtYmVyVG9GZXRjaCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQogewog
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmIChpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTE5MiwyNCArMTkyLDI0IEBAIHZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0CiAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJpZXMoZXJy
b3JTdHJpbmcsIG9iamVjdElkLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygp
LCBzdGFydCwgZmV0Y2gsICZlbnRyaWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OnJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkKQor
dm9pZCBSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIG9iamVjdElkKQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQp
OwogICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3Rl
ZFNjcmlwdC5yZWxlYXNlT2JqZWN0KG9iamVjdElkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApCit2b2lkIFJ1bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci0+cmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJ1bihFcnJvclN0cmluZyYpCit2b2lkIFJ1bnRpbWVBZ2Vu
dDo6cnVuKEVycm9yU3RyaW5nJikKIHsKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzEyNzYzND4gV2ViIEluc3BlY3Rvcjogc3VwcG9ydCBkZWJ1Z2dpbmcgd2ViIHdvcmtlcnMK
IH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlh
Ymxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGxvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlv
bj4+JiB0eXBlRGVzY3JpcHRpb25zKQordm9pZCBSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBl
c0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGxvY2F0aW9ucywgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVE
ZXNjcmlwdGlvbj4+JiB0eXBlRGVzY3JpcHRpb25zKQogewogICAgIHN0YXRpYyBjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwpAQCAtMjk2LDIzICsy
OTYsMjMgQEAgc3RhdGljIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNGb3JUeXBlUHJvZmls
aW5nKFZNJiB2bSwgYm9vbCBzaG91bGRFbmFibGVUeXAKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0
UmVhc29uIHJlYXNvbikKK3ZvaWQgUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChEaXNjb25uZWN0UmVhc29uIHJlYXNvbikKIHsKICAgICBpZiAocmVhc29uICE9IERp
c2Nvbm5lY3RSZWFzb246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCAmJiBtX2lzVHlwZVByb2Zp
bGluZ0VuYWJsZWQpCiAgICAgICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShmYWxzZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVUeXBlUHJvZmlsZXIoRXJy
b3JTdHJpbmcmKQordm9pZCBSdW50aW1lQWdlbnQ6OmVuYWJsZVR5cGVQcm9maWxlcihFcnJvclN0
cmluZyYpCiB7CiAgICAgc2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKHRydWUpOwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmlu
ZyYpCit2b2lkIFJ1bnRpbWVBZ2VudDo6ZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYp
CiB7CiAgICAgc2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKGZhbHNlKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIHNo
b3VsZEVuYWJsZVR5cGVQcm9maWxpbmcpCit2b2lkIFJ1bnRpbWVBZ2VudDo6c2V0VHlwZVByb2Zp
bGVyRW5hYmxlZFN0YXRlKGJvb2wgc2hvdWxkRW5hYmxlVHlwZVByb2ZpbGluZykKIHsKICAgICBp
ZiAobV9pc1R5cGVQcm9maWxpbmdFbmFibGVkID09IHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcp
CiAgICAgICAgIHJldHVybjsKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6c2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKGJvb2wgc2hvdWxkRW5hYmxlVHlw
ZVBybwogICAgICAgICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0ZvclR5cGVQcm9maWxpbmcodm0s
IHNob3VsZEVuYWJsZVR5cGVQcm9maWxpbmcpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6Z2V0QmFzaWNCbG9ja3MoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHNvdXJjZUlEQXNTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4mIGJhc2ljQmxvY2tzKQor
dm9pZCBSdW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBzb3VyY2VJREFzU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4+JiBi
YXNpY0Jsb2NrcykKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwogICAgIGlmICghdm0uY29u
dHJvbEZsb3dQcm9maWxlcigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCmluZGV4IDg3
MTNlYzJiMWU3MzJmNmZlODUxY2Q1M2QxNDQzNjlmMDJkNDUxMzMuLmQ1MjZjMmI2NjAxZjExNTc0
MGRiMzBhM2RjMmYzMzhlMTJhZGEzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCkBA
IC01MCwxMCArNTAsMTAgQEAgY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBTY3JpcHREZWJ1
Z1NlcnZlcjsKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBKU19FWFBPUlRf
UFJJVkFURSBJbnNwZWN0b3JSdW50aW1lQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW5zcGVjdG9yUnVudGltZUFnZW50KTsKK2NsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIFJ1bnRpbWVBZ2VudCA6IHB1YmxpYyBBZ2VudEJhc2UsIHB1YmxpYyBSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSdW50aW1lQWdl
bnQpOwogcHVibGljOgotICAgIHZpcnR1YWwgfkluc3BlY3RvclJ1bnRpbWVBZ2VudCgpOworICAg
IHZpcnR1YWwgflJ1bnRpbWVBZ2VudCgpOwogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0cm95
RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwogCkBAIC03Nyw3
ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Vu
YWJsZWQ7IH0KIAogcHJvdGVjdGVkOgotICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudChJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
Kik7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcigp
IHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0Q29uc29sZUFn
ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0Q29uc29sZUFnZW50LmNwcAppbmRleCBmZTExMmRkMWVhZThjYWVjZTIzY2FiOGMwMzFi
MDZlNjQzOTA5ZmVhLi5kY2YwY2ExOTg4OWZkYWIyZmRiZDdlNjNkZmY5MmYyYWU4ZjE2OTdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2Jh
bE9iamVjdENvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuY3BwCkBAIC0yOSw3ICsyOSw3
IEBACiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQ6
OkpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDogSW5zcGVjdG9yQ29uc29sZUFnZW50KGluamVjdGVkU2Ny
aXB0TWFuYWdlcikKKyAgICA6IENvbnNvbGVBZ2VudChpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0pTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oCmluZGV4IDBkNzljNWQx
YmYxYmJlZTc2YjlhYmI4NTNmOTkzYzFhYWMwNjVhNDkuLjRhM2Y3YTM1NjAxMzMwZmQyODdmMDFi
YTMwZDU0OGNmN2U4ODYxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQu
aApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotY2xhc3MgSlNH
bG9iYWxPYmplY3RDb25zb2xlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQ29uc29sZUFn
ZW50IHsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIENv
bnNvbGVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNHbG9iYWxPYmplY3RDb25z
b2xlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmpl
Y3REZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAKaW5kZXggOWFlNzZjNjJhNmM5YzVh
YjAzYzcwOTE1ZDJkMjMxZDhmZjY3M2RlOS4uOGVkNTY1MGZkMDU5YWIwYThiODViYmVjYjZlMTBk
YjI5NjRhNzg2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC0zOCw4ICszOCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi1KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6OkpTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwg
SlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBJbnNwZWN0b3JDb25zb2xlQWdlbnQq
IGNvbnNvbGVBZ2VudCkKLSAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKQorSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjpKU0dsb2JhbE9iamVjdERl
YnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgQ29uc29sZUFnZW50KiBjb25zb2xl
QWdlbnQpCisgICAgOiBEZWJ1Z2dlckFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAs
IG1fc2NyaXB0RGVidWdTZXJ2ZXIoZ2xvYmFsT2JqZWN0KQogICAgICwgbV9jb25zb2xlQWdlbnQo
Y29uc29sZUFnZW50KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaApp
bmRleCBhYzZiODcxNjlmNDc1YTI4MmI2MDEwZWNiZDAxOWIzNTJkNzU1ODBlLi4zOTE2ODE1MTg5
ZGM1MTVlYWQ4ODk3N2IwZjhmZTkwYWRiZjE3OTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVj
dERlYnVnZ2VyQWdlbnQuaApAQCAtMzEsMTMgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCi1jbGFzcyBJbnNwZWN0b3JDb25zb2xlQWdlbnQ7CitjbGFzcyBDb25zb2xlQWdlbnQ7
CiAKLWNsYXNzIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50IHsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShK
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudChJbmplY3RlZFNjcmlw
dE1hbmFnZXIqLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSW5zcGVjdG9yQ29uc29sZUFnZW50Kik7
CisgICAgSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlcios
IEpTQzo6SlNHbG9iYWxPYmplY3QmLCBDb25zb2xlQWdlbnQqKTsKICAgICB2aXJ0dWFsIH5KU0ds
b2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgSlNHbG9iYWxPYmpl
Y3RTY3JpcHREZWJ1Z1NlcnZlciYgc2NyaXB0RGVidWdTZXJ2ZXIoKSBvdmVycmlkZSB7IHJldHVy
biBtX3NjcmlwdERlYnVnU2VydmVyOyB9CkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICBKU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyIG1fc2NyaXB0RGVidWdT
ZXJ2ZXI7Ci0gICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKKyAgICBD
b25zb2xlQWdlbnQqIG1fY29uc29sZUFnZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggNjU4YzY3
YWIxNWY4OTUyMDVjNTViYjUyODljMGI5ZDJlNGU0MGM2MC4uM2U3YTVjNmY4NGExYjRhMGMwZGZh
OTExOGExZDNmNjEzZjEwMjNmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50LmNwcApAQCAtMzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50OjpKU0dsb2JhbE9iamVj
dFJ1bnRpbWVBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdl
ciwgSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEluc3BlY3RvclJ1bnRpbWVB
Z2VudChpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBSdW50aW1lQWdlbnQoaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogewogfQpA
QCAtNTEsNyArNTEsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50Ojp3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uCiAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXIgPSBudWxscHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAot
ICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
cmVhc29uKTsKKyAgICBSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KHJlYXNvbik7CiB9CiAKIFZNJiBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6Z2xvYmFsVk0o
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmgKaW5kZXggNjMxYmFlYzBlYjMz
ZGI5ZTA4OWI1Y2NjMTM5MWI5NTgwYTdmZjRlOC4uZGYzMzNmOTg0Y2RmNzU3N2ZiNTFjMjAyMGM3
YzlhOWYwYzExNDI4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCkBA
IC0zNCw3ICszNCw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAotY2xhc3MgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yUnVudGltZUFnZW50IHsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
IGZpbmFsIDogcHVibGljIFJ1bnRpbWVBZ2VudCB7CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmpl
Y3RSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSlNDOjpKU0dsb2JhbE9iamVj
dCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2F1Z21l
bnRhYmxlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2F1Z21lbnRhYmxlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmgKaW5k
ZXggNWZmMDM1MzU4NGJkZTJlOTkyYzhiMDA5ZGIzOTZkYmI2YTY1MjViNS4uZDFlODUwNTA4MDEx
N2VkNzliYWQ4NDZjOWZjMDY3ZmM3ZmJkOGQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hdWdtZW50YWJsZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYXVnbWVudGFibGUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaApAQCAtMzYsMTEgKzM2LDExIEBACiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVEJhY2tlbmREaXNwYXRjaGVyLCB0eXBlbmFt
ZSBUQWx0ZXJuYXRlRGlzcGF0Y2hlcj4KLWNsYXNzIEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSB7CitjbGFzcyBBbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudCBmaW5hbCA6IHB1YmxpYyBBZ2VudEJhc2UgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50KGNv
bnN0IFN0cmluZyYgZG9tYWluTmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRBbHRlcm5hdGVEaXNwYXRj
aGVyPiBhbHRlcm5hdGVEaXNwYXRjaGVyKQotICAgICAgICA6IEluc3BlY3RvckFnZW50QmFzZShk
b21haW5OYW1lKQorICAgICAgICA6IEFnZW50QmFzZShkb21haW5OYW1lKQogICAgICAgICAsIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcihXVEY6Om1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpCiAgICAg
ewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYXVn
bWVudGFibGUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2F1Z21lbnRhYmxlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oCmluZGV4IDI0NTZhYzU5MTlkOGEwZDU2NTlkNmY3MWNjMDc1ODhmNmM3NzY4YjIuLmFk
ZDJjYzgxYjljNzdjMjEwNjNjOTIwNTQwYmQyZmUxMjMxYjg4NDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYXVnbWVudGFibGUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hdWdt
ZW50YWJsZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMzMsNyArMzMsNyBA
QAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotY2xhc3MgSW5zcGVjdG9yQWdlbnRCYXNlOwor
Y2xhc3MgQWdlbnRCYXNlOwogCiBjbGFzcyBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIg
ewogcHVibGljOgpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNl
dEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNsaWVudChBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXJDbGllbnQqKSA9IDA7CiAKICAgICB2aXJ0dWFsIEZyb250ZW5kQ2hhbm5lbCog
ZnJvbnRlbmRDaGFubmVsKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFeHRy
YUFnZW50KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JBZ2VudEJhc2U+KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGFwcGVuZEV4dHJhQWdlbnQoc3RkOjp1bmlxdWVfcHRyPEFnZW50QmFzZT4pID0g
MDsKIAogICAgIGJvb2wgY29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gISFmcm9udGVuZENoYW5u
ZWwoKTsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQppbmRleCBhMTkyM2ZlNTRkZTA3NDc0
OWM0NTExYjc0YTA5ZmRkZDc0ZGVmYTZmLi5mNzExMWEwNDNjYzczOGVmMjQ0OGU5OGM1NGMzODA2
YjRkNzgzNTc3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC02Nyw3ICs2Nyw3IEBAIF9U
WVBFU19XSVRIX09QRU5fRklFTERTID0gc2V0KFsKICAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVu
dCIsCiAgICAgIyBJbnNwZWN0b3JTdHlsZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9w
ZXJ0eSBidXQgd2FudHMgdG8gcmVhZCBpdCBhbmQgbW9kaWZ5IGl0LgogICAgICJDU1MuQ1NTUHJv
cGVydHkiLAotICAgICMgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWlt
ZS10eXBlLgorICAgICMgUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgog
ICAgICJOZXR3b3JrLlJlc3BvbnNlIiwKICAgICAjIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHku
CiAgICAgIlRlc3QuT3BlblBhcmFtZXRlckJ1bmRsZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAppbmRleCAxNTQyMWJiZTgxOGU3
NmQxNGU2OGM1MzU3ZjE2ZmU1MTFmMDIzMjBmLi5iZDJjMjM3ODRjMWEwYTA4YTFiMzAzZDRkODNi
NDE2ZDQzZmY2MDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVHZW5lcmF0b3IuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAg
dmlzaXRvci0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKICAgICAgICAgbV9j
dXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUobV9leGVjLCBMZWdhY3lQcm9maWxlcjo6
Y3JlYXRlQ2FsbElkZW50aWZpZXIobV9leGVjLCB2aXNpdG9yLT5jYWxsZWUoKSwgdmlzaXRvci0+
c291cmNlVVJMKCksIGxpbmUsIGNvbHVtbiksIG1fcm9vdE5vZGUuZ2V0KCkpOwogICAgICAgICAv
LyBBc3N1bWUgdGhhdCBwcm9maWxlIHRpbWVzIGFyZSByZWxhdGl2ZSB0byB3aGVuIHRoZSB8Y29u
c29sZS5wcm9maWxlfCBjb21tYW5kIGlzIGV2YWx1YXRlZC4KLSAgICAgICAgLy8gVGhpcyBtYXRj
aGVzIHRoZSBsb2dpYyBpbiBKU1N0YXJ0UHJvZmlsaW5nKCkgYW5kIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OnN0YXJ0RnJvbUNvbnNvbGUoKS4KKyAgICAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBs
b2dpYyBpbiBKU1N0YXJ0UHJvZmlsaW5nKCkgYW5kIFRpbWVsaW5lQWdlbnQ6OnN0YXJ0RnJvbUNv
bnNvbGUoKS4KICAgICAgICAgbV9jdXJyZW50Tm9kZS0+YXBwZW5kQ2FsbChQcm9maWxlTm9kZTo6
Q2FsbCgwLjApKTsKICAgICAgICAgbV9yb290Tm9kZS0+c3BsaWNlTm9kZShtX2N1cnJlbnROb2Rl
LmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBlNjI4MTdkYzU3Zjg4ZTE4NzAxNDc3
OTlkNzU0NWNiN2QwZDA2MjEwLi5iZjI0MGI4OWM4ZmNhNGU1MTY4YTk5NzEyYzJmOTE5ZjE1OWJk
ODE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtODA3LDcgKzgwNyw2IEBAIF9fWk43V2ViQ29y
ZTE3c25hcHNob3RGcmFtZVJlY3RFUk5TXzVGcmFtZUVSS05TXzdJbnRSZWN0RWoKIF9fWk43V2Vi
Q29yZTE3c25hcHNob3RTZWxlY3Rpb25FUk5TXzVGcmFtZUVqCiBfX1pON1dlYkNvcmUxN3VzZXJW
aXNpYmxlU3RyaW5nRVA1TlNVUkwKIF9fWk43V2ViQ29yZTE4RE9NV2luZG93RXh0ZW5zaW9uQzFF
UE5TXzVGcmFtZUVSTlNfMTVET01XcmFwcGVyV29ybGRFCi1fX1pON1dlYkNvcmUxOEluc3BlY3Rv
clBhZ2VBZ2VudDdmcmFtZUlkRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtQ0FM
YXllck1hYzE4c2V0R2VvbWV0cnlGbGlwcGVkRWIKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1DQUxh
eWVyTWFjMjJmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkRVJLTlNfMTZGaWx0ZXJPcGVyYXRpb25zRQog
X19aTjdXZWJDb3JlMThQbGF0Zm9ybUNBTGF5ZXJNYWMyNWxheWVyVHlwZUZvclBsYXRmb3JtTGF5
ZXJFUDdDQUxheWVyCkBAIC0xNjE1LDYgKzE2MTQsNyBAQCBfX1pON1dlYkNvcmU5SlNFbGVtZW50
NnNfaW5mb0UKIF9fWk43V2ViQ29yZTlKU0VsZW1lbnQ5dG9XcmFwcGVkRU4zSlNDN0pTVmFsdWVF
CiBfX1pON1dlYkNvcmU5TGF5ZXJQb29sQzFFdgogX19aTjdXZWJDb3JlOUxheWVyUG9vbEQxRXYK
K19fWk43V2ViQ29yZTlQYWdlQWdlbnQ3ZnJhbWVJZEVQTlNfNUZyYW1lRQogX19aTjdXZWJDb3Jl
OVBhZ2VDYWNoZTEwc2V0TWF4U2l6ZUVqCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMTRwcnVuZVRv
U2l6ZU5vd0VqTlNfMTNQcnVuaW5nUmVhc29uRQogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTM0bWFy
a1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsY0V2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmgKaW5kZXggODc3ZWYwYjQyMDdkNjExZmEyNzgxYTQw
MGI1MmEwYTdiNWU2YWQ1Zi4uY2YxYjNiODk0YTdhMDczNDFkODg4YWE1MjJhZDlmODQ5ZDNhNDI4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9z
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaApA
QCAtNDEsOCArNDEsOCBAQCBjbGFzcyBTY3JpcHRWYWx1ZTsKIH0KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CitjbGFzcyBDb25zb2xlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKLWNsYXNz
IEluc3BlY3RvckNvbnNvbGVBZ2VudDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKIGNsYXNzIElu
c3BlY3RvclZhbHVlOwogfQpAQCAtNTAsOSArNTAsOSBAQCBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2U7Ci1jbGFzcyBJbnNwZWN0b3JE
T01BZ2VudDsKLWNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDsKLWNsYXNzIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ7CitjbGFzcyBEYXRhYmFzZUFnZW50OworY2xhc3MgRE9NQWdlbnQ7Citj
bGFzcyBET01TdG9yYWdlQWdlbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgU3RvcmFnZTsKIApAQCAt
NjQsMTAgKzY0LDEwIEBAIHB1YmxpYzoKICAgICB+Q29tbWFuZExpbmVBUElIb3N0KCk7CiAKICAg
ICB2b2lkIGluaXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQKLSAg
ICAgICAgLCBJbnNwZWN0b3I6Okluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50Ci0g
ICAgICAgICwgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50Ci0gICAgICAgICwgSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50KiBkb21TdG9yYWdlQWdlbnQKLSAgICAgICAgLCBJbnNwZWN0b3JEYXRh
YmFzZUFnZW50KiBkYXRhYmFzZUFnZW50CisgICAgICAgICwgSW5zcGVjdG9yOjpDb25zb2xlQWdl
bnQqIGNvbnNvbGVBZ2VudAorICAgICAgICAsIERPTUFnZW50KiBkb21BZ2VudAorICAgICAgICAs
IERPTVN0b3JhZ2VBZ2VudCogZG9tU3RvcmFnZUFnZW50CisgICAgICAgICwgRGF0YWJhc2VBZ2Vu
dCogZGF0YWJhc2VBZ2VudAogICAgICAgICApCiAgICAgewogICAgICAgICBtX2luc3BlY3RvckFn
ZW50ID0gaW5zcGVjdG9yQWdlbnQ7CkBAIC0xMDIsMTAgKzEwMiwxMCBAQCBwcml2YXRlOgogICAg
IENvbW1hbmRMaW5lQVBJSG9zdCgpOwogCiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudCog
bV9pbnNwZWN0b3JBZ2VudDsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3RvckNvbnNvbGVBZ2VudCog
bV9jb25zb2xlQWdlbnQ7Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1fZG9tQWdlbnQ7Ci0gICAg
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBtX2RvbVN0b3JhZ2VBZ2VudDsKLSAgICBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50KiBtX2RhdGFiYXNlQWdlbnQ7CisgICAgSW5zcGVjdG9yOjpDb25zb2xl
QWdlbnQqIG1fY29uc29sZUFnZW50OworICAgIERPTUFnZW50KiBtX2RvbUFnZW50OworICAgIERP
TVN0b3JhZ2VBZ2VudCogbV9kb21TdG9yYWdlQWdlbnQ7CisgICAgRGF0YWJhc2VBZ2VudCogbV9k
YXRhYmFzZUFnZW50OwogCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0YWJsZU9i
amVjdD4+IG1faW5zcGVjdGVkT2JqZWN0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdGFi
bGVPYmplY3Q+IG1fZGVmYXVsdEluc3BlY3RhYmxlT2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNw
cAppbmRleCAzZTZmNjMyMTYxM2I2M2RiMGRlZTc1NDBhMjRiZDljNTZlNjA4NWY2Li44MmM2N2Qy
NGU5OWUzOWRlNTc3ZDhhNDJlZjkzZDkyMGExMGQwODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNw
cApAQCAtNDMsMzUgKzQzLDM1IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQpCi0gICAgOiBJbnNwZWN0b3JB
Z2VudEJhc2UoQVNDSUlMaXRlcmFsKCJBcHBsaWNhdGlvbkNhY2hlIiksIGluc3RydW1lbnRpbmdB
Z2VudHMpCitBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OkFwcGxpY2F0aW9uQ2FjaGVBZ2VudChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCkKKyAgICA6IFdlYkFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkFwcGxpY2F0aW9uQ2FjaGUiKSwg
aW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKIHsKIH0K
IAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQordm9pZCBBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5l
bCwgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2Fj
aGVGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7CiAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKQordm9pZCBBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci5jbGVhcigpOwogCi0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQobnVsbHB0cik7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5z
ZXRBcHBsaWNhdGlvbkNhY2hlQWdlbnQobnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQordm9pZCBBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLT5zZXRJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQodGhpcyk7CisgICAgbV9p
bnN0cnVtZW50aW5nQWdlbnRzLT5zZXRBcHBsaWNhdGlvbkNhY2hlQWdlbnQodGhpcyk7CiAKICAg
ICAvLyBXZSBuZWVkIHRvIHBhc3MgaW5pdGlhbCBuYXZpZ2F0b3Iub25PbmxpbmUuCiAgICAgbmV0
d29ya1N0YXRlQ2hhbmdlZCgpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudDo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJhbWUpCit2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSog
ZnJhbWUpCiB7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxv
YWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CiAgICAgaWYgKCFkb2N1bWVudExvYWRlcikKQEAgLTg1
LDEzICs4NSwxMyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6dXBkYXRl
QXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJhbWUpCiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKG1fcGFnZUFnZW50LT5mcmFtZUlk
KGZyYW1lKSwgbWFuaWZlc3RVUkwsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpuZXR3b3JrU3RhdGVDaGFuZ2VkKCkK
K3ZvaWQgQXBwbGljYXRpb25DYWNoZUFnZW50OjpuZXR3b3JrU3RhdGVDaGFuZ2VkKCkKIHsKICAg
ICBib29sIGlzTm93T25saW5lID0gbmV0d29ya1N0YXRlTm90aWZpZXIoKS5vbkxpbmUoKTsKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmV0d29ya1N0YXRlVXBkYXRlZChpc05vd09ubGluZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRo
TWFuaWZlc3RzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0
Pj4mIHJlc3VsdCkKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFu
aWZlc3RzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pj4m
IHJlc3VsdCkKIHsKICAgICByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD46OmNy
ZWF0ZSgpOwogCkBAIC0xMTQsMTYgKzExNCwxNiBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYsIFJlZlB0cgog
ICAgIH0KIH0KIAotRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBTdHJpbmcgZnJhbWVJZCkKK0RvY3VtZW50TG9hZGVyKiBBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6
OmFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
U3RyaW5nIGZyYW1lSWQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmFzc2Vy
dEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydERv
Y3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFtZSk7CisgICAgcmV0dXJuIFBhZ2VBZ2VudDo6
YXNzZXJ0RG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RV
UkwpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0TWFuaWZlc3RGb3JGcmFtZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgU3RyaW5nKiBtYW5p
ZmVzdFVSTCkKIHsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBhc3NlcnRG
cmFtZVdpdGhEb2N1bWVudExvYWRlcihlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFk
b2N1bWVudExvYWRlcikKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudDo6Z2V0TWFuaWZlc3RGb3JGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bgogICAgICptYW5pZmVzdFVSTCA9IGluZm8ubV9tYW5pZmVzdC5zdHJpbmcoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JG
cmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGU+JiBhcHBsaWNhdGlvbkNhY2hlKQordm9pZCBBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFw
cGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgZnJhbWVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+JiBhcHBsaWNhdGlvbkNhY2hlKQogewogICAgIERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVy
cm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQpAQCAtMTQ4LDcg
KzE0OCw3IEBAIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNh
dGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVyCiAgICAgYXBwbGljYXRpb25DYWNoZSA9
IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShyZXNvdXJjZXMsIGluZm8pOwogfQogCi1S
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNo
ZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxpY2F0
aW9uQ2FjaGUoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mb0xpc3QmIGFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMsIGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDYWNo
ZUluZm8mIGFwcGxpY2F0aW9uQ2FjaGVJbmZvKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzLCBjb25zdCBBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvJiBhcHBsaWNhdGlvbkNhY2hlSW5mbykKIHsKICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRp
b25DYWNoZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE1hbmlmZXN0VVJMKGFwcGxpY2F0aW9uQ2Fj
aGVJbmZvLm1fbWFuaWZlc3Quc3RyaW5nKCkpCkBAIC0xNTksNyArMTU5LDcgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3Bl
Y3RvckFwcGxpY2F0aW8KICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
YnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgQXBwbGljYXRpb25D
YWNoZUhvc3Q6OlJlc291cmNlSW5mb0xpc3QmIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMpCitS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gQXBwbGljYXRpb25DYWNoZUFn
ZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYgYXBwbGljYXRpb25DYWNoZVJlc291cmNl
cykKIHsKICAgICBhdXRvIHJlc291cmNlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZT46OmNyZWF0ZSgpOwogCkBAIC0xNjksNyArMTY5LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxp
Y2F0aW8KICAgICByZXR1cm4gV1RGOjptb3ZlKHJlc291cmNlcyk7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbyYg
cmVzb3VyY2VJbmZvKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6
OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9i
amVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6UmVzb3VyY2VJbmZvJiByZXNvdXJjZUluZm8pCiB7CiAgICAgU3RyaW5nQnVpbGRlciB0eXBl
czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5oCmluZGV4IGYwOGFjZTIwZjcxNzE4M2FkOTBkNDZmZmRlMDZk
M2E2MzRjZmE3NjkuLjUyYTdhM2U1YTlkM2QxNzU4N2NiNmVmOGUwZDgzZjE2YmZiZjVmY2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmgKQEAgLTQwLDE4ICs0MCwxOCBAQCBjbGFzcyBJbnNwZWN0b3JWYWx1
ZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7Ci1jbGFzcyBJbnNwZWN0b3JQ
YWdlQWdlbnQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgUGFnZTsKK2NsYXNz
IFBhZ2VBZ2VudDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiAKIHR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpBcHBsaWNhdGlv
bkNhY2hlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK2NsYXNzIEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJBZ2VudEJh
c2UsIHB1YmxpYyBJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50Kik7
Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkgeyB9CisgICAg
QXBwbGljYXRpb25DYWNoZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlQWdlbnQqKTsK
KyAgICB2aXJ0dWFsIH5BcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSB7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikgb3ZlcnJpZGU7CkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAKICAgICBEb2N1
bWVudExvYWRlciogYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBT
dHJpbmcgZnJhbWVJZCk7CiAKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50Owor
ICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
cjo6QXBwbGljYXRpb25DYWNoZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNo
ZXI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDg1MzIxZGQ3ZGQyZjc4YmVhOTllNTJlMmY3
NjBlMDdlMjk4ODA0YWMuLmE0YWZiNzYxMWQ4MWFmMjczNjg0MThkZGE5Zjc3ZDU1ODQwMjc5NzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApA
QCAtMTAzLDE5ICsxMDMsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVQc2V1ZG9DbGFzc01h
c2soSW5zcGVjdG9yQXJyYXkqIHBzZXVkb0NsYXNzQXJyYXkpCiAKIGNsYXNzIENoYW5nZVJlZ2lv
bk92ZXJzZXRUYXNrIHsKIHB1YmxpYzoKLSAgICBDaGFuZ2VSZWdpb25PdmVyc2V0VGFzayhJbnNw
ZWN0b3JDU1NBZ2VudCopOworICAgIENoYW5nZVJlZ2lvbk92ZXJzZXRUYXNrKENTU0FnZW50Kik7
CiAgICAgdm9pZCBzY2hlZHVsZUZvcihXZWJLaXROYW1lZEZsb3cqLCBpbnQgZG9jdW1lbnROb2Rl
SWQpOwogICAgIHZvaWQgdW5zY2hlZHVsZShXZWJLaXROYW1lZEZsb3cqKTsKICAgICB2b2lkIHJl
c2V0KCk7CiAgICAgdm9pZCB0aW1lckZpcmVkKCk7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9y
Q1NTQWdlbnQqIG1fY3NzQWdlbnQ7CisgICAgQ1NTQWdlbnQqIG1fY3NzQWdlbnQ7CiAgICAgVGlt
ZXIgbV90aW1lcjsKICAgICBIYXNoTWFwPFdlYktpdE5hbWVkRmxvdyosIGludD4gbV9uYW1lZEZs
b3dzOwogfTsKIAotQ2hhbmdlUmVnaW9uT3ZlcnNldFRhc2s6OkNoYW5nZVJlZ2lvbk92ZXJzZXRU
YXNrKEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCkKK0NoYW5nZVJlZ2lvbk92ZXJzZXRUYXNr
OjpDaGFuZ2VSZWdpb25PdmVyc2V0VGFzayhDU1NBZ2VudCogY3NzQWdlbnQpCiAgICAgOiBtX2Nz
c0FnZW50KGNzc0FnZW50KQogICAgICwgbV90aW1lcigqdGhpcywgJkNoYW5nZVJlZ2lvbk92ZXJz
ZXRUYXNrOjp0aW1lckZpcmVkKQogewpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgQ2hhbmdlUmVn
aW9uT3ZlcnNldFRhc2s6OnRpbWVyRmlyZWQoKQogICAgIG1fbmFtZWRGbG93cy5jbGVhcigpOwog
fQogCi1jbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbiA6IHB1YmxpYyBJ
bnNwZWN0b3JIaXN0b3J5OjpBY3Rpb24geworY2xhc3MgQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rp
b24gOiBwdWJsaWMgSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTdHlsZVNoZWV0QWN0aW9uKTsKIHB1YmxpYzoKICAgICBTdHlsZVNoZWV0QWN0aW9u
KGNvbnN0IFN0cmluZyYgbmFtZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldCkKQEAg
LTE2MiwxMSArMTYyLDExIEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGVT
aGVldD4gbV9zdHlsZVNoZWV0OwogfTsKIAotY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ6OlNldFN0
eWxlU2hlZXRUZXh0QWN0aW9uIGZpbmFsIDogcHVibGljIEluc3BlY3RvckNTU0FnZW50OjpTdHls
ZVNoZWV0QWN0aW9uIHsKK2NsYXNzIENTU0FnZW50OjpTZXRTdHlsZVNoZWV0VGV4dEFjdGlvbiBm
aW5hbCA6IHB1YmxpYyBDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbiB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2V0U3R5bGVTaGVldFRleHRBY3Rpb24pOwogcHVibGljOgogICAgIFNldFN0
eWxlU2hlZXRUZXh0QWN0aW9uKEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0
IFN0cmluZyYgdGV4dCkKLSAgICAgICAgOiBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFj
dGlvbihBU0NJSUxpdGVyYWwoIlNldFN0eWxlU2hlZXRUZXh0IiksIHN0eWxlU2hlZXQpCisgICAg
ICAgIDogQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24oQVNDSUlMaXRlcmFsKCJTZXRTdHlsZVNo
ZWV0VGV4dCIpLCBzdHlsZVNoZWV0KQogICAgICAgICAsIG1fdGV4dCh0ZXh0KQogICAgIHsKICAg
ICB9CkBAIC0yMTQsMTEgKzIxNCwxMSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX29sZFRleHQ7
CiB9OwogCi1jbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDo6U2V0U3R5bGVUZXh0QWN0aW9uIGZpbmFs
IDogcHVibGljIEluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uIHsKK2NsYXNzIENT
U0FnZW50OjpTZXRTdHlsZVRleHRBY3Rpb24gZmluYWwgOiBwdWJsaWMgQ1NTQWdlbnQ6OlN0eWxl
U2hlZXRBY3Rpb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNldFN0eWxlVGV4dEFjdGlv
bik7CiBwdWJsaWM6CiAgICAgU2V0U3R5bGVUZXh0QWN0aW9uKEluc3BlY3RvclN0eWxlU2hlZXQq
IHN0eWxlU2hlZXQsIGNvbnN0IEluc3BlY3RvckNTU0lkJiBjc3NJZCwgY29uc3QgU3RyaW5nJiB0
ZXh0KQotICAgICAgICA6IEluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKEFTQ0lJ
TGl0ZXJhbCgiU2V0U3R5bGVUZXh0IiksIHN0eWxlU2hlZXQpCisgICAgICAgIDogQ1NTQWdlbnQ6
OlN0eWxlU2hlZXRBY3Rpb24oQVNDSUlMaXRlcmFsKCJTZXRTdHlsZVRleHQiKSwgc3R5bGVTaGVl
dCkKICAgICAgICAgLCBtX2Nzc0lkKGNzc0lkKQogICAgICAgICAsIG1fdGV4dCh0ZXh0KQogICAg
IHsKQEAgLTI1OSwxMSArMjU5LDExIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fb2xkVGV4dDsK
IH07CiAKLWNsYXNzIEluc3BlY3RvckNTU0FnZW50OjpTZXRSdWxlU2VsZWN0b3JBY3Rpb24gZmlu
YWwgOiBwdWJsaWMgSW5zcGVjdG9yQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24geworY2xhc3Mg
Q1NTQWdlbnQ6OlNldFJ1bGVTZWxlY3RvckFjdGlvbiBmaW5hbCA6IHB1YmxpYyBDU1NBZ2VudDo6
U3R5bGVTaGVldEFjdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0UnVsZVNlbGVj
dG9yQWN0aW9uKTsKIHB1YmxpYzoKICAgICBTZXRSdWxlU2VsZWN0b3JBY3Rpb24oSW5zcGVjdG9y
U3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGNzc0lkLCBjb25z
dCBTdHJpbmcmIHNlbGVjdG9yKQotICAgICAgICA6IEluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNo
ZWV0QWN0aW9uKEFTQ0lJTGl0ZXJhbCgiU2V0UnVsZVNlbGVjdG9yIiksIHN0eWxlU2hlZXQpCisg
ICAgICAgIDogQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24oQVNDSUlMaXRlcmFsKCJTZXRSdWxl
U2VsZWN0b3IiKSwgc3R5bGVTaGVldCkKICAgICAgICAgLCBtX2Nzc0lkKGNzc0lkKQogICAgICAg
ICAsIG1fc2VsZWN0b3Ioc2VsZWN0b3IpCiAgICAgewpAQCAtMjkzLDExICsyOTMsMTEgQEAgcHJp
dmF0ZToKICAgICBTdHJpbmcgbV9vbGRTZWxlY3RvcjsKIH07CiAKLWNsYXNzIEluc3BlY3RvckNT
U0FnZW50OjpBZGRSdWxlQWN0aW9uIGZpbmFsIDogcHVibGljIEluc3BlY3RvckNTU0FnZW50OjpT
dHlsZVNoZWV0QWN0aW9uIHsKK2NsYXNzIENTU0FnZW50OjpBZGRSdWxlQWN0aW9uIGZpbmFsIDog
cHVibGljIENTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShBZGRSdWxlQWN0aW9uKTsKIHB1YmxpYzoKICAgICBBZGRSdWxlQWN0aW9uKEluc3BlY3Rv
clN0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCi0gICAgICAg
IDogSW5zcGVjdG9yQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24oQVNDSUlMaXRlcmFsKCJBZGRS
dWxlIiksIHN0eWxlU2hlZXQpCisgICAgICAgIDogQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24o
QVNDSUlMaXRlcmFsKCJBZGRSdWxlIiksIHN0eWxlU2hlZXQpCiAgICAgICAgICwgbV9zZWxlY3Rv
cihzZWxlY3RvcikKICAgICB7CiAgICAgfQpAQCAtMzMwLDM0ICszMzAsMzQgQEAgcHJpdmF0ZToK
IH07CiAKIC8vIHN0YXRpYwotQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NT
dHlsZVJ1bGUoQ1NTUnVsZSYgcnVsZSkKK0NTU1N0eWxlUnVsZSogQ1NTQWdlbnQ6OmFzQ1NTU3R5
bGVSdWxlKENTU1J1bGUmIHJ1bGUpCiB7CiAgICAgaWYgKCFpczxDU1NTdHlsZVJ1bGU+KHJ1bGUp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTU3R5bGVS
dWxlPigmcnVsZSk7CiB9CiAKLUluc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0b3JDU1NBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JET01BZ2Vu
dCogZG9tQWdlbnQpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJDU1Mi
KSwgaW5zdHJ1bWVudGluZ0FnZW50cykKK0NTU0FnZW50OjpDU1NBZ2VudChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBET01BZ2VudCogZG9tQWdlbnQpCisgICAgOiBX
ZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJDU1MiKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAg
ICAsIG1fZG9tQWdlbnQoZG9tQWdlbnQpCiAgICAgLCBtX2xhc3RTdHlsZVNoZWV0SWQoMSkKIHsK
ICAgICBtX2RvbUFnZW50LT5zZXRET01MaXN0ZW5lcih0aGlzKTsKIH0KIAotSW5zcGVjdG9yQ1NT
QWdlbnQ6On5JbnNwZWN0b3JDU1NBZ2VudCgpCitDU1NBZ2VudDo6fkNTU0FnZW50KCkKIHsKICAg
ICBBU1NFUlQoIW1fZG9tQWdlbnQpOwogICAgIHJlc2V0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcikKK3ZvaWQgQ1NTQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0
b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTRnJvbnRlbmREaXNwYXRjaGVyPihm
cm9udGVuZENoYW5uZWwpOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBDU1NCYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpE
aXNjb25uZWN0UmVhc29uKQordm9pZCBDU1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CkBAIC0z
NjUsMTMgKzM2NSwxMyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzbwogICAgIHJlc2V0Tm9uUGVy
c2lzdGVudERhdGEoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlzY2FyZEFnZW50
KCkKK3ZvaWQgQ1NTQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCiB7CiAgICAgbV9kb21BZ2VudC0+c2V0
RE9NTGlzdGVuZXIobnVsbHB0cik7CiAgICAgbV9kb21BZ2VudCA9IG51bGxwdHI7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0KCkKK3ZvaWQgQ1NTQWdlbnQ6OnJlc2V0KCkKIHsK
ICAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmNsZWFyKCk7CiAgICAgbV9jc3NTdHlsZVNo
ZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmNsZWFyKCk7CkBAIC0zODAsNyArMzgwLDcgQEAgdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogICAgIHJlc2V0Tm9uUGVyc2lzdGVudERhdGEo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXROb25QZXJzaXN0ZW50RGF0YSgp
Cit2b2lkIENTU0FnZW50OjpyZXNldE5vblBlcnNpc3RlbnREYXRhKCkKIHsKICAgICBtX25hbWVk
Rmxvd0NvbGxlY3Rpb25zUmVxdWVzdGVkLmNsZWFyKCk7CiAgICAgaWYgKG1fY2hhbmdlUmVnaW9u
T3ZlcnNldFRhc2spCkBAIC0zODgsMjMgKzM4OCwyMyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpyZXNldE5vblBlcnNpc3RlbnREYXRhKCkKICAgICByZXNldFBzZXVkb1N0YXRlcygpOwogfQog
Ci12b2lkIEluc3BlY3RvckNTU0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQordm9pZCBDU1NB
Z2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIHsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMt
PnNldEluc3BlY3RvckNTU0FnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+
c2V0Q1NTQWdlbnQodGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpc2FibGUo
RXJyb3JTdHJpbmcmKQordm9pZCBDU1NBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiB7Ci0g
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDU1NBZ2VudChudWxscHRyKTsK
KyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldENTU0FnZW50KG51bGxwdHIpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpCit2b2lkIENT
U0FnZW50OjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpCiB7CiAgICAgaWYgKG1fZnJvbnRlbmRE
aXNwYXRjaGVyKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bWVkaWFRdWVyeVJlc3Vs
dENoYW5nZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkQ3JlYXRlTmFtZWRG
bG93KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JiBuYW1lZEZsb3cpCit2b2lk
IENTU0FnZW50OjpkaWRDcmVhdGVOYW1lZEZsb3coRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJLaXRO
YW1lZEZsb3cmIG5hbWVkRmxvdykKIHsKICAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBkb2N1bWVu
dE5vZGVXaXRoUmVxdWVzdGVkRmxvd3NJZCgmZG9jdW1lbnQpOwogICAgIGlmICghZG9jdW1lbnRO
b2RlSWQpCkBAIC00MTQsNyArNDE0LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkQ3Jl
YXRlTmFtZWRGbG93KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JgogICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5uYW1lZEZsb3dDcmVhdGVkKGJ1aWxkT2JqZWN0Rm9yTmFtZWRG
bG93KHVudXNlZCwgJm5hbWVkRmxvdywgZG9jdW1lbnROb2RlSWQpKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6d2lsbFJlbW92ZU5hbWVkRmxvdyhEb2N1bWVudCYgZG9jdW1lbnQsIFdl
YktpdE5hbWVkRmxvdyYgbmFtZWRGbG93KQordm9pZCBDU1NBZ2VudDo6d2lsbFJlbW92ZU5hbWVk
RmxvdyhEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93KQogewog
ICAgIGludCBkb2N1bWVudE5vZGVJZCA9IGRvY3VtZW50Tm9kZVdpdGhSZXF1ZXN0ZWRGbG93c0lk
KCZkb2N1bWVudCk7CiAgICAgaWYgKCFkb2N1bWVudE5vZGVJZCkKQEAgLTQyNiw3ICs0MjYsNyBA
QCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxsUmVtb3ZlTmFtZWRGbG93KERvY3VtZW50JiBk
b2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JgogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5uYW1l
ZEZsb3dSZW1vdmVkKGRvY3VtZW50Tm9kZUlkLCBuYW1lZEZsb3cubmFtZSgpLnN0cmluZygpKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkQ2hhbmdlUmVnaW9uT3ZlcnNldChEb2N1
bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93KQordm9pZCBDU1NBZ2Vu
dDo6ZGlkQ2hhbmdlUmVnaW9uT3ZlcnNldChEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVk
RmxvdyYgbmFtZWRGbG93KQogewogICAgIGludCBkb2N1bWVudE5vZGVJZCA9IGRvY3VtZW50Tm9k
ZVdpdGhSZXF1ZXN0ZWRGbG93c0lkKCZkb2N1bWVudCk7CiAgICAgaWYgKCFkb2N1bWVudE5vZGVJ
ZCkKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRDaGFuZ2VS
ZWdpb25PdmVyc2V0KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbAogICAgIG1fY2hh
bmdlUmVnaW9uT3ZlcnNldFRhc2stPnNjaGVkdWxlRm9yKCZuYW1lZEZsb3csIGRvY3VtZW50Tm9k
ZUlkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVnaW9uT3ZlcnNldENoYW5nZWQo
V2ViS2l0TmFtZWRGbG93KiBuYW1lZEZsb3csIGludCBkb2N1bWVudE5vZGVJZCkKK3ZvaWQgQ1NT
QWdlbnQ6OnJlZ2lvbk92ZXJzZXRDaGFuZ2VkKFdlYktpdE5hbWVkRmxvdyogbmFtZWRGbG93LCBp
bnQgZG9jdW1lbnROb2RlSWQpCiB7CiAgICAgaWYgKG5hbWVkRmxvdy0+Zmxvd1N0YXRlKCkgPT0g
V2ViS2l0TmFtZWRGbG93OjpGbG93U3RhdGVOdWxsKQogICAgICAgICByZXR1cm47CkBAIC00NDgs
NyArNDQ4LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVnaW9uT3ZlcnNldENoYW5nZWQo
V2ViS2l0TmFtZWRGbG93KiBuYW1lZEZsb3csIGludCBkb2MKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+cmVnaW9uT3ZlcnNldENoYW5nZWQoYnVpbGRPYmplY3RGb3JOYW1lZEZsb3codW51c2Vk
LCBuYW1lZEZsb3csIGRvY3VtZW50Tm9kZUlkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmRpZFJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50
LCBXZWJLaXROYW1lZEZsb3cmIG5hbWVkRmxvdywgTm9kZSYgY29udGVudEVsZW1lbnQsIE5vZGUq
IG5leHRDb250ZW50RWxlbWVudCkKK3ZvaWQgQ1NTQWdlbnQ6OmRpZFJlZ2lzdGVyTmFtZWRGbG93
Q29udGVudEVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJLaXROYW1lZEZsb3cmIG5hbWVk
RmxvdywgTm9kZSYgY29udGVudEVsZW1lbnQsIE5vZGUqIG5leHRDb250ZW50RWxlbWVudCkKIHsK
ICAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBkb2N1bWVudE5vZGVXaXRoUmVxdWVzdGVkRmxvd3NJ
ZCgmZG9jdW1lbnQpOwogICAgIGlmICghZG9jdW1lbnROb2RlSWQpCkBAIC00NjAsNyArNDYwLDcg
QEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxl
bWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFcKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJlZE5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KGRvY3VtZW50Tm9kZUlkLCBuYW1lZEZsb3cu
bmFtZSgpLnN0cmluZygpLCBjb250ZW50RWxlbWVudE5vZGVJZCwgbmV4dENvbnRlbnRFbGVtZW50
Tm9kZUlkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkVW5yZWdpc3Rlck5hbWVk
Rmxvd0NvbnRlbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JiBu
YW1lZEZsb3csIE5vZGUmIGNvbnRlbnRFbGVtZW50KQordm9pZCBDU1NBZ2VudDo6ZGlkVW5yZWdp
c3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFt
ZWRGbG93JiBuYW1lZEZsb3csIE5vZGUmIGNvbnRlbnRFbGVtZW50KQogewogICAgIGludCBkb2N1
bWVudE5vZGVJZCA9IGRvY3VtZW50Tm9kZVdpdGhSZXF1ZXN0ZWRGbG93c0lkKCZkb2N1bWVudCk7
CiAgICAgaWYgKCFkb2N1bWVudE5vZGVJZCkKQEAgLTQ3NSw3ICs0NzUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpkaWRVbnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQoRG9jdW1l
bnQmIGRvY3VtZW50LAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT51bnJlZ2lzdGVyZWROYW1l
ZEZsb3dDb250ZW50RWxlbWVudChkb2N1bWVudE5vZGVJZCwgbmFtZWRGbG93Lm5hbWUoKS5zdHJp
bmcoKSwgY29udGVudEVsZW1lbnROb2RlSWQpOwogfQogCi1ib29sIEluc3BlY3RvckNTU0FnZW50
Ojpmb3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQmIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1R5cGUgcHNldWRvQ2xhc3NUeXBlKQorYm9vbCBDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0
ZShFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHBzZXVkb0Ns
YXNzVHlwZSkKIHsKICAgICBpZiAobV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTAzLDcgKzUwMyw3IEBAIGJvb2wgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRWxlbWVudCYgZWxlbWVudCwgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRj
aGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNv
bnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+JiBwc2V1
ZG9JZE1hdGNoZXMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+PiYgaW5oZXJpdGVkRW50cmllcykK
K3ZvaWQgQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgYm9vbCogaW5jbHVkZVBzZXVkbywgY29uc3QgYm9v
bCogaW5jbHVkZUluaGVyaXRlZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4mIG1hdGNoZWRDU1NSdWxlcywgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UHNldWRvSWRNYXRjaGVzPj4mIHBzZXVkb0lkTWF0Y2hlcywgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRy
eT4+JiBpbmhlcml0ZWRFbnRyaWVzKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50
Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtNTU1LDcg
KzU1NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgfQogfQogCi12b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU+JiBhdHRyaWJ1dGVzU3R5bGUpCit2b2lkIENTU0FnZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JO
b2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBhdHRyaWJ1dGVzU3R5bGUpCiB7CiAgICAgRWxl
bWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBp
ZiAoIWVsZW1lbnQpCkBAIC01NzAsNyArNTcwLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2QK
ICAgICBhdHRyaWJ1dGVzU3R5bGUgPSBhdHRyaWJ1dGVzID8gYXR0cmlidXRlcy5yZWxlYXNlKCkg
OiBudWxscHRyOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxl
Rm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1
dGVkU3R5bGVQcm9wZXJ0eT4+JiBzdHlsZSkKK3ZvaWQgQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5
bGVGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29t
cHV0ZWRTdHlsZVByb3BlcnR5Pj4mIHN0eWxlKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBl
bGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAt
NTgxLDcgKzU4MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVG
b3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgc3R5bGUgPSBpbnNw
ZWN0b3JTdHlsZS0+YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZVNoZWV0SGVhZGVyPj4mIHN0eWxlSW5mb3MpCit2b2lkIENTU0FnZW50OjpnZXRBbGxTdHlsZVNo
ZWV0cyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+PiYgc3R5bGVJbmZvcykK
IHsKICAgICBzdHlsZUluZm9zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPjo6Y3JlYXRlKCk7CiAgICAgVmVj
dG9yPERvY3VtZW50Kj4gZG9jdW1lbnRzID0gbV9kb21BZ2VudC0+ZG9jdW1lbnRzKCk7CkBAIC01
OTUsNyArNTk1LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMo
RXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2MKICAgICB9CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+JiBzdHlsZVNoZWV0T2JqZWN0KQordm9pZCBDU1NBZ2Vu
dDo6Z2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0Qm9keT4mIHN0eWxlU2hlZXRPYmplY3QpCiB7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCog
aW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywg
c3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCkBAIC02MDQsNyAr
NjA0LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3QKICAgICBzdHlsZVNoZWV0T2JqZWN0ID0g
aW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0cmluZyogcmVzdWx0KQordm9p
ZCBDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpCiB7CiAgICAgSW5zcGVj
dG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJ
ZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hl
ZXQpCkBAIC02MTMsNyArNjEzLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVT
aGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT5nZXRUZXh0KHJlc3VsdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3ZvaWQgQ1NTQWdlbnQ6
OnNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9y
U3RyaW5nLCBzdHlsZVNoZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKQEAg
LTYyMSwxMCArNjIxLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRU
ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBtX2RvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oc3RkOjpt
YWtlX3VuaXF1ZTxTZXRTdHlsZVNoZWV0VGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwg
dGV4dCksIGVjKTsKLSAgICBlcnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9y
U3RyaW5nKGVjKTsKKyAgICBlcnJvclN0cmluZyA9IERPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVj
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBmdWxsU3R5bGVJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTdHlsZT4mIHJlc3VsdCkKK3ZvaWQgQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZnVsbFN0eWxl
SWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGU+JiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxs
U3R5bGVJZC5jb3B5UmVmKCkpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwpA
QCAtNjM3LDEwICs2MzcsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3AKICAgICBib29sIHN1
Y2Nlc3MgPSBtX2RvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oc3RkOjptYWtlX3VuaXF1ZTxT
ZXRTdHlsZVRleHRBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHRleHQp
LCBlYyk7CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxl
U2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJ
ZChjb21wb3VuZElkKSk7Ci0gICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9F
cnJvclN0cmluZyhlYyk7CisgICAgZXJyb3JTdHJpbmcgPSBET01BZ2VudDo6dG9FcnJvclN0cmlu
ZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZnVs
bFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkKK3ZvaWQgQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3Rv
cihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JDU1NJZCBj
b21wb3VuZElkKGZ1bGxSdWxlSWQuY29weVJlZigpKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQu
aXNFbXB0eSgpKTsKQEAgLTY1NCwxMCArNjU0LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJ
CiAKICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVl
dC0+YnVpbGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21w
b3VuZElkKSwgbnVsbHB0cik7Ci0gICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6
dG9FcnJvclN0cmluZyhlYyk7CisgICAgZXJyb3JTdHJpbmcgPSBET01BZ2VudDo6dG9FcnJvclN0
cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3Vs
dCkKK3ZvaWQgQ1NTQWdlbnQ6OmFkZFJ1bGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBpbnQgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkKIHsKICAgICBOb2RlKiBub2Rl
ID0gbV9kb21BZ2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmluZywgY29udGV4dE5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKQpAQCAtNjc0LDcgKzY3NCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmFkZFJ1bGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQgY29udGV4dE5vZGVJ
CiAgICAgQWRkUnVsZUFjdGlvbiogcmF3QWN0aW9uID0gYWN0aW9uLmdldCgpOwogICAgIGJvb2wg
c3VjY2VzcyA9IG1fZG9tQWdlbnQtPmhpc3RvcnkoKS0+cGVyZm9ybShXVEY6Om1vdmUoYWN0aW9u
KSwgZWMpOwogICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBlcnJvclN0cmluZyA9IEluc3Bl
Y3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSBE
T01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTY4Myw3ICs2ODMsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50IGNvbnRleHROb2RlSQogICAgIHJlc3VsdCA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlLCBudWxscHRyKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJv
clN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4+JiBjc3NQcm9wZXJ0aWVzKQordm9pZCBDU1NB
Z2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5SW5mbz4+JiBjc3NQcm9wZXJ0aWVzKQogewogICAgIGF1dG8gcHJvcGVydGllcyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVy
dHlJbmZvPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChpbnQgaSA9IGZpcnN0Q1NTUHJvcGVydHk7IGkg
PD0gbGFzdENTU1Byb3BlcnR5OyArK2kpIHsKQEAgLTcwOCw3ICs3MDgsNyBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgUmVm
UHRyPEluc3BlY3RvcgogICAgIGNzc1Byb3BlcnRpZXMgPSBXVEY6Om1vdmUocHJvcGVydGllcyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
JiYgZm9yY2VkUHNldWRvQ2xhc3NlcykKK3ZvaWQgQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+JiYgZm9yY2VkUHNldWRvQ2xhc3NlcykKIHsKICAgICBFbGVtZW50KiBlbGVtZW50
ID0gbV9kb21BZ2VudC0+YXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBp
ZiAoIWVsZW1lbnQpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Zm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGMK
ICAgICBlbGVtZW50LT5kb2N1bWVudCgpLnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxl
SW1tZWRpYXRlbHkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXROYW1lZEZsb3dD
b2xsZWN0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3VtZW50Tm9kZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpOYW1lZEZsb3c+PiYgcmVzdWx0KQordm9pZCBDU1NBZ2VudDo6Z2V0TmFtZWRGbG93Q29sbGVj
dGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBkb2N1bWVudE5vZGVJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFt
ZWRGbG93Pj4mIHJlc3VsdCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2RvbUFnZW50
LT5hc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQpOwogICAgIGlmICgh
ZG9jdW1lbnQpCkBAIC03NDUsNyArNzQ1LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
TmFtZWRGbG93Q29sbGVjdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBkb2MKICAg
ICByZXN1bHQgPSBXVEY6Om1vdmUobmFtZWRGbG93cyk7CiB9CiAKLUluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVl
dChFbGVtZW50KiBlbGVtZW50KQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBD
U1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAg
Tm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDo6aXRlcmF0b3IgaXQgPSBtX25vZGVUb0luc3BlY3Rv
clN0eWxlU2hlZXQuZmluZChlbGVtZW50KTsKICAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0
b3JTdHlsZVNoZWV0LmVuZCgpKSB7CkBAIC03NjMsNyArNzYzLDcgQEAgSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNo
ZWV0KEVsZW0KICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCi1FbGVtZW50KiBJbnNw
ZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCkKK0VsZW1lbnQqIENTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBtX2RvbUFnZW50LT5u
b2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUpIHsKQEAgLTc3Nyw3ICs3NzcsNyBAQCBF
bGVtZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCkKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7
CiB9CiAKLWludCBJbnNwZWN0b3JDU1NBZ2VudDo6ZG9jdW1lbnROb2RlV2l0aFJlcXVlc3RlZEZs
b3dzSWQoRG9jdW1lbnQqIGRvY3VtZW50KQoraW50IENTU0FnZW50Ojpkb2N1bWVudE5vZGVXaXRo
UmVxdWVzdGVkRmxvd3NJZChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaW50IGRvY3VtZW50
Tm9kZUlkID0gbV9kb21BZ2VudC0+Ym91bmROb2RlSWQoZG9jdW1lbnQpOwogICAgIGlmICghZG9j
dW1lbnROb2RlSWQgfHwgIW1fbmFtZWRGbG93Q29sbGVjdGlvbnNSZXF1ZXN0ZWQuY29udGFpbnMo
ZG9jdW1lbnROb2RlSWQpKQpAQCAtNzg2LDcgKzc4Niw3IEBAIGludCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6ZG9jdW1lbnROb2RlV2l0aFJlcXVlc3RlZEZsb3dzSWQoRG9jdW1lbnQqIGRvY3VtZW50KQog
ICAgIHJldHVybiBkb2N1bWVudE5vZGVJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Y29sbGVjdFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhl
YWRlcj4qIHJlc3VsdCkKK3ZvaWQgQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+KiByZXN1bHQpCiB7CiAgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGJpbmRTdHlsZVNoZWV0KHN0
eWxlU2hlZXQpOwogICAgIHJlc3VsdC0+YWRkSXRlbShpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWls
ZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCkpOwpAQCAtNzk5LDIwICs3OTksMjAgQEAgdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Y29sbGVjdFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqIHN0eWxl
U2hlZXQsIEluc3BlY3RvcjoKICAgICB9CiB9CiAKLUluc3BlY3RvclN0eWxlU2hlZXQqIEluc3Bl
Y3RvckNTU0FnZW50OjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQor
SW5zcGVjdG9yU3R5bGVTaGVldCogQ1NTQWdlbnQ6OmJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3Bl
Y3RvclN0eWxlU2hlZXQgPSBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuZ2V0
KHN0eWxlU2hlZXQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkgewogICAgICAgICBT
dHJpbmcgaWQgPSBTdHJpbmc6Om51bWJlcihtX2xhc3RTdHlsZVNoZWV0SWQrKyk7CiAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKLSAgICAg
ICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShtX2Rv
bUFnZW50LT5wYWdlQWdlbnQoKSwgaWQsIHN0eWxlU2hlZXQsIGRldGVjdE9yaWdpbihzdHlsZVNo
ZWV0LCBkb2N1bWVudCksIEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhkb2N1
bWVudCksIHRoaXMpOworICAgICAgICBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5
bGVTaGVldDo6Y3JlYXRlKG1fZG9tQWdlbnQtPnBhZ2VBZ2VudCgpLCBpZCwgc3R5bGVTaGVldCwg
ZGV0ZWN0T3JpZ2luKHN0eWxlU2hlZXQsIGRvY3VtZW50KSwgRE9NQWdlbnQ6OmRvY3VtZW50VVJM
U3RyaW5nKGRvY3VtZW50KSwgdGhpcyk7CiAgICAgICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hl
ZXQuc2V0KGlkLCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKICAgICAgICAgbV9jc3NTdHlsZVNoZWV0
VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChzdHlsZVNoZWV0LCBpbnNwZWN0b3JTdHlsZVNoZWV0
KTsKICAgICB9CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKLUlu
c3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojp2aWFJbnNwZWN0b3JTdHlsZVNo
ZWV0KERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVJZkFic2VudCkKK0luc3BlY3RvclN0
eWxlU2hlZXQqIENTU0FnZW50Ojp2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KERvY3VtZW50KiBkb2N1
bWVudCwgYm9vbCBjcmVhdGVJZkFic2VudCkKIHsKICAgICBpZiAoIWRvY3VtZW50KSB7CiAgICAg
ICAgIEFTU0VSVCghY3JlYXRlSWZBYnNlbnQpOwpAQCAtODU2LDE0ICs4NTYsMTQgQEAgSW5zcGVj
dG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OnZpYUluc3BlY3RvclN0eWxlU2hlZXQo
RG9jdW1lbnQqIGRvY3VtZW4KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBTdHJpbmcg
aWQgPSBTdHJpbmc6Om51bWJlcihtX2xhc3RTdHlsZVNoZWV0SWQrKyk7Ci0gICAgaW5zcGVjdG9y
U3R5bGVTaGVldCA9IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShtX2RvbUFnZW50LT5wYWdl
QWdlbnQoKSwgaWQsIGNzc1N0eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yLCBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRVUkxT
dHJpbmcoZG9jdW1lbnQpLCB0aGlzKTsKKyAgICBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVj
dG9yU3R5bGVTaGVldDo6Y3JlYXRlKG1fZG9tQWdlbnQtPnBhZ2VBZ2VudCgpLCBpZCwgY3NzU3R5
bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNw
ZWN0b3IsIERPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhkb2N1bWVudCksIHRoaXMpOwogICAg
IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KGlkLCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsK
ICAgICBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KGNzc1N0eWxlU2hl
ZXQsIGluc3BlY3RvclN0eWxlU2hlZXQpOwogICAgIG1fZG9jdW1lbnRUb0luc3BlY3RvclN0eWxl
U2hlZXQuc2V0KGRvY3VtZW50LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKICAgICByZXR1cm4gaW5z
cGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVj
dG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKQorSW5zcGVjdG9yU3R5bGVTaGVldCogQ1NT
QWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgc3R5bGVTaGVldElkKQogewogICAgIElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0
OjppdGVyYXRvciBpdCA9IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChzdHlsZVNoZWV0
SWQpOwogICAgIGlmIChpdCA9PSBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKSB7CkBA
IC04NzMsNyArODczLDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYgZXJyb3IKICAgICByZXR1cm4gaXQt
PnZhbHVlLmdldCgpOwogfQogCi1JbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdl
U3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCitJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHlsZVNo
ZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCiB7CiAgICAgYXV0
byBvcmlnaW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlJl
Z3VsYXI7CiAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVTaGVldC0+b3duZXJO
b2RlKCkgJiYgcGFnZVN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkpCkBAIC04ODgsNyArODg4
LDcgQEAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3BlY3Rv
ckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3QKICAgICByZXR1cm4gb3JpZ2luOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBFbGVtZW50KiBlbGVtZW50KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUnVsZT4gQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShTdHlsZVJ1
bGUqIHN0eWxlUnVsZSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRWxlbWVudCogZWxl
bWVudCkKIHsKICAgICBpZiAoIXN0eWxlUnVsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC05MDIsNyArOTAyLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5z
cGVjdG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVs
ZShjc3NvbVdyYXBwZXIsIGVsZW1lbnQpIDogbnVsbHB0cjsKIH0KIAotUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPiBDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSog
cnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTEy
LDcgKzkxMiw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IElu
c3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoCiAgICAgcmV0dXJuIGluc3BlY3Rv
clN0eWxlU2hlZXQgPyBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUocnVs
ZSwgbnVsbHB0cikgOiBudWxscHRyOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBJbnNwZWN0b3JDU1NB
Z2VudDo6YnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8UmVmUHRyPFN0
eWxlUnVsZT4+JiBtYXRjaGVkUnVsZXMsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVs
ZW1lbnQqIGVsZW1lbnQpCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBDU1NBZ2VudDo6YnVpbGRBcnJheUZvck1h
dGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVs
ZXMsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAg
ICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOwogCkBAIC05NDUsNyArOTQ1LDcgQEAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6UnVsZU1hdGNoPj4gSW5zcGVjdG8KICAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CiB9
CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JD
U1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCogZWxlbWVudCkK
K1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBDU1NBZ2VudDo6YnVp
bGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NF
UlQoZWxlbWVudCk7CiAgICAgaWYgKCFpczxTdHlsZWRFbGVtZW50PigqZWxlbWVudCkpCkBAIC05
NjMsNyArOTYzLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHIKICAgICByZXR1cm4gaW5zcGVj
dG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JSZWdpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgUmVmUHRyPE5vZGVMaXN0PiYmIHJlZ2lvbkxpc3QsIGludCBkb2N1bWVudE5vZGVJZCkKK1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlJlZ2lvbj4+IENTU0FnZW50OjpidWlsZEFycmF5Rm9yUmVnaW9ucyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIFJlZlB0cjxOb2RlTGlzdD4mJiByZWdpb25MaXN0LCBpbnQgZG9jdW1lbnROb2Rl
SWQpCiB7CiAgICAgYXV0byByZWdpb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+OjpjcmVhdGUoKTsKIApAQCAtOTk5LDcgKzk5
OSw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlJlZ2lvbj4+IEluc3BlY3RvckNTCiAgICAgcmV0dXJuIFdURjo6bW92ZShyZWdp
b25zKTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93PiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JOYW1lZEZsb3coRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBXZWJLaXROYW1lZEZsb3cqIHdlYmtpdE5hbWVkRmxvdywgaW50IGRvY3VtZW50
Tm9kZUlkKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93PiBDU1NB
Z2VudDo6YnVpbGRPYmplY3RGb3JOYW1lZEZsb3coRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBX
ZWJLaXROYW1lZEZsb3cqIHdlYmtpdE5hbWVkRmxvdywgaW50IGRvY3VtZW50Tm9kZUlkKQogewog
ICAgIFJlZlB0cjxOb2RlTGlzdD4gY29udGVudExpc3QgPSB3ZWJraXROYW1lZEZsb3ctPmdldENv
bnRlbnQoKTsKICAgICBhdXRvIGNvbnRlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxp
bnQ+OjpjcmVhdGUoKTsKQEAgLTEwMTgsMTMgKzEwMTgsMTMgQEAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RG
b3JOYW0KICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
ZGlkUmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBDU1NBZ2VudDo6ZGlk
UmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIGlmIChkb2N1bWVudCkK
ICAgICAgICAgbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldC5yZW1vdmUoZG9jdW1lbnQp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5v
ZGUpCit2b2lkIENTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiB7CiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm47CkBAIC0xMDQxLDcgKzEwNDEsNyBAQCB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgbV9ub2Rl
VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnJlbW92ZShub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQordm9pZCBDU1NBZ2Vu
dDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmICghZWxlbWVu
dCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA1MywxMyArMTA1MywxMyBAQCB2b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaXQtPnZh
bHVlLT5kaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXQp
Cit2b2lkIENTU0FnZW50OjpzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0KQogewogICAgIGlmIChtX2Zyb250ZW5kRGlzcGF0Y2hlcikKICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnN0eWxlU2hlZXRDaGFuZ2VkKHN0eWxlU2hlZXQtPmlkKCkpOwog
fQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldFBzZXVkb1N0YXRlcygpCit2b2lkIENT
U0FnZW50OjpyZXNldFBzZXVkb1N0YXRlcygpCiB7CiAgICAgSGFzaFNldDxEb2N1bWVudCo+IGRv
Y3VtZW50c1RvQ2hhbmdlOwogICAgIGZvciAoTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTo6aXRl
cmF0b3IgaXQgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuYmVnaW4oKSwgZW5kID0gbV9u
b2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggZTRhNjAzNzk1
NGMxYTI3MGM3YmM4ZDg1NWFmY2JlZmU3MGZmYjcxMC4uNTE0NmI4ZDNhYWUyZDM1MGJkZDY1MGM1
NWY2ODhmOGZjZDNkYTEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgY2xhc3MgQ1NTRnJvbnRlbmREaXNwYXRjaGVy
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENoYW5nZVJlZ2lvbk92ZXJzZXRUYXNr
OwogY2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1J1bGVMaXN0OwogY2xhc3MgQ1NTU3R5bGVEZWNs
YXJhdGlvbjsKQEAgLTU5LDE0ICs2MCwxMyBAQCBjbGFzcyBOb2RlOwogY2xhc3MgTm9kZUxpc3Q7
CiBjbGFzcyBTdHlsZVJlc29sdmVyOwogY2xhc3MgU3R5bGVSdWxlOwotY2xhc3MgQ2hhbmdlUmVn
aW9uT3ZlcnNldFRhc2s7CiAKLWNsYXNzIEluc3BlY3RvckNTU0FnZW50IGZpbmFsCi0gICAgOiBw
dWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgLCBwdWJsaWMgSW5zcGVjdG9yRE9NQWdlbnQ6
OkRPTUxpc3RlbmVyCitjbGFzcyBDU1NBZ2VudCBmaW5hbAorICAgIDogcHVibGljIFdlYkFnZW50
QmFzZQorICAgICwgcHVibGljIERPTUFnZW50OjpET01MaXN0ZW5lcgogICAgICwgcHVibGljIElu
c3BlY3Rvcjo6Q1NTQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCiAgICAgLCBwdWJsaWMgSW5zcGVj
dG9yU3R5bGVTaGVldDo6TGlzdGVuZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvckNTU0FnZW50KTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NBZ2VudCk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgY2xhc3MgSW5saW5lU3R5bGVP
dmVycmlkZVNjb3BlIHsKQEAgLTg2LDggKzg2LDggQEAgcHVibGljOgogICAgICAgICBDb250ZW50
U2VjdXJpdHlQb2xpY3kqIG1fY29udGVudFNlY3VyaXR5UG9saWN5OwogICAgIH07CiAKLSAgICBJ
bnNwZWN0b3JDU1NBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yRE9NQWdlbnQq
KTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JDU1NBZ2VudCgpOworICAgIENTU0FnZW50KEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBET01BZ2VudCopOworICAgIHZpcnR1YWwgfkNTU0FnZW50KCk7CiAK
ICAgICBzdGF0aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShDU1NSdWxlJik7CiAKQEAg
LTE1MywxOSArMTUzLDE5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gYnVpbGRBcnJheUZv
clJlZ2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8Tm9kZUxpc3Q+JiYsIGludCBkb2N1bWVudE5v
ZGVJZCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93PiBi
dWlsZE9iamVjdEZvck5hbWVkRmxvdyhFcnJvclN0cmluZyYsIFdlYktpdE5hbWVkRmxvdyosIGlu
dCBkb2N1bWVudE5vZGVJZCk7CiAKLSAgICAvLyBJbnNwZWN0b3JET01BZ2VudDo6RE9NTGlzdGVu
ZXIgaW1wbGVtZW50YXRpb24KKyAgICAvLyBET01BZ2VudDo6RE9NTGlzdGVuZXIgaW1wbGVtZW50
YXRpb24KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlKikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCopIG92ZXJyaWRlOwog
Ci0gICAgLy8gSW5zcGVjdG9yQ1NTQWdlbnQ6Okxpc3RlbmVyIGltcGxlbWVudGF0aW9uCisgICAg
Ly8gQ1NTQWdlbnQ6Okxpc3RlbmVyIGltcGxlbWVudGF0aW9uCiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgcmVzZXRQc2V1ZG9TdGF0ZXMoKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6
OkNTU0Zyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6Q1NTQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci0g
ICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1fZG9tQWdlbnQ7CisgICAgRE9NQWdlbnQqIG1fZG9tQWdl
bnQ7CiAKICAgICBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldCBtX2lkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0OwogICAgIENTU1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9jc3NTdHlsZVNo
ZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGExOWJhNGE5OWEzOWI4MTVjOWQzYmYxZWFi
YmIxNDk1ZDRjMDRmN2MuLmQ0MjIyNmNhZmFmMjBlZTk5ZTdhYTg0Y2I3NWMxMjQ1NjQzMmE5YjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKQEAgLTEwNCw4ICsxMDQsOCBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250
cm9sbGVyKFBhZ2UmIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQWdlbnQobV9pbnNwZWN0b3JBZ2VudCk7CiAg
ICAgbV9hZ2VudHMuYXBwZW5kKFdURjo6bW92ZShpbnNwZWN0b3JBZ2VudFB0cikpOwogCi0gICAg
YXV0byBwYWdlQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclBhZ2VBZ2VudD4o
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCAmcGFnZSwgaW5zcGVjdG9yQ2xpZW50LCBtX292
ZXJsYXkuZ2V0KCkpOwotICAgIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gcGFnZUFn
ZW50UHRyLmdldCgpOworICAgIGF1dG8gcGFnZUFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxQ
YWdlQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgJnBhZ2UsIGluc3BlY3RvckNs
aWVudCwgbV9vdmVybGF5LmdldCgpKTsKKyAgICBQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IHBhZ2VB
Z2VudFB0ci5nZXQoKTsKICAgICBtX3BhZ2VBZ2VudCA9IHBhZ2VBZ2VudFB0ci5nZXQoKTsKICAg
ICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKHBhZ2VBZ2VudFB0cikpOwogCkBAIC0xMTQsMzMg
KzExNCwzMyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2Um
IHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy0+c2V0UGFnZVJ1bnRpbWVBZ2VudChydW50aW1lQWdlbnQpOwogICAgIG1fYWdlbnRzLmFw
cGVuZChXVEY6Om1vdmUocnVudGltZUFnZW50UHRyKSk7CiAKLSAgICBhdXRvIGRvbUFnZW50UHRy
ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JET01BZ2VudD4obV9pbnN0cnVtZW50aW5nQWdl
bnRzLmdldCgpLCBwYWdlQWdlbnQsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBtX292
ZXJsYXkuZ2V0KCkpOworICAgIGF1dG8gZG9tQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPERP
TUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2VBZ2VudCwgbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuZ2V0KCksIG1fb3ZlcmxheS5nZXQoKSk7CiAgICAgbV9kb21BZ2VudCA9
IGRvbUFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChXVEY6Om1vdmUoZG9tQWdl
bnRQdHIpKTsKIAotICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rv
ckNTU0FnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fZG9tQWdlbnQpKTsKKyAg
ICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxDU1NBZ2VudD4obV9pbnN0cnVtZW50
aW5nQWdlbnRzLmdldCgpLCBtX2RvbUFnZW50KSk7CiAKLSAgICBhdXRvIGRhdGFiYXNlQWdlbnRQ
dHIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckRhdGFiYXNlQWdlbnQ+KG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5nZXQoKSk7Ci0gICAgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogZGF0YWJhc2VB
Z2VudCA9IGRhdGFiYXNlQWdlbnRQdHIuZ2V0KCk7CisgICAgYXV0byBkYXRhYmFzZUFnZW50UHRy
ID0gc3RkOjptYWtlX3VuaXF1ZTxEYXRhYmFzZUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMu
Z2V0KCkpOworICAgIERhdGFiYXNlQWdlbnQqIGRhdGFiYXNlQWdlbnQgPSBkYXRhYmFzZUFnZW50
UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChXVEY6Om1vdmUoZGF0YWJhc2VBZ2VudFB0
cikpOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgbV9hZ2VudHMuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ+KG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIHBhZ2VBZ2VudCkp
OworICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluZGV4ZWREQkFnZW50Piht
X2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgp
LCBwYWdlQWdlbnQpKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0gICAgbV9h
Z2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yUmVwbGF5QWdlbnQ+KG1faW5z
dHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50KSk7CisgICAgbV9hZ2VudHMuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8UmVwbGF5QWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQo
KSwgcGFnZUFnZW50KSk7CiAjZW5kaWYKIAotICAgIGF1dG8gZG9tU3RvcmFnZUFnZW50UHRyID0g
c3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ+KG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5nZXQoKSwgbV9wYWdlQWdlbnQpOwotICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dCogZG9tU3RvcmFnZUFnZW50ID0gZG9tU3RvcmFnZUFnZW50UHRyLmdldCgpOworICAgIGF1dG8g
ZG9tU3RvcmFnZUFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxET01TdG9yYWdlQWdlbnQ+KG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9wYWdlQWdlbnQpOworICAgIERPTVN0b3JhZ2VB
Z2VudCogZG9tU3RvcmFnZUFnZW50ID0gZG9tU3RvcmFnZUFnZW50UHRyLmdldCgpOwogICAgIG1f
YWdlbnRzLmFwcGVuZChXVEY6Om1vdmUoZG9tU3RvcmFnZUFnZW50UHRyKSk7CiAKLSAgICBhdXRv
IHRpbWVsaW5lQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpQYWdlSW5zcGVjdG9yLCBpbnNwZWN0b3JDbGllbnQpOworICAgIGF1dG8gdGlt
ZWxpbmVBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8VGltZWxpbmVBZ2VudD4obV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIFRpbWVsaW5lQWdlbnQ6OlBhZ2VJbnNwZWN0
b3IsIGluc3BlY3RvckNsaWVudCk7CiAgICAgbV90aW1lbGluZUFnZW50ID0gdGltZWxpbmVBZ2Vu
dFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKHRpbWVsaW5lQWdlbnRQ
dHIpKTsKIAotICAgIGF1dG8gcmVzb3VyY2VBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5z
cGVjdG9yUmVzb3VyY2VBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdl
bnQsIGluc3BlY3RvckNsaWVudCk7CisgICAgYXV0byByZXNvdXJjZUFnZW50UHRyID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZXNvdXJjZUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBh
Z2VBZ2VudCwgaW5zcGVjdG9yQ2xpZW50KTsKICAgICBtX3Jlc291cmNlQWdlbnQgPSByZXNvdXJj
ZUFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChXVEY6Om1vdmUocmVzb3VyY2VB
Z2VudFB0cikpOwogCkBAIC0xNTMsMTMgKzE1MywxMyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJ
bnNwZWN0b3JDb250cm9sbGVyKFBhZ2UmIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9y
QwogICAgIG1fZGVidWdnZXJBZ2VudCA9IGRlYnVnZ2VyQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9h
Z2VudHMuYXBwZW5kKFdURjo6bW92ZShkZWJ1Z2dlckFnZW50UHRyKSk7CiAKLSAgICBhdXRvIGRv
bURlYnVnZ2VyQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9kb21BZ2VudCwgbV9kZWJ1Z2dl
ckFnZW50KTsKKyAgICBhdXRvIGRvbURlYnVnZ2VyQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVl
PERPTURlYnVnZ2VyQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9kb21BZ2Vu
dCwgbV9kZWJ1Z2dlckFnZW50KTsKICAgICBtX2RvbURlYnVnZ2VyQWdlbnQgPSBkb21EZWJ1Z2dl
ckFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChXVEY6Om1vdmUoZG9tRGVidWdn
ZXJBZ2VudFB0cikpOwogCi0gICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCks
IHBhZ2VBZ2VudCkpOwotICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluc3Bl
Y3RvcldvcmtlckFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCkpKTsKLSAgICBtX2Fn
ZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JMYXllclRyZWVBZ2VudD4obV9p
bnN0cnVtZW50aW5nQWdlbnRzLmdldCgpKSk7CisgICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFr
ZV91bmlxdWU8QXBwbGljYXRpb25DYWNoZUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0
KCksIHBhZ2VBZ2VudCkpOworICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFdv
cmtlckFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCkpKTsKKyAgICBtX2FnZW50cy5h
cHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxMYXllclRyZWVBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdl
bnRzLmdldCgpKSk7CiAKICAgICBBU1NFUlQobV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmNvbW1h
bmRMaW5lQVBJSG9zdCgpKTsKICAgICBpZiAoQ29tbWFuZExpbmVBUElIb3N0KiBjb21tYW5kTGlu
ZUFQSUhvc3QgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+Y29tbWFuZExpbmVBUElIb3N0KCkp
IHsKQEAgLTM4MSw3ICszODEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluZGlj
YXRpbmcoYm9vbCBpbmRpY2F0aW5nKQogCiBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnByb2Zp
bGVyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+
cGVyc2lzdGVudEluc3BlY3RvclRpbWVsaW5lQWdlbnQoKTsKKyAgICByZXR1cm4gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLT5wZXJzaXN0ZW50VGltZWxpbmVBZ2VudCgpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnNldFByb2ZpbGVyRW5hYmxlZChib29sIGVuYWJsZSkKQEAgLTM4OSwx
MCArMzg5LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0UHJvZmlsZXJFbmFibGVk
KGJvb2wgZW5hYmxlKQogICAgIEVycm9yU3RyaW5nIHVudXNlZDsKIAogICAgIGlmIChlbmFibGUp
IHsKLSAgICAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRQZXJzaXN0ZW50SW5zcGVjdG9y
VGltZWxpbmVBZ2VudChtX3RpbWVsaW5lQWdlbnQpOworICAgICAgICBtX2luc3RydW1lbnRpbmdB
Z2VudHMtPnNldFBlcnNpc3RlbnRUaW1lbGluZUFnZW50KG1fdGltZWxpbmVBZ2VudCk7CiAgICAg
ICAgIG1fdGltZWxpbmVBZ2VudC0+c3RhcnQodW51c2VkKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFBlcnNpc3RlbnRJbnNwZWN0b3JUaW1lbGluZUFn
ZW50KG51bGxwdHIpOworICAgICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFBlcnNpc3Rl
bnRUaW1lbGluZUFnZW50KG51bGxwdHIpOwogICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPnN0b3Ao
dW51c2VkKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaAppbmRleCA1YzQzMDcxZmVmNzQ4MTkwYTEwNGNhMWVkOGNiYTYyOTViMmIx
MWJlLi43OTYzOTUzNWE2MGZlZjllZjE2NTEzZTdkMjA2NmNmZmQ1ZDMwYjkzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTYwLDE3ICs2
MCwxNyBAQCBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKLWNsYXNzIEluc3BlY3RvckRPTUFn
ZW50OwotY2xhc3MgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDsKK2NsYXNzIERPTUFnZW50Owor
Y2xhc3MgRE9NRGVidWdnZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50Owog
Y2xhc3MgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOwotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50
OwotY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDsKLWNsYXNzIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBh
Z2U7CitjbGFzcyBQYWdlQWdlbnQ7CiBjbGFzcyBQYWdlRGVidWdnZXJBZ2VudDsKK2NsYXNzIFJl
c291cmNlQWdlbnQ7CitjbGFzcyBUaW1lbGluZUFnZW50OwogY2xhc3MgV2ViSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOwogCiBjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyIGZpbmFsIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yRW52aXJvbm1lbnQgewpAQCAtMTI2LDcgKzEyNiw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlc3VtZSgpOwogCiAgICAgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JD
bGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckNsaWVudDsgfQotICAgIEluc3BlY3Rv
clBhZ2VBZ2VudCogcGFnZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlQWdlbnQ7IH0KKyAg
ICBQYWdlQWdlbnQqIHBhZ2VBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUFnZW50OyB9CiAK
ICAgICB2aXJ0dWFsIGJvb2wgZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCBjYW5BY2Nlc3NJbnNwZWN0ZWRTY3JpcHRTdGF0ZShKU0M6OkV4
ZWNTdGF0ZSopIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTQ1LDEyICsxNDUsMTIgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yT3ZlcmxheT4gbV9vdmVybGF5OwogCiAgICAg
SW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKLSAgICBJbnNwZWN0
b3JET01BZ2VudCogbV9kb21BZ2VudDsKLSAgICBJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBtX3Jl
c291cmNlQWdlbnQ7Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBE
T01BZ2VudCogbV9kb21BZ2VudDsKKyAgICBSZXNvdXJjZUFnZW50KiBtX3Jlc291cmNlQWdlbnQ7
CisgICAgUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBQYWdlRGVidWdnZXJBZ2VudCogbV9k
ZWJ1Z2dlckFnZW50OwotICAgIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIG1fZG9tRGVidWdn
ZXJBZ2VudDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiBtX3RpbWVsaW5lQWdlbnQ7Cisg
ICAgRE9NRGVidWdnZXJBZ2VudCogbV9kb21EZWJ1Z2dlckFnZW50OworICAgIFRpbWVsaW5lQWdl
bnQqIG1fdGltZWxpbmVBZ2VudDsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsKiBtX2Zyb250ZW5kQ2hhbm5lbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDBiOGY5NDFiMDIwZDI4ODlhNjViOWQ4ZDE2NzA3Y2Nm
OWNhMGZmZWYuLjcwMDQzZDU5NmRlNjQyNWY0MzU3MTI1ODQ0YmI2YjNkZjhiODE3YjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTU3
LDE4ICsxNTcsMTggQEAgc3RhdGljIGJvb2wgcGFyc2VRdWFkKGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mIHF1YWRBcnJheSwgRmxvYXRRdWFkKiBxdWFkKQogY2xhc3MgUmV2YWxpZGF0ZVN0
eWxlQXR0cmlidXRlVGFzayB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgUmV2YWxpZGF0ZVN0eWxlQXR0cmlidXRlVGFzayhJbnNwZWN0b3JET01BZ2VudCopOwor
ICAgIFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2soRE9NQWdlbnQqKTsKICAgICB2b2lkIHNj
aGVkdWxlRm9yKEVsZW1lbnQqKTsKICAgICB2b2lkIHJlc2V0KCkgeyBtX3RpbWVyLnN0b3AoKTsg
fQogICAgIHZvaWQgdGltZXJGaXJlZCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3RvckRPTUFn
ZW50KiBtX2RvbUFnZW50OworICAgIERPTUFnZW50KiBtX2RvbUFnZW50OwogICAgIFRpbWVyIG1f
dGltZXI7CiAgICAgSGFzaFNldDxSZWZQdHI8RWxlbWVudD4+IG1fZWxlbWVudHM7CiB9OwogCi1S
ZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNrOjpSZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNr
KEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCkKK1JldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRh
c2s6OlJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2soRE9NQWdlbnQqIGRvbUFnZW50KQogICAg
IDogbV9kb21BZ2VudChkb21BZ2VudCkKICAgICAsIG1fdGltZXIoKnRoaXMsICZSZXZhbGlkYXRl
U3R5bGVBdHRyaWJ1dGVUYXNrOjp0aW1lckZpcmVkKQogewpAQCAtMTkyLDcgKzE5Miw3IEBAIHZv
aWQgUmV2YWxpZGF0ZVN0eWxlQXR0cmlidXRlVGFzazo6dGltZXJGaXJlZCgpCiAgICAgbV9lbGVt
ZW50cy5jbGVhcigpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJp
bmcoY29uc3QgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgRE9NQWdlbnQ6OnRvRXJyb3JTdHJp
bmcoY29uc3QgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIEV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CkBAIC0yMDEsOCArMjAxLDgg
QEAgU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2VwdGlv
bkNvZGUmIGVjKQogICAgIHJldHVybiAiIjsKIH0KIAotSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3Bl
Y3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKLSAgICA6IEluc3Bl
Y3RvckFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkRPTSIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQor
RE9NQWdlbnQ6OkRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIFBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVk
U2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKKyAgICA6IFdlYkFnZW50
QmFzZShBU0NJSUxpdGVyYWwoIkRPTSIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQogICAgICwgbV9w
YWdlQWdlbnQocGFnZUFnZW50KQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9vdmVybGF5KG92ZXJsYXkpCkBAIC0yMTUsMTMgKzIx
NSwxMyBAQCBJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSQogewogfQogCi1JbnNwZWN0b3JET01BZ2Vu
dDo6fkluc3BlY3RvckRPTUFnZW50KCkKK0RPTUFnZW50Ojp+RE9NQWdlbnQoKQogewogICAgIHJl
c2V0KCk7CiAgICAgQVNTRVJUKCFtX3NlYXJjaGluZ0Zvck5vZGUpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIpCit2b2lkIERPTUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6RE9NRnJvbnRl
bmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIg
PSBJbnNwZWN0b3I6OkRPTUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNo
ZXIsIHRoaXMpOwpAQCAtMjI5LDE0ICsyMjksMTQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKgog
ICAgIG1faGlzdG9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9ySGlzdG9yeT4oKTsKICAg
ICBtX2RvbUVkaXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8RE9NRWRpdG9yPihtX2hpc3RvcnkuZ2V0
KCkpOwogCi0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JET01BZ2VudCh0
aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldERPTUFnZW50KHRoaXMpOwogICAg
IG1fZG9jdW1lbnQgPSBtX3BhZ2VBZ2VudC0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCk7CiAKICAg
ICBpZiAobV9ub2RlVG9Gb2N1cykKICAgICAgICAgZm9jdXNOb2RlKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikKK3ZvaWQgRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlciA9IG51bGxwdHI7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwpAQCAt
MjQ4LDEyICsyNDgsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc28KICAgICBzZXRTZWFyY2hp
bmdGb3JOb2RlKHVudXNlZCwgZmFsc2UsIDApOwogICAgIGhpZGVIaWdobGlnaHQodW51c2VkKTsK
IAotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yRE9NQWdlbnQoMCk7Cisg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRET01BZ2VudCgwKTsKICAgICBtX2RvY3VtZW50
UmVxdWVzdGVkID0gZmFsc2U7CiAgICAgcmVzZXQoKTsKIH0KIAotVmVjdG9yPERvY3VtZW50Kj4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50cygpCitWZWN0b3I8RG9jdW1lbnQqPiBET01BZ2Vu
dDo6ZG9jdW1lbnRzKCkKIHsKICAgICBWZWN0b3I8RG9jdW1lbnQqPiByZXN1bHQ7CiAgICAgZm9y
IChGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CkBAIC0yNjUsNyArMjY1LDcgQEAgVmVjdG9yPERv
Y3VtZW50Kj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50cygpCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzZXQoKQordm9pZCBET01BZ2VudDo6
cmVzZXQoKQogewogICAgIGlmIChtX2hpc3RvcnkpCiAgICAgICAgIG1faGlzdG9yeS0+cmVzZXQo
KTsKQEAgLTI3NiwxMiArMjc2LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkK
ICAgICBtX2RvY3VtZW50ID0gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0RE9N
TGlzdGVuZXIoRE9NTGlzdGVuZXIqIGxpc3RlbmVyKQordm9pZCBET01BZ2VudDo6c2V0RE9NTGlz
dGVuZXIoRE9NTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIG1fZG9tTGlzdGVuZXIgPSBsaXN0
ZW5lcjsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0RG9jdW1lbnQoRG9jdW1lbnQq
IGRvYykKK3ZvaWQgRE9NQWdlbnQ6OnNldERvY3VtZW50KERvY3VtZW50KiBkb2MpCiB7CiAgICAg
aWYgKGRvYyA9PSBtX2RvY3VtZW50LmdldCgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTgsMTIg
KzI5OCwxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXREb2N1bWVudChEb2N1bWVudCog
ZG9jKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9jdW1lbnRVcGRhdGVkKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbGVhc2VEYW5nbGluZ05vZGVzKCkKK3ZvaWQg
RE9NQWdlbnQ6OnJlbGVhc2VEYW5nbGluZ05vZGVzKCkKIHsKICAgICBtX2RhbmdsaW5nTm9kZVRv
SWRNYXBzLmNsZWFyKCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2RlKiBu
b2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitpbnQgRE9NQWdlbnQ6OmJpbmQoTm9kZSogbm9k
ZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewogICAgIGludCBpZCA9IG5vZGVzTWFwLT5nZXQo
bm9kZSk7CiAgICAgaWYgKGlkKQpAQCAtMzE1LDcgKzMxNSw3IEBAIGludCBJbnNwZWN0b3JET01B
Z2VudDo6YmluZChOb2RlKiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiAgICAgcmV0dXJu
IGlkOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9k
ZVRvSWRNYXAqIG5vZGVzTWFwKQordm9pZCBET01BZ2VudDo6dW5iaW5kKE5vZGUqIG5vZGUsIE5v
ZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBpbnQgaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUp
OwogICAgIGlmICghaWQpCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6dW5iaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKICAgICB9CiB9CiAK
LU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IG5vZGVJZCkKK05vZGUqIERPTUFnZW50Ojphc3NlcnROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklk
KG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKSB7CkBAIC0zNjMsNyArMzYzLDcgQEAgTm9kZSogSW5z
cGVjdG9yRE9NQWdlbnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkKQogICAgIHJldHVybiBub2RlOwogfQogCi1Eb2N1bWVudCogSW5zcGVjdG9yRE9NQWdl
bnQ6OmFzc2VydERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkK
K0RvY3VtZW50KiBET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTM3NSw3ICszNzUsNyBAQCBEb2N1bWVu
dCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IG5vZGVJZAogICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4obm9kZSk7CiB9
CiAKLUVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFbGVtZW50KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0VsZW1lbnQqIERPTUFnZW50Ojphc3NlcnRFbGVt
ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKIHsKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBA
IC0zODcsNyArMzg3LDcgQEAgRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVsZW1l
bnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgIHJldHVybiBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitOb2Rl
KiBET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywg
bm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC0zOTksNyArMzk5LDcgQEAgTm9kZSogSW5zcGVj
dG9yRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQKICAgICByZXR1cm4gbm9kZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yRE9N
QWdlbnQ6OmFzc2VydEVkaXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQpCitFbGVtZW50KiBET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50
ID0gYXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQp
CkBAIC00MTEsNyArNDExLDcgQEAgRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVk
aXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludAogICAgIHJldHVybiBl
bGVtZW50OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
JiByb290KQordm9pZCBET01BZ2VudDo6Z2V0RG9jdW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiYgcm9vdCkKIHsKICAg
ICBtX2RvY3VtZW50UmVxdWVzdGVkID0gdHJ1ZTsKIApAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
UmVmUHRyPEluc3BlY3Rvcjo6CiAgICAgcm9vdCA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShtX2RvY3Vt
ZW50LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0
aCkKK3ZvaWQgRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBp
bnQgZGVwdGgpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlm
ICghbm9kZSB8fCAobm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9k
ZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVOVF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkg
IT0gTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERSkpCkBAIC00NTUsNyArNDU1LDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQs
IGludCBkZXB0aCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2V0Q2hpbGROb2Rlcyhub2Rl
SWQsIGNoaWxkcmVuLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRp
c2NhcmRCaW5kaW5ncygpCit2b2lkIERPTUFnZW50OjpkaXNjYXJkQmluZGluZ3MoKQogewogICAg
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5jbGVhcigpOwogICAgIG1faWRUb05vZGUuY2xlYXIoKTsK
QEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkQmluZGlu
Z3MoKQogICAgIG1fbm9kZUdyb3VwVG9CYWNrZW5kSWRNYXAuY2xlYXIoKTsKIH0KIAotaW50IElu
c3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCitpbnQgRE9NQWdlbnQ6
OnB1c2hOb2RlVG9Gcm9udGVuZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBkb2N1bWVu
dE5vZGVJZCwgTm9kZSogbm9kZVRvUHVzaCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBh
c3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQpOwogICAgIGlmICghZG9j
dW1lbnQpCkBAIC00NzgsNyArNDc4LDcgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9k
ZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnQKICAgICBy
ZXR1cm4gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlVG9QdXNoKTsKIH0KIAotTm9kZSogSW5z
cGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZChpbnQgaWQpCitOb2RlKiBET01BZ2VudDo6bm9kZUZv
cklkKGludCBpZCkKIHsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm4gMDsKQEAgLTQ4OSw3
ICs0ODksNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkKICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdENoaWxkTm9k
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRo
KQordm9pZCBET01BZ2VudDo6cmVxdWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRoKQogewogICAgIGludCBzYW5pdGl6ZWRE
ZXB0aDsKIApAQCAtNTA3LDcgKzUwNyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVl
c3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwKICAgICBw
dXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobm9kZUlkLCBzYW5pdGl6ZWREZXB0aCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgaW50KiBlbGVtZW50SWQp
Cit2b2lkIERPTUFnZW50OjpxdWVyeVNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIGludCogZWxlbWVudElkKQogewog
ICAgICplbGVtZW50SWQgPSAwOwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwpAQCAtNTI5LDcgKzUyOSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25z
CiAgICAgICAgICplbGVtZW50SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVsZW1lbnQuZ2V0
KCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYgcmVzdWx0KQordm9pZCBE
T01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8aW50Pj4mIHJlc3VsdCkKIHsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShl
cnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC01NTIsNyArNTUyLDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGMKICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkpKTsKIH0KIAotaW50IEluc3BlY3RvckRPTUFn
ZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCitpbnQgRE9NQWdl
bnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkKIHsKICAgICBBU1NF
UlQobm9kZVRvUHVzaCk7ICAvLyBJbnZhbGlkIGlucHV0CiAKQEAgLTU5OSwxMiArNTk5LDEyIEBA
IGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2Rl
VG9QdXNoKQogICAgIHJldHVybiBtYXAtPmdldChub2RlVG9QdXNoKTsKIH0KIAotaW50IEluc3Bl
Y3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChOb2RlKiBub2RlKQoraW50IERPTUFnZW50Ojpib3Vu
ZE5vZGVJZChOb2RlKiBub2RlKQogewogICAgIHJldHVybiBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KG5vZGUpOwogfQogCi1CYWNrZW5kTm9kZUlkIEluc3BlY3RvckRPTUFnZW50OjpiYWNrZW5k
Tm9kZUlkRm9yTm9kZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG5vZGVHcm91cCkKK0JhY2tl
bmROb2RlSWQgRE9NQWdlbnQ6OmJhY2tlbmROb2RlSWRGb3JOb2RlKE5vZGUqIG5vZGUsIGNvbnN0
IFN0cmluZyYgbm9kZUdyb3VwKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7
CkBAIC02MjMsNyArNjIzLDcgQEAgQmFja2VuZE5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6YmFj
a2VuZE5vZGVJZEZvck5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBp
ZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVsZWFzZUJhY2tlbmROb2RlSWRzKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBub2RlR3JvdXApCit2b2lkIERP
TUFnZW50OjpyZWxlYXNlQmFja2VuZE5vZGVJZHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIG5vZGVHcm91cCkKIHsKICAgICBpZiAobV9ub2RlR3JvdXBUb0JhY2tlbmRJ
ZE1hcC5jb250YWlucyhub2RlR3JvdXApKSB7CiAgICAgICAgIE5vZGVUb0JhY2tlbmRJZE1hcCYg
bWFwID0gbV9ub2RlR3JvdXBUb0JhY2tlbmRJZE1hcC5maW5kKG5vZGVHcm91cCktPnZhbHVlOwpA
QCAtNjM1LDcgKzYzNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbGVhc2VCYWNrZW5k
Tm9kZUlkcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0CiAgICAgZXJyb3JTdHJp
bmcgPSBBU0NJSUxpdGVyYWwoIkdyb3VwIG5hbWUgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQordm9pZCBET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJv
clN0cmluZywgZWxlbWVudElkKTsKICAgICBpZiAoIWVsZW1lbnQpCkBAIC02NDQsNyArNjQ0LDcg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudEkKICAgICBtX2RvbUVkaXRvci0+c2V0QXR0cmlidXRl
KGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBlcnJvclN0cmluZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogY29uc3QgbmFt
ZSkKK3ZvaWQgRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyog
Y29uc3QgbmFtZSkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVt
ZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTY1NCw3
ICs2NTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1lbgogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIHBhcnNlZEVsZW1lbnQuZ2V0KCktPnNldElubmVySFRNTCgiPHNwYW4gIiArIHRl
eHQgKyAiPjwvc3Bhbj4iLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOworICAgICAgICBlcnJvclN0
cmluZyA9IERPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtNjgyLDcgKzY4Miw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJp
YnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVuCiAgICAgICAg
IG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgKm5hbWUsIGVycm9yU3RyaW5n
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9p
ZCBET01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIGVsZW1lbnRJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
bW92ZUF0dHJpYnV0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsCiAg
ICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCBlcnJvclN0cmlu
Zyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQordm9pZCBET01BZ2VudDo6cmVtb3ZlTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFz
c2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBA
IC03MDYsNyArNzA2LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgbV9kb21FZGl0b3ItPnJlbW92
ZUNoaWxkKHBhcmVudE5vZGUsIG5vZGUsIGVycm9yU3RyaW5nKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUsIGludCogbmV3SWQpCit2b2lkIERPTUFnZW50Ojpz
ZXROb2RlTmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgdGFnTmFtZSwgaW50KiBuZXdJZCkKIHsKICAgICAqbmV3SWQgPSAwOwogCkBAIC03NDEs
NyArNzQxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdAogICAgICAgICBwdXNoQ2hpbGROb2Rl
c1RvRnJvbnRlbmQoKm5ld0lkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0
ZXJIVE1MKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgV1RGOjpTdHJpbmcq
IG91dGVySFRNTCkKK3ZvaWQgRE9NQWdlbnQ6OmdldE91dGVySFRNTChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIFdURjo6U3RyaW5nKiBvdXRlckhUTUwpCiB7CiAgICAgTm9k
ZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2Rl
KQpAQCAtNzUwLDcgKzc1MCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91dGVySFRN
TChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFdURjo6CiAgICAgKm91dGVy
SFRNTCA9IGNyZWF0ZU1hcmt1cCgqbm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldE91dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgb3V0ZXJIVE1MKQordm9pZCBET01BZ2VudDo6c2V0T3V0ZXJIVE1MKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpCiB7
CiAgICAgaWYgKCFub2RlSWQpIHsKICAgICAgICAgRE9NUGF0Y2hTdXBwb3J0IGRvbVBhdGNoU3Vw
cG9ydChtX2RvbUVkaXRvci5nZXQoKSwgbV9kb2N1bWVudC5nZXQoKSk7CkBAIC03ODQsNyArNzg0
LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QKICAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zy
b250ZW5kKG5ld0lkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3ZvaWQgRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFz
c2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBA
IC03OTgsNyArNzk4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QKICAgICBtX2RvbUVkaXRv
ci0+cmVwbGFjZVdob2xlVGV4dChkb3duY2FzdDxUZXh0Pihub2RlKSwgdmFsdWUsIGVycm9yU3Ry
aW5nKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JO
b2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBv
YmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4+JiBsaXN0ZW5lcnNBcnJheSkKK3ZvaWQgRE9N
QWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+
PiYgbGlzdGVuZXJzQXJyYXkpCiB7CiAgICAgbGlzdGVuZXJzQXJyYXkgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+Ojpj
cmVhdGUoKTsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKQEAgLTgzMSw3ICs4MzEsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExp
c3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbgogICAgIH0KIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnMoTm9kZSogbm9kZSwg
VmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiYgZXZlbnRJbmZvcm1hdGlvbiwgYm9vbCBpbmNsdWRl
QW5jZXN0b3JzKQordm9pZCBET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnMoTm9kZSogbm9kZSwg
VmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiYgZXZlbnRJbmZvcm1hdGlvbiwgYm9vbCBpbmNsdWRl
QW5jZXN0b3JzKQogewogICAgIC8vIFRoZSBOb2RlJ3MgQW5jZXN0b3JzIGluY2x1ZGluZyBzZWxm
LgogICAgIFZlY3RvcjxOb2RlKj4gYW5jZXN0b3JzOwpAQCAtODY1LDcgKzg2NSw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzKE5vZGUqIG5vZGUsIFZlY3RvcjxF
dmVudExpc3RlbmVySW5mbz4mCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllcz4mIGF4UHJvcGVydGllcykKK3ZvaWQgRE9NQWdlbnQ6OmdldEFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzPiYgYXhQcm9wZXJ0aWVzKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9y
U3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTg3NCw3ICs4NzQsNyBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpnZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaQogICAgIGF4UHJvcGVydGllcyA9IGJ1aWxkT2JqZWN0Rm9yQWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXMobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHdo
aXRlc3BhY2VUcmltbWVkUXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBub2Rl
SWRzLCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KQordm9pZCBET01BZ2VudDo6
cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgd2hp
dGVzcGFjZVRyaW1tZWRRdWVyeSwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYmIG5vZGVJ
ZHMsIFN0cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpCiB7CiAgICAgLy8gRklYTUU6
IFNlYXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3JhbnVsYXJpdHkgLSBudW1iZXIgb2YgbWF0Y2hlcyB3
aXRoaW4gbm9kZSBpcyBub3QgY2FsY3VsYXRlZC4KICAgICBJbnNwZWN0b3JOb2RlRmluZGVyIGZp
bmRlcih3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKQEAgLTkxNCw3ICs5MTQsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB3aAogICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNWZWN0b3Iuc2l6ZSgp
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwg
aW50IHRvSW5kZXgsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYgbm9k
ZUlkcykKK3ZvaWQgRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRl
eCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+JiBub2RlSWRzKQogewog
ICAgIFNlYXJjaFJlc3VsdHM6Oml0ZXJhdG9yIGl0ID0gbV9zZWFyY2hSZXN1bHRzLmZpbmQoc2Vh
cmNoSWQpOwogICAgIGlmIChpdCA9PSBtX3NlYXJjaFJlc3VsdHMuZW5kKCkpIHsKQEAgLTkzMywx
MiArOTMzLDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIG5vZGVJZHMtPmFk
ZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtpXS5nZXQoKSkpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpCit2b2lkIERPTUFnZW50OjpkaXNjYXJkU2VhcmNo
UmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpCiB7CiAgICAgbV9z
ZWFyY2hSZXN1bHRzLnJlbW92ZShzZWFyY2hJZCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQorYm9vbCBET01BZ2VudDo6aGFuZGxlTW91c2VQcmVzcygp
CiB7CiAgICAgaWYgKCFtX3NlYXJjaGluZ0Zvck5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTk1MCw3ICs5NTAsNyBAQCBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVNb3VzZVBy
ZXNzKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6Omhh
bmRsZVRvdWNoRXZlbnQoTm9kZSYgbm9kZSkKK2Jvb2wgRE9NQWdlbnQ6OmhhbmRsZVRvdWNoRXZl
bnQoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAoIW1fc2VhcmNoaW5nRm9yTm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtOTYyLDcgKzk2Miw3IEBAIGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6
OmhhbmRsZVRvdWNoRXZlbnQoTm9kZSYgbm9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omluc3BlY3QoTm9kZSogaW5zcGVjdGVkTm9kZSkKK3ZvaWQg
RE9NQWdlbnQ6Omluc3BlY3QoTm9kZSogaW5zcGVjdGVkTm9kZSkKIHsKICAgICBFcnJvclN0cmlu
ZyB1bnVzZWQ7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbnNwZWN0ZWROb2RlOwpAQCAtOTc1
LDcgKzk3NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omluc3BlY3QoTm9kZSogaW5zcGVj
dGVkTm9kZSkKICAgICBmb2N1c05vZGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Zm9jdXNOb2RlKCkKK3ZvaWQgRE9NQWdlbnQ6OmZvY3VzTm9kZSgpCiB7CiAgICAgaWYgKCFtX2Zy
b250ZW5kRGlzcGF0Y2hlcikKICAgICAgICAgcmV0dXJuOwpAQCAtOTk0LDEwICs5OTQsMTAgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXNOb2RlKCkKICAgICBpZiAoaW5qZWN0ZWRTY3Jp
cHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbmplY3RlZFNjcmlwdC5p
bnNwZWN0T2JqZWN0KEluc3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShzY3JpcHRT
dGF0ZSwgbm9kZS5nZXQoKSkpOworICAgIGluamVjdGVkU2NyaXB0Lmluc3BlY3RPYmplY3QoRE9N
QWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLCBub2RlLmdldCgpKSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCit2b2lkIERPTUFnZW50Ojptb3VzZURpZE1v
dmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQogewog
ICAgIGlmICghbV9zZWFyY2hpbmdGb3JOb2RlKQogICAgICAgICByZXR1cm47CkBAIC0xMDA5LDcg
KzEwMDksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVucwogICAgICAgICBtX292ZXJsYXktPmhp
Z2hsaWdodE5vZGUobm9kZSwgKm1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpOwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodEluc3Bl
Y3Rvck9iamVjdCkKK3ZvaWQgRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0
SW5zcGVjdG9yT2JqZWN0KQogewogICAgIGlmIChtX3NlYXJjaGluZ0Zvck5vZGUgPT0gZW5hYmxl
ZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJv
b2wgZW5hYmwKICAgICBtX292ZXJsYXktPmRpZFNldFNlYXJjaGluZ0Zvck5vZGUobV9zZWFyY2hp
bmdGb3JOb2RlKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodEluc3BlY3Rvck9iamVj
dCkKK3N0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IERPTUFnZW50OjpoaWdobGlnaHRD
b25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVj
dG9yT2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCiB7CiAgICAgaWYgKCFoaWdobGln
aHRJbnNwZWN0b3JPYmplY3QpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwo
IkludGVybmFsIGVycm9yOiBoaWdobGlnaHQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgbWlz
c2luZyIpOwpAQCAtMTA0MywxOCArMTA0MywxOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0
Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvcgog
ICAgIHJldHVybiBoaWdobGlnaHRDb25maWc7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5h
YmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBoaWdobGlnaHRDb25maWcpCit2
b2lkIERPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGlnaGxp
Z2h0Q29uZmlnKQogewogICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJs
ZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZy5nZXQoKSA6IG51bGxwdHIpOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nJiwg
aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGlu
ZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIERPTUFnZW50Ojpo
aWdobGlnaHRSZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29v
cmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gc3RkOjptYWtlX3VuaXF1ZTxGbG9hdFF1YWQ+
KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgaW5uZXJIaWdobGlnaHRRdWFk
KFdURjo6bW92ZShxdWFkKSwgY29sb3IuY29weVJlZigpLCBvdXRsaW5lQ29sb3IuY29weVJlZigp
LCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiYmIHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xv
ciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJv
b2wqIHVzZVBhZ2VDb29yZGluYXRlcykKK3ZvaWQgRE9NQWdlbnQ6OmhpZ2hsaWdodFF1YWQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiYgcXVh
ZEFycmF5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNv
b3JkaW5hdGVzKQogewogICAgIGF1dG8gcXVhZCA9IHN0ZDo6bWFrZV91bmlxdWU8RmxvYXRRdWFk
PigpOwogICAgIGlmICghcGFyc2VRdWFkKHF1YWRBcnJheSwgcXVhZC5nZXQoKSkpIHsKQEAgLTEw
NjQsNyArMTA2NCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFF1YWQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zCiAgICAgaW5uZXJIaWdobGln
aHRRdWFkKFdURjo6bW92ZShxdWFkKSwgY29sb3IuY29weVJlZigpLCBvdXRsaW5lQ29sb3IuY29w
eVJlZigpLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
Ojppbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykK
K3ZvaWQgRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRR
dWFkPiBxdWFkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFn
ZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gc3RkOjptYWtlX3Vu
aXF1ZTxIaWdobGlnaHRDb25maWc+KCk7CiAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0g
cGFyc2VDb2xvcihjb2xvci5jb3B5UmVmKCkpOwpAQCAtMTA3Myw3ICsxMDczLDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9h
dFF1YWQ+IHF1YWQsIGNvbnMKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodFF1YWQoV1RGOjptb3Zl
KHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
aGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBpbnQqIG5vZGVJ
ZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkKK3ZvaWQgRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29uc3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmlu
Zyogb2JqZWN0SWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IDA7CiAgICAgaWYgKG5vZGVJZCkgewpA
QCAtMTA5NSw3ICsxMDk1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9k
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnMKICAgICBtX292ZXJs
YXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKmhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBmcmFtZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvcikKK3ZvaWQgRE9NQWdlbnQ6Omhp
Z2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmIG91dGxpbmVDb2xvcikKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+
ZnJhbWVGb3JJZChmcmFtZUlkKTsKICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPm93bmVyRWxlbWVu
dCgpKSB7CkBAIC0xMTA3LDEyICsxMTA3LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zCiAg
ICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3Ry
aW5nJikKK3ZvaWQgRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcmKQogewogICAg
IG1fb3ZlcmxheS0+aGlkZUhpZ2hsaWdodCgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
Ojptb3ZlVG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0
RWxlbWVudElkLCBjb25zdCBpbnQqIGNvbnN0IGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQp
Cit2b2lkIERPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBpbnQqIGNvbnN0IGFuY2hvck5vZGVJZCwg
aW50KiBuZXdOb2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShl
cnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC0xMTM5LDI2ICsxMTM5LDI2
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQsIGludCB0YXJnZXRFCiAgICAgKm5ld05vZGVJZCA9IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuZG8oRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nKQordm9pZCBET01BZ2VudDo6dW5kbyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgbV9oaXN0b3J5
LT51bmRvKGVjKTsKLSAgICBlcnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9y
U3RyaW5nKGVjKTsKKyAgICBlcnJvclN0cmluZyA9IERPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVj
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVkbyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcpCit2b2lkIERPTUFnZW50OjpyZWRvKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBtX2hpc3RvcnktPnJlZG8oZWMpOwotICAg
IGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOworICAg
IGVycm9yU3RyaW5nID0gRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjptYXJrVW5kb2FibGVTdGF0ZShFcnJvclN0cmluZyYpCit2b2lkIERP
TUFnZW50OjptYXJrVW5kb2FibGVTdGF0ZShFcnJvclN0cmluZyYpCiB7CiAgICAgbV9oaXN0b3J5
LT5tYXJrVW5kb2FibGVTdGF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpmb2N1
cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCit2b2lkIERPTUFnZW50Ojpm
b2N1cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiB7CiAgICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQpAQCAtMTE3MCw3ICsxMTcwLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Zm9jdXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgIGVsZW1lbnQt
PmZvY3VzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmpl
Y3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCkKK3ZvaWQgRE9NQWdlbnQ6OnJlc29sdmVOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkK
IHsKICAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3Jv
dXAgOiAiIjsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CkBAIC0xMTg2LDcg
KzExODYsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0CiAgICAgcmVzdWx0ID0gb2JqZWN0Owog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz4+JiByZXN1bHQpCit2b2lkIERPTUFnZW50OjpnZXRBdHRyaWJ1dGVzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+JiByZXN1bHQpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2Vy
dEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtMTE5
NSw3ICsxMTk1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRlcyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlAKICAgICByZXN1bHQgPSBidWls
ZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJ
ZCwgaW50KiBub2RlSWQpCit2b2lkIERPTUFnZW50OjpyZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUg
PSBub2RlRm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmIChub2RlKQpAQCAtMTIwNSw3ICsx
MjA1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG4KIH0KIAogLy8gc3RhdGljCi1TdHJpbmcg
SW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkK
K1N0cmluZyBET01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KQog
ewogICAgIGlmICghZG9jdW1lbnQgfHwgZG9jdW1lbnQtPnVybCgpLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gIiI7CkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBzdGF0aWMgU3RyaW5nIGRvY3VtZW50
QmFzZVVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgcmV0dXJuIGRvY3VtZW50LT5j
b21wbGV0ZVVSTCgiIikuc3RyaW5nKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9k
ZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlPiBET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUs
IGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewogICAgIGludCBpZCA9IGJpbmQo
bm9kZSwgbm9kZXNNYXApOwogICAgIFN0cmluZyBub2RlTmFtZTsKQEAgLTEzMTgsNyArMTMxOCw3
IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50
OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSoKICAgICByZXR1cm4gV1RGOjptb3ZlKHZhbHVlKTsK
IH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IEluc3BlY3RvckRP
TUFnZW50OjpidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCkK
K1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBET01BZ2VudDo6YnVpbGRB
cnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgYXV0byBh
dHRyaWJ1dGVzVmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVh
dGUoKTsKICAgICAvLyBHbyB0aHJvdWdoIGFsbCBhdHRyaWJ1dGVzIGFuZCBzZXJpYWxpemUgdGhl
bS4KQEAgLTEzMzIsNyArMTMzMiw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRBCiAgICAgcmV0
dXJuIFdURjo6bW92ZShhdHRyaWJ1dGVzVmFsdWUpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIsIGlu
dCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IERPTUFnZW50OjpidWlsZEFy
cmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVU
b0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBhdXRvIGNoaWxkcmVuID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CiAg
ICAgaWYgKGRlcHRoID09IDApIHsKQEAgLTEzNTYsNyArMTM1Niw3IEBAIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0
b3JET01BZ2VuCiAgICAgcmV0dXJuIFdURjo6bW92ZShjaGlsZHJlbik7CiB9CiAKLVJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50Ojpi
dWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIm
IHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
Tm9kZSogbm9kZSwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cElkKQorUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZl
bnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiBub2RlLCBjb25z
dCBTdHJpbmcqIG9iamVjdEdyb3VwSWQpCiB7CiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2
ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5saXN0ZW5lcjsKIApAQCAtMTQw
OCw3ICsxNDA4LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5l
cj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXYKICAgICByZXR1cm4gV1RGOjpt
b3ZlKHZhbHVlKTsKIH0KICAgICAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW4oUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+JiYgYXhPYmplY3Qs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYmIGNoaWxkTm9kZUlkcykK
K3ZvaWQgRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+JiYgYXhPYmplY3QsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxpbnQ+PiYmIGNoaWxkTm9kZUlkcykKIHsKICAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9
IGF4T2JqZWN0LT5jaGlsZHJlbigpOwogICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQpAQCAtMTQy
NSw3ICsxNDI1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxp
dHlDaGlsZHJlbihSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4KICAgICB9CiB9CiAgICAgCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMo
Tm9kZSogbm9kZSkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzPiBET01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllcyhOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAoIW5vZGUpCkBA
IC0xNjgzLDcgKzE2ODMsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgIHJldHVybiBX
VEY6Om1vdmUodmFsdWUpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJGaXJz
dENoaWxkKE5vZGUqIG5vZGUpCitOb2RlKiBET01BZ2VudDo6aW5uZXJGaXJzdENoaWxkKE5vZGUq
IG5vZGUpCiB7CiAgICAgbm9kZSA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAoaXNX
aGl0ZXNwYWNlKG5vZGUpKQpAQCAtMTY5MSw3ICsxNjkxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyRmlyc3RDaGlsZChOb2RlKiBub2RlKQogICAgIHJldHVybiBub2RlOwogfQog
Ci1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhOb2RlKiBub2RlKQor
Tm9kZSogRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoTm9kZSogbm9kZSkKIHsKICAgICBkbyB7
CiAgICAgICAgIG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwpAQCAtMTY5OSw3ICsxNjk5LDcg
QEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoTm9kZSogbm9kZSkK
ICAgICByZXR1cm4gbm9kZTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUHJl
dmlvdXNTaWJsaW5nKE5vZGUqIG5vZGUpCitOb2RlKiBET01BZ2VudDo6aW5uZXJQcmV2aW91c1Np
YmxpbmcoTm9kZSogbm9kZSkKIHsKICAgICBkbyB7CiAgICAgICAgIG5vZGUgPSBub2RlLT5wcmV2
aW91c1NpYmxpbmcoKTsKQEAgLTE3MDcsNyArMTcwNyw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFn
ZW50Ojppbm5lclByZXZpb3VzU2libGluZyhOb2RlKiBub2RlKQogICAgIHJldHVybiBub2RlOwog
fQogCi11bnNpZ25lZCBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJDaGlsZE5vZGVDb3VudChOb2Rl
KiBub2RlKQordW5zaWduZWQgRE9NQWdlbnQ6OmlubmVyQ2hpbGROb2RlQ291bnQoTm9kZSogbm9k
ZSkKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgTm9kZSogY2hpbGQgPSBpbm5lckZp
cnN0Q2hpbGQobm9kZSk7CkBAIC0xNzE4LDcgKzE3MTgsNyBAQCB1bnNpZ25lZCBJbnNwZWN0b3JE
T01BZ2VudDo6aW5uZXJDaGlsZE5vZGVDb3VudChOb2RlKiBub2RlKQogICAgIHJldHVybiBjb3Vu
dDsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZShOb2RlKiBu
b2RlKQorTm9kZSogRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZShOb2RlKiBub2RlKQogewogICAg
IEFTU0VSVChub2RlKTsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KCpub2RlKSkKQEAgLTE3MjYsMTMg
KzE3MjYsMTMgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZShOb2Rl
KiBub2RlKQogICAgIHJldHVybiBub2RlLT5wYXJlbnROb2RlKCk7CiB9CiAKLWJvb2wgSW5zcGVj
dG9yRE9NQWdlbnQ6OmlzV2hpdGVzcGFjZShOb2RlKiBub2RlKQorYm9vbCBET01BZ2VudDo6aXNX
aGl0ZXNwYWNlKE5vZGUqIG5vZGUpCiB7CiAgICAgLy9UT0RPOiBwdWxsIGlnbm9yZVdoaXRlc3Bh
Y2Ugc2V0dGluZyBmcm9tIHRoZSBmcm9udGVuZCBhbmQgdXNlIGhlcmUuCiAgICAgcmV0dXJuIG5v
ZGUgJiYgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgJiYgbm9kZS0+bm9kZVZh
bHVlKCkuc3RyaXBXaGl0ZVNwYWNlKCkubGVuZ3RoKCkgPT0gMDsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6bWFpbkZyYW1lRE9NQ29udGVudExvYWRlZCgpCit2b2lkIERPTUFnZW50Ojpt
YWluRnJhbWVET01Db250ZW50TG9hZGVkKCkKIHsKICAgICAvLyBSZS1wdXNoIGRvY3VtZW50IG9u
Y2UgaXQgaXMgbG9hZGVkLgogICAgIGRpc2NhcmRCaW5kaW5ncygpOwpAQCAtMTc0MCw3ICsxNzQw
LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6bWFpbkZyYW1lRE9NQ29udGVudExvYWRlZCgp
CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb2N1bWVudFVwZGF0ZWQoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudCogZG9jdW1lbnQp
Cit2b2lkIERPTUFnZW50OjpkaWRDb21taXRMb2FkKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAg
ICBFbGVtZW50KiBmcmFtZU93bmVyID0gZG9jdW1lbnQtPm93bmVyRWxlbWVudCgpOwogICAgIGlm
ICghZnJhbWVPd25lcikKQEAgLTE3NjEsNyArMTc2MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmRpZENvbW1pdExvYWQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklkLCBXVEY6Om1vdmUodmFs
dWUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2Rl
JiBub2RlKQordm9pZCBET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogewog
ICAgIGlmIChpc1doaXRlc3BhY2UoJm5vZGUpKQogICAgICAgICByZXR1cm47CkBAIC0xNzkwLDcg
KzE3OTAsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUm
IG5vZGUpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01O
b2RlKE5vZGUmIG5vZGUpCit2b2lkIERPTUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUmIG5v
ZGUpCiB7CiAgICAgaWYgKGlzV2hpdGVzcGFjZSgmbm9kZSkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4MTIsMTIgKzE4MTIsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9N
Tm9kZShOb2RlJiBub2RlKQogICAgIHVuYmluZCgmbm9kZSwgJm1fZG9jdW1lbnROb2RlVG9JZE1h
cCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1l
bnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5l
d1ZhbHVlKQordm9pZCBET01BZ2VudDo6d2lsbE1vZGlmeURPTUF0dHIoRWxlbWVudCYsIGNvbnN0
IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCiB7
CiAgICAgbV9zdXBwcmVzc0F0dHJpYnV0ZU1vZGlmaWVkRXZlbnQgPSAob2xkVmFsdWUgPT0gbmV3
VmFsdWUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSkKK3ZvaWQgRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KQogewogICAgIGJvb2wgc2hvdWxkU3VwcHJlc3NFdmVudCA9IG1fc3VwcHJlc3NBdHRyaWJ1dGVN
b2RpZmllZEV2ZW50OwogICAgIG1fc3VwcHJlc3NBdHRyaWJ1dGVNb2RpZmllZEV2ZW50ID0gZmFs
c2U7CkBAIC0xODM1LDcgKzE4MzUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2Rp
ZnlET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbgogICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5hdHRyaWJ1dGVNb2RpZmllZChpZCwgbmFtZSwgdmFsdWUpOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01BdHRyKEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKK3ZvaWQgRE9NQWdlbnQ6OmRpZFJlbW92
ZURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewog
ICAgIGludCBpZCA9IGJvdW5kTm9kZUlkKCZlbGVtZW50KTsKICAgICAvLyBJZiBub2RlIGlzIG5v
dCBtYXBwZWQgeWV0IC0+IGlnbm9yZSB0aGUgZXZlbnQuCkBAIC0xODQ4LDcgKzE4NDgsNyBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IEF0b21pY1N0cmluZyYgbgogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5hdHRyaWJ1
dGVSZW1vdmVkKGlkLCBuYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVB
dHRyaWJ1dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cykKK3Zv
aWQgRE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1l
bnQqPiYgZWxlbWVudHMpCiB7CiAgICAgYXV0byBub2RlSWRzID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9
IGVsZW1lbnRzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewpAQCAtMTg2NSw3ICsxODY1LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1dGVJbnZhbGlkYXRlZChjb25zdCBW
ZWN0b3I8RWxlbWVudCo+JiBlbGVtZW4KICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aW5saW5l
U3R5bGVJbnZhbGlkYXRlZChXVEY6Om1vdmUobm9kZUlkcykpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSYgY2hhcmFjdGVy
RGF0YSkKK3ZvaWQgRE9NQWdlbnQ6OmNoYXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJEYXRh
JiBjaGFyYWN0ZXJEYXRhKQogewogICAgIGludCBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5n
ZXQoJmNoYXJhY3RlckRhdGEpOwogICAgIGlmICghaWQpIHsKQEAgLTE4NzYsNyArMTg3Niw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNoYXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJE
YXRhJiBjaGFyYWN0ZXJEYXRhKQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGFyYWN0ZXJE
YXRhTW9kaWZpZWQoaWQsIGNoYXJhY3RlckRhdGEuZGF0YSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihOb2RlJiBub2RlKQordm9pZCBET01B
Z2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihOb2RlJiBub2RlKQogewogICAgIGludCBpZCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJm5vZGUpOwogICAgIC8vIElmIG5vZGUgaXMgbm90
IG1hcHBlZCB5ZXQgLT4gaWdub3JlIHRoZSBldmVudC4KQEAgLTE4ODgsMTQgKzE4ODgsMTQgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihOb2RlJiBub2Rl
KQogICAgIG1fcmV2YWxpZGF0ZVN0eWxlQXR0clRhc2stPnNjaGVkdWxlRm9yKGRvd25jYXN0PEVs
ZW1lbnQ+KCZub2RlKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFB1c2hTaGFk
b3dSb290KEVsZW1lbnQmIGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCit2b2lkIERPTUFnZW50Ojpk
aWRQdXNoU2hhZG93Um9vdChFbGVtZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQogewogICAg
IGludCBob3N0SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsKICAgICBpZiAo
aG9zdElkKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2hhZG93Um9vdFB1c2hlZCho
b3N0SWQsIGJ1aWxkT2JqZWN0Rm9yTm9kZSgmcm9vdCwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1h
cCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojp3aWxsUG9wU2hhZG93Um9vdChFbGVt
ZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQordm9pZCBET01BZ2VudDo6d2lsbFBvcFNoYWRv
d1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBpbnQgaG9zdElk
ID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7CiAgICAgaW50IHJvb3RJZCA9IG1f
ZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnJvb3QpOwpAQCAtMTkwMyw3ICsxOTAzLDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbFBvcFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hh
ZG93Um9vdCYgcm9vdCkKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNoYWRvd1Jvb3RQ
b3BwZWQoaG9zdElkLCByb290SWQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpmcmFt
ZURvY3VtZW50VXBkYXRlZChGcmFtZSogZnJhbWUpCit2b2lkIERPTUFnZW50OjpmcmFtZURvY3Vt
ZW50VXBkYXRlZChGcmFtZSogZnJhbWUpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTE5MTksNyArMTkxOSw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmZyYW1lRG9jdW1lbnRVcGRhdGVkKEZyYW1lKiBmcmFt
ZSkKICAgICBzZXREb2N1bWVudChkb2N1bWVudCk7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFn
ZW50Ojpub2RlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCitOb2RlKiBET01BZ2VudDo6bm9k
ZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIC8vIFRoZSBwYXRoIGlzIG9mIGZv
cm0gIjEsSFRNTCwyLEJPRFksMSxESVYiCiAgICAgaWYgKCFtX2RvY3VtZW50KQpAQCAtMTk1MCwx
NyArMTk1MCwxNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvclBhdGgoY29uc3Qg
U3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBub2RlOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01B
Z2VudDo6bm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCitOb2RlKiBET01B
Z2VudDo6bm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCiB7CiAgICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5q
ZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSB2YWx1ZSA9IGluamVjdGVkU2NyaXB0LmZpbmRPYmplY3RCeUlkKG9iamVj
dElkKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNjcmlwdFZhbHVlQXNOb2RlKHZh
bHVlKTsKKyAgICByZXR1cm4gRE9NQWdlbnQ6OnNjcmlwdFZhbHVlQXNOb2RlKHZhbHVlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkKK3Zv
aWQgRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBub2RlSWQpCiB7CiAgICAgaWYgKE5vZGUq
IG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKSkKICAgICAgICAgKm5vZGVJZCA9IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQobm9kZSk7CkBAIC0xOTY4LDcgKzE5NjgsNyBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdAogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiTm8gbm9kZSB3aXRo
IGdpdmVuIHBhdGggZm91bmQiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5v
ZGVCeUJhY2tlbmRJZFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBCYWNrZW5k
Tm9kZUlkIGJhY2tlbmROb2RlSWQsIGludCogbm9kZUlkKQordm9pZCBET01BZ2VudDo6cHVzaE5v
ZGVCeUJhY2tlbmRJZFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBCYWNrZW5k
Tm9kZUlkIGJhY2tlbmROb2RlSWQsIGludCogbm9kZUlkKQogewogICAgIGlmICghbV9iYWNrZW5k
SWRUb05vZGUuY29udGFpbnMoYmFja2VuZE5vZGVJZCkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcg
PSBBU0NJSUxpdGVyYWwoIk5vIG5vZGUgd2l0aCBnaXZlbiBiYWNrZW5kIGlkIGZvdW5kIik7CkBA
IC0xOTg1LDcgKzE5ODUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZUJ5QmFj
a2VuZElkVG9Gcm9udGVuZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsCiAgICAgfQogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0
b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RH
cm91cCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
IERPTUFnZW50OjpyZXNvbHZlTm9kZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG9iamVjdEdy
b3VwKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQpAQCAtMTk5NiwxMCArMTk5NiwxMCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2
ZU5vZAogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QoSW5zcGVjdG9yRE9N
QWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLCBub2RlKSwgb2JqZWN0R3JvdXAp
OworICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KERPTUFnZW50Ojpub2RlQXNT
Y3JpcHRWYWx1ZShzY3JpcHRTdGF0ZSwgbm9kZSksIG9iamVjdEdyb3VwKTsKIH0KIAotTm9kZSog
SW5zcGVjdG9yRE9NQWdlbnQ6OnNjcmlwdFZhbHVlQXNOb2RlKERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIHZhbHVlKQorTm9kZSogRE9NQWdlbnQ6OnNjcmlwdFZhbHVlQXNOb2RlKERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1
ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDA3LDcgKzIwMDcsNyBA
QCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6c2NyaXB0VmFsdWVBc05vZGUoRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIEpTTm9kZTo6dG9XcmFwcGVkKHZhbHVlLmpz
VmFsdWUoKSk7CiB9CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIEluc3BlY3RvckRPTUFnZW50
Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCitE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBET01BZ2VudDo6bm9kZUFzU2NyaXB0VmFsdWUoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghc2hvdWxkQWxsb3dBY2Nl
c3NUb05vZGUoc3RhdGUsIG5vZGUpKQogICAgICAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUoc3RhdGUtPnZtKCksIEpTQzo6anNOdWxsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA5ZmM5NTI1ZGI3Y2ZjNDI1ZmFlOWYxMzli
OWZkZTdiMTc5YWE2ZmFiLi45NGM2MmVlMDM1Mjk3M2NhYzViMGVjYTM5NGQ2NzBlMWFkZGM2MGQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAt
NTQsNyArNTQsNyBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiB9CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICAKKwogY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIENv
bnRhaW5lck5vZGU7CiBjbGFzcyBDaGFyYWN0ZXJEYXRhOwpAQCAtNjQsMTIgKzY0LDEyIEBAIGNs
YXNzIEVsZW1lbnQ7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEluc3BlY3Rvckhpc3Rvcnk7CiBjbGFz
cyBJbnNwZWN0b3JPdmVybGF5OwotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSGl0
VGVzdFJlc3VsdDsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50
czsKIGNsYXNzIE5hbWVOb2RlTWFwOwogY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2VBZ2VudDsKIGNs
YXNzIFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2s7CiBjbGFzcyBTaGFkb3dSb290OwogCkBA
IC05MSw4ICs5MSw4IEBAIHN0cnVjdCBFdmVudExpc3RlbmVySW5mbyB7CiAgICAgY29uc3QgRXZl
bnRMaXN0ZW5lclZlY3RvciBldmVudExpc3RlbmVyVmVjdG9yOwogfTsKIAotY2xhc3MgSW5zcGVj
dG9yRE9NQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5z
cGVjdG9yOjpET01CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckRPTUFnZW50KTsKK2NsYXNzIERPTUFnZW50IGZpbmFsIDogcHVibGlj
IFdlYkFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RE9NQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShET01BZ2VudCk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgc3RydWN0IERPTUxpc3RlbmVyIHsKQEAgLTEw
NCw4ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb2RpZnlET01B
dHRyKEVsZW1lbnQqKSA9IDA7CiAgICAgfTsKIAotICAgIEluc3BlY3RvckRPTUFnZW50KEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJbnNwZWN0b3I6OkluamVjdGVk
U2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkqKTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0
b3JET01BZ2VudCgpOworICAgIERPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlQWdl
bnQqLCBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkq
KTsKKyAgICB2aXJ0dWFsIH5ET01BZ2VudCgpOwogCiAgICAgc3RhdGljIFN0cmluZyB0b0Vycm9y
U3RyaW5nKGNvbnN0IEV4Y2VwdGlvbkNvZGUmKTsKIApAQCAtMjA5LDcgKzIwOSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbm9kZUFzU2NyaXB0VmFsdWUo
SlNDOjpFeGVjU3RhdGUqLCBOb2RlKik7CiAKICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIG90
aGVyIGFnZW50cy4KLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCgpIHsgcmV0dXJu
IG1fcGFnZUFnZW50OyB9CisgICAgUGFnZUFnZW50KiBwYWdlQWdlbnQoKSB7IHJldHVybiBtX3Bh
Z2VBZ2VudDsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShFcnJv
clN0cmluZyYsIGJvb2wgZW5hYmxlZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGhpZ2hs
aWdodENvbmZpZyk7CkBAIC0yNDMsNyArMjQzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5u
ZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+LCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VD
b29yZGluYXRlcyk7CiAKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OworICAg
IFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3BlY3Rvck92ZXJsYXkqIG1f
b3ZlcmxheTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpET01Gcm9udGVuZERpc3Bh
dGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGY3NzhkZDk2MmNi
MmRkYzE2MDYzMTc0NmE5OTViZGRhMGE5YjI3OGIuLjc3Y2ZkMzI0NjAxMDJlY2YyMmJhNjVjY2Rh
NGQzOGJhN2YwNTk1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKQEAgLTU5LDggKzU5LDggQEAgdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCwgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCkKLSAgICA6IEluc3BlY3RvckFnZW50
QmFzZShBU0NJSUxpdGVyYWwoIkRPTURlYnVnZ2VyIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCitE
T01EZWJ1Z2dlckFnZW50OjpET01EZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMsIERPTUFnZW50KiBkb21BZ2VudCwgRGVidWdnZXJBZ2VudCogZGVi
dWdnZXJBZ2VudCkKKyAgICA6IFdlYkFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkRPTURlYnVnZ2Vy
IiksIGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX2RvbUFnZW50KGRvbUFnZW50KQogICAg
ICwgbV9kZWJ1Z2dlckFnZW50KGRlYnVnZ2VyQWdlbnQpCiAgICAgLCBtX3BhdXNlSW5OZXh0RXZl
bnRMaXN0ZW5lcihmYWxzZSkKQEAgLTY5LDczICs2OSw3MyBAQCBJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50OjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydQogICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0TGlzdGVuZXIodGhpcyk7CiB9CiAKLUluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkKK0RPTURl
YnVnZ2VyQWdlbnQ6On5ET01EZWJ1Z2dlckFnZW50KCkKIHsKICAgICBBU1NFUlQoIW1fZGVidWdn
ZXJBZ2VudCk7Ci0gICAgQVNTRVJUKCFtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQoKSk7CisgICAgQVNTRVJUKCFtX2luc3RydW1lbnRpbmdBZ2VudHMtPmRv
bURlYnVnZ2VyQWdlbnQoKSk7CiB9CiAKIC8vIEJyb3dzZXIgZGVidWdnZXIgYWdlbnQgZW5hYmxl
ZCBvbmx5IHdoZW4gSlMgZGVidWdnZXIgaXMgZW5hYmxlZC4KLXZvaWQgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6ZGVidWdnZXJXYXNFbmFibGVkKCkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6
ZGVidWdnZXJXYXNFbmFibGVkKCkKIHsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQodGhpcyk7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRz
LT5zZXRET01EZWJ1Z2dlckFnZW50KHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OmRlYnVnZ2VyV2FzRGlzYWJsZWQoKQordm9pZCBET01EZWJ1Z2dlckFnZW50Ojpk
ZWJ1Z2dlcldhc0Rpc2FibGVkKCkKIHsKICAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudDo6c3RlcEludG8oKQordm9pZCBET01EZWJ1Z2dlckFnZW50Ojpz
dGVwSW50bygpCiB7CiAgICAgbV9wYXVzZUluTmV4dEV2ZW50TGlzdGVuZXIgPSB0cnVlOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKCkKK3ZvaWQgRE9NRGVi
dWdnZXJBZ2VudDo6ZGlkUGF1c2UoKQogewogICAgIG1fcGF1c2VJbk5leHRFdmVudExpc3RlbmVy
ID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgp
Cit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQogewotICAgIG1faW5zdHJ1bWVudGlu
Z0FnZW50cy0+c2V0SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudChudWxscHRyKTsKKyAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMtPnNldERPTURlYnVnZ2VyQWdlbnQobnVsbHB0cik7CiAgICAgY2xl
YXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkaWRDcmVhdGVGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3ZvaWQgRE9NRGVidWdnZXJBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
KiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3Rvcjo6RE9NRGVidWdnZXJCYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OndpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAgICBkaXNhYmxlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlzY2FyZEFnZW50KCkKK3ZvaWQgRE9NRGVi
dWdnZXJBZ2VudDo6ZGlzY2FyZEFnZW50KCkKIHsKICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldExp
c3RlbmVyKG51bGxwdHIpOwogICAgIG1fZGVidWdnZXJBZ2VudCA9IG51bGxwdHI7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKK3ZvaWQgRE9N
RGVidWdnZXJBZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKIHsKICAgICBtX2RvbUJyZWFrcG9pbnRz
LmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50
TmFtZSkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQo
RXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBzZXRC
cmVha3BvaW50KGVycm9yLCBTdHJpbmcobGlzdGVuZXJFdmVudENhdGVnb3J5VHlwZSkgKyBldmVu
dE5hbWUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldEluc3RydW1l
bnRhdGlvbkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50
TmFtZSkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6c2V0SW5zdHJ1bWVudGF0aW9uQnJlYWtwb2lu
dChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQogewogICAgIHNl
dEJyZWFrcG9pbnQoZXJyb3IsIFN0cmluZyhpbnN0cnVtZW50YXRpb25FdmVudENhdGVnb3J5VHlw
ZSkgKyBldmVudE5hbWUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkK
K3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3Is
IGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQogewogICAgIGlmIChldmVudE5hbWUuaXNFbXB0eSgp
KSB7CiAgICAgICAgIGVycm9yID0gQVNDSUlMaXRlcmFsKCJFdmVudCBuYW1lIGlzIGVtcHR5Iik7
CkBAIC0xNDUsMTcgKzE0NSwxNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmCiAgICAgbV9ldmVu
dExpc3RlbmVyQnJlYWtwb2ludHMuYWRkKGV2ZW50TmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKK3ZvaWQgRE9NRGVidWdnZXJBZ2Vu
dDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25z
dCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICByZW1vdmVCcmVha3BvaW50KGVycm9yLCBTdHJp
bmcobGlzdGVuZXJFdmVudENhdGVnb3J5VHlwZSkgKyBldmVudE5hbWUpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZUluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQo
RXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKK3ZvaWQgRE9NRGVi
dWdnZXJBZ2VudDo6cmVtb3ZlSW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3IsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQogewogICAgIHJlbW92ZUJyZWFrcG9pbnQo
ZXJyb3IsIFN0cmluZyhpbnN0cnVtZW50YXRpb25FdmVudENhdGVnb3J5VHlwZSkgKyBldmVudE5h
bWUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKK3ZvaWQgRE9N
RGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0
IFN0cmluZyYgZXZlbnROYW1lKQogewogICAgIGlmIChldmVudE5hbWUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGVycm9yID0gQVNDSUlMaXRlcmFsKCJFdmVudCBuYW1lIGlzIGVtcHR5Iik7CkBAIC0x
NjUsNyArMTY1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVh
a3BvaW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW4KICAgICBtX2V2ZW50TGlzdGVu
ZXJCcmVha3BvaW50cy5yZW1vdmUoZXZlbnROYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKE5vZGUmIG5vZGUpCit2b2lkIERP
TURlYnVnZ2VyQWdlbnQ6OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkKIHsKICAg
ICBpZiAoaGFzQnJlYWtwb2ludCgmbm9kZSwgQXR0cmlidXRlTW9kaWZpZWQpKSB7CiAgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CkBAIC0xNzQsMzAgKzE3NCwzMCBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6
OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkKICAgICB9CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQordm9p
ZCBET01EZWJ1Z2dlckFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUmIG5vZGUpCiB7CiAgICAg
aWYgKG1fZG9tQnJlYWtwb2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgIHVpbnQzMl90IG1hc2sgPSBt
X2RvbUJyZWFrcG9pbnRzLmdldChJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKCZu
b2RlKSk7CisgICAgICAgIHVpbnQzMl90IG1hc2sgPSBtX2RvbUJyZWFrcG9pbnRzLmdldChET01B
Z2VudDo6aW5uZXJQYXJlbnROb2RlKCZub2RlKSk7CiAgICAgICAgIHVpbnQzMl90IGluaGVyaXRh
YmxlVHlwZXNNYXNrID0gKG1hc2sgfCAobWFzayA+PiBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVT
aGlmdCkpICYgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrOwogICAgICAgICBpZiAo
aW5oZXJpdGFibGVUeXBlc01hc2spCiAgICAgICAgICAgICB1cGRhdGVTdWJ0cmVlQnJlYWtwb2lu
dHMoJm5vZGUsIGluaGVyaXRhYmxlVHlwZXNNYXNrLCB0cnVlKTsKICAgICB9CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQor
dm9pZCBET01EZWJ1Z2dlckFnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUmIG5vZGUpCiB7CiAg
ICAgaWYgKG1fZG9tQnJlYWtwb2ludHMuc2l6ZSgpKSB7CiAgICAgICAgIC8vIFJlbW92ZSBzdWJ0
cmVlIGJyZWFrcG9pbnRzLgogICAgICAgICBtX2RvbUJyZWFrcG9pbnRzLnJlbW92ZSgmbm9kZSk7
Ci0gICAgICAgIFZlY3RvcjxOb2RlKj4gc3RhY2soMSwgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVy
Rmlyc3RDaGlsZCgmbm9kZSkpOworICAgICAgICBWZWN0b3I8Tm9kZSo+IHN0YWNrKDEsIERPTUFn
ZW50Ojppbm5lckZpcnN0Q2hpbGQoJm5vZGUpKTsKICAgICAgICAgZG8gewogICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IHN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3Qo
KTsKICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIG1fZG9tQnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpOwotICAgICAgICAgICAgc3Rh
Y2suYXBwZW5kKEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hpbGQobm9kZSkpOwotICAg
ICAgICAgICAgc3RhY2suYXBwZW5kKEluc3BlY3RvckRPTUFnZW50Ojppbm5lck5leHRTaWJsaW5n
KG5vZGUpKTsKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZChET01BZ2VudDo6aW5uZXJGaXJzdENo
aWxkKG5vZGUpKTsKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZChET01BZ2VudDo6aW5uZXJOZXh0
U2libGluZyhub2RlKSk7CiAgICAgICAgIH0gd2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpOwogICAg
IH0KIH0KQEAgLTIyNSw3ICsyMjUsNyBAQCBzdGF0aWMgU3RyaW5nIGRvbVR5cGVOYW1lKGludCB0
eXBlKQogICAgIHJldHVybiAiIjsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
OjpzZXRET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwg
Y29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQordm9pZCBET01EZWJ1Z2dlckFnZW50OjpzZXRET01C
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3Ry
aW5nJiB0eXBlU3RyaW5nKQogewogICAgIE5vZGUqIG5vZGUgPSBtX2RvbUFnZW50LT5hc3NlcnRO
b2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTIzOCwxMiArMjM4
LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgdWludDMyX3Qgcm9vdEJpdCA9IDEg
PDwgdHlwZTsKICAgICBtX2RvbUJyZWFrcG9pbnRzLnNldChub2RlLCBtX2RvbUJyZWFrcG9pbnRz
LmdldChub2RlKSB8IHJvb3RCaXQpOwogICAgIGlmIChyb290Qml0ICYgaW5oZXJpdGFibGVET01C
cmVha3BvaW50VHlwZXNNYXNrKSB7Ci0gICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBJbnNwZWN0
b3JET01BZ2VudDo6aW5uZXJGaXJzdENoaWxkKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBJbnNwZWN0
b3JET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhjaGlsZCkpCisgICAgICAgIGZvciAoTm9kZSog
Y2hpbGQgPSBET01BZ2VudDo6aW5uZXJGaXJzdENoaWxkKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBE
T01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhjaGlsZCkpCiAgICAgICAgICAgICB1cGRhdGVTdWJ0
cmVlQnJlYWtwb2ludHMoY2hpbGQsIHJvb3RCaXQsIHRydWUpOwogICAgIH0KIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQordm9p
ZCBET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQogewogICAgIE5v
ZGUqIG5vZGUgPSBtX2RvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwog
ICAgIGlmICghbm9kZSkKQEAgLTI2MCwxMiArMjYwLDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGluCiAgICAgICAgIG1fZG9tQnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpOwogCiAgICAgaWYgKChy
b290Qml0ICYgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrKSAmJiAhKG1hc2sgJiAo
cm9vdEJpdCA8PCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCkpKSB7Ci0gICAgICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJGaXJzdENoaWxkKG5vZGUp
OyBjaGlsZDsgY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhjaGls
ZCkpCisgICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBET01BZ2VudDo6aW5uZXJGaXJzdENoaWxk
KG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhjaGlsZCkp
CiAgICAgICAgICAgICB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoY2hpbGQsIHJvb3RCaXQsIGZh
bHNlKTsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbElu
c2VydERPTU5vZGUoTm9kZSYgcGFyZW50KQordm9pZCBET01EZWJ1Z2dlckFnZW50Ojp3aWxsSW5z
ZXJ0RE9NTm9kZShOb2RlJiBwYXJlbnQpCiB7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQoJnBhcmVu
dCwgU3VidHJlZU1vZGlmaWVkKSkgewogICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBldmVu
dERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtMjc0LDkgKzI3NCw5IEBAIHZv
aWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbEluc2VydERPTU5vZGUoTm9kZSYgcGFy
ZW50KQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVt
b3ZlRE9NTm9kZShOb2RlJiBub2RlKQordm9pZCBET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3Zl
RE9NTm9kZShOb2RlJiBub2RlKQogewotICAgIE5vZGUqIHBhcmVudE5vZGUgPSBJbnNwZWN0b3JE
T01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKCZub2RlKTsKKyAgICBOb2RlKiBwYXJlbnROb2RlID0g
RE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSgmbm9kZSk7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQo
Jm5vZGUsIE5vZGVSZW1vdmVkKSkgewogICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBldmVu
dERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBkZXNjcmlwdGlvbkZv
ckRPTUV2ZW50KG5vZGUsIE5vZGVSZW1vdmVkLCBmYWxzZSwgZXZlbnREYXRhLmdldCgpKTsKQEAg
LTI4OCw3ICsyODgsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1v
dmVET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQpCit2b2lkIERPTURl
YnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAg
aWYgKGhhc0JyZWFrcG9pbnQoJmVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkKSkgewogICAgICAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwpAQCAtMjk3LDcgKzI5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
d2lsbE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCkKICAgICB9CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlJiB0YXJn
ZXQsIGludCBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIEluc3BlY3Rvck9iamVjdCYg
ZGVzY3JpcHRpb24pCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZl
bnQoTm9kZSYgdGFyZ2V0LCBpbnQgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNw
ZWN0b3JPYmplY3QmIGRlc2NyaXB0aW9uKQogewogICAgIEFTU0VSVChoYXNCcmVha3BvaW50KCZ0
YXJnZXQsIGJyZWFrcG9pbnRUeXBlKSk7CiAKQEAgLTMwNSwxNSArMzA1LDE1IEBAIHZvaWQgSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlJiB0YXJn
ZXQsIGludCBicmVha3BvCiAgICAgaWYgKCgxIDw8IGJyZWFrcG9pbnRUeXBlKSAmIGluaGVyaXRh
YmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgewogICAgICAgICAvLyBGb3IgaW5oZXJpdGFibGUg
YnJlYWtwb2ludCB0eXBlcywgdGFyZ2V0IG5vZGUgaXNuJ3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRo
ZSBub2RlIHRoYXQgb3ducyBhIGJyZWFrcG9pbnQuCiAgICAgICAgIC8vIFRhcmdldCBub2RlIG1h
eSBiZSB1bmtub3duIHRvIGZyb250ZW5kLCBzbyB3ZSBuZWVkIHRvIHB1c2ggaXQgZmlyc3QuCi0g
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
IHRhcmdldE5vZGVPYmplY3QgPSBtX2RvbUFnZW50LT5yZXNvbHZlTm9kZSgmdGFyZ2V0LCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCk7CisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHRhcmdldE5vZGVP
YmplY3QgPSBtX2RvbUFnZW50LT5yZXNvbHZlTm9kZSgmdGFyZ2V0LCBEZWJ1Z2dlckFnZW50Ojpi
YWNrdHJhY2VPYmplY3RHcm91cCk7CiAgICAgICAgIGRlc2NyaXB0aW9uLnNldFZhbHVlKCJ0YXJn
ZXROb2RlIiwgdGFyZ2V0Tm9kZU9iamVjdCk7CiAKICAgICAgICAgLy8gRmluZCBicmVha3BvaW50
IG93bmVyIG5vZGUuCiAgICAgICAgIGlmICghaW5zZXJ0aW9uKQotICAgICAgICAgICAgYnJlYWtw
b2ludE93bmVyID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSgmdGFyZ2V0KTsK
KyAgICAgICAgICAgIGJyZWFrcG9pbnRPd25lciA9IERPTUFnZW50Ojppbm5lclBhcmVudE5vZGUo
JnRhcmdldCk7CiAgICAgICAgIEFTU0VSVChicmVha3BvaW50T3duZXIpOwogICAgICAgICB3aGls
ZSAoIShtX2RvbUJyZWFrcG9pbnRzLmdldChicmVha3BvaW50T3duZXIpICYgKDEgPDwgYnJlYWtw
b2ludFR5cGUpKSkgewotICAgICAgICAgICAgTm9kZSogcGFyZW50Tm9kZSA9IEluc3BlY3RvckRP
TUFnZW50Ojppbm5lclBhcmVudE5vZGUoYnJlYWtwb2ludE93bmVyKTsKKyAgICAgICAgICAgIE5v
ZGUqIHBhcmVudE5vZGUgPSBET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKGJyZWFrcG9pbnRPd25l
cik7CiAgICAgICAgICAgICBpZiAoIXBhcmVudE5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBicmVha3BvaW50T3duZXIgPSBwYXJlbnROb2RlOwpAQCAtMzI5LDE0ICsz
MjksMTQgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRP
TUV2ZW50KE5vZGUmIHRhcmdldCwgaW50IGJyZWFrcG8KICAgICBkZXNjcmlwdGlvbi5zZXRTdHJp
bmcoInR5cGUiLCBkb21UeXBlTmFtZShicmVha3BvaW50VHlwZSkpOwogfQogCi1ib29sIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgaW50IHR5cGUp
Citib29sIERPTURlYnVnZ2VyQWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgaW50IHR5
cGUpCiB7CiAgICAgdWludDMyX3Qgcm9vdEJpdCA9IDEgPDwgdHlwZTsKICAgICB1aW50MzJfdCBk
ZXJpdmVkQml0ID0gcm9vdEJpdCA8PCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdDsKICAg
ICByZXR1cm4gbV9kb21CcmVha3BvaW50cy5nZXQobm9kZSkgJiAocm9vdEJpdCB8IGRlcml2ZWRC
aXQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnVwZGF0ZVN1YnRyZWVC
cmVha3BvaW50cyhOb2RlKiBub2RlLCB1aW50MzJfdCByb290TWFzaywgYm9vbCBzZXQpCit2b2lk
IERPTURlYnVnZ2VyQWdlbnQ6OnVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiBub2RlLCB1
aW50MzJfdCByb290TWFzaywgYm9vbCBzZXQpCiB7CiAgICAgdWludDMyX3Qgb2xkTWFzayA9IG1f
ZG9tQnJlYWtwb2ludHMuZ2V0KG5vZGUpOwogICAgIHVpbnQzMl90IGRlcml2ZWRNYXNrID0gcm9v
dE1hc2sgPDwgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQ7CkBAIC0zNTAsMTEgKzM1MCwx
MSBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnVwZGF0ZVN1YnRyZWVCcmVha3Bv
aW50cyhOb2RlKiBub2RlLCB1aW50MzJfdCBybwogICAgIGlmICghbmV3Um9vdE1hc2spCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGZvciAoTm9kZSogY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6
aW5uZXJGaXJzdENoaWxkKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6
aW5uZXJOZXh0U2libGluZyhjaGlsZCkpCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IERPTUFnZW50
Ojppbm5lckZpcnN0Q2hpbGQobm9kZSk7IGNoaWxkOyBjaGlsZCA9IERPTUFnZW50Ojppbm5lck5l
eHRTaWJsaW5nKGNoaWxkKSkKICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKGNoaWxk
LCBuZXdSb290TWFzaywgc2V0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
OjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChib29sIGlzRE9NRXZlbnQsIGNvbnN0IFN0cmlu
ZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3VzKQordm9pZCBET01EZWJ1Z2dlckFnZW50Ojpw
YXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChib29sIGlzRE9NRXZlbnQsIGNvbnN0IFN0cmluZyYg
ZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3VzKQogewogICAgIFN0cmluZyBmdWxsRXZlbnROYW1l
ID0gKGlzRE9NRXZlbnQgPyBsaXN0ZW5lckV2ZW50Q2F0ZWdvcnlUeXBlIDogaW5zdHJ1bWVudGF0
aW9uRXZlbnRDYXRlZ29yeVR5cGUpICsgZXZlbnROYW1lOwogICAgIGlmIChtX3BhdXNlSW5OZXh0
RXZlbnRMaXN0ZW5lcikKQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OnBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGJvb2wgaXNET01FdmVudCwgY29u
cwogICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQo
SW5zcGVjdG9yOjpEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFdmVudExpc3Rl
bmVyLCBXVEY6Om1vdmUoZXZlbnREYXRhKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudDo6c2V0WEhSQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJs
KQordm9pZCBET01EZWJ1Z2dlckFnZW50OjpzZXRYSFJCcmVha3BvaW50KEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKICAgICAgICAg
bV9wYXVzZU9uQWxsWEhSc0VuYWJsZWQgPSB0cnVlOwpAQCAtMzgyLDcgKzM4Miw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0WEhSQnJlYWtwb2ludChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgdXJsCiAgICAgbV94aHJCcmVha3BvaW50cy5hZGQodXJsKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVYSFJCcmVha3BvaW50KEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OnJlbW92
ZVhIUkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBp
ZiAodXJsLmlzRW1wdHkoKSkgewogICAgICAgICBtX3BhdXNlT25BbGxYSFJzRW5hYmxlZCA9IGZh
bHNlOwpAQCAtMzkyLDcgKzM5Miw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
cmVtb3ZlWEhSQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYKICAgICBtX3ho
ckJyZWFrcG9pbnRzLnJlbW92ZSh1cmwpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIERP
TURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwp
CiB7CiAgICAgU3RyaW5nIGJyZWFrcG9pbnRVUkw7CiAgICAgaWYgKG1fcGF1c2VPbkFsbFhIUnNF
bmFibGVkKQpAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKICAgICBtX2RlYnVn
Z2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3I6OkRlYnVnZ2VyRnJvbnRlbmREaXNwYXRj
aGVyOjpSZWFzb246OlhIUiwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6OmNsZWFyKCkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6Y2xl
YXIoKQogewogICAgIG1fZG9tQnJlYWtwb2ludHMuY2xlYXIoKTsKICAgICBtX3BhdXNlSW5OZXh0
RXZlbnRMaXN0ZW5lciA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgKaW5kZXggYWZlM2NmYjlkMzA5NTVkZmEzMzI5
NWVmMDk5ZWJmZmNhMjQ3Y2U2Ny4uOTVjNjI5YTM4MjlmYTE5MDNjMGFhMTFhMTNkY2Q5YzQ1MjMy
N2NjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudC5oCkBAIC00NCwxOSArNDQsMTkgQEAgY2xhc3MgSW5zcGVjdG9yT2JqZWN0
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERPTUFnZW50OwogY2xhc3MgRWxlbWVu
dDsKLWNsYXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsK
IGNsYXNzIE5vZGU7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwg
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6TGlzdGVuZXIsIHB1Ymxp
YyBJbnNwZWN0b3I6OkRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KTsKK2NsYXNzIERP
TURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVj
dG9yOjpEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lciwgcHVibGljIEluc3BlY3Rvcjo6RE9NRGVidWdn
ZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERP
TURlYnVnZ2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3Bl
Y3RvckRPTUFnZW50KiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Kik7Ci0gICAg
dmlydHVhbCB+SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpOworICAgIERPTURlYnVnZ2VyQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIERPTUFnZW50KiwgSW5zcGVjdG9yOjpEZWJ1Z2dlckFn
ZW50Kik7CisgICAgdmlydHVhbCB+RE9NRGVidWdnZXJBZ2VudCgpOwogCiAgICAgLy8gRE9NRGVi
dWdnZXIgQVBJCiAgICAgdmlydHVhbCB2b2lkIHNldFhIUkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHVybCkgb3ZlcnJpZGU7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZGlzY2FyZEFnZW50KCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0g
ICAgLy8gSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lciBpbXBsZW1l
bnRhdGlvbi4KKyAgICAvLyBJbnNwZWN0b3I6OkRlYnVnZ2VyQWdlbnQ6Okxpc3RlbmVyIGltcGxl
bWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBkZWJ1Z2dlcldhc0VuYWJsZWQoKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgZGVidWdnZXJXYXNEaXNhYmxlZCgpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBzdGVwSW50bygpIG92ZXJyaWRlOwpAQCAtOTksOCArOTksOCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBjbGVhcigpOwogCi0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1fZG9t
QWdlbnQ7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBtX2RlYnVnZ2Vy
QWdlbnQ7CisgICAgRE9NQWdlbnQqIG1fZG9tQWdlbnQ7CisgICAgSW5zcGVjdG9yOjpEZWJ1Z2dl
ckFnZW50KiBtX2RlYnVnZ2VyQWdlbnQ7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6RE9NRGVidWdn
ZXJCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBIYXNoTWFwPE5v
ZGUqLCB1aW50MzJfdD4gbV9kb21CcmVha3BvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9l
dmVudExpc3RlbmVyQnJlYWtwb2ludHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4IDhlNTIzZmZiOGNkNGZkZmZi
ZDRkNmE2NmUzMzRkM2Y1ODBiMDdmYmEuLjg1MWVmYjNjNGM4NTdjM2E5NGNkMDNhM2FhNjhkOWEz
NDdjNmEyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC01MiwyNyArNTIsMjcgQEAgdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCkKLSAgICA6IElu
c3BlY3RvckFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkRPTVN0b3JhZ2UiKSwgaW5zdHJ1bWVudGlu
Z0FnZW50cykKK0RPTVN0b3JhZ2VBZ2VudDo6RE9NU3RvcmFnZUFnZW50KEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2VBZ2VudCogcGFnZUFnZW50KQorICAgIDog
V2ViQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiRE9NU3RvcmFnZSIpLCBpbnN0cnVtZW50aW5nQWdl
bnRzKQogICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQogICAgICwgbV9lbmFibGVkKGZhbHNl
KQogewotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0RE9NU3RvcmFnZUFnZW50
KHRoaXMpOwogfQogCi1JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6On5JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQoKQorRE9NU3RvcmFnZUFnZW50Ojp+RE9NU3RvcmFnZUFnZW50KCkKIHsKLSAgICBt
X2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChudWxscHRy
KTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldERPTVN0b3JhZ2VBZ2VudChudWxscHRy
KTsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMgPSBudWxscHRyOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQordm9pZCBET01TdG9yYWdlQWdlbnQ6OmRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRl
bmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVj
dG9yOjpET01TdG9yYWdlRnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwogICAg
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3I6OkRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKK3ZvaWQgRE9NU3RvcmFnZUFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xl
YXIoKTsKQEAgLTgxLDE3ICs4MSwxNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZQogICAgIGRp
c2FibGUodW51c2VkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmVuYWJs
ZShFcnJvclN0cmluZyYpCit2b2lkIERPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5n
JikKIHsKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCit2b2lkIERPTVN0b3JhZ2VBZ2VudDo6ZGlz
YWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+PiYgaXRlbXMpCit2b2lkIERPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFn
ZUl0ZW1zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4mIGl0ZW1zKQogewogICAgIEZyYW1lKiBm
cmFtZTsKICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VB
cmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQuY29weVJlZigpLCBmcmFtZSk7CkBAIC0xMTUsNyAr
MTE1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVt
cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICBpdGVtcyA9IFdURjo6bW92ZShz
dG9yYWdlSXRlbXMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9N
U3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpCit2b2lkIERPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJ
ZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgRnJhbWUq
IGZyYW1lOwogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFn
ZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZC5jb3B5UmVmKCksIGZyYW1lKTsKQEAgLTEzMCw3
ICsxMzAsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0
ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAgICBlcnJvclN0cmluZyA9
IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihRVU9UQV9FWENFRURFRF9FUlIpLm5hbWU7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgc3Rv
cmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVE
T01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBGcmFt
ZSogZnJhbWU7CiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLmNvcHlSZWYoKSwgZnJhbWUpOwpAQCAtMTQy
LDcgKzE0Miw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9y
YWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvCiAgICAgc3RvcmFnZUFyZWEtPnJl
bW92ZUl0ZW0oZnJhbWUsIGtleSk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OnN0b3JhZ2VJZChTdG9yYWdlKiBzdG9yYWdlKQorU3RyaW5nIERPTVN0b3JhZ2VBZ2VudDo6
c3RvcmFnZUlkKFN0b3JhZ2UqIHN0b3JhZ2UpCiB7CiAgICAgQVNTRVJUKHN0b3JhZ2UpOwogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHN0b3JhZ2UtPmZyYW1lKCktPmRvY3VtZW50KCk7CkBAIC0x
NTQsNyArMTU0LDcgQEAgU3RyaW5nIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlk
KFN0b3JhZ2UqIHN0b3JhZ2UpCiAgICAgcmV0dXJuIHN0b3JhZ2VJZChzZWN1cml0eU9yaWdpbi5n
ZXQoKSwgaXNMb2NhbFN0b3JhZ2UpLT50b0pTT05TdHJpbmcoKTsKIH0KIAotUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29sIGlz
TG9jYWxTdG9yYWdlKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0
b3JhZ2VJZD4gRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luLCBib29sIGlzTG9jYWxTdG9yYWdlKQogewogICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRT
ZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbi0+dG9SYXdTdHJpbmcoKSkKQEAgLTE2Miw3ICsx
NjIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlk
PiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0bwogICAgICAgICAucmVsZWFzZSgpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZl
bnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmlu
ZyYgbmV3VmFsdWUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4sIFBhZ2UqKQordm9pZCBET01TdG9yYWdlQWdlbnQ6OmRpZERpc3BhdGNoRE9N
U3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBQYWdlKikKIHsKICAgICBpZiAoIW1fZnJvbnRlbmREaXNw
YXRjaGVyIHx8ICFtX2VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTE3OSw3ICsxNzksNyBA
QCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZl
bnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbgogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
ZG9tU3RvcmFnZUl0ZW1VcGRhdGVkKGlkLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CiB9CiAK
LVJlZlB0cjxTdG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpmaW5kU3RvcmFn
ZUFyZWEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJiB0YXJnZXRGcmFtZSkKK1JlZlB0cjxTdG9yYWdlQXJl
YT4gRE9NU3RvcmFnZUFnZW50OjpmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJiB0
YXJnZXRGcmFtZSkKIHsKICAgICBTdHJpbmcgc2VjdXJpdHlPcmlnaW47CiAgICAgYm9vbCBpc0xv
Y2FsU3RvcmFnZSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCmluZGV4IGJlYmQxZWY0MTJmMmRiZmI2MTNhNzEzYWJk
NDhhNzI0NDJkMzZiMjYuLmY2ZWI3NTY3ZjZjNDJmNjU3NmE5ZjUwZmYyNWM5MmJkNDdhODhjOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50LmgKQEAgLTQzLDE5ICs0MywxOSBAQCBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7
CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgUGFnZTsKK2NsYXNzIFBhZ2VBZ2Vu
dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU3RvcmFnZTsKIAogdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCBmaW5hbCA6
IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTVN0b3JhZ2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworY2xhc3MgRE9NU3RvcmFnZUFnZW50IGZpbmFsIDog
cHVibGljIFdlYkFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RE9NU3RvcmFnZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNw
ZWN0b3JQYWdlQWdlbnQqKTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQo
KTsKKyAgICBET01TdG9yYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2VBZ2VudCop
OworICAgIHZpcnR1YWwgfkRPTVN0b3JhZ2VBZ2VudCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KSBvdmVycmlkZTsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBSZWZQ
dHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiwgRnJhbWUqJik7CiAKLSAgICBJbnNwZWN0
b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OworICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6RE9NU3RvcmFnZUZyb250ZW5kRGlzcGF0Y2hl
cj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6RE9NU3RvcmFn
ZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIGJvb2wgbV9lbmFi
bGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwCmluZGV4IDkxMzRkZmU0N2M3OWM2YzZlZjQ0MTM0NDUyMGI3MDQ2ZTFkNWRjMTMu
Ljk2MWJlNDAyNjdhOTcwZjQyY2RmNjAxYmIzYmQ1NDM1YWM0ODE4NTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTE5
MSw3ICsxOTEsNyBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZQogCi12b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OmRpZE9wZW5EYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRh
YmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKQordm9pZCBEYXRhYmFzZUFnZW50OjpkaWRPcGVuRGF0YWJhc2UoUGFzc1Jl
ZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKICAgICBpZiAoSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZSogcmVzb3VyY2UgPSBmaW5kQnlGaWxlTmFtZShkYXRhYmFzZS0+ZmlsZU5h
bWUoKSkpIHsKICAgICAgICAgcmVzb3VyY2UtPnNldERhdGFiYXNlKGRhdGFiYXNlKTsKQEAgLTIw
NSwzMCArMjA1LDMwIEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlkT3BlbkRhdGFi
YXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zCiAgICAgICAgIHJlc291cmNl
LT5iaW5kKG1fZnJvbnRlbmREaXNwYXRjaGVyLmdldCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpjbGVhclJlc291cmNlcygpCit2b2lkIERhdGFiYXNlQWdlbnQ6OmNsZWFy
UmVzb3VyY2VzKCkKIHsKICAgICBtX3Jlc291cmNlcy5jbGVhcigpOwogfQogCi1JbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRl
cmFsKCJEYXRhYmFzZSIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorRGF0YWJhc2VBZ2VudDo6RGF0
YWJhc2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQorICAg
IDogV2ViQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgaW5zdHJ1bWVudGluZ0Fn
ZW50cykKICAgICAsIG1fZW5hYmxlZChmYWxzZSkKIHsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMtPnNldEluc3BlY3RvckRhdGFiYXNlQWdlbnQodGhpcyk7CisgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLT5zZXREYXRhYmFzZUFnZW50KHRoaXMpOwogfQogCi1JbnNwZWN0b3JEYXRhYmFzZUFn
ZW50Ojp+SW5zcGVjdG9yRGF0YWJhc2VBZ2VudCgpCitEYXRhYmFzZUFnZW50Ojp+RGF0YWJhc2VB
Z2VudCgpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50KG51bGxwdHIpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0RGF0YWJhc2VB
Z2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5k
Q2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIp
Cit2b2lkIERhdGFiYXNlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hl
cj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9y
OjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRo
aXMpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKK3ZvaWQgRGF0YWJhc2VB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0
UmVhc29uKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3QKICAgICBkaXNhYmxlKHVudXNlZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgRGF0YWJhc2VBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJikKIHsKICAgICBpZiAobV9lbmFibGVkKQogICAgICAgICByZXR1cm47
CkBAIC0yNDgsMTQgKzI0OCwxNCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJs
ZShFcnJvclN0cmluZyYpCiAgICAgICAgIGl0LT52YWx1ZS0+YmluZChtX2Zyb250ZW5kRGlzcGF0
Y2hlci5nZXQoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYpCit2b2lkIERhdGFiYXNlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQog
ewogICAgIGlmICghbV9lbmFibGVkKQogICAgICAgICByZXR1cm47CiAgICAgbV9lbmFibGVkID0g
ZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJs
ZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG5hbWVzKQordm9pZCBEYXRh
YmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+PiYgbmFtZXMpCiB7CiAgICAgaWYgKCFtX2VuYWJsZWQpIHsKICAgICAgICAgZXJyb3Ig
PSBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIGFnZW50IGlzIG5vdCBlbmFibGVkIik7CkBAIC0yNzMs
NyArMjczLDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxl
TmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHIKICAgICB9CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFj
az4mJiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIERhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnks
IFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogewogICAgIGlmICgh
bV9lbmFibGVkKSB7CiAgICAgICAgIHJlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkRhdGFi
YXNlIGFnZW50IGlzIG5vdCBlbmFibGVkIik7CkBAIC0yOTIsNyArMjkyLDcgQEAgdm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZUlkLAogICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihXVEY6Om1vdmUoY2FsbGJh
Y2spLCBXVEY6Om1vdmUoZXJyb3JDYWxsYmFjayksIFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2sp
KTsKIH0KIAotU3RyaW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0YWJh
c2UqIGRhdGFiYXNlKQorU3RyaW5nIERhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0YWJhc2Uq
IGRhdGFiYXNlKQogewogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgaWYgKGl0LT52YWx1ZS0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFzZSkKQEAgLTMwMSw3
ICszMDEsNyBAQCBTdHJpbmcgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VJZChEYXRh
YmFzZSogZGF0YWJhc2UpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1JbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpmaW5kQnlGaWxlTmFtZShjb25z
dCBTdHJpbmcmIGZpbGVOYW1lKQorSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSogRGF0YWJhc2VB
Z2VudDo6ZmluZEJ5RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsKICAgICBmb3Ig
KERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7
IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+dmFsdWUt
PmRhdGFiYXNlKCktPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpCkBAIC0zMTAsNyArMzEwLDcgQEAg
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZmluZEJ5
RmlsZU5hbWUoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1EYXRhYmFz
ZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChjb25zdCBTdHJpbmcmIGRh
dGFiYXNlSWQpCitEYXRhYmFzZSogRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VGb3JJZChjb25zdCBT
dHJpbmcmIGRhdGFiYXNlSWQpCiB7CiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZXNvdXJjZXMuZmluZChkYXRhYmFzZUlkKTsKICAgICBpZiAoaXQgPT0gbV9yZXNv
dXJjZXMuZW5kKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRh
dGFiYXNlQWdlbnQuaAppbmRleCAzZmRhYTJjYjc0MThlNTIzMGEyZmY5YmFhZDA0ZjZlNmYzZjJh
ZDU0Li44ZGVkYmJlMzZlZGE1MmRjZTY5ODMxNzllMjAzMmUxMmUwMGE4ZmVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKQEAgLTQ3
LDExICs0NywxMSBAQCBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogCiB0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKK2NsYXNzIERhdGFiYXNlQWdlbnQgZmluYWwgOiBwdWJsaWMg
V2ViQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKik7Ci0gICAg
dmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VBZ2VudCgpOworICAgIGV4cGxpY2l0IERhdGFiYXNl
QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyopOworICAgIHZpcnR1YWwgfkRhdGFiYXNlQWdlbnQo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCA5NDljYmU3
MGRlMmY3ZTUzN2M4ZjU3NzY0NjVhNDRiYTkyMTYxMDQyLi4yNDI1OTc2ZjE1ZDA1ZmViMmU2MWQy
NjMyNWE0M2NjZDZiYTE4NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTU2NCwyMyArNTY0LDIzIEBAIHB1Ymxp
YzoKIAogfSAvLyBuYW1lc3BhY2UKIAotSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6Okluc3BlY3Rv
ckluZGV4ZWREQkFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCkKLSAgICA6IEluc3BlY3RvckFnZW50QmFzZShBU0NJSUxpdGVy
YWwoIkluZGV4ZWREQiIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorSW5kZXhlZERCQWdlbnQ6Oklu
ZGV4ZWREQkFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBQYWdlQWdlbnQqIHBh
Z2VBZ2VudCkKKyAgICA6IFdlYkFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkluZGV4ZWREQiIpLCBp
bnN0cnVtZW50aW5nQWdlbnRzKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQogewogfQogCi1J
bnNwZWN0b3JJbmRleGVkREJBZ2VudDo6fkluc3BlY3RvckluZGV4ZWREQkFnZW50KCkKK0luZGV4
ZWREQkFnZW50Ojp+SW5kZXhlZERCQWdlbnQoKQogewogfQogCi12b2lkIEluc3BlY3RvckluZGV4
ZWREQkFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cikKK3ZvaWQgSW5kZXhlZERCQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3I6
OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRo
aXMpOwogfQogCi12b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50Ojp3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIEluZGV4ZWRE
QkFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pCiB7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCkBAIC01ODgs
MTEgKzU4OCwxMSBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lYwogICAgIGRpc2FibGUodW51c2Vk
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5n
JikKK3ZvaWQgSW5kZXhlZERCQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7CiB9CiAKLXZv
aWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQordm9pZCBJ
bmRleGVkREJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiB7CiB9CiAKQEAgLTYxOSw3ICs2
MTksNyBAQCBzdGF0aWMgSURCRmFjdG9yeSogYXNzZXJ0SURCRmFjdG9yeShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudAogICAgIHJldHVybiBpZGJGYWN0b3J5Owog
fQogCi12b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2VOYW1lcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJl
ZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKK3ZvaWQg
SW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgUmVmPFJlcXVlc3REYXRhYmFzZU5h
bWVzQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZUFnZW50LT5maW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFzc2VydERvY3VtZW50KGVycm9yU3RyaW5nLCBmcmFt
ZSk7CkBAIC02NDAsNyArNjQwLDcgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVx
dWVzdERhdGFiYXNlTmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb24KICAgICBpZGJS
ZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIEdldERh
dGFiYXNlTmFtZXNDYWxsYmFjazo6Y3JlYXRlKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSksIGZhbHNlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2Fs
bGJhY2spCit2b2lkIEluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxs
YmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZmluZEZyYW1lV2l0aFNl
Y3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBh
c3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNjU1LDcgKzY1NSw3IEBAIHZv
aWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0CiAgICAgZGF0YWJhc2VMb2FkZXItPnN0YXJ0KGlkYkZhY3Rv
cnksIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZU5hbWUpOwogfQogCi12b2lk
IEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRl
eE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENh
bGxiYWNrKQordm9pZCBJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYg
aW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVl
c3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZmluZEZyYW1l
V2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNzYwLDcgKzc2MCw3
IEBAIHByaXZhdGU6CiAgICAgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0
Q2FsbGJhY2s7CiB9OwogCi12b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpjbGVhck9iamVj
dFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9y
aWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3Rv
cmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykK
K3ZvaWQgSW5kZXhlZERCQWdlbnQ6OmNsZWFyT2JqZWN0U3RvcmUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0
b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZUFnZW50LT5maW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFzc2VydERvY3VtZW50KGVycm9yU3RyaW5nLCBmcmFt
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJB
Z2VudC5oCmluZGV4IDRkMmMxNjk4MjI4ZDYzM2QzOWRmMjk4OTViNzBiZGM5MDFjYTAyMGUuLjgy
NmNhYWMzZWI0Y2JlNDFhOGM0ZjIxMzhhNGI2ZDllZTVkNDFjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCkBAIC00MywxNCAr
NDMsMTQgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKK2NsYXNzIFBhZ2VBZ2VudDsKIAogdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckluZGV4ZWREQkFnZW50
IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6SW5k
ZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK2NsYXNzIEluZGV4ZWREQkFnZW50IGZp
bmFsIDogcHVibGljIFdlYkFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JJbmRleGVkREJB
Z2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFn
ZXIqLCBJbnNwZWN0b3JQYWdlQWdlbnQqKTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JJbmRleGVk
REJBZ2VudCgpOworICAgIEluZGV4ZWREQkFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNw
ZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciosIFBhZ2VBZ2VudCopOworICAgIHZpcnR1YWwg
fkluZGV4ZWREQkFnZW50KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpAQCAt
NjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwotICAgIEluc3BlY3RvclBh
Z2VBZ2VudCogbV9wYWdlQWdlbnQ7CisgICAgUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggOWMwMWE0M2Q2YzhjZjliMzMxY2I4YzJiZDJm
NjdjNjMzNmFkNWUxZS4uNWNlMmM2YTM0YTYyY2Q4NzNjOTZmMDA0MGUyNTFlMzVlZDU3YjRhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBzdGF0aWMgRnJhbWUqIGZyYW1lRm9yU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJh
bWUsIERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCiB7Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpOworICAg
IFBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKTsK
ICAgICBpZiAocGFnZUFnZW50KQogICAgICAgICBwYWdlQWdlbnQtPmRpZENsZWFyV2luZG93T2Jq
ZWN0SW5Xb3JsZCgmZnJhbWUsIHdvcmxkKTsKICAgICBpZiAoUGFnZURlYnVnZ2VyQWdlbnQqIGRl
YnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VEZWJ1Z2dlckFnZW50KCkpIHsK
QEAgLTEyMyw2NCArMTIzLDY0IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRD
bGVhcldpbmRvd09iamVjdEluV29ybGRJbXBsKEluc3RydW1lbnRpbmdBZ2VuCiAKIGJvb2wgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc0RlYnVnZ2VyUGF1c2VkSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JEZWJ1
Z2dlckFnZW50KCkpCisgICAgaWYgKERlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmRlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgcmV0dXJuIGRlYnVnZ2Vy
QWdlbnQtPmlzUGF1c2VkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGVJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIE5vZGUmIHBhcmVudCkKIHsKLSAgICBpZiAoSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMuaW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQorICAgIGlmIChET01EZWJ1Z2dlckFnZW50
KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21EZWJ1Z2dlckFnZW50
KCkpCiAgICAgICAgIGRvbURlYnVnZ2VyQWdlbnQtPndpbGxJbnNlcnRET01Ob2RlKHBhcmVudCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnNlcnRET01Ob2RlSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlJiBub2RlKQog
ewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPmRpZEluc2Vy
dERPTU5vZGUobm9kZSk7Ci0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIGRvbURl
YnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQoKSkKKyAgICBpZiAoRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMuZG9tRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21EZWJ1Z2dlckFn
ZW50LT5kaWRJbnNlcnRET01Ob2RlKG5vZGUpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdn
ZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tRGVidWdnZXJBZ2VudCgpKQogICAgICAg
ICBkb21EZWJ1Z2dlckFnZW50LT53aWxsUmVtb3ZlRE9NTm9kZShub2RlKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTU5vZGVJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoRE9NRGVidWdnZXJB
Z2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tRGVidWdnZXJB
Z2VudCgpKQogICAgICAgICBkb21EZWJ1Z2dlckFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUp
OwotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPmRpZFJlbW92
ZURPTU5vZGUobm9kZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
TW9kaWZ5RE9NQXR0ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50
cywgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudCgpKQorICAgIGlmIChET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21EZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRv
bURlYnVnZ2VyQWdlbnQtPndpbGxNb2RpZnlET01BdHRyKGVsZW1lbnQpOwotICAgIGlmIChJbnNw
ZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRP
TUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPndpbGxNb2RpZnlET01BdHRyKGVsZW1l
bnQsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRNb2RpZnlET01BdHRySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBk
b21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBp
ZiAoRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21BZ2VudCgpKQog
ICAgICAgICBkb21BZ2VudC0+ZGlkTW9kaWZ5RE9NQXR0cihlbGVtZW50LCBuYW1lLCB2YWx1ZSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVET01BdHRySW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTUFn
ZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKSkK
KyAgICBpZiAoRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21BZ2Vu
dCgpKQogICAgICAgICBkb21BZ2VudC0+ZGlkUmVtb3ZlRE9NQXR0cihlbGVtZW50LCBuYW1lKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVTdHlsZUF0
dHJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIE5vZGUmIG5v
ZGUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAoRE9NQWdlbnQqIGRvbUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+ZGlk
SW52YWxpZGF0ZVN0eWxlQXR0cihub2RlKTsKLSAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudCgpKQorICAgIGlmIChET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21EZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRv
bURlYnVnZ2VyQWdlbnQtPmRpZEludmFsaWRhdGVTdHlsZUF0dHIobm9kZSk7CiB9CiAKQEAgLTE5
MiwxOSArMTkyLDE5IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVdpbmRv
d0Rpc2NhcmRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zCiAKIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9yQ1NTQWdl
bnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JDU1NBZ2VudCgpKQor
ICAgIGlmIChDU1NBZ2VudCogY3NzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmNzc0FnZW50
KCkpCiAgICAgICAgIGNzc0FnZW50LT5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpOwogfQogCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRvd1Jvb3RJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEVsZW1lbnQmIGhvc3QsIFNoYWRv
d1Jvb3QmIHJvb3QpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAoRE9NQWdlbnQq
IGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21BZ2VudCgpKQogICAgICAgICBkb21B
Z2VudC0+ZGlkUHVzaFNoYWRvd1Jvb3QoaG9zdCwgcm9vdCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUG9wU2hhZG93Um9vdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkK
IHsKLSAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9tQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLmRvbUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT53aWxsUG9w
U2hhZG93Um9vdChob3N0LCByb290KTsKIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVOYW1lZEZsb3dJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RyCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
aW5zcGVjdG9yQ1NTQWdlbnQoKSkKKyAgICBpZiAoQ1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5jc3NBZ2VudCgpKQogICAgICAgICBjc3NBZ2VudC0+ZGlkQ3JlYXRlTmFt
ZWRGbG93KCpkb2N1bWVudCwgbmFtZWRGbG93KTsKIH0KIApAQCAtMjIyLDkxICsyMjIsOTEgQEAg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVOYW1lZEZsb3dJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3QKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoSW5zcGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JDU1NBZ2VudCgpKQorICAgIGlmIChDU1NBZ2VudCogY3NzQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmNzc0FnZW50KCkpCiAgICAgICAgIGNzc0FnZW50LT53aWxs
UmVtb3ZlTmFtZWRGbG93KCpkb2N1bWVudCwgbmFtZWRGbG93KTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZVJlZ2lvbk92ZXJzZXRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0
TmFtZWRGbG93JiBuYW1lZEZsb3cpCiB7Ci0gICAgaWYgKEluc3BlY3RvckNTU0FnZW50KiBjc3NB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yQ1NTQWdlbnQoKSkKKyAgICBpZiAo
Q1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5jc3NBZ2VudCgpKQogICAg
ICAgICBjc3NBZ2VudC0+ZGlkQ2hhbmdlUmVnaW9uT3ZlcnNldChkb2N1bWVudCwgbmFtZWRGbG93
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlZ2lzdGVyTmFtZWRG
bG93Q29udGVudEVsZW1lbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMsIERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JiBuYW1lZEZsb3csIE5v
ZGUmIGNvbnRlbnRFbGVtZW50LCBOb2RlKiBuZXh0Q29udGVudEVsZW1lbnQpCiB7Ci0gICAgaWYg
KEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVj
dG9yQ1NTQWdlbnQoKSkKKyAgICBpZiAoQ1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5jc3NBZ2VudCgpKQogICAgICAgICBjc3NBZ2VudC0+ZGlkUmVnaXN0ZXJOYW1lZEZs
b3dDb250ZW50RWxlbWVudChkb2N1bWVudCwgbmFtZWRGbG93LCBjb250ZW50RWxlbWVudCwgbmV4
dENvbnRlbnRFbGVtZW50KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJLaXROYW1lZEZs
b3cmIG5hbWVkRmxvdywgTm9kZSYgY29udGVudEVsZW1lbnQpCiB7Ci0gICAgaWYgKEluc3BlY3Rv
ckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yQ1NTQWdl
bnQoKSkKKyAgICBpZiAoQ1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5j
c3NBZ2VudCgpKQogICAgICAgICBjc3NBZ2VudC0+ZGlkVW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRl
bnRFbGVtZW50KGRvY3VtZW50LCBuYW1lZEZsb3csIGNvbnRlbnRFbGVtZW50KTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50SW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpCiB7Ci0gICAgaWYgKEluc3BlY3Rv
ckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdl
bnQoKSkKKyAgICBpZiAoRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5k
b21BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVz
dWx0LCBtb2RpZmllckZsYWdzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZFNjcm9sbEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykK
IHsKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+
ZGlkU2Nyb2xsKCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVU
b3VjaEV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBO
b2RlJiBub2RlKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBk
b21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgcmV0dXJu
IGRvbUFnZW50LT5oYW5kbGVUb3VjaEV2ZW50KG5vZGUpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRsZU1vdXNlUHJlc3NJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKEluc3Bl
Y3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9N
QWdlbnQoKSkKKyAgICBpZiAoRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5kb21BZ2VudCgpKQogICAgICAgICByZXR1cm4gZG9tQWdlbnQtPmhhbmRsZU1vdXNlUHJlc3Mo
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpmb3JjZVBzZXVkb1N0YXRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHBz
ZXVkb1N0YXRlKQogewotICAgIGlmIChJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckNTU0FnZW50KCkpCisgICAgaWYgKENTU0FnZW50KiBj
c3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuY3NzQWdlbnQoKSkKICAgICAgICAgcmV0dXJu
IGNzc0FnZW50LT5mb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQsIHBzZXVkb1N0YXRlKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0
ZXJEYXRhTW9kaWZpZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIENoYXJhY3RlckRhdGEmIGNoYXJhY3RlckRhdGEpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQo
KSkKKyAgICBpZiAoRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21B
Z2VudCgpKQogICAgICAgICBkb21BZ2VudC0+Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKGNoYXJhY3Rl
ckRhdGEpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxI
dHRwUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywg
Y29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQq
IGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQoKSkKKyAgICBpZiAoRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21EZWJ1
Z2dlckFnZW50LT53aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KHVybCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnN0YWxsVGltZXJJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGludCB0aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBz
aW5nbGVTaG90LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIHBhdXNl
T25OYXRpdmVFdmVudElmTmVlZGVkKGluc3RydW1lbnRpbmdBZ2VudHMsIGZhbHNlLCBzZXRUaW1l
ckV2ZW50TmFtZSwgdHJ1ZSk7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVs
aW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkK
KyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMudGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRJbnN0YWxsVGlt
ZXIodGltZXJJZCwgdGltZW91dCwgc2luZ2xlU2hvdCwgZnJhbWVGb3JTY3JpcHRFeGVjdXRpb25D
b250ZXh0KGNvbnRleHQpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFJlbW92ZVRpbWVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBpbnQgdGltZXJJZCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBw
YXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBmYWxzZSwgY2xl
YXJUaW1lckV2ZW50TmFtZSwgdHJ1ZSk7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQq
IHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdl
bnQoKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRSZW1v
dmVUaW1lcih0aW1lcklkLCBmcmFtZUZvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkp
OwogfQogCiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsQ2FsbEZ1bmN0aW9uSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIGludCB0aW1lbGluZUFnZW50
SWQgPSAwOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKKyAgICBpZiAo
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxp
bmVBZ2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxDYWxsRnVuY3Rpb24oc2Ny
aXB0TmFtZSwgc2NyaXB0TGluZSwgZnJhbWVGb3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRl
eHQpKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAg
ICB9CkBAIC0zMTUsMTQgKzMxNSwxNCBAQCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2FsbEZ1bmN0aW9uSW1wbChJbgogCiB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uSW1wbChjb25zdCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQorICAgIGlmIChUaW1lbGluZUFn
ZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCiAgICAg
ICAgIHRpbWVsaW5lQWdlbnQtPmRpZENhbGxGdW5jdGlvbihmcmFtZUZvclNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoY29udGV4dCkpOwogfQogCiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hYSFJSZWFkeVN0YXRlQ2hhbmdl
RXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFhNTEh0
dHBSZXF1ZXN0JiByZXF1ZXN0LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewog
ICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQq
IHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdl
bnQoKTsKKyAgICBUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy50aW1lbGluZUFnZW50KCk7CiAgICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYgcmVxdWVzdC5o
YXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50KSkgewog
ICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsRGlzcGF0Y2hYSFJSZWFkeVN0YXRlQ2hhbmdlRXZl
bnQocmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgcmVxdWVzdC5yZWFkeVN0YXRlKCksIGZyYW1lRm9y
U2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJ
ZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CkBAIC0zMzIsMjAgKzMzMiwyMCBAQCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0
Y2hYSFJSZWFkeVN0YQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0
Y2hYSFJSZWFkeVN0YXRlQ2hhbmdlRXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSYgY29va2llKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0
aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCisgICAgaWYgKFRp
bWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2ll
KSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hYSFJSZWFkeVN0YXRlQ2hhbmdl
RXZlbnQoKTsKIH0KIAogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgRXZlbnQmIGV2
ZW50LCBib29sIGhhc0V2ZW50TGlzdGVuZXJzKQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQg
PSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKTsKKyAgICBUaW1lbGluZUFnZW50
KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCk7CiAg
ICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYgaGFzRXZlbnRMaXN0ZW5lcnMpIHsKICAgICAgICAgdGlt
ZWxpbmVBZ2VudC0+d2lsbERpc3BhdGNoRXZlbnQoZXZlbnQsIGRvY3VtZW50LmZyYW1lKCkpOwog
ICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KICNp
ZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxh
eUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAg
IGlmIChSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxh
eUFnZW50KCkpCiAgICAgICAgIHJlcGxheUFnZW50LT53aWxsRGlzcGF0Y2hFdmVudChldmVudCwg
ZG9jdW1lbnQuZnJhbWUoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CkBAIC0z
NjUsMjAgKzM2NSwyMCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSGFuZGxl
RXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogCiB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudEltcGwoY29uc3QgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKKyAg
ICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2Vu
dChjb29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWREaXNwYXRjaEV2ZW50KCk7CiB9
CiAKIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlu
c3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93JiB3aW5kb3cp
CiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxp
bmVBZ2VudCgpOworICAgIFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKTsKICAgICBpZiAodGltZWxpbmVBZ2VudCAmJiB3aW5k
b3cuaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnQudHlwZSgpKSkgewogICAgICAgICB0aW1lbGluZUFn
ZW50LT53aWxsRGlzcGF0Y2hFdmVudChldmVudCwgd2luZG93LmZyYW1lKCkpOwogICAgICAgICB0
aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KICNpZiBFTkFCTEUo
V0VCX1JFUExBWSkKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBs
YXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkp
CiAgICAgICAgIHJlcGxheUFnZW50LT53aWxsRGlzcGF0Y2hFdmVudChldmVudCwgd2luZG93LmZy
YW1lKCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50SWQpOwpAQCAtMzg2LDE0ICszODYs
MTQgQEAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbERpc3BhdGNoRXZlbnRPbldpbmQKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llJiBjb29raWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdl
bnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKKyAgICBp
ZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChj
b29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWREaXNwYXRjaEV2ZW50KCk7CiB9CiAK
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxFdmFsdWF0ZVNjcmlwdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGlu
Z0FnZW50cywgRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIp
CiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKSkgeworICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxpbmVB
Z2VudC0+d2lsbEV2YWx1YXRlU2NyaXB0KHVybCwgbGluZU51bWJlciwgZnJhbWUpOwogICAgICAg
ICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KQEAgLTQwMiwx
MyArNDAyLDEzIEBAIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlwdEltcGwoCiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNjcmlwdEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llJiBjb29raWUsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoSW5zcGVj
dG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChj
b29raWUpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVU
aW1lbGluZUFnZW50KGNvb2tpZSkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZEV2YWx1YXRl
U2NyaXB0KGZyYW1lKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlw
dHNFbmFibGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBi
b29sIGlzRW5hYmxlZCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdl
QWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCkpCiAgICAg
ICAgIHBhZ2VBZ2VudC0+c2NyaXB0c0VuYWJsZWQoaXNFbmFibGVkKTsKIH0KIApAQCAtNDE3LDcg
KzQxNyw3IEBAIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxGaXJlVGltZXJJbXBsKEluc3RyCiAgICAgcGF1c2VPbk5hdGl2ZUV2ZW50
SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgZmFsc2UsIHRpbWVyRmlyZWRFdmVudE5hbWUs
IGZhbHNlKTsKIAogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIGlmIChJbnNwZWN0
b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNw
ZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIHRp
bWVsaW5lQWdlbnQtPndpbGxGaXJlVGltZXIodGltZXJJZCwgZnJhbWVGb3JTY3JpcHRFeGVjdXRp
b25Db250ZXh0KGNvbnRleHQpKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVB
Z2VudC0+aWQoKTsKICAgICB9CkBAIC00MjksMjAgKzQyOSwyMCBAQCB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkRmlyZVRpbWVySW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25DbwogICAgIGlmIChjb29raWUuaXNWYWxpZCgpKQogICAgICAgICBjYW5jZWxQYXVzZU9u
TmF0aXZlRXZlbnQoKmNvb2tpZS5pbnN0cnVtZW50aW5nQWdlbnRzKCkpOwogCi0gICAgaWYgKElu
c3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdl
bnQoY29va2llKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJp
ZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRGaXJl
VGltZXIoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRh
dGVMYXlvdXRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZy
YW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAg
IGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50
aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZEludmFsaWRhdGVMYXlv
dXQoZnJhbWUpOwogfQogCiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsTGF5b3V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJ
ZCA9IDA7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkgeworICAgIGlmIChU
aW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGlu
ZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbExheW91dChmcmFtZSk7CiAg
ICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CiAgICAgfQpAQCAt
NDUxLDE3ICs0NTEsMTcgQEAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbExheW91dEltcGwoSW5zdHJ1bWUKIAogdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZExheW91dEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llJiBjb29raWUsIFJlbmRlck9iamVjdCogcm9vdCkKIHsKLSAgICBpZiAoSW5z
cGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2Vu
dChjb29raWUpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmll
dmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZExheW91
dChyb290KTsKIAotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGNvb2tp
ZS5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGNvb2tpZS5pbnN0cnVtZW50aW5nQWdlbnRzKCktPnBhZ2VB
Z2VudCgpKQogICAgICAgICBwYWdlQWdlbnQtPmRpZExheW91dCgpOwogfQogCiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0
Y2hYSFJMb2FkRXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIFhNTEh0dHBSZXF1ZXN0JiByZXF1ZXN0LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKTsKKyAgICBUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCk7CiAgICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYg
cmVxdWVzdC5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubG9hZEV2ZW50KSkgewogICAg
ICAgICB0aW1lbGluZUFnZW50LT53aWxsRGlzcGF0Y2hYSFJMb2FkRXZlbnQocmVxdWVzdC51cmwo
KSwgZnJhbWVGb3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpKTsKICAgICAgICAgdGlt
ZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKQEAgLTQ3MSw0NSArNDcxLDQ1IEBA
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEaXNwYXRjaFhIUkxvYWRFdmVuCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWREaXNwYXRjaFhIUkxvYWRFdmVudEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llJiBjb29raWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKKyAgICBpZiAoVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUp
KQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWREaXNwYXRjaFhIUkxvYWRFdmVudCgpOwogfQog
CiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBhaW50SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
ewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYgKFRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQo
KSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFBhaW50KHJlbmRlcmVyLT5mcmFtZSgpKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFBhaW50SW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFn
ZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KCkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlk
UGFpbnQocmVuZGVyZXIsIHJlY3QpOwogCi0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFn
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBp
ZiAoUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgp
KQogICAgICAgICBwYWdlQWdlbnQtPmRpZFBhaW50KHJlbmRlcmVyLCByZWN0KTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTY3JvbGxMYXllckltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lKQogewotICAgIGlm
IChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkKICAgICAg
ICAgdGltZWxpbmVBZ2VudC0+d2lsbFNjcm9sbChmcmFtZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRTY3JvbGxMYXllckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCog
dGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFNjcm9s
bCgpOwogfQogCiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsUmVjYWxjdWxhdGVTdHlsZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGludCB0aW1l
bGluZUFnZW50SWQgPSAwOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGlu
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsK
KyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMudGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxSZWNhbGN1
bGF0ZVN0eWxlKGRvY3VtZW50LmZyYW1lKCkpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0
aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPndpbGxS
ZWNhbGN1bGF0ZVN0eWxlKCk7CiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50SWQpOwogfQpAQCAtNTIxLDI1
ICs1MjEsMjUgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2FsY3VsYXRl
U3R5bGVJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnQKICAgICAKICAgICBJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzID0gKmNvb2tpZS5pbnN0cnVtZW50aW5nQWdl
bnRzKCk7CiAKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9
IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0
aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCiAgICAgICAgIHRp
bWVsaW5lQWdlbnQtPmRpZFJlY2FsY3VsYXRlU3R5bGUoKTsKLSAgICBpZiAoSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
UmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdl
bnQtPmRpZFJlY2FsY3VsYXRlU3R5bGUoKTsKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAg
IGlmIChQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50
KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZGlkUmVjYWxjdWxhdGVTdHlsZSgpOwogfQogCiB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb25J
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIERvY3VtZW50JiBk
b2N1bWVudCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAgIGlm
IChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1l
bGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFNjaGVkdWxlU3R5bGVSZWNh
bGN1bGF0aW9uKGRvY3VtZW50LmZyYW1lKCkpOwotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJj
ZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlk
U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oZG9jdW1lbnQpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YXBwbHlFbXVsYXRlZE1lZGlhSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBTdHJpbmcmIG1lZGlhKQogewotICAgIGlmIChJbnNw
ZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
UGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5wYWdlQWdlbnQoKSkKICAgICAgICAgcGFnZUFnZW50LT5hcHBseUVtdWxhdGVkTWVk
aWEobWVkaWEpOwogfQogCkBAIC01NDgsNyArNTQ4LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxTZW5kUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWUKICAgICBpZiAoIWxvYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluc3BlY3Rv
clJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3Bl
Y3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJj
ZUFnZW50LT53aWxsU2VuZFJlcXVlc3QoaWRlbnRpZmllciwgKmxvYWRlciwgcmVxdWVzdCwgcmVk
aXJlY3RSZXNwb25zZSk7CiB9CiAKQEAgLTU1OSw3ICs1NTksNyBAQCB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Y29udGludWVBZnRlclBpbmdMb2FkZXJJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptYXJrUmVzb3VyY2VBc0Nh
Y2hlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKQogewotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50
KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+bWFya1Jlc291
cmNlQXNDYWNoZWQoaWRlbnRpZmllcik7CiB9CiAKQEAgLTU3MSw3ICs1NzEsNyBAQCB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlSW1w
bChJbnN0cnVtZW50aW5nQQogICAgIGlmICghbG9hZGVyIHx8ICFjYWNoZWRSZXNvdXJjZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNl
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAg
ICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
cmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGUoKmxvYWRlciwgKmNhY2hlZFJlc291cmNlKTsKIH0KIApAQCAtNTkwLDcg
KzU5MCw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlUmVzb3Vy
Y2VSZXNwb25zZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zCiAKICAgICBJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzID0gKmNvb2tpZS5pbnN0cnVtZW50aW5nQWdlbnRzKCk7
CiAKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJj
ZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50
KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVSZXNwb25zZShpZGVudGlmaWVy
LCAqbG9hZGVyLCByZXNwb25zZSwgcmVzb3VyY2VMb2FkZXIpOwogICAgIGlmIChXZWJDb25zb2xl
QWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50
KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIs
IHJlc3BvbnNlKTsgLy8gVGhpcyBzaG91bGQgY29tZSBBRlRFUiByZXNvdXJjZSBub3RpZmljYXRp
b24sIGZyb250LWVuZCByZWxpZXMgb24gdGhpcy4KQEAgLTYyMiw3ICs2MjIsNyBAQCB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5SWdub3JlSW1wbChGcmFt
ZSogZnJhbWUsIERvY3VtZQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVj
ZWl2ZURhdGFJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgs
IGludCBlbmNvZGVkRGF0YUxlbmd0aCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFJl
Y2VpdmVEYXRhKGlkZW50aWZpZXIsIGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3Ro
KTsKIH0KIApAQCAtNjMxLDcgKzYzMSw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRGaW5pc2hMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtCiAgICAg
aWYgKCFsb2FkZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNv
dXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+
ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCAqbG9hZGVyLCBmaW5pc2hUaW1lKTsKIH0KIApA
QCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWls
TG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVuCiAgICAgaWYgKCFsb2Fk
ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50
KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkRmFpbExv
YWRpbmcoaWRlbnRpZmllciwgKmxvYWRlciwgZXJyb3IpOwogICAgIGlmIChXZWJDb25zb2xlQWdl
bnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkp
CiAgICAgICAgIGNvbnNvbGVBZ2VudC0+ZGlkRmFpbExvYWRpbmcoaWRlbnRpZmllciwgZXJyb3Ip
OyAvLyBUaGlzIHNob3VsZCBjb21lIEFGVEVSIHJlc291cmNlIG5vdGlmaWNhdGlvbiwgZnJvbnQt
ZW5kIHJlbGllcyBvbiB0aGlzLgpAQCAtNjQ4LDE5ICs2NDgsMTkgQEAgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZEZhaWxMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZW4KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvY3VtZW50VGhyZWFk
YWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQqIGNsaWVudCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KGlkZW50aWZpZXIsIGNs
aWVudCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUklt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmws
IGJvb2wgYXN5bmMsIFJlZlB0cjxGb3JtRGF0YT4mJiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRl
ck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpCiB7Ci0gICAgaWYgKEluc3Bl
Y3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmlu
c3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNv
dXJjZUFnZW50LT53aWxsTG9hZFhIUihjbGllbnQsIG1ldGhvZCwgdXJsLCBhc3luYywgV1RGOjpt
b3ZlKGZvcm1EYXRhKSwgaGVhZGVycywgaW5jbHVkZUNyZWRlbnRpYWxzKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZhaWxYSFJMb2FkaW5nSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBj
bGllbnQpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAo
UmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3Vy
Y2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRGYWlsWEhSTG9hZGluZyhjbGll
bnQpOwogfQogCkBAIC02NjgsNTggKzY2OCw1OCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkRmluaXNoWEhSTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdAog
ewogICAgIGlmIChXZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+ZGlkRmluaXNo
WEhSTG9hZGluZyhpZGVudGlmaWVyLCB1cmwsIHNlbmRVUkwsIHNlbmRMaW5lTnVtYmVyLCBzZW5k
Q29sdW1uTnVtYmVyKTsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAg
IGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5y
ZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZEZpbmlzaFhIUkxvYWRp
bmcoY2xpZW50LCBpZGVudGlmaWVyLCBzb3VyY2VTdHJpbmcpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVhIUlJlc3BvbnNlSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7
Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VB
Z2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgp
KQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlWEhSUmVzcG9uc2UoaWRlbnRpZmll
cik7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUlN5bmNo
cm9ub3VzbHlJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7
Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VB
Z2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgp
KQogICAgICAgICByZXNvdXJjZUFnZW50LT53aWxsTG9hZFhIUlN5bmNocm9ub3VzbHkoKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRYSFJTeW5jaHJvbm91c2x5
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlm
IChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJl
c291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAg
ICAgcmVzb3VyY2VBZ2VudC0+ZGlkTG9hZFhIUlN5bmNocm9ub3VzbHkoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQogewotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJj
ZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+c2V0
SW5pdGlhbFNjcmlwdENvbnRlbnQoaWRlbnRpZmllciwgc291cmNlU3RyaW5nKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgU3RyaW5n
JiBkaXJlY3RpdmVUZXh0KQogewotICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1
Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkp
CisgICAgaWYgKERlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmRlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZGVidWdnZXJBZ2VudC0+c2NyaXB0RXhlY3V0
aW9uQmxvY2tlZEJ5Q1NQKGRpcmVjdGl2ZVRleHQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVNjcmlwdFJlc3BvbnNlSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7Ci0g
ICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2Vu
dCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQog
ICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlU2NyaXB0UmVzcG9uc2UoaWRlbnRpZmll
cik7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkb21Db250ZW50TG9hZGVk
RXZlbnRGaXJlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywg
RnJhbWUmIGZyYW1lKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGlu
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisg
ICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LnRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkTWFya0RPTUNvbnRl
bnRFdmVudChmcmFtZSk7CiAKICAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBkb21B
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQt
Pm1haW5GcmFtZURPTUNvbnRlbnRMb2FkZWQoKTsKIAotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdl
bnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUGFnZUFnZW50KCkp
CisgICAgaWYgKFBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdl
QWdlbnQoKSkKICAgICAgICAgcGFnZUFnZW50LT5kb21Db250ZW50RXZlbnRGaXJlZCgpOwogfQog
CkBAIC03MjgsMjYgKzcyOCwyNiBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9h
ZEV2ZW50RmlyZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbgogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50
KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFn
ZW50KCkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkTWFy
a0xvYWRFdmVudCgqZnJhbWUpOwogCiAgICAgaWYgKCFmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFn
ZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAg
ICBwYWdlQWdlbnQtPmxvYWRFdmVudEZpcmVkKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lKQogewotICAgIGlmIChJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUGFn
ZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5wYWdlQWdlbnQoKSkKICAgICAgICAgcGFnZUFnZW50LT5mcmFtZURldGFjaGVkKGZyYW1l
KTsKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIGlmICghZnJhbWUuaXNNYWluRnJhbWUo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBs
YXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAg
ICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBs
YXlBZ2VudCgpKQogICAgICAgICByZXBsYXlBZ2VudC0+ZnJhbWVEZXRhY2hlZChmcmFtZSk7CiAj
ZW5kaWYKIH0KQEAgLTc2NCwzMCArNzY0LDMwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDb21taXRMb2FkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50CiAg
ICAgICAgIGlmIChXZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgICAgICBjb25zb2xlQWdlbnQtPnJlc2V0
KCk7CiAKLSAgICAgICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICAgICAg
aWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJl
c291cmNlQWdlbnQoKSkKICAgICAgICAgICAgIHJlc291cmNlQWdlbnQtPm1haW5GcmFtZU5hdmln
YXRlZCgqbG9hZGVyKTsKIAotICAgICAgICBpZiAoSW5zcGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JDU1NBZ2VudCgpKQorICAgICAgICBpZiAo
Q1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5jc3NBZ2VudCgpKQogICAg
ICAgICAgICAgY3NzQWdlbnQtPnJlc2V0KCk7CiAKLSAgICAgICAgaWYgKEluc3BlY3RvckRhdGFi
YXNlQWdlbnQqIGRhdGFiYXNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRh
dGFiYXNlQWdlbnQoKSkKKyAgICAgICAgaWYgKERhdGFiYXNlQWdlbnQqIGRhdGFiYXNlQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmRhdGFiYXNlQWdlbnQoKSkKICAgICAgICAgICAgIGRhdGFi
YXNlQWdlbnQtPmNsZWFyUmVzb3VyY2VzKCk7CiAKLSAgICAgICAgaWYgKEluc3BlY3RvckRPTUFn
ZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKSkK
KyAgICAgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9t
QWdlbnQoKSkKICAgICAgICAgICAgIGRvbUFnZW50LT5zZXREb2N1bWVudChwYWdlLT5tYWluRnJh
bWUoKS5kb2N1bWVudCgpKTsKIAotICAgICAgICBpZiAoSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQq
IGxheWVyVHJlZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JMYXllclRyZWVB
Z2VudCgpKQorICAgICAgICBpZiAoTGF5ZXJUcmVlQWdlbnQqIGxheWVyVHJlZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5sYXllclRyZWVBZ2VudCgpKQogICAgICAgICAgICAgbGF5ZXJUcmVl
QWdlbnQtPnJlc2V0KCk7CiAgICAgfQogCi0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAo
RE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21BZ2VudCgpKQogICAg
ICAgICBkb21BZ2VudC0+ZGlkQ29tbWl0TG9hZChsb2FkZXItPmZyYW1lKCktPmRvY3VtZW50KCkp
OwogCi0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBwYWdlQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAgICBwYWdlQWdlbnQt
PmZyYW1lTmF2aWdhdGVkKGxvYWRlcik7CiAKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBp
ZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBsYXlBZ2VudCogcmVwbGF5QWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkpCiAgICAgICAgIHJlcGxheUFn
ZW50LT5mcmFtZU5hdmlnYXRlZChsb2FkZXIpOwogI2VuZGlmCiB9CkBAIC03OTYsNTAgKzc5Niw1
MCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEb2N1bWVudFVwZGF0ZWRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlucwogewogICAgIGlmICghaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBk
b21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdl
bnQtPmZyYW1lRG9jdW1lbnRVcGRhdGVkKGZyYW1lKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmxvYWRlckRldGFjaGVkRnJvbUZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBEb2N1bWVudExvYWRlciYgbG9hZGVyKQogewotICAg
IGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIGluc3BlY3RvclBhZ2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMuaW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2VudCogaW5zcGVj
dG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKSkKICAgICAgICAg
aW5zcGVjdG9yUGFnZUFnZW50LT5sb2FkZXJEZXRhY2hlZEZyb21GcmFtZShsb2FkZXIpOwogfQog
CiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVTdGFydGVkTG9hZGluZ0ltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lKQog
ewotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIGluc3BlY3RvclBhZ2VBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2VudCog
aW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKSkKICAg
ICAgICAgaW5zcGVjdG9yUGFnZUFnZW50LT5mcmFtZVN0YXJ0ZWRMb2FkaW5nKGZyYW1lKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lU3RvcHBlZExvYWRpbmdJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSkK
IHsKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQq
IGluc3BlY3RvclBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCkpCiAg
ICAgICAgIGluc3BlY3RvclBhZ2VBZ2VudC0+ZnJhbWVTdG9wcGVkTG9hZGluZyhmcmFtZSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVNjaGVkdWxlZE5hdmlnYXRp
b25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBm
cmFtZSwgZG91YmxlIGRlbGF5KQogewotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIGluc3Bl
Y3RvclBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUGFnZUFnZW50KCkp
CisgICAgaWYgKFBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5wYWdlQWdlbnQoKSkKICAgICAgICAgaW5zcGVjdG9yUGFnZUFnZW50LT5mcmFtZVNjaGVk
dWxlZE5hdmlnYXRpb24oZnJhbWUsIGRlbGF5KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb25JbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAo
SW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQqIGluc3BlY3RvclBh
Z2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCkpCiAgICAgICAgIGluc3Bl
Y3RvclBhZ2VBZ2VudC0+ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihmcmFtZSk7CiB9
CiAKIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxSdW5KYXZhU2NyaXB0RGlhbG9nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKEluc3Bl
Y3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAgICBpbnNwZWN0b3JQ
YWdlQWdlbnQtPndpbGxSdW5KYXZhU2NyaXB0RGlhbG9nKG1lc3NhZ2UpOwogICAgIHJldHVybiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywgMCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSdW5KYXZhU2NyaXB0RGlhbG9n
SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKIHsKLSAg
ICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBjb29raWUuaW5z
dHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFn
ZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpLT5w
YWdlQWdlbnQoKSkKICAgICAgICAgaW5zcGVjdG9yUGFnZUFnZW50LT5kaWRSdW5KYXZhU2NyaXB0
RGlhbG9nKCk7CiB9CiAKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZUltcGwoQ2FjaGVkUmVzb3VyY2UmIGNh
YwogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudCA6
ICpzX2luc3RydW1lbnRpbmdBZ2VudHNTZXQpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvclJlc291
cmNlQWdlbnQqIGluc3BlY3RvclJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnQtPmlu
c3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICAgICAgaWYgKFJlc291cmNlQWdlbnQqIGluc3Bl
Y3RvclJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnQtPnJlc291cmNlQWdlbnQoKSkK
ICAgICAgICAgICAgIGluc3BlY3RvclJlc291cmNlQWdlbnQtPndpbGxEZXN0cm95Q2FjaGVkUmVz
b3VyY2UoY2FjaGVkUmVzb3VyY2UpOwogICAgIH0KIH0KQEAgLTg1Nyw3ICs4NTcsNyBAQCB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZUltcGwo
Q2FjaGVkUmVzb3VyY2UmIGNhYwogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFdyaXRlSFRNTEltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgc3RhcnRMaW5lLCBGcmFtZSogZnJhbWUp
CiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKSkgeworICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxpbmVB
Z2VudC0+d2lsbFdyaXRlSFRNTChzdGFydExpbmUsIGZyYW1lKTsKICAgICAgICAgdGltZWxpbmVB
Z2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9CkBAIC04NjYsMTEgKzg2NiwxMSBA
QCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsV3JpdGVIVE1MSW1wbChJbnN0cgogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkV3JpdGVIVE1MSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUm
IGNvb2tpZSwgdW5zaWduZWQgZW5kTGluZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQorICAg
IGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50
KGNvb2tpZSkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFdyaXRlSFRNTChlbmRMaW5lKTsK
IH0KIAotLy8gSmF2YVNjcmlwdENvcmUgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCBzaG91bGQga25v
dyBDb25zb2xlIE1lc3NhZ2VUeXBlcy4KKy8vIEphdmFTY3JpcHRDb3JlIERlYnVnZ2VyQWdlbnQg
c2hvdWxkIGtub3cgQ29uc29sZSBNZXNzYWdlVHlwZXMuCiBzdGF0aWMgYm9vbCBpc0NvbnNvbGVB
c3NlcnRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlKQogewog
ICAgIHJldHVybiBzb3VyY2UgPT0gTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSAmJiB0eXBlID09
IE1lc3NhZ2VUeXBlOjpBc3NlcnQ7CkBAIC04ODQsOCArODg0LDggQEAgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmIGluc3QKIAogICAgIGlmIChXZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+
YWRkTWVzc2FnZVRvQ29uc29sZShXVEY6Om1vdmUobWVzc2FnZSkpOwotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBqdXN0IHBhc3MgdGhlIG1lc3NhZ2Ugb24gdG8gdGhlIGRlYnVnZ2VyIGFnZW50
LiBKYXZhU2NyaXB0Q29yZSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHNob3VsZCBrbm93IENvbnNv
bGUgTWVzc2FnZVR5cGVzLgotICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dl
ckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkpIHsK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQganVzdCBwYXNzIHRoZSBtZXNzYWdlIG9uIHRvIHRo
ZSBkZWJ1Z2dlciBhZ2VudC4gSmF2YVNjcmlwdENvcmUgRGVidWdnZXJBZ2VudCBzaG91bGQga25v
dyBDb25zb2xlIE1lc3NhZ2VUeXBlcy4KKyAgICBpZiAoRGVidWdnZXJBZ2VudCogZGVidWdnZXJB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZGVidWdnZXJBZ2VudCgpKSB7CiAgICAgICAgIGlm
IChpc0NvbnNvbGVBc3NlcnRNZXNzYWdlKHNvdXJjZSwgdHlwZSkpCiAgICAgICAgICAgICBkZWJ1
Z2dlckFnZW50LT5oYW5kbGVDb25zb2xlQXNzZXJ0KG1lc3NhZ2VUZXh0KTsKICAgICB9CkBAIC04
OTksNyArODk5LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3Vu
dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGkKIAogdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYgKFRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdl
bnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+dGltZShmcmFtZSwgdGl0bGUpOwogICAgIGlm
IChXZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2Vi
Q29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+c3RhcnRUaW1pbmcodGl0bGUp
OwpAQCAtOTA5LDEzICs5MDksMTMgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0
b3BDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnUKIHsKICAgICBp
ZiAoV2ViQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLndl
YkNvbnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnN0b3BUaW1pbmcodGl0bGUs
IHN0YWNrKTsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChU
aW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGlu
ZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPnRpbWVFbmQoZnJhbWUsIHRpdGxlKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXBJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSwg
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQoKSkgeworICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgU3Ry
aW5nIG1lc3NhZ2U7CiAgICAgICAgIGFyZ3VtZW50cy0+Z2V0Rmlyc3RBcmd1bWVudEFzU3RyaW5n
KG1lc3NhZ2UpOwogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRUaW1lU3RhbXAoZnJhbWUsIG1l
c3NhZ2UpOwpAQCAtOTI0LDEzICs5MjQsMTMgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmNvbnNvbGVUaW1lU3RhbXBJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW0KIAog
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0UHJvZmlsaW5nSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCog
dGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudFRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGlt
ZWxpbmVBZ2VudC0+c3RhcnRGcm9tQ29uc29sZShleGVjLCB0aXRsZSk7CiB9CiAKIFJlZlB0cjxK
U0M6OlByb2ZpbGU+IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZ0ltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRUaW1lbGluZUFnZW50KCkpCiAgICAg
ICAgIHJldHVybiB0aW1lbGluZUFnZW50LT5zdG9wRnJvbUNvbnNvbGUoZXhlYywgdGl0bGUpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtOTM5LDI2ICs5MzksMjYgQEAgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWUKIHsKICAgICBpZiAoIWluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRW52
aXJvbm1lbnQoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpZiAoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogZGJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMuaW5zcGVjdG9yRGF0YWJhc2VBZ2VudCgpKQorICAgIGlmIChEYXRhYmFzZUFnZW50KiBkYkFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kYXRhYmFzZUFnZW50KCkpCiAgICAgICAgIGRiQWdl
bnQtPmRpZE9wZW5EYXRhYmFzZShkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2
ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1
ZSwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
biwgUGFnZSogcGFnZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBkb21T
dG9yYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dCgpKQorICAgIGlmIChET01TdG9yYWdlQWdlbnQqIGRvbVN0b3JhZ2VBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuZG9tU3RvcmFnZUFnZW50KCkpCiAgICAgICAgIGRvbVN0b3JhZ2VBZ2VudC0+
ZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHN0b3Jh
Z2VUeXBlLCBzZWN1cml0eU9yaWdpbiwgcGFnZSk7CiB9CiAKIGJvb2wgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzaG91bGRQYXVzZURlZGljYXRlZFdvcmtlck9uU3RhcnRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKEluc3BlY3Rvcldv
cmtlckFnZW50KiB3b3JrZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yV29y
a2VyQWdlbnQoKSkKKyAgICBpZiAoV29ya2VyQWdlbnQqIHdvcmtlckFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy53b3JrZXJBZ2VudCgpKQogICAgICAgICByZXR1cm4gd29ya2VyQWdlbnQtPnNo
b3VsZFBhdXNlRGVkaWNhdGVkV29ya2VyT25TdGFydCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFN0YXJ0V29ya2VyR2xvYmFsU2Nv
cGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFdvcmtlckds
b2JhbFNjb3BlUHJveHkqIHdvcmtlckdsb2JhbFNjb3BlUHJveHksIGNvbnN0IFVSTCYgdXJsKQog
ewotICAgIGlmIChJbnNwZWN0b3JXb3JrZXJBZ2VudCogd29ya2VyQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLmluc3BlY3RvcldvcmtlckFnZW50KCkpCisgICAgaWYgKFdvcmtlckFnZW50KiB3
b3JrZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud29ya2VyQWdlbnQoKSkKICAgICAgICAg
d29ya2VyQWdlbnQtPmRpZFN0YXJ0V29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGVQ
cm94eSwgdXJsKTsKIH0KIApAQCAtOTc3LDcgKzk3Nyw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVXb3JrZXJTY3JpcHQoV29ya2VyR2xvYmFsU2NvcGUqIHdv
cmtlCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3b3JrZXJHbG9iYWxTY29wZVRl
cm1pbmF0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFdv
cmtlckdsb2JhbFNjb3BlUHJveHkqIHByb3h5KQogewotICAgIGlmIChJbnNwZWN0b3JXb3JrZXJB
Z2VudCogd29ya2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvcldvcmtlckFn
ZW50KCkpCisgICAgaWYgKFdvcmtlckFnZW50KiB3b3JrZXJBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMud29ya2VyQWdlbnQoKSkKICAgICAgICAgd29ya2VyQWdlbnQtPndvcmtlckdsb2JhbFNj
b3BlVGVybWluYXRlZChwcm94eSk7CiB9CiAKQEAgLTk5MCw5ICs5OTAsOSBAQCB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV2ViU29ja2V0SW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAg
ICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkQ3JlYXRlV2ViU29ja2V0KGlkZW50aWZpZXIsIHJlcXVl
c3RVUkwpOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYgKFRp
bWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5l
QWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkQ3JlYXRlV2ViU29ja2V0KGlkZW50
aWZpZXIsIHJlcXVlc3RVUkwsIHByb3RvY29sLCBkb2N1bWVudC0+ZnJhbWUoKSk7CiB9CiAKQEAg
LTEwMDEsOSArMTAwMSw5IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Vu
ZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3RJbXBsKEluc3RydW1lbnRpCiAgICAgaWYgKCFkb2N1
bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdl
bnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT53aWxsU2Vu
ZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QoaWRlbnRpZmllciwgcmVxdWVzdCk7Ci0gICAgaWYg
KEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGlt
ZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKQogICAgICAg
ICB0aW1lbGluZUFnZW50LT53aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QoaWRlbnRp
ZmllciwgZG9jdW1lbnQtPmZyYW1lKCkpOwogfQogCkBAIC0xMDEyLDkgKzEwMTIsOSBAQCB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJl
c3BvbnNlSW1wbChJbnN0cnVtZQogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNl
QWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQo
KSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJl
c3BvbnNlKGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxp
bmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRp
ZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShpZGVudGlmaWVyLCBkb2N1bWVudC0+
ZnJhbWUoKSk7CiB9CiAKQEAgLTEwMjMsMjUgKzEwMjMsMjUgQEAgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENsb3NlV2ViU29ja2V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnUKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJj
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJl
c291cmNlQWdlbnQtPmRpZENsb3NlV2ViU29ja2V0KGlkZW50aWZpZXIpOwotICAgIGlmIChJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5l
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGlt
ZWxpbmVBZ2VudC0+ZGlkRGVzdHJveVdlYlNvY2tldChpZGVudGlmaWVyLCBkb2N1bWVudC0+ZnJh
bWUoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2Vi
U29ja2V0RnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMs
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQog
ewotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNl
QWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQo
KSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkUmVjZWl2ZVdlYlNvY2tldEZyYW1lKGlkZW50
aWZpZXIsIGZyYW1lKTsKIH0KIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNl
aXZlV2ViU29ja2V0RnJhbWVFcnJvckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVu
dGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlm
IChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNv
dXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVXZWJTb2NrZXRG
cmFtZUVycm9yKGlkZW50aWZpZXIsIGVycm9yTWVzc2FnZSk7CiB9CiB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFNl
bmRXZWJTb2NrZXRGcmFtZShpZGVudGlmaWVyLCBmcmFtZSk7CiB9CiAjZW5kaWYKQEAgLTEwNDks
MTEzICsxMDQ5LDExMyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2VuZFdl
YlNvY2tldEZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbgogI2lmIEVOQUJMRShXRUJf
UkVQTEFZKQogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25DcmVhdGVkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5
U2Vzc2lvbj4mJiBzZXNzaW9uKQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVw
bGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCisg
ICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVw
bGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPnNlc3Npb25DcmVhdGVkKFdURjo6bW92
ZShzZXNzaW9uKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9u
TG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZWZQ
dHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlB
Z2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFn
ZW50KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPnNlc3Npb25Mb2FkZWQo
V1RGOjptb3ZlKHNlc3Npb24pKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlc3Npb25Nb2RpZmllZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0Fn
ZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYgc2Vzc2lvbikKIHsKLSAgICBpZiAoSW5zcGVj
dG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0
b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkpCiAgICAgICAgIHJlcGxheUFnZW50LT5zZXNz
aW9uTW9kaWZpZWQoV1RGOjptb3ZlKHNlc3Npb24pKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkK
IHsKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBsYXlBZ2VudCog
cmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkpCiAgICAgICAg
IHJlcGxheUFnZW50LT5zZWdtZW50Q3JlYXRlZChXVEY6Om1vdmUoc2VnbWVudCkpOwogfQogCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZEltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb25T
ZWdtZW50PiYmIHNlZ21lbnQpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBs
YXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAg
ICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBs
YXlBZ2VudCgpKQogICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVudENvbXBsZXRlZChXVEY6Om1v
dmUoc2VnbWVudCkpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVu
dExvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVm
UHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7Ci0gICAgaWYgKEluc3BlY3Rv
clJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
UmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVu
dExvYWRlZChXVEY6Om1vdmUoc2VnbWVudCkpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c2VnbWVudFVubG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgaWYg
KFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVwbGF5QWdl
bnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRVbmxvYWRlZCgpOwogfQogCiB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2FwdHVyZVN0YXJ0ZWRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlcGxh
eUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5
QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICByZXBsYXlBZ2VudC0+Y2FwdHVyZVN0YXJ0
ZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdG9wcGVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlm
IChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Lmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdl
bnQtPmNhcHR1cmVTdG9wcGVkKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpwbGF5YmFja1N0YXJ0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5
QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQog
ICAgICAgICByZXBsYXlBZ2VudC0+cGxheWJhY2tTdGFydGVkKCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1BhdXNlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQog
ewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiBy
ZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAg
cmVwbGF5QWdlbnQtPnBsYXliYWNrUGF1c2VkKHBvc2l0aW9uKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnBsYXliYWNrSGl0UG9zaXRpb25JbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlv
bikKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBsYXlBZ2Vu
dCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkpCiAgICAg
ICAgIHJlcGxheUFnZW50LT5wbGF5YmFja0hpdFBvc2l0aW9uKHBvc2l0aW9uKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBsYXliYWNrRmluaXNoZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJl
cGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVw
bGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICByZXBsYXlBZ2VudC0+cGxheWJhY2tG
aW5pc2hlZCgpOwogfQogI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpu
ZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5n
QWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIGFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50KCkpCisgICAgaWYgKEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRp
b25DYWNoZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5hcHBsaWNhdGlvbkNhY2hlQWdlbnQo
KSkKICAgICAgICAgYXBwbGljYXRpb25DYWNoZUFnZW50LT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1cGRhdGVBcHBsaWNhdGlvbkNh
Y2hlU3RhdHVzSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBG
cmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCog
YXBwbGljYXRpb25DYWNoZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSkKKyAgICBpZiAoQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBs
aWNhdGlvbkNhY2hlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmFwcGxpY2F0aW9uQ2FjaGVB
Z2VudCgpKQogICAgICAgICBhcHBsaWNhdGlvbkNhY2hlQWdlbnQtPnVwZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVTdGF0dXMoZnJhbWUpOwogfQogCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Y29uc29sZUFnZW50RW5hYmxlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KQogewogICAgIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KTsKLSAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMgPyBpbnN0cnVtZW50aW5nQWdlbnRzLT53ZWJDb25zb2xlQWdlbnQoKSA6IG51bGxw
dHI7CisgICAgQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
ID8gaW5zdHJ1bWVudGluZ0FnZW50cy0+d2ViQ29uc29sZUFnZW50KCkgOiBudWxscHRyOwogICAg
IHJldHVybiBjb25zb2xlQWdlbnQgJiYgY29uc29sZUFnZW50LT5lbmFibGVkKCk7CiB9CiAKIGJv
b2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp0aW1lbGluZUFnZW50RW5hYmxlZChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogewogICAgIEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
Q29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICByZXR1cm4gaW5zdHJ1bWVudGlu
Z0FnZW50cyAmJiBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7
CisgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHMgJiYgaW5zdHJ1bWVudGluZ0FnZW50cy0+
dGltZWxpbmVBZ2VudCgpOwogfQogCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVw
bGF5QWdlbnRFbmFibGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCiB7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAgICAgSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIHJldHVybiBpbnN0cnVtZW50aW5nQWdlbnRzICYm
IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlcGxheUFnZW50KCk7CisgICAgcmV0dXJu
IGluc3RydW1lbnRpbmdBZ2VudHMgJiYgaW5zdHJ1bWVudGluZ0FnZW50cy0+cmVwbGF5QWdlbnQo
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAg
IHJldHVybiBmYWxzZTsKQEAgLTExNjQsMTMgKzExNjQsMTMgQEAgYm9vbCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnJlcGxheUFnZW50RW5hYmxlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHQKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBhdXNlT25OYXRpdmVFdmVu
dElmTmVlZGVkKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGJvb2wg
aXNET01FdmVudCwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGJvb2wgc3luY2hyb25vdXMpCiB7
Ci0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAo
RE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
ZG9tRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21EZWJ1Z2dlckFnZW50LT5wYXVzZU9uTmF0
aXZlRXZlbnRJZk5lZWRlZChpc0RPTUV2ZW50LCBldmVudE5hbWUsIHN5bmNocm9ub3VzKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhbmNlbFBhdXNlT25OYXRpdmVFdmVu
dChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKERlYnVnZ2VyQWdlbnQqIGRlYnVn
Z2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAg
ZGVidWdnZXJBZ2VudC0+Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKIH0KIApAQCAtMTE3
OCw3ICsxMTc4LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlcXVlc3RB
bmltYXRpb25GcmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYKIHsKICAgICBwYXVzZU9uTmF0
aXZlRXZlbnRJZk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBmYWxzZSwgcmVxdWVzdEFuaW1h
dGlvbkZyYW1lRXZlbnROYW1lLCB0cnVlKTsKIAotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFn
ZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KCkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlk
UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrSWQsIGZyYW1lKTsKIH0KIApAQCAtMTE4Niw3
ICsxMTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbmNlbEFuaW1h
dGlvbkZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJgogewogICAgIHBhdXNlT25OYXRpdmVF
dmVudElmTmVlZGVkKGluc3RydW1lbnRpbmdBZ2VudHMsIGZhbHNlLCBjYW5jZWxBbmltYXRpb25G
cmFtZUV2ZW50TmFtZSwgdHJ1ZSk7CiAKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCog
dGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZENhbmNl
bEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrSWQsIGZyYW1lKTsKIH0KIApAQCAtMTE5NSw3ICsxMTk1
LDcgQEAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbEZpcmVBbmltYXRpb25GcmFtZUkKICAgICBwYXVzZU9uTmF0aXZlRXZlbnRJZk5l
ZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBmYWxzZSwgYW5pbWF0aW9uRnJhbWVGaXJlZEV2ZW50
TmFtZSwgZmFsc2UpOwogCiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgaWYgKElu
c3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Lmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkgeworICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1l
bGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpIHsKICAgICAg
ICAgdGltZWxpbmVBZ2VudC0+d2lsbEZpcmVBbmltYXRpb25GcmFtZShjYWxsYmFja0lkLCBmcmFt
ZSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CiAgICAg
fQpAQCAtMTIwNCw3ICsxMjA0LDcgQEAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVBbmltYXRpb25GcmFtZUkKIAogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpcmVBbmltYXRpb25GcmFtZUltcGwoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCiB7Ci0gICAgaWYgKEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQo
Y29va2llKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZl
VGltZWxpbmVBZ2VudChjb29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRGaXJlQW5p
bWF0aW9uRnJhbWUoKTsKIH0KIApAQCAtMTIyOCwxMiArMTIyOCwxMiBAQCB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6dW5yZWdpc3Rlckluc3RydW1lbnRpbmdBZ2VudHMoSW5zdHJ1bWVu
dGluZ0FnZW50cwogICAgIH0KIH0KIAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpyZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29uc3QgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCitUaW1lbGluZUFnZW50KiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnJldHJpZXZlVGltZWxpbmVBZ2VudChjb25zdCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUmIGNvb2tpZSkKIHsKICAgICBpZiAoIWNvb2tpZS5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGlt
ZWxpbmVBZ2VudCA9IGNvb2tpZS5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvclRpbWVs
aW5lQWdlbnQoKTsKKyAgICBUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gY29va2llLmlu
c3RydW1lbnRpbmdBZ2VudHMoKS0+dGltZWxpbmVBZ2VudCgpOwogICAgIGlmICh0aW1lbGluZUFn
ZW50ICYmIGNvb2tpZS5oYXNNYXRjaGluZ1RpbWVsaW5lQWdlbnRJZCh0aW1lbGluZUFnZW50LT5p
ZCgpKSkKICAgICAgICAgcmV0dXJuIHRpbWVsaW5lQWdlbnQ7CiAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC0xMjcwLDE5ICsxMjcwLDE5IEBAIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0Zvck5vbkRvY3VtZW50CiAKIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsYXllclRyZWVEaWRDaGFuZ2VJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50KiBsYXllclRyZWVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQoKSkKKyAgICBpZiAoTGF5ZXJUcmVlQWdlbnQqIGxheWVyVHJlZUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5sYXllclRyZWVBZ2VudCgpKQogICAgICAgICBsYXll
clRyZWVBZ2VudC0+bGF5ZXJUcmVlRGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpyZW5kZXJMYXllckRlc3Ryb3llZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgUmVuZGVyTGF5ZXImIHJlbmRlckxheWVyKQog
ewotICAgIGlmIChJbnNwZWN0b3JMYXllclRyZWVBZ2VudCogbGF5ZXJUcmVlQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckxheWVyVHJlZUFnZW50KCkpCisgICAgaWYgKExheWVy
VHJlZUFnZW50KiBsYXllclRyZWVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMubGF5ZXJUcmVl
QWdlbnQoKSkKICAgICAgICAgbGF5ZXJUcmVlQWdlbnQtPnJlbmRlckxheWVyRGVzdHJveWVkKHJl
bmRlckxheWVyKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBzZXVkb0Vs
ZW1lbnREZXN0cm95ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIFBzZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1lbnQpCiB7Ci0gICAgaWYgKEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50KiBsYXllclRyZWVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQoKSkKKyAgICBpZiAoTGF5ZXJUcmVlQWdlbnQqIGxheWVyVHJlZUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5sYXllclRyZWVBZ2VudCgpKQogICAgICAgICBsYXll
clRyZWVBZ2VudC0+cHNldWRvRWxlbWVudERlc3Ryb3llZChwc2V1ZG9FbGVtZW50KTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oCmluZGV4IDYxMGM0Y2RlNDg5NzRiM2ZiYzg1MjFiOTNmNzdlZTY5NjUwMmY2ZTYuLmRkMTc5
N2M2ZTY2MTBjZjFkOTY1MzMxZDM3MGNkMGJkMzQ4ZTRkZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTY4LDYgKzY4
LDcgQEAgY2xhc3MgUHJvZmlsZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NB
Z2VudDsKIGNsYXNzIENTU1J1bGU7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKIGNsYXNzIENoYXJh
Y3RlckRhdGE7CkBAIC04MCwxMiArODEsOSBAQCBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNz
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb247CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBj
bGFzcyBIVFRQSGVhZGVyTWFwOwotY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ7CiBjbGFzcyBJbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzOwogY2xhc3MgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOwotY2xh
c3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7Ci1j
bGFzcyBVUkw7CiBjbGFzcyBOb2RlOwogY2xhc3MgUHNldWRvRWxlbWVudDsKIGNsYXNzIFJlbmRl
ckxheWVyOwpAQCAtMTAwLDYgKzk4LDggQEAgY2xhc3MgU3RvcmFnZUFyZWE7CiBjbGFzcyBTdHls
ZVJlc29sdmVyOwogY2xhc3MgU3R5bGVSdWxlOwogY2xhc3MgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dDsKK2NsYXNzIFRpbWVsaW5lQWdlbnQ7CitjbGFzcyBVUkw7CiBjbGFzcyBXb3JrZXJHbG9iYWxT
Y29wZTsKIGNsYXNzIFdvcmtlckdsb2JhbFNjb3BlUHJveHk7CiBjbGFzcyBYTUxIdHRwUmVxdWVz
dDsKQEAgLTQ2Miw3ICs0NjIsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUoV29ya2VyR2xv
YmFsU2NvcGUqKTsKICAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50c0Zvck5vbkRvY3VtZW50Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAK
LSAgICBzdGF0aWMgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogcmV0cmlldmVUaW1lbGluZUFnZW50
KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOworICAgIHN0YXRpYyBUaW1l
bGluZUFnZW50KiByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBwYXVzZU9uTmF0aXZlRXZlbnRJZk5l
ZWRlZChJbnN0cnVtZW50aW5nQWdlbnRzJiwgYm9vbCBpc0RPTUV2ZW50LCBjb25zdCBTdHJpbmcm
IGV2ZW50TmFtZSwgYm9vbCBzeW5jaHJvbm91cyk7CiAgICAgc3RhdGljIHZvaWQgY2FuY2VsUGF1
c2VPbk5hdGl2ZUV2ZW50KEluc3RydW1lbnRpbmdBZ2VudHMmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCmluZGV4IGJlNjQ0
OTZlNDYzOGQwMGMzZWMyODkwODY1NmFlNjc3YTczODk3NTguLjljYjFmMGFhMDRlZGIzY2Q4MjM3
ZGI3ZjU5MzcwNDY3MDJhMDFmZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcApAQCAtNDYsMjMgKzQ2LDIzIEBAIHVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQ6Okluc3BlY3RvckxheWVyVHJlZUFnZW50KEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlM
aXRlcmFsKCJMYXllclRyZWUiKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKK0xheWVyVHJlZUFnZW50
OjpMYXllclRyZWVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
KQorICAgIDogV2ViQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiTGF5ZXJUcmVlIiksIGluc3RydW1l
bnRpbmdBZ2VudHMpCiB7CiB9CiAKLUluc3BlY3RvckxheWVyVHJlZUFnZW50Ojp+SW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQoKQorTGF5ZXJUcmVlQWdlbnQ6On5MYXllclRyZWVBZ2VudCgpCiB7CiAg
ICAgcmVzZXQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENo
YW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQor
dm9pZCBMYXllclRyZWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OkxheWVyVHJlZUZyb250ZW5kRGlzcGF0Y2hl
cj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9y
OjpMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0
aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQordm9pZCBMYXllclRy
ZWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjCiAgICAgZGlzYWJsZSh1bnVzZWQpOwogfQogCi12b2lkIEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50OjpyZXNldCgpCit2b2lkIExheWVyVHJlZUFnZW50OjpyZXNldCgpCiB7CiAg
ICAgbV9kb2N1bWVudExheWVyVG9JZE1hcC5jbGVhcigpOwogICAgIG1faWRUb0xheWVyLmNsZWFy
KCk7CkBAIC03OSwzNiArNzksMzYgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVz
ZXQoKQogICAgIG1faWRUb1BzZXVkb0VsZW1lbnQuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JMYXllclRyZWVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgTGF5ZXJUcmVlQWdl
bnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5z
ZXRJbnNwZWN0b3JMYXllclRyZWVBZ2VudCh0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMtPnNldExheWVyVHJlZUFnZW50KHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgTGF5ZXJUcmVlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQogewotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQobnVsbHB0cik7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5z
ZXRMYXllclRyZWVBZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6bGF5ZXJUcmVlRGlkQ2hhbmdlKCkKK3ZvaWQgTGF5ZXJUcmVlQWdlbnQ6OmxheWVyVHJl
ZURpZENoYW5nZSgpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxheWVyVHJlZURpZENo
YW5nZSgpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZW5kZXJMYXllckRl
c3Ryb3llZChjb25zdCBSZW5kZXJMYXllciYgcmVuZGVyTGF5ZXIpCit2b2lkIExheWVyVHJlZUFn
ZW50OjpyZW5kZXJMYXllckRlc3Ryb3llZChjb25zdCBSZW5kZXJMYXllciYgcmVuZGVyTGF5ZXIp
CiB7CiAgICAgdW5iaW5kKCZyZW5kZXJMYXllcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJU
cmVlQWdlbnQ6OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQoUHNldWRvRWxlbWVudCYgcHNldWRvRWxl
bWVudCkKK3ZvaWQgTGF5ZXJUcmVlQWdlbnQ6OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQoUHNldWRv
RWxlbWVudCYgcHNldWRvRWxlbWVudCkKIHsKICAgICB1bmJpbmRQc2V1ZG9FbGVtZW50KCZwc2V1
ZG9FbGVtZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6bGF5ZXJzRm9y
Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVy
Pj4mIGxheWVycykKK3ZvaWQgTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCiB7
CiAgICAgbGF5ZXJzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj46OmNyZWF0ZSgpOwogCi0gICAgTm9kZSogbm9kZSA9IG1f
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKS0+bm9kZUZvcklkKG5vZGVJ
ZCk7CisgICAgTm9kZSogbm9kZSA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+ZG9tQWdlbnQoKS0+
bm9kZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgIGVycm9yU3RyaW5n
ID0gQVNDSUlMaXRlcmFsKCJQcm92aWRlZCBub2RlIGlkIGRvZXNuJ3QgbWF0Y2ggYW55IGtub3du
IG5vZGUiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkCiAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHko
ZXJyb3JTdHJpbmcsIHJlbmRlcmVyLCBsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVy
Pj4mIGxheWVycykKK3ZvaWQgTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVy
T2JqZWN0SGllcmFyY2h5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJlci0+
aGFzTGF5ZXIoKSkgewogICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFy
Y2h5KGVycm9yU3RyaW5nLCBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVy
ZXIpLmxheWVyKCksIGxheWVycyk7CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBJbnNwZWN0b3JM
YXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJy
b3JTdHJpbmcKICAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHko
ZXJyb3JTdHJpbmcsIHJlbmRlcmVyLCBsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXll
cj4+JiBsYXllcnMpCit2b2lkIExheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRl
ckxheWVySGllcmFyY2h5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJl
bmRlckxheWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCiB7CiAgICAgaWYgKHJlbmRlckxh
eWVyLT5pc0NvbXBvc2l0ZWQoKSkKICAgICAgICAgbGF5ZXJzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0
Rm9yTGF5ZXIoZXJyb3JTdHJpbmcsIHJlbmRlckxheWVyKSk7CkBAIC0xNDMsNyArMTQzLDcgQEAg
dm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXll
ckhpZXJhcmNoeShFcnJvclN0cmluZyYKICAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJM
YXllckhpZXJhcmNoeShlcnJvclN0cmluZywgcmVuZGVyTGF5ZXIsIGxheWVycyk7CiB9CiAKLVJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
bmRlckxheWVyKiByZW5kZXJMYXllcikKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiBMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKIHsKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gJnJlbmRlckxheWVyLT5yZW5kZXJlcigpOwogICAgIFJlbmRlckxh
eWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CkBAIC0yMDIsMTIg
KzIwMiwxMiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0RgogICAgIHJldHVybiBXVEY6Om1vdmUo
bGF5ZXJPYmplY3QpOwogfQogCi1pbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9k
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCitpbnQgTGF5ZXJUcmVlQWdl
bnQ6OmlkRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEluc3BlY3RvckRPTUFnZW50
KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKTsK
KyAgICBET01BZ2VudCogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmRvbUFnZW50
KCk7CiAgICAgCiAgICAgaW50IG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZChub2RlKTsK
ICAgICBpZiAoIW5vZGVJZCkKQEAgLTIxNiw3ICsyMTYsNyBAQCBpbnQgSW5zcGVjdG9yTGF5ZXJU
cmVlQWdlbnQ6OmlkRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUp
CiAgICAgcmV0dXJuIG5vZGVJZDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9ySW50
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6SW50UmVjdD4gTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkludFJlY3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRYKHJlY3QueCgpKQpAQCAtMjI2
LDcgKzIyNiw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+
IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjCiAgICAgICAgIC5yZWxlYXNlKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGlu
Z0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBsYXllcklkLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+
JiBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQpCit2b2lkIExheWVyVHJlZUFnZW50OjpyZWFzb25z
Rm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9z
aXRpbmdSZWFzb25zPiYgY29tcG9zaXRpbmdSZWFzb25zUmVzdWx0KQogewogICAgIGNvbnN0IFJl
bmRlckxheWVyKiByZW5kZXJMYXllciA9IG1faWRUb0xheWVyLmdldChsYXllcklkKTsKIApAQCAt
MzEzLDcgKzMxMyw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JD
b21wb3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgY29tcG9zaXRpbmdS
ZWFzb25zUmVzdWx0ID0gV1RGOjptb3ZlKGNvbXBvc2l0aW5nUmVhc29ucyk7CiB9CiAKLVN0cmlu
ZyBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YmluZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIp
CitTdHJpbmcgTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQog
ewogICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwpAQCAtMzI2
LDcgKzMyNiw3IEBAIFN0cmluZyBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YmluZChjb25zdCBS
ZW5kZXJMYXllciogbGF5ZXIpCiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnVuYmluZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpCit2
b2lkIExheWVyVHJlZUFnZW50Ojp1bmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQogewog
ICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXIqLCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRv
ciA9IG1fZG9jdW1lbnRMYXllclRvSWRNYXAuZmluZChsYXllcik7CiAgICAgaWYgKGl0ZXJhdG9y
ID09IG1fZG9jdW1lbnRMYXllclRvSWRNYXAuZW5kKCkpCkBAIC0zMzUsNyArMzM1LDcgQEAgdm9p
ZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6dW5iaW5kKGNvbnN0IFJlbmRlckxheWVyKiBsYXll
cikKICAgICBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwLnJlbW92ZShpdGVyYXRvcik7CiB9CiAKLVN0
cmluZyBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YmluZFBzZXVkb0VsZW1lbnQoUHNldWRvRWxl
bWVudCogcHNldWRvRWxlbWVudCkKK1N0cmluZyBMYXllclRyZWVBZ2VudDo6YmluZFBzZXVkb0Vs
ZW1lbnQoUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCkKIHsKICAgICBpZiAoIXBzZXVkb0Vs
ZW1lbnQpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwpAQCAtMzQ4LDcgKzM0OCw3IEBA
IFN0cmluZyBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YmluZFBzZXVkb0VsZW1lbnQoUHNldWRv
RWxlbWVudCogcHNldWRvRWxlbWVudCkKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6dW5iaW5kUHNldWRvRWxlbWVudChQc2V1ZG9FbGVt
ZW50KiBwc2V1ZG9FbGVtZW50KQordm9pZCBMYXllclRyZWVBZ2VudDo6dW5iaW5kUHNldWRvRWxl
bWVudChQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50KQogewogICAgIEhhc2hNYXA8UHNldWRv
RWxlbWVudCosIFN0cmluZz46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9wc2V1ZG9FbGVtZW50VG9J
ZE1hcC5maW5kKHBzZXVkb0VsZW1lbnQpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX3BzZXVkb0Vs
ZW1lbnRUb0lkTWFwLmVuZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckxheWVyVHJlZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuaAppbmRleCA1YWJjMTM3NTMyNTZkODQ0NTI2ZTJiMzU5OGY0
YWMxMmIzY2U1NzUxLi4zMmRjZjM4MmRkMzY2YjViMWU4YzMwZWFkMGZhOGQzY2M0MTNiMjI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuaApAQCAtNDQsMTEgKzQ0LDExIEBAIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiAKIHR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6Okxh
eWVyVHJlZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitjbGFzcyBMYXllclRyZWVBZ2VudCBm
aW5hbCA6IHB1YmxpYyBXZWJBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkxheWVyVHJlZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyopOwotICAgIHZpcnR1YWwgfkluc3BlY3RvckxheWVyVHJlZUFnZW50KCk7CisgICAg
ZXhwbGljaXQgTGF5ZXJUcmVlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyopOworICAgIHZpcnR1
YWwgfkxheWVyVHJlZUFnZW50KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRl
eCA4ZjljY2U3NzY4MGY2MjI2ZGU0Njg5YzEyYjNmNTA0NmRjMzQxYjllLi40MzRkODQ2NTVlMWFl
ZmVlMjU4ODIyMjAxMWJlMjQwZjg5Mzk5NDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMTEyLDggKzExMiw4IEBAIHN0YXRpYyBi
b29sIHByZXBhcmVDYWNoZWRSZXNvdXJjZUJ1ZmZlcihDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVz
b3VyY2UsIGJvb2wqIGhhCiAKIHN0YXRpYyBib29sIGhhc1RleHRDb250ZW50KENhY2hlZFJlc291
cmNlKiBjYWNoZWRSZXNvdXJjZSkKIHsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNl
VHlwZSB0eXBlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNhY2hl
ZFJlc291cmNlKTsKLSAgICByZXR1cm4gdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OkRvY3Vt
ZW50UmVzb3VyY2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlN0eWxlc2hlZXRSZXNv
dXJjZSB8fCB0eXBlID09IEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0UmVzb3VyY2UgfHwgdHlw
ZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlhIUlJlc291cmNlOworICAgIFBhZ2VBZ2VudDo6UmVz
b3VyY2VUeXBlIHR5cGUgPSBQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZSgqY2FjaGVkUmVz
b3VyY2UpOworICAgIHJldHVybiB0eXBlID09IFBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZSB8
fCB0eXBlID09IFBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291cmNlIHx8IHR5cGUgPT0gUGFnZUFn
ZW50OjpTY3JpcHRSZXNvdXJjZSB8fCB0eXBlID09IFBhZ2VBZ2VudDo6WEhSUmVzb3VyY2U7CiB9
CiAKIHN0YXRpYyBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlWEhSVGV4dERlY29k
ZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1l
KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4g
Y3JlYXRlWEhSVGV4dERlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwKICAgICByZXR1cm4g
V1RGOjptb3ZlKGRlY29kZXIpOwogfQogCi1ib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVk
UmVzb3VyY2VDb250ZW50KENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKiBy
ZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCitib29sIFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3Vy
Y2VDb250ZW50KENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKiByZXN1bHQs
IGJvb2wqIGJhc2U2NEVuY29kZWQpCiB7CiAgICAgYm9vbCBoYXNaZXJvU2l6ZTsKICAgICBib29s
IHByZXBhcmVkID0gcHJlcGFyZUNhY2hlZFJlc291cmNlQnVmZmVyKGNhY2hlZFJlc291cmNlLCAm
aGFzWmVyb1NpemUpOwpAQCAtMTc5LDIxICsxNzksMjEgQEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmNhY2hlZFJlc291cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2Us
IFMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjptYWlu
UmVzb3VyY2VDb250ZW50KEZyYW1lKiBmcmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJp
bmcqIHJlc3VsdCkKK2Jvb2wgUGFnZUFnZW50OjptYWluUmVzb3VyY2VDb250ZW50KEZyYW1lKiBm
cmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCkKIHsKICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIo
KS0+bWFpblJlc291cmNlRGF0YSgpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoYnVmZmVy
LT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpLCBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGlu
ZygpLCB3aXRoQmFzZTY0RW5jb2RlLCByZXN1bHQpOworICAgIHJldHVybiBQYWdlQWdlbnQ6OmRh
dGFDb250ZW50KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSwgZnJhbWUtPmRvY3VtZW50
KCktPmlucHV0RW5jb2RpbmcoKSwgd2l0aEJhc2U2NEVuY29kZSwgcmVzdWx0KTsKIH0KIAogLy8g
c3RhdGljCi1ib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29udGVudChQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05h
bWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpCitib29sIFBhZ2VBZ2Vu
dDo6c2hhcmVkQnVmZmVyQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBj
b25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3Ry
aW5nKiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIGRhdGFDb250ZW50KGJ1ZmZlciA/IGJ1ZmZlci0+
ZGF0YSgpIDogbnVsbHB0ciwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiAwLCB0ZXh0RW5jb2Rp
bmdOYW1lLCB3aXRoQmFzZTY0RW5jb2RlLCByZXN1bHQpOwogfQogCi1ib29sIEluc3BlY3RvclBh
Z2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSwgY29u
c3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmlu
ZyogcmVzdWx0KQorYm9vbCBQYWdlQWdlbnQ6OmRhdGFDb250ZW50KGNvbnN0IGNoYXIqIGRhdGEs
IHVuc2lnbmVkIHNpemUsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRo
QmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCkKIHsKICAgICBpZiAod2l0aEJhc2U2NEVuY29k
ZSkgewogICAgICAgICAqcmVzdWx0ID0gYmFzZTY0RW5jb2RlKGRhdGEsIHNpemUpOwpAQCAtMjA0
LDcgKzIwNCw3IEBAIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpkYXRhQ29udGVudChjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBzaXplLCBjb25zdCBTdHJpCiB9CiAKIC8vIHN0YXRpYwotdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIFN0cmluZyogcmVzdWx0LCBib29s
KiBiYXNlNjRFbmNvZGVkKQordm9pZCBQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIFN0cmluZyog
cmVzdWx0LCBib29sKiBiYXNlNjRFbmNvZGVkKQogewogICAgIERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIgPSBhc3NlcnREb2N1bWVudExvYWRlcihlcnJvclN0cmluZywgZnJhbWUpOwogICAgIGlmICgh
bG9hZGVyKQpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNv
dXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUsCiB9CiAK
IC8vc3RhdGljCi1TdHJpbmcgSW5zcGVjdG9yUGFnZUFnZW50Ojpzb3VyY2VNYXBVUkxGb3JSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCitTdHJpbmcgUGFnZUFnZW50Ojpz
b3VyY2VNYXBVUkxGb3JSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiB7
CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc291cmNlTWFwSFRU
UEhlYWRlciwgKEFTQ0lJTGl0ZXJhbCgiU291cmNlTWFwIikpKTsKICAgICBERVBSRUNBVEVEX0RF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzb3VyY2VNYXBIVFRQSGVhZGVyRGVwcmVjYXRlZCwg
KEFTQ0lJTGl0ZXJhbCgiWC1Tb3VyY2VNYXAiKSkpOwpAQCAtMjQ3LDEzICsyNDcsMTMgQEAgU3Ry
aW5nIEluc3BlY3RvclBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2UqIGNhY2hlZFJlc291cmMKIAogICAgIFN0cmluZyBjb250ZW50OwogICAgIGJvb2wgYmFz
ZTY0RW5jb2RlZDsKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZUNv
bnRlbnQoY2FjaGVkUmVzb3VyY2UsICZjb250ZW50LCAmYmFzZTY0RW5jb2RlZCkgJiYgIWJhc2U2
NEVuY29kZWQpCisgICAgaWYgKFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KGNhY2hl
ZFJlc291cmNlLCAmY29udGVudCwgJmJhc2U2NEVuY29kZWQpICYmICFiYXNlNjRFbmNvZGVkKQog
ICAgICAgICByZXR1cm4gQ29udGVudFNlYXJjaFV0aWxpdGllczo6ZmluZFN0eWxlc2hlZXRTb3Vy
Y2VNYXBVUkwoY29udGVudCk7CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLUNhY2hlZFJl
c291cmNlKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlKEZyYW1lKiBmcmFtZSwg
Y29uc3QgVVJMJiB1cmwpCitDYWNoZWRSZXNvdXJjZSogUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZShGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQogewogICAgIENhY2hlZFJlc291cmNlKiBj
YWNoZWRSZXNvdXJjZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
LmNhY2hlZFJlc291cmNlKHVybCk7CiAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkgewpAQCAtMjY3
LDcgKzI2Nyw3IEBAIENhY2hlZFJlc291cmNlKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJl
c291cmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuIGNhY2hlZFJl
c291cmNlOwogfQogCi1JbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5z
cGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVz
b3VyY2VUeXBlIHJlc291cmNlVHlwZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291
cmNlVHlwZSBQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24oUGFnZUFnZW50OjpSZXNvdXJjZVR5
cGUgcmVzb3VyY2VUeXBlKQogewogICAgIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7CiAgICAgY2Fz
ZSBEb2N1bWVudFJlc291cmNlOgpAQCAtMjkwLDQxICsyOTAsNDEgQEAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBl
SnNvbihJbnMKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlOjpPdGhlcjsKIH0KIAotSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgSW5zcGVj
dG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNh
Y2hlZFJlc291cmNlKQorUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgUGFnZUFnZW50OjpjYWNoZWRS
ZXNvdXJjZVR5cGUoY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewogICAg
IHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UudHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6SW1h
Z2VSZXNvdXJjZTsKKyAgICAgICAgcmV0dXJuIFBhZ2VBZ2VudDo6SW1hZ2VSZXNvdXJjZTsKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNv
dXJjZToKICNlbmRpZgogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6Rm9udFJlc291cmNlOworICAgICAgICBy
ZXR1cm4gUGFnZUFnZW50OjpGb250UmVzb3VyY2U7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
Q1NTU3R5bGVTaGVldDoKICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgogI2lmIEVOQUJMRShYU0xU
KQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CiAjZW5kaWYKLSAgICAg
ICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291cmNlOworICAgICAg
ICByZXR1cm4gUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3VyY2U7CiAgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6U2NyaXB0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50OjpTY3Jp
cHRSZXNvdXJjZTsKKyAgICAgICAgcmV0dXJuIFBhZ2VBZ2VudDo6U2NyaXB0UmVzb3VyY2U7CiAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OlhIUlJlc291cmNlOworICAgICAgICByZXR1cm4gUGFnZUFnZW50OjpY
SFJSZXNvdXJjZTsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OkRvY3VtZW50UmVzb3VyY2U7CisgICAgICAg
IHJldHVybiBQYWdlQWdlbnQ6OkRvY3VtZW50UmVzb3VyY2U7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVz
b3VyY2U7CisgICAgcmV0dXJuIFBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZTsKIH0KIAotSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2Fj
aGVkUmVzb3VyY2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2Up
CitJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgUGFnZUFnZW50OjpjYWNo
ZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkK
IHsKICAgICByZXR1cm4gcmVzb3VyY2VUeXBlSnNvbihjYWNoZWRSZXNvdXJjZVR5cGUoY2FjaGVk
UmVzb3VyY2UpKTsKIH0KIAotSW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdlbnQo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwgSW5z
cGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCi0gICAgOiBJ
bnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJQYWdlIiksIGluc3RydW1lbnRpbmdBZ2Vu
dHMpCitQYWdlQWdlbnQ6OlBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9y
T3ZlcmxheSogb3ZlcmxheSkKKyAgICA6IFdlYkFnZW50QmFzZShBU0NJSUxpdGVyYWwoIlBhZ2Ui
KSwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9jbGll
bnQoY2xpZW50KQogICAgICwgbV9vdmVybGF5KG92ZXJsYXkpCkBAIC0zMzcsMTMgKzMzNywxMyBA
QCBJbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLAogewogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
KiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKQordm9pZCBQYWdlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpQYWdlRnJvbnRlbmREaXNwYXRj
aGVyPihmcm9udGVuZENoYW5uZWwpOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0
b3I6OlBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKK3ZvaWQgUGFnZUFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7
CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOwogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXIuY2xlYXIoKTsKQEAgLTM1NSwyNSArMzU1LDI1IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RS
ZWFzCiAjZW5kaWYKIH0KIAotZG91YmxlIEluc3BlY3RvclBhZ2VBZ2VudDo6dGltZXN0YW1wKCkK
K2RvdWJsZSBQYWdlQWdlbnQ6OnRpbWVzdGFtcCgpCiB7CiAgICAgcmV0dXJuIG1faW5zdHJ1bWVu
dGluZ0FnZW50cy0+aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2goKS0+
ZWxhcHNlZFRpbWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCit2b2lkIFBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIHsKICAgICBt
X2VuYWJsZWQgPSB0cnVlOwotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9y
UGFnZUFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0UGFnZUFnZW50
KHRoaXMpOwogCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpKQogICAgICAgICBt
X29yaWdpbmFsU2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQgPSAhZnJhbWUtPnNldHRpbmdzKCkuaXNT
Y3JpcHRFbmFibGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaXNhYmxlKEVy
cm9yU3RyaW5nJikKK3ZvaWQgUGFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKIHsKICAg
ICBtX2VuYWJsZWQgPSBmYWxzZTsKICAgICBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLmNsZWFy
KCk7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JQYWdlQWdlbnQobnVs
bHB0cik7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRQYWdlQWdlbnQobnVsbHB0cik7
CiAKICAgICBFcnJvclN0cmluZyB1bnVzZWQ7CiAgICAgc2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJs
ZWQodW51c2VkLCBtX29yaWdpbmFsU2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQpOwpAQCAtMzgxLDcg
KzM4MSw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikK
ICAgICBzZXRFbXVsYXRlZE1lZGlhKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIFN0cmluZyogaWRlbnRpZmllcikKK3ZvaWQgUGFnZUFn
ZW50OjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBzb3VyY2UsIFN0cmluZyogaWRlbnRpZmllcikKIHsKICAgICBpZiAoIW1fc2NyaXB0c1RvRXZh
bHVhdGVPbkxvYWQpCiAgICAgICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBzCiAgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC0+c2V0U3RyaW5nKCppZGVudGlm
aWVyLCBzb3VyY2UpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVtb3ZlU2NyaXB0
VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllcikKK3ZvaWQgUGFnZUFnZW50OjpyZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKEVycm9y
U3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQogewogICAgIGlmICghbV9z
Y3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCB8fCBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLT5maW5k
KGlkZW50aWZpZXIpID09IG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQtPmVuZCgpKSB7CiAgICAg
ICAgIGVycm9yID0gQVNDSUlMaXRlcmFsKCJTY3JpcHQgbm90IGZvdW5kIik7CkBAIC00MDUsMTMg
KzQwNSwxMyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVtb3ZlU2NyaXB0VG9FdmFsdWF0
ZU9uTG9hZChFcnJvclN0cmluZyYgZXJyb3IsIGNvbnN0CiAgICAgbV9zY3JpcHRzVG9FdmFsdWF0
ZU9uTG9hZC0+cmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6cmVsb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJZ25vcmVD
YWNoZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQpCit2b2lk
IFBhZ2VBZ2VudDo6cmVsb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9u
YWxJZ25vcmVDYWNoZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNjcmlwdFRvRXZhbHVhdGVPbkxv
YWQpCiB7CiAgICAgbV9wZW5kaW5nU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZE9uY2UgPSBvcHRpb25h
bFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQgPyAqb3B0aW9uYWxTY3JpcHRUb0V2YWx1YXRlT25Mb2Fk
IDogIiI7CiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5yZWxvYWQob3B0aW9uYWxJ
Z25vcmVDYWNoZSA/ICpvcHRpb25hbElnbm9yZUNhY2hlIDogZmFsc2UpOwogfQogCi12b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVy
bCkKK3ZvaWQgUGFnZUFnZW50OjpuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dXJsKQogewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpOwpAQCAtNDg2LDcgKzQ4Niw3IEBAIHN0YXRpYyBWZWN0b3I8VVJMPiBhbGxSZXNvdXJjZXNV
UkxzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+
JiBjb29raWVzKQordm9pZCBQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
Q29va2llPj4mIGNvb2tpZXMpCiB7CiAgICAgLy8gSWYgd2UgY2FuIGdldCByYXcgY29va2llcy4K
ICAgICBMaXN0SGFzaFNldDxDb29raWU+IHJhd0Nvb2tpZXNMaXN0OwpAQCAtNTI4LDE5ICs1Mjgs
MTkgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXIKICAgICAgICAgY29va2llcyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT46OmNy
ZWF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkKK3Zv
aWQgUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIFVSTCBwYXJzZWRVUkwoUGFyc2Vk
VVJMU3RyaW5nLCB1cmwpOwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1fcGFnZS0+bWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCiAgICAg
ICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShmcmFtZS0+ZG9jdW1lbnQoKSwgcGFyc2VkVVJMLCBj
b29raWVOYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlVHJl
ZShFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJl
c291cmNlVHJlZT4mIG9iamVjdCkKK3ZvaWQgUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoRXJy
b3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJj
ZVRyZWU+JiBvYmplY3QpCiB7CiAgICAgb2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUo
Jm1fcGFnZS0+bWFpbkZyYW1lKCkpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0
UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBm
cmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRF
bmNvZGVkKQordm9pZCBQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFN0
cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKIHsKICAgICBGcmFtZSogZnJhbWUg
PSBhc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKQEAg
LTU1NCw3ICs1NTQsNyBAQCBzdGF0aWMgYm9vbCB0ZXh0Q29udGVudEZvckNhY2hlZFJlc291cmNl
KENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKgogICAgIGlmIChoYXNUZXh0
Q29udGVudChjYWNoZWRSZXNvdXJjZSkpIHsKICAgICAgICAgU3RyaW5nIGNvbnRlbnQ7CiAgICAg
ICAgIGJvb2wgYmFzZTY0RW5jb2RlZDsKLSAgICAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudDo6
Y2FjaGVkUmVzb3VyY2VDb250ZW50KGNhY2hlZFJlc291cmNlLCByZXN1bHQsICZiYXNlNjRFbmNv
ZGVkKSkgeworICAgICAgICBpZiAoUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQoY2Fj
aGVkUmVzb3VyY2UsIHJlc3VsdCwgJmJhc2U2NEVuY29kZWQpKSB7CiAgICAgICAgICAgICBBU1NF
UlQoIWJhc2U2NEVuY29kZWQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
QEAgLTU2Miw3ICs1NjIsNyBAQCBzdGF0aWMgYm9vbCB0ZXh0Q29udGVudEZvckNhY2hlZFJlc291
cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUs
IGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0
Y2g+PiYgcmVzdWx0cykKK3ZvaWQgUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25z
dCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4m
IHJlc3VsdHMpCiB7CiAgICAgcmVzdWx0cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+OjpjcmVhdGUoKTsK
IApAQCAtNjA1LDcgKzYwNSw3IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjCiAgICAgICAgIC5y
ZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNl
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qgb3B0
aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQordm9pZCBQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3Vy
Y2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBib29sKiBjb25zdCBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OlNlYXJjaFJlc3VsdD4+JiByZXN1bHQpCiB7CiAgICAgcmVzdWx0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pjo6
Y3JlYXRlKCk7CiAKQEAgLTYzMiw3ICs2MzIsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
c2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgog
ICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldERvY3VtZW50Q29udGVudChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3Ry
aW5nJiBodG1sKQordm9pZCBQYWdlQWdlbnQ6OnNldERvY3VtZW50Q29udGVudChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBodG1s
KQogewogICAgIEZyYW1lKiBmcmFtZSA9IGFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlk
KTsKICAgICBpZiAoIWZyYW1lKQpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXREb2N1bWVudENvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpCiAgICAgRE9NUGF0Y2hTdXBwb3J0OjpwYXRjaERvY3VtZW50KGRvY3VtZW50LCBodG1s
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dQYWludFJlY3RzKEVycm9y
U3RyaW5nJiwgYm9vbCBzaG93KQordm9pZCBQYWdlQWdlbnQ6OnNldFNob3dQYWludFJlY3RzKEVy
cm9yU3RyaW5nJiwgYm9vbCBzaG93KQogewogICAgIG1fc2hvd1BhaW50UmVjdHMgPSBzaG93Owog
ICAgIG1fY2xpZW50LT5zZXRTaG93UGFpbnRSZWN0cyhzaG93KTsKQEAgLTY1Nyw3ICs2NTcsNyBA
QCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2hvd1BhaW50UmVjdHMoRXJyb3JTdHJpbmcm
LCBib29sIHNob3cpCiAgICAgbV9vdmVybGF5LT5zZXRTaG93aW5nUGFpbnRSZWN0cyhzaG93KTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhF
cnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVz
dWx0KiBzdGF0dXMpCit2b2lkIFBhZ2VBZ2VudDo6Z2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKEVy
cm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1
bHQqIHN0YXR1cykKIHsKICAgICBib29sIGRpc2FibGVkQnlTY3JpcHRDb250cm9sbGVyID0gZmFs
c2U7CiAgICAgYm9vbCBkaXNhYmxlZEluU2V0dGluZ3MgPSBmYWxzZTsKQEAgLTY3OCw3ICs2Nzgs
NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKEVy
cm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQYWdlQgogICAgICAgICAqc3RhdHVzID0gSW5zcGVjdG9y
OjpQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQ6OkZvcmJpZGRlbjsKIH0KIAot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkKEVycm9y
U3RyaW5nJiwgYm9vbCB2YWx1ZSkKK3ZvaWQgUGFnZUFnZW50OjpzZXRTY3JpcHRFeGVjdXRpb25E
aXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKCFtYWluRnJhbWUo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgdmFs
dWUpCiAgICAgbV9pZ25vcmVTY3JpcHRzRW5hYmxlZE5vdGlmaWNhdGlvbiA9IGZhbHNlOwogfQog
Ci12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZy
YW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKK3ZvaWQgUGFnZUFnZW50OjpkaWRD
bGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQmIHdv
cmxkKQogewogICAgIGlmICgmd29ybGQgIT0gJm1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC03MDgsMTggKzcwOCwxOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldv
cgogICAgICAgICBmcmFtZS0+c2NyaXB0KCkuZXhlY3V0ZVNjcmlwdChtX3NjcmlwdFRvRXZhbHVh
dGVPbkxvYWRPbmNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRF
dmVudEZpcmVkKCkKK3ZvaWQgUGFnZUFnZW50Ojpkb21Db250ZW50RXZlbnRGaXJlZCgpCiB7CiAg
ICAgbV9pc0ZpcnN0TGF5b3V0QWZ0ZXJPbkxvYWQgPSB0cnVlOwogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5kb21Db250ZW50RXZlbnRGaXJlZCh0aW1lc3RhbXAoKSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50Ojpsb2FkRXZlbnRGaXJlZCgpCit2b2lkIFBhZ2VBZ2VudDo6bG9hZEV2
ZW50RmlyZWQoKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sb2FkRXZlbnRGaXJlZCh0
aW1lc3RhbXAoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZU5hdmlnYXRl
ZChEb2N1bWVudExvYWRlciogbG9hZGVyKQordm9pZCBQYWdlQWdlbnQ6OmZyYW1lTmF2aWdhdGVk
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgaWYgKGxvYWRlci0+ZnJhbWUoKS0+aXNN
YWluRnJhbWUoKSkgewogICAgICAgICBtX3NjcmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlID0gbV9w
ZW5kaW5nU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZE9uY2U7CkBAIC03MjgsNyArNzI4LDcgQEAgdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmZyYW1lTmF2aWdhdGVkKGJ1aWxkT2JqZWN0
Rm9yRnJhbWUobG9hZGVyLT5mcmFtZSgpKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpmcmFtZURldGFjaGVkKEZyYW1lJiBmcmFtZSkKK3ZvaWQgUGFnZUFnZW50OjpmcmFtZURldGFj
aGVkKEZyYW1lJiBmcmFtZSkKIHsKICAgICBIYXNoTWFwPEZyYW1lKiwgU3RyaW5nPjo6aXRlcmF0
b3IgaXRlcmF0b3IgPSBtX2ZyYW1lVG9JZGVudGlmaWVyLmZpbmQoJmZyYW1lKTsKICAgICBpZiAo
aXRlcmF0b3IgIT0gbV9mcmFtZVRvSWRlbnRpZmllci5lbmQoKSkgewpAQCAtNzM4LDE4ICs3Mzgs
MTggQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUmIGZyYW1l
KQogICAgIH0KIH0KIAotRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6bWFpbkZyYW1lKCkKK0Zy
YW1lKiBQYWdlQWdlbnQ6Om1haW5GcmFtZSgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHJldHVybiBhIEZyYW1lJgogICAgIHJldHVybiAmbV9wYWdlLT5tYWluRnJhbWUoKTsKIH0KIAot
RnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVGb3JJZChjb25zdCBTdHJpbmcmIGZyYW1l
SWQpCitGcmFtZSogUGFnZUFnZW50OjpmcmFtZUZvcklkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCkK
IHsKICAgICByZXR1cm4gZnJhbWVJZC5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9pZGVudGlmaWVy
VG9GcmFtZS5nZXQoZnJhbWVJZCk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZy
YW1lSWQoRnJhbWUqIGZyYW1lKQorU3RyaW5nIFBhZ2VBZ2VudDo6ZnJhbWVJZChGcmFtZSogZnJh
bWUpCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuICIiOwpAQCAtNzYyLDEyICs3
NjIsMTIgQEAgU3RyaW5nIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVJZChGcmFtZSogZnJhbWUp
CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLWJvb2wgSW5zcGVjdG9yUGFnZUFnZW50Ojpo
YXNJZEZvckZyYW1lKEZyYW1lKiBmcmFtZSkgY29uc3QKK2Jvb2wgUGFnZUFnZW50OjpoYXNJZEZv
ckZyYW1lKEZyYW1lKiBmcmFtZSkgY29uc3QKIHsKICAgICByZXR1cm4gZnJhbWUgJiYgbV9mcmFt
ZVRvSWRlbnRpZmllci5jb250YWlucyhmcmFtZSk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmxvYWRlcklkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCitTdHJpbmcgUGFnZUFnZW50
Ojpsb2FkZXJJZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIGlmICghbG9hZGVyKQog
ICAgICAgICByZXR1cm4gIiI7CkBAIC03NzksNyArNzc5LDcgQEAgU3RyaW5nIEluc3BlY3RvclBh
Z2VBZ2VudDo6bG9hZGVySWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICByZXR1cm4gaWRl
bnRpZmllcjsKIH0KIAotRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNl
Y3VyaXR5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luUmF3U3RyaW5nKQorRnJhbWUqIFBhZ2VB
Z2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luUmF3
U3RyaW5nKQogewogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1fcGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAg
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBkb2N1bWVudE9yaWdpbiA9IGZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpOwpAQCAtNzg5LDcgKzc4OSw3IEBAIEZyYW1lKiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdp
blJhd1N0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUZyYW1lKiBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmFzc2VydEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBm
cmFtZUlkKQorRnJhbWUqIFBhZ2VBZ2VudDo6YXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gZnJh
bWVGb3JJZChmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtNzk4LDcgKzc5OCw3IEBAIEZy
YW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBmCiB9CiAKIC8vIHN0YXRpYwotRG9jdW1lbnRMb2FkZXIqIElu
c3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBGcmFtZSogZnJhbWUpCitEb2N1bWVudExvYWRlciogUGFnZUFnZW50Ojphc3NlcnRE
b2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEZyYW1lKiBmcmFtZSkKIHsK
ICAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CiAgICAgRG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWVMb2FkZXIuZG9jdW1lbnRMb2FkZXIo
KTsKQEAgLTgwNyw0MiArODA3LDQyIEBAIERvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmFzc2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgcmV0
dXJuIGRvY3VtZW50TG9hZGVyOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVy
RGV0YWNoZWRGcm9tRnJhbWUoRG9jdW1lbnRMb2FkZXImIGxvYWRlcikKK3ZvaWQgUGFnZUFnZW50
Ojpsb2FkZXJEZXRhY2hlZEZyb21GcmFtZShEb2N1bWVudExvYWRlciYgbG9hZGVyKQogewogICAg
IG1fbG9hZGVyVG9JZGVudGlmaWVyLnJlbW92ZSgmbG9hZGVyKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmZyYW1lU3RhcnRlZExvYWRpbmcoRnJhbWUmIGZyYW1lKQordm9pZCBQYWdl
QWdlbnQ6OmZyYW1lU3RhcnRlZExvYWRpbmcoRnJhbWUmIGZyYW1lKQogewogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5mcmFtZVN0YXJ0ZWRMb2FkaW5nKGZyYW1lSWQoJmZyYW1lKSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZVN0b3BwZWRMb2FkaW5nKEZyYW1lJiBmcmFt
ZSkKK3ZvaWQgUGFnZUFnZW50OjpmcmFtZVN0b3BwZWRMb2FkaW5nKEZyYW1lJiBmcmFtZSkKIHsK
ICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZnJhbWVTdG9wcGVkTG9hZGluZyhmcmFtZUlkKCZm
cmFtZSkpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVTY2hlZHVsZWROYXZp
Z2F0aW9uKEZyYW1lJiBmcmFtZSwgZG91YmxlIGRlbGF5KQordm9pZCBQYWdlQWdlbnQ6OmZyYW1l
U2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJhbWUsIGRvdWJsZSBkZWxheSkKIHsKICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+ZnJhbWVTY2hlZHVsZWROYXZpZ2F0aW9uKGZyYW1lSWQoJmZy
YW1lKSwgZGVsYXkpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVDbGVhcmVk
U2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJhbWUpCit2b2lkIFBhZ2VBZ2VudDo6ZnJhbWVD
bGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJhbWUpCiB7CiAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oZnJhbWVJZCgmZnJh
bWUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OndpbGxSdW5KYXZhU2NyaXB0RGlh
bG9nKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgUGFnZUFnZW50Ojp3aWxsUnVuSmF2YVNj
cmlwdERpYWxvZyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmphdmFzY3JpcHREaWFsb2dPcGVuaW5nKG1lc3NhZ2UpOwogfQogCi12b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZGlkUnVuSmF2YVNjcmlwdERpYWxvZygpCit2b2lkIFBhZ2VBZ2VudDo6
ZGlkUnVuSmF2YVNjcmlwdERpYWxvZygpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmph
dmFzY3JpcHREaWFsb2dDbG9zZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRp
ZFBhaW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCit2
b2lkIFBhZ2VBZ2VudDo6ZGlkUGFpbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgTGF5
b3V0UmVjdCYgcmVjdCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCB8fCAhbV9zaG93UGFpbnRSZWN0
cykKICAgICAgICAgcmV0dXJuOwpAQCAtODY0LDcgKzg2NCw3IEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpkaWRQYWludChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0
JiByZWN0CiAgICAgbV9vdmVybGF5LT5zaG93UGFpbnRSZWN0KHJvb3RSZWN0KTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZExheW91dCgpCit2b2lkIFBhZ2VBZ2VudDo6ZGlkTGF5
b3V0KCkKIHsKICAgICBib29sIGlzRmlyc3RMYXlvdXQgPSBtX2lzRmlyc3RMYXlvdXRBZnRlck9u
TG9hZDsKICAgICBpZiAoaXNGaXJzdExheW91dCkKQEAgLTg3NiwxOSArODc2LDE5IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRMYXlvdXQoKQogICAgIG1fb3ZlcmxheS0+dXBkYXRlKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRTY3JvbGwoKQordm9pZCBQYWdlQWdl
bnQ6OmRpZFNjcm9sbCgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKICAgICAgICAgbV9vdmVybGF5
LT51cGRhdGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFJlY2FsY3VsYXRl
U3R5bGUoKQordm9pZCBQYWdlQWdlbnQ6OmRpZFJlY2FsY3VsYXRlU3R5bGUoKQogewogICAgIGlm
IChtX2VuYWJsZWQpCiAgICAgICAgIG1fb3ZlcmxheS0+dXBkYXRlKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzY3JpcHRzRW5hYmxlZChib29sIGlzRW5hYmxlZCkKK3ZvaWQgUGFn
ZUFnZW50OjpzY3JpcHRzRW5hYmxlZChib29sIGlzRW5hYmxlZCkKIHsKICAgICBpZiAobV9pZ25v
cmVTY3JpcHRzRW5hYmxlZE5vdGlmaWNhdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtODk2LDcg
Kzg5Niw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzY3JpcHRzRW5hYmxlZChib29sIGlz
RW5hYmxlZCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0c0VuYWJsZWQoaXNFbmFi
bGVkKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQorUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJh
bWUoRnJhbWUqIGZyYW1lKQogewogICAgIGF1dG8gZnJhbWVPYmplY3QgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKGZyYW1lSWQoZnJh
bWUpKQpAQCAtOTE3LDcgKzkxNyw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpG
cmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyCiAgICAgcmV0
dXJuIFdURjo6bW92ZShmcmFtZU9iamVjdCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVj
dEZvckZyYW1lVHJlZShGcmFtZSogZnJhbWUpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWVSZXNvdXJjZVRyZWU+IFBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUo
RnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFt
ZT4gZnJhbWVPYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKICAgICBhdXRvIHN1
YnJlc291cmNlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+OjpjcmVhdGUoKTsKQEAgLTkzNiw3ICs5MzYsNyBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3Rv
clBhZ2VBZ2VudDo6YnVpbGRPYmplYwogICAgICAgICAgICAgcmVzb3VyY2VPYmplY3QtPnNldENh
bmNlbGVkKHRydWUpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRSZXNvdXJjZS0+c3RhdHVzKCkg
PT0gQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcikKICAgICAgICAgICAgIHJlc291cmNlT2JqZWN0
LT5zZXRGYWlsZWQodHJ1ZSk7Ci0gICAgICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMID0gSW5z
cGVjdG9yUGFnZUFnZW50Ojpzb3VyY2VNYXBVUkxGb3JSZXNvdXJjZShjYWNoZWRSZXNvdXJjZSk7
CisgICAgICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMID0gUGFnZUFnZW50Ojpzb3VyY2VNYXBV
UkxGb3JSZXNvdXJjZShjYWNoZWRSZXNvdXJjZSk7CiAgICAgICAgIGlmICghc291cmNlTWFwcGlu
Z1VSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0U291cmNlTWFw
VVJMKHNvdXJjZU1hcHBpbmdVUkwpOwogICAgICAgICBzdWJyZXNvdXJjZXMtPmFkZEl0ZW0oV1RG
Ojptb3ZlKHJlc291cmNlT2JqZWN0KSk7CkBAIC05NTQsMTQgKzk1NCwxNCBAQCBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6YnVpbGRPYmplYwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLXZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50Ojp1cGRhdGVUb3VjaEV2ZW50RW11bGF0aW9uSW5QYWdlKGJvb2wgZW5hYmxl
ZCkKK3ZvaWQgUGFnZUFnZW50Ojp1cGRhdGVUb3VjaEV2ZW50RW11bGF0aW9uSW5QYWdlKGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBpZiAobWFpbkZyYW1lKCkpCiAgICAgICAgIG1haW5GcmFtZSgpLT5z
ZXR0aW5ncygpLnNldFRvdWNoRXZlbnRFbXVsYXRpb25FbmFibGVkKGVuYWJsZWQpOwogfQogI2Vu
ZGlmCiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRUb3VjaEVtdWxhdGlvbkVuYWJsZWQo
RXJyb3JTdHJpbmcmIGVycm9yLCBib29sIGVuYWJsZWQpCit2b2lkIFBhZ2VBZ2VudDo6c2V0VG91
Y2hFbXVsYXRpb25FbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvciwgYm9vbCBlbmFibGVkKQogewog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKQEAgLTk3
Miw3ICs5NzIsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0VG91Y2hFbXVsYXRpb25F
bmFibGVkKEVycm9yU3RyaW5nJiBlcnJvciwgYm9vbCBlbmFibAogI2VuZGlmCiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBtZWRpYSkKK3ZvaWQgUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBtZWRpYSkKIHsKICAgICBpZiAobWVkaWEgPT0gbV9lbXVsYXRl
ZE1lZGlhKQogICAgICAgICByZXR1cm47CkBAIC05ODUsMjkgKzk4NSwyOSBAQCB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgbWVkaWEpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlFbXVs
YXRlZE1lZGlhKFN0cmluZyYgbWVkaWEpCit2b2lkIFBhZ2VBZ2VudDo6YXBwbHlFbXVsYXRlZE1l
ZGlhKFN0cmluZyYgbWVkaWEpCiB7CiAgICAgaWYgKCFtX2VtdWxhdGVkTWVkaWEuaXNFbXB0eSgp
KQogICAgICAgICBtZWRpYSA9IG1fZW11bGF0ZWRNZWRpYTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmdldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoRXJyb3JTdHJpbmcmLCBib29s
KiBvdXRQYXJhbSkKK3ZvaWQgUGFnZUFnZW50OjpnZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxl
KEVycm9yU3RyaW5nJiwgYm9vbCogb3V0UGFyYW0pCiB7CiAgICAgKm91dFBhcmFtID0gbV9wYWdl
LT5zZXR0aW5ncygpLnNob3dEZWJ1Z0JvcmRlcnMoKSB8fCBtX3BhZ2UtPnNldHRpbmdzKCkuc2hv
d1JlcGFpbnRDb3VudGVyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRDb21w
b3NpdGluZ0JvcmRlcnNWaXNpYmxlKEVycm9yU3RyaW5nJiwgYm9vbCB2aXNpYmxlKQordm9pZCBQ
YWdlQWdlbnQ6OnNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoRXJyb3JTdHJpbmcmLCBib29s
IHZpc2libGUpCiB7CiAgICAgbV9wYWdlLT5zZXR0aW5ncygpLnNldFNob3dEZWJ1Z0JvcmRlcnMo
dmlzaWJsZSk7CiAgICAgbV9wYWdlLT5zZXR0aW5ncygpLnNldFNob3dSZXBhaW50Q291bnRlcih2
aXNpYmxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90Tm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFN0cmluZyogb3V0RGF0YVVSTCkKK3Zv
aWQgUGFnZUFnZW50OjpzbmFwc2hvdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBTdHJpbmcqIG91dERhdGFVUkwpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbWFpbkZy
YW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKIAotICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKTsKKyAgICBE
T01BZ2VudCogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmRvbUFnZW50KCk7CiAg
ICAgQVNTRVJUKGRvbUFnZW50KTsKICAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQtPmFzc2VydE5v
ZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTAyMiw3ICsxMDIy
LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90Tm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFN0cmkKICAgICAqb3V0RGF0YVVSTCA9IHNuYXBzaG90
LT50b0RhdGFVUkwoQVNDSUlMaXRlcmFsKCJpbWFnZS9wbmciKSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
eCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRl
U3lzdGVtLCBTdHJpbmcqIG91dERhdGFVUkwpCit2b2lkIFBhZ2VBZ2VudDo6c25hcHNob3RSZWN0
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwgU3RyaW5nKiBvdXREYXRhVVJM
KQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7
CkBAIC0xMDQyLDEzICsxMDQyLDEzIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hv
dFJlY3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgeCwgaW50IHksIGluCiAgICAgKm91
dERhdGFVUkwgPSBzbmFwc2hvdC0+dG9EYXRhVVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikp
OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6aGFuZGxlSmF2YVNjcmlwdERpYWxvZyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgYWNjZXB0LCBjb25zdCBTdHJpbmcqIHByb21w
dFRleHQpCit2b2lkIFBhZ2VBZ2VudDo6aGFuZGxlSmF2YVNjcmlwdERpYWxvZyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGJvb2wgYWNjZXB0LCBjb25zdCBTdHJpbmcqIHByb21wdFRleHQpCiB7
CiAgICAgaWYgKCFtX2NsaWVudC0+aGFuZGxlSmF2YVNjcmlwdERpYWxvZyhhY2NlcHQsIHByb21w
dFRleHQpKQogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IGhh
bmRsZSBKYXZhU2NyaXB0IGRpYWxvZyIpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
YXJjaGl2ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKK3ZvaWQgUGFn
ZUFnZW50OjphcmNoaXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBkYXRhKQog
ewogICAgIEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCBjYzZl
MTBmYWZjZWZlOGE4M2NlNDViZTUzOWIyMGYyNjQyYTMyNDkzLi4wMmIxZDQ2Y2Q1OGU0Mjg4OGQw
ZjRmMDIzZTFlMGJiMmRhNzRjZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5oCkBAIC01NiwxOSArNTYsMTkgQEAgY2xhc3MgRnJvbnRlbmQ7CiBj
bGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5z
dHJ1bWVudGluZ0FnZW50czsKLWNsYXNzIFVSTDsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJP
YmplY3Q7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwor
Y2xhc3MgVVJMOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVj
dG9yUGFnZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIElu
c3BlY3Rvcjo6UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSW5zcGVjdG9yUGFnZUFnZW50KTsKK2NsYXNzIFBhZ2VBZ2VudCBmaW5hbCA6IHB1
YmxpYyBXZWJBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OlBhZ2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VBZ2VudCk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50KElu
c3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yT3Zl
cmxheSopOworICAgIFBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3Bl
Y3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKIAogICAgIGVudW0gUmVzb3VyY2VUeXBl
IHsKICAgICAgICAgRG9jdW1lbnRSZXNvdXJjZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCmluZGV4IDJmNjg3NTMyMDU5Njk3NDgxOGY2
MmE2NWQxOGU5NzYzZDM0NDY3YzguLjMwMTU0N2RkYjM1NDNjY2FiYzQ4MGJlNmYxMThmNTA3NTNk
YjE0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBs
YXlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxh
eUFnZW50LmNwcApAQCAtMTUwLDI5ICsxNTAsMjkgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiBidWlsZEluc3BlY3Rvck9iamVjdEZvclMK
ICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Okluc3BlY3Rv
clJlcGxheUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFT
Q0lJTGl0ZXJhbCgiUmVwbGF5IiksIGluc3RydW1lbnRpbmdBZ2VudHMpCitSZXBsYXlBZ2VudDo6
UmVwbGF5QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFn
ZUFnZW50KiBwYWdlQWdlbnQpCisgICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJSZXBs
YXkiKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1fcGFnZSgqcGFnZUFnZW50LT5wYWdl
KCkpCiB7CiB9CiAKLUluc3BlY3RvclJlcGxheUFnZW50Ojp+SW5zcGVjdG9yUmVwbGF5QWdlbnQo
KQorUmVwbGF5QWdlbnQ6On5SZXBsYXlBZ2VudCgpCiB7CiAgICAgQVNTRVJUKCFtX3Nlc3Npb25z
TWFwLnNpemUoKSk7CiAgICAgQVNTRVJUKCFtX3NlZ21lbnRzTWFwLnNpemUoKSk7CiB9CiAKLVdl
YkNvcmU6OlNlc3Npb25TdGF0ZSBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vzc2lvblN0YXRlKCkg
Y29uc3QKK1dlYkNvcmU6OlNlc3Npb25TdGF0ZSBSZXBsYXlBZ2VudDo6c2Vzc2lvblN0YXRlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zZXNzaW9uU3Rh
dGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQordm9pZCBSZXBs
YXlBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxJbnNwZWN0b3I6OlJlcGxheUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFu
bmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yOjpSZXBsYXlCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIAotICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yUmVwbGF5QWdlbnQodGhpcyk7CisgICAgbV9p
bnN0cnVtZW50aW5nQWdlbnRzLT5zZXRSZXBsYXlBZ2VudCh0aGlzKTsKICAgICBBU1NFUlQoc2Vz
c2lvblN0YXRlKCkgPT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSk7CiAKICAgICAv
LyBLZWVwIHRyYWNrIG9mIHRoZSAoZGVmYXVsdCkgc2Vzc2lvbiBjdXJyZW50bHkgbG9hZGVkIGJ5
IFJlcGxheUNvbnRyb2xsZXIsCkBAIC0xODQsMzcgKzE4NCwzNyBAQCB2b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZQogICAgICAgICBtX3NlZ21lbnRzTWFwLmFkZCgoKml0KS0+aWRlbnRpZmllcigpLCAq
aXQpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIFJlcGxheUFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFz
b24pCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOwogICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXIuY2xlYXIoKTsKIAotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5z
cGVjdG9yUmVwbGF5QWdlbnQobnVsbHB0cik7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5z
ZXRSZXBsYXlBZ2VudChudWxscHRyKTsKIAogICAgIC8vIERyb3AgcmVmZXJlbmNlcyB0byBhbGwg
c2Vzc2lvbnMgYW5kIHNlZ21lbnRzLgogICAgIG1fc2Vzc2lvbnNNYXAuY2xlYXIoKTsKICAgICBt
X3NlZ21lbnRzTWFwLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZy
YW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit2b2lkIFJlcGxheUFnZW50Ojpm
cmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIGlmIChzZXNzaW9u
U3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3Bh
Z2UucmVwbGF5Q29udHJvbGxlcigpLmZyYW1lTmF2aWdhdGVkKGxvYWRlcik7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUmIGZyYW1lKQordm9pZCBS
ZXBsYXlBZ2VudDo6ZnJhbWVEZXRhY2hlZChGcmFtZSYgZnJhbWUpCiB7CiAgICAgaWYgKHNlc3Np
b25TdGF0ZSgpICE9IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpCiAgICAgICAgIG1f
cGFnZS5yZXBsYXlDb250cm9sbGVyKCkuZnJhbWVEZXRhY2hlZChmcmFtZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OndpbGxEaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50JiBldmVu
dCwgRnJhbWUqIGZyYW1lKQordm9pZCBSZXBsYXlBZ2VudDo6d2lsbERpc3BhdGNoRXZlbnQoY29u
c3QgRXZlbnQmIGV2ZW50LCBGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKHNlc3Npb25TdGF0ZSgp
ICE9IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpCiAgICAgICAgIG1fcGFnZS5yZXBs
YXlDb250cm9sbGVyKCkud2lsbERpc3BhdGNoRXZlbnQoZXZlbnQsIGZyYW1lKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vzc2lvbkNyZWF0ZWQoUmVmUHRyPFJlcGxheVNlc3Np
b24+JiYgc2Vzc2lvbikKK3ZvaWQgUmVwbGF5QWdlbnQ6OnNlc3Npb25DcmVhdGVkKFJlZlB0cjxS
ZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25z
TWFwLmFkZChzZXNzaW9uLT5pZGVudGlmaWVyKCksIHNlc3Npb24pOwogICAgIC8vIENhbid0IGhh
dmUgdHdvIHNlc3Npb25zIHdpdGggc2FtZSBpZGVudGlmaWVyLgpAQCAtMjIzLDEyICsyMjMsMTIg
QEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vzc2lvbkNyZWF0ZWQoUmVmUHRyPFJlcGxh
eVNlc3Npb24+JiYgc2Vzc2lvbikKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2Vzc2lvbkNy
ZWF0ZWQoc2Vzc2lvbi0+aWRlbnRpZmllcigpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6c2Vzc2lvbk1vZGlmaWVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCit2
b2lkIFJlcGxheUFnZW50OjpzZXNzaW9uTW9kaWZpZWQoUmVmUHRyPFJlcGxheVNlc3Npb24+JiYg
c2Vzc2lvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2Vzc2lvbk1vZGlmaWVkKHNl
c3Npb24tPmlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNl
c3Npb25Mb2FkZWQoUmVmUHRyPFJlcGxheVNlc3Npb24+JiYgc2Vzc2lvbikKK3ZvaWQgUmVwbGF5
QWdlbnQ6OnNlc3Npb25Mb2FkZWQoUmVmUHRyPFJlcGxheVNlc3Npb24+JiYgc2Vzc2lvbikKIHsK
ICAgICAvLyBJbiBjYXNlIHdlIGRpZG4ndCBrbm93IGFib3V0IHRoZSBsb2FkZWQgc2Vzc2lvbiwg
YWRkIGhlcmUuCiAgICAgbV9zZXNzaW9uc01hcC5hZGQoc2Vzc2lvbi0+aWRlbnRpZmllcigpLCBz
ZXNzaW9uKTsKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpz
ZXNzaW9uTG9hZGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPnNlc3Npb25Mb2FkZWQoc2Vzc2lvbi0+aWRlbnRpZmllcigpKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2VnbWVudENyZWF0ZWQoUmVmUHRyPFJlcGxh
eVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCit2b2lkIFJlcGxheUFnZW50OjpzZWdtZW50Q3Jl
YXRlZChSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKIHsKICAgICBhdXRv
IHJlc3VsdCA9IG1fc2VnbWVudHNNYXAuYWRkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSwgc2VnbWVu
dCk7CiAgICAgLy8gQ2FuJ3QgaGF2ZSB0d28gc2VnbWVudHMgd2l0aCB0aGUgc2FtZSBpZGVudGlm
aWVyLgpAQCAtMjQ1LDEyICsyNDUsMTIgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vn
bWVudENyZWF0ZWQoUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQKICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+c2VnbWVudENyZWF0ZWQoc2VnbWVudC0+aWRlbnRpZmllcigp
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2VnbWVudENvbXBsZXRlZChSZWZQ
dHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKK3ZvaWQgUmVwbGF5QWdlbnQ6OnNl
Z21lbnRDb21wbGV0ZWQoUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7
CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNlZ21lbnRDb21wbGV0ZWQoc2VnbWVudC0+aWRl
bnRpZmllcigpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2VnbWVudExvYWRl
ZChSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKK3ZvaWQgUmVwbGF5QWdl
bnQ6OnNlZ21lbnRMb2FkZWQoUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQp
CiB7CiAgICAgLy8gSW4gY2FzZSB3ZSBkaWRuJ3Qga25vdyBhYm91dCB0aGUgbG9hZGVkIHNlZ21l
bnQsIGFkZCBoZXJlLgogICAgIG1fc2VnbWVudHNNYXAuYWRkKHNlZ21lbnQtPmlkZW50aWZpZXIo
KSwgc2VnbWVudC5jb3B5UmVmKCkpOwpAQCAtMjU4LDUyICsyNTgsNTIgQEAgdm9pZCBJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6c2VnbWVudExvYWRlZChSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+
JiYgc2VnbWVudCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2VnbWVudExvYWRlZChzZWdt
ZW50LT5pZGVudGlmaWVyKCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpzZWdt
ZW50VW5sb2FkZWQoKQordm9pZCBSZXBsYXlBZ2VudDo6c2VnbWVudFVubG9hZGVkKCkKIHsKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2VnbWVudFVubG9hZGVkKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUmVwbGF5QWdlbnQ6OmNhcHR1cmVTdGFydGVkKCkKK3ZvaWQgUmVwbGF5QWdlbnQ6OmNh
cHR1cmVTdGFydGVkKCkKIHsKICAgICBMT0coV2ViUmVwbGF5LCAiLS0tLS1DQVBUVVJFIFNUQVJU
LS0tLS0iKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYXB0dXJlU3RhcnRlZCgpOwog
fQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYXB0dXJlU3RvcHBlZCgpCit2b2lkIFJl
cGxheUFnZW50OjpjYXB0dXJlU3RvcHBlZCgpCiB7CiAgICAgTE9HKFdlYlJlcGxheSwgIi0tLS0t
Q0FQVFVSRSBTVE9QLS0tLS0iKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jYXB0dXJl
U3RvcHBlZCgpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpwbGF5YmFja1N0YXJ0
ZWQoKQordm9pZCBSZXBsYXlBZ2VudDo6cGxheWJhY2tTdGFydGVkKCkKIHsKICAgICBMT0coV2Vi
UmVwbGF5LCAiLS0tLS1SRVBMQVkgU1RBUlQtLS0tLSIpOwogCiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPnBsYXliYWNrU3RhcnRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50
OjpwbGF5YmFja1BhdXNlZChjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24pCit2b2lkIFJl
cGxheUFnZW50OjpwbGF5YmFja1BhdXNlZChjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24p
CiB7CiAgICAgTE9HKFdlYlJlcGxheSwgIi0tLS0tUkVQTEFZIFBBVVNFRC0tLS0tIik7CiAKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cGxheWJhY2tQYXVzZWQoYnVpbGRJbnNwZWN0b3JPYmpl
Y3RGb3JQb3NpdGlvbihwb3NpdGlvbikpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50
OjpwbGF5YmFja0hpdFBvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlvbikKK3Zv
aWQgUmVwbGF5QWdlbnQ6OnBsYXliYWNrSGl0UG9zaXRpb24oY29uc3QgUmVwbGF5UG9zaXRpb24m
IHBvc2l0aW9uKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wbGF5YmFja0hpdFBvc2l0
aW9uKGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24ocG9zaXRpb24pLCBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBs
YXliYWNrRmluaXNoZWQoKQordm9pZCBSZXBsYXlBZ2VudDo6cGxheWJhY2tGaW5pc2hlZCgpCiB7
CiAgICAgTE9HKFdlYlJlcGxheSwgIi0tLS0tUkVQTEFZIEZJTklTSEVELS0tLS0iKTsKIAogICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wbGF5YmFja0ZpbmlzaGVkKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUmVwbGF5QWdlbnQ6OnN0YXJ0Q2FwdHVyaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZykKK3ZvaWQgUmVwbGF5QWdlbnQ6OnN0YXJ0Q2FwdHVyaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKIHsKICAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRl
OjpJbmFjdGl2ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qg
c3RhcnQgY2FwdHVyaW5nIGlmIHRoZSBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nIG9yIHJl
cGxheWluZy4iKTsKQEAgLTMxMyw3ICszMTMsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50
OjpzdGFydENhcHR1cmluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgbV9wYWdlLnJl
cGxheUNvbnRyb2xsZXIoKS5zdGFydENhcHR1cmluZygpOwogfQogCi12b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpzdG9wQ2FwdHVyaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK3ZvaWQg
UmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogewog
ICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkNhcHR1cmlu
ZykgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RvcCBjYXB0
dXJpbmcgaWYgY2FwdHVyZSBpcyBub3QgaW4gcHJvZ3Jlc3MuIik7CkBAIC0zMjMsNyArMzIzLDcg
QEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3RvcENhcHR1cmluZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCiAgICAgbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zdG9wQ2FwdHVyaW5n
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9zaXRpb24oRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBv
c2l0aW9uT2JqZWN0LCBib29sIGZhc3RSZXBsYXkpCit2b2lkIFJlcGxheUFnZW50OjpyZXBsYXlU
b1Bvc2l0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBwb3NpdGlvbk9iamVjdCwgYm9vbCBmYXN0UmVwbGF5KQogewogICAgIFJlcGxh
eVBvc2l0aW9uIHBvc2l0aW9uOwogICAgIGlmICghcG9zaXRpb25PYmplY3QtPmdldEludGVnZXIo
QVNDSUlMaXRlcmFsKCJzZWdtZW50T2Zmc2V0IiksIHBvc2l0aW9uLnNlZ21lbnRPZmZzZXQpKSB7
CkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Q
b3NpdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlAKICAgICBtX3BhZ2Uu
cmVwbGF5Q29udHJvbGxlcigpLnJlcGxheVRvUG9zaXRpb24ocG9zaXRpb24sIChmYXN0UmVwbGF5
KSA/IERpc3BhdGNoU3BlZWQ6OkZhc3RGb3J3YXJkIDogRGlzcGF0Y2hTcGVlZDo6UmVhbFRpbWUp
OwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb0NvbXBsZXRpb24oRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGZhc3RSZXBsYXkpCit2b2lkIFJlcGxheUFnZW50
OjpyZXBsYXlUb0NvbXBsZXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGZhc3RS
ZXBsYXkpCiB7CiAgICAgaWYgKHNlc3Npb25TdGF0ZSgpID09IFdlYkNvcmU6OlNlc3Npb25TdGF0
ZTo6Q2FwdHVyaW5nKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJDYW4n
dCBzdGFydCByZXBsYXkgd2hpbGUgY2FwdHVyZSBpcyBpbiBwcm9ncmVzcy4iKTsKQEAgLTM1NCw3
ICszNTQsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb0NvbXBsZXRpb24o
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGZhcwogICAgIG1fcGFnZS5yZXBsYXlDb250
cm9sbGVyKCkucmVwbGF5VG9Db21wbGV0aW9uKChmYXN0UmVwbGF5KSA/IERpc3BhdGNoU3BlZWQ6
OkZhc3RGb3J3YXJkIDogRGlzcGF0Y2hTcGVlZDo6UmVhbFRpbWUpOwogfQogCi12b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50OjpwYXVzZVBsYXliYWNrKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykK
K3ZvaWQgUmVwbGF5QWdlbnQ6OnBhdXNlUGxheWJhY2soRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQogewogICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OlJl
cGxheWluZykgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3QgcGF1
c2UgcGxheWJhY2sgaWYgcGxheWJhY2sgaXMgbm90IGluIHByb2dyZXNzLiIpOwpAQCAtMzY0LDcg
KzM2NCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBhdXNlUGxheWJhY2soRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nKQogICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkucGF1c2VQ
bGF5YmFjaygpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYW5jZWxQbGF5YmFj
ayhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCit2b2lkIFJlcGxheUFnZW50OjpjYW5jZWxQbGF5
YmFjayhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAgaWYgKHNlc3Npb25TdGF0ZSgp
ID09IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CiAgICAgICAgIGVycm9yU3Ry
aW5nID0gQVNDSUlMaXRlcmFsKCJDYW4ndCBjYW5jZWwgcGxheWJhY2sgaWYgY2FwdHVyZSBpcyBp
biBwcm9ncmVzcy4iKTsKQEAgLTM3NCw3ICszNzQsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFn
ZW50OjpjYW5jZWxQbGF5YmFjayhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgbV9wYWdl
LnJlcGxheUNvbnRyb2xsZXIoKS5jYW5jZWxQbGF5YmFjaygpOwogfQogCi12b2lkIEluc3BlY3Rv
clJlcGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVyKQor
dm9pZCBSZXBsYXlBZ2VudDo6c3dpdGNoU2Vzc2lvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmll
cikKIHsKICAgICBBU1NFUlRfQVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIgPiAwKTsKIApAQCAt
MzkwLDcgKzM5MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN3aXRjaFNlc3Npb24o
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByCiAgICAgbV9wYWdlLnJlcGxh
eUNvbnRyb2xsZXIoKS5zd2l0Y2hTZXNzaW9uKFdURjo6bW92ZShzZXNzaW9uKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omluc2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uSWRlbnRp
ZmllciBzZXNzaW9uSWRlbnRpZmllciwgU2VnbWVudElkZW50aWZpZXIgc2VnbWVudElkZW50aWZp
ZXIsIGludCBzZWdtZW50SW5kZXgpCit2b2lkIFJlcGxheUFnZW50OjppbnNlcnRTZXNzaW9uU2Vn
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxh
eTo6U2Vzc2lvbklkZW50aWZpZXIgc2Vzc2lvbklkZW50aWZpZXIsIFNlZ21lbnRJZGVudGlmaWVy
IHNlZ21lbnRJZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KQogewogICAgIEFTU0VSVF9BUkco
c2Vzc2lvbklkZW50aWZpZXIsIHNlc3Npb25JZGVudGlmaWVyID4gMCk7CiAgICAgQVNTRVJUX0FS
RyhzZWdtZW50SWRlbnRpZmllciwgc2VnbWVudElkZW50aWZpZXIgPiAwKTsKQEAgLTQxNiw3ICs0
MTYsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjppbnNlcnRTZXNzaW9uU2VnbWVudChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlYwogICAgIHNlc3Npb25Nb2RpZmllZChXVEY6
Om1vdmUoc2Vzc2lvbikpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZW1vdmVT
ZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRl
eCkKK3ZvaWQgUmVwbGF5QWdlbnQ6OnJlbW92ZVNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KQogewogICAgIEFTU0VSVF9BUkcoaWRlbnRp
ZmllciwgaWRlbnRpZmllciA+IDApOwogICAgIEFTU0VSVF9BUkcoc2VnbWVudEluZGV4LCBzZWdt
ZW50SW5kZXggPj0gMCk7CkBAIC00NDAsNyArNDQwLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6cmVtb3ZlU2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNw
ZWMKICAgICBzZXNzaW9uTW9kaWZpZWQoV1RGOjptb3ZlKHNlc3Npb24pKTsKIH0KIAotUmVmUHRy
PFJlcGxheVNlc3Npb24+IEluc3BlY3RvclJlcGxheUFnZW50OjpmaW5kU2Vzc2lvbihFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIFNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIpCitSZWZQdHI8
UmVwbGF5U2Vzc2lvbj4gUmVwbGF5QWdlbnQ6OmZpbmRTZXNzaW9uKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgU2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlRfQVJH
KGlkZW50aWZpZXIsIGlkZW50aWZpZXIgPiAwKTsKIApAQCAtNDUzLDcgKzQ1Myw3IEBAIFJlZlB0
cjxSZXBsYXlTZXNzaW9uPiBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZmluZFNlc3Npb24oRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nCiAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAotUmVmUHRyPFJl
cGxheVNlc3Npb25TZWdtZW50PiBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZmluZFNlZ21lbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBTZWdtZW50SWRlbnRpZmllciBpZGVudGlmaWVyKQorUmVm
UHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBSZXBsYXlBZ2VudDo6ZmluZFNlZ21lbnQoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBTZWdtZW50SWRlbnRpZmllciBpZGVudGlmaWVyKQogewogICAg
IEFTU0VSVF9BUkcoaWRlbnRpZmllciwgaWRlbnRpZmllciA+IDApOwogCkBAIC00NjYsNyArNDY2
LDcgQEAgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6
ZmluZFNlZ21lbnQoRXJyb3JTdHJpbmcmIGVycm8KICAgICByZXR1cm4gaXQtPnZhbHVlOwogfQog
Ci12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjdXJyZW50UmVwbGF5U3RhdGUoRXJyb3JTdHJp
bmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyKiBzZXNz
aW9uSWRlbnRpZmllciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXI+KiBzZWdtZW50SWRlbnRpZmllciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU3RhdGUqIHNlc3Npb25TdGF0ZSwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZWdtZW50U3RhdGUqIHNlZ21lbnRTdGF0ZSwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+JiByZXBs
YXlQb3NpdGlvbikKK3ZvaWQgUmVwbGF5QWdlbnQ6OmN1cnJlbnRSZXBsYXlTdGF0ZShFcnJvclN0
cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIqIHNl
c3Npb25JZGVudGlmaWVyLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UmVwbGF5OjpTZWdtZW50SWRlbnRpZmllcj4qIHNlZ21lbnRJZGVudGlmaWVy
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TdGF0ZSogc2Vzc2lvblN0YXRl
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZSogc2VnbWVudFN0YXRl
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4mIHJl
cGxheVBvc2l0aW9uKQogewogICAgICpzZXNzaW9uU3RhdGUgPSBidWlsZEluc3BlY3Rvck9iamVj
dEZvclNlc3Npb25TdGF0ZShtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnNlc3Npb25TdGF0ZSgp
KTsKICAgICAqc2VnbWVudFN0YXRlID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50U3Rh
dGUobV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zZWdtZW50U3RhdGUoKSk7CkBAIC00NzgsMTQg
KzQ3OCwxNCBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjdXJyZW50UmVwbGF5U3RhdGUo
RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOgogICAgIHJlcGxheVBvc2l0aW9uID0g
YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JQb3NpdGlvbihtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigp
LmN1cnJlbnRQb3NpdGlvbigpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0
QXZhaWxhYmxlU2Vzc2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U2Vzc2lvbklkZW50aWZpZXI+PiYgc2Vzc2lvbnNMaXN0KQordm9pZCBSZXBsYXlB
Z2VudDo6Z2V0QXZhaWxhYmxlU2Vzc2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U2Vzc2lvbklkZW50aWZpZXI+PiYgc2Vzc2lvbnNMaXN0KQogewog
ICAgIHNlc3Npb25zTGlzdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXI+OjpjcmVhdGUoKTsKICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Nlc3Npb25zTWFwKQogICAgICAgICBzZXNzaW9uc0xpc3QtPmFkZEl0
ZW0ocGFpci5rZXkpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZXNzaW9u
RGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxh
eTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJlcGxheTo6UmVwbGF5U2Vzc2lvbj4mIHNlcmlhbGl6ZWRPYmplY3QpCit2b2lkIFJlcGxh
eUFnZW50OjpnZXRTZXNzaW9uRGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5U2Vzc2lvbj4mIHNlcmlhbGl6ZWRP
YmplY3QpCiB7CiAgICAgUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24gPSBmaW5kU2Vzc2lv
bihlcnJvclN0cmluZywgaWRlbnRpZmllcik7CiAgICAgaWYgKCFzZXNzaW9uKSB7CkBAIC00OTYs
NyArNDk2LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlAKICAgICBzZXJpYWxpemVkT2JqZWN0
ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNzaW9uKFdURjo6bW92ZShzZXNzaW9uKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlZ21lbnREYXRhKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZWdtZW50SWRlbnRp
ZmllciBpZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNz
aW9uU2VnbWVudD4mIHNlcmlhbGl6ZWRPYmplY3QpCit2b2lkIFJlcGxheUFnZW50OjpnZXRTZWdt
ZW50RGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
cGxheTo6U2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+JiBzZXJpYWxpemVkT2JqZWN0KQogewogICAg
IFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IGZpbmRTZWdtZW50KGVycm9y
U3RyaW5nLCBpZGVudGlmaWVyKTsKICAgICBpZiAoIXNlZ21lbnQpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmgKaW5kZXggMzNiZjI5YzExYTUx
MGNiYTkzM2Y4NWFlNWEyZTVmMjI0MDY1NjA0Yi4uNmI2NTA2YTZmNzMwODc3MjQ4MmNjYzgyYTIy
NTQxYmZiYWZjYWExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclJlcGxheUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJlcGxheUFnZW50LmgKQEAgLTQyLDkgKzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEZyYW1lOwotY2xhc3MgSW5z
cGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIFBhZ2U7
CitjbGFzcyBQYWdlQWdlbnQ7CiBjbGFzcyBSZXBsYXlTZXNzaW9uOwogY2xhc3MgUmVwbGF5U2Vz
c2lvblNlZ21lbnQ7CiAKQEAgLTU2LDEzICs1NiwxMyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIHR5cGVkZWYgaW50IFNlc3Npb25JZGVudGlmaWVyOwogdHlwZWRlZiBpbnQgU2VnbWVu
dElkZW50aWZpZXI7CiAKLWNsYXNzIEluc3BlY3RvclJlcGxheUFnZW50IGZpbmFsCi0gICAgOiBw
dWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlCitjbGFzcyBSZXBsYXlBZ2VudCBmaW5hbAorICAgIDog
cHVibGljIFdlYkFnZW50QmFzZQogICAgICwgcHVibGljIEluc3BlY3Rvcjo6UmVwbGF5QmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JS
ZXBsYXlBZ2VudCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVwbGF5QWdlbnQpOwogcHVi
bGljOgotICAgIEluc3BlY3RvclJlcGxheUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNw
ZWN0b3JQYWdlQWdlbnQqKTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JSZXBsYXlBZ2VudCgpOwor
ICAgIFJlcGxheUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlQWdlbnQqKTsKKyAgICB2
aXJ0dWFsIH5SZXBsYXlBZ2VudCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6QmFj
a2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcAppbmRleCBmOWJiZjgwOGUwYjIxNjJiNmVjODE4M2E2MDc5OGFlNDBiNTE5MTQ5Li5hNDhi
MjJmYjgxNDlmMmIxZDFkNTJlMmZjZGM2OWE4ODgwMzA1OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0xNjEsOCAr
MTYxLDggQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UKIAotSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yQ2xp
ZW50KiBjbGllbnQpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJOZXR3
b3JrIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCitSZXNvdXJjZUFnZW50OjpSZXNvdXJjZUFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2VBZ2VudCogcGFn
ZUFnZW50LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IFdlYkFnZW50QmFzZShBU0NJ
SUxpdGVyYWwoIk5ldHdvcmsiKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1fcGFnZUFn
ZW50KHBhZ2VBZ2VudCkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fcmVzb3VyY2Vz
RGF0YShzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtSZXNvdXJjZXNEYXRhPigpKQpAQCAtMTczLDEz
ICsxNzMsMTMgQEAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6SW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW4KIHsKIH0KIAotdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpG
cm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCit2b2lkIFJlc291cmNlQWdlbnQ6OmRpZENyZWF0ZUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFu
bmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsK
ICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpO
ZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwogICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBJbnNwZWN0b3I6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RS
ZWFzb24pCit2b2lkIFJlc291cmNlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ciA9IG51bGxwdHI7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwpAQCAtMjQ5LDM1
ICsyNDksMzUgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNo
ZWRSZXNvdXJjZT4gYnVpbGRPYmplY3RGb3JDYWNoZWRSZXMKIHsKICAgICBhdXRvIHJlc291cmNl
T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U6OmNy
ZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpKQotICAgICAgICAu
c2V0VHlwZShJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24oKmNhY2hl
ZFJlc291cmNlKSkKKyAgICAgICAgLnNldFR5cGUoUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5
cGVKc29uKCpjYWNoZWRSZXNvdXJjZSkpCiAgICAgICAgIC5zZXRCb2R5U2l6ZShjYWNoZWRSZXNv
dXJjZS0+ZW5jb2RlZFNpemUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGF1dG8gcmVz
b3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjYWNoZWRSZXNv
dXJjZS0+cmVzcG9uc2UoKSwgbG9hZGVyKTsKICAgICByZXNvdXJjZU9iamVjdC0+c2V0UmVzcG9u
c2UoV1RGOjptb3ZlKHJlc291cmNlUmVzcG9uc2UpKTsKIAotICAgIFN0cmluZyBzb3VyY2VNYXBw
aW5nVVJMID0gSW5zcGVjdG9yUGFnZUFnZW50Ojpzb3VyY2VNYXBVUkxGb3JSZXNvdXJjZShjYWNo
ZWRSZXNvdXJjZSk7CisgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBQYWdlQWdlbnQ6OnNv
dXJjZU1hcFVSTEZvclJlc291cmNlKGNhY2hlZFJlc291cmNlKTsKICAgICBpZiAoIXNvdXJjZU1h
cHBpbmdVUkwuaXNFbXB0eSgpKQogICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0U291cmNlTWFw
VVJMKHNvdXJjZU1hcHBpbmdVUkwpOwogCiAgICAgcmV0dXJuIFdURjo6bW92ZShyZXNvdXJjZU9i
amVjdCk7CiB9CiAKLUluc3BlY3RvclJlc291cmNlQWdlbnQ6On5JbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KCkKK1Jlc291cmNlQWdlbnQ6On5SZXNvdXJjZUFnZW50KCkKIHsKICAgICBpZiAobV9lbmFi
bGVkKSB7CiAgICAgICAgIEVycm9yU3RyaW5nIHVudXNlZDsKICAgICAgICAgZGlzYWJsZSh1bnVz
ZWQpOwogICAgIH0KLSAgICBBU1NFUlQoIW1faW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9y
UmVzb3VyY2VBZ2VudCgpKTsKKyAgICBBU1NFUlQoIW1faW5zdHJ1bWVudGluZ0FnZW50cy0+cmVz
b3VyY2VBZ2VudCgpKTsKIH0KIAotZG91YmxlIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnRpbWVz
dGFtcCgpCitkb3VibGUgUmVzb3VyY2VBZ2VudDo6dGltZXN0YW1wKCkKIHsKICAgICByZXR1cm4g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmV4ZWN1dGlvblN0
b3B3YXRjaCgpLT5lbGFwc2VkVGltZSgpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdl
bnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9h
ZGVyJiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXImIGxvYWRlciwgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKQogewogICAgIGlmIChyZXF1ZXN0LmhpZGRlbkZyb21JbnNwZWN0b3IoKSkgewogICAg
ICAgICBtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVycy5hZGQoaWRlbnRpZmllcik7CkBAIC0yODcs
MTUgKzI4NywxNSBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVz
dCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAogICAgIFN0cmluZyByZXF1ZXN0
SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKICAgICBtX3Jl
c291cmNlc0RhdGEtPnJlc291cmNlQ3JlYXRlZChyZXF1ZXN0SWQsIG1fcGFnZUFnZW50LT5sb2Fk
ZXJJZCgmbG9hZGVyKSk7CiAKLSAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlKGxvYWRlci5mcmFtZSgpLCByZXF1ZXN0
LnVybCgpKTsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSB0eXBlID0gY2Fj
aGVkUmVzb3VyY2UgPyBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZSgqY2Fj
aGVkUmVzb3VyY2UpIDogbV9yZXNvdXJjZXNEYXRhLT5yZXNvdXJjZVR5cGUocmVxdWVzdElkKTsK
LSAgICBpZiAodHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpIHsKKyAg
ICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBQYWdlQWdlbnQ6OmNhY2hlZFJlc291
cmNlKGxvYWRlci5mcmFtZSgpLCByZXF1ZXN0LnVybCgpKTsKKyAgICBQYWdlQWdlbnQ6OlJlc291
cmNlVHlwZSB0eXBlID0gY2FjaGVkUmVzb3VyY2UgPyBQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNl
VHlwZSgqY2FjaGVkUmVzb3VyY2UpIDogbV9yZXNvdXJjZXNEYXRhLT5yZXNvdXJjZVR5cGUocmVx
dWVzdElkKTsKKyAgICBpZiAodHlwZSA9PSBQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpIHsKICAg
ICAgICAgaWYgKG1fbG9hZGluZ1hIUlN5bmNocm9ub3VzbHkpCi0gICAgICAgICAgICB0eXBlID0g
SW5zcGVjdG9yUGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKKyAgICAgICAgICAgIHR5cGUgPSBQYWdl
QWdlbnQ6OlhIUlJlc291cmNlOwogICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nRnJhZ21l
bnRJZGVudGlmaWVyKHJlcXVlc3QudXJsKCksIGxvYWRlci5mcmFtZUxvYWRlcigpLT5pY29uKCku
dXJsKCkpKQotICAgICAgICAgICAgdHlwZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6SW1hZ2VSZXNv
dXJjZTsKKyAgICAgICAgICAgIHR5cGUgPSBQYWdlQWdlbnQ6OkltYWdlUmVzb3VyY2U7CiAgICAg
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIocmVxdWVzdC51cmwo
KSwgbG9hZGVyLnVybCgpKSAmJiAhbG9hZGVyLmlzQ29tbWl0dGVkKCkpCi0gICAgICAgICAgICB0
eXBlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlOworICAgICAgICAgICAg
dHlwZSA9IFBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZTsKICAgICB9CiAKICAgICBtX3Jlc291
cmNlc0RhdGEtPnNldFJlc291cmNlVHlwZShyZXF1ZXN0SWQsIHR5cGUpOwpAQCAtMzE4LDEzICsz
MTgsMTMgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNhY2hlQ29udHJvbCwgIm5vLWNhY2hlIik7CiAg
ICAgfQogCi0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIHJlc291
cmNlVHlwZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbih0eXBlKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlID0g
UGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKHR5cGUpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0ID0gYnVpbGRJ
bml0aWF0b3JPYmplY3QobG9hZGVyLmZyYW1lKCkgPyBsb2FkZXIuZnJhbWUoKS0+ZG9jdW1lbnQo
KSA6IG51bGxwdHIpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0V2lsbEJlU2Vu
dChyZXF1ZXN0SWQsIG1fcGFnZUFnZW50LT5mcmFtZUlkKGxvYWRlci5mcmFtZSgpKSwgbV9wYWdl
QWdlbnQtPmxvYWRlcklkKCZsb2FkZXIpLCBsb2FkZXIudXJsKCkuc3RyaW5nKCksIGJ1aWxkT2Jq
ZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCB0aW1lc3RhbXAoKSwgaW5pdGlhdG9yT2Jq
ZWN0LCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSwgJmxv
YWRlciksIHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlID8gJnJlc291
cmNlVHlwZSA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0V2ls
bEJlU2VudChyZXF1ZXN0SWQsIG1fcGFnZUFnZW50LT5mcmFtZUlkKGxvYWRlci5mcmFtZSgpKSwg
bV9wYWdlQWdlbnQtPmxvYWRlcklkKCZsb2FkZXIpLCBsb2FkZXIudXJsKCkuc3RyaW5nKCksIGJ1
aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCB0aW1lc3RhbXAoKSwgaW5pdGlh
dG9yT2JqZWN0LCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNwb25z
ZSwgJmxvYWRlciksIHR5cGUgIT0gUGFnZUFnZW50OjpPdGhlclJlc291cmNlID8gJnJlc291cmNl
VHlwZSA6IG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Om1hcmtS
ZXNvdXJjZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3ZvaWQgUmVzb3VyY2VB
Z2VudDo6bWFya1Jlc291cmNlQXNDYWNoZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewog
ICAgIGlmIChtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVycy5jb250YWlucyhpZGVudGlmaWVyKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6bWFya1Jlc291cmNlQXNDYWNoZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0U2VydmVkRnJvbUNhY2hlKElkZW50aWZp
ZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBEb2N1bWVudExvYWRlciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQordm9pZCBSZXNvdXJjZUFnZW50Ojpk
aWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRl
ciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VMb2Fk
ZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIGlmIChtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVy
cy5jb250YWlucyhpZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzQ2LDcgKzM0Niw3
IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lCiAgICAgaWYgKHJlc291cmNlTG9hZGVyICYmIHJl
c291cmNlTG9hZGVyLT5pc1N1YnJlc291cmNlTG9hZGVyKCkgJiYgIWlzTm90TW9kaWZpZWQpCiAg
ICAgICAgIGNhY2hlZFJlc291cmNlID0gc3RhdGljX2Nhc3Q8U3VicmVzb3VyY2VMb2FkZXIqPihy
ZXNvdXJjZUxvYWRlciktPmNhY2hlZFJlc291cmNlKCk7CiAgICAgaWYgKCFjYWNoZWRSZXNvdXJj
ZSkKLSAgICAgICAgY2FjaGVkUmVzb3VyY2UgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJl
c291cmNlKGxvYWRlci5mcmFtZSgpLCByZXNwb25zZS51cmwoKSk7CisgICAgICAgIGNhY2hlZFJl
c291cmNlID0gUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShsb2FkZXIuZnJhbWUoKSwgcmVzcG9u
c2UudXJsKCkpOwogCiAgICAgaWYgKGNhY2hlZFJlc291cmNlKSB7CiAgICAgICAgIC8vIFVzZSBt
aW1lIHR5cGUgZnJvbSBjYWNoZWQgcmVzb3VyY2UgaW4gY2FzZSB0aGUgb25lIGluIHJlc3BvbnNl
IGlzIGVtcHR5LgpAQCAtMzU1LDE4ICszNTUsMTggQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWUK
ICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5hZGRDYWNoZWRSZXNvdXJjZShyZXF1ZXN0SWQsIGNh
Y2hlZFJlc291cmNlKTsKICAgICB9CiAKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNl
VHlwZSB0eXBlID0gbV9yZXNvdXJjZXNEYXRhLT5yZXNvdXJjZVR5cGUocmVxdWVzdElkKTsKLSAg
ICBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBuZXdUeXBlID0gY2FjaGVkUmVzb3Vy
Y2UgPyBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZSgqY2FjaGVkUmVzb3Vy
Y2UpIDogdHlwZTsKKyAgICBQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSB0eXBlID0gbV9yZXNvdXJj
ZXNEYXRhLT5yZXNvdXJjZVR5cGUocmVxdWVzdElkKTsKKyAgICBQYWdlQWdlbnQ6OlJlc291cmNl
VHlwZSBuZXdUeXBlID0gY2FjaGVkUmVzb3VyY2UgPyBQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNl
VHlwZSgqY2FjaGVkUmVzb3VyY2UpIDogdHlwZTsKIAogICAgIC8vIEZJWE1FOiBYSFJSZXNvdXJj
ZSBpcyByZXR1cm5lZCBmb3IgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlLCBpdCBzaG91bGQg
YmUgT3RoZXJSZXNvdXJjZSB1bmxlc3MgaXQgdHJ1bHkgaXMgYW4gWEhSLgogICAgIC8vIFJhd1Jl
c291cmNlIGlzIHVzZWQgZm9yIGxvYWRpbmcgd29ya2VyIHNjcmlwdHMsIGFuZCB0aG9zZSBzaG91
bGQgc3RheSBhcyBTY3JpcHRSZXNvdXJjZSBhbmQgbm90IGNoYW5nZSB0byBYSFJSZXNvdXJjZS4K
LSAgICBpZiAodHlwZSAhPSBuZXdUeXBlICYmIG5ld1R5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50
OjpYSFJSZXNvdXJjZSAmJiBuZXdUeXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNv
dXJjZSkKKyAgICBpZiAodHlwZSAhPSBuZXdUeXBlICYmIG5ld1R5cGUgIT0gUGFnZUFnZW50OjpY
SFJSZXNvdXJjZSAmJiBuZXdUeXBlICE9IFBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZSkKICAgICAg
ICAgdHlwZSA9IG5ld1R5cGU7CiAKICAgICBtX3Jlc291cmNlc0RhdGEtPnJlc3BvbnNlUmVjZWl2
ZWQocmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXIuZnJhbWUoKSksIHJlc3Bv
bnNlKTsKICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlVHlwZShyZXF1ZXN0SWQsIHR5
cGUpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVz
dElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXIuZnJhbWUoKSksIG1fcGFnZUFnZW50LT5s
b2FkZXJJZCgmbG9hZGVyKSwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3Vy
Y2VUeXBlSnNvbih0eXBlKSwgcmVzb3VyY2VSZXNwb25zZSk7CisgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChs
b2FkZXIuZnJhbWUoKSksIG1fcGFnZUFnZW50LT5sb2FkZXJJZCgmbG9hZGVyKSwgdGltZXN0YW1w
KCksIFBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbih0eXBlKSwgcmVzb3VyY2VSZXNwb25zZSk7
CiAKICAgICAvLyBJZiB3ZSByZXZhbGlkYXRlZCB0aGUgcmVzb3VyY2UgYW5kIGdvdCBOb3QgbW9k
aWZpZWQsIHNlbmQgY29udGVudCBsZW5ndGggZm9sbG93aW5nIGRpZFJlY2VpdmVSZXNwb25zZQog
ICAgIC8vIGFzIHRoZXJlIHdpbGwgYmUgbm8gY2FsbHMgdG8gZGlkUmVjZWl2ZURhdGEgZnJvbSB0
aGUgbmV0d29yayBzdGFjay4KQEAgLTM3OSw3ICszNzksNyBAQCBzdGF0aWMgYm9vbCBpc0Vycm9y
U3RhdHVzQ29kZShpbnQgc3RhdHVzQ29kZSkKICAgICByZXR1cm4gc3RhdHVzQ29kZSA+PSA0MDA7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZURhdGEodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCwgaW50
IGVuY29kZWREYXRhTGVuZ3RoKQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlRGF0YSh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3Ro
LCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpCiB7CiAgICAgaWYgKG1faGlkZGVuUmVxdWVzdElkZW50
aWZpZXJzLmNvbnRhaW5zKGlkZW50aWZpZXIpKQogICAgICAgICByZXR1cm47CkBAIC0zOTUsMTMg
KzM5NSwxMyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVEYXRhKHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgY2hhcgogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5kYXRhUmVjZWl2ZWQocmVxdWVzdElkLCB0aW1lc3RhbXAoKSwgZGF0YUxlbmd0aCwgZW5j
b2RlZERhdGFMZW5ndGgpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZEZp
bmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciYgbG9h
ZGVyLCBkb3VibGUgZmluaXNoVGltZSkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlkRmluaXNoTG9h
ZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyJiBsb2FkZXIsIGRv
dWJsZSBmaW5pc2hUaW1lKQogewogICAgIGlmIChtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVycy5y
ZW1vdmUoaWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyByZXF1ZXN0
SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKLSAgICBpZiAo
bV9yZXNvdXJjZXNEYXRhLT5yZXNvdXJjZVR5cGUocmVxdWVzdElkKSA9PSBJbnNwZWN0b3JQYWdl
QWdlbnQ6OkRvY3VtZW50UmVzb3VyY2UpCisgICAgaWYgKG1fcmVzb3VyY2VzRGF0YS0+cmVzb3Vy
Y2VUeXBlKHJlcXVlc3RJZCkgPT0gUGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlKQogICAgICAg
ICBtX3Jlc291cmNlc0RhdGEtPmFkZFJlc291cmNlU2hhcmVkQnVmZmVyKHJlcXVlc3RJZCwgbG9h
ZGVyLmZyYW1lTG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJjZURhdGEoKSwg
bG9hZGVyLmZyYW1lKCktPmRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKSk7CiAKICAgICBtX3Jl
c291cmNlc0RhdGEtPm1heWJlRGVjb2RlRGF0YVRvQ29udGVudChyZXF1ZXN0SWQpOwpAQCAtNDE1
LDE5ICs0MTUsMTkgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRGaW5pc2hMb2Fk
aW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnQKICAgICBTdHJpbmcgc291cmNl
TWFwcGluZ1VSTDsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhIGNvbnN0
KiByZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRhdGEocmVxdWVzdElkKTsKICAgICBp
ZiAocmVzb3VyY2VEYXRhICYmIHJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSkKLSAgICAg
ICAgc291cmNlTWFwcGluZ1VSTCA9IEluc3BlY3RvclBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9y
UmVzb3VyY2UocmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKTsKKyAgICAgICAgc291cmNl
TWFwcGluZ1VSTCA9IFBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UocmVzb3VyY2VE
YXRhLT5jYWNoZWRSZXNvdXJjZSgpKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sb2Fk
aW5nRmluaXNoZWQocmVxdWVzdElkLCBmaW5pc2hUaW1lLCAhc291cmNlTWFwcGluZ1VSTC5pc0Vt
cHR5KCkgPyAmc291cmNlTWFwcGluZ1VSTCA6IG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lk
IFJlc291cmNlQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAg
ICAgaWYgKG1faGlkZGVuUmVxdWVzdElkZW50aWZpZXJzLnJlbW92ZShpZGVudGlmaWVyKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9y
eTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwogCi0gICAgaWYgKG1fcmVzb3VyY2VzRGF0YS0+cmVz
b3VyY2VUeXBlKHJlcXVlc3RJZCkgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVudFJlc291
cmNlKSB7CisgICAgaWYgKG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCkg
PT0gUGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9
IGxvYWRlci5mcmFtZSgpOwogICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmxvYWRlcigpLmRv
Y3VtZW50TG9hZGVyKCkgJiYgZnJhbWUtPmRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIG1fcmVz
b3VyY2VzRGF0YS0+YWRkUmVzb3VyY2VTaGFyZWRCdWZmZXIocmVxdWVzdElkLApAQCAtNDQwLDcg
KzQ0MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkRmFpbExvYWRpbmcodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvCiAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPmxvYWRpbmdGYWlsZWQocmVxdWVzdElkLCB0aW1lc3RhbXAoKSwgZXJyb3IubG9jYWxpemVk
RGVzY3JpcHRpb24oKSwgY2FuY2VsZWQgPyAmY2FuY2VsZWQgOiBudWxscHRyKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUo
RG9jdW1lbnRMb2FkZXImIGxvYWRlciwgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQordm9pZCBS
ZXNvdXJjZUFnZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2Fk
ZXImIGxvYWRlciwgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQogewogICAgIFN0cmluZyBsb2Fk
ZXJJZCA9IG1fcGFnZUFnZW50LT5sb2FkZXJJZCgmbG9hZGVyKTsKICAgICBTdHJpbmcgZnJhbWVJ
ZCA9IG1fcGFnZUFnZW50LT5mcmFtZUlkKGxvYWRlci5mcmFtZSgpKTsKQEAgLTQ1OCwxNyArNDU4
LDE3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1l
bW9yeUNhY2hlKERvY3VtZW50TG9hZGVyJiBsb2FkCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUocmVxdWVzdElkLCBmcmFtZUlkLCBsb2FkZXJJ
ZCwgbG9hZGVyLnVybCgpLnN0cmluZygpLCB0aW1lc3RhbXAoKSwgaW5pdGlhdG9yT2JqZWN0LCBi
dWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKCZyZXNvdXJjZSwgJmxvYWRlcikpOwogfQogCi12
b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNldEluaXRpYWxTY3JpcHRDb250ZW50KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCit2b2lkIFJl
c291cmNlQWdlbnQ6OnNldEluaXRpYWxTY3JpcHRDb250ZW50KHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCiB7CiAgICAgbV9yZXNvdXJjZXNEYXRh
LT5zZXRSZXNvdXJjZUNvbnRlbnQoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRp
ZmllciksIHNvdXJjZVN0cmluZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
ZGlkUmVjZWl2ZVNjcmlwdFJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3ZvaWQg
UmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVNjcmlwdFJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllcikKIHsKLSAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlVHlwZShJZGVudGlm
aWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgSW5zcGVjdG9yUGFnZUFnZW50OjpT
Y3JpcHRSZXNvdXJjZSk7CisgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZVR5cGUoSWRl
bnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIFBhZ2VBZ2VudDo6U2NyaXB0
UmVzb3VyY2UpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50KQordm9pZCBSZXNvdXJjZUFnZW50
Ojpkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCkKIHsKICAg
ICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDgyLDE5ICs0ODIsMTkgQEAgdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVk
TG9hZGluZ0ZvckNsaWVudCh1bnMKICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFhIUlJlcGxheURh
dGEocmVxdWVzdElkLCB4aHJSZXBsYXlEYXRhKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50Ojp3aWxsTG9hZFhIUihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUmVmUHRyPEZvcm1E
YXRhPiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1
ZGVDcmVkZW50aWFscykKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6d2lsbExvYWRYSFIoVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1
cmwsIGJvb2wgYXN5bmMsIFJlZlB0cjxGb3JtRGF0YT4mJiBmb3JtRGF0YSwgY29uc3QgSFRUUEhl
YWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpCiB7CiAgICAgUmVmUHRy
PFhIUlJlcGxheURhdGE+IHhoclJlcGxheURhdGEgPSBYSFJSZXBsYXlEYXRhOjpjcmVhdGUobWV0
aG9kLCB1cmwsIGFzeW5jLCBXVEY6Om1vdmUoZm9ybURhdGEpLCBoZWFkZXJzLCBpbmNsdWRlQ3Jl
ZGVudGlhbHMpOwogCiAgICAgbV9wZW5kaW5nWEhSUmVwbGF5RGF0YS5zZXQoY2xpZW50LCBXVEY6
Om1vdmUoeGhyUmVwbGF5RGF0YSkpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6
OmRpZEZhaWxYSFJMb2FkaW5nKFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQg
UmVzb3VyY2VBZ2VudDo6ZGlkRmFpbFhIUkxvYWRpbmcoVGhyZWFkYWJsZUxvYWRlckNsaWVudCog
Y2xpZW50KQogewogICAgIG1fcGVuZGluZ1hIUlJlcGxheURhdGEucmVtb3ZlKGNsaWVudCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkRmluaXNoWEhSTG9hZGluZyhUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCit2b2lkIFJlc291cmNlQWdlbnQ6OmRpZEZpbmlzaFhI
UkxvYWRpbmcoVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQogewogICAgIC8vIEZvciBBc3lu
Y2hyb25vdXMgWEhScywgdGhlIGluc3BlY3RvciBjYW4gZ3JhYiB0aGUgZGF0YSBkaXJlY3RseSBv
ZmYgb2YgdGhlIENhY2hlZFJlc291cmNlLiBGb3Igc3luYyBYSFJzLCB3ZSBuZWVkIHRvCiAgICAg
Ly8gcHJvdmlkZSB0aGUgZGF0YSBoZXJlLCBzaW5jZSBubyBDYWNoZWRSZXNvdXJjZSB3YXMgaW52
b2x2ZWQuCkBAIC01MDMsMjIgKzUwMywyMiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6
OmRpZEZpbmlzaFhIUkxvYWRpbmcoVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LAogICAg
IG1fcGVuZGluZ1hIUlJlcGxheURhdGEucmVtb3ZlKGNsaWVudCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVhIUlJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllcikKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVhIUlJlc3BvbnNlKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllcikKIHsKLSAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNl
VHlwZShJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgSW5zcGVjdG9y
UGFnZUFnZW50OjpYSFJSZXNvdXJjZSk7CisgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJj
ZVR5cGUoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIFBhZ2VBZ2Vu
dDo6WEhSUmVzb3VyY2UpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxM
b2FkWEhSU3luY2hyb25vdXNseSgpCit2b2lkIFJlc291cmNlQWdlbnQ6OndpbGxMb2FkWEhSU3lu
Y2hyb25vdXNseSgpCiB7CiAgICAgbV9sb2FkaW5nWEhSU3luY2hyb25vdXNseSA9IHRydWU7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkTG9hZFhIUlN5bmNocm9ub3VzbHko
KQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRMb2FkWEhSU3luY2hyb25vdXNseSgpCiB7CiAgICAg
bV9sb2FkaW5nWEhSU3luY2hyb25vdXNseSA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvclJl
c291cmNlQWdlbnQ6OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UmIGNh
Y2hlZFJlc291cmNlKQordm9pZCBSZXNvdXJjZUFnZW50Ojp3aWxsRGVzdHJveUNhY2hlZFJlc291
cmNlKENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKICAgICBWZWN0b3I8U3RyaW5n
PiByZXF1ZXN0SWRzID0gbV9yZXNvdXJjZXNEYXRhLT5yZW1vdmVDYWNoZWRSZXNvdXJjZSgmY2Fj
aGVkUmVzb3VyY2UpOwogICAgIGlmICghcmVxdWVzdElkcy5zaXplKCkpCkBAIC01MjYsMzEgKzUy
NiwzMSBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxEZXN0cm95Q2FjaGVkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlcwogCiAgICAgU3RyaW5nIGNvbnRlbnQ7CiAg
ICAgYm9vbCBiYXNlNjRFbmNvZGVkOwotICAgIGlmICghSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNo
ZWRSZXNvdXJjZUNvbnRlbnQoJmNhY2hlZFJlc291cmNlLCAmY29udGVudCwgJmJhc2U2NEVuY29k
ZWQpKQorICAgIGlmICghUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQoJmNhY2hlZFJl
c291cmNlLCAmY29udGVudCwgJmJhc2U2NEVuY29kZWQpKQogICAgICAgICByZXR1cm47CiAgICAg
VmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IHJlcXVlc3RJZHMuZW5kKCk7CiAgICAgZm9y
IChWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSByZXF1ZXN0SWRzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQo
Kml0LCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50Ojp3aWxsUmVjYWxjdWxhdGVTdHlsZSgpCit2b2lkIFJlc291cmNlQWdlbnQ6OndpbGxS
ZWNhbGN1bGF0ZVN0eWxlKCkKIHsKICAgICBtX2lzUmVjYWxjdWxhdGluZ1N0eWxlID0gdHJ1ZTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkK
K3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlkUmVjYWxjdWxhdGVTdHlsZSgpCiB7CiAgICAgbV9pc1Jl
Y2FsY3VsYXRpbmdTdHlsZSA9IGZhbHNlOwogICAgIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlh
dG9yID0gbnVsbHB0cjsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRTY2hl
ZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCit2b2lkIFJlc291cmNl
QWdlbnQ6OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKICAgICBpZiAoIW1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yKQogICAgICAgICBtX3N0
eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvciA9IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KCZkb2N1bWVu
dCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiBk
b2N1bWVudCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+
IFJlc291cmNlQWdlbnQ6OmJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiBkb2N1bWVudCkK
IHsKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlID0gY3JlYXRlU2NyaXB0
Q2FsbFN0YWNrKEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y3VycmVudFN0YXRlKCksIFNjcmlwdENh
bGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSk7CiAgICAgaWYgKHN0YWNrVHJhY2Ug
JiYgc3RhY2tUcmFjZS0+c2l6ZSgpID4gMCkgewpAQCAtNTgwLDEyICs1ODAsMTIgQEAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6YnVpbGRJbmkKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIAotdm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRDcmVhdGVXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwpCit2b2lkIFJlc291cmNlQWdlbnQ6OmRpZENy
ZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFVSTCYgcmVxdWVz
dFVSTCkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0Q3JlYXRlZChJZGVu
dGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgcmVxdWVzdFVSTC5zdHJpbmco
KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRI
YW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhh
bmRzaGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgYXV0byByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygp
KSkKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxT
ZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZQogICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoSWRlbnRp
ZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCBXVEY6Om1v
dmUocmVxdWVzdE9iamVjdCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRp
ZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBSZXNvdXJjZUFnZW50
OjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBhdXRvIHJl
c3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVz
cG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGF0dXMocmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSkKQEAgLTYwMywxMiArNjAzLDEyIEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcKICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZChJ
ZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdU
Rjo6bW92ZShyZXNwb25zZU9iamVjdCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdl
bnQ6OmRpZENsb3NlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3ZvaWQgUmVz
b3VyY2VBZ2VudDo6ZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQog
ewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRDbG9zZWQoSWRlbnRpZmllcnNG
YWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWUodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCit2b2lkIFJlc291
cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZSh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKIHsKICAgICBhdXRvIGZyYW1lT2JqZWN0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgp
CiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BDb2RlKQpAQCAtNjE4LDcgKzYxOCw3IEBAIHZv
aWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEZyYW1lKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0
RnJhbWVSZWNlaXZlZChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwg
dGltZXN0YW1wKCksIFdURjo6bW92ZShmcmFtZU9iamVjdCkpOwogfQogCi12b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZFNlbmRXZWJTb2NrZXRGcmFtZSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6
ZGlkU2VuZFdlYlNvY2tldEZyYW1lKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2Vi
U29ja2V0RnJhbWUmIGZyYW1lKQogewogICAgIGF1dG8gZnJhbWVPYmplY3QgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dE9wY29kZShmcmFtZS5vcENvZGUpCkBAIC02MjgsNDAgKzYyOCw0MCBAQCB2b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZFNlbmRXZWJTb2NrZXRGcmFtZSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbgogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRGcmFtZVNlbnQo
SWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCBX
VEY6Om1vdmUoZnJhbWVPYmplY3QpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVFcnJvcih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRSZWNl
aXZlV2ViU29ja2V0RnJhbWVFcnJvcih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2Nr
ZXRGcmFtZUVycm9yKElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0
aW1lc3RhbXAoKSwgZXJyb3JNZXNzYWdlKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfU09D
S0VUUykKIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcm
KQordm9pZCBSZXNvdXJjZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogewogICAgIGVuYWJs
ZSgpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmVuYWJsZSgpCit2b2lkIFJl
c291cmNlQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5kRGlzcGF0Y2hlcikK
ICAgICAgICAgcmV0dXJuOwogICAgIG1fZW5hYmxlZCA9IHRydWU7Ci0gICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JSZXNvdXJjZUFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy0+c2V0UmVzb3VyY2VBZ2VudCh0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgUmVzb3VyY2VBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgbV9lbmFibGVkID0gZmFsc2U7Ci0gICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JSZXNvdXJjZUFnZW50KG51bGxwdHIp
OworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0UmVzb3VyY2VBZ2VudChudWxscHRyKTsK
ICAgICBtX3Jlc291cmNlc0RhdGEtPmNsZWFyKCk7CiAgICAgbV9leHRyYVJlcXVlc3RIZWFkZXJz
LmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0RXh0cmFIVFRQ
SGVhZGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGVh
ZGVycykKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6c2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmlu
ZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGVhZGVycykKIHsKICAgICBtX2V4
dHJhUmVxdWVzdEhlYWRlcnMgPSBoZWFkZXJzLmNvcHlSZWYoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRF
bmNvZGVkKQordm9pZCBSZXNvdXJjZUFnZW50OjpnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBi
b29sKiBiYXNlNjRFbmNvZGVkKQogewogICAgIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJj
ZURhdGEgY29uc3QqIHJlc291cmNlRGF0YSA9IG1fcmVzb3VyY2VzRGF0YS0+ZGF0YShyZXF1ZXN0
SWQpOwogICAgIGlmICghcmVzb3VyY2VEYXRhKSB7CkBAIC02ODIsMTkgKzY4MiwxOSBAQCB2b2lk
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cgogCiAgICAgaWYgKHJlc291cmNlRGF0YS0+YnVmZmVyKCkgJiYg
IXJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLmlzTnVsbCgpKSB7CiAgICAgICAgICpi
YXNlNjRFbmNvZGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQ6OnNo
YXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwgcmVzb3VyY2VEYXRhLT50
ZXh0RW5jb2RpbmdOYW1lKCksICpiYXNlNjRFbmNvZGVkLCBjb250ZW50KSkKKyAgICAgICAgaWYg
KFBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29udGVudChyZXNvdXJjZURhdGEtPmJ1ZmZlcigpLCBy
ZXNvdXJjZURhdGEtPnRleHRFbmNvZGluZ05hbWUoKSwgKmJhc2U2NEVuY29kZWQsIGNvbnRlbnQp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChyZXNvdXJjZURhdGEtPmNh
Y2hlZFJlc291cmNlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVk
UmVzb3VyY2VDb250ZW50KHJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSwgY29udGVudCwg
YmFzZTY0RW5jb2RlZCkpCisgICAgICAgIGlmIChQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29u
dGVudChyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCksIGNvbnRlbnQsIGJhc2U2NEVuY29k
ZWQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGVycm9yU3RyaW5nID0gQVND
SUlMaXRlcmFsKCJObyBkYXRhIGZvdW5kIGZvciByZXNvdXJjZSB3aXRoIGdpdmVuIGlkZW50aWZp
ZXIiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXBsYXlYSFIoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6cmVw
bGF5WEhSKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpCiB7CiAgICAgUmVm
UHRyPFhNTEh0dHBSZXF1ZXN0PiB4aHIgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKCptX3BhZ2VB
Z2VudC0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkpOwogICAgIFN0cmluZyBhY3R1YWxSZXF1ZXN0
SWQgPSByZXF1ZXN0SWQ7CkBAIC03MTgsMzQgKzcxOCwzNCBAQCB2b2lkIEluc3BlY3RvclJlc291
cmNlQWdlbnQ6OnJlcGxheVhIUihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElk
KQogICAgIHhoci0+c2VuZEZvckluc3BlY3RvclhIUlJlcGxheSh4aHJSZXBsYXlEYXRhLT5mb3Jt
RGF0YSgpLCBJR05PUkVfRVhDRVBUSU9OKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpjYW5DbGVhckJyb3dzZXJDYWNoZShFcnJvclN0cmluZyYsIGJvb2wqIHJlc3VsdCkKK3Zv
aWQgUmVzb3VyY2VBZ2VudDo6Y2FuQ2xlYXJCcm93c2VyQ2FjaGUoRXJyb3JTdHJpbmcmLCBib29s
KiByZXN1bHQpCiB7CiAgICAgKnJlc3VsdCA9IG1fY2xpZW50LT5jYW5DbGVhckJyb3dzZXJDYWNo
ZSgpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNsZWFyQnJvd3NlckNhY2hl
KEVycm9yU3RyaW5nJikKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6Y2xlYXJCcm93c2VyQ2FjaGUoRXJy
b3JTdHJpbmcmKQogewogICAgIG1fY2xpZW50LT5jbGVhckJyb3dzZXJDYWNoZSgpOwogfQogCi12
b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNhbkNsZWFyQnJvd3NlckNvb2tpZXMoRXJyb3JT
dHJpbmcmLCBib29sKiByZXN1bHQpCit2b2lkIFJlc291cmNlQWdlbnQ6OmNhbkNsZWFyQnJvd3Nl
ckNvb2tpZXMoRXJyb3JTdHJpbmcmLCBib29sKiByZXN1bHQpCiB7CiAgICAgKnJlc3VsdCA9IG1f
Y2xpZW50LT5jYW5DbGVhckJyb3dzZXJDb29raWVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6Y2xlYXJCcm93c2VyQ29va2llcyhFcnJvclN0cmluZyYpCit2b2lkIFJlc291
cmNlQWdlbnQ6OmNsZWFyQnJvd3NlckNvb2tpZXMoRXJyb3JTdHJpbmcmKQogewogICAgIG1fY2xp
ZW50LT5jbGVhckJyb3dzZXJDb29raWVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6c2V0Q2FjaGVEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgY2FjaGVEaXNhYmxlZCkK
K3ZvaWQgUmVzb3VyY2VBZ2VudDo6c2V0Q2FjaGVEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wg
Y2FjaGVEaXNhYmxlZCkKIHsKICAgICBtX2NhY2hlRGlzYWJsZWQgPSBjYWNoZURpc2FibGVkOwog
ICAgIGlmIChjYWNoZURpc2FibGVkKQogICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCku
ZXZpY3RSZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpsb2Fk
UmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIFJlc291cmNlQWdlbnQ6OmxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcs
IFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBtX3BhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAg
IGlmICghZnJhbWUpCkBAIC03ODUsNyArNzg1LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50Ojpsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcK
ICAgICBpbnNwZWN0b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LT5zZXRMb2FkZXIobG9hZGVyLnJl
bGVhc2UoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bWFpbkZyYW1lTmF2
aWdhdGVkKERvY3VtZW50TG9hZGVyJiBsb2FkZXIpCit2b2lkIFJlc291cmNlQWdlbnQ6Om1haW5G
cmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciYgbG9hZGVyKQogewogICAgIGlmIChtX2NhY2hl
RGlzYWJsZWQpCiAgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5ldmljdFJlc291cmNl
cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFn
ZW50LmgKaW5kZXggODRjM2JmZGNlNGQ4MTE0ZGU1MzY3MDlkZjIxNjA1NDk0YzBlMDQxYS4uZDA3
Y2RhZWY0OGFiNjkyZThkOWY4NmE2MDEzNjM0NDMwNzk0MGJhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCkBAIC01MywxMCArNTMs
MTAgQEAgY2xhc3MgRm9ybURhdGE7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUVFBIZWFkZXJNYXA7
CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFz
cyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgTmV0d29ya1Jlc291cmNlc0RhdGE7CiBjbGFz
cyBQYWdlOworY2xhc3MgUGFnZUFnZW50OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJl
c291cmNlTG9hZGVyOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwpAQCAtNzMsMTEgKzczLDExIEBA
IHN0cnVjdCBXZWJTb2NrZXRGcmFtZTsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAK
LWNsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKK2NsYXNzIFJlc291cmNlQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViQWdlbnRCYXNlLCBwdWJs
aWMgSW5zcGVjdG9yOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJbnNwZWN0b3JDbGll
bnQqKTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JSZXNvdXJjZUFnZW50KCk7CisgICAgUmVzb3Vy
Y2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZUFnZW50KiwgSW5zcGVjdG9yQ2xpZW50
Kik7CisgICAgdmlydHVhbCB+UmVzb3VyY2VBZ2VudCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KSBvdmVycmlkZTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRlOgogCiAgICAgZG91YmxlIHRp
bWVzdGFtcCgpOwogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBQ
YWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6TmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcj4g
bV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHBy
aXZhdGU6CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8VGhyZWFkYWJsZUxvYWRlckNsaWVudCosIFJl
ZlB0cjxYSFJSZXBsYXlEYXRhPj4gUGVuZGluZ1hIUlJlcGxheURhdGFNYXA7CiAgICAgUGVuZGlu
Z1hIUlJlcGxheURhdGFNYXAgbV9wZW5kaW5nWEhSUmVwbGF5RGF0YTsKLSAgICAvLyBGSVhNRTog
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBzaG91bGQgbm93IGJlIGF3YXJlIG9mIHN0eWxlIHJlY2Fs
Y3VsYXRpb24uCisgICAgLy8gRklYTUU6IFJlc291cmNlQWdlbnQgc2hvdWxkIG5vdyBiZSBhd2Fy
ZSBvZiBzdHlsZSByZWNhbGN1bGF0aW9uLgogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpJbml0aWF0b3I+IG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yOwogICAg
IGJvb2wgbV9pc1JlY2FsY3VsYXRpbmdTdHlsZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggMDhiZGJlZTEzNmFjNzJjZGNl
ZDZlZTQ0YWE2ZWE3N2U4ZTQyODE4Yy4uMDliN2Q5N2NkOTg1ZTQ5MjI4ZTBiODRkOGM5MDU2ODNh
NDM2OTQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcApAQCAtMjQzLDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIGZpbGxNZWRpYUxpc3RD
aGFpbihDU1NSdWxlKiBydWxlLCBBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTCiAg
ICAgICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7CiAgICAgICAgICAgICBzb3VyY2VVUkwgPSBw
YXJlbnRTdHlsZVNoZWV0LT5jb250ZW50cygpLmJhc2VVUkwoKTsKICAgICAgICAgICAgIGlmIChz
b3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IEluc3BlY3Rv
ckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhwYXJlbnRTdHlsZVNoZWV0LT5vd25lckRvY3Vt
ZW50KCkpOworICAgICAgICAgICAgICAgIHNvdXJjZVVSTCA9IERPTUFnZW50Ojpkb2N1bWVudFVS
TFN0cmluZyhwYXJlbnRTdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIHNvdXJjZVVSTCA9ICIiOwogCkBAIC01NjEsNyArNTYxLDcgQEAgVmVj
dG9yPFN0cmluZz4gSW5zcGVjdG9yU3R5bGU6OmxvbmdoYW5kUHJvcGVydGllcyhjb25zdCBTdHJp
bmcmIHNob3J0aGFuZFByb3BlcnQKICAgICByZXR1cm4gcHJvcGVydGllczsKIH0KIAotUmVmPElu
c3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hl
ZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0
ZW5lcikKK1JlZjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVh
dGUoUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciog
bGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3R5bGVTaGVl
dChwYWdlQWdlbnQsIGlkLCBXVEY6Om1vdmUocGFnZVN0eWxlU2hlZXQpLCBvcmlnaW4sIGRvY3Vt
ZW50VVJMLCBsaXN0ZW5lcikpOwogfQpAQCAtNTc0LDcgKzU3NCw3IEBAIFN0cmluZyBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0
KQogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJ
bnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBT
dHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldDo6
SW5zcGVjdG9yU3R5bGVTaGVldChQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBp
ZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1l
bnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkK
ICAgICAsIG1faWQoaWQpCiAgICAgLCBtX3BhZ2VTdHlsZVNoZWV0KFdURjo6bW92ZShwYWdlU3R5
bGVTaGVldCkpCkBAIC02OTksNyArNjk5LDcgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEV4Y2VwdGlvbkNvZGUKICAg
ICBDU1NSdWxlKiBydWxlID0gbV9wYWdlU3R5bGVTaGVldC0+aXRlbShsYXN0UnVsZUluZGV4KTsK
ICAgICBBU1NFUlQocnVsZSk7CiAKLSAgICBDU1NTdHlsZVJ1bGUqIHN0eWxlUnVsZSA9IEluc3Bl
Y3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZSgqcnVsZSk7CisgICAgQ1NTU3R5bGVSdWxlKiBz
dHlsZVJ1bGUgPSBDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUoKnJ1bGUpOwogICAgIGlmICghc3R5
bGVSdWxlKSB7CiAgICAgICAgIC8vIFdoYXQgd2UganVzdCBhZGRlZCBoYXMgdG8gYmUgYSBDU1NT
dHlsZVJ1bGUgLSB3ZSBjYW5ub3QgaGFuZGxlIG90aGVyIHR5cGVzIG9mIHJ1bGVzIHlldC4KICAg
ICAgICAgLy8gSWYgaXQgaXMgbm90IGEgc3R5bGUgcnVsZSwgcHJldGVuZCB3ZSBuZXZlciB0b3Vj
aGVkIHRoZSBzdHlsZXNoZWV0LgpAQCAtMTE4NSw3ICsxMTg1LDcgQEAgYm9vbCBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpyZXNvdXJjZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAog
CiAgICAgU3RyaW5nIGVycm9yOwogICAgIGJvb2wgYmFzZTY0RW5jb2RlZDsKLSAgICBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChlcnJvciwgb3duZXJEb2N1bWVudCgpLT5mcmFt
ZSgpLCBVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX3BhZ2VTdHlsZVNoZWV0LT5ocmVmKCkpLCByZXN1
bHQsICZiYXNlNjRFbmNvZGVkKTsKKyAgICBQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChlcnJv
ciwgb3duZXJEb2N1bWVudCgpLT5mcmFtZSgpLCBVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX3BhZ2VT
dHlsZVNoZWV0LT5ocmVmKCkpLCByZXN1bHQsICZiYXNlNjRFbmNvZGVkKTsKICAgICByZXR1cm4g
ZXJyb3IuaXNFbXB0eSgpICYmICFiYXNlNjRFbmNvZGVkOwogfQogCkBAIC0xMjI4LDcgKzEyMjgs
NyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUmVmUHRyPENT
U1J1bGVMaXN0PiYmIHJ1bGVMaXN0LCBDU1NTdAogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwg
c2l6ZSA9IHJ1bGVMaXN0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBDU1NS
dWxlKiBydWxlID0gcnVsZUxpc3QtPml0ZW0oaSk7Ci0gICAgICAgIENTU1N0eWxlUnVsZSogc3R5
bGVSdWxlID0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKCpydWxlKTsKKyAgICAg
ICAgQ1NTU3R5bGVSdWxlKiBzdHlsZVJ1bGUgPSBDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUoKnJ1
bGUpOwogICAgICAgICBpZiAoc3R5bGVSdWxlKQogICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQo
c3R5bGVSdWxlKTsKICAgICAgICAgZWxzZSB7CkBAIC0xMjM5LDEyICsxMjM5LDEyIEBAIHZvaWQg
SW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyhSZWZQdHI8Q1NTUnVsZUxpc3Q+
JiYgcnVsZUxpc3QsIENTU1N0CiAgICAgfQogfQogCi1SZWY8SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJ
bnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPEVs
ZW1lbnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorUmVmPEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUo
UGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYm
IGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwgV1RGOjptb3ZlKGVs
ZW1lbnQpLCBvcmlnaW4sIGxpc3RlbmVyKSk7CiB9CiAKLUluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8RWxlbWVudD4mJiBl
bGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBMaXN0ZW5lciogbGlzdGVuZXIpCitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6
Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShQYWdlQWdlbnQqIHBhZ2VBZ2VudCwg
Y29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPEVsZW1lbnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVy
KQogICAgIDogSW5zcGVjdG9yU3R5bGVTaGVldChwYWdlQWdlbnQsIGlkLCBudWxscHRyLCBvcmln
aW4sIFN0cmluZygpLCBsaXN0ZW5lcikKICAgICAsIG1fZWxlbWVudChXVEY6Om1vdmUoZWxlbWVu
dCkpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCkBAIC0xMjc4LDcgKzEyNzgsNyBA
QCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6c2V0U3R5bGVUZXh0KENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLAogICAgIEFTU0VSVF9VTlVTRUQoc3R5bGUsIHN0eWxl
ID09IGlubGluZVN0eWxlKCkpOwogCiAgICAgewotICAgICAgICBJbnNwZWN0b3JDU1NBZ2VudDo6
SW5saW5lU3R5bGVPdmVycmlkZVNjb3BlIG92ZXJyaWRlU2NvcGUoJm1fZWxlbWVudC0+ZG9jdW1l
bnQoKSk7CisgICAgICAgIENTU0FnZW50OjpJbmxpbmVTdHlsZU92ZXJyaWRlU2NvcGUgb3ZlcnJp
ZGVTY29wZSgmbV9lbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICAgICAgbV9lbGVtZW50LT5zZXRB
dHRyaWJ1dGUoInN0eWxlIiwgdGV4dCwgZWMpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggOWE4MjE4N2I4MmNjMDE2MjI3
MzA0YWVhYWM4MDFhNzBiYTI3ZjQzNS4uYjU1MDE0MjkyNTFiNWIyYjIzZDk1M2VkZDJmNmNkNWY2
OTkzZjQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oCkBAIC00Nyw4ICs0Nyw4IEBAIGNsYXNzIENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0
eWxlU2hlZXQ7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbnNwZWN0
b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0OworY2xhc3MgUGFnZUFnZW50
OwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIApAQCAtMTY2LDcgKzE2Niw3IEBAIHB1
YmxpYzoKICAgICB9OwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlRGVjbGFyYXRpb24q
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+PiBJbnNwZWN0b3JTdHlsZU1hcDsKLSAgICBzdGF0aWMg
UmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25z
dCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRv
Y3VtZW50VVJMLCBMaXN0ZW5lciopOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yU3R5bGVTaGVl
dD4gY3JlYXRlKFBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7CiAgICAgc3Rh
dGljIFN0cmluZyBzdHlsZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KTsK
IAogICAgIHZpcnR1YWwgfkluc3BlY3RvclN0eWxlU2hlZXQoKTsKQEAgLTE5NSw3ICsxOTUsNyBA
QCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ1NTSWQgc3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkgY29uc3QgeyByZXR1cm4gcnVsZU9yU3R5bGVJZChzdHlsZSk7IH0KIAogcHJvdGVj
dGVkOgotICAgIEluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3Qg
U3RyaW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1
bWVudFVSTCwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KFBhZ2VBZ2VudCos
IGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7CiAKICAgICBib29sIGNhbkJpbmQoKSBjb25zdCB7
IHJldHVybiBtX29yaWdpbiAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OlVzZXJBZ2VudCAmJiBtX29yaWdpbiAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW46OlVzZXI7IH0KICAgICBJbnNwZWN0b3JDU1NJZCBydWxlT3JTdHls
ZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKQEAgLTIyNyw3ICsyMjcsNyBAQCBwcml2
YXRlOgogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWls
ZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgRWxlbWVudCopOwogICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4gYnVpbGRPYmplY3RGb3JT
ZWxlY3Rvckxpc3QoQ1NTU3R5bGVSdWxlKiwgRWxlbWVudCopOwogCi0gICAgSW5zcGVjdG9yUGFn
ZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIFN0
cmluZyBtX2lkOwogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3BhZ2VTdHlsZVNoZWV0Owog
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBtX29yaWdpbjsK
QEAgLTIzOSwxNCArMjM5LDE0IEBAIHByaXZhdGU6CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JTdHlsZVNoZWV0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4g
Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVt
ZW50PiYmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIExpc3Rl
bmVyKik7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+
IGNyZWF0ZShQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8RWxlbWVudD4mJiwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBMaXN0ZW5lciopOwog
CiAgICAgdm9pZCBkaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiAgICAgdmlydHVhbCBib29s
IGdldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNv
bnN0IG92ZXJyaWRlIHsgQVNTRVJUX1VOVVNFRChpZCwgIWlkLm9yZGluYWwoKSk7IHJldHVybiBp
bmxpbmVTdHlsZSgpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRy
PEVsZW1lbnQ+JiYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwg
TGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoUGFnZUFn
ZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPEVsZW1lbnQ+JiYsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZpcnR1YWwg
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpIGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUg
PT0gaW5saW5lU3R5bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRhOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXgg
MWE0ZDZlNzczMmI1NmI4NTZhMTUyMDYxNDAxZjQzZWI4Y2U1OGY1YS4uZmJjODMxYTMwMzUyNGY0
MmJhMmNkZjBjNTEwYTc4NDQ0ZjdjYjYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtNTgsMjcgKzU4LDI3IEBAIHVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6fkluc3BlY3RvclRpbWVsaW5lQWdlbnQoKQorVGltZWxpbmVBZ2Vu
dDo6flRpbWVsaW5lQWdlbnQoKQogewogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCog
ZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcikKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OlRpbWVsaW5lRnJvbnRlbmRE
aXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJ
bnNwZWN0b3I6OlRpbWVsaW5lQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0
Y2hlciwgdGhpcyk7CiAKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFBlcnNpc3RlbnRJ
bnNwZWN0b3JUaW1lbGluZUFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+
c2V0UGVyc2lzdGVudFRpbWVsaW5lQWdlbnQodGhpcyk7CiAKICAgICBpZiAobV9zY3JpcHREZWJ1
Z1NlcnZlcikKICAgICAgICAgbV9zY3JpcHREZWJ1Z1NlcnZlci0+cmVjb21waWxlQWxsSlNGdW5j
dGlvbnMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQordm9p
ZCBUaW1lbGluZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0g
bnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKLSAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldFBlcnNpc3RlbnRJbnNwZWN0b3JUaW1lbGluZUFnZW50KG51bGxw
dHIpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0UGVyc2lzdGVudFRpbWVsaW5lQWdl
bnQobnVsbHB0cik7CiAKICAgICBpZiAocmVhc29uICE9IEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKSB7CiAgICAgICAgIGlmIChtX3NjcmlwdERl
YnVnU2VydmVyKQpAQCAtODksMjEgKzg5LDIxIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0CiAg
ICAgc3RvcCh1bnVzZWQpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0
KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkKK3ZvaWQgVGltZWxp
bmVBZ2VudDo6c3RhcnQoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIG1heENhbGxTdGFja0RlcHRo
KQogewogICAgIG1fZW5hYmxlZEZyb21Gcm9udGVuZCA9IHRydWU7CiAKICAgICBpbnRlcm5hbFN0
YXJ0KG1heENhbGxTdGFja0RlcHRoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpzdG9wKEVycm9yU3RyaW5nJikKK3ZvaWQgVGltZWxpbmVBZ2VudDo6c3RvcChFcnJvclN0cmlu
ZyYpCiB7CiAgICAgaW50ZXJuYWxTdG9wKCk7CiAKICAgICBtX2VuYWJsZWRGcm9tRnJvbnRlbmQg
PSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0YXJ0
KGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGgpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmludGVy
bmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkKIHsKICAgICBpZiAobWF4Q2Fs
bFN0YWNrRGVwdGggJiYgKm1heENhbGxTdGFja0RlcHRoID4gMCkKICAgICAgICAgbV9tYXhDYWxs
U3RhY2tEZXB0aCA9ICptYXhDYWxsU3RhY2tEZXB0aDsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmludGVybmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxs
U3RhY2tEZXB0aCkKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRW52aXJv
bm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2goKS0+c3RhcnQoKTsKIAotICAgIG1faW5zdHJ1bWVu
dGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yVGltZWxpbmVBZ2VudCh0aGlzKTsKKyAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldFRpbWVsaW5lQWdlbnQodGhpcyk7CiAKICAgICBpZiAobV9zY3Jp
cHREZWJ1Z1NlcnZlcikKICAgICAgICAgbV9zY3JpcHREZWJ1Z1NlcnZlci0+YWRkTGlzdGVuZXIo
dGhpcyk7CkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpp
bnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGgpCiAgICAgICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5yZWNvcmRpbmdTdGFydGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdG9wKCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6aW50ZXJu
YWxTdG9wKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMz
LDcgKzEzMyw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdG9wKCkK
ICAgICBpZiAoc3RvcHdhdGNoLT5pc0FjdGl2ZSgpKQogICAgICAgICBzdG9wd2F0Y2gtPnN0b3Ao
KTsKIAotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dChudWxscHRyKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFRpbWVsaW5lQWdlbnQo
bnVsbHB0cik7CiAKICAgICBpZiAobV9zY3JpcHREZWJ1Z1NlcnZlcikKICAgICAgICAgbV9zY3Jp
cHREZWJ1Z1NlcnZlci0+cmVtb3ZlTGlzdGVuZXIodGhpcywgdHJ1ZSk7CkBAIC0xNDYsMTIgKzE0
NiwxMiBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmludGVybmFsU3RvcCgpCiAgICAg
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZWNvcmRpbmdTdG9wcGVkKCk7CiB9CiAKLWRvdWJs
ZSBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0aW1lc3RhbXAoKQorZG91YmxlIFRpbWVsaW5lQWdl
bnQ6OnRpbWVzdGFtcCgpCiB7CiAgICAgcmV0dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+aW5z
cGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2goKS0+ZWxhcHNlZFRpbWUoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRQYWdlU2NyaXB0RGVidWdTZXJ2
ZXIoUGFnZVNjcmlwdERlYnVnU2VydmVyKiBzY3JpcHREZWJ1Z1NlcnZlcikKK3ZvaWQgVGltZWxp
bmVBZ2VudDo6c2V0UGFnZVNjcmlwdERlYnVnU2VydmVyKFBhZ2VTY3JpcHREZWJ1Z1NlcnZlciog
c2NyaXB0RGVidWdTZXJ2ZXIpCiB7CiAgICAgQVNTRVJUKCFtX2VuYWJsZWQpOwogICAgIEFTU0VS
VCghbV9zY3JpcHREZWJ1Z1NlcnZlcik7CkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4gc3RvcFByb2ZpbGluZyhGcmFtZSogZnJhbWUsIGNv
bnN0IFN0cmluZyYKICAgICByZXR1cm4gc3RvcFByb2ZpbGluZyh0b0pTRE9NV2luZG93KGZyYW1l
LCBkZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCksIHRpdGxlKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydEZyb21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBjb25zdCBTdHJpbmcgJnRpdGxlKQordm9pZCBUaW1lbGluZUFnZW50OjpzdGFydEZyb21Db25z
b2xlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcgJnRpdGxlKQogewogICAgIC8v
IE9ubHkgYWxsb3cgcmVjb3JkaW5nIG9mIGEgcHJvZmlsZSBpZiBpdCBpcyBhbm9ueW1vdXMgKGVt
cHR5IHRpdGxlKSBvciBkb2VzIG5vdCBtYXRjaAogICAgIC8vIHRoZSB0aXRsZSBvZiBhbiBhbHJl
YWR5IHJlY29yZGluZyBwcm9maWxlLgpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU3RyaW5nCiAgICAgbV9wZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzLmFwcGVuZChjcmVh
dGVSZWNvcmRFbnRyeShUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUNvbnNvbGVQcm9maWxl
RGF0YSh0aXRsZSksIFRpbWVsaW5lUmVjb3JkVHlwZTo6Q29uc29sZVByb2ZpbGUsIHRydWUsIGZy
YW1lRnJvbUV4ZWNTdGF0ZShleGVjKSkpOwogfQogCi1QYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4g
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcEZyb21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQorUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IFRpbWVs
aW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3Ry
aW5nJiB0aXRsZSkKIHsKICAgICAvLyBTdG9wIHByb2ZpbGVzIGluIHJldmVyc2Ugb3JkZXIuIElm
IHRoZSB0aXRsZSBpcyBlbXB0eSwgdGhlbiBzdG9wIHRoZSBsYXN0IHByb2ZpbGUuCiAgICAgLy8g
T3RoZXJ3aXNlLCBtYXRjaCB0aGUgdGl0bGUgb2YgdGhlIHByb2ZpbGUgdG8gc3RvcC4KQEAgLTIz
Myw3ICsyMzMsNyBAQCBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6c3RvcEZyb21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKgogICAgIHJldHVybiBudWxscHRy
OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxDYWxsRnVuY3Rpb24oY29u
c3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSwgRnJhbWUqIGZyYW1lKQordm9p
ZCBUaW1lbGluZUFnZW50Ojp3aWxsQ2FsbEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFt
ZSwgaW50IHNjcmlwdExpbmUsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBwdXNoQ3VycmVudFJlY29y
ZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUZ1bmN0aW9uQ2FsbERhdGEoc2NyaXB0TmFt
ZSwgc2NyaXB0TGluZSksIFRpbWVsaW5lUmVjb3JkVHlwZTo6RnVuY3Rpb25DYWxsLCB0cnVlLCBm
cmFtZSk7CiAKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OndpbGxDYWxsRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaQogICAg
ICsrbV9jYWxsU3RhY2tEZXB0aDsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpk
aWRDYWxsRnVuY3Rpb24oRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRDYWxs
RnVuY3Rpb24oRnJhbWUqIGZyYW1lKQogewogICAgIGlmIChmcmFtZSAmJiBtX2NhbGxTdGFja0Rl
cHRoKSB7CiAgICAgICAgIC0tbV9jYWxsU3RhY2tEZXB0aDsKQEAgLTI2NSwyMiArMjY1LDIyIEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ2FsbEZ1bmN0aW9uKEZyYW1lKiBmcmFt
ZSkKICAgICBkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlOjpGdW5j
dGlvbkNhbGwpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxEaXNwYXRj
aEV2ZW50KGNvbnN0IEV2ZW50JiBldmVudCwgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFn
ZW50Ojp3aWxsRGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCYgZXZlbnQsIEZyYW1lKiBmcmFtZSkK
IHsKICAgICBwdXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2
ZW50RGlzcGF0Y2hEYXRhKGV2ZW50KSwgVGltZWxpbmVSZWNvcmRUeXBlOjpFdmVudERpc3BhdGNo
LCBmYWxzZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZERp
c3BhdGNoRXZlbnQoKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWREaXNwYXRjaEV2ZW50KCkKIHsK
ICAgICBkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlOjpFdmVudERp
c3BhdGNoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRJbnZhbGlkYXRl
TGF5b3V0KEZyYW1lJiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkSW52YWxpZGF0ZUxh
eW91dChGcmFtZSYgZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVjb3JkKEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6SW52YWxpZGF0ZUxheW91dCwgdHJ1ZSwgJmZy
YW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsTGF5b3V0KEZyYW1l
JiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2lsbExheW91dChGcmFtZSYgZnJhbWUpCiB7
CiAgICAgUmVuZGVyT2JqZWN0KiByb290ID0gZnJhbWUudmlldygpLT5sYXlvdXRSb290KCk7CiAg
ICAgYm9vbCBwYXJ0aWFsTGF5b3V0ID0gISFyb290OwpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbExheW91dChGcmFtZSYgZnJhbWUpCiAgICAgcHVz
aEN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVMYXlvdXREYXRhKGRp
cnR5T2JqZWN0cywgdG90YWxPYmplY3RzLCBwYXJ0aWFsTGF5b3V0KSwgVGltZWxpbmVSZWNvcmRU
eXBlOjpMYXlvdXQsIHRydWUsICZmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6ZGlkTGF5b3V0KFJlbmRlck9iamVjdCogcm9vdCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6
ZGlkTGF5b3V0KFJlbmRlck9iamVjdCogcm9vdCkKIHsKICAgICBpZiAobV9yZWNvcmRTdGFjay5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMxMywyNyArMzEzLDI3IEBAIHZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkTGF5b3V0KFJlbmRlck9iamVjdCogcm9vdCkKICAgICBk
aWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlOjpMYXlvdXQpOwogfQog
Ci12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0
aW9uKEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkU2NoZWR1bGVTdHlsZVJl
Y2FsY3VsYXRpb24oRnJhbWUqIGZyYW1lKQogewogICAgIGFwcGVuZFJlY29yZChJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpLCBUaW1lbGluZVJlY29yZFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1
bGF0aW9uLCB0cnVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
d2lsbFJlY2FsY3VsYXRlU3R5bGUoRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3
aWxsUmVjYWxjdWxhdGVTdHlsZShGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNv
cmQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpSZWNhbGN1
bGF0ZVN0eWxlcywgdHJ1ZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmRpZFJlY2FsY3VsYXRlU3R5bGUoKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRSZWNhbGN1
bGF0ZVN0eWxlKCkKIHsKICAgICBkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNv
cmRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6d2lsbFBhaW50KEZyYW1lJiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2lsbFBh
aW50KEZyYW1lJiBmcmFtZSkKIHsKICAgICBwdXNoQ3VycmVudFJlY29yZChJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpLCBUaW1lbGluZVJlY29yZFR5cGU6OlBhaW50LCB0cnVlLCAmZnJhbWUpOwog
fQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFBhaW50KFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIGNsaXBSZWN0KQordm9pZCBUaW1lbGluZUFnZW50
OjpkaWRQYWludChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlw
UmVjdCkKIHsKICAgICBUaW1lbGluZVJlY29yZEVudHJ5JiBlbnRyeSA9IG1fcmVjb3JkU3RhY2su
bGFzdCgpOwogICAgIEFTU0VSVChlbnRyeS50eXBlID09IFRpbWVsaW5lUmVjb3JkVHlwZTo6UGFp
bnQpOwpAQCAtMzQzLDIyICszNDMsMjIgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpk
aWRQYWludChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JgogICAgIGRp
ZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5cGU6OlBhaW50KTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsU2Nyb2xsKEZyYW1lJiBmcmFtZSkKK3Zv
aWQgVGltZWxpbmVBZ2VudDo6d2lsbFNjcm9sbChGcmFtZSYgZnJhbWUpCiB7CiAgICAgcHVzaEN1
cnJlbnRSZWNvcmQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNvcmRUeXBl
OjpTY3JvbGxMYXllciwgZmFsc2UsICZmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6ZGlkU2Nyb2xsKCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkU2Nyb2xsKCkKIHsK
ICAgICBkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlOjpTY3JvbGxM
YXllcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbFdyaXRlSFRNTCh1
bnNpZ25lZCBzdGFydExpbmUsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2ls
bFdyaXRlSFRNTCh1bnNpZ25lZCBzdGFydExpbmUsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBwdXNo
Q3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhcnNlSFRNTERhdGEo
c3RhcnRMaW5lKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpQYXJzZUhUTUwsIHRydWUsIGZyYW1lKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRXcml0ZUhUTUwodW5zaWduZWQg
ZW5kTGluZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkV3JpdGVIVE1MKHVuc2lnbmVkIGVuZExp
bmUpCiB7CiAgICAgaWYgKCFtX3JlY29yZFN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBjb25z
dCBUaW1lbGluZVJlY29yZEVudHJ5JiBlbnRyeSA9IG1fcmVjb3JkU3RhY2subGFzdCgpOwpAQCAt
MzY3LDQ3ICszNjcsNDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRXcml0ZUhU
TUwodW5zaWduZWQgZW5kTGluZSkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6ZGlkSW5zdGFsbFRpbWVyKGludCB0aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBzaW5n
bGVTaG90LCBGcmFtZSogZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZEluc3RhbGxUaW1l
cihpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCwgRnJhbWUqIGZyYW1l
KQogewogICAgIGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVy
SW5zdGFsbERhdGEodGltZXJJZCwgdGltZW91dCwgc2luZ2xlU2hvdCksIFRpbWVsaW5lUmVjb3Jk
VHlwZTo6VGltZXJJbnN0YWxsLCB0cnVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDo6ZGlkUmVtb3ZlVGltZXIoaW50IHRpbWVySWQsIEZyYW1lKiBmcmFtZSkKK3Zv
aWQgVGltZWxpbmVBZ2VudDo6ZGlkUmVtb3ZlVGltZXIoaW50IHRpbWVySWQsIEZyYW1lKiBmcmFt
ZSkKIHsKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5l
cmljVGltZXJEYXRhKHRpbWVySWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVyUmVtb3ZlLCB0
cnVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbEZpcmVU
aW1lcihpbnQgdGltZXJJZCwgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxs
RmlyZVRpbWVyKGludCB0aW1lcklkLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRS
ZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljVGltZXJEYXRhKHRpbWVy
SWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVyRmlyZSwgZmFsc2UsIGZyYW1lKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRGaXJlVGltZXIoKQordm9pZCBUaW1lbGlu
ZUFnZW50OjpkaWRGaXJlVGltZXIoKQogewogICAgIGRpZENvbXBsZXRlQ3VycmVudFJlY29yZChU
aW1lbGluZVJlY29yZFR5cGU6OlRpbWVyRmlyZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6d2lsbERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KGNvbnN0IFN0cmlu
ZyYgdXJsLCBpbnQgcmVhZHlTdGF0ZSwgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50
Ojp3aWxsRGlzcGF0Y2hYSFJSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoY29uc3QgU3RyaW5nJiB1cmws
IGludCByZWFkeVN0YXRlLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQo
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YSh1cmws
IHJlYWR5U3RhdGUpLCBUaW1lbGluZVJlY29yZFR5cGU6OlhIUlJlYWR5U3RhdGVDaGFuZ2UsIGZh
bHNlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkRGlzcGF0
Y2hYSFJSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWREaXNw
YXRjaFhIUlJlYWR5U3RhdGVDaGFuZ2VFdmVudCgpCiB7CiAgICAgZGlkQ29tcGxldGVDdXJyZW50
UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZTo6WEhSUmVhZHlTdGF0ZUNoYW5nZSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbERpc3BhdGNoWEhSTG9hZEV2ZW50KGNvbnN0
IFN0cmluZyYgdXJsLCBGcmFtZSogZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OndpbGxEaXNw
YXRjaFhIUkxvYWRFdmVudChjb25zdCBTdHJpbmcmIHVybCwgRnJhbWUqIGZyYW1lKQogewogICAg
IHB1c2hDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSTG9hZERh
dGEodXJsKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpYSFJMb2FkLCB0cnVlLCBmcmFtZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkRGlzcGF0Y2hYSFJMb2FkRXZlbnQoKQor
dm9pZCBUaW1lbGluZUFnZW50OjpkaWREaXNwYXRjaFhIUkxvYWRFdmVudCgpCiB7CiAgICAgZGlk
Q29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZTo6WEhSTG9hZCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbEV2YWx1YXRlU2NyaXB0KGNvbnN0IFN0
cmluZyYgdXJsLCBpbnQgbGluZU51bWJlciwgRnJhbWUmIGZyYW1lKQordm9pZCBUaW1lbGluZUFn
ZW50Ojp3aWxsRXZhbHVhdGVTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVy
LCBGcmFtZSYgZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVFdmFsdWF0ZVNjcmlwdERhdGEodXJsLCBsaW5lTnVtYmVyKSwgVGltZWxp
bmVSZWNvcmRUeXBlOjpFdmFsdWF0ZVNjcmlwdCwgdHJ1ZSwgJmZyYW1lKTsKIApAQCAtNDE3LDcg
KzQxNyw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbEV2YWx1YXRlU2NyaXB0
KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlCiAgICAgfQogfQogCi12b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OmRpZEV2YWx1YXRlU2NyaXB0KEZyYW1lJiBmcmFtZSkKK3ZvaWQg
VGltZWxpbmVBZ2VudDo6ZGlkRXZhbHVhdGVTY3JpcHQoRnJhbWUmIGZyYW1lKQogewogICAgIGlm
IChtX2NhbGxTdGFja0RlcHRoKSB7CiAgICAgICAgIC0tbV9jYWxsU3RhY2tEZXB0aDsKQEAgLTQz
OSw3MyArNDM5LDczIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkRXZhbHVhdGVT
Y3JpcHQoRnJhbWUmIGZyYW1lKQogICAgIGRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGlu
ZVJlY29yZFR5cGU6OkV2YWx1YXRlU2NyaXB0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpkaWRUaW1lU3RhbXAoRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZFRpbWVTdGFtcChGcmFtZSYgZnJhbWUsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKIHsKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5
OjpjcmVhdGVUaW1lU3RhbXBEYXRhKG1lc3NhZ2UpLCBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVT
dGFtcCwgdHJ1ZSwgJmZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0
aW1lKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBUaW1lbGluZUFn
ZW50Ojp0aW1lKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGFw
cGVuZFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEobWVz
c2FnZSksIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZSwgdHJ1ZSwgJmZyYW1lKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0aW1lRW5kKEZyYW1lJiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQordm9pZCBUaW1lbGluZUFnZW50Ojp0aW1lRW5kKEZyYW1lJiBmcmFtZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEobWVzc2FnZSksIFRpbWVsaW5lUmVjb3JkVHlw
ZTo6VGltZUVuZCwgdHJ1ZSwgJmZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpkaWRNYXJrRE9NQ29udGVudEV2ZW50KEZyYW1lJiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVB
Z2VudDo6ZGlkTWFya0RPTUNvbnRlbnRFdmVudChGcmFtZSYgZnJhbWUpCiB7CiAgICAgYXBwZW5k
UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlTWFya0RhdGEoZnJhbWUuaXNNYWlu
RnJhbWUoKSksIFRpbWVsaW5lUmVjb3JkVHlwZTo6TWFya0RPTUNvbnRlbnQsIGZhbHNlLCAmZnJh
bWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZE1hcmtMb2FkRXZlbnQo
RnJhbWUmIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRNYXJrTG9hZEV2ZW50KEZyYW1l
JiBmcmFtZSkKIHsKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVNYXJrRGF0YShmcmFtZS5pc01haW5GcmFtZSgpKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpNYXJr
TG9hZCwgZmFsc2UsICZmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
ZGlkQ29tbWl0TG9hZCgpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZENvbW1pdExvYWQoKQogewog
ICAgIGNsZWFyUmVjb3JkU3RhY2soKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpkaWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaW50IGNhbGxiYWNrSWQsIEZyYW1lKiBmcmFtZSkK
K3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFj
a0lkLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlQW5pbWF0aW9uRnJhbWVEYXRhKGNhbGxiYWNrSWQpLCBUaW1lbGluZVJlY29y
ZFR5cGU6OlJlcXVlc3RBbmltYXRpb25GcmFtZSwgdHJ1ZSwgZnJhbWUpOwogfQogCi12b2lkIElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENhbmNlbEFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFj
a0lkLCBGcmFtZSogZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZENhbmNlbEFuaW1hdGlv
bkZyYW1lKGludCBjYWxsYmFja0lkLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVjb3Jk
KFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQW5pbWF0aW9uRnJhbWVEYXRhKGNhbGxiYWNr
SWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lLCB0cnVlLCBmcmFt
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbEZpcmVBbmltYXRpb25G
cmFtZShpbnQgY2FsbGJhY2tJZCwgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3
aWxsRmlyZUFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkLCBGcmFtZSogZnJhbWUpCiB7CiAg
ICAgcHVzaEN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVBbmltYXRp
b25GcmFtZURhdGEoY2FsbGJhY2tJZCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6RmlyZUFuaW1hdGlv
bkZyYW1lLCBmYWxzZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZEZpcmVBbmltYXRpb25GcmFtZSgpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZEZpcmVBbmlt
YXRpb25GcmFtZSgpCiB7CiAgICAgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVj
b3JkVHlwZTo6RmlyZUFuaW1hdGlvbkZyYW1lKTsKIH0KIAogI2lmIEVOQUJMRShXRUJfU09DS0VU
UykKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2wsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkQ3JlYXRlV2ViU29ja2V0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2wsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNv
cmRGYWN0b3J5OjpjcmVhdGVXZWJTb2NrZXRDcmVhdGVEYXRhKGlkZW50aWZpZXIsIHVybCwgcHJv
dG9jb2wpLCBUaW1lbGluZVJlY29yZFR5cGU6OldlYlNvY2tldENyZWF0ZSwgdHJ1ZSwgZnJhbWUp
OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxTZW5kV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEZyYW1lKiBmcmFtZSkKK3Zv
aWQgVGltZWxpbmVBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgRnJhbWUqIGZyYW1lKQogewogICAgIGFwcGVuZFJlY29yZChU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNXZWJTb2NrZXREYXRhKGlkZW50aWZp
ZXIpLCBUaW1lbGluZVJlY29yZFR5cGU6OldlYlNvY2tldFNlbmRIYW5kc2hha2VSZXF1ZXN0LCB0
cnVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkUmVjZWl2
ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRnJh
bWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNo
YWtlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBGcmFtZSogZnJhbWUpCiB7CiAg
ICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1dlYlNv
Y2tldERhdGEoaWRlbnRpZmllciksIFRpbWVsaW5lUmVjb3JkVHlwZTo6V2ViU29ja2V0UmVjZWl2
ZUhhbmRzaGFrZVJlc3BvbnNlLCBmYWxzZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmRpZERlc3Ryb3lXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBGcmFtZSogZnJhbWUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZERlc3Ryb3lXZWJTb2NrZXQo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVj
b3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1dlYlNvY2tldERhdGEoaWRl
bnRpZmllciksIFRpbWVsaW5lUmVjb3JkVHlwZTo6V2ViU29ja2V0RGVzdHJveSwgdHJ1ZSwgZnJh
bWUpOwogfQpAQCAtNTEzLDcgKzUxMyw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
ZGlkRGVzdHJveVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEZyYW1lCiAKIC8v
IFNjcmlwdERlYnVnTGlzdGVuZXIKIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpicmVh
a3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3BlY3Rvcjo6
U2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25l
ZCBzYW1wbGVJZCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKQordm9pZCBUaW1lbGlu
ZUFnZW50OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEluc3BlY3Rvcjo6U2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25lZCBiYXRj
aElkLCB1bnNpZ25lZCBzYW1wbGVJZCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKQog
ewogICAgIFVOVVNFRF9QQVJBTShiYXRjaElkKTsKICAgICBBU1NFUlQoZXhlYyk7CkBAIC01OTYs
NyArNTk2LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5
cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHkKICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZVN0YW1wOwogfQogCi12b2lkIElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiByZWNvcmQsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQordm9pZCBUaW1lbGlu
ZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVj
b3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlRfQVJHKHJlY29yZCwg
cmVjb3JkKTsKICAgICByZWNvcmQtPnNldFN0cmluZygidHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OmdldEVudW1Db25zdGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKQEAgLTYxMCw3ICs2
MTAsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUo
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiByZWNvcgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzZXRGcmFtZUlkZW50aWZpZXIoSW5zcGVjdG9yT2JqZWN0KiByZWNv
cmQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6c2V0RnJhbWVJZGVudGlmaWVy
KEluc3BlY3Rvck9iamVjdCogcmVjb3JkLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFmcmFt
ZSB8fCAhbV9wYWdlQWdlbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTYyMCw3ICs2MjAsNyBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEZyYW1lSWRlbnRpZmllcihJbnNwZWN0b3JP
YmplY3QqIHJlY29yZCwgRnJhbWUqCiAgICAgcmVjb3JkLT5zZXRTdHJpbmcoImZyYW1lSWQiLCBm
cmFtZUlkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZVJl
Y29yZEVudHJ5KGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIGVudHJ5KQordm9pZCBUaW1lbGlu
ZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkm
IGVudHJ5KQogewogICAgIGVudHJ5LnJlY29yZC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZGF0
YSIpLCBlbnRyeS5kYXRhKTsKICAgICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KEFTQ0lJTGl0ZXJh
bCgiY2hpbGRyZW4iKSwgZW50cnkuY2hpbGRyZW4pOwpAQCAtNjI4LDcgKzYyOCw3IEBAIHZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVSZWNvcmRFbnRyeShjb25zdCBUaW1l
bGluZVJlY29yZEVudHJ5JiBlCiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShlbnRyeS5yZWNvcmQu
Y29weVJlZigpLCBlbnRyeS50eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCit2b2lk
IFRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5
cGUgdHlwZSkKIHsKICAgICAvLyBBbiBlbXB0eSBzdGFjayBjb3VsZCBtZXJlbHkgbWVhbiB0aGF0
IHRoZSB0aW1lbGluZSBhZ2VudCB3YXMgdHVybmVkIG9uIGluIHRoZSBtaWRkbGUgb2YKICAgICAv
LyBhbiBldmVudC4gIERvbid0IHRyZWF0IGFzIGFuIGVycm9yLgpAQCAtNjQwLDggKzY0MCw4IEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRp
bWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogICAgIH0KIH0KIAotSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yVHlwZSB0
eXBlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKLSAgICA6IEluc3BlY3RvckFnZW50QmFzZShB
U0NJSUxpdGVyYWwoIlRpbWVsaW5lIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCitUaW1lbGluZUFn
ZW50OjpUaW1lbGluZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIFBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JUeXBlIHR5cGUsIEluc3BlY3RvckNs
aWVudCogY2xpZW50KQorICAgIDogV2ViQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiVGltZWxpbmUi
KSwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAg
ICAsIG1fc2NyaXB0RGVidWdTZXJ2ZXIobnVsbHB0cikKICAgICAsIG1faWQoMSkKQEAgLTY1NCw3
ICs2NTQsNyBAQCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpJbnNwZWN0b3JUaW1lbGluZUFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbgogewogfQogCi12b2lkIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRh
dGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1l
KiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3JkKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNh
bGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlY29y
ZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0aW1lc3RhbXAo
KSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsKICAgICByZWNv
cmQtPnNldE9iamVjdCgiZGF0YSIsIFdURjo6bW92ZShkYXRhKSk7CkBAIC02NjIsNyArNjYyLDcg
QEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphcHBlbmRSZWNvcmQoUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mJiBkYXRhLCBUaW1lbGkKICAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKFdURjo6
bW92ZShyZWNvcmQpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpz
ZW5kRXZlbnQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBldmVudCkKK3ZvaWQgVGltZWxpbmVB
Z2VudDo6c2VuZEV2ZW50KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZXZlbnQpCiB7CiAgICAg
aWYgKCFtX2Zyb250ZW5kRGlzcGF0Y2hlcikKICAgICAgICAgcmV0dXJuOwpAQCAtNjcyLDI1ICs2
NzIsMjUgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBldmVudCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXZlbnRS
ZWNvcmRlZChXVEY6Om1vdmUocmVjb3JkQ2hlY2tlZCkpOwogfQogCi1JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0
ZVJlY29yZEVudHJ5KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNv
cmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQorVGltZWxp
bmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRF
bnRyeShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0
eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVy
aWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0Rl
cHRoIDogMCk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZyYW1lKTsK
ICAgICByZXR1cm4gVGltZWxpbmVSZWNvcmRFbnRyeShXVEY6Om1vdmUocmVjb3JkKSwgV1RGOjpt
b3ZlKGRhdGEpLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCksIHR5cGUpOwogfQogCi12b2lkIElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJyZW50UmVjb3JkKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxT
dGFjaywgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29y
ZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBl
LCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKICAgICBwdXNoQ3VycmVu
dFJlY29yZChjcmVhdGVSZWNvcmRFbnRyeShXVEY6Om1vdmUoZGF0YSksIHR5cGUsIGNhcHR1cmVD
YWxsU3RhY2ssIGZyYW1lKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y2xl
YXJSZWNvcmRTdGFjaygpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmNsZWFyUmVjb3JkU3RhY2soKQog
ewogICAgIG1fcmVjb3JkU3RhY2suY2xlYXIoKTsKICAgICBtX2lkKys7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6bG9jYWxUb1BhZ2VRdWFkKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsIEZsb2F0UXVhZCogcXVhZCkKK3ZvaWQg
VGltZWxpbmVBZ2VudDo6bG9jYWxUb1BhZ2VRdWFkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsIEZsb2F0UXVhZCogcXVhZCkKIHsKICAgICBjb25z
dCBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKICAg
ICBGbG9hdFF1YWQgYWJzb2x1dGUgPSByZW5kZXJlci5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0
UXVhZChyZWN0KSk7CkBAIC03MDAsNyArNzAwLDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50Ojpsb2NhbFRvUGFnZVF1YWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QK
ICAgICBxdWFkLT5zZXRQNChmcmFtZVZpZXcuY29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQ
b2ludChhYnNvbHV0ZS5wNCgpKSkpOwogfQogCi1QYWdlKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpwYWdlKCkKK1BhZ2UqIFRpbWVsaW5lQWdlbnQ6OnBhZ2UoKQogewogICAgIHJldHVybiBtX3Bh
Z2VBZ2VudCA/IG1fcGFnZUFnZW50LT5wYWdlKCkgOiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKaW5kZXggNDVhZjYz
NTk5ZjhjZTdkMzVmNzE5MTFkYTg5MTYyN2QwY2Y5ZWM3YS4uZjJkNzI0MzdlNzQzNjg0Mzk2NTRj
YjM3YmYzZjIxODUzYWNhOGQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBAIC01MiwxNSArNTIsMTUgQEAgY2xhc3MgRXZlbnQ7
CiBjbGFzcyBGbG9hdFF1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsK
LWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBj
bGFzcyBJbnRSZWN0OwotY2xhc3MgVVJMOwogY2xhc3MgUGFnZTsKK2NsYXNzIFBhZ2VBZ2VudDsK
IGNsYXNzIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNz
IFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CitjbGFzcyBVUkw7CiAK
IHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCkBAIC0xMDUsMTcgKzEwNSwxNyBAQCBlbnVt
IGNsYXNzIFRpbWVsaW5lUmVjb3JkVHlwZSB7CiAgICAgV2ViU29ja2V0RGVzdHJveQogfTsKIAot
Y2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCBmaW5hbAotICAgIDogcHVibGljIEluc3BlY3Rv
ckFnZW50QmFzZQorY2xhc3MgVGltZWxpbmVBZ2VudCBmaW5hbAorICAgIDogcHVibGljIFdlYkFn
ZW50QmFzZQogICAgICwgcHVibGljIEluc3BlY3Rvcjo6VGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIKICAgICAsIHB1YmxpYyBJbnNwZWN0b3I6OlNjcmlwdERlYnVnTGlzdGVuZXIgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclRpbWVsaW5lQWdlbnQpOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFRpbWVsaW5lQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIGVudW0gSW5zcGVjdG9yVHlwZSB7IFBhZ2VJbnNwZWN0b3Is
IFdvcmtlckluc3BlY3RvciB9OwogCi0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yVHlwZSwgSW5zcGVj
dG9yQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOworICAg
IFRpbWVsaW5lQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2VBZ2VudCosIEluc3BlY3Rv
clR5cGUsIEluc3BlY3RvckNsaWVudCopOworICAgIHZpcnR1YWwgflRpbWVsaW5lQWdlbnQoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CkBAIC0yMjYsNyArMjI2LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGxvY2FsVG9QYWdlUXVhZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBMYXlvdXRSZWN0JiwgRmxvYXRRdWFkKik7CiAgICAgUGFnZSogcGFnZSgpOwogCi0gICAgSW5z
cGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50
OwogICAgIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlciogbV9zY3JpcHREZWJ1Z1NlcnZlcjsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OlRpbWVsaW5lRnJvbnRlbmREaXNwYXRjaGVyPiBt
X2Zyb250ZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JXZWJBZ2VudEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JXZWJBZ2VudEJhc2UuaAppbmRleCBkZmNjNGE4NDUzYmEyMDdmYjEzZDc2OTkzOThiYTc4
ZmZlYTJlZjVjLi5hODg2NjUyYTRhNmM2NjU2OTIxMTM5MGU3Y2VlYWI1YTYyMDZlNzA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViQWdlbnRCYXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldlYkFnZW50QmFzZS5oCkBA
IC0zNSwxNyArMzUsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnN0cnVtZW50
aW5nQWdlbnRzOwogCi1jbGFzcyBJbnNwZWN0b3JBZ2VudEJhc2UgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBZ2VudEJhc2UgeworY2xhc3MgV2ViQWdlbnRCYXNlIDogcHVibGljIEluc3Bl
Y3Rvcjo6QWdlbnRCYXNlIHsKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JBZ2VudEJhc2UoY29u
c3QgU3RyaW5nJiBuYW1lLCBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
KQotICAgICAgICA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQWdlbnRCYXNlKG5hbWUpCisgICAgV2Vi
QWdlbnRCYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cykKKyAgICAgICAgOiBJbnNwZWN0b3I6OkFnZW50QmFzZShuYW1lKQogICAg
ICAgICAsIG1faW5zdHJ1bWVudGluZ0FnZW50cyhpbnN0cnVtZW50aW5nQWdlbnRzKQogICAgIHsK
ICAgICB9CiAKICAgICBJbnN0cnVtZW50aW5nQWdlbnRzKiBtX2luc3RydW1lbnRpbmdBZ2VudHM7
CiB9OwotICAgIAorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyAhZGVmaW5l
ZChJbnNwZWN0b3JXZWJBZ2VudEJhc2VfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCmluZGV4IGQ4NGJiMDU5YmZkYmMwNTMyMjM3YTQ0
YzI2NDhhYThhYjUzOTRlMzEuLjgyM2NmZjg4ZWQ0NzliM2I2YTc3NzllNzc3NzgyZjhmOTgxNmFh
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFn
ZW50LmNwcApAQCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEluc3BlY3RvcldvcmtlckFnZW50OjpXb3JrZXJG
cm9udGVuZENoYW5uZWwgOiBwdWJsaWMgV29ya2VyR2xvYmFsU2NvcGVQcm94eTo6UGFnZUluc3Bl
Y3RvciB7CitjbGFzcyBXb3JrZXJBZ2VudDo6V29ya2VyRnJvbnRlbmRDaGFubmVsIDogcHVibGlj
IFdvcmtlckdsb2JhbFNjb3BlUHJveHk6OlBhZ2VJbnNwZWN0b3IgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4cGxpY2l0IFdvcmtlckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3I6OldvcmtlckZyb250ZW5kRGlzcGF0Y2hlciogZnJvbnRlbmREaXNwYXRjaGVy
LCBXb3JrZXJHbG9iYWxTY29wZVByb3h5KiBwcm94eSkKQEAgLTk5LDI4ICs5OSwyOCBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBpbnQgc19uZXh0SWQ7CiB9OwogCi1pbnQgSW5zcGVjdG9yV29ya2Vy
QWdlbnQ6OldvcmtlckZyb250ZW5kQ2hhbm5lbDo6c19uZXh0SWQgPSAxOworaW50IFdvcmtlckFn
ZW50OjpXb3JrZXJGcm9udGVuZENoYW5uZWw6OnNfbmV4dElkID0gMTsKIAotSW5zcGVjdG9yV29y
a2VyQWdlbnQ6Okluc3BlY3RvcldvcmtlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJX
b3JrZXIiKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKK1dvcmtlckFnZW50OjpXb3JrZXJBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQorICAgIDogV2ViQWdlbnRC
YXNlKEFTQ0lJTGl0ZXJhbCgiV29ya2VyIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBt
X2VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZFBhdXNlRGVkaWNhdGVkV29ya2VyT25TdGFy
dChmYWxzZSkKIHsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3Rvcldvcmtl
ckFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0V29ya2VyQWdlbnQo
dGhpcyk7CiB9CiAKLUluc3BlY3RvcldvcmtlckFnZW50Ojp+SW5zcGVjdG9yV29ya2VyQWdlbnQo
KQorV29ya2VyQWdlbnQ6On5Xb3JrZXJBZ2VudCgpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLT5zZXRJbnNwZWN0b3JXb3JrZXJBZ2VudChudWxscHRyKTsKKyAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMtPnNldFdvcmtlckFnZW50KG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIpCit2b2lkIFdvcmtlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6V29ya2VyRnJv
bnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBJbnNwZWN0b3I6OldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERp
c3BhdGNoZXIsIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lk
IFdvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9zaG91bGRQYXVzZURlZGljYXRlZFdvcmtlck9uU3Rh
cnQgPSBmYWxzZTsKICAgICBFcnJvclN0cmluZyB1bnVzZWQ7CkBAIC0xMzAsNyArMTMwLDcgQEAg
dm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmUKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCit2
b2lkIFdvcmtlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogewogICAgIG1fZW5hYmxlZCA9
IHRydWU7CiAgICAgaWYgKCFtX2Zyb250ZW5kRGlzcGF0Y2hlcikKQEAgLTEzOSw3ICsxMzksNyBA
QCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgIGNy
ZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCit2b2lkIFdvcmtl
ckFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKIHsKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsK
ICAgICBpZiAoIW1fZnJvbnRlbmREaXNwYXRjaGVyKQpAQCAtMTQ4LDEyICsxNDgsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAgZGVzdHJv
eVdvcmtlckZyb250ZW5kQ2hhbm5lbHMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2Vu
dDo6Y2FuSW5zcGVjdFdvcmtlcnMoRXJyb3JTdHJpbmcmLCBib29sKiByZXN1bHQpCit2b2lkIFdv
cmtlckFnZW50OjpjYW5JbnNwZWN0V29ya2VycyhFcnJvclN0cmluZyYsIGJvb2wqIHJlc3VsdCkK
IHsKICAgICAqcmVzdWx0ID0gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
Y29ubmVjdFRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklkKQordm9pZCBX
b3JrZXJBZ2VudDo6Y29ubmVjdFRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtl
cklkKQogewogICAgIFdvcmtlckZyb250ZW5kQ2hhbm5lbCogY2hhbm5lbCA9IG1faWRUb0NoYW5u
ZWwuZ2V0KHdvcmtlcklkKTsKICAgICBpZiAoY2hhbm5lbCkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2
b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojpjb25uZWN0VG9Xb3JrZXIoRXJyb3JTdHJpbmcmIGVy
cm9yLCBpbnQgd29ya2VySWQpCiAgICAgICAgIGVycm9yID0gQVNDSUlMaXRlcmFsKCJXb3JrZXIg
aXMgZ29uZSIpOwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkaXNjb25uZWN0RnJv
bVdvcmtlcihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3JrZXJJZCkKK3ZvaWQgV29ya2VyQWdl
bnQ6OmRpc2Nvbm5lY3RGcm9tV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklk
KQogewogICAgIFdvcmtlckZyb250ZW5kQ2hhbm5lbCogY2hhbm5lbCA9IG1faWRUb0NoYW5uZWwu
Z2V0KHdvcmtlcklkKTsKICAgICBpZiAoY2hhbm5lbCkKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lk
IEluc3BlY3RvcldvcmtlckFnZW50OjpkaXNjb25uZWN0RnJvbVdvcmtlcihFcnJvclN0cmluZyYg
ZXJyb3IsIGludCB3b3JrZXJJZAogICAgICAgICBlcnJvciA9IEFTQ0lJTGl0ZXJhbCgiV29ya2Vy
IGlzIGdvbmUiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VU
b1dvcmtlcihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VU
b1dvcmtlcihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFdvcmtlckZyb250ZW5kQ2hhbm5lbCog
Y2hhbm5lbCA9IG1faWRUb0NoYW5uZWwuZ2V0KHdvcmtlcklkKTsKICAgICBpZiAoY2hhbm5lbCkK
QEAgLTE4MCwyNCArMTgwLDI0IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNz
YWdlVG9Xb3JrZXIoRXJyb3JTdHJpbmcmIGVycm9yLCBpbnQgd29ya2VySWQsCiAgICAgICAgIGVy
cm9yID0gQVNDSUlMaXRlcmFsKCJXb3JrZXIgaXMgZ29uZSIpOwogfQogCi12b2lkIEluc3BlY3Rv
cldvcmtlckFnZW50OjpzZXRBdXRvY29ubmVjdFRvV29ya2VycyhFcnJvclN0cmluZyYsIGJvb2wg
dmFsdWUpCit2b2lkIFdvcmtlckFnZW50OjpzZXRBdXRvY29ubmVjdFRvV29ya2VycyhFcnJvclN0
cmluZyYsIGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGRQYXVzZURlZGljYXRlZFdvcmtlck9u
U3RhcnQgPSB2YWx1ZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2hvdWxkUGF1
c2VEZWRpY2F0ZWRXb3JrZXJPblN0YXJ0KCkgY29uc3QKK2Jvb2wgV29ya2VyQWdlbnQ6OnNob3Vs
ZFBhdXNlRGVkaWNhdGVkV29ya2VyT25TdGFydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2hv
dWxkUGF1c2VEZWRpY2F0ZWRXb3JrZXJPblN0YXJ0OwogfQogCi12b2lkIEluc3BlY3Rvcldvcmtl
ckFnZW50OjpkaWRTdGFydFdvcmtlckdsb2JhbFNjb3BlKFdvcmtlckdsb2JhbFNjb3BlUHJveHkq
IHdvcmtlckdsb2JhbFNjb3BlUHJveHksIGNvbnN0IFVSTCYgdXJsKQordm9pZCBXb3JrZXJBZ2Vu
dDo6ZGlkU3RhcnRXb3JrZXJHbG9iYWxTY29wZShXb3JrZXJHbG9iYWxTY29wZVByb3h5KiB3b3Jr
ZXJHbG9iYWxTY29wZVByb3h5LCBjb25zdCBVUkwmIHVybCkKIHsKICAgICBtX2RlZGljYXRlZFdv
cmtlcnMuc2V0KHdvcmtlckdsb2JhbFNjb3BlUHJveHksIHVybC5zdHJpbmcoKSk7CiAgICAgaWYg
KG1fZnJvbnRlbmREaXNwYXRjaGVyICYmIG1fZW5hYmxlZCkKICAgICAgICAgY3JlYXRlV29ya2Vy
RnJvbnRlbmRDaGFubmVsKHdvcmtlckdsb2JhbFNjb3BlUHJveHksIHVybC5zdHJpbmcoKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6Ondvcmtlckdsb2JhbFNjb3BlVGVybWluYXRl
ZChXb3JrZXJHbG9iYWxTY29wZVByb3h5KiBwcm94eSkKK3ZvaWQgV29ya2VyQWdlbnQ6Ondvcmtl
ckdsb2JhbFNjb3BlVGVybWluYXRlZChXb3JrZXJHbG9iYWxTY29wZVByb3h5KiBwcm94eSkKIHsK
ICAgICBtX2RlZGljYXRlZFdvcmtlcnMucmVtb3ZlKHByb3h5KTsKICAgICBmb3IgKFdvcmtlckNo
YW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRUb0NoYW5uZWwuYmVnaW4oKTsgaXQgIT0gbV9pZFRv
Q2hhbm5lbC5lbmQoKTsgKytpdCkgewpAQCAtMjEwLDEzICsyMTAsMTMgQEAgdm9pZCBJbnNwZWN0
b3JXb3JrZXJBZ2VudDo6d29ya2VyR2xvYmFsU2NvcGVUZXJtaW5hdGVkKFdvcmtlckdsb2JhbFNj
b3BlUHJveHkqIHAKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0
ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JFeGlzdGluZ1dvcmtlcnMoKQordm9pZCBXb3JrZXJB
Z2VudDo6Y3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsc0ZvckV4aXN0aW5nV29ya2VycygpCiB7
CiAgICAgZm9yIChEZWRpY2F0ZWRXb3JrZXJzOjppdGVyYXRvciBpdCA9IG1fZGVkaWNhdGVkV29y
a2Vycy5iZWdpbigpOyBpdCAhPSBtX2RlZGljYXRlZFdvcmtlcnMuZW5kKCk7ICsraXQpCiAgICAg
ICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbChpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQog
Ci12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkZXN0cm95V29ya2VyRnJvbnRlbmRDaGFubmVs
cygpCit2b2lkIFdvcmtlckFnZW50OjpkZXN0cm95V29ya2VyRnJvbnRlbmRDaGFubmVscygpCiB7
CiAgICAgZm9yIChXb3JrZXJDaGFubmVsczo6aXRlcmF0b3IgaXQgPSBtX2lkVG9DaGFubmVsLmJl
Z2luKCk7IGl0ICE9IG1faWRUb0NoYW5uZWwuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaXQtPnZh
bHVlLT5kaXNjb25uZWN0RnJvbVdvcmtlckdsb2JhbFNjb3BlKCk7CkBAIC0yMjUsNyArMjI1LDcg
QEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGVzdHJveVdvcmtlckZyb250ZW5kQ2hhbm5l
bHMoKQogICAgIG1faWRUb0NoYW5uZWwuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3Jr
ZXJBZ2VudDo6Y3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKFdvcmtlckdsb2JhbFNjb3BlUHJv
eHkqIHdvcmtlckdsb2JhbFNjb3BlUHJveHksIGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBXb3Jr
ZXJBZ2VudDo6Y3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKFdvcmtlckdsb2JhbFNjb3BlUHJv
eHkqIHdvcmtlckdsb2JhbFNjb3BlUHJveHksIGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIFdv
cmtlckZyb250ZW5kQ2hhbm5lbCogY2hhbm5lbCA9IG5ldyBXb3JrZXJGcm9udGVuZENoYW5uZWwo
bV9mcm9udGVuZERpc3BhdGNoZXIuZ2V0KCksIHdvcmtlckdsb2JhbFNjb3BlUHJveHkpOwogICAg
IG1faWRUb0NoYW5uZWwuc2V0KGNoYW5uZWwtPmlkKCksIGNoYW5uZWwpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaAppbmRleCA0ZTczY2ZiOTE3
MGYyMzQwYmIwNDg5YzZkOTFhZjNjOWYzOThhNTkyLi4xNmRhODA2OTg4OWEwYjc3ZjQyNGIzOGJk
YzM2NGY3YjhiM2ViOGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yV29ya2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV29ya2VyQWdlbnQuaApAQCAtNDgsMTEgKzQ4LDExIEBAIGNsYXNzIFdvcmtlckdsb2JhbFNj
b3BlUHJveHk7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0
b3JXb3JrZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJ
bnNwZWN0b3I6OldvcmtlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitjbGFzcyBXb3JrZXJB
Z2VudCBmaW5hbCA6IHB1YmxpYyBXZWJBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6Oldvcmtl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yV29ya2VyQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyopOwotICAgIHZpcnR1YWwgfkluc3BlY3RvcldvcmtlckFnZW50KCk7CisgICAgZXhw
bGljaXQgV29ya2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyopOworICAgIHZpcnR1YWwgfldv
cmtlckFnZW50KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuY3BwCmluZGV4IGVjMDQ2
NDIxYmYyNmRkNzhmNDRmYzZkNGNlNjZkMDlmYjYyNTVkZGMuLmQwMDhiNzkzOTI0OWU2OWQ4NDRk
YzU3OWY0ZjFiOGViOWYwNTcwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zdHJ1bWVudGluZ0FnZW50cy5jcHAKQEAgLTQ1LDUyICs0NSw1MiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBJbnN0cnVtZW50aW5nQWdlbnRzOjpJbnN0cnVtZW50aW5nQWdlbnRzKEluc3BlY3Rv
ckVudmlyb25tZW50JiBlbnZpcm9ubWVudCkKICAgICA6IG1fZW52aXJvbm1lbnQoZW52aXJvbm1l
bnQpCiAgICAgLCBtX2luc3BlY3RvckFnZW50KG51bGxwdHIpCi0gICAgLCBtX2luc3BlY3RvclBh
Z2VBZ2VudChudWxscHRyKQotICAgICwgbV9pbnNwZWN0b3JDU1NBZ2VudChudWxscHRyKQotICAg
ICwgbV9pbnNwZWN0b3JMYXllclRyZWVBZ2VudChudWxscHRyKQorICAgICwgbV9wYWdlQWdlbnQo
bnVsbHB0cikKKyAgICAsIG1fY3NzQWdlbnQobnVsbHB0cikKKyAgICAsIG1fbGF5ZXJUcmVlQWdl
bnQobnVsbHB0cikKICAgICAsIG1fd2ViQ29uc29sZUFnZW50KG51bGxwdHIpCi0gICAgLCBtX2lu
c3BlY3RvckRPTUFnZW50KG51bGxwdHIpCi0gICAgLCBtX2luc3BlY3RvclJlc291cmNlQWdlbnQo
bnVsbHB0cikKKyAgICAsIG1fZG9tQWdlbnQobnVsbHB0cikKKyAgICAsIG1fcmVzb3VyY2VBZ2Vu
dChudWxscHRyKQogICAgICwgbV9wYWdlUnVudGltZUFnZW50KG51bGxwdHIpCiAgICAgLCBtX3dv
cmtlclJ1bnRpbWVBZ2VudChudWxscHRyKQotICAgICwgbV9pbnNwZWN0b3JUaW1lbGluZUFnZW50
KG51bGxwdHIpCi0gICAgLCBtX3BlcnNpc3RlbnRJbnNwZWN0b3JUaW1lbGluZUFnZW50KG51bGxw
dHIpCi0gICAgLCBtX2luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChudWxscHRyKQorICAgICwgbV90
aW1lbGluZUFnZW50KG51bGxwdHIpCisgICAgLCBtX3BlcnNpc3RlbnRUaW1lbGluZUFnZW50KG51
bGxwdHIpCisgICAgLCBtX2RvbVN0b3JhZ2VBZ2VudChudWxscHRyKQogI2lmIEVOQUJMRShXRUJf
UkVQTEFZKQotICAgICwgbV9pbnNwZWN0b3JSZXBsYXlBZ2VudChudWxscHRyKQorICAgICwgbV9y
ZXBsYXlBZ2VudChudWxscHRyKQogI2VuZGlmCi0gICAgLCBtX2luc3BlY3RvckRhdGFiYXNlQWdl
bnQobnVsbHB0cikKLSAgICAsIG1faW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KG51bGxw
dHIpCi0gICAgLCBtX2luc3BlY3RvckRlYnVnZ2VyQWdlbnQobnVsbHB0cikKKyAgICAsIG1fZGF0
YWJhc2VBZ2VudChudWxscHRyKQorICAgICwgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQobnVsbHB0
cikKKyAgICAsIG1fZGVidWdnZXJBZ2VudChudWxscHRyKQogICAgICwgbV9wYWdlRGVidWdnZXJB
Z2VudChudWxscHRyKQotICAgICwgbV9pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KG51bGxwdHIp
Ci0gICAgLCBtX2luc3BlY3RvcldvcmtlckFnZW50KG51bGxwdHIpCisgICAgLCBtX2RvbURlYnVn
Z2VyQWdlbnQobnVsbHB0cikKKyAgICAsIG1fd29ya2VyQWdlbnQobnVsbHB0cikKIHsKIH0KIAog
dm9pZCBJbnN0cnVtZW50aW5nQWdlbnRzOjpyZXNldCgpCiB7CiAgICAgbV9pbnNwZWN0b3JBZ2Vu
dCA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JQYWdlQWdlbnQgPSBudWxscHRyOwotICAgIG1f
aW5zcGVjdG9yQ1NTQWdlbnQgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQgPSBudWxscHRyOworICAgIG1fcGFnZUFnZW50ID0gbnVsbHB0cjsKKyAgICBtX2Nzc0FnZW50
ID0gbnVsbHB0cjsKKyAgICBtX2xheWVyVHJlZUFnZW50ID0gbnVsbHB0cjsKICAgICBtX3dlYkNv
bnNvbGVBZ2VudCA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JET01BZ2VudCA9IG51bGxwdHI7
Ci0gICAgbV9pbnNwZWN0b3JSZXNvdXJjZUFnZW50ID0gbnVsbHB0cjsKKyAgICBtX2RvbUFnZW50
ID0gbnVsbHB0cjsKKyAgICBtX3Jlc291cmNlQWdlbnQgPSBudWxscHRyOwogICAgIG1fcGFnZVJ1
bnRpbWVBZ2VudCA9IG51bGxwdHI7CiAgICAgbV93b3JrZXJSdW50aW1lQWdlbnQgPSBudWxscHRy
OwotICAgIG1faW5zcGVjdG9yVGltZWxpbmVBZ2VudCA9IG51bGxwdHI7Ci0gICAgbV9wZXJzaXN0
ZW50SW5zcGVjdG9yVGltZWxpbmVBZ2VudCA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQgPSBudWxscHRyOworICAgIG1fdGltZWxpbmVBZ2VudCA9IG51bGxwdHI7Cisg
ICAgbV9wZXJzaXN0ZW50VGltZWxpbmVBZ2VudCA9IG51bGxwdHI7CisgICAgbV9kb21TdG9yYWdl
QWdlbnQgPSBudWxscHRyOwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIG1faW5zcGVjdG9y
UmVwbGF5QWdlbnQgPSBudWxscHRyOworICAgIG1fcmVwbGF5QWdlbnQgPSBudWxscHRyOwogI2Vu
ZGlmCi0gICAgbV9pbnNwZWN0b3JEYXRhYmFzZUFnZW50ID0gbnVsbHB0cjsKLSAgICBtX2luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JEZWJ1
Z2dlckFnZW50ID0gbnVsbHB0cjsKKyAgICBtX2RhdGFiYXNlQWdlbnQgPSBudWxscHRyOworICAg
IG1fYXBwbGljYXRpb25DYWNoZUFnZW50ID0gbnVsbHB0cjsKKyAgICBtX2RlYnVnZ2VyQWdlbnQg
PSBudWxscHRyOwogICAgIG1fcGFnZURlYnVnZ2VyQWdlbnQgPSBudWxscHRyOwotICAgIG1faW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudCA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JXb3JrZXJB
Z2VudCA9IG51bGxwdHI7CisgICAgbV9kb21EZWJ1Z2dlckFnZW50ID0gbnVsbHB0cjsKKyAgICBt
X3dvcmtlckFnZW50ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmgKaW5kZXggZjkx
YTY4NTllNDc3NWRjMDQ3ODRmYTMxNzQ4MmIzOGU4ZDk5ZGE2NS4uY2I5YTJhYjY2ODJhMDVkODc5
OTQ4M2NmMjA0ODYxZDdlZGU2MWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zdHJ1bWVudGluZ0FnZW50cy5oCkBAIC0zOSwyOCArMzksMjggQEAKICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKK2NsYXNzIERlYnVnZ2VyQWdl
bnQ7CiBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKLWNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7
CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OwotY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01B
Z2VudDsKLWNsYXNzIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OwotY2xhc3MgSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7Ci1jbGFzcyBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OwotY2xhc3MgSW5zcGVjdG9yUmVwbGF5QWdlbnQ7Ci1jbGFz
cyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwotY2xhc3MgSW5zcGVjdG9yV29ya2VyQWdlbnQ7Citj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlQWdlbnQ7CitjbGFzcyBDU1NBZ2VudDsKK2NsYXNzIERhdGFi
YXNlQWdlbnQ7CitjbGFzcyBET01BZ2VudDsKK2NsYXNzIERPTURlYnVnZ2VyQWdlbnQ7CitjbGFz
cyBET01TdG9yYWdlQWdlbnQ7CitjbGFzcyBMYXllclRyZWVBZ2VudDsKIGNsYXNzIFBhZ2U7Citj
bGFzcyBQYWdlQWdlbnQ7CiBjbGFzcyBQYWdlRGVidWdnZXJBZ2VudDsKIGNsYXNzIFBhZ2VSdW50
aW1lQWdlbnQ7CitjbGFzcyBSZXBsYXlBZ2VudDsKK2NsYXNzIFJlc291cmNlQWdlbnQ7CitjbGFz
cyBUaW1lbGluZUFnZW50OwogY2xhc3MgV2ViQ29uc29sZUFnZW50OworY2xhc3MgV29ya2VyQWdl
bnQ7CiBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKIGNsYXNzIFdvcmtlclJ1bnRpbWVBZ2VudDsK
IApAQCAtNjgsOSArNjgsOSBAQCBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzIDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5zdHJ1bWVudGluZ0FnZW50cz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEluc3RydW1lbnRpbmdBZ2VudHMpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3RydW1lbnRpbmdBZ2VudHM+IGNyZWF0ZShJ
bnNwZWN0b3I6Okluc3BlY3RvckVudmlyb25tZW50JiBlbnZpcm9ubWVudCkKKyAgICBzdGF0aWMg
UmVmPEluc3RydW1lbnRpbmdBZ2VudHM+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckVudmly
b25tZW50JiBlbnZpcm9ubWVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zdHJ1bWVudGluZ0FnZW50cyhlbnZpcm9ubWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJbnN0cnVtZW50aW5nQWdlbnRzKGVudmlyb25tZW50KSk7CiAgICAgfQogICAgIH5J
bnN0cnVtZW50aW5nQWdlbnRzKCkgeyB9CiAgICAgdm9pZCByZXNldCgpOwpAQCAtODAsMjAgKzgw
LDIwIEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQ7IH0KICAgICB2b2lkIHNldElu
c3BlY3RvckFnZW50KEluc3BlY3Rvcjo6SW5zcGVjdG9yQWdlbnQqIGFnZW50KSB7IG1faW5zcGVj
dG9yQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0b3JQ
YWdlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclBhZ2VBZ2VudDsgfQotICAgIHZv
aWQgc2V0SW5zcGVjdG9yUGFnZUFnZW50KEluc3BlY3RvclBhZ2VBZ2VudCogYWdlbnQpIHsgbV9p
bnNwZWN0b3JQYWdlQWdlbnQgPSBhZ2VudDsgfQorICAgIFBhZ2VBZ2VudCogcGFnZUFnZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlQWdlbnQ7IH0KKyAgICB2b2lkIHNldFBhZ2VBZ2VudChQYWdl
QWdlbnQqIGFnZW50KSB7IG1fcGFnZUFnZW50ID0gYWdlbnQ7IH0KIAotICAgIEluc3BlY3RvckNT
U0FnZW50KiBpbnNwZWN0b3JDU1NBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NT
QWdlbnQ7IH0KLSAgICB2b2lkIHNldEluc3BlY3RvckNTU0FnZW50KEluc3BlY3RvckNTU0FnZW50
KiBhZ2VudCkgeyBtX2luc3BlY3RvckNTU0FnZW50ID0gYWdlbnQ7IH0KKyAgICBDU1NBZ2VudCog
Y3NzQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2Nzc0FnZW50OyB9CisgICAgdm9pZCBzZXRDU1NB
Z2VudChDU1NBZ2VudCogYWdlbnQpIHsgbV9jc3NBZ2VudCA9IGFnZW50OyB9CiAKICAgICBXZWJD
b25zb2xlQWdlbnQqIHdlYkNvbnNvbGVBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViQ29uc29s
ZUFnZW50OyB9CiAgICAgdm9pZCBzZXRXZWJDb25zb2xlQWdlbnQoV2ViQ29uc29sZUFnZW50KiBh
Z2VudCkgeyBtX3dlYkNvbnNvbGVBZ2VudCA9IGFnZW50OyB9CiAKLSAgICBJbnNwZWN0b3JET01B
Z2VudCogaW5zcGVjdG9yRE9NQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckRPTUFn
ZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JET01BZ2VudCog
YWdlbnQpIHsgbV9pbnNwZWN0b3JET01BZ2VudCA9IGFnZW50OyB9CisgICAgRE9NQWdlbnQqIGRv
bUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb21BZ2VudDsgfQorICAgIHZvaWQgc2V0RE9NQWdl
bnQoRE9NQWdlbnQqIGFnZW50KSB7IG1fZG9tQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudCogaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zcGVjdG9yUmVzb3VyY2VBZ2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvclJlc291
cmNlQWdlbnQgPSBhZ2VudDsgfQorICAgIFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQoKSBj
b25zdCB7IHJldHVybiBtX3Jlc291cmNlQWdlbnQ7IH0KKyAgICB2b2lkIHNldFJlc291cmNlQWdl
bnQoUmVzb3VyY2VBZ2VudCogYWdlbnQpIHsgbV9yZXNvdXJjZUFnZW50ID0gYWdlbnQ7IH0KIAog
ICAgIFBhZ2VSdW50aW1lQWdlbnQqIHBhZ2VSdW50aW1lQWdlbnQoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2VSdW50aW1lQWdlbnQ7IH0KICAgICB2b2lkIHNldFBhZ2VSdW50aW1lQWdlbnQoUGFnZVJ1
bnRpbWVBZ2VudCogYWdlbnQpIHsgbV9wYWdlUnVudGltZUFnZW50ID0gYWdlbnQ7IH0KQEAgLTEw
MSw0MCArMTAxLDQwIEBAIHB1YmxpYzoKICAgICBXb3JrZXJSdW50aW1lQWdlbnQqIHdvcmtlclJ1
bnRpbWVBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyUnVudGltZUFnZW50OyB9CiAgICAg
dm9pZCBzZXRXb3JrZXJSdW50aW1lQWdlbnQoV29ya2VyUnVudGltZUFnZW50KiBhZ2VudCkgeyBt
X3dvcmtlclJ1bnRpbWVBZ2VudCA9IGFnZW50OyB9CiAKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50KiBpbnNwZWN0b3JUaW1lbGluZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JU
aW1lbGluZUFnZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JUaW1lbGluZUFnZW50KEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yVGltZWxpbmVBZ2VudCA9IGFn
ZW50OyB9CisgICAgVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGltZWxpbmVBZ2VudDsgfQorICAgIHZvaWQgc2V0VGltZWxpbmVBZ2VudChUaW1lbGluZUFn
ZW50KiBhZ2VudCkgeyBtX3RpbWVsaW5lQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogcGVyc2lzdGVudEluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSBjb25zdCB7
IHJldHVybiBtX3BlcnNpc3RlbnRJbnNwZWN0b3JUaW1lbGluZUFnZW50OyB9Ci0gICAgdm9pZCBz
ZXRQZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxpbmVBZ2VudChJbnNwZWN0b3JUaW1lbGluZUFnZW50
KiBhZ2VudCkgeyBtX3BlcnNpc3RlbnRJbnNwZWN0b3JUaW1lbGluZUFnZW50ID0gYWdlbnQ7IH0K
KyAgICBUaW1lbGluZUFnZW50KiBwZXJzaXN0ZW50VGltZWxpbmVBZ2VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGVyc2lzdGVudFRpbWVsaW5lQWdlbnQ7IH0KKyAgICB2b2lkIHNldFBlcnNpc3RlbnRU
aW1lbGluZUFnZW50KFRpbWVsaW5lQWdlbnQqIGFnZW50KSB7IG1fcGVyc2lzdGVudFRpbWVsaW5l
QWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBpbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JET01TdG9yYWdlQWdlbnQgPSBhZ2Vu
dDsgfQorICAgIERPTVN0b3JhZ2VBZ2VudCogZG9tU3RvcmFnZUFnZW50KCkgY29uc3QgeyByZXR1
cm4gbV9kb21TdG9yYWdlQWdlbnQ7IH0KKyAgICB2b2lkIHNldERPTVN0b3JhZ2VBZ2VudChET01T
dG9yYWdlQWdlbnQqIGFnZW50KSB7IG1fZG9tU3RvcmFnZUFnZW50ID0gYWdlbnQ7IH0KIAogI2lm
IEVOQUJMRShXRUJfUkVQTEFZKQotICAgIEluc3BlY3RvclJlcGxheUFnZW50KiBpbnNwZWN0b3JS
ZXBsYXlBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUmVwbGF5QWdlbnQ7IH0KLSAg
ICB2b2lkIHNldEluc3BlY3RvclJlcGxheUFnZW50KEluc3BlY3RvclJlcGxheUFnZW50KiBhZ2Vu
dCkgeyBtX2luc3BlY3RvclJlcGxheUFnZW50ID0gYWdlbnQ7IH0KKyAgICBSZXBsYXlBZ2VudCog
cmVwbGF5QWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheUFnZW50OyB9CisgICAgdm9pZCBz
ZXRSZXBsYXlBZ2VudChSZXBsYXlBZ2VudCogYWdlbnQpIHsgbV9yZXBsYXlBZ2VudCA9IGFnZW50
OyB9CiAjZW5kaWYKIAotICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGluc3BlY3RvckRhdGFi
YXNlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckRhdGFiYXNlQWdlbnQ7IH0KLSAg
ICB2b2lkIHNldEluc3BlY3RvckRhdGFiYXNlQWdlbnQoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCog
YWdlbnQpIHsgbV9pbnNwZWN0b3JEYXRhYmFzZUFnZW50ID0gYWdlbnQ7IH0KKyAgICBEYXRhYmFz
ZUFnZW50KiBkYXRhYmFzZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZUFnZW50OyB9
CisgICAgdm9pZCBzZXREYXRhYmFzZUFnZW50KERhdGFiYXNlQWdlbnQqIGFnZW50KSB7IG1fZGF0
YWJhc2VBZ2VudCA9IGFnZW50OyB9CiAKLSAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQqIGluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhZ2VudCkg
eyBtX2luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9IGFnZW50OyB9CisgICAgQXBwbGlj
YXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSBjb25zdCB7IHJldHVybiBt
X2FwcGxpY2F0aW9uQ2FjaGVBZ2VudDsgfQorICAgIHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZUFn
ZW50KEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYWdlbnQpIHsgbV9hcHBsaWNhdGlvbkNhY2hlQWdl
bnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBp
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3Rvcjo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JEZWJ1Z2dlckFnZW50
ID0gYWdlbnQ7IH0KKyAgICBJbnNwZWN0b3I6OkRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQo
KSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQWdlbnQ7IH0KKyAgICB2b2lkIHNldERlYnVnZ2Vy
QWdlbnQoSW5zcGVjdG9yOjpEZWJ1Z2dlckFnZW50KiBhZ2VudCkgeyBtX2RlYnVnZ2VyQWdlbnQg
PSBhZ2VudDsgfQogCiAgICAgUGFnZURlYnVnZ2VyQWdlbnQqIHBhZ2VEZWJ1Z2dlckFnZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlRGVidWdnZXJBZ2VudDsgfQogICAgIHZvaWQgc2V0UGFnZURl
YnVnZ2VyQWdlbnQoUGFnZURlYnVnZ2VyQWdlbnQqIGFnZW50KSB7IG1fcGFnZURlYnVnZ2VyQWdl
bnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogaW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudChJbnNwZWN0b3JE
T01EZWJ1Z2dlckFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQgPSBh
Z2VudDsgfQorICAgIERPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQoKSBjb25zdCB7
IHJldHVybiBtX2RvbURlYnVnZ2VyQWdlbnQ7IH0KKyAgICB2b2lkIHNldERPTURlYnVnZ2VyQWdl
bnQoRE9NRGVidWdnZXJBZ2VudCogYWdlbnQpIHsgbV9kb21EZWJ1Z2dlckFnZW50ID0gYWdlbnQ7
IH0KIAotICAgIEluc3BlY3RvcldvcmtlckFnZW50KiBpbnNwZWN0b3JXb3JrZXJBZ2VudCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yV29ya2VyQWdlbnQ7IH0KLSAgICB2b2lkIHNldEluc3Bl
Y3RvcldvcmtlckFnZW50KEluc3BlY3RvcldvcmtlckFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3Rv
cldvcmtlckFnZW50ID0gYWdlbnQ7IH0KKyAgICBXb3JrZXJBZ2VudCogd29ya2VyQWdlbnQoKSBj
b25zdCB7IHJldHVybiBtX3dvcmtlckFnZW50OyB9CisgICAgdm9pZCBzZXRXb3JrZXJBZ2VudChX
b3JrZXJBZ2VudCogYWdlbnQpIHsgbV93b3JrZXJBZ2VudCA9IGFnZW50OyB9CiAKLSAgICBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudCogaW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2luc3BlY3RvckxheWVyVHJlZUFnZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JM
YXllclRyZWVBZ2VudChJbnNwZWN0b3JMYXllclRyZWVBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0
b3JMYXllclRyZWVBZ2VudCA9IGFnZW50OyB9CisgICAgTGF5ZXJUcmVlQWdlbnQqIGxheWVyVHJl
ZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVBZ2VudDsgfQorICAgIHZvaWQgc2V0
TGF5ZXJUcmVlQWdlbnQoTGF5ZXJUcmVlQWdlbnQqIGFnZW50KSB7IG1fbGF5ZXJUcmVlQWdlbnQg
PSBhZ2VudDsgfQogCiBwcml2YXRlOgogICAgIEluc3RydW1lbnRpbmdBZ2VudHMoSW5zcGVjdG9y
OjpJbnNwZWN0b3JFbnZpcm9ubWVudCYpOwpAQCAtMTQyLDI2ICsxNDIsMjYgQEAgcHJpdmF0ZToK
ICAgICBJbnNwZWN0b3I6Okluc3BlY3RvckVudmlyb25tZW50JiBtX2Vudmlyb25tZW50OwogCiAg
ICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKLSAgICBJbnNw
ZWN0b3JQYWdlQWdlbnQqIG1faW5zcGVjdG9yUGFnZUFnZW50OwotICAgIEluc3BlY3RvckNTU0Fn
ZW50KiBtX2luc3BlY3RvckNTU0FnZW50OwotICAgIEluc3BlY3RvckxheWVyVHJlZUFnZW50KiBt
X2luc3BlY3RvckxheWVyVHJlZUFnZW50OworICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7Cisg
ICAgQ1NTQWdlbnQqIG1fY3NzQWdlbnQ7CisgICAgTGF5ZXJUcmVlQWdlbnQqIG1fbGF5ZXJUcmVl
QWdlbnQ7CiAgICAgV2ViQ29uc29sZUFnZW50KiBtX3dlYkNvbnNvbGVBZ2VudDsKLSAgICBJbnNw
ZWN0b3JET01BZ2VudCogbV9pbnNwZWN0b3JET01BZ2VudDsKLSAgICBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50KiBtX2luc3BlY3RvclJlc291cmNlQWdlbnQ7CisgICAgRE9NQWdlbnQqIG1fZG9tQWdl
bnQ7CisgICAgUmVzb3VyY2VBZ2VudCogbV9yZXNvdXJjZUFnZW50OwogICAgIFBhZ2VSdW50aW1l
QWdlbnQqIG1fcGFnZVJ1bnRpbWVBZ2VudDsKICAgICBXb3JrZXJSdW50aW1lQWdlbnQqIG1fd29y
a2VyUnVudGltZUFnZW50OwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIG1faW5zcGVjdG9y
VGltZWxpbmVBZ2VudDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiBtX3BlcnNpc3RlbnRJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OwotICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogbV9p
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ7CisgICAgVGltZWxpbmVBZ2VudCogbV90aW1lbGluZUFn
ZW50OworICAgIFRpbWVsaW5lQWdlbnQqIG1fcGVyc2lzdGVudFRpbWVsaW5lQWdlbnQ7CisgICAg
RE9NU3RvcmFnZUFnZW50KiBtX2RvbVN0b3JhZ2VBZ2VudDsKICNpZiBFTkFCTEUoV0VCX1JFUExB
WSkKLSAgICBJbnNwZWN0b3JSZXBsYXlBZ2VudCogbV9pbnNwZWN0b3JSZXBsYXlBZ2VudDsKKyAg
ICBSZXBsYXlBZ2VudCogbV9yZXBsYXlBZ2VudDsKICNlbmRpZgotICAgIEluc3BlY3RvckRhdGFi
YXNlQWdlbnQqIG1faW5zcGVjdG9yRGF0YWJhc2VBZ2VudDsKLSAgICBJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQqIG1faW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OwotICAgIElu
c3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9pbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OworICAgIERhdGFiYXNlQWdlbnQqIG1fZGF0YWJhc2VBZ2VudDsKKyAgICBBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQqIG1fYXBwbGljYXRpb25DYWNoZUFnZW50OworICAgIEluc3BlY3Rvcjo6RGVidWdn
ZXJBZ2VudCogbV9kZWJ1Z2dlckFnZW50OwogICAgIFBhZ2VEZWJ1Z2dlckFnZW50KiBtX3BhZ2VE
ZWJ1Z2dlckFnZW50OwotICAgIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIG1faW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDsKLSAgICBJbnNwZWN0b3JXb3JrZXJBZ2VudCogbV9pbnNwZWN0b3JX
b3JrZXJBZ2VudDsKKyAgICBET01EZWJ1Z2dlckFnZW50KiBtX2RvbURlYnVnZ2VyQWdlbnQ7Cisg
ICAgV29ya2VyQWdlbnQqIG1fd29ya2VyQWdlbnQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcAppbmRleCA1MWVjNWYyOWE2
NmYwMzc4NjRkMGMwNWM5NTU4ZDY5OWViZTA0MTBmLi4yZWQ5MjVmYTdlOGQ4YjFjMGY0YTM4Y2U2
NjM5NjYxY2IwNDdhYjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0
d29ya1Jlc291cmNlc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3
b3JrUmVzb3VyY2VzRGF0YS5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgTmV0d29ya1Jlc291cmNlc0Rh
dGE6OlJlc291cmNlRGF0YTo6UmVzb3VyY2VEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdAogICAgICwgbV9sb2FkZXJJZChsb2FkZXJJZCkKICAgICAsIG1fYmFzZTY0RW5jb2RlZChm
YWxzZSkKICAgICAsIG1faXNDb250ZW50RXZpY3RlZChmYWxzZSkKLSAgICAsIG1fdHlwZShJbnNw
ZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpCisgICAgLCBtX3R5cGUoUGFnZUFnZW50OjpP
dGhlclJlc291cmNlKQogICAgICwgbV9jYWNoZWRSZXNvdXJjZShudWxscHRyKQogewogfQpAQCAt
MTc5LDcgKzE3OSw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlc0RhdGE6OnJlc3BvbnNlUmVjZWl2
ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluCiAgICAgcmVzb3VyY2VEYXRh
LT5zZXRIVFRQU3RhdHVzQ29kZShyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsKIH0KIAotdm9p
ZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6c2V0UmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYgcmVx
dWVzdElkLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSB0eXBlKQordm9pZCBOZXR3
b3JrUmVzb3VyY2VzRGF0YTo6c2V0UmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElk
LCBQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSB0eXBlKQogewogICAgIFJlc291cmNlRGF0YSogcmVz
b3VyY2VEYXRhID0gcmVzb3VyY2VEYXRhRm9yUmVxdWVzdElkKHJlcXVlc3RJZCk7CiAgICAgaWYg
KCFyZXNvdXJjZURhdGEpCkBAIC0xODcsMTEgKzE4NywxMSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJj
ZXNEYXRhOjpzZXRSZXNvdXJjZVR5cGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIEluc3BlY3Rv
clBhZwogICAgIHJlc291cmNlRGF0YS0+c2V0VHlwZSh0eXBlKTsKIH0KIAotSW5zcGVjdG9yUGFn
ZUFnZW50OjpSZXNvdXJjZVR5cGUgTmV0d29ya1Jlc291cmNlc0RhdGE6OnJlc291cmNlVHlwZShj
b25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKK1BhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIE5ldHdvcmtS
ZXNvdXJjZXNEYXRhOjpyZXNvdXJjZVR5cGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpCiB7CiAg
ICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURhdGEgPSByZXNvdXJjZURhdGFGb3JSZXF1ZXN0SWQo
cmVxdWVzdElkKTsKICAgICBpZiAoIXJlc291cmNlRGF0YSkKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZTsKKyAgICAgICAgcmV0dXJuIFBhZ2VBZ2VudDo6
T3RoZXJSZXNvdXJjZTsKICAgICByZXR1cm4gcmVzb3VyY2VEYXRhLT50eXBlKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmgKaW5kZXgg
YjI2Y2I4Y2U5ZDQ3M2Y2Y2EzZDM2ODdjYzY5NTM3YzA5NTUyMGRjZi4uZmY2ZWNkNTI3MjAwOWFh
NWY1NzZkMTg0OTc5ZDc4MDJkZDg1NDc3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmgKQEAgLTk2LDggKzk2LDggQEAgcHVibGljOgogICAg
ICAgICBib29sIGlzQ29udGVudEV2aWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ29udGVudEV2
aWN0ZWQ7IH0KICAgICAgICAgdW5zaWduZWQgZXZpY3RDb250ZW50KCk7CiAKLSAgICAgICAgSW5z
cGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotICAgICAgICB2b2lkIHNldFR5cGUoSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5
cGUgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9CisgICAgICAgIFBhZ2VBZ2VudDo6UmVzb3VyY2VU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAgICAgdm9pZCBzZXRUeXBl
KFBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQogCiAgICAg
ICAgIGludCBodHRwU3RhdHVzQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7
IH0KICAgICAgICAgdm9pZCBzZXRIVFRQU3RhdHVzQ29kZShpbnQgaHR0cFN0YXR1c0NvZGUpIHsg
bV9odHRwU3RhdHVzQ29kZSA9IGh0dHBTdGF0dXNDb2RlOyB9CkBAIC0xMzIsNyArMTMyLDcgQEAg
cHVibGljOgogICAgICAgICBib29sIG1fYmFzZTY0RW5jb2RlZDsKICAgICAgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV9kYXRhQnVmZmVyOwogICAgICAgICBib29sIG1faXNDb250ZW50RXZpY3Rl
ZDsKLSAgICAgICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgbV90eXBlOworICAg
ICAgICBQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBtX3R5cGU7CiAgICAgICAgIGludCBtX2h0dHBT
dGF0dXNDb2RlOwogCiAgICAgICAgIFN0cmluZyBtX3RleHRFbmNvZGluZ05hbWU7CkBAIC0xNDgs
OCArMTQ4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNvdXJjZUNyZWF0ZWQoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQpOwogICAgIHZvaWQgcmVzcG9u
c2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZVR5cGUoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlKTsK
LSAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQpOworICAgIHZvaWQgc2V0UmVzb3VyY2VUeXBlKGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSk7CisgICAgUGFnZUFnZW50OjpS
ZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICB2
b2lkIHNldFJlc291cmNlQ29udGVudChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBtYXli
ZUFkZFJlc291cmNlRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGRhdGFMZW5ndGgpOwogICAgIHZvaWQgbWF5YmVEZWNvZGVEYXRhVG9Db250ZW50
KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Q
YWdlQ29uc29sZUFnZW50LmNwcAppbmRleCBlNzU5YWE4MDU3Njk4NTBlM2YzOTU5ZmMzNGMwYzVk
NjUxMjdkYzE3Li4xMzI4YzdlOTNjN2QwNTQ0NzRlY2QxYTUzZjhiNmVhYTFjYjA3ZjkzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZUNvbnNvbGVBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VDb25zb2xlQWdlbnQuY3BwCkBAIC00MCwx
NSArNDAsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYWdlQ29uc29sZUFnZW50OjpQYWdlQ29uc29sZUFnZW50KFdlYkluamVjdGVkU2Ny
aXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JET01BZ2VudCogZG9t
QWdlbnQpCitQYWdlQ29uc29sZUFnZW50OjpQYWdlQ29uc29sZUFnZW50KFdlYkluamVjdGVkU2Ny
aXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBET01BZ2VudCogZG9tQWdlbnQpCiAg
ICAgOiBXZWJDb25zb2xlQWdlbnQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgICwgbV9pbnNw
ZWN0b3JET01BZ2VudChkb21BZ2VudCkKKyAgICAsIG1fZG9tQWdlbnQoZG9tQWdlbnQpCiB7CiB9
CiAKIHZvaWQgUGFnZUNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcpCiB7Ci0gICAgbV9pbnNwZWN0b3JET01BZ2VudC0+cmVsZWFzZURhbmdsaW5nTm9k
ZXMoKTsKKyAgICBtX2RvbUFnZW50LT5yZWxlYXNlRGFuZ2xpbmdOb2RlcygpOwogCiAgICAgV2Vi
Q29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKGVycm9yU3RyaW5nKTsKIH0KQEAgLTU4LDcgKzU4
LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IEluc3BlY3RhYmxlTm9kZShOb2RlKiBub2RlKSA6
IG1fbm9kZShub2RlKSB7IH0KICAgICB2aXJ0dWFsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGdl
dChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVlKHN0YXRlLCBtX25vZGUuZ2V0KCkp
OworICAgICAgICByZXR1cm4gRE9NQWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVlKHN0YXRlLCBtX25v
ZGUuZ2V0KCkpOwogICAgIH0KIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKQEAg
LTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBQYWdlQ29uc29sZUFnZW50OjphZGRJbnNw
ZWN0ZWROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKIHsKLSAgICBO
b2RlKiBub2RlID0gbV9pbnNwZWN0b3JET01BZ2VudC0+bm9kZUZvcklkKG5vZGVJZCk7CisgICAg
Tm9kZSogbm9kZSA9IG1fZG9tQWdlbnQtPm5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9k
ZSB8fCBub2RlLT5pc0luU2hhZG93VHJlZSgpKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVND
SUlMaXRlcmFsKCJub2RlSWQgaXMgbm90IHZhbGlkIik7CiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZUNvbnNvbGVBZ2VudC5oCmluZGV4IDM2YzMwYzI0ZDgy
NjNiODAwZjNmYjI0OWYwNjlhNjViZTk0OWEwMmIuLmRlZTI5Y2ZiOTI3ZDM5M2Y3M2Q0MzEzOTJh
ZjA4NWI3MDAwYzAwNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
Q29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VDb25zb2xl
QWdlbnQuaApAQCAtMzUsMTMgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgSW5zcGVjdG9yRE9NQWdlbnQ7CitjbGFzcyBET01BZ2VudDsKIAogY2xhc3MgUGFnZUNvbnNv
bGVBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBhZ2VDb25zb2xlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIFBhZ2VDb25zb2xlQWdlbnQoV2ViSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiwgSW5zcGVjdG9yRE9NQWdlbnQqKTsKKyAgICBQYWdlQ29uc29sZUFnZW50KFdlYkluamVjdGVk
U2NyaXB0TWFuYWdlciosIERPTUFnZW50Kik7CiAgICAgdmlydHVhbCB+UGFnZUNvbnNvbGVBZ2Vu
dCgpIHsgfQogCiBwcml2YXRlOgpAQCAtNDksNyArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGFkZEluc3BlY3RlZE5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKSBvdmVycmlk
ZTsKIAotICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2luc3BlY3RvckRPTUFnZW50OworICAgIERP
TUFnZW50KiBtX2RvbUFnZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggNWU1YWRk
MjljMmIyNTljMmE1NTk3Zjc4ZjhjNDQ4NDViYjIyZjQ0ZC4uODE1YmQwMzI2ZWE1ZDMwZWFmYTFh
ZjdiN2Q1MjQzMjc2NDBjOGI5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VE
ZWJ1Z2dlckFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdl
QWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKK1BhZ2VEZWJ1Z2dl
ckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVk
U2NyaXB0TWFuYWdlciwgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
UGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBX
ZWJEZWJ1Z2dlckFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlciwgaW5zdHJ1bWVudGluZ0FnZW50
cykKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1fb3ZlcmxheShvdmVybGF5
KQpAQCAtODYsNyArODYsNyBAQCBTdHJpbmcgUGFnZURlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVS
TEZvclNjcmlwdChjb25zdCBTY3JpcHQmIHNjcmlwdCkKICAgICAgICAgfQogICAgIH0KIAotICAg
IHJldHVybiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoc2Ny
aXB0KTsKKyAgICByZXR1cm4gRGVidWdnZXJBZ2VudDo6c291cmNlTWFwVVJMRm9yU2NyaXB0KHNj
cmlwdCk7CiB9CiAKIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OnN0YXJ0TGlzdGVuaW5nU2NyaXB0
RGVidWdTZXJ2ZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VE
ZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdl
bnQuaAppbmRleCA1NDlmN2QzZmM2ZWI5MWYwOWYwM2Y3N2I1NWIxZmE1ODY1MGRmYTRmLi42NDQy
Y2E5ZWQ2OTA1MTAxNzBmZGQ5NGQ5NGYxNTY1MTkyZDMzMjhjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaApAQCAtMzcsMTYgKzM3LDE2IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3Rvck92ZXJsYXk7Ci1jbGFzcyBJbnNwZWN0
b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgUGFnZTsKK2Ns
YXNzIFBhZ2VBZ2VudDsKIGNsYXNzIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjsKIAogY2xhc3MgUGFn
ZURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUGFnZURlYnVnZ2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIFBhZ2VEZWJ1Z2dlckFnZW50KEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclBhZ2VB
Z2VudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKKyAgICBQYWdlRGVidWdnZXJBZ2VudChJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlQWdl
bnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAgICAgdmlydHVhbCB+UGFnZURlYnVnZ2VyQWdlbnQo
KSB7IH0KIAogICAgIHZvaWQgZGlkQ2xlYXJNYWluRnJhbWVXaW5kb3dPYmplY3QoKTsKQEAgLTcw
LDcgKzcwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRp
b25Db250ZXh0SWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRPdmVybGF5TWVzc2Fn
ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyopIG92ZXJyaWRlOwogCi0gICAgSW5zcGVjdG9y
UGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAg
IEluc3BlY3Rvck92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBQYWdlU2NyaXB0RGVidWdTZXJ2ZXIg
bV9zY3JpcHREZWJ1Z1NlcnZlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZVJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggZTEyM2MwYjM1OWQ2NzgyZGIyNDcwMmRmMDdmODI4Mjhl
MWM3MWU0NC4uYzk5YTQ3MjBmN2U4NzhiMmYwM2IyNzkyNjQwYTI0OWU2ZjgyOGU1OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmNwcApAQCAtNTEsOCAr
NTEsOCBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBhZ2VSdW50aW1lQWdlbnQ6OlBhZ2VSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvclBhZ2VBZ2Vu
dCogcGFnZUFnZW50KQotICAgIDogSW5zcGVjdG9yUnVudGltZUFnZW50KGluamVjdGVkU2NyaXB0
TWFuYWdlcikKK1BhZ2VSdW50aW1lQWdlbnQ6OlBhZ2VSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIFBhZ2UqIHBhZ2UsIFBhZ2VBZ2VudCog
cGFnZUFnZW50KQorICAgIDogUnVudGltZUFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAg
ICAsIG1faW5zcGVjdGVkUGFnZShwYWdlKQogICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQog
ICAgICwgbV9tYWluV29ybGRDb250ZXh0Q3JlYXRlZChmYWxzZSkKQEAgLTczLDcgKzczLDcgQEAg
dm9pZCBQYWdlUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24KICAgICBTdHJpbmcgdW51c2VkOwogICAgIGRpc2FibGUo
dW51c2VkKTsKIAotICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQocmVhc29uKTsKKyAgICBSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKHJlYXNvbik7CiB9CiAKIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZW5hYmxl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBQYWdlUnVu
dGltZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIGlmIChlbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5h
YmxlKGVycm9yU3RyaW5nKTsKKyAgICBSdW50aW1lQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7
CiAKICAgICAvLyBPbmx5IHJlcG9ydCBleGlzdGluZyBjb250ZXh0cyBpZiB0aGUgcGFnZSBkaWQg
Y29tbWl0IGxvYWQsIG90aGVyd2lzZSB3ZSBtYXkKICAgICAvLyB1bmludGVudGlvbmFsbHkgaW5p
dGlhbGl6ZSBjb250ZXh0cyBpbiB0aGUgZnJhbWVzIHdoaWNoIG1heSB0cmlnZ2VyIHNvbWUgbGlz
dGVuZXJzCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7
CisgICAgUnVudGltZUFnZW50OjpkaXNhYmxlKGVycm9yU3RyaW5nKTsKIH0KIAogdm9pZCBQYWdl
UnVudGltZUFnZW50OjpkaWRDcmVhdGVNYWluV29ybGRDb250ZXh0KEZyYW1lJiBmcmFtZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5oCmluZGV4IGU3YjJjMjRk
OGQwZTU0NDljZTcyZjExOTRjOGQyMzRiNzMwZmFhZjkuLmE0MGE1YTQwNDFlOGJjZTQxNGEwNGRh
M2FmMTYyNmJhNjFjMGRmNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Q
YWdlUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VSdW50
aW1lQWdlbnQuaApAQCAtNDQsMTYgKzQ0LDE2IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdl
cjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBj
bGFzcyBGcmFtZTsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQYWdlQWdlbnQ7CiBjbGFzcyBTZWN1cml0
eU9yaWdpbjsKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBQYWdlUnVudGlt
ZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50IHsK
K2NsYXNzIFBhZ2VSdW50aW1lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpSdW50aW1l
QWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFBhZ2VS
dW50aW1lQWdlbnQoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBQYWdlKiwgSW5z
cGVjdG9yUGFnZUFnZW50Kik7CisgICAgUGFnZVJ1bnRpbWVBZ2VudChJbnNwZWN0b3I6OkluamVj
dGVkU2NyaXB0TWFuYWdlciosIFBhZ2UqLCBQYWdlQWdlbnQqKTsKICAgICB2aXJ0dWFsIH5QYWdl
UnVudGltZUFnZW50KCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopIG92ZXJyaWRlOwpAQCAtNzMsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgbm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkV4ZWNT
dGF0ZSosIFNlY3VyaXR5T3JpZ2luKiwgYm9vbCBpc1BhZ2VDb250ZXh0KTsKIAogICAgIFBhZ2Uq
IG1faW5zcGVjdGVkUGFnZTsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50Owor
ICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
cjo6UnVudGltZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwogICAgIGJvb2wgbV9tYWluV29ybGRDb250ZXh0Q3JlYXRlZDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJDb25zb2xlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5jcHAKaW5kZXggNDcwMDU4ZWU0M2U5MmI5
NTI1MDQ5MWU5YThhZjUzZmU2MjQ1MjY4YS4uMmY0NzI1N2QzNjA3NDZmNjRiMjk5OWM5ODYxYTc1
YjBjODI5NDAxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkNvbnNv
bGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkNvbnNvbGVBZ2Vu
dC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogV2ViQ29uc29sZUFnZW50OjpXZWJDb25zb2xlQWdlbnQoV2ViSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0
b3JDb25zb2xlQWdlbnQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgIDogQ29uc29sZUFnZW50
KGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1fbW9uaXRvcmluZ1hIUkVuYWJsZWQoZmFs
c2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViQ29uc29s
ZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViQ29uc29sZUFnZW50LmgKaW5k
ZXggY2FmMWIxZGVhNTQxMTkyOTU5YjcxMmEzZDBiZjZlZDljMTAxZjk5ZS4uMzY3ZTI3ODUzNmI3
NzBhYWIwZjQ2MjY2YzAzNWU4ZGRlMDQ2ZDU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9XZWJDb25zb2xlQWdlbnQuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwogY2xhc3MgV2ViSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CiAKLWNsYXNzIFdlYkNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Oklu
c3BlY3RvckNvbnNvbGVBZ2VudCB7CitjbGFzcyBXZWJDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5z
cGVjdG9yOjpDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkNvbnNv
bGVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggZGQ2OWU1ZjNm
MTQyNGZjOGMzZTU0NmRlZTJhMmY3ZjliNjVkOTkxNi4uNzVhMGY1YjE3NjkzYmRhMGRmNzU4Yjg4
ZTZiMTIwNWQwMjNlZmU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dl
YkRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJEZWJ1
Z2dlckFnZW50LmNwcApAQCAtMzMsMjEgKzMzLDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdlYkRlYnVnZ2VyQWdlbnQ6OldlYkRlYnVnZ2Vy
QWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCi0gICAgOiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICA6IERlYnVnZ2VyQWdlbnQoaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9pbnN0cnVtZW50aW5nQWdlbnRzKGluc3RydW1l
bnRpbmdBZ2VudHMpCiB7CiB9CiAKIHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkKIHsK
LSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKTsKLSAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMtPnNldEluc3BlY3RvckRlYnVnZ2VyQWdlbnQodGhpcyk7CisgICAgRGVidWdnZXJB
Z2VudDo6ZW5hYmxlKCk7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXREZWJ1Z2dlckFn
ZW50KHRoaXMpOwogfQogCiB2b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0Jl
aW5nRGVzdHJveWVkKQogewotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNC
ZWluZ0Rlc3Ryb3llZCk7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KG51bGxwdHIpOworICAgIERlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNCZWlu
Z0Rlc3Ryb3llZCk7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXREZWJ1Z2dlckFnZW50
KG51bGxwdHIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1dlYkRlYnVnZ2VyQWdlbnQuaAppbmRleCAwNzQxNjYyMTYxZGNjMTU1YmQxMjkx
ZGViNmE4NTM0ZWM0YjkzZGJkLi4yNWFlYjEyNTBlZWY0MzgwMjQ0NGY1NThiYmU1ZGNjZTdiNjUx
MWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViRGVidWdnZXJBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJEZWJ1Z2dlckFnZW50LmgKQEAg
LTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW5zdHJ1bWVudGluZ0Fn
ZW50czsKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBXZWJEZWJ1Z2dlckFn
ZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCB7CitjbGFzcyBX
ZWJEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6RGVidWdnZXJBZ2VudCB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViRGVidWdnZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZjFmZTQxMDA1YWRmZWE0YmMw
MWUwYWQ1Yjc3ZjU4ZjBiOTZjMjcwZC4uOGVkNjM4NTFjYmZiZGIzZWE0YzIwMGZjYTJiY2Q4MzI3
ZDc2N2JmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtOTIsNyArOTIsNyBAQCBXb3JrZXJJbnNwZWN0b3JD
b250cm9sbGVyOjpXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKFdvcmtlckdsb2JhbFNjb3BlJiB3
b3JrZXJHbAogICAgIG1fcnVudGltZUFnZW50LT5zZXRTY3JpcHREZWJ1Z1NlcnZlcigmZGVidWdn
ZXJBZ2VudC0+c2NyaXB0RGVidWdTZXJ2ZXIoKSk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKFdURjo6
bW92ZShkZWJ1Z2dlckFnZW50KSk7CiAKLSAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3Vu
aXF1ZTxJbnNwZWN0b3JUaW1lbGluZUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCks
IG51bGxwdHIsIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Oldvcmtlckluc3BlY3RvciwgbnVsbHB0
cikpOworICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFRpbWVsaW5lQWdlbnQ+
KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbnVsbHB0ciwgVGltZWxpbmVBZ2VudDo6V29y
a2VySW5zcGVjdG9yLCBudWxscHRyKSk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKFdURjo6bW92ZShj
b25zb2xlQWdlbnQpKTsKIAogICAgIGlmIChDb21tYW5kTGluZUFQSUhvc3QqIGNvbW1hbmRMaW5l
QVBJSG9zdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5jb21tYW5kTGluZUFQSUhvc3QoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcApp
bmRleCA5ZWEyODVjNmVkZTJkM2NmMjVhNWI2Mjg4ZWE4MzlmY2IzZTc2YmIwLi5mZjUwMDdiZjA1
MjljMGM2ZDNlODc0NTlmZWFiYWY3NGQzYzg5Y2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXb3JrZXJSdW50aW1l
QWdlbnQ6OldvcmtlclJ1bnRpbWVBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVk
U2NyaXB0TWFuYWdlciwgV29ya2VyR2xvYmFsU2NvcGUqIHdvcmtlckdsb2JhbFNjb3BlKQotICAg
IDogSW5zcGVjdG9yUnVudGltZUFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICA6IFJ1
bnRpbWVBZ2VudChpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX3dvcmtlckdsb2JhbFNj
b3BlKHdvcmtlckdsb2JhbFNjb3BlKQogICAgICwgbV9wYXVzZWQoZmFsc2UpCiB7CkBAIC02MSw3
ICs2MSw3IEBAIHZvaWQgV29ya2VyUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzCiB7CiAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci5jbGVhcigpOwogCi0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChyZWFzb24pOworICAgIFJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQocmVhc29uKTsKIH0KIAogSW5qZWN0ZWRTY3JpcHQgV29ya2VyUnVu
dGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9X
b3JrZXJSdW50aW1lQWdlbnQuaAppbmRleCA4NzhiZGQyNDhiMDhiZTFjOGFmNGVmNDU3MjczMzRl
NzA4YTkwYzNhLi5mMWZkOGU0OWU3NjYxZTQ2N2I3Njc5NDc3YjgwNTk0OTNmOGE2MWRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5oCkBAIC0zOCw3
ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdvcmtlckdsb2JhbFNjb3BlOwog
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIFdvcmtlclJ1bnRpbWVBZ2VudCBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudCB7CitjbGFzcyBX
b3JrZXJSdW50aW1lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpSdW50aW1lQWdlbnQg
ewogcHVibGljOgogICAgIFdvcmtlclJ1bnRpbWVBZ2VudChJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0TWFuYWdlciosIFdvcmtlckdsb2JhbFNjb3BlKik7CiAgICAgdmlydHVhbCB+V29ya2VyUnVu
dGltZUFnZW50KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5
Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuaApp
bmRleCAwNjVhNDk0YTEyOTBiYTJlOTc1MWNjYmQ0YmFhMmEwYmNjZGZiMzA5Li5mNWFkZWI5NTU1
MDU1Yzk1ZWIxMWRjMmZkMTIyMTNmYzE1NTk1MGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9S
ZXBsYXlDb250cm9sbGVyLmgKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHN3aXRjaFNlc3Npb24oUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOwogCi0gICAgLy8gSW5zcGVj
dG9yUmVwbGF5QWdlbnQgbm90aWZpY2F0aW9ucy4KKyAgICAvLyBSZXBsYXlBZ2VudCBub3RpZmlj
YXRpb25zLgogICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoRG9jdW1lbnRMb2FkZXIqKTsKICAgICB2
b2lkIGZyYW1lRGV0YWNoZWQoRnJhbWUmKTsKICAgICB2b2lkIHdpbGxEaXNwYXRjaEV2ZW50KGNv
bnN0IEV2ZW50JiwgRnJhbWUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCAxMGJhM2NkYTY2MmUzMGU3ZTFkMTc1ZGRiOWI5N2M4NGI5OWMyOWJlLi4wY2FiZThiNjMxNjNj
YzNlZjE2Yzg1YjA3ZjczZjYyNDllYWU3ZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC0xNTE3LDcgKzE1MTcsNyBAQCBWZWN0b3I8U3RyaW5nPiBJbnRlcm5hbHM6OmNv
bnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMoKSBjb25zdAogICAgIGlmICghaW5zdHJ1bWVudGlu
Z0FnZW50cykKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKLSAgICBJbnNwZWN0
b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPndlYkNv
bnNvbGVBZ2VudCgpOworICAgIENvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy0+d2ViQ29uc29sZUFnZW50KCk7CiAgICAgaWYgKCFjb25zb2xlQWdlbnQpCiAg
ICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247521</attachid>
            <date>2015-02-27 10:49:50 -0800</date>
            <delta_ts>2019-10-14 12:29:19 -0700</delta_ts>
            <desc>Proposed Fix (rebased)</desc>
            <filename>bug-141608-20150227104935.patch</filename>
            <type>text/plain</type>
            <size>417019</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNzU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
N2UyMWFjNjRlNTJhN2E3YjQzZjU0OWYzNzRiNDc0YjY3MDkxNzIzLi41Y2ExM2Q4NWJjN2YxOGM5
ZWM1MWJhNGE5MTFhMTBmMzlhZjk3OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNS0wMi0yNyAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVtb3ZlIEluc3BlY3RvciBwcmVmaXhl
cyBmcm9tIGluc3BlY3RvciBhZ2VudCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbiBwcmVwYXJhdGlvbiBmb3IgbW92aW5nIGFsbCBpbnNw
ZWN0b3IgYWdlbnRzIHRvIHRoZSBJbnNwZWN0b3IgbmFtZXNwYWNlLAorICAgICAgICB0aGlzIHBh
dGNoIHJlbW92ZXMgdGhlIEluc3BlY3RvciBwcmVmaXggZnJvbSBhZ2VudCBjbGFzc2VzIGFuZCBh
c3NvY2lhdGVkCisgICAgICAgIG1lbWJlcnMsIGdldHRlcnMsIGFuZCBzZXR0ZXJzLgorCisgICAg
ICAgIEZ1bGwgY2hhbmdlbG9nIGhhcyBiZWVuIGVsaWRlZCBmb3IgYWdlbnQgY2xhc3Nlcywgc2lu
Y2UgZXZlcnkgYWdlbnQgbWV0aG9kCisgICAgICAgIHNpZ25hdHVyZSBpcyBtZWNoYW5pY2FsbHkg
Y2hhbmdlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudEJhc2UuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHA6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVnaXN0cnkuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjphcHBl
bmRFeHRyYUFnZW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0
b3JDb250cm9sbGVyOjpmcm9udGVuZEluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdENvbnNvbGVB
Z2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50
OjpKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjpKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2Vu
dC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50OjpK
U0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFs
T2JqZWN0UnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9hdWdtZW50YWJsZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hdWdtZW50YWJsZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
ci5weToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6QWRkUGFyZW50Rm9yQ29uc29sZVN0YXJ0RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisKIDIw
MTUtMDItMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsIG91dCByMTgwNzIzLiBJdCBicm9rZSBhIGJ1bmNoIG9mIHRlc3RzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGI5YTUwMWRhOWE5MGVmNGRkNzYzMjc2ZWU1ZTcyOTJhNzliZTYyZDcuLjE3OWNh
ZjQwYzY3NzIzMzVkZGVjMjY1ZTcwOTE0NDJhMjc0NDViNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMTAgQEAKKzIwMTUtMDItMjcgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24u
ZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlbW92ZSBJbnNwZWN0b3IgcHJlZml4ZXMg
ZnJvbSBpbnNwZWN0b3IgYWdlbnQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIG1vdmluZyBhbGwgaW5zcGVj
dG9yIGFnZW50cyB0byB0aGUgSW5zcGVjdG9yIG5hbWVzcGFjZSwKKyAgICAgICAgdGhpcyBwYXRj
aCByZW1vdmVzIHRoZSBJbnNwZWN0b3IgcHJlZml4IGZyb20gYWdlbnQgY2xhc3NlcyBhbmQgYXNz
b2NpYXRlZAorICAgICAgICBtZW1iZXJzLCBnZXR0ZXJzLCBhbmQgc2V0dGVycy4KKworICAgICAg
ICBGdWxsIGNoYW5nZWxvZyBoYXMgYmVlbiBlbGlkZWQgZm9yIGFnZW50IGNsYXNzZXMsIHNpbmNl
IGV2ZXJ5IGFnZW50IG1ldGhvZAorICAgICAgICBzaWduYXR1cmUgaXMgbWVjaGFuaWNhbGx5IGNo
YW5nZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQSUhv
c3Q6OmluaXQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6cHJvZmlsZXJFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OnNldFByb2ZpbGVyRW5hYmxlZCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3Bw
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxNZWRpYUxpc3RDaGFpbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0OjphZGRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXQ6OnJlc291cmNlU3R5bGVTaGVldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGU6OnNldFN0eWxlVGV4dCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yV2ViQWdlbnRCYXNlLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zdHJ1bWVu
dGluZ0FnZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnN0cnVtZW50aW5nQWdlbnRzOjpJ
bnN0cnVtZW50aW5nQWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRpbmdBZ2Vu
dHM6OnJlc2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGluZ0FnZW50czo6Y3JlYXRlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6UmVzb3VyY2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpzZXRSZXNvdXJjZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1Jlc291cmNlc0RhdGE6OnJlc291cmNlVHlwZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhOjp0eXBlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGE6OnNldFR5cGUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VDb25zb2xlQWdlbnQ6OlBhZ2VDb25zb2xlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q29uc29sZUFnZW50OjphZGRJbnNwZWN0ZWROb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFn
ZUNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVSTEZv
clNjcmlwdCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZVJ1bnRpbWVBZ2VudDo6UGFnZVJ1bnRpbWVBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlUnVudGltZUFnZW50OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZVJ1bnRpbWVBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VSdW50
aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvV2ViQ29uc29sZUFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkNvbnNvbGVBZ2VudDo6V2ViQ29uc29sZUFnZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL1dl
YkRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViRGVidWdnZXJBZ2VudDo6
V2ViRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJEZWJ1Z2dlckFnZW50Ojpl
bmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL1dlYkRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclJ1bnRpbWVBZ2VudDo6V29ya2VyUnVudGltZUFnZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiByZXBs
YXkvUmVwbGF5Q29udHJvbGxlci5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Y29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50
cyk6CisKIDIwMTUtMDItMjcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgY29tbWVudCBhYm91dCBDU1MgdmFsdWUgbmFtZSBtYW5nbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2Vu
dEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRC
YXNlLmgKaW5kZXggNjM0MDRjZjU0MjU0YWQ2YTNlYWExYTVmMjdjNDliOTE3NzJjODUxNC4uNjUy
ZGY1Yjg2YmY1YTZlZTJkMWM1ZGM0NmVkMDU1OWZlOTk5ODkyZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudEJhc2UuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50QmFzZS5oCkBAIC0zOSw5
ICszOSw5IEBAIGVudW0gY2xhc3MgRGlzY29ubmVjdFJlYXNvbiB7CiAgICAgSW5zcGVjdG9yRGVz
dHJveWVkCiB9OwogCi1jbGFzcyBJbnNwZWN0b3JBZ2VudEJhc2UgeworY2xhc3MgQWdlbnRCYXNl
IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JBZ2VudEJhc2UoKSB7IH0KKyAgICB2
aXJ0dWFsIH5BZ2VudEJhc2UoKSB7IH0KIAogICAgIFN0cmluZyBkb21haW5OYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CiAKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBkaXNjYXJkQWdlbnQoKSB7IH0KIAogcHJvdGVjdGVkOgotICAgIEluc3BlY3RvckFn
ZW50QmFzZShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgQWdlbnRCYXNlKGNvbnN0IFN0cmluZyYg
bmFtZSkKICAgICAgICAgOiBtX25hbWUobmFtZSkKICAgICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3Ry
eS5jcHAKaW5kZXggYmNjMDk4ODIxNGE2MWRmMWVhNjczNDNkNTMyMjYxNTI1ZTdlZjQzOS4uNGQx
MzMyMDM5NzY1NTMyN2M1MTIxNmQyNzQwOGMyMTA4YzM1MzQ0OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVnaXN0cnku
Y3BwCkBAIC0zNSwxMyArMzUsMTMgQEAgQWdlbnRSZWdpc3RyeTo6QWdlbnRSZWdpc3RyeSgpCiB7
CiB9CiAKLXZvaWQgQWdlbnRSZWdpc3RyeTo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0
b3JBZ2VudEJhc2U+IGFnZW50KQordm9pZCBBZ2VudFJlZ2lzdHJ5OjphcHBlbmQoc3RkOjp1bmlx
dWVfcHRyPEFnZW50QmFzZT4gYWdlbnQpCiB7CiAgICAgbV9hZ2VudHMuYXBwZW5kKFdURjo6bW92
ZShhZ2VudCkpOwogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi12b2lkIEFnZW50UmVnaXN0cnk6OmFwcGVuZEV4dHJhQWdlbnQoc3RkOjp1bmlxdWVfcHRy
PEluc3BlY3RvckFnZW50QmFzZT4gYWdlbnQpCit2b2lkIEFnZW50UmVnaXN0cnk6OmFwcGVuZEV4
dHJhQWdlbnQoc3RkOjp1bmlxdWVfcHRyPEFnZW50QmFzZT4gYWdlbnQpCiB7CiAgICAgbV9leHRy
YURvbWFpbnMuYXBwZW5kKGFnZW50LT5kb21haW5OYW1lKCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVnaXN0cnkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oCmlu
ZGV4IDk2MmYwMDZkZjcyNzEzYzJkOTQ3ZmU4NzU3OTRjODc5ODA5NTZjNDcuLjY2MTQyN2NmMjc0
YTFjMjZiZWVkNGM3YmMzOGExYzQ4ZDNhOWI3ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oCkBAIC0zMiw5
ICszMiw5IEBACiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCitjbGFzcyBBZ2VudEJhc2U7CiBj
bGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIEZyb250ZW5kQ2hhbm5lbDsKLWNsYXNzIElu
c3BlY3RvckFnZW50QmFzZTsKIAogZW51bSBjbGFzcyBEaXNjb25uZWN0UmVhc29uOwogCkBAIC00
MiwxNCArNDIsMTQgQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQWdlbnRSZWdpc3RyeSB7CiBw
dWJsaWM6CiAgICAgQWdlbnRSZWdpc3RyeSgpOwogCi0gICAgdm9pZCBhcHBlbmQoc3RkOjp1bmlx
dWVfcHRyPEluc3BlY3RvckFnZW50QmFzZT4pOworICAgIHZvaWQgYXBwZW5kKHN0ZDo6dW5pcXVl
X3B0cjxBZ2VudEJhc2U+KTsKIAogICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEZyb250ZW5kQ2hhbm5lbCosIEJhY2tlbmREaXNwYXRjaGVyKik7CiAgICAgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKTsKICAgICB2b2lkIGRpc2Nh
cmRBZ2VudHMoKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIHZvaWQgYXBwZW5kRXh0cmFBZ2VudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQWdl
bnRCYXNlPik7CisgICAgdm9pZCBhcHBlbmRFeHRyYUFnZW50KHN0ZDo6dW5pcXVlX3B0cjxBZ2Vu
dEJhc2U+KTsKICAgICBWZWN0b3I8U3RyaW5nPiBleHRyYURvbWFpbnMoKSBjb25zdCB7IHJldHVy
biBtX2V4dHJhRG9tYWluczsgfQogI2VuZGlmCiAKQEAgLTU5LDcgKzU5LDcgQEAgcHJpdmF0ZToK
ICAgICBBZ2VudFJlZ2lzdHJ5KGNvbnN0IEFnZW50UmVnaXN0cnkmKSA9IGRlbGV0ZTsKICAgICBB
Z2VudFJlZ2lzdHJ5JiBvcGVyYXRvcj0oY29uc3QgQWdlbnRSZWdpc3RyeSYpID0gZGVsZXRlOwog
Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JBZ2VudEJhc2U+PiBtX2FnZW50
czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFnZW50QmFzZT4+IG1fYWdlbnRzOwogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIFZlY3RvcjxTdHJp
bmc+IG1fZXh0cmFEb21haW5zOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAK
aW5kZXggZGVmOWQxMjQ5MGRkYmE0YWE1MmUwZTExNTdhYzRlMWM5NWNiN2NiMS4uZDJjNTUyMTcz
ODkyZTJhMjU2MDJlMDA4YmY0NmJjZGM3ODhhZWRlNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xp
ZW50LmNwcApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVu
dDo6aW5pdGlhbGl6ZUxvZ1RvU3lzdGVtQ29uc29sZSgpCiAjZW5kaWYKIH0KIAotSlNHbG9iYWxP
YmplY3RDb25zb2xlQ2xpZW50OjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQoSW5zcGVjdG9y
Q29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQpCitKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6
OkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudChDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCkK
ICAgICA6IENvbnNvbGVDbGllbnQoKQogICAgICwgbV9jb25zb2xlQWdlbnQoY29uc29sZUFnZW50
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdENvbnNvbGVDbGllbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmgKaW5kZXggZTM1ZTliNjAxMGY5ZDg2YWQ0ZWRh
NzM4ZWQzOWEzZWM2MGYzNjU1Yy4uZDQyODc1YjI4OWYxNWFjNmY3YWExOTJkZjQzYmVmYTNhMTFi
MTJhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdENvbnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oCkBAIC0zMCwxMiArMzAsMTIgQEAKIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLWNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKK2Ns
YXNzIENvbnNvbGVBZ2VudDsKIAogY2xhc3MgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50IGZp
bmFsIDogcHVibGljIEpTQzo6Q29uc29sZUNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50
KEluc3BlY3RvckNvbnNvbGVBZ2VudCopOworICAgIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0Q29u
c29sZUNsaWVudChDb25zb2xlQWdlbnQqKTsKICAgICB2aXJ0dWFsIH5KU0dsb2JhbE9iamVjdENv
bnNvbGVDbGllbnQoKSB7IH0KIAogICAgIHN0YXRpYyBib29sIGxvZ1RvU3lzdGVtQ29uc29sZSgp
OwpAQCAtNTUsNyArNTUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgd2FyblVuaW1wbGVtZW50ZWQo
Y29uc3QgU3RyaW5nJiBtZXRob2QpOwogICAgIHZvaWQgaW50ZXJuYWxBZGRNZXNzYWdlKE1lc3Nh
Z2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwgUmVmUHRyPFNjcmlwdEFyZ3Vt
ZW50cz4mJik7CiAKLSAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQqIG1fY29uc29sZUFnZW50Owor
ICAgIENvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNjU3Y2VkNDc5MDA4OTU5MzE0MTM3OWNl
Y2I4NWNmMDBiNzRmYjZmOS4uMDUwNmI4ODJhNTRiM2UxYWY2ODg1MmJmOTQzZjIxMjM2ZmZiMzRj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjQxLDcg
KzI0MSw3IEBAIFJlZjxTdG9wd2F0Y2g+IEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxl
cjo6ZXhlY3V0aW9uU3RvcHdhdGNoKCkKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotdm9pZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6
OmFwcGVuZEV4dHJhQWdlbnQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckFnZW50QmFzZT4gYWdl
bnQpCit2b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6YXBwZW5kRXh0cmFB
Z2VudChzdGQ6OnVuaXF1ZV9wdHI8QWdlbnRCYXNlPiBhZ2VudCkKIHsKICAgICBTdHJpbmcgZG9t
YWluTmFtZSA9IGFnZW50LT5kb21haW5OYW1lKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5oCmluZGV4IGFiMGE1MjgwM2FkZTc1NWE2NDIyY2I4YjZhZWE2YjdiNThkOTJm
YTMuLmIzZmFmMzQ1MmIzYmQ2ZjkyYTAwYjE4Nzg3MDFmZDkwZmVhNTE5NTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JD
b250cm9sbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNTEsMTEgKzUxLDExIEBAIGNsYXNzIEpT
VmFsdWU7CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQmFja2VuZERpc3BhdGNoZXI7
CitjbGFzcyBDb25zb2xlQWdlbnQ7CitjbGFzcyBEZWJ1Z2dlckFnZW50OwogY2xhc3MgRnJvbnRl
bmRDaGFubmVsOwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9y
QWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JDb25zb2xlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OwogY2xhc3MgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OwogY2xhc3MgU2Ny
aXB0Q2FsbFN0YWNrOwogCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlckNsaWVudCogY2xpZW50KSBvdmVycmlkZSB7IG1fYXVnbWVudGluZ0Ns
aWVudCA9IGNsaWVudDsgfQogCiAgICAgdmlydHVhbCBGcm9udGVuZENoYW5uZWwqIGZyb250ZW5k
Q2hhbm5lbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZnJvbnRlbmRDaGFubmVsOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGVuZEV4dHJhQWdlbnQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
ckFnZW50QmFzZT4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFeHRyYUFnZW50
KHN0ZDo6dW5pcXVlX3B0cjxBZ2VudEJhc2U+KSBvdmVycmlkZTsKICNlbmRpZgogCiBwcml2YXRl
OgpAQCAtMTA4LDggKzEwOCw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluamVj
dGVkU2NyaXB0TWFuYWdlcj4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudD4gbV9jb25zb2xlQ2xpZW50OwogICAg
IEluc3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFnZW50OwotICAgIEluc3BlY3RvckNvbnNvbGVB
Z2VudCogbV9jb25zb2xlQWdlbnQ7Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9kZWJ1
Z2dlckFnZW50OworICAgIENvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CisgICAgRGVidWdn
ZXJBZ2VudCogbV9kZWJ1Z2dlckFnZW50OwogICAgIEFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAg
ICAgRnJvbnRlbmRDaGFubmVsKiBtX2Zyb250ZW5kQ2hhbm5lbDsKICAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXgg
YmYyNDFiYTc3ODJkOWMwOWNhNmRhZDM2MDkyYjgyMWE3MmE4MzhhYS4uN2MwZDI5MTEwNmUxYTNi
OThiMjU5M2VmODVmZDkzNWQ4YjdjZjg0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcApAQCAtMzgsNyAr
MzgsNyBAQAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIEluc3BlY3RvckFnZW50OjpJbnNwZWN0
b3JBZ2VudChJbnNwZWN0b3JFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQpCi0gICAgOiBJbnNwZWN0
b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJJbnNwZWN0b3IiKSkKKyAgICA6IEFnZW50QmFzZShB
U0NJSUxpdGVyYWwoIkluc3BlY3RvciIpKQogICAgICwgbV9lbnZpcm9ubWVudChlbnZpcm9ubWVu
dCkKICAgICAsIG1fZW5hYmxlZChmYWxzZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDRjNmVmNzgy
YzE3N2ZlMmM4NWIyOGFkZWE1ZTY0ZGM3MzY2OWY5YzUuLmM3NTdkMTkwOWUxZTYyYWUwYjRmZmZj
OThhMWRlYzE3ZTIxYzc0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFz
cyBJbnNwZWN0b3JPYmplY3Q7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0
b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQWdlbnQgZmluYWwgOiBwdWJsaWMgQWdl
bnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAppbmRleCA4
MTRhMGMxMWNmNjA4ZWM2OTg5OWNlYmYxYmFjMTRlYWJjMTliYWQ2Li43YTA4OWYzZGY2YmU3MjM5
ZGU2M2VjNDIwOGQwODY1YWMzMzBjMWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5j
cHAKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4aW11bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7CiBzdGF0aWMgY29uc3QgaW50
IGV4cGlyZUNvbnNvbGVNZXNzYWdlc1N0ZXAgPSAxMDA7CiAKLUluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6SW5zcGVjdG9yQ29uc29sZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiQ29u
c29sZSIpKQorQ29uc29sZUFnZW50OjpDb25zb2xlQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJD
b25zb2xlIikpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1h
bmFnZXIpCiAgICAgLCBtX3ByZXZpb3VzTWVzc2FnZShudWxscHRyKQogICAgICwgbV9leHBpcmVk
Q29uc29sZU1lc3NhZ2VDb3VudCgwKQpAQCAtNTEsMTcgKzUxLDE3IEBAIEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6SW5zcGVjdG9yQ29uc29sZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5q
ZWN0ZWRTY3JpCiB7CiB9CiAKLUluc3BlY3RvckNvbnNvbGVBZ2VudDo6fkluc3BlY3RvckNvbnNv
bGVBZ2VudCgpCitDb25zb2xlQWdlbnQ6On5Db25zb2xlQWdlbnQoKQogewogfQogCi12b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5k
Q2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIpCit2b2lkIENvbnNvbGVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZy
b250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbnNvbGVGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7CiAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IENvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tl
bmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCit2b2lkIENvbnNv
bGVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikK
IHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CiAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci5jbGVhcigpOwpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKICAg
ICBkaXNhYmxlKGVycm9yU3RyaW5nKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6
OmVuYWJsZShFcnJvclN0cmluZyYpCit2b2lkIENvbnNvbGVBZ2VudDo6ZW5hYmxlKEVycm9yU3Ry
aW5nJikKIHsKICAgICBpZiAobV9lbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC04Nyw3ICs4
Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQog
ICAgICAgICBtX2NvbnNvbGVNZXNzYWdlc1tpXS0+YWRkVG9Gcm9udGVuZChtX2Zyb250ZW5kRGlz
cGF0Y2hlci5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIsIGZhbHNlKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQordm9pZCBDb25z
b2xlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogewogICAgIGlmICghbV9lbmFibGVkKQog
ICAgICAgICByZXR1cm47CkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKQor
dm9pZCBDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKQogewogICAgIG1f
Y29uc29sZU1lc3NhZ2VzLmNsZWFyKCk7CiAgICAgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3Vu
dCA9IDA7CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNs
ZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
bWVzc2FnZXNDbGVhcmVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpyZXNl
dCgpCit2b2lkIENvbnNvbGVBZ2VudDo6cmVzZXQoKQogewogICAgIEVycm9yU3RyaW5nIHVudXNl
ZDsKICAgICBjbGVhck1lc3NhZ2VzKHVudXNlZCk7CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJlc2V0KCkKICAgICBtX2NvdW50cy5jbGVhcigpOwogfQog
Ci12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvQ29uc29sZShzdGQ6OnVu
aXF1ZV9wdHI8Q29uc29sZU1lc3NhZ2U+IG1lc3NhZ2UpCit2b2lkIENvbnNvbGVBZ2VudDo6YWRk
TWVzc2FnZVRvQ29uc29sZShzdGQ6OnVuaXF1ZV9wdHI8Q29uc29sZU1lc3NhZ2U+IG1lc3NhZ2Up
CiB7CiAgICAgaWYgKCFtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5zcGVjdG9yRW52aXJvbm1l
bnQoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvQ29uc29s
ZShzdGQ6OnVuaXF1ZV9wdHI8Q29uc29sZU1lc3NhZ2U+CiAgICAgYWRkQ29uc29sZU1lc3NhZ2Uo
V1RGOjptb3ZlKG1lc3NhZ2UpKTsKIH0KIAotVmVjdG9yPHVuc2lnbmVkPiBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmNvbnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMoKSBjb25zdAorVmVjdG9yPHVu
c2lnbmVkPiBDb25zb2xlQWdlbnQ6OmNvbnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMoKSBjb25z
dAogewogICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVzdWx0KG1fY29uc29sZU1lc3NhZ2VzLnNpemUo
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvbnNvbGVNZXNzYWdlcy5zaXplKCk7
IGkrKykKQEAgLTEzNyw3ICsxMzcsNyBAQCBWZWN0b3I8dW5zaWduZWQ+IEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6Y29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50cygpIGNvbnN0CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnN0YXJ0VGltaW5nKGNv
bnN0IFN0cmluZyYgdGl0bGUpCit2b2lkIENvbnNvbGVBZ2VudDo6c3RhcnRUaW1pbmcoY29uc3Qg
U3RyaW5nJiB0aXRsZSkKIHsKICAgICAvLyBGb2xsb3cgRmlyZWJ1ZydzIGJlaGF2aW9yIG9mIHJl
cXVpcmluZyBhIHRpdGxlIHRoYXQgaXMgbm90IG51bGwgb3IKICAgICAvLyB1bmRlZmluZWQgZm9y
IHRpbWluZyBmdW5jdGlvbnMKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6c3RhcnRUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSkKICAgICBtX3RpbWVzLmFk
ZCh0aXRsZSwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVm
UHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKQordm9pZCBDb25zb2xlQWdlbnQ6OnN0b3BU
aW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNh
bGxTdGFjaykKIHsKICAgICAvLyBGb2xsb3cgRmlyZWJ1ZydzIGJlaGF2aW9yIG9mIHJlcXVpcmlu
ZyBhIHRpdGxlIHRoYXQgaXMgbm90IG51bGwgb3IKICAgICAvLyB1bmRlZmluZWQgZm9yIHRpbWlu
ZyBmdW5jdGlvbnMKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlwdENhbAog
ICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUoc3RkOjptYWtlX3VuaXF1ZTxDb25zb2xlTWVzc2FnZT4o
TWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgTWVzc2FnZVR5cGU6OlRpbWluZywgTWVzc2FnZUxl
dmVsOjpEZWJ1ZywgbWVzc2FnZSwgY2FsbFN0YWNrKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50Ojpjb3VudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0
QXJndW1lbnRzPiBhcmd1bWVudHMpCit2b2lkIENvbnNvbGVBZ2VudDo6Y291bnQoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewog
ICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2tGb3JDb25zb2xlKHN0YXRlLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0Nh
cHR1cmUpKTsKICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RDYWxsZXIgPSBjYWxsU3Rh
Y2stPmF0KDApOwpAQCAtMTk4LDcgKzE5OCw3IEBAIHN0YXRpYyBib29sIGlzR3JvdXBNZXNzYWdl
KE1lc3NhZ2VUeXBlIHR5cGUpCiAgICAgICAgIHx8IHR5cGUgPT0gTWVzc2FnZVR5cGU6OkVuZEdy
b3VwOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkQ29uc29sZU1lc3NhZ2Uo
c3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBjb25zb2xlTWVzc2FnZSkKK3ZvaWQgQ29u
c29sZUFnZW50OjphZGRDb25zb2xlTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8Q29uc29sZU1lc3Nh
Z2U+IGNvbnNvbGVNZXNzYWdlKQogewogICAgIEFTU0VSVChtX2luamVjdGVkU2NyaXB0TWFuYWdl
ci0+aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpOwogICAg
IEFTU0VSVF9BUkcoY29uc29sZU1lc3NhZ2UsIGNvbnNvbGVNZXNzYWdlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVB
Z2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q29uc29sZUFnZW50LmgKaW5kZXggYjlkYTk5ZDM4MmVmY2IxYjI2ZDk3YzI1N2U2ZDBkNGM1MDVm
MjEyMC4uMWQ2OGM4YzYwNjU5OTUyMTg2MTZkNjU2MmFhOTk5MGI0YTZmZDFhMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29s
ZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ29uc29sZUFnZW50LmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBjbGFzcyBTY3JpcHRBcmd1
bWVudHM7CiBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKIAotY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQ29uc29sZUFnZW50IDogcHVi
bGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIENvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckNvbnNvbGVBZ2VudCk7
CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDb25zb2xlQWdlbnQgOiBwdWJsaWMgQWdlbnRCYXNl
LCBwdWJsaWMgQ29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ29uc29sZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yQ29uc29sZUFnZW50KCk7CisgICAgQ29uc29sZUFn
ZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIHZpcnR1YWwgfkNvbnNvbGVBZ2VudCgp
OwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVu
ZENoYW5uZWwqLCBCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggNjU4ODlhZWU4N2FkYTJi
YmJjZGE5ZjVlMjI5Zjk3ZjJhNWM5OTJmMi4uNjFkY2ZmNzczY2NkNTgyNGEzMjQwNjc3ZjQ2Zjk2
MGYxYzhiMDU1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQzLDcg
KzQzLDcgQEAKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLWNvbnN0IGNoYXIqIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwID0gImJhY2t0cmFjZSI7Citjb25z
dCBjaGFyKiBEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCA9ICJiYWNrdHJhY2Ui
OwogCiAvLyBPYmplY3RzIGNyZWF0ZWQgYW5kIHJldGFpbmVkIGJ5IGV2YWx1YXRpbmcgYnJlYWtw
b2ludCBhY3Rpb25zIGFyZSBwdXQgaW50byBvYmplY3QgZ3JvdXBzCiAvLyBhY2NvcmRpbmcgdG8g
dGhlIGJyZWFrcG9pbnQgYWN0aW9uIGlkZW50aWZpZXIgYXNzaWduZWQgYnkgdGhlIGZyb250ZW5k
LiBBIGJyZWFrcG9pbnQgbWF5CkBAIC01NSw4ICs1NSw4IEBAIHN0YXRpYyBTdHJpbmcgb2JqZWN0
R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFj
dGlvCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcob2JqZWN0R3JvdXAsIFN0cmluZzo6bnVtYmVyKGFj
dGlvbi5pZGVudGlmaWVyKSk7CiB9CiAKLUluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJEZWJ1Z2dlciIpKQor
RGVidWdnZXJBZ2VudDo6RGVidWdnZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlcikKKyAgICA6IEFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkRlYnVnZ2Vy
IikpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIp
CiAgICAgLCBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRChKU0M6Om5vQnJlYWtwb2lu
dElEKQogewpAQCAtNjQsMTcgKzY0LDE3IEBAIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjCiAgICAg
Y2xlYXJCcmVha0RldGFpbHMoKTsKIH0KIAotSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6fkluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQoKQorRGVidWdnZXJBZ2VudDo6fkRlYnVnZ2VyQWdlbnQoKQogewog
fQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZChGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKQordm9pZCBEZWJ1Z2dlckFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9
IHN0ZDo6bWFrZV91bmlxdWU8RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hh
bm5lbCk7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IERlYnVnZ2VyQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJl
YXNvbiByZWFzb24pCit2b2lkIERlYnVnZ2VyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKERpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CkBAIC04Myw3
ICs4Myw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzCiAgICAgZGlzYWJsZShza2lwUmVjb21w
aWxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBE
ZWJ1Z2dlckFnZW50OjplbmFibGUoKQogewogICAgIGlmIChtX2VuYWJsZWQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFi
bGUoKQogICAgIG1fZW5hYmxlZCA9IHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIERlYnVnZ2VyQWdlbnQ6
OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogewogICAgIGlmICghbV9lbmFibGVkKQog
ICAgICAgICByZXR1cm47CkBAIC0xMTMsMTcgKzExMywxNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogICAgIG1fZW5hYmxlZCA9
IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZShFcnJvclN0
cmluZyYpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAg
ZW5hYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShFcnJv
clN0cmluZyYpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogewog
ICAgIGRpc2FibGUoZmFsc2UpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUpCit2b2lkIERlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUp
CiB7CiAgICAgaWYgKGFjdGl2ZSkKICAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5hY3RpdmF0
ZUJyZWFrcG9pbnRzKCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmluZyYsIGJvb2wgYWN0aXZlKQog
ICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogfQog
Ci1ib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzUGF1c2VkKCkKK2Jvb2wgRGVidWdnZXJB
Z2VudDo6aXNQYXVzZWQoKQogewogICAgIHJldHVybiBzY3JpcHREZWJ1Z1NlcnZlcigpLmlzUGF1
c2VkKCk7CiB9CkBAIC0xNTIsNyArMTUyLDcgQEAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJ1aWxkQ1NQVmlvbGF0aW9uUGF1c2VSZWFzb24oY29uc3QgU3RyaW5nJiBkaXJlY3QKICAg
ICByZXR1cm4gcmVhc29uLT5vcGVuQWNjZXNzb3JzKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29u
KEpTQzo6QnJlYWtwb2ludElEIGRlYnVnZ2VyQnJlYWtwb2ludElkZW50aWZpZXIpCitSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBEZWJ1Z2dlckFnZW50OjpidWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNv
bihKU0M6OkJyZWFrcG9pbnRJRCBkZWJ1Z2dlckJyZWFrcG9pbnRJZGVudGlmaWVyKQogewogICAg
IEFTU0VSVChkZWJ1Z2dlckJyZWFrcG9pbnRJZGVudGlmaWVyICE9IEpTQzo6bm9CcmVha3BvaW50
SUQpOwogICAgIGF1dG8gaXQgPSBtX2RlYnVnZ2VyQnJlYWtwb2ludElkZW50aWZpZXJUb0luc3Bl
Y3RvckJyZWFrcG9pbnRJZGVudGlmaWVyLmZpbmQoZGVidWdnZXJCcmVha3BvaW50SWRlbnRpZmll
cik7CkBAIC0xNjUsNyArMTY1LDcgQEAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6YnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oSlNDOjoKICAgICByZXR1
cm4gcmVhc29uLT5vcGVuQWNjZXNzb3JzKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxkRXhjZXB0aW9uUGF1c2VSZWFzb24oY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGV4Y2VwdGlvbiwgY29uc3QgSW5qZWN0ZWRTY3JpcHQm
IGluamVjdGVkU2NyaXB0KQorUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gRGVidWdnZXJBZ2VudDo6
YnVpbGRFeGNlcHRpb25QYXVzZVJlYXNvbihjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
ZXhjZXB0aW9uLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQpCiB7CiAgICAg
QVNTRVJUKCFleGNlcHRpb24uaGFzTm9WYWx1ZSgpKTsKICAgICBpZiAoZXhjZXB0aW9uLmhhc05v
VmFsdWUoKSkKQEAgLTE3NSwxMCArMTc1LDEwIEBAIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxkRXhjZXB0aW9uUGF1c2VSZWFzb24oY29uc3QKICAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGV4Y2VwdGlvbiwgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXApLT5vcGVuQWNjZXNzb3Jz
KCk7CisgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QoZXhjZXB0aW9uLCBEZWJ1
Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCktPm9wZW5BY2Nlc3NvcnMoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpoYW5kbGVDb25zb2xlQXNzZXJ0KGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29uc29sZUFzc2VydChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHNjcmlwdERlYnVnU2VydmVyKCkucGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpICE9IEpTQzo6RGVidWdnZXI6OkRvbnRQYXVzZU9uRXhjZXB0
aW9ucykKICAgICAgICAgYnJlYWtQcm9ncmFtKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb246OkFzc2VydCwgYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihtZXNzYWdlKSk7CkBAIC0yMzEs
NyArMjMxLDcgQEAgc3RhdGljIGJvb2wgYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoY29u
c3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBTY3JpcHRCcmVha3AKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbnNGcm9tUHJv
dG9jb2woRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBh
Y3Rpb25zLCBCcmVha3BvaW50QWN0aW9ucyogcmVzdWx0KQorYm9vbCBEZWJ1Z2dlckFnZW50Ojpi
cmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4mIGFjdGlvbnMsIEJyZWFrcG9pbnRBY3Rpb25zKiByZXN1bHQp
CiB7CiAgICAgaWYgKCFhY3Rpb25zKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3NSw3ICsy
NzUsNyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25zRnJv
bVByb3RvY29sKEVycm9yU3RyaW5nJiBlcnJvclN0cgogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlv
bmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCog
Y29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCog
b3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKQor
dm9pZCBEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTCwg
Y29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIGNvbnN0IG9w
dGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlv
bnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFr
cG9pbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4mIGxvY2F0aW9ucykKIHsKICAgICBs
b2NhdGlvbnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+OjpjcmVhdGUoKTsKICAgICBpZiAoIW9wdGlvbmFsVVJMID09
ICFvcHRpb25hbFVSTFJlZ2V4KSB7CkBAIC0zMzYsNyArMzM2LDcgQEAgc3RhdGljIGJvb2wgcGFy
c2VMb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvck9iamVjdCYgbG9j
YXRpb24sIEoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElk
KiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQordm9pZCBEZWJ1Z2dlckFnZW50Ojpz
ZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mJiBsb2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBv
cHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRC
cmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQogewogICAgIEpTQzo6U291cmNlSUQgc291cmNl
SUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBSZWZQdAogICAgICpvdXRCcmVha3BvaW50SWRlbnRpZmllciA9IGJyZWFrcG9p
bnRJZGVudGlmaWVyOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJy
ZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVy
KQordm9pZCBEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllcikKIHsKICAgICBtX2phdmFTY3JpcHRCcmVh
a3BvaW50cy5yZW1vdmUoYnJlYWtwb2ludElkZW50aWZpZXIpOwogCkBAIC0zODgsNyArMzg4LDcg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3AKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbikKK3ZvaWQgRGVidWdnZXJB
Z2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbikKIHsKICAgICBpZiAobV9jb250aW51
ZVRvTG9jYXRpb25CcmVha3BvaW50SUQgIT0gSlNDOjpub0JyZWFrcG9pbnRJRCkgewogICAgICAg
ICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQobV9jb250aW51ZVRvTG9jYXRp
b25CcmVha3BvaW50SUQpOwpAQCAtNDA2LDcgKzQwNiw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QKICAgICByZXN1bWUoZXJyb3JTdHJpbmcpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZl
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBKU0M6OlNvdXJj
ZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQorUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gRGVidWdnZXJBZ2VudDo6
cmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllciwgSlND
OjpTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2ludCkK
IHsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0cy5m
aW5kKHNvdXJjZUlEKTsKICAgICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgp
KQpAQCAtNDM2LDcgKzQzNiw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6TG9jYXRpb24+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCCiAgICAgcmV0dXJu
IFdURjo6bW92ZShsb2NhdGlvbik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJ
RFN0ciwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNo
Pj4mIHJlc3VsdHMpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0
cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SURTdHIsIGNvbnN0IFN0cmluZyYgcXVl
cnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9u
YWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQogewogICAgIEpT
Qzo6U291cmNlSUQgc291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0ludFB0cigpOwogICAgIGF1dG8g
aXQgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7CkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9y
LCBjb25zdCBTdHJpbmcmIHMKICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2
ZSwgaXNSZWdleCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0
U291cmNlKEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRFN0ciwgU3Ry
aW5nKiBzY3JpcHRTb3VyY2UpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShF
cnJvclN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SURTdHIsIFN0cmluZyogc2Ny
aXB0U291cmNlKQogewogICAgIEpTQzo6U291cmNlSUQgc291cmNlSUQgPSBzY3JpcHRJRFN0ci50
b0ludFB0cigpOwogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQo
c291cmNlSUQpOwpAQCAtNDYwLDcgKzQ2MCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Z2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBzCiAg
ICAgICAgIGVycm9yID0gQVNDSUlMaXRlcmFsKCJObyBzY3JpcHQgZm9yIGlkOiAiKSArIHNjcmlw
dElEU3RyOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0
YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBk
ZXRhaWxzKQordm9pZCBEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZGV0YWlscykKIHsKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGZ1bmN0aW9uSWQpOwogICAgIGlmIChpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0CiAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RnVuY3Rpb25EZXRhaWxzKGVycm9yU3Ry
aW5nLCBmdW5jdGlvbklkLCAmZGV0YWlscyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEp
Cit2b2lkIERlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBkYXRhKQogewogICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDgxLDcgKzQ4MSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChEZWJ1Z2dlckZyb250ZW5kRGlz
cGF0CiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5zZXRQYXVzZU9uTmV4dFN0YXRlbWVudCh0cnVl
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVzZU9uTmV4dFN0
YXRlbWVudCgpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50
KCkKIHsKICAgICBpZiAobV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQ5MCwxNCArNDkwLDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2Fu
Y2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKQogICAgIHNjcmlwdERlYnVnU2VydmVyKCkuc2V0UGF1
c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnBhdXNlKEVycm9yU3RyaW5nJikKK3ZvaWQgRGVidWdnZXJBZ2VudDo6cGF1c2UoRXJyb3JT
dHJpbmcmKQogewogICAgIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoRGVidWdnZXJGcm9u
dGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6UGF1c2VPbk5leHRTdGF0ZW1lbnQsIG51bGxwdHIpOwog
CiAgICAgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSB0cnVlOwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCit2b2lk
IERlYnVnZ2VyQWdlbnQ6OnJlc3VtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAg
aWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQogICAgICAgICByZXR1cm47CkBAIC01MDUs
NyArNTA1LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nKQogICAgIHNjcmlwdERlYnVnU2VydmVyKCkuY29udGludWVQcm9ncmFt
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE92ZXIoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nKQordm9pZCBEZWJ1Z2dlckFnZW50OjpzdGVwT3ZlcihFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQog
ICAgICAgICByZXR1cm47CkBAIC01MTMsNyArNTEzLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzdGVwT3ZlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgc2NyaXB0RGVi
dWdTZXJ2ZXIoKS5zdGVwT3ZlclN0YXRlbWVudCgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnN0ZXBJbnRvKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK3ZvaWQgRGVidWdn
ZXJBZ2VudDo6c3RlcEludG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogewogICAgIGlmICgh
YXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTI0LDcgKzUy
NCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcEludG8oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nKQogICAgICAgICBtX2xpc3RlbmVyLT5zdGVwSW50bygpOwogfQogCi12b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBPdXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQordm9pZCBEZWJ1Z2dlckFnZW50OjpzdGVwT3V0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykK
IHsKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVybjsK
QEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBPdXQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIHNjcmlwdERlYnVnU2VydmVyKCkuc3RlcE91
dE9mRnVuY3Rpb24oKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVz
ZU9uRXhjZXB0aW9ucyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nUGF1c2VTdGF0ZSkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlvbnMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0cmluZ1BhdXNlU3RhdGUp
CiB7CiAgICAgSlNDOjpEZWJ1Z2dlcjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZVN0YXRl
OwogICAgIGlmIChzdHJpbmdQYXVzZVN0YXRlID09ICJub25lIikKQEAgLTU1MSw3ICs1NTEsNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25FeGNlcHRpb25zKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29ucwogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0
ZXJhbCgiSW50ZXJuYWwgZXJyb3IuIENvdWxkIG5vdCBjaGFuZ2UgcGF1c2Ugb24gZXhjZXB0aW9u
cyBzdGF0ZSIpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25D
YWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFt
ZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0
R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9v
bCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29s
KiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0
IGJvb2wqIHNhdmVSZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29s
Piogd2FzVGhyb3duLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogc2F2ZWRS
ZXN1bHRJbmRleCkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29uc3Qg
Ym9vbCogY29uc3QgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBjb25zdCBkb05v
dFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVy
bkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJl
c3VsdCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
IHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24s
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJlc3VsdEluZGV4KQog
ewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1h
bmFnZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY2FsbEZyYW1lSWQpOwogICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTU3NSwxNyArNTc1LDE3IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldE92ZXJsYXlNZXNzYWdlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKikKK3ZvaWQg
RGVidWdnZXJBZ2VudDo6c2V0T3ZlcmxheU1lc3NhZ2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcqKQogewogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjcmlwdEV4ZWN1dGlv
bkJsb2NrZWRCeUNTUChjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpCit2b2lkIERlYnVnZ2Vy
QWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUChjb25zdCBTdHJpbmcmIGRpcmVjdGl2
ZVRleHQpCiB7CiAgICAgaWYgKHNjcmlwdERlYnVnU2VydmVyKCkucGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSgpICE9IEpTQzo6RGVidWdnZXI6OkRvbnRQYXVzZU9uRXhjZXB0aW9ucykKICAgICAgICAg
YnJlYWtQcm9ncmFtKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkNTUFZpb2xh
dGlvbiwgYnVpbGRDU1BWaW9sYXRpb25QYXVzZVJlYXNvbihkaXJlY3RpdmVUZXh0KSk7CiB9CiAK
LVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6Q2FsbEZyYW1lPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxGcmFt
ZXMoSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQpCitSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IERlYnVn
Z2VyQWdlbnQ6OmN1cnJlbnRDYWxsRnJhbWVzKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
KQogewogICAgIEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKTsKICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQpAQCAtNTk0LDEyICs1OTQsMTIgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpD
YWxsRnJhbWU+PiBJbnNwZWMKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQud3JhcENhbGxGcmFt
ZXMobV9jdXJyZW50Q2FsbFN0YWNrKTsKIH0KIAotU3RyaW5nIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmIHNjcmlwdCkKK1N0cmluZyBE
ZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgU2NyaXB0JiBzY3JpcHQp
CiB7CiAgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmZpbmRTY3JpcHRTb3VyY2VN
YXBVUkwoc2NyaXB0LnNvdXJjZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0JiBpblNj
cmlwdCkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBz
b3VyY2VJRCwgY29uc3QgU2NyaXB0JiBpblNjcmlwdCkKIHsKICAgICBTY3JpcHQgc2NyaXB0ID0g
aW5TY3JpcHQ7CiAgICAgaWYgKHNjcmlwdC5zdGFydExpbmUgPD0gMCAmJiAhc2NyaXB0LnN0YXJ0
Q29sdW1uKQpAQCAtNjUwLDEyICs2NTAsMTIgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHQKICAg
ICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZmFpbGVkVG9QYXJzZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBp
bnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3ZvaWQgRGVidWdnZXJB
Z2VudDo6ZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0RmFpbGVkVG9QYXJz
ZSh1cmwsIGRhdGEsIGZpcnN0TGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpTQzo6RXhlY1N0YXRlKiBzY3Jp
cHRTdGF0ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBleGNlcHRpb25PckNhdWdodFZhbHVlKQordm9pZCBE
ZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYgZXhjZXB0aW9uT3JDYXVnaHRWYWx1ZSkKIHsKICAgICBBU1NFUlQoc2NyaXB0
U3RhdGUgJiYgIW1fcGF1c2VkU2NyaXB0U3RhdGUpOwogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUg
PSBzY3JpcHRTdGF0ZTsKQEAgLTcxOSwxMiArNzE5LDEyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGlkUGF1c2UoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBEZXBy
ZWNhCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRB
Y3Rpb25Tb3VuZChpbnQgYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpCit2b2lkIERlYnVnZ2Vy
QWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Tb3VuZChpbnQgYnJlYWtwb2ludEFjdGlvbklkZW50aWZp
ZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnBsYXlCcmVha3BvaW50QWN0aW9uU291
bmQoYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3Rh
dGUsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwgdW5zaWduZWQgYmF0Y2hJ
ZCwgdW5zaWduZWQgc2FtcGxlSWQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzYW1w
bGUpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNT
dGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwg
dW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBzYW1wbGUpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQg
PSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUp
OwogICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBwYXlsb2FkID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChzYW1wbGUsIG9iamVjdEdyb3VwRm9yQnJlYWtwb2lu
dEFjdGlvbihhY3Rpb24pKTsKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3Rh
dGUsCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRpZFNhbXBsZVByb2JlKFdURjo6bW92ZShy
ZXN1bHQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgp
Cit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKIHsKICAgICBpZiAobV9kaWRQYXVz
ZVN0b3B3YXRjaCkgewogICAgICAgICBtX2RpZFBhdXNlU3RvcHdhdGNoID0gZmFsc2U7CkBAIC03
NDgsMjEgKzc0OCwyMSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVl
KCkKIAogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSBudWxscHRyOwogICAgIG1fY3VycmVudENh
bGxTdGFjayA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCk7Ci0gICAgbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXItPnJlbGVhc2VPYmplY3RHcm91cChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNr
dHJhY2VPYmplY3RHcm91cCk7CisgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPnJlbGVhc2VP
YmplY3RHcm91cChEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCk7CiAgICAgY2xl
YXJCcmVha0RldGFpbHMoKTsKICAgICBjbGVhckV4Y2VwdGlvblZhbHVlKCk7CiAKICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmJyZWFrUHJvZ3JhbShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJy
ZWFrUmVhc29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpCit2b2lkIERlYnVnZ2Vy
QWdlbnQ6OmJyZWFrUHJvZ3JhbShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJy
ZWFrUmVhc29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpCiB7CiAgICAgbV9icmVh
a1JlYXNvbiA9IGJyZWFrUmVhc29uOwogICAgIG1fYnJlYWtBdXhEYXRhID0gV1RGOjptb3ZlKGRh
dGEpOwogICAgIHNjcmlwdERlYnVnU2VydmVyKCkuYnJlYWtQcm9ncmFtKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKQor
dm9pZCBEZWJ1Z2dlckFnZW50OjpjbGVhckluc3BlY3RvckJyZWFrcG9pbnRTdGF0ZSgpCiB7CiAg
ICAgRXJyb3JTdHJpbmcgZHVtbXlFcnJvcjsKICAgICBWZWN0b3I8U3RyaW5nPiBicmVha3BvaW50
SWRlbnRpZmllcnM7CkBAIC03NzUsNyArNzc1LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpjbGVhckluc3BlY3RvckJyZWFrcG9pbnRTdGF0ZSgpCiAgICAgY2xlYXJEZWJ1Z2dlckJy
ZWFrcG9pbnRTdGF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFy
RGVidWdnZXJCcmVha3BvaW50U3RhdGUoKQordm9pZCBEZWJ1Z2dlckFnZW50OjpjbGVhckRlYnVn
Z2VyQnJlYWtwb2ludFN0YXRlKCkKIHsKICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmNsZWFyQnJl
YWtwb2ludHMoKTsKIApAQCAtNzkyLDcgKzc5Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Y2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpCiAgICAgc2NyaXB0RGVidWdTZXJ2
ZXIoKS5jb250aW51ZVByb2dyYW0oKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRDbGVhckdsb2JhbE9iamVjdCgpCit2b2lkIERlYnVnZ2VyQWdlbnQ6OmRpZENsZWFyR2xv
YmFsT2JqZWN0KCkKIHsKICAgICAvLyBDbGVhciBicmVha3BvaW50cyBmcm9tIHRoZSBkZWJ1Z2dl
ciwgYnV0IGtlZXAgdGhlIGluc3BlY3RvcidzIG1vZGVsIG9mIHdoaWNoCiAgICAgLy8gcGFnZXMg
aGF2ZSB3aGF0IGJyZWFrcG9pbnRzLCBhcyB0aGUgbWFwcGluZyBpcyBvbmx5IHNlbnQgdG8gRGVi
dWdnZXJBZ2VudCBvbmNlLgpAQCAtODAyLDcgKzgwMiw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGlkQ2xlYXJHbG9iYWxPYmplY3QoKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwogfQogCi1ib29sIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmFzc2VydFBhdXNlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitib29sIERlYnVn
Z2VyQWdlbnQ6OmFzc2VydFBhdXNlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAg
aWYgKCFtX3BhdXNlZFNjcmlwdFN0YXRlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlM
aXRlcmFsKCJDYW4gb25seSBwZXJmb3JtIG9wZXJhdGlvbiB3aGlsZSBwYXVzZWQuIik7CkBAIC04
MTIsMTMgKzgxMiwxMyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmFzc2VydFBhdXNl
ZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJCcmVha0RldGFpbHMoKQordm9pZCBEZWJ1Z2dl
ckFnZW50OjpjbGVhckJyZWFrRGV0YWlscygpCiB7CiAgICAgbV9icmVha1JlYXNvbiA9IERlYnVn
Z2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246Ok90aGVyOwogICAgIG1fYnJlYWtBdXhEYXRh
ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckV4Y2Vw
dGlvblZhbHVlKCkKK3ZvaWQgRGVidWdnZXJBZ2VudDo6Y2xlYXJFeGNlcHRpb25WYWx1ZSgpCiB7
CiAgICAgaWYgKG1faGFzRXhjZXB0aW9uVmFsdWUpIHsKICAgICAgICAgbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXItPmNsZWFyRXhjZXB0aW9uVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaAppbmRleCA3OTQ4NjQwMmZiN2Y1YzJjMDMyOTUwMGRkZDlhZTgwODI4NTQ5YTUwLi4wYjhl
ODZkODg1NjhmMjg5MzA5MWQ3ZGEzMGQ1Y2IwMjczNDVhMjZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oCkBAIC01NywxMyArNTcsMTMgQEAgY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiBj
bGFzcyBTY3JpcHREZWJ1Z1NlcnZlcjsKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1j
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIElu
c3BlY3RvckFnZW50QmFzZSwgcHVibGljIFNjcmlwdERlYnVnTGlzdGVuZXIsIHB1YmxpYyBEZWJ1
Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk7CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dl
ckFnZW50IDogcHVibGljIEFnZW50QmFzZSwgcHVibGljIFNjcmlwdERlYnVnTGlzdGVuZXIsIHB1
YmxpYyBEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRGVidWdnZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGJhY2t0cmFjZU9iamVjdEdyb3VwOwogCi0g
ICAgdmlydHVhbCB+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpOworICAgIHZpcnR1YWwgfkRlYnVn
Z2VyQWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tl
bmQoRnJvbnRlbmRDaGFubmVsKiwgQmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
bikgb3ZlcnJpZGU7CkBAIC03MSw4ICs3MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludHNB
Y3RpdmUoRXJyb3JTdHJpbmcmLCBib29sIGFjdGl2ZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYsIGludCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVnZXgsIGNv
bnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mJiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludElkKiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYsIGludCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVnZXgsIGNv
bnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJ
ZCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3B0aW9u
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgY29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBsb2NhdGlvbikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNl
YXJjaEluQ29udGVudChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0
IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3Qg
Ym9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jikgb3ZlcnJp
ZGU7CkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2NyaXB0RGVidWdT
ZXJ2ZXImIHNjcmlwdERlYnVnU2VydmVyKCkgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudChJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBEZWJ1Z2dlckFn
ZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciopOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0
TWFuYWdlcjsgfQogICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4IDY5NDk1NWYxNWYxMjVjNjJjOWY4NTNj
NjAwMGRmZDQ1Zjg0MThiOWEuLjU0OTQyYjQ3MTIxMzJiZjhkNDgxNjk3ZTE3ZTk5NWM1YWQyZTgx
MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAtNTUsOCArNTUsOCBAQCBz
dGF0aWMgYm9vbCBhc0Jvb2woY29uc3QgYm9vbCogY29uc3QgYikKICAgICByZXR1cm4gYiA/ICpi
IDogZmFsc2U7CiB9CiAKLUluc3BlY3RvclJ1bnRpbWVBZ2VudDo6SW5zcGVjdG9yUnVudGltZUFn
ZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDog
SW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiUnVudGltZSIpKQorUnVudGltZUFnZW50
OjpSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCisgICAgOiBBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJSdW50aW1lIikpCiAgICAgLCBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX3Njcmlw
dERlYnVnU2VydmVyKG51bGxwdHIpCiAgICAgLCBtX2VuYWJsZWQoZmFsc2UpCkBAIC02NCw3ICs2
NCw3IEBAIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6SW5zcGVjdG9yUnVudGltZUFnZW50KEluamVj
dGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpCiB7CiB9CiAKLUluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6fkluc3BlY3RvclJ1bnRpbWVBZ2VudCgpCitSdW50aW1lQWdlbnQ6On5SdW50aW1lQWdl
bnQoKQogewogfQogCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0KGNvbnN0CiAg
ICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJz
ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQordm9pZCBSdW50aW1lQWdlbnQ6OnBhcnNl
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpFcnJvclJhbmdlPiYgcmFuZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsVk0o
KTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBJbnNwZWMKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29uc3Qg
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNl
cHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25z
dCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcs
IGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxib29sPiogd2FzVGhyb3duLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piog
c2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgUnVudGltZUFnZW50OjpldmFsdWF0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBj
b25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29uc3QgaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiBjb25zdCByZXR1cm5C
eVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1
bHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogc2F2ZWRSZXN1bHRJbmRleCkKIHsK
ICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZh
bChlcnJvclN0cmluZywgZXhlY3V0aW9uQ29udGV4dElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3Jp
cHQuaGFzTm9WYWx1ZSgpKQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
ZXhwCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9u
T24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBvcHRp
b25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29s
Piogd2FzVGhyb3duKQordm9pZCBSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiYgb3B0aW9uYWxBcmd1bWVu
dHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29s
ZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQ
cmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93
bikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW4KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgY29uc3QgYm9vbCogY29uc3Qgb3duUHJvcGVydGllcywgY29uc3QgYm9vbCogY29u
c3QgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykK
K3ZvaWQgUnVudGltZUFnZW50OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgYm9vbCogY29uc3Qgb3duUHJvcGVydGll
cywgY29uc3QgYm9vbCogY29uc3QgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNj
cmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGlu
dGVybmFsUHJvcGVydGllcykKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVj
dElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC0xNzgsNyAr
MTc4LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICBzZXRQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKG1fc2NyaXB0RGVidWdTZXJ2ZXIsIHByZXZpb3VzUGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBj
b25zdCBib29sKiBjb25zdCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0
b3I+PiYgcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJu
YWxQcm9wZXJ0aWVzKQordm9pZCBSdW50aW1lQWdlbnQ6OmdldERpc3BsYXlhYmxlUHJvcGVydGll
cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0
IGJvb2wqIGNvbnN0IGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+
JiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBpbnRlcm5hbFBy
b3BlcnRpZXMpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAg
ICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewpAQCAtMTk2LDcgKzE5Niw3IEBA
IHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjCiAgICAgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSht
X3NjcmlwdERlYnVnU2VydmVyLCBwcmV2aW91c1BhdXNlT25FeGNlcHRpb25zU3RhdGUpOwogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcq
IG9iamVjdEdyb3VwLCBjb25zdCBpbnQqIHN0YXJ0SW5kZXgsIGNvbnN0IGludCogbnVtYmVyVG9G
ZXRjaCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQordm9pZCBSdW50aW1lQWdl
bnQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgaW50KiBz
dGFydEluZGV4LCBjb25zdCBpbnQqIG51bWJlclRvRmV0Y2gsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50
cnk+PiYgZW50cmllcykKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElk
KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC0yMTAsMjQgKzIx
MCwyNCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIGluamVjdGVkU2NyaXB0LmdldENv
bGxlY3Rpb25FbnRyaWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgb2JqZWN0R3JvdXAgPyAqb2Jq
ZWN0R3JvdXAgOiBTdHJpbmcoKSwgc3RhcnQsIGZldGNoLCAmZW50cmllcyk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCkKK3ZvaWQgUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZv
ck9iamVjdElkKG9iamVjdElkKTsKICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkKICAgICAgICAgaW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChvYmplY3RJZCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQordm9pZCBSdW50aW1lQWdlbnQ6OnJlbGVh
c2VPYmplY3RHcm91cChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7
CiAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPnJlbGVhc2VPYmplY3RHcm91cChvYmplY3RH
cm91cCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpydW4oRXJyb3JTdHJpbmcm
KQordm9pZCBSdW50aW1lQWdlbnQ6OnJ1bihFcnJvclN0cmluZyYpCiB7CiAgICAgLy8gRklYTUU6
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMjc2MzQ+IFdlYiBJbnNwZWN0b3I6IHN1cHBvcnQgZGVi
dWdnaW5nIHdlYiB3b3JrZXJzCiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRS
dW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBsb2NhdGlvbnMsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykKK3ZvaWQgUnVudGltZUFn
ZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBsb2Nh
dGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykKIHsKICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgVk0mIHZtID0gZ2xvYmFs
Vk0oKTsKQEAgLTMxNCwyMyArMzE0LDIzIEBAIHN0YXRpYyB2b2lkIHJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zRm9yVHlwZVByb2ZpbGluZyhWTSYgdm0sIGJvb2wgc2hvdWxkRW5hYmxlVHlwCiAgICAg
fQogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzb24pCit2b2lkIFJ1bnRpbWVBZ2VudDo6d2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzb24pCiB7CiAg
ICAgaWYgKHJlYXNvbiAhPSBEaXNjb25uZWN0UmVhc29uOjpJbnNwZWN0ZWRUYXJnZXREZXN0cm95
ZWQgJiYgbV9pc1R5cGVQcm9maWxpbmdFbmFibGVkKQogICAgICAgICBzZXRUeXBlUHJvZmlsZXJF
bmFibGVkU3RhdGUoZmFsc2UpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5h
YmxlVHlwZVByb2ZpbGVyKEVycm9yU3RyaW5nJikKK3ZvaWQgUnVudGltZUFnZW50OjplbmFibGVU
eXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcmKQogewogICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRT
dGF0ZSh0cnVlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVUeXBl
UHJvZmlsZXIoRXJyb3JTdHJpbmcmKQordm9pZCBSdW50aW1lQWdlbnQ6OmRpc2FibGVUeXBlUHJv
ZmlsZXIoRXJyb3JTdHJpbmcmKQogewogICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShm
YWxzZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRUeXBlUHJvZmlsZXJF
bmFibGVkU3RhdGUoYm9vbCBzaG91bGRFbmFibGVUeXBlUHJvZmlsaW5nKQordm9pZCBSdW50aW1l
QWdlbnQ6OnNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIHNob3VsZEVuYWJsZVR5cGVQ
cm9maWxpbmcpCiB7CiAgICAgaWYgKG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCA9PSBzaG91bGRF
bmFibGVUeXBlUHJvZmlsaW5nKQogICAgICAgICByZXR1cm47CkBAIC0zNTEsNyArMzUxLDcgQEAg
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShi
b29sIHNob3VsZEVuYWJsZVR5cGVQcm8KICAgICAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNG
b3JUeXBlUHJvZmlsaW5nKHZtLCBzaG91bGRFbmFibGVUeXBlUHJvZmlsaW5nKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VJREFzU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9j
az4+JiBiYXNpY0Jsb2NrcykKK3ZvaWQgUnVudGltZUFnZW50OjpnZXRCYXNpY0Jsb2NrcyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlSURBc1N0cmluZywgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkJhc2ljQmxvY2s+PiYgYmFzaWNCbG9ja3MpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsVk0o
KTsKICAgICBpZiAoIXZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50
aW1lQWdlbnQuaAppbmRleCA0Yjk3NzYzZjIzMjE2MWI5OTY5YmM5OTJlMDRlZjc2OWY3Mjc5ZDY4
Li40ZWRlNDQxY2NmMWZiMGY4NTU4ZTA4N2U0NGFhODJiNDZlMDI3ODFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JSdW50aW1lQWdlbnQuaApAQCAtNTAsMTAgKzUwLDEwIEBAIGNsYXNzIEluc3BlY3RvckFycmF5
OwogY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXI7CiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
IAotY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yUnVudGltZUFnZW50IDogcHVibGlj
IEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIFJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclJ1bnRpbWVBZ2VudCk7Citj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBSdW50aW1lQWdlbnQgOiBwdWJsaWMgQWdlbnRCYXNlLCBw
dWJsaWMgUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUnVudGltZUFnZW50KTsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JS
dW50aW1lQWdlbnQoKTsKKyAgICB2aXJ0dWFsIH5SdW50aW1lQWdlbnQoKTsKIAogICAgIHZpcnR1
YWwgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKSBv
dmVycmlkZTsKIApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JS
dW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgUnVudGltZUFnZW50KElu
amVjdGVkU2NyaXB0TWFuYWdlciopOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdENvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5jcHAKaW5kZXggZmUxMTJkZDFl
YWU4Y2FlY2UyM2NhYjhjMDMxYjA2ZTY0MzkwOWZlYS4uZGNmMGNhMTk4ODlmZGFiMmZkYmQ3ZTYz
ZGZmOTJmMmFlOGYxNjk3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50
LmNwcApAQCAtMjksNyArMjksNyBAQAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIEpTR2xvYmFs
T2JqZWN0Q29uc29sZUFnZW50OjpKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudChJbmplY3RlZFNj
cmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckNvbnNv
bGVBZ2VudChpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBDb25zb2xlQWdlbnQoaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RDb25zb2xlQWdl
bnQuaAppbmRleCAwZDc5YzVkMWJmMWJiZWU3NmI5YWJiODUzZjk5M2MxYWFjMDY1YTQ5Li40YTNm
N2EzNTYwMTMzMGZkMjg3ZjAxYmEzMGQ1NDhjZjdlODg2MWUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdENvbnNvbGVBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0Q29uc29sZUFnZW50LmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLWNsYXNzIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50IGZpbmFsIDogcHVibGlj
IEluc3BlY3RvckNvbnNvbGVBZ2VudCB7CitjbGFzcyBKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCmlu
ZGV4IDlhZTc2YzYyYTZjOWM1YWIwM2M3MDkxNWQyZDIzMWQ4ZmY2NzNkZTkuLjhlZDU2NTBmZDA1
OWFiMGE4Yjg1YmJlY2I2ZTEwZGIyOTY0YTc4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmpl
Y3REZWJ1Z2dlckFnZW50LmNwcApAQCAtMzgsOCArMzgsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50
OjpKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIsIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSW5z
cGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQpCi0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKK0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2Vu
dDo6SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIENv
bnNvbGVBZ2VudCogY29uc29sZUFnZW50KQorICAgIDogRGVidWdnZXJBZ2VudChpbmplY3RlZFNj
cmlwdE1hbmFnZXIpCiAgICAgLCBtX3NjcmlwdERlYnVnU2VydmVyKGdsb2JhbE9iamVjdCkKICAg
ICAsIG1fY29uc29sZUFnZW50KGNvbnNvbGVBZ2VudCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2Vu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmpl
Y3REZWJ1Z2dlckFnZW50LmgKaW5kZXggYWM2Yjg3MTY5ZjQ3NWEyODJiNjAxMGVjYmQwMTliMzUy
ZDc1NTgwZS4uMzkxNjgxNTE4OWRjNTE1ZWFkODg5NzdiMGY4ZmU5MGFkYmYxNzk3NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmpl
Y3REZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmgKQEAgLTMxLDEzICszMSwxMyBAQAog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50Owor
Y2xhc3MgQ29uc29sZUFnZW50OwogCi1jbGFzcyBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCB7CitjbGFzcyBKU0dsb2JhbE9i
amVjdERlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgRGVidWdnZXJBZ2VudCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBKU0dsb2JhbE9iamVjdERlYnVnZ2Vy
QWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSlNDOjpKU0dsb2JhbE9iamVjdCYsIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCopOworICAgIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudChJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgQ29uc29sZUFnZW50Kik7
CiAgICAgdmlydHVhbCB+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KCkgeyB9CiAKICAgICB2
aXJ0dWFsIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXImIHNjcmlwdERlYnVnU2VydmVy
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9zY3JpcHREZWJ1Z1NlcnZlcjsgfQpAQCAtNTUsNyArNTUs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1Nl
cnZlciBtX3NjcmlwdERlYnVnU2VydmVyOwotICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9j
b25zb2xlQWdlbnQ7CisgICAgQ29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdl
bnQuY3BwCmluZGV4IDY1OGM2N2FiMTVmODk1MjA1YzU1YmI1Mjg5YzBiOWQyZTRlNDBjNjAuLjNl
N2E1YzZmODRhMWI0YTBjMGRmYTkxMThhMWQzZjYxM2YxMDIzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBKU0dsb2JhbE9iamVjdFJ1bnRpbWVB
Z2VudDo6SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBp
bmplY3RlZFNjcmlwdE1hbmFnZXIsIEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAg
OiBJbnNwZWN0b3JSdW50aW1lQWdlbnQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgIDogUnVu
dGltZUFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdCkKIHsKIH0KQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdFJ1
bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
bgogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLmNsZWFyKCk7CiAKLSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95
RnJvbnRlbmRBbmRCYWNrZW5kKHJlYXNvbik7CisgICAgUnVudGltZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChyZWFzb24pOwogfQogCiBWTSYgSlNHbG9iYWxPYmplY3RSdW50
aW1lQWdlbnQ6Omdsb2JhbFZNKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5o
CmluZGV4IDYzMWJhZWMwZWIzM2RiOWUwODliNWNjYzEzOTFiOTU4MGE3ZmY0ZTguLmRmMzMzZjk4
NGNkZjc1NzdmYjUxYzIwMjBjN2M5YTlmMGMxMTQyODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmpl
Y3RSdW50aW1lQWdlbnQuaApAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLWNsYXNzIEpTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvclJ1bnRpbWVBZ2VudCB7CitjbGFzcyBKU0dsb2Jh
bE9iamVjdFJ1bnRpbWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBSdW50aW1lQWdlbnQgewogcHVibGlj
OgogICAgIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KEluamVjdGVkU2NyaXB0TWFuYWdlcios
IEpTQzo6SlNHbG9iYWxPYmplY3QmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hdWdtZW50YWJsZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hdWdtZW50YWJsZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oCmluZGV4IDVmZjAzNTM1ODRiZGUyZTk5MmM4YjAwOWRiMzk2ZGJiNmE2
NTI1YjUuLmQxZTg1MDUwODAxMTdlZDc5YmFkODQ2YzlmYzA2N2ZjN2ZiZDhkODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYXVnbWVudGFibGUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2F1Z21lbnRhYmxlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmgKQEAgLTM2LDExICszNiwx
MSBAQAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFRCYWNrZW5k
RGlzcGF0Y2hlciwgdHlwZW5hbWUgVEFsdGVybmF0ZURpc3BhdGNoZXI+Ci1jbGFzcyBBbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2Ugewor
Y2xhc3MgQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQgZmluYWwgOiBwdWJsaWMgQWdlbnRCYXNl
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBBbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudChjb25zdCBTdHJpbmcmIGRvbWFpbk5hbWUsIHN0ZDo6dW5pcXVlX3B0
cjxUQWx0ZXJuYXRlRGlzcGF0Y2hlcj4gYWx0ZXJuYXRlRGlzcGF0Y2hlcikKLSAgICAgICAgOiBJ
bnNwZWN0b3JBZ2VudEJhc2UoZG9tYWluTmFtZSkKKyAgICAgICAgOiBBZ2VudEJhc2UoZG9tYWlu
TmFtZSkKICAgICAgICAgLCBtX2FsdGVybmF0ZURpc3BhdGNoZXIoV1RGOjptb3ZlKGFsdGVybmF0
ZURpc3BhdGNoZXIpKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2F1Z21lbnRhYmxlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hdWdtZW50YWJsZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCAyNDU2YWM1OTE5ZDhhMGQ1NjU5ZDZmNzFj
YzA3NTg4ZjZjNzc2OGIyLi5hZGQyY2M4MWI5Yzc3YzIxMDYzYzkyMDU0MGJkMmZlMTIzMWI4ODQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2F1Z21lbnRhYmxl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYXVnbWVudGFibGUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
LmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLWNsYXNzIElu
c3BlY3RvckFnZW50QmFzZTsKK2NsYXNzIEFnZW50QmFzZTsKIAogY2xhc3MgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyIHsKIHB1YmxpYzoKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50KikgPSAwOwogCiAgICAgdmlydHVh
bCBGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kRXh0cmFBZ2VudChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQWdlbnRC
YXNlPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFeHRyYUFnZW50KHN0ZDo6dW5pcXVl
X3B0cjxBZ2VudEJhc2U+KSA9IDA7CiAKICAgICBib29sIGNvbm5lY3RlZCgpIGNvbnN0IHsgcmV0
dXJuICEhZnJvbnRlbmRDaGFubmVsKCk7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5k
ZXggYTE5MjNmZTU0ZGUwNzQ3NDljNDUxMWI3NGEwOWZkZGQ3NGRlZmE2Zi4uZjcxMTFhMDQzY2M3
MzhlZjI0NDhlOThjNTRjMzgwNmI0ZDc4MzU3NyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpA
QCAtNjcsNyArNjcsNyBAQCBfVFlQRVNfV0lUSF9PUEVOX0ZJRUxEUyA9IHNldChbCiAgICAgIlRp
bWVsaW5lLlRpbWVsaW5lRXZlbnQiLAogICAgICMgSW5zcGVjdG9yU3R5bGVTaGVldCBub3Qgb25s
eSBjcmVhdGVzIHRoaXMgcHJvcGVydHkgYnV0IHdhbnRzIHRvIHJlYWQgaXQgYW5kIG1vZGlmeSBp
dC4KICAgICAiQ1NTLkNTU1Byb3BlcnR5IiwKLSAgICAjIEluc3BlY3RvclJlc291cmNlQWdlbnQg
bmVlZHMgdG8gdXBkYXRlIG1pbWUtdHlwZS4KKyAgICAjIFJlc291cmNlQWdlbnQgbmVlZHMgdG8g
dXBkYXRlIG1pbWUtdHlwZS4KICAgICAiTmV0d29yay5SZXNwb25zZSIsCiAgICAgIyBGb3IgdGVz
dGluZyBwdXJwb3NlcyBvbmx5LgogICAgICJUZXN0Lk9wZW5QYXJhbWV0ZXJCdW5kbGUiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAK
aW5kZXggMTU0MjFiYmU4MThlNzZkMTRlNjhjNTM1N2YxNmZlNTExZjAyMzIwZi4uYmQyYzIzNzg0
YzFhMGEwOGExYjMwM2Q0ZDgzYjQxNmQ0M2ZmNjA1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcApAQCAtODIsNyArODIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHZpc2l0b3ItPmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNv
bHVtbik7CiAgICAgICAgIG1fY3VycmVudE5vZGUgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKG1fZXhl
YywgTGVnYWN5UHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKG1fZXhlYywgdmlzaXRvci0+
Y2FsbGVlKCksIHZpc2l0b3ItPnNvdXJjZVVSTCgpLCBsaW5lLCBjb2x1bW4pLCBtX3Jvb3ROb2Rl
LmdldCgpKTsKICAgICAgICAgLy8gQXNzdW1lIHRoYXQgcHJvZmlsZSB0aW1lcyBhcmUgcmVsYXRp
dmUgdG8gd2hlbiB0aGUgfGNvbnNvbGUucHJvZmlsZXwgY29tbWFuZCBpcyBldmFsdWF0ZWQuCi0g
ICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgbG9naWMgaW4gSlNTdGFydFByb2ZpbGluZygpIGFu
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydEZyb21Db25zb2xlKCkuCisgICAgICAgIC8v
IFRoaXMgbWF0Y2hlcyB0aGUgbG9naWMgaW4gSlNTdGFydFByb2ZpbGluZygpIGFuZCBUaW1lbGlu
ZUFnZW50OjpzdGFydEZyb21Db25zb2xlKCkuCiAgICAgICAgIG1fY3VycmVudE5vZGUtPmFwcGVu
ZENhbGwoUHJvZmlsZU5vZGU6OkNhbGwoMC4wKSk7CiAgICAgICAgIG1fcm9vdE5vZGUtPnNwbGlj
ZU5vZGUobV9jdXJyZW50Tm9kZS5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db21tYW5kTGluZUFQSUhvc3QuaAppbmRleCBiMTIzMWFlNmU1OWI3ZDAyZjJmZDA0NTUzYWU3
Mzg5ZGVkOGRkYzY0Li42ZTNjNTQ1ZWU4Y2ZjZDYyYTRlMTJiOGViYzVjOTZjMGQ1ZDVkZmVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oCkBAIC00
MSw4ICs0MSw4IEBAIGNsYXNzIFNjcmlwdFZhbHVlOwogfQogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKK2NsYXNzIENvbnNvbGVBZ2VudDsKIGNsYXNzIEluc3BlY3RvckFnZW50OwotY2xhc3MgSW5z
cGVjdG9yQ29uc29sZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVj
dG9yVmFsdWU7CiB9CkBAIC01MCw5ICs1MCw5IEBAIGNsYXNzIEluc3BlY3RvclZhbHVlOwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZTsKLWNsYXNzIEluc3BlY3RvckRPTUFn
ZW50OwotY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OwotY2xhc3MgSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudDsKK2NsYXNzIERhdGFiYXNlQWdlbnQ7CitjbGFzcyBET01BZ2VudDsKK2NsYXNz
IERPTVN0b3JhZ2VBZ2VudDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBTdG9yYWdlOwogCkBAIC02NCwx
MCArNjQsMTAgQEAgcHVibGljOgogICAgIH5Db21tYW5kTGluZUFQSUhvc3QoKTsKIAogICAgIHZv
aWQgaW5pdChJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudAotICAgICAg
ICAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQKLSAgICAg
ICAgLCBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQKLSAgICAgICAgLCBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQqIGRvbVN0b3JhZ2VBZ2VudAotICAgICAgICAsIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQqIGRhdGFiYXNlQWdlbnQKKyAgICAgICAgLCBJbnNwZWN0b3I6OkNvbnNvbGVBZ2VudCog
Y29uc29sZUFnZW50CisgICAgICAgICwgRE9NQWdlbnQqIGRvbUFnZW50CisgICAgICAgICwgRE9N
U3RvcmFnZUFnZW50KiBkb21TdG9yYWdlQWdlbnQKKyAgICAgICAgLCBEYXRhYmFzZUFnZW50KiBk
YXRhYmFzZUFnZW50CiAgICAgICAgICkKICAgICB7CiAgICAgICAgIG1faW5zcGVjdG9yQWdlbnQg
PSBpbnNwZWN0b3JBZ2VudDsKQEAgLTEwMSwxMCArMTAxLDEwIEBAIHByaXZhdGU6CiAgICAgQ29t
bWFuZExpbmVBUElIb3N0KCk7CiAKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50KiBtX2lu
c3BlY3RvckFnZW50OwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yQ29uc29sZUFnZW50KiBtX2Nv
bnNvbGVBZ2VudDsKLSAgICBJbnNwZWN0b3JET01BZ2VudCogbV9kb21BZ2VudDsKLSAgICBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQqIG1fZG9tU3RvcmFnZUFnZW50OwotICAgIEluc3BlY3RvckRh
dGFiYXNlQWdlbnQqIG1fZGF0YWJhc2VBZ2VudDsKKyAgICBJbnNwZWN0b3I6OkNvbnNvbGVBZ2Vu
dCogbV9jb25zb2xlQWdlbnQ7CisgICAgRE9NQWdlbnQqIG1fZG9tQWdlbnQ7CisgICAgRE9NU3Rv
cmFnZUFnZW50KiBtX2RvbVN0b3JhZ2VBZ2VudDsKKyAgICBEYXRhYmFzZUFnZW50KiBtX2RhdGFi
YXNlQWdlbnQ7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdGFibGVPYmplY3Q+IG1faW5z
cGVjdGVkT2JqZWN0OyAvLyAkMAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKaW5kZXggM2U2ZjYz
MjE2MTNiNjNkYjBkZWU3NTQwYTI0YmQ5YzU2ZTYwODVmNi4uODJjNjdkMjRlOTllMzlkZTU3N2Q4
YTQyZWY5M2Q5MjBhMTBkMDg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKQEAgLTQzLDM1ICs0
MywzNSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6SW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJ
TGl0ZXJhbCgiQXBwbGljYXRpb25DYWNoZSIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorQXBwbGlj
YXRpb25DYWNoZUFnZW50OjpBcHBsaWNhdGlvbkNhY2hlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZUFnZW50KiBwYWdlQWdlbnQpCisgICAgOiBXZWJB
Z2VudEJhc2UoQVNDSUlMaXRlcmFsKCJBcHBsaWNhdGlvbkNhY2hlIiksIGluc3RydW1lbnRpbmdB
Z2VudHMpCiAgICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiB7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJv
bnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcikKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9
IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmREaXNw
YXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNw
ZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmRE
aXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXIgPSBudWxscHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAot
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50KG51bGxwdHIpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0QXBwbGljYXRpb25D
YWNoZUFnZW50KG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUFnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcmKQogewotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy0+c2V0QXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMpOwogCiAgICAgLy8gV2UgbmVlZCB0
byBwYXNzIGluaXRpYWwgbmF2aWdhdG9yLm9uT25saW5lLgogICAgIG5ldHdvcmtTdGF0ZUNoYW5n
ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OnVwZGF0ZUFw
cGxpY2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQordm9pZCBBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQogewogICAg
IERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVu
dExvYWRlcigpOwogICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCkBAIC04NSwxMyArODUsMTMgQEAg
dm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OnVwZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVTdGF0dXMoRnJhbWUqIGZyYW1lKQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5hcHBsaWNh
dGlvbkNhY2hlU3RhdHVzVXBkYXRlZChtX3BhZ2VBZ2VudC0+ZnJhbWVJZChmcmFtZSksIG1hbmlm
ZXN0VVJMLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwogfQogCi12b2lkIEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCit2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVBZ2VudDo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiB7CiAgICAgYm9vbCBpc05vd09u
bGluZSA9IG5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkub25MaW5lKCk7CiAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPm5ldHdvcmtTdGF0ZVVwZGF0ZWQoaXNOb3dPbmxpbmUpOwogfQogCi12b2lkIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJv
clN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+JiByZXN1bHQpCit2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0
cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+JiByZXN1bHQpCiB7CiAg
ICAgcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+OjpjcmVhdGUoKTsKIApAQCAt
MTE0LDE2ICsxMTQsMTYgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Omdl
dEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcmLCBSZWZQdHIKICAgICB9CiB9CiAKLURv
Y3VtZW50TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1l
V2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nIGZyYW1l
SWQpCitEb2N1bWVudExvYWRlciogQXBwbGljYXRpb25DYWNoZUFnZW50Ojphc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyBmcmFtZUlk
KQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0
cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihl
cnJvclN0cmluZywgZnJhbWUpOworICAgIHJldHVybiBQYWdlQWdlbnQ6OmFzc2VydERvY3VtZW50
TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50OjpnZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIG1hbmlmZXN0VVJMKQordm9pZCBBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RVUkwpCiB7CiAg
ICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gYXNzZXJ0RnJhbWVXaXRoRG9jdW1l
bnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZG9jdW1lbnRMb2FkZXIp
CkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6
OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICAqbWFuaWZl
c3RVUkwgPSBpbmZvLm1fbWFuaWZlc3Quc3RyaW5nKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiYgYXBwbGljYXRp
b25DYWNoZSkKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hl
Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlv
bkNhY2hlPiYgYXBwbGljYXRpb25DYWNoZSkKIHsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIgPSBhc3NlcnRGcmFtZVdpdGhEb2N1bWVudExvYWRlcihlcnJvclN0cmluZywgZnJh
bWVJZCk7CiAgICAgaWYgKCFkb2N1bWVudExvYWRlcikKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lk
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRpb25DYWNoZUZvckZy
YW1lKEVycm9yU3RyaW5nJiBlcgogICAgIGFwcGxpY2F0aW9uQ2FjaGUgPSBidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGUocmVzb3VyY2VzLCBpbmZvKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2VzLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvJiBhcHBsaWNh
dGlvbkNhY2hlSW5mbykKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
QXBwbGljYXRpb25DYWNoZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZv
TGlzdCYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhv
c3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCiB7CiAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRNYW5pZmVzdFVSTChhcHBsaWNhdGlvbkNhY2hlSW5mby5tX21hbmlm
ZXN0LnN0cmluZygpKQpAQCAtMTU5LDcgKzE1OSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0b3JBcHBsaWNhdGlv
CiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkQXJyYXlGb3JB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNv
dXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQorUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IEFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRBcnJh
eUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OlJlc291cmNlSW5mb0xpc3QmIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMpCiB7CiAgICAgYXV0
byByZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+OjpjcmVhdGUo
KTsKIApAQCAtMTY5LDcgKzE2OSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvCiAgICAgcmV0
dXJuIFdURjo6bW92ZShyZXNvdXJjZXMpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291cmNlSW5mbykK
K1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+IEFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5m
byYgcmVzb3VyY2VJbmZvKQogewogICAgIFN0cmluZ0J1aWxkZXIgdHlwZXM7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuaAppbmRleCBmMDhhY2UyMGY3MTcxODNhZDkwZDQ2ZmZkZTA2ZDNhNjM0Y2ZhNzY5Li41
MmE3YTNlNWE5ZDNkMTc1ODdjYjZlZjhlMGQ4M2YxNmJmYmY1ZmNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oCkBAIC00MCwxOCArNDAsMTggQEAgY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xh
c3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQYWdlQWdlbnQ7CiBj
bGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAot
Y2xhc3MgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitjbGFzcyBBcHBs
aWNhdGlvbkNhY2hlQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViQWdlbnRCYXNlLCBwdWJsaWMgSW5z
cGVjdG9yOjpBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShBcHBsaWNhdGlvbkNhY2hlQWdlbnQpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQo
SW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclBhZ2VBZ2VudCopOwotICAgIHZpcnR1YWwg
fkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpIHsgfQorICAgIEFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZUFnZW50Kik7CisgICAgdmlydHVhbCB+
QXBwbGljYXRpb25DYWNoZUFnZW50KCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJy
aWRlOwpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgRG9jdW1lbnRMb2FkZXIqIGFz
c2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiwgU3RyaW5nIGZyYW1lSWQp
OwogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBQYWdlQWdlbnQq
IG1fcGFnZUFnZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9u
Q2FjaGVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcAppbmRleCA4NTMyMWRkN2RkMmY3OGJlYTk5ZTUyZTJmNzYwZTA3ZTI5ODgwNGFj
Li5hNGFmYjc2MTFkODFhZjI3MzY4NDE4ZGRhOWY3N2Q1NTg0MDI3OTc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTEwMywxOSArMTAz
LDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKEluc3BlY3RvckFy
cmF5KiBwc2V1ZG9DbGFzc0FycmF5KQogCiBjbGFzcyBDaGFuZ2VSZWdpb25PdmVyc2V0VGFzayB7
CiBwdWJsaWM6Ci0gICAgQ2hhbmdlUmVnaW9uT3ZlcnNldFRhc2soSW5zcGVjdG9yQ1NTQWdlbnQq
KTsKKyAgICBDaGFuZ2VSZWdpb25PdmVyc2V0VGFzayhDU1NBZ2VudCopOwogICAgIHZvaWQgc2No
ZWR1bGVGb3IoV2ViS2l0TmFtZWRGbG93KiwgaW50IGRvY3VtZW50Tm9kZUlkKTsKICAgICB2b2lk
IHVuc2NoZWR1bGUoV2ViS2l0TmFtZWRGbG93Kik7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZv
aWQgdGltZXJGaXJlZCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3RvckNTU0FnZW50KiBtX2Nz
c0FnZW50OworICAgIENTU0FnZW50KiBtX2Nzc0FnZW50OwogICAgIFRpbWVyIG1fdGltZXI7CiAg
ICAgSGFzaE1hcDxXZWJLaXROYW1lZEZsb3cqLCBpbnQ+IG1fbmFtZWRGbG93czsKIH07CiAKLUNo
YW5nZVJlZ2lvbk92ZXJzZXRUYXNrOjpDaGFuZ2VSZWdpb25PdmVyc2V0VGFzayhJbnNwZWN0b3JD
U1NBZ2VudCogY3NzQWdlbnQpCitDaGFuZ2VSZWdpb25PdmVyc2V0VGFzazo6Q2hhbmdlUmVnaW9u
T3ZlcnNldFRhc2soQ1NTQWdlbnQqIGNzc0FnZW50KQogICAgIDogbV9jc3NBZ2VudChjc3NBZ2Vu
dCkKICAgICAsIG1fdGltZXIoKnRoaXMsICZDaGFuZ2VSZWdpb25PdmVyc2V0VGFzazo6dGltZXJG
aXJlZCkKIHsKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIENoYW5nZVJlZ2lvbk92ZXJzZXRUYXNr
Ojp0aW1lckZpcmVkKCkKICAgICBtX25hbWVkRmxvd3MuY2xlYXIoKTsKIH0KIAotY2xhc3MgSW5z
cGVjdG9yQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24gOiBwdWJsaWMgSW5zcGVjdG9ySGlzdG9y
eTo6QWN0aW9uIHsKK2NsYXNzIENTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uIDogcHVibGljIElu
c3BlY3Rvckhpc3Rvcnk6OkFjdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVT
aGVldEFjdGlvbik7CiBwdWJsaWM6CiAgICAgU3R5bGVTaGVldEFjdGlvbihjb25zdCBTdHJpbmcm
IG5hbWUsIEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCkBAIC0xNjIsMTEgKzE2Miwx
MSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IG1fc3R5bGVT
aGVldDsKIH07CiAKLWNsYXNzIEluc3BlY3RvckNTU0FnZW50OjpTZXRTdHlsZVNoZWV0VGV4dEFj
dGlvbiBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbiB7
CitjbGFzcyBDU1NBZ2VudDo6U2V0U3R5bGVTaGVldFRleHRBY3Rpb24gZmluYWwgOiBwdWJsaWMg
Q1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNl
dFN0eWxlU2hlZXRUZXh0QWN0aW9uKTsKIHB1YmxpYzoKICAgICBTZXRTdHlsZVNoZWV0VGV4dEFj
dGlvbihJbnNwZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIHRleHQp
Ci0gICAgICAgIDogSW5zcGVjdG9yQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24oQVNDSUlMaXRl
cmFsKCJTZXRTdHlsZVNoZWV0VGV4dCIpLCBzdHlsZVNoZWV0KQorICAgICAgICA6IENTU0FnZW50
OjpTdHlsZVNoZWV0QWN0aW9uKEFTQ0lJTGl0ZXJhbCgiU2V0U3R5bGVTaGVldFRleHQiKSwgc3R5
bGVTaGVldCkKICAgICAgICAgLCBtX3RleHQodGV4dCkKICAgICB7CiAgICAgfQpAQCAtMjE0LDEx
ICsyMTQsMTEgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9vbGRUZXh0OwogfTsKIAotY2xhc3Mg
SW5zcGVjdG9yQ1NTQWdlbnQ6OlNldFN0eWxlVGV4dEFjdGlvbiBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbiB7CitjbGFzcyBDU1NBZ2VudDo6U2V0U3R5
bGVUZXh0QWN0aW9uIGZpbmFsIDogcHVibGljIENTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZXRTdHlsZVRleHRBY3Rpb24pOwogcHVibGljOgog
ICAgIFNldFN0eWxlVGV4dEFjdGlvbihJbnNwZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBj
b25zdCBJbnNwZWN0b3JDU1NJZCYgY3NzSWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKLSAgICAgICAg
OiBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbihBU0NJSUxpdGVyYWwoIlNldFN0
eWxlVGV4dCIpLCBzdHlsZVNoZWV0KQorICAgICAgICA6IENTU0FnZW50OjpTdHlsZVNoZWV0QWN0
aW9uKEFTQ0lJTGl0ZXJhbCgiU2V0U3R5bGVUZXh0IiksIHN0eWxlU2hlZXQpCiAgICAgICAgICwg
bV9jc3NJZChjc3NJZCkKICAgICAgICAgLCBtX3RleHQodGV4dCkKICAgICB7CkBAIC0yNTksMTEg
KzI1OSwxMSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX29sZFRleHQ7CiB9OwogCi1jbGFzcyBJ
bnNwZWN0b3JDU1NBZ2VudDo6U2V0UnVsZVNlbGVjdG9yQWN0aW9uIGZpbmFsIDogcHVibGljIElu
c3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uIHsKK2NsYXNzIENTU0FnZW50OjpTZXRS
dWxlU2VsZWN0b3JBY3Rpb24gZmluYWwgOiBwdWJsaWMgQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rp
b24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNldFJ1bGVTZWxlY3RvckFjdGlvbik7CiBw
dWJsaWM6CiAgICAgU2V0UnVsZVNlbGVjdG9yQWN0aW9uKEluc3BlY3RvclN0eWxlU2hlZXQqIHN0
eWxlU2hlZXQsIGNvbnN0IEluc3BlY3RvckNTU0lkJiBjc3NJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKLSAgICAgICAgOiBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbihBU0NJ
SUxpdGVyYWwoIlNldFJ1bGVTZWxlY3RvciIpLCBzdHlsZVNoZWV0KQorICAgICAgICA6IENTU0Fn
ZW50OjpTdHlsZVNoZWV0QWN0aW9uKEFTQ0lJTGl0ZXJhbCgiU2V0UnVsZVNlbGVjdG9yIiksIHN0
eWxlU2hlZXQpCiAgICAgICAgICwgbV9jc3NJZChjc3NJZCkKICAgICAgICAgLCBtX3NlbGVjdG9y
KHNlbGVjdG9yKQogICAgIHsKQEAgLTI5MywxMSArMjkzLDExIEBAIHByaXZhdGU6CiAgICAgU3Ry
aW5nIG1fb2xkU2VsZWN0b3I7CiB9OwogCi1jbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDo6QWRkUnVs
ZUFjdGlvbiBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlv
biB7CitjbGFzcyBDU1NBZ2VudDo6QWRkUnVsZUFjdGlvbiBmaW5hbCA6IHB1YmxpYyBDU1NBZ2Vu
dDo6U3R5bGVTaGVldEFjdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRkUnVsZUFj
dGlvbik7CiBwdWJsaWM6CiAgICAgQWRkUnVsZUFjdGlvbihJbnNwZWN0b3JTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQotICAgICAgICA6IEluc3BlY3RvckNT
U0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKEFTQ0lJTGl0ZXJhbCgiQWRkUnVsZSIpLCBzdHlsZVNo
ZWV0KQorICAgICAgICA6IENTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKEFTQ0lJTGl0ZXJhbCgi
QWRkUnVsZSIpLCBzdHlsZVNoZWV0KQogICAgICAgICAsIG1fc2VsZWN0b3Ioc2VsZWN0b3IpCiAg
ICAgewogICAgIH0KQEAgLTMzMCwzNCArMzMwLDM0IEBAIHByaXZhdGU6CiB9OwogCiAvLyBzdGF0
aWMKLUNTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKENTU1J1
bGUmIHJ1bGUpCitDU1NTdHlsZVJ1bGUqIENTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShDU1NSdWxl
JiBydWxlKQogewogICAgIGlmICghaXM8Q1NTU3R5bGVSdWxlPihydWxlKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1N0eWxlUnVsZT4oJnJ1bGUpOwog
fQogCi1JbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KQot
ICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiQ1NTIiksIGluc3RydW1lbnRp
bmdBZ2VudHMpCitDU1NBZ2VudDo6Q1NTQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cywgRE9NQWdlbnQqIGRvbUFnZW50KQorICAgIDogV2ViQWdlbnRCYXNlKEFT
Q0lJTGl0ZXJhbCgiQ1NTIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX2RvbUFnZW50
KGRvbUFnZW50KQogICAgICwgbV9sYXN0U3R5bGVTaGVldElkKDEpCiB7CiAgICAgbV9kb21BZ2Vu
dC0+c2V0RE9NTGlzdGVuZXIodGhpcyk7CiB9CiAKLUluc3BlY3RvckNTU0FnZW50Ojp+SW5zcGVj
dG9yQ1NTQWdlbnQoKQorQ1NTQWdlbnQ6On5DU1NBZ2VudCgpCiB7CiAgICAgQVNTRVJUKCFtX2Rv
bUFnZW50KTsKICAgICByZXNldCgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250
ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIpCit2b2lkIENTU0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPENTU0Zyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVs
KTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gQ1NTQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNv
bikKK3ZvaWQgQ1NTQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxw
dHI7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwpAQCAtMzY1LDEzICszNjUsMTMg
QEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc28KICAgICByZXNldE5vblBlcnNpc3RlbnREYXRhKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCit2b2lkIENTU0Fn
ZW50OjpkaXNjYXJkQWdlbnQoKQogewogICAgIG1fZG9tQWdlbnQtPnNldERPTUxpc3RlbmVyKG51
bGxwdHIpOwogICAgIG1fZG9tQWdlbnQgPSBudWxscHRyOwogfQogCi12b2lkIEluc3BlY3RvckNT
U0FnZW50OjpyZXNldCgpCit2b2lkIENTU0FnZW50OjpyZXNldCgpCiB7CiAgICAgbV9pZFRvSW5z
cGVjdG9yU3R5bGVTaGVldC5jbGVhcigpOwogICAgIG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9y
U3R5bGVTaGVldC5jbGVhcigpOwpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnJlc2V0KCkKICAgICByZXNldE5vblBlcnNpc3RlbnREYXRhKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0Tm9uUGVyc2lzdGVudERhdGEoKQordm9pZCBDU1NBZ2Vu
dDo6cmVzZXROb25QZXJzaXN0ZW50RGF0YSgpCiB7CiAgICAgbV9uYW1lZEZsb3dDb2xsZWN0aW9u
c1JlcXVlc3RlZC5jbGVhcigpOwogICAgIGlmIChtX2NoYW5nZVJlZ2lvbk92ZXJzZXRUYXNrKQpA
QCAtMzg4LDIzICszODgsMjMgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXROb25QZXJz
aXN0ZW50RGF0YSgpCiAgICAgcmVzZXRQc2V1ZG9TdGF0ZXMoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgQ1NTQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JD
U1NBZ2VudCh0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldENTU0FnZW50KHRo
aXMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikK
K3ZvaWQgQ1NTQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogewotICAgIG1faW5zdHJ1bWVu
dGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQ1NTQWdlbnQobnVsbHB0cik7CisgICAgbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLT5zZXRDU1NBZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKQordm9pZCBDU1NBZ2VudDo6bWVkaWFR
dWVyeVJlc3VsdENoYW5nZWQoKQogewogICAgIGlmIChtX2Zyb250ZW5kRGlzcGF0Y2hlcikKICAg
ICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0ZU5hbWVkRmxvdyhEb2N1bWVudCYg
ZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93KQordm9pZCBDU1NBZ2VudDo6ZGlk
Q3JlYXRlTmFtZWRGbG93KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JiBuYW1l
ZEZsb3cpCiB7CiAgICAgaW50IGRvY3VtZW50Tm9kZUlkID0gZG9jdW1lbnROb2RlV2l0aFJlcXVl
c3RlZEZsb3dzSWQoJmRvY3VtZW50KTsKICAgICBpZiAoIWRvY3VtZW50Tm9kZUlkKQpAQCAtNDE0
LDcgKzQxNCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0ZU5hbWVkRmxvdyhE
b2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+bmFtZWRGbG93Q3JlYXRlZChidWlsZE9iamVjdEZvck5hbWVkRmxvdyh1bnVzZWQsICZu
YW1lZEZsb3csIGRvY3VtZW50Tm9kZUlkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OndpbGxSZW1vdmVOYW1lZEZsb3coRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJLaXROYW1lZEZsb3cm
IG5hbWVkRmxvdykKK3ZvaWQgQ1NTQWdlbnQ6OndpbGxSZW1vdmVOYW1lZEZsb3coRG9jdW1lbnQm
IGRvY3VtZW50LCBXZWJLaXROYW1lZEZsb3cmIG5hbWVkRmxvdykKIHsKICAgICBpbnQgZG9jdW1l
bnROb2RlSWQgPSBkb2N1bWVudE5vZGVXaXRoUmVxdWVzdGVkRmxvd3NJZCgmZG9jdW1lbnQpOwog
ICAgIGlmICghZG9jdW1lbnROb2RlSWQpCkBAIC00MjYsNyArNDI2LDcgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6d2lsbFJlbW92ZU5hbWVkRmxvdyhEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktp
dE5hbWVkRmxvdyYKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZWRGbG93UmVtb3ZlZChk
b2N1bWVudE5vZGVJZCwgbmFtZWRGbG93Lm5hbWUoKS5zdHJpbmcoKSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmRpZENoYW5nZVJlZ2lvbk92ZXJzZXQoRG9jdW1lbnQmIGRvY3VtZW50
LCBXZWJLaXROYW1lZEZsb3cmIG5hbWVkRmxvdykKK3ZvaWQgQ1NTQWdlbnQ6OmRpZENoYW5nZVJl
Z2lvbk92ZXJzZXQoRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJLaXROYW1lZEZsb3cmIG5hbWVkRmxv
dykKIHsKICAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBkb2N1bWVudE5vZGVXaXRoUmVxdWVzdGVk
Rmxvd3NJZCgmZG9jdW1lbnQpOwogICAgIGlmICghZG9jdW1lbnROb2RlSWQpCkBAIC00MzcsNyAr
NDM3LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkQ2hhbmdlUmVnaW9uT3ZlcnNldChE
b2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmwKICAgICBtX2NoYW5nZVJlZ2lvbk92ZXJz
ZXRUYXNrLT5zY2hlZHVsZUZvcigmbmFtZWRGbG93LCBkb2N1bWVudE5vZGVJZCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlZ2lvbk92ZXJzZXRDaGFuZ2VkKFdlYktpdE5hbWVkRmxv
dyogbmFtZWRGbG93LCBpbnQgZG9jdW1lbnROb2RlSWQpCit2b2lkIENTU0FnZW50OjpyZWdpb25P
dmVyc2V0Q2hhbmdlZChXZWJLaXROYW1lZEZsb3cqIG5hbWVkRmxvdywgaW50IGRvY3VtZW50Tm9k
ZUlkKQogewogICAgIGlmIChuYW1lZEZsb3ctPmZsb3dTdGF0ZSgpID09IFdlYktpdE5hbWVkRmxv
dzo6Rmxvd1N0YXRlTnVsbCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ4LDcgKzQ0OCw3IEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlZ2lvbk92ZXJzZXRDaGFuZ2VkKFdlYktpdE5hbWVkRmxv
dyogbmFtZWRGbG93LCBpbnQgZG9jCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlZ2lvbk92
ZXJzZXRDaGFuZ2VkKGJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KHVudXNlZCwgbmFtZWRGbG93LCBk
b2N1bWVudE5vZGVJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRSZWdpc3Rl
ck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRG
bG93JiBuYW1lZEZsb3csIE5vZGUmIGNvbnRlbnRFbGVtZW50LCBOb2RlKiBuZXh0Q29udGVudEVs
ZW1lbnQpCit2b2lkIENTU0FnZW50OjpkaWRSZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JiBuYW1lZEZsb3csIE5vZGUmIGNv
bnRlbnRFbGVtZW50LCBOb2RlKiBuZXh0Q29udGVudEVsZW1lbnQpCiB7CiAgICAgaW50IGRvY3Vt
ZW50Tm9kZUlkID0gZG9jdW1lbnROb2RlV2l0aFJlcXVlc3RlZEZsb3dzSWQoJmRvY3VtZW50KTsK
ICAgICBpZiAoIWRvY3VtZW50Tm9kZUlkKQpAQCAtNDYwLDcgKzQ2MCw3IEBAIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmRpZFJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQoRG9jdW1lbnQm
IGRvY3VtZW50LCBXCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlZ2lzdGVyZWROYW1lZEZs
b3dDb250ZW50RWxlbWVudChkb2N1bWVudE5vZGVJZCwgbmFtZWRGbG93Lm5hbWUoKS5zdHJpbmco
KSwgY29udGVudEVsZW1lbnROb2RlSWQsIG5leHRDb250ZW50RWxlbWVudE5vZGVJZCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxl
bWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93LCBOb2Rl
JiBjb250ZW50RWxlbWVudCkKK3ZvaWQgQ1NTQWdlbnQ6OmRpZFVucmVnaXN0ZXJOYW1lZEZsb3dD
b250ZW50RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRG
bG93LCBOb2RlJiBjb250ZW50RWxlbWVudCkKIHsKICAgICBpbnQgZG9jdW1lbnROb2RlSWQgPSBk
b2N1bWVudE5vZGVXaXRoUmVxdWVzdGVkRmxvd3NJZCgmZG9jdW1lbnQpOwogICAgIGlmICghZG9j
dW1lbnROb2RlSWQpCkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
ZGlkVW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwK
ICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dW5yZWdpc3RlcmVkTmFtZWRGbG93Q29udGVudEVs
ZW1lbnQoZG9jdW1lbnROb2RlSWQsIG5hbWVkRmxvdy5uYW1lKCkuc3RyaW5nKCksIGNvbnRlbnRF
bGVtZW50Tm9kZUlkKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9T
dGF0ZShFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHBzZXVk
b0NsYXNzVHlwZSkKK2Jvb2wgQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRWxlbWVudCYgZWxl
bWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1ZG9DbGFzc1R5cGUpCiB7CiAg
ICAgaWYgKG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTUwMyw3ICs1MDMsNyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpm
b3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQmIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbAog
ICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5v
ZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNs
dWRlUHNldWRvLCBjb25zdCBib29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiYg
bWF0Y2hlZENTU1J1bGVzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiYgcHNldWRvSWRNYXRjaGVzLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpCit2b2lkIENTU0FnZW50
OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQsIGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhl
cml0ZWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hl
cz4+JiBwc2V1ZG9JZE1hdGNoZXMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+PiYgaW5oZXJpdGVk
RW50cmllcykKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTU1NSw3ICs1NTUsNyBAQCB2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBubwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgaW5saW5lU3R5
bGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgYXR0cmlidXRl
c1N0eWxlKQordm9pZCBDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiYgaW5saW5lU3R5bGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiYgYXR0cmlidXRlc1N0eWxlKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpA
QCAtNTcwLDcgKzU3MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxl
c0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kCiAgICAgYXR0cmlidXRl
c1N0eWxlID0gYXR0cmlidXRlcyA/IGF0dHJpYnV0ZXMucmVsZWFzZSgpIDogbnVsbHB0cjsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVy
dHk+PiYgc3R5bGUpCit2b2lkIENTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9w
ZXJ0eT4+JiBzdHlsZSkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVy
cm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTU4MSw3ICs1ODEsNyBA
QCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBubwogICAgIHN0eWxlID0gaW5zcGVjdG9yU3R5bGUtPmJ1
aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+
JiBzdHlsZUluZm9zKQordm9pZCBDU1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJp
bmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPj4mIHN0eWxlSW5mb3MpCiB7CiAgICAgc3R5bGVJ
bmZvcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogICAgIFZlY3RvcjxEb2N1bWVudCo+
IGRvY3VtZW50cyA9IG1fZG9tQWdlbnQtPmRvY3VtZW50cygpOwpAQCAtNTk1LDcgKzU5NSw3IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nJiwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
U2hlZXRCb2R5PiYgc3R5bGVTaGVldE9iamVjdCkKK3ZvaWQgQ1NTQWdlbnQ6OmdldFN0eWxlU2hl
ZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+JiBzdHls
ZVNoZWV0T2JqZWN0KQogewogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxl
U2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7
CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQpAQCAtNjA0LDcgKzYwNCw3IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHN0CiAgICAgc3R5bGVTaGVldE9iamVjdCA9IGluc3BlY3RvclN0eWxl
U2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOwogfQogCi12b2lkIEluc3BlY3RvckNT
U0FnZW50OjpnZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCkKK3ZvaWQgQ1NTQWdlbnQ6Omdl
dFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIFN0cmluZyogcmVzdWx0KQogewogICAgIEluc3BlY3RvclN0eWxlU2hlZXQq
IGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcs
IHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQpAQCAtNjEzLDcg
KzYxMyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgaW5zcGVjdG9yU3R5bGVTaGVl
dC0+Z2V0VGV4dChyZXN1bHQpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHls
ZVNoZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVT
aGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpCit2b2lkIENTU0FnZW50OjpzZXRTdHlsZVNoZWV0
VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElk
LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVj
dG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVT
aGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCkBAIC02MjEsMTAgKzYyMSwx
MCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgbV9kb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKHN0ZDo6bWFrZV91bmlxdWU8U2V0
U3R5bGVTaGVldFRleHRBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIHRleHQpLCBlYyk7Ci0g
ICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7Cisg
ICAgZXJyb3JTdHJpbmcgPSBET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZnVsbFN0eWxlSWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1
bHQpCit2b2lkIENTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJp
bmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVz
dWx0KQogewogICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQuY29weVJl
ZigpKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAgLTYzNywxMCArNjM3
LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlVGV4dChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwCiAgICAgYm9vbCBzdWNjZXNzID0gbV9kb21B
Z2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKHN0ZDo6bWFrZV91bmlxdWU8U2V0U3R5bGVUZXh0QWN0
aW9uPihpbnNwZWN0b3JTdHlsZVNoZWV0LCBjb21wb3VuZElkLCB0ZXh0KSwgZWMpOwogICAgIGlm
IChzdWNjZXNzKQogICAgICAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9i
amVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkp
OwotICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMp
OworICAgIGVycm9yU3RyaW5nID0gRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGZ1bGxSdWxlSWQsIGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1
bGU+JiByZXN1bHQpCit2b2lkIENTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGZ1bGxSdWxlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1J1bGU+JiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxs
UnVsZUlkLmNvcHlSZWYoKSk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CkBA
IC02NTQsMTAgKzY1NCwxMCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0
b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SQogCiAgICAgaWYgKHN1
Y2Nlc3MpCiAgICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0
Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQoY29tcG91bmRJZCksIG51bGxw
dHIpOwotICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmco
ZWMpOworICAgIGVycm9yU3RyaW5nID0gRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoZWMpOwogfQog
Ci12b2lkIEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCit2b2lkIENTU0Fn
ZW50OjphZGRSdWxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50IGNvbnRleHRO
b2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCiB7CiAgICAgTm9kZSogbm9kZSA9IG1fZG9tQWdlbnQt
PmFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIGNvbnRleHROb2RlSWQpOwogICAgIGlmICghbm9kZSkK
QEAgLTY3NCw3ICs2NzQsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50IGNvbnRleHROb2RlSQogICAgIEFkZFJ1bGVB
Y3Rpb24qIHJhd0FjdGlvbiA9IGFjdGlvbi5nZXQoKTsKICAgICBib29sIHN1Y2Nlc3MgPSBtX2Rv
bUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oV1RGOjptb3ZlKGFjdGlvbiksIGVjKTsKICAgICBp
ZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6
dG9FcnJvclN0cmluZyhlYyk7CisgICAgICAgIGVycm9yU3RyaW5nID0gRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcoZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02ODMsNyArNjgzLDcg
QEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IGludCBjb250ZXh0Tm9kZUkKICAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNo
ZWV0LT5idWlsZE9iamVjdEZvclJ1bGUocnVsZSwgbnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NQcm9wZXJ0eUluZm8+PiYgY3NzUHJvcGVydGllcykKK3ZvaWQgQ1NTQWdlbnQ6OmdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgY3Nz
UHJvcGVydGllcykKIHsKICAgICBhdXRvIHByb3BlcnRpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0
ZSgpOwogICAgIGZvciAoaW50IGkgPSBmaXJzdENTU1Byb3BlcnR5OyBpIDw9IGxhc3RDU1NQcm9w
ZXJ0eTsgKytpKSB7CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3IK
ICAgICBjc3NQcm9wZXJ0aWVzID0gV1RGOjptb3ZlKHByb3BlcnRpZXMpOwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYmIGZvcmNlZFBzZXVk
b0NsYXNzZXMpCit2b2lkIENTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYmIGZv
cmNlZFBzZXVkb0NsYXNzZXMpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9tQWdlbnQt
PmFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpA
QCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3Rh
dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjCiAgICAgZWxlbWVudC0+
ZG9jdW1lbnQoKS5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TmFtZWRGbG93Q29sbGVjdGlvbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBkb2N1bWVudE5vZGVJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93Pj4m
IHJlc3VsdCkKK3ZvaWQgQ1NTQWdlbnQ6OmdldE5hbWVkRmxvd0NvbGxlY3Rpb24oRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4+JiByZXN1
bHQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9kb21BZ2VudC0+YXNzZXJ0RG9jdW1l
bnQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAgICBpZiAoIWRvY3VtZW50KQpAQCAt
NzQ1LDcgKzc0NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE5hbWVkRmxvd0NvbGxl
Y3Rpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jCiAgICAgcmVzdWx0ID0gV1RG
Ojptb3ZlKG5hbWVkRmxvd3MpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUqIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxl
bWVudCkKK0luc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogQ1NTQWdlbnQ6OmFzSW5z
cGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50KQogewogICAgIE5vZGVUb0luc3BlY3Rv
clN0eWxlU2hlZXQ6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmZp
bmQoZWxlbWVudCk7CiAgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5l
bmQoKSkgewpAQCAtNzYzLDcgKzc2Myw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVT
dHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtCiAgICAg
cmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBDU1NBZ2VudDo6ZWxlbWVudEZvcklkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbV9kb21BZ2VudC0+bm9kZUZvcklkKG5vZGVJ
ZCk7CiAgICAgaWYgKCFub2RlKSB7CkBAIC03NzcsNyArNzc3LDcgQEAgRWxlbWVudCogSW5zcGVj
dG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQpCiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi1pbnQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmRvY3VtZW50Tm9kZVdpdGhSZXF1ZXN0ZWRGbG93c0lkKERvY3VtZW50
KiBkb2N1bWVudCkKK2ludCBDU1NBZ2VudDo6ZG9jdW1lbnROb2RlV2l0aFJlcXVlc3RlZEZsb3dz
SWQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1fZG9t
QWdlbnQtPmJvdW5kTm9kZUlkKGRvY3VtZW50KTsKICAgICBpZiAoIWRvY3VtZW50Tm9kZUlkIHx8
ICFtX25hbWVkRmxvd0NvbGxlY3Rpb25zUmVxdWVzdGVkLmNvbnRhaW5zKGRvY3VtZW50Tm9kZUlk
KSkKQEAgLTc4Niw3ICs3ODYsNyBAQCBpbnQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRvY3VtZW50Tm9k
ZVdpdGhSZXF1ZXN0ZWRGbG93c0lkKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gZG9j
dW1lbnROb2RlSWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNo
ZWV0cyhDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+KiByZXN1bHQp
Cit2b2lkIENTU0FnZW50Ojpjb2xsZWN0U3R5bGVTaGVldHMoQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZVNoZWV0SGVhZGVyPiogcmVzdWx0KQogewogICAgIEluc3BlY3RvclN0eWxlU2hl
ZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBiaW5kU3R5bGVTaGVldChzdHlsZVNoZWV0KTsKICAg
ICByZXN1bHQtPmFkZEl0ZW0oaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHls
ZVNoZWV0SW5mbygpKTsKQEAgLTc5OSwyMCArNzk5LDIwIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBJbnNwZWN0
b3I6CiAgICAgfQogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6
YmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK0luc3BlY3RvclN0eWxl
U2hlZXQqIENTU0FnZW50OjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0
KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBpbnNwZWN0b3JTdHlsZVNoZWV0
ID0gbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmdldChzdHlsZVNoZWV0KTsK
ICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpIHsKICAgICAgICAgU3RyaW5nIGlkID0gU3Ry
aW5nOjpudW1iZXIobV9sYXN0U3R5bGVTaGVldElkKyspOwogICAgICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCk7Ci0gICAgICAgIGluc3BlY3RvclN0
eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUobV9kb21BZ2VudC0+cGFnZUFn
ZW50KCksIGlkLCBzdHlsZVNoZWV0LCBkZXRlY3RPcmlnaW4oc3R5bGVTaGVldCwgZG9jdW1lbnQp
LCBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJpbmcoZG9jdW1lbnQpLCB0aGlzKTsK
KyAgICAgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0
ZShtX2RvbUFnZW50LT5wYWdlQWdlbnQoKSwgaWQsIHN0eWxlU2hlZXQsIGRldGVjdE9yaWdpbihz
dHlsZVNoZWV0LCBkb2N1bWVudCksIERPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhkb2N1bWVu
dCksIHRoaXMpOwogICAgICAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChpZCwgaW5z
cGVjdG9yU3R5bGVTaGVldCk7CiAgICAgICAgIG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5
bGVTaGVldC5zZXQoc3R5bGVTaGVldCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CiAgICAgfQogICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNo
ZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6dmlhSW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpCitJbnNwZWN0b3JTdHlsZVNoZWV0KiBDU1NB
Z2VudDo6dmlhSW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3Jl
YXRlSWZBYnNlbnQpCiB7CiAgICAgaWYgKCFkb2N1bWVudCkgewogICAgICAgICBBU1NFUlQoIWNy
ZWF0ZUlmQWJzZW50KTsKQEAgLTg1NiwxNCArODU2LDE0IEBAIEluc3BlY3RvclN0eWxlU2hlZXQq
IEluc3BlY3RvckNTU0FnZW50Ojp2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KERvY3VtZW50KiBkb2N1
bWVuCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgU3RyaW5nIGlkID0gU3RyaW5nOjpu
dW1iZXIobV9sYXN0U3R5bGVTaGVldElkKyspOwotICAgIGluc3BlY3RvclN0eWxlU2hlZXQgPSBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUobV9kb21BZ2VudC0+cGFnZUFnZW50KCksIGlkLCBj
c3NTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46
Okluc3BlY3RvciwgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKGRvY3VtZW50
KSwgdGhpcyk7CisgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmNyZWF0ZShtX2RvbUFnZW50LT5wYWdlQWdlbnQoKSwgaWQsIGNzc1N0eWxlU2hlZXQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yLCBET01BZ2Vu
dDo6ZG9jdW1lbnRVUkxTdHJpbmcoZG9jdW1lbnQpLCB0aGlzKTsKICAgICBtX2lkVG9JbnNwZWN0
b3JTdHlsZVNoZWV0LnNldChpZCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CiAgICAgbV9jc3NTdHls
ZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChjc3NTdHlsZVNoZWV0LCBpbnNwZWN0b3JT
dHlsZVNoZWV0KTsKICAgICBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChkb2N1
bWVudCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hl
ZXQuZ2V0KCk7CiB9CiAKLUluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojph
c3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHN0eWxlU2hlZXRJZCkKK0luc3BlY3RvclN0eWxlU2hlZXQqIENTU0FnZW50Ojphc3NlcnRT
dHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXRJZCkKIHsKICAgICBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDo6aXRlcmF0b3IgaXQg
PSBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmZpbmQoc3R5bGVTaGVldElkKTsKICAgICBpZiAo
aXQgPT0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbmQoKSkgewpAQCAtODczLDcgKzg3Myw3
IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNo
ZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsK
IH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3BlY3Rv
ckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERv
Y3VtZW50KiBvd25lckRvY3VtZW50KQorSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luIENTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxl
U2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQogewogICAgIGF1dG8gb3JpZ2luID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpSZWd1bGFyOwogICAgIGlm
IChwYWdlU3R5bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VT
dHlsZVNoZWV0LT5ocmVmKCkuaXNFbXB0eSgpKQpAQCAtODg4LDcgKzg4OCw3IEBAIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0
ZWN0T3JpZ2luKENTU1N0CiAgICAgcmV0dXJuIG9yaWdpbjsKIH0KIAotUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yUnVsZShTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgRWxlbWVudCogZWxlbWVudCkKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1J1bGU+IENTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoU3R5bGVSdWxlKiBzdHlsZVJ1bGUs
IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAg
aWYgKCFzdHlsZVJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTAyLDcgKzkwMiw3
IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNT
U0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoCiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hl
ZXQgPyBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoY3Nzb21XcmFwcGVy
LCBlbGVtZW50KSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5
bGVSdWxlKiBydWxlKQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4g
Q1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAg
aWYgKCFydWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTkxMiw3ICs5MTIsNyBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKAogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8g
aW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUsIG51bGxwdHIpIDog
bnVsbHB0cjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJy
YXlGb3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiYgbWF0
Y2hlZFJ1bGVzLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBFbGVtZW50KiBlbGVtZW50
KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6UnVsZU1hdGNoPj4gQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3Qo
Y29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVzLCBTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIGF1dG8gcmVzdWx0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpS
dWxlTWF0Y2g+OjpjcmVhdGUoKTsKIApAQCAtOTQ1LDcgKzk0NSw3IEBAIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+
IEluc3BlY3RvCiAgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwogfQogCi1SZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKEVsZW1lbnQqIGVsZW1lbnQpCitSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0
cmlidXRlc1N0eWxlKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwog
ICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpKQpAQCAtOTYzLDcgKzk2Myw3IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NB
Z2VudDo6YnVpbGRPYmplY3RGb3JBdHRyCiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLT5idWls
ZE9iamVjdEZvclN0eWxlKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4+IEluc3BlY3RvckNTU0FnZW50Ojpi
dWlsZEFycmF5Rm9yUmVnaW9ucyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxOb2Rl
TGlzdD4mJiByZWdpb25MaXN0LCBpbnQgZG9jdW1lbnROb2RlSWQpCitSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+PiBDU1NB
Z2VudDo6YnVpbGRBcnJheUZvclJlZ2lvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQ
dHI8Tm9kZUxpc3Q+JiYgcmVnaW9uTGlzdCwgaW50IGRvY3VtZW50Tm9kZUlkKQogewogICAgIGF1
dG8gcmVnaW9ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UmVnaW9uPjo6Y3JlYXRlKCk7CiAKQEAgLTk5OSw3ICs5OTksNyBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdp
b24+PiBJbnNwZWN0b3JDUwogICAgIHJldHVybiBXVEY6Om1vdmUocmVnaW9ucyk7CiB9CiAKLVJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgV2Vi
S2l0TmFtZWRGbG93KiB3ZWJraXROYW1lZEZsb3csIGludCBkb2N1bWVudE5vZGVJZCkKK1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gQ1NTQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yTmFtZWRGbG93KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgV2ViS2l0TmFtZWRGbG93
KiB3ZWJraXROYW1lZEZsb3csIGludCBkb2N1bWVudE5vZGVJZCkKIHsKICAgICBSZWZQdHI8Tm9k
ZUxpc3Q+IGNvbnRlbnRMaXN0ID0gd2Via2l0TmFtZWRGbG93LT5nZXRDb250ZW50KCk7CiAgICAg
YXV0byBjb250ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7
CkBAIC0xMDE4LDEzICsxMDE4LDEzIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtCiAgICAgICAg
IC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURvY3Vt
ZW50KERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgQ1NTQWdlbnQ6OmRpZFJlbW92ZURvY3VtZW50
KERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBpZiAoZG9jdW1lbnQpCiAgICAgICAgIG1fZG9j
dW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGRvY3VtZW50KTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQordm9pZCBDU1NB
Z2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTA0MSw3ICsxMDQxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAgIG1fbm9kZVRvSW5zcGVjdG9yU3R5
bGVTaGVldC5yZW1vdmUobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZE1v
ZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgQ1NTQWdlbnQ6OmRpZE1vZGlmeURP
TUF0dHIoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEwNTMsMTMgKzEwNTMsMTMgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlk
TW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIGl0LT52YWx1ZS0+ZGlkTW9kaWZ5
RWxlbWVudEF0dHJpYnV0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdHlsZVNo
ZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQordm9pZCBDU1NBZ2Vu
dDo6c3R5bGVTaGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldCkKIHsK
ICAgICBpZiAobV9mcm9udGVuZERpc3BhdGNoZXIpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5zdHlsZVNoZWV0Q2hhbmdlZChzdHlsZVNoZWV0LT5pZCgpKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6cmVzZXRQc2V1ZG9TdGF0ZXMoKQordm9pZCBDU1NBZ2VudDo6cmVzZXRQ
c2V1ZG9TdGF0ZXMoKQogewogICAgIEhhc2hTZXQ8RG9jdW1lbnQqPiBkb2N1bWVudHNUb0NoYW5n
ZTsKICAgICBmb3IgKE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU6Oml0ZXJhdG9yIGl0ID0gbV9u
b2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmJlZ2luKCksIGVuZCA9IG1fbm9kZUlkVG9Gb3JjZWRQ
c2V1ZG9TdGF0ZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IGU0YTYwMzc5NTRjMWEyNzBjN2JjOGQ4
NTVhZmNiZWZlNzBmZmI3MTAuLjUxNDZiOGQzYWFlMmQzNTBiZGQ2NTBjNTVmNjg4ZjhmY2QzZGEx
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBA
IC00NCw2ICs0NCw3IEBAIGNsYXNzIENTU0Zyb250ZW5kRGlzcGF0Y2hlcjsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBDaGFuZ2VSZWdpb25PdmVyc2V0VGFzazsKIGNsYXNzIENTU1J1
bGU7CiBjbGFzcyBDU1NSdWxlTGlzdDsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CkBAIC01
OSwxNCArNjAsMTMgQEAgY2xhc3MgTm9kZTsKIGNsYXNzIE5vZGVMaXN0OwogY2xhc3MgU3R5bGVS
ZXNvbHZlcjsKIGNsYXNzIFN0eWxlUnVsZTsKLWNsYXNzIENoYW5nZVJlZ2lvbk92ZXJzZXRUYXNr
OwogCi1jbGFzcyBJbnNwZWN0b3JDU1NBZ2VudCBmaW5hbAotICAgIDogcHVibGljIEluc3BlY3Rv
ckFnZW50QmFzZQotICAgICwgcHVibGljIEluc3BlY3RvckRPTUFnZW50OjpET01MaXN0ZW5lcgor
Y2xhc3MgQ1NTQWdlbnQgZmluYWwKKyAgICA6IHB1YmxpYyBXZWJBZ2VudEJhc2UKKyAgICAsIHB1
YmxpYyBET01BZ2VudDo6RE9NTGlzdGVuZXIKICAgICAsIHB1YmxpYyBJbnNwZWN0b3I6OkNTU0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgogICAgICwgcHVibGljIEluc3BlY3RvclN0eWxlU2hlZXQ6
Okxpc3RlbmVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JDU1NBZ2VudCk7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIGNsYXNzIElubGluZVN0eWxlT3ZlcnJpZGVTY29wZSB7
CkBAIC04Niw4ICs4Niw4IEBAIHB1YmxpYzoKICAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5
KiBtX2NvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICB9OwogCi0gICAgSW5zcGVjdG9yQ1NTQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvckRPTUFnZW50Kik7Ci0gICAgdmlydHVh
bCB+SW5zcGVjdG9yQ1NTQWdlbnQoKTsKKyAgICBDU1NBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgRE9NQWdlbnQqKTsKKyAgICB2aXJ0dWFsIH5DU1NBZ2VudCgpOwogCiAgICAgc3RhdGljIENT
U1N0eWxlUnVsZSogYXNDU1NTdHlsZVJ1bGUoQ1NTUnVsZSYpOwogCkBAIC0xNTMsMTkgKzE1Mywx
OSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4+IGJ1aWxkQXJyYXlGb3JSZWdpb25zKEVycm9y
U3RyaW5nJiwgUmVmUHRyPE5vZGVMaXN0PiYmLCBpbnQgZG9jdW1lbnROb2RlSWQpOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gYnVpbGRPYmplY3RGb3JO
YW1lZEZsb3coRXJyb3JTdHJpbmcmLCBXZWJLaXROYW1lZEZsb3cqLCBpbnQgZG9jdW1lbnROb2Rl
SWQpOwogCi0gICAgLy8gSW5zcGVjdG9yRE9NQWdlbnQ6OkRPTUxpc3RlbmVyIGltcGxlbWVudGF0
aW9uCisgICAgLy8gRE9NQWdlbnQ6OkRPTUxpc3RlbmVyIGltcGxlbWVudGF0aW9uCiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlbW92ZURvY3VtZW50KERvY3VtZW50Kikgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqKSBvdmVycmlkZTsKIAotICAgIC8vIEluc3Bl
Y3RvckNTU0FnZW50OjpMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbgorICAgIC8vIENTU0FnZW50OjpM
aXN0ZW5lciBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVNoZWV0Q2hhbmdl
ZChJbnNwZWN0b3JTdHlsZVNoZWV0Kikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHJlc2V0UHNldWRv
U3RhdGVzKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpDU1NGcm9udGVuZERp
c3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkNT
U0JhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotICAgIEluc3BlY3RvckRP
TUFnZW50KiBtX2RvbUFnZW50OworICAgIERPTUFnZW50KiBtX2RvbUFnZW50OwogCiAgICAgSWRU
b0luc3BlY3RvclN0eWxlU2hlZXQgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICBDU1NT
dHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0IG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9y
U3R5bGVTaGVldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcAppbmRleCBhMTliYTRhOTlhMzliODE1YzlkM2JmMWVhYmJiMTQ5NWQ0YzA0Zjdj
Li5kNDIyMjZjYWZhZjIwZWU5OWU3YWE4NGNiNzVjMTI0NTY0MzJhOWIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xMDQsOCAr
MTA0LDggQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlJiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMtPnNldEluc3BlY3RvckFnZW50KG1faW5zcGVjdG9yQWdlbnQpOwogICAgIG1fYWdlbnRzLmFw
cGVuZChXVEY6Om1vdmUoaW5zcGVjdG9yQWdlbnRQdHIpKTsKIAotICAgIGF1dG8gcGFnZUFnZW50
UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JQYWdlQWdlbnQ+KG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5nZXQoKSwgJnBhZ2UsIGluc3BlY3RvckNsaWVudCwgbV9vdmVybGF5LmdldCgpKTsK
LSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IHBhZ2VBZ2VudFB0ci5nZXQoKTsK
KyAgICBhdXRvIHBhZ2VBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8UGFnZUFnZW50PihtX2lu
c3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksICZwYWdlLCBpbnNwZWN0b3JDbGllbnQsIG1fb3Zlcmxh
eS5nZXQoKSk7CisgICAgUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7
CiAgICAgbV9wYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBw
ZW5kKFdURjo6bW92ZShwYWdlQWdlbnRQdHIpKTsKIApAQCAtMTE0LDMzICsxMTQsMzMgQEAgSW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlJiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFBhZ2VS
dW50aW1lQWdlbnQocnVudGltZUFnZW50KTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3Zl
KHJ1bnRpbWVBZ2VudFB0cikpOwogCi0gICAgYXV0byBkb21BZ2VudFB0ciA9IHN0ZDo6bWFrZV91
bmlxdWU8SW5zcGVjdG9yRE9NQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFn
ZUFnZW50LCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgbV9vdmVybGF5LmdldCgpKTsK
KyAgICBhdXRvIGRvbUFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxET01BZ2VudD4obV9pbnN0
cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmdldCgpLCBtX292ZXJsYXkuZ2V0KCkpOwogICAgIG1fZG9tQWdlbnQgPSBkb21BZ2VudFB0ci5n
ZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKGRvbUFnZW50UHRyKSk7CiAKLSAg
ICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JDU1NBZ2VudD4obV9p
bnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX2RvbUFnZW50KSk7CisgICAgbV9hZ2VudHMuYXBw
ZW5kKHN0ZDo6bWFrZV91bmlxdWU8Q1NTQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQo
KSwgbV9kb21BZ2VudCkpOwogCi0gICAgYXV0byBkYXRhYmFzZUFnZW50UHRyID0gc3RkOjptYWtl
X3VuaXF1ZTxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0
KCkpOwotICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGRhdGFiYXNlQWdlbnQgPSBkYXRhYmFz
ZUFnZW50UHRyLmdldCgpOworICAgIGF1dG8gZGF0YWJhc2VBZ2VudFB0ciA9IHN0ZDo6bWFrZV91
bmlxdWU8RGF0YWJhc2VBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpKTsKKyAgICBE
YXRhYmFzZUFnZW50KiBkYXRhYmFzZUFnZW50ID0gZGF0YWJhc2VBZ2VudFB0ci5nZXQoKTsKICAg
ICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKGRhdGFiYXNlQWdlbnRQdHIpKTsKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5p
cXVlPEluc3BlY3RvckluZGV4ZWREQkFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCks
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBwYWdlQWdlbnQpKTsKKyAgICBtX2FnZW50
cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbmRleGVkREJBZ2VudD4obV9pbnN0cnVtZW50aW5n
QWdlbnRzLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgcGFnZUFnZW50KSk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIG1fYWdlbnRzLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclJlcGxheUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZ2V0KCksIHBhZ2VBZ2VudCkpOworICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5p
cXVlPFJlcGxheUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2VBZ2VudCkp
OwogI2VuZGlmCiAKLSAgICBhdXRvIGRvbVN0b3JhZ2VBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlx
dWU8SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCks
IG1fcGFnZUFnZW50KTsKLSAgICBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQqIGRvbVN0b3JhZ2VB
Z2VudCA9IGRvbVN0b3JhZ2VBZ2VudFB0ci5nZXQoKTsKKyAgICBhdXRvIGRvbVN0b3JhZ2VBZ2Vu
dFB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8RE9NU3RvcmFnZUFnZW50PihtX2luc3RydW1lbnRpbmdB
Z2VudHMuZ2V0KCksIG1fcGFnZUFnZW50KTsKKyAgICBET01TdG9yYWdlQWdlbnQqIGRvbVN0b3Jh
Z2VBZ2VudCA9IGRvbVN0b3JhZ2VBZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQo
V1RGOjptb3ZlKGRvbVN0b3JhZ2VBZ2VudFB0cikpOwogCi0gICAgYXV0byB0aW1lbGluZUFnZW50
UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JUaW1lbGluZUFnZW50PihtX2luc3RydW1l
bnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2VBZ2VudCwgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6UGFn
ZUluc3BlY3RvciwgaW5zcGVjdG9yQ2xpZW50KTsKKyAgICBhdXRvIHRpbWVsaW5lQWdlbnRQdHIg
PSBzdGQ6Om1ha2VfdW5pcXVlPFRpbWVsaW5lQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5n
ZXQoKSwgcGFnZUFnZW50LCBUaW1lbGluZUFnZW50OjpQYWdlSW5zcGVjdG9yLCBpbnNwZWN0b3JD
bGllbnQpOwogICAgIG1fdGltZWxpbmVBZ2VudCA9IHRpbWVsaW5lQWdlbnRQdHIuZ2V0KCk7CiAg
ICAgbV9hZ2VudHMuYXBwZW5kKFdURjo6bW92ZSh0aW1lbGluZUFnZW50UHRyKSk7CiAKLSAgICBh
dXRvIHJlc291cmNlQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclJlc291cmNl
QWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBpbnNwZWN0b3JD
bGllbnQpOworICAgIGF1dG8gcmVzb3VyY2VBZ2VudFB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8UmVz
b3VyY2VBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIGluc3Bl
Y3RvckNsaWVudCk7CiAgICAgbV9yZXNvdXJjZUFnZW50ID0gcmVzb3VyY2VBZ2VudFB0ci5nZXQo
KTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKHJlc291cmNlQWdlbnRQdHIpKTsKIApA
QCAtMTUzLDEzICsxNTMsMTMgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcihQYWdlJiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2RlYnVn
Z2VyQWdlbnQgPSBkZWJ1Z2dlckFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChX
VEY6Om1vdmUoZGVidWdnZXJBZ2VudFB0cikpOwogCi0gICAgYXV0byBkb21EZWJ1Z2dlckFnZW50
UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50PihtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fZG9tQWdlbnQsIG1fZGVidWdnZXJBZ2VudCk7CisgICAg
YXV0byBkb21EZWJ1Z2dlckFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxET01EZWJ1Z2dlckFn
ZW50PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fZG9tQWdlbnQsIG1fZGVidWdnZXJB
Z2VudCk7CiAgICAgbV9kb21EZWJ1Z2dlckFnZW50ID0gZG9tRGVidWdnZXJBZ2VudFB0ci5nZXQo
KTsKICAgICBtX2FnZW50cy5hcHBlbmQoV1RGOjptb3ZlKGRvbURlYnVnZ2VyQWdlbnRQdHIpKTsK
IAotICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQpKTsK
LSAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JXb3JrZXJBZ2Vu
dD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpKSk7Ci0gICAgbV9hZ2VudHMuYXBwZW5kKHN0
ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5nZXQoKSkpOworICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQp
KTsKKyAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxXb3JrZXJBZ2VudD4obV9p
bnN0cnVtZW50aW5nQWdlbnRzLmdldCgpKSk7CisgICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFr
ZV91bmlxdWU8TGF5ZXJUcmVlQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSkpOwog
CiAgICAgQVNTRVJUKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5jb21tYW5kTGluZUFQSUhvc3Qo
KSk7CiAgICAgaWYgKENvbW1hbmRMaW5lQVBJSG9zdCogY29tbWFuZExpbmVBUElIb3N0ID0gbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXItPmNvbW1hbmRMaW5lQVBJSG9zdCgpKSB7CkBAIC0zODEsNyAr
MzgxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5k
aWNhdGluZykKIAogYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9maWxlckVuYWJsZWQoKSBj
b25zdAogewotICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnBlcnNpc3RlbnRJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KCk7CisgICAgcmV0dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+
cGVyc2lzdGVudFRpbWVsaW5lQWdlbnQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRQcm9maWxlckVuYWJsZWQoYm9vbCBlbmFibGUpCkBAIC0zODksMTAgKzM4OSwxMCBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFByb2ZpbGVyRW5hYmxlZChib29sIGVuYWJsZSkK
ICAgICBFcnJvclN0cmluZyB1bnVzZWQ7CiAKICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0UGVyc2lzdGVudEluc3BlY3RvclRpbWVsaW5lQWdlbnQo
bV90aW1lbGluZUFnZW50KTsKKyAgICAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRQZXJz
aXN0ZW50VGltZWxpbmVBZ2VudChtX3RpbWVsaW5lQWdlbnQpOwogICAgICAgICBtX3RpbWVsaW5l
QWdlbnQtPnN0YXJ0KHVudXNlZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLT5zZXRQZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxpbmVBZ2VudChudWxscHRyKTsK
KyAgICAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRQZXJzaXN0ZW50VGltZWxpbmVBZ2Vu
dChudWxscHRyKTsKICAgICAgICAgbV90aW1lbGluZUFnZW50LT5zdG9wKHVudXNlZCk7CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgK
aW5kZXggNWM0MzA3MWZlZjc0ODE5MGExMDRjYTFlZDhjYmE2Mjk1YjJiMTFiZS4uNzk2Mzk1MzVh
NjBmZWY5ZWYxNjUxM2U3ZDIwNjZjZmZkNWQzMGI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC02MCwxNyArNjAsMTcgQEAgY2xhc3Mg
RE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBj
bGFzcyBJbnNwZWN0b3JDbGllbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKLWNsYXNzIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ7CitjbGFzcyBET01BZ2VudDsKK2NsYXNzIERPTURlYnVn
Z2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjsKLWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKLWNsYXNzIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwogY2xhc3Mg
SW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOworY2xhc3MgUGFn
ZUFnZW50OwogY2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQ7CitjbGFzcyBSZXNvdXJjZUFnZW50Owor
Y2xhc3MgVGltZWxpbmVBZ2VudDsKIGNsYXNzIFdlYkluamVjdGVkU2NyaXB0TWFuYWdlcjsKIAog
Y2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvckVudmlyb25tZW50IHsKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZXN1bWUoKTsKIAogICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnNwZWN0b3JDbGllbnQ7IH0KLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIHBh
Z2VBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUFnZW50OyB9CisgICAgUGFnZUFnZW50KiBw
YWdlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VBZ2VudDsgfQogCiAgICAgdmlydHVhbCBi
b29sIGRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoSlNDOjpFeGVjU3RhdGUqKSBjb25z
dCBvdmVycmlkZTsKQEAgLTE0NSwxMiArMTQ1LDEyIEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEluc3BlY3Rvck92ZXJsYXk+IG1fb3ZlcmxheTsKIAogICAgIEluc3BlY3Rvcjo6SW5z
cGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1f
ZG9tQWdlbnQ7Ci0gICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogbV9yZXNvdXJjZUFnZW50Owot
ICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CisgICAgRE9NQWdlbnQqIG1fZG9t
QWdlbnQ7CisgICAgUmVzb3VyY2VBZ2VudCogbV9yZXNvdXJjZUFnZW50OworICAgIFBhZ2VBZ2Vu
dCogbV9wYWdlQWdlbnQ7CiAgICAgUGFnZURlYnVnZ2VyQWdlbnQqIG1fZGVidWdnZXJBZ2VudDsK
LSAgICBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBtX2RvbURlYnVnZ2VyQWdlbnQ7Ci0gICAg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudCogbV90aW1lbGluZUFnZW50OworICAgIERPTURlYnVnZ2Vy
QWdlbnQqIG1fZG9tRGVidWdnZXJBZ2VudDsKKyAgICBUaW1lbGluZUFnZW50KiBtX3RpbWVsaW5l
QWdlbnQ7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKICAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogbV9mcm9udGVu
ZENoYW5uZWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAppbmRleCAwYjhmOTQxYjAyMGQyODg5YTY1YjlkOGQxNjcwN2NjZjljYTBmZmVmLi43MDA0
M2Q1OTZkZTY0MjVmNDM1NzEyNTg0NGJiNmIzZGY4YjgxN2I3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTE1NywxOCArMTU3LDE4IEBA
IHN0YXRpYyBib29sIHBhcnNlUXVhZChjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBxdWFk
QXJyYXksIEZsb2F0UXVhZCogcXVhZCkKIGNsYXNzIFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRh
c2sgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFJldmFsaWRh
dGVTdHlsZUF0dHJpYnV0ZVRhc2soSW5zcGVjdG9yRE9NQWdlbnQqKTsKKyAgICBSZXZhbGlkYXRl
U3R5bGVBdHRyaWJ1dGVUYXNrKERPTUFnZW50Kik7CiAgICAgdm9pZCBzY2hlZHVsZUZvcihFbGVt
ZW50Kik7CiAgICAgdm9pZCByZXNldCgpIHsgbV90aW1lci5zdG9wKCk7IH0KICAgICB2b2lkIHRp
bWVyRmlyZWQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JET01BZ2VudCogbV9kb21BZ2Vu
dDsKKyAgICBET01BZ2VudCogbV9kb21BZ2VudDsKICAgICBUaW1lciBtX3RpbWVyOwogICAgIEhh
c2hTZXQ8UmVmUHRyPEVsZW1lbnQ+PiBtX2VsZW1lbnRzOwogfTsKIAotUmV2YWxpZGF0ZVN0eWxl
QXR0cmlidXRlVGFzazo6UmV2YWxpZGF0ZVN0eWxlQXR0cmlidXRlVGFzayhJbnNwZWN0b3JET01B
Z2VudCogZG9tQWdlbnQpCitSZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNrOjpSZXZhbGlkYXRl
U3R5bGVBdHRyaWJ1dGVUYXNrKERPTUFnZW50KiBkb21BZ2VudCkKICAgICA6IG1fZG9tQWdlbnQo
ZG9tQWdlbnQpCiAgICAgLCBtX3RpbWVyKCp0aGlzLCAmUmV2YWxpZGF0ZVN0eWxlQXR0cmlidXRl
VGFzazo6dGltZXJGaXJlZCkKIHsKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIFJldmFsaWRhdGVT
dHlsZUF0dHJpYnV0ZVRhc2s6OnRpbWVyRmlyZWQoKQogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsK
IH0KIAotU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2Vw
dGlvbkNvZGUmIGVjKQorU3RyaW5nIERPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIGlmIChlYykgewogICAgICAgICBFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwpAQCAtMjAxLDggKzIwMSw4IEBAIFN0cmluZyBJbnNw
ZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICByZXR1cm4gIiI7CiB9CiAKLUluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdl
bnQqIHBhZ2VBZ2VudCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2Uo
QVNDSUlMaXRlcmFsKCJET00iKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKK0RPTUFnZW50OjpET01B
Z2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlQWdlbnQq
IHBhZ2VBZ2VudCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCisgICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRl
cmFsKCJET00iKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VB
Z2VudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdl
cikKICAgICAsIG1fb3ZlcmxheShvdmVybGF5KQpAQCAtMjE1LDEzICsyMTUsMTMgQEAgSW5zcGVj
dG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIEkKIHsKIH0KIAotSW5zcGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JE
T01BZ2VudCgpCitET01BZ2VudDo6fkRPTUFnZW50KCkKIHsKICAgICByZXNldCgpOwogICAgIEFT
U0VSVCghbV9zZWFyY2hpbmdGb3JOb2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBm
cm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKQordm9pZCBET01BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3I6OkRPTUZyb250ZW5kRGlzcGF0Y2hlcj4o
ZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yOjpE
T01CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKQEAg
LTIyOSwxNCArMjI5LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCoKICAgICBtX2hpc3Rvcnkg
PSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvckhpc3Rvcnk+KCk7CiAgICAgbV9kb21FZGl0b3Ig
PSBzdGQ6Om1ha2VfdW5pcXVlPERPTUVkaXRvcj4obV9oaXN0b3J5LmdldCgpKTsKIAotICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yRE9NQWdlbnQodGhpcyk7CisgICAgbV9p
bnN0cnVtZW50aW5nQWdlbnRzLT5zZXRET01BZ2VudCh0aGlzKTsKICAgICBtX2RvY3VtZW50ID0g
bV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKG1fbm9kZVRv
Rm9jdXMpCiAgICAgICAgIGZvY3VzTm9kZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFz
b24pCit2b2lkIERPTUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxs
cHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKQEAgLTI0OCwxMiArMjQ4LDEy
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvCiAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZSh1bnVz
ZWQsIGZhbHNlLCAwKTsKICAgICBoaWRlSGlnaGxpZ2h0KHVudXNlZCk7CiAKLSAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckRPTUFnZW50KDApOworICAgIG1faW5zdHJ1bWVu
dGluZ0FnZW50cy0+c2V0RE9NQWdlbnQoMCk7CiAgICAgbV9kb2N1bWVudFJlcXVlc3RlZCA9IGZh
bHNlOwogICAgIHJlc2V0KCk7CiB9CiAKLVZlY3RvcjxEb2N1bWVudCo+IEluc3BlY3RvckRPTUFn
ZW50Ojpkb2N1bWVudHMoKQorVmVjdG9yPERvY3VtZW50Kj4gRE9NQWdlbnQ6OmRvY3VtZW50cygp
CiB7CiAgICAgVmVjdG9yPERvY3VtZW50Kj4gcmVzdWx0OwogICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgewpAQCAtMjY1LDcgKzI2NSw3IEBAIFZlY3RvcjxEb2N1bWVudCo+IEluc3Bl
Y3RvckRPTUFnZW50Ojpkb2N1bWVudHMoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkKK3ZvaWQgRE9NQWdlbnQ6OnJlc2V0KCkKIHsKICAg
ICBpZiAobV9oaXN0b3J5KQogICAgICAgICBtX2hpc3RvcnktPnJlc2V0KCk7CkBAIC0yNzYsMTIg
KzI3NiwxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNldCgpCiAgICAgbV9kb2N1bWVu
dCA9IDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldERPTUxpc3RlbmVyKERPTUxp
c3RlbmVyKiBsaXN0ZW5lcikKK3ZvaWQgRE9NQWdlbnQ6OnNldERPTUxpc3RlbmVyKERPTUxpc3Rl
bmVyKiBsaXN0ZW5lcikKIHsKICAgICBtX2RvbUxpc3RlbmVyID0gbGlzdGVuZXI7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldERvY3VtZW50KERvY3VtZW50KiBkb2MpCit2b2lkIERP
TUFnZW50OjpzZXREb2N1bWVudChEb2N1bWVudCogZG9jKQogewogICAgIGlmIChkb2MgPT0gbV9k
b2N1bWVudC5nZXQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjk4LDEyICsyOTgsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0RG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKICAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRvY3VtZW50VXBkYXRlZCgpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpyZWxlYXNlRGFuZ2xpbmdOb2RlcygpCit2b2lkIERPTUFnZW50OjpyZWxl
YXNlRGFuZ2xpbmdOb2RlcygpCiB7CiAgICAgbV9kYW5nbGluZ05vZGVUb0lkTWFwcy5jbGVhcigp
OwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRN
YXAqIG5vZGVzTWFwKQoraW50IERPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFw
KiBub2Rlc01hcCkKIHsKICAgICBpbnQgaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUpOwogICAgIGlm
IChpZCkKQEAgLTMxNSw3ICszMTUsNyBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmQoTm9k
ZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgIHJldHVybiBpZDsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCkKK3ZvaWQgRE9NQWdlbnQ6OnVuYmluZChOb2RlKiBub2RlLCBOb2RlVG9JZE1hcCogbm9k
ZXNNYXApCiB7CiAgICAgaW50IGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAoIWlk
KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiAgICAgfQogfQogCi1Ob2RlKiBJbnNwZWN0
b3JET01BZ2VudDo6YXNzZXJ0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQpCitOb2RlKiBET01BZ2VudDo6YXNzZXJ0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAg
IGlmICghbm9kZSkgewpAQCAtMzYzLDcgKzM2Myw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50
Ojphc3NlcnROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICBy
ZXR1cm4gbm9kZTsKIH0KIAotRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitEb2N1bWVudCogRE9N
QWdlbnQ6OmFzc2VydERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCkKIHsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsK
ICAgICBpZiAoIW5vZGUpCkBAIC0zNzUsNyArMzc1LDcgQEAgRG9jdW1lbnQqIEluc3BlY3RvckRP
TUFnZW50Ojphc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQKICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpOwogfQogCi1FbGVtZW50KiBJ
bnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQpCitFbGVtZW50KiBET01BZ2VudDo6YXNzZXJ0RWxlbWVudChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5v
ZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMzg3LDcgKzM4Nyw3
IEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFbGVtZW50KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4o
bm9kZSk7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSogRE9NQWdlbnQ6OmFz
c2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFub2RlKQpAQCAtMzk5LDcgKzM5OSw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojph
c3NlcnRFZGl0YWJsZU5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkCiAg
ICAgcmV0dXJuIG5vZGU7CiB9CiAKLUVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRF
ZGl0YWJsZUVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorRWxl
bWVudCogRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBub2RlSWQpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVsZW1l
bnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtNDExLDcgKzQx
MSw3IEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZUVsZW1lbnQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RG9jdW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiYgcm9vdCkKK3ZvaWQg
RE9NQWdlbnQ6OmdldERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4mIHJvb3QpCiB7CiAgICAgbV9kb2N1bWVudFJl
cXVlc3RlZCA9IHRydWU7CiAKQEAgLTQyOCw3ICs0MjgsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0
b3I6OgogICAgIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwg
Jm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1
c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGgpCit2b2lkIERPTUFn
ZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50IG5vZGVJZCwgaW50IGRlcHRoKQogewog
ICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUgfHwgKG5v
ZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkg
IT0gTm9kZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VN
RU5UX0ZSQUdNRU5UX05PREUpKQpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGgpCiAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMobm9kZUlkLCBjaGlsZHJlbi5y
ZWxlYXNlKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkQmluZGluZ3Mo
KQordm9pZCBET01BZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKIHsKICAgICBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuY2xlYXIoKTsKICAgICBtX2lkVG9Ob2RlLmNsZWFyKCk7CkBAIC00NjUsNyArNDY1
LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKICAgICBtX25v
ZGVHcm91cFRvQmFja2VuZElkTWFwLmNsZWFyKCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2Vu
dDo6cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3Vt
ZW50Tm9kZUlkLCBOb2RlKiBub2RlVG9QdXNoKQoraW50IERPTUFnZW50OjpwdXNoTm9kZVRvRnJv
bnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUq
IG5vZGVUb1B1c2gpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQo
ZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAgICBpZiAoIWRvY3VtZW50KQpAQCAtNDc4
LDcgKzQ3OCw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250ZW5kKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3VtZW50CiAgICAgcmV0dXJuIHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQobm9kZVRvUHVzaCk7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50
Ojpub2RlRm9ySWQoaW50IGlkKQorTm9kZSogRE9NQWdlbnQ6Om5vZGVGb3JJZChpbnQgaWQpCiB7
CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00ODksNyArNDg5LDcgQEAgTm9k
ZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZChpbnQgaWQpCiAgICAgcmV0dXJuIDA7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgaW50KiBkZXB0aCkKK3ZvaWQgRE9NQWdl
bnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgY29uc3QgaW50KiBkZXB0aCkKIHsKICAgICBpbnQgc2FuaXRpemVkRGVwdGg7CiAKQEAgLTUw
Nyw3ICs1MDcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXF1ZXN0Q2hpbGROb2RlcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsCiAgICAgcHVzaENoaWxkTm9kZXNU
b0Zyb250ZW5kKG5vZGVJZCwgc2FuaXRpemVkRGVwdGgpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpxdWVyeVNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIGludCogZWxlbWVudElkKQordm9pZCBET01BZ2Vu
dDo6cXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3JzLCBpbnQqIGVsZW1lbnRJZCkKIHsKICAgICAqZWxlbWVudElk
ID0gMDsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsK
QEAgLTUyOSw3ICs1MjksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9y
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29ucwogICAgICAgICAqZWxl
bWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlbGVtZW50LmdldCgpKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mIHJlc3VsdCkKK3ZvaWQgRE9NQWdlbnQ6OnF1ZXJ5
U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIHNlbGVjdG9ycywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+
JiByZXN1bHQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5v
ZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNTUyLDcgKzU1Miw3IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBjCiAgICAgICAgIHJlc3VsdC0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KG5vZGVzLT5pdGVtKGkpKSk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQoraW50IERPTUFnZW50OjpwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgQVNTRVJUKG5vZGVUb1B1c2gp
OyAgLy8gSW52YWxpZCBpbnB1dAogCkBAIC01OTksMTIgKzU5OSwxMiBAQCBpbnQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkKICAgICBy
ZXR1cm4gbWFwLT5nZXQobm9kZVRvUHVzaCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6
Ym91bmROb2RlSWQoTm9kZSogbm9kZSkKK2ludCBET01BZ2VudDo6Ym91bmROb2RlSWQoTm9kZSog
bm9kZSkKIHsKICAgICByZXR1cm4gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChub2RlKTsKIH0K
IAotQmFja2VuZE5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6YmFja2VuZE5vZGVJZEZvck5vZGUo
Tm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBub2RlR3JvdXApCitCYWNrZW5kTm9kZUlkIERPTUFn
ZW50OjpiYWNrZW5kTm9kZUlkRm9yTm9kZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG5vZGVH
cm91cCkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjIzLDcgKzYy
Myw3IEBAIEJhY2tlbmROb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmJhY2tlbmROb2RlSWRGb3JO
b2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gaWQ7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbGVhc2VCYWNrZW5kTm9kZUlkcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgbm9kZUdyb3VwKQordm9pZCBET01BZ2VudDo6cmVsZWFz
ZUJhY2tlbmROb2RlSWRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBu
b2RlR3JvdXApCiB7CiAgICAgaWYgKG1fbm9kZUdyb3VwVG9CYWNrZW5kSWRNYXAuY29udGFpbnMo
bm9kZUdyb3VwKSkgewogICAgICAgICBOb2RlVG9CYWNrZW5kSWRNYXAmIG1hcCA9IG1fbm9kZUdy
b3VwVG9CYWNrZW5kSWRNYXAuZmluZChub2RlR3JvdXApLT52YWx1ZTsKQEAgLTYzNSw3ICs2MzUs
NyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWxlYXNlQmFja2VuZE5vZGVJZHMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdAogICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRl
cmFsKCJHcm91cCBuYW1lIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgRE9NQWdl
bnQ6OnNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1l
bnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIGVsZW1l
bnRJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtNjQ0LDcgKzY0NCw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IGVsZW1lbnRJCiAgICAgbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1l
LCB2YWx1ZSwgZXJyb3JTdHJpbmcpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRB
dHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1lbnRJZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcqIGNvbnN0IG5hbWUpCit2b2lkIERPTUFn
ZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVs
ZW1lbnRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcqIGNvbnN0IG5hbWUpCiB7
CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmlu
ZywgZWxlbWVudElkKTsKICAgICBpZiAoIWVsZW1lbnQpCkBAIC02NTQsNyArNjU0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBlbGVtZW4KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBwYXJz
ZWRFbGVtZW50LmdldCgpLT5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+
IiwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBlcnJvclN0cmluZyA9IEluc3BlY3RvckRP
TUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSBET01BZ2Vu
dDo6dG9FcnJvclN0cmluZyhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY4Miw3
ICs2ODIsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1lbgogICAgICAgICBtX2RvbUVkaXRvci0+
cmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsICpuYW1lLCBlcnJvclN0cmluZyk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgRE9NQWdlbnQ6OnJl
bW92ZUF0dHJpYnV0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFi
bGVFbGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOwogICAgIGlmICghZWxlbWVudCkKQEAg
LTY5MSw3ICs2OTEsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVBdHRyaWJ1dGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLAogICAgIG1fZG9tRWRpdG9y
LT5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcpOwogfQogCi12b2lk
IEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCkKK3ZvaWQgRE9NQWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBpbnQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5v
ZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNzA2LDcgKzcwNiw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBpbnQgbm9kZUlkKQogICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZChwYXJlbnRO
b2RlLCBub2RlLCBlcnJvclN0cmluZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dE5vZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3Ry
aW5nJiB0YWdOYW1lLCBpbnQqIG5ld0lkKQordm9pZCBET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUs
IGludCogbmV3SWQpCiB7CiAgICAgKm5ld0lkID0gMDsKIApAQCAtNzQxLDcgKzc0MSw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QKICAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKCpu
ZXdJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91dGVySFRNTChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFdURjo6U3RyaW5nKiBvdXRlckhUTUwpCit2
b2lkIERPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3Nl
cnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTc1MCw3ICs3
NTAsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6OgogICAgICpvdXRlckhUTUwgPSBjcmVhdGVN
YXJrdXAoKm5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVy
SFRNTCkKK3ZvaWQgRE9NQWdlbnQ6OnNldE91dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKQogewogICAgIGlmICghbm9k
ZUlkKSB7CiAgICAgICAgIERPTVBhdGNoU3VwcG9ydCBkb21QYXRjaFN1cHBvcnQobV9kb21FZGl0
b3IuZ2V0KCksIG1fZG9jdW1lbnQuZ2V0KCkpOwpAQCAtNzg0LDcgKzc4NCw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQsIGNvbnN0CiAgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChuZXdJZCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIERPTUFn
ZW50OjpzZXROb2RlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5v
ZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNzk4LDcgKzc5OCw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0CiAgICAgbV9kb21FZGl0b3ItPnJlcGxhY2VXaG9s
ZVRleHQoZG93bmNhc3Q8VGV4dD4obm9kZSksIHZhbHVlLCBlcnJvclN0cmluZyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkV2ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpCit2b2lkIERPTUFnZW50OjpnZXRFdmVu
dExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBj
b25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4mIGxpc3RlbmVyc0Fy
cmF5KQogewogICAgIGxpc3RlbmVyc0FycmF5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPjo6Y3JlYXRlKCk7CiAgICAg
Tm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CkBAIC04MzEsNyAr
ODMxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzKE5vZGUqIG5vZGUsIFZlY3RvcjxFdmVudExp
c3RlbmVySW5mbz4mIGV2ZW50SW5mb3JtYXRpb24sIGJvb2wgaW5jbHVkZUFuY2VzdG9ycykKK3Zv
aWQgRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzKE5vZGUqIG5vZGUsIFZlY3RvcjxFdmVudExp
c3RlbmVySW5mbz4mIGV2ZW50SW5mb3JtYXRpb24sIGJvb2wgaW5jbHVkZUFuY2VzdG9ycykKIHsK
ICAgICAvLyBUaGUgTm9kZSdzIEFuY2VzdG9ycyBpbmNsdWRpbmcgc2VsZi4KICAgICBWZWN0b3I8
Tm9kZSo+IGFuY2VzdG9yczsKQEAgLTg2NSw3ICs4NjUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpnZXRFdmVudExpc3RlbmVycyhOb2RlKiBub2RlLCBWZWN0b3I8RXZlbnRMaXN0ZW5lcklu
Zm8+JgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+
JiBheFByb3BlcnRpZXMpCit2b2lkIERPTUFnZW50OjpnZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGll
c0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4mIGF4UHJvcGVy
dGllcykKIHsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCkBAIC04NzQsNyArODc0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6Z2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmkKICAgICBheFByb3BlcnRpZXMgPSBidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzKG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNo
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1l
ZFF1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiYgbm9kZUlkcywgU3RyaW5nKiBz
ZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkKK3ZvaWQgRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2go
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVk
UXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBub2RlSWRzLCBTdHJpbmcqIHNl
YXJjaElkLCBpbnQqIHJlc3VsdENvdW50KQogewogICAgIC8vIEZJWE1FOiBTZWFyY2ggd29ya3Mg
d2l0aCBub2RlIGdyYW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMg
bm90IGNhbGN1bGF0ZWQuCiAgICAgSW5zcGVjdG9yTm9kZUZpbmRlciBmaW5kZXIod2hpdGVzcGFj
ZVRyaW1tZWRRdWVyeSk7CkBAIC05MTQsNyArOTE0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
d2gKICAgICAqcmVzdWx0Q291bnQgPSByZXN1bHRzVmVjdG9yLnNpemUoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgsIGludCB0b0luZGV4LCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mIG5vZGVJZHMpCit2b2lkIERP
TUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYgbm9kZUlkcykKIHsKICAgICBTZWFyY2hSZXN1
bHRzOjppdGVyYXRvciBpdCA9IG1fc2VhcmNoUmVzdWx0cy5maW5kKHNlYXJjaElkKTsKICAgICBp
ZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKSB7CkBAIC05MzMsMTIgKzkzMywxMiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJgogICAgICAgICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoKGl0LT52YWx1ZSlbaV0uZ2V0KCkpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHNlYXJjaElkKQordm9pZCBET01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKQogewogICAgIG1fc2VhcmNoUmVzdWx0cy5y
ZW1vdmUoc2VhcmNoSWQpOwogfQogCi1ib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVNb3Vz
ZVByZXNzKCkKK2Jvb2wgRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQogewogICAgIGlmICgh
bV9zZWFyY2hpbmdGb3JOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05NTAsNyArOTUw
LDcgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlTW91c2VQcmVzcygpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVUb3VjaEV2ZW50
KE5vZGUmIG5vZGUpCitib29sIERPTUFnZW50OjpoYW5kbGVUb3VjaEV2ZW50KE5vZGUmIG5vZGUp
CiB7CiAgICAgaWYgKCFtX3NlYXJjaGluZ0Zvck5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTk2Miw3ICs5NjIsNyBAQCBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVUb3VjaEV2
ZW50KE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUpCit2b2lkIERPTUFnZW50OjppbnNw
ZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUpCiB7CiAgICAgRXJyb3JTdHJpbmcgdW51c2VkOwogICAg
IFJlZlB0cjxOb2RlPiBub2RlID0gaW5zcGVjdGVkTm9kZTsKQEAgLTk3NSw3ICs5NzUsNyBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUpCiAgICAg
Zm9jdXNOb2RlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzTm9kZSgpCit2
b2lkIERPTUFnZW50Ojpmb2N1c05vZGUoKQogewogICAgIGlmICghbV9mcm9udGVuZERpc3BhdGNo
ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTk5NCwxMCArOTk0LDEwIEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmZvY3VzTm9kZSgpCiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW5qZWN0ZWRTY3JpcHQuaW5zcGVjdE9iamVjdChJ
bnNwZWN0b3JET01BZ2VudDo6bm9kZUFzU2NyaXB0VmFsdWUoc2NyaXB0U3RhdGUsIG5vZGUuZ2V0
KCkpKTsKKyAgICBpbmplY3RlZFNjcmlwdC5pbnNwZWN0T2JqZWN0KERPTUFnZW50Ojpub2RlQXNT
Y3JpcHRWYWx1ZShzY3JpcHRTdGF0ZSwgbm9kZS5nZXQoKSkpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIHVuc2lnbmVkKQordm9pZCBET01BZ2VudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKIHsKICAgICBpZiAoIW1fc2Vh
cmNoaW5nRm9yTm9kZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAwOSw3ICsxMDA5LDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCB1bnMKICAgICAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlKG5v
ZGUsICptX2luc3BlY3RNb2RlSGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJv
b2wgZW5hYmxlZCwgSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCit2
b2lkIERPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodEluc3BlY3Rvck9iamVj
dCkKIHsKICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNl
YXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsCiAgICAg
bV9vdmVybGF5LT5kaWRTZXRTZWFyY2hpbmdGb3JOb2RlKG1fc2VhcmNoaW5nRm9yTm9kZSk7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCitzdGQ6OnVuaXF1
ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3Bl
Y3Rvck9iamVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvck9iamVjdCogaGln
aGxpZ2h0SW5zcGVjdG9yT2JqZWN0KQogewogICAgIGlmICghaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJv
cjogaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGlzIG1pc3NpbmciKTsKQEAgLTEw
NDMsMTggKzEwNDMsMTggQEAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3IKICAgICByZXR1cm4gaGln
aGxpZ2h0Q29uZmlnOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9k
ZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnKQordm9pZCBET01BZ2VudDo6
c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFi
bGVkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZykKIHsK
ICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRD
b25maWcgPyBoaWdobGlnaHRDb25maWcuZ2V0KCkgOiBudWxscHRyKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNv
bG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3Qg
Ym9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQordm9pZCBET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChF
cnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQogewog
ICAgIGF1dG8gcXVhZCA9IHN0ZDo6bWFrZV91bmlxdWU8RmxvYXRRdWFkPihGbG9hdFJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCkpOwogICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEY6Om1vdmUocXVh
ZCksIGNvbG9yLmNvcHlSZWYoKSwgb3V0bGluZUNvbG9yLmNvcHlSZWYoKSwgdXNlUGFnZUNvb3Jk
aW5hdGVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UXVhZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mJiBxdWFk
QXJyYXksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29v
cmRpbmF0ZXMpCit2b2lkIERPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYmIHF1YWRBcnJheSwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKIHsK
ICAgICBhdXRvIHF1YWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0UXVhZD4oKTsKICAgICBpZiAo
IXBhcnNlUXVhZChxdWFkQXJyYXksIHF1YWQuZ2V0KCkpKSB7CkBAIC0xMDY0LDcgKzEwNjQsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgUmVmUHRyPElucwogICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEY6Om1v
dmUocXVhZCksIGNvbG9yLmNvcHlSZWYoKSwgb3V0bGluZUNvbG9yLmNvcHlSZWYoKSwgdXNlUGFn
ZUNvb3JkaW5hdGVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGln
aHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0
bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIERPTUFnZW50
Ojppbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykK
IHsKICAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IHN0ZDo6bWFrZV91bmlxdWU8SGlnaGxpZ2h0
Q29uZmlnPigpOwogICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29s
b3IuY29weVJlZigpKTsKQEAgLTEwNzMsNyArMTA3Myw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBj
b25zCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHRRdWFkKFdURjo6bW92ZShxdWFkKSwgKmhpZ2hs
aWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29uc3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmlu
Zyogb2JqZWN0SWQpCit2b2lkIERPTUFnZW50OjpoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElkKQog
ewogICAgIE5vZGUqIG5vZGUgPSAwOwogICAgIGlmIChub2RlSWQpIHsKQEAgLTEwOTUsNyArMTA5
NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHRO
b2RlKG5vZGUsICpoaWdobGlnaHRDb25maWcpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBvdXRsaW5lQ29sb3IpCit2b2lkIERPTUFnZW50OjpoaWdobGlnaHRGcmFtZShF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5l
Q29sb3IpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZyYW1lRm9ySWQoZnJh
bWVJZCk7CiAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewpAQCAtMTEw
NywxMiArMTEwNywxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZShF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29ucwogICAgIH0KIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyYpCit2b2lkIERP
TUFnZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikKIHsKICAgICBtX292ZXJsYXktPmhp
ZGVIaWdobGlnaHQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6bW92ZVRvKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgaW50IHRhcmdldEVsZW1lbnRJZCwgY29u
c3QgaW50KiBjb25zdCBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKQordm9pZCBET01BZ2Vu
dDo6bW92ZVRvKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgaW50IHRhcmdl
dEVsZW1lbnRJZCwgY29uc3QgaW50KiBjb25zdCBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlk
KQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5v
ZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTEzOSwyNiArMTEzOSwyNiBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlk
LCBpbnQgdGFyZ2V0RQogICAgICpuZXdOb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5v
ZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmRvKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZykKK3ZvaWQgRE9NQWdlbnQ6OnVuZG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQog
ewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1faGlzdG9yeS0+dW5kbyhlYyk7Ci0g
ICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7Cisg
ICAgZXJyb3JTdHJpbmcgPSBET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlZG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQordm9pZCBE
T01BZ2VudDo6cmVkbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgbV9oaXN0b3J5LT5yZWRvKGVjKTsKLSAgICBlcnJvclN0cmluZyA9
IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKKyAgICBlcnJvclN0cmluZyA9
IERPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6bWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKQordm9pZCBET01BZ2VudDo6bWFya1Vu
ZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKQogewogICAgIG1faGlzdG9yeS0+bWFya1VuZG9hYmxl
U3RhdGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQordm9pZCBET01BZ2VudDo6Zm9jdXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBh
c3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAg
LTExNzAsNyArMTE3MCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICBlbGVtZW50LT5mb2N1cygpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCit2
b2lkIERPTUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQsIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCiB7CiAgICAgU3RyaW5n
IG9iamVjdEdyb3VwTmFtZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogIiI7CiAgICAg
Tm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwpAQCAtMTE4Niw3ICsxMTg2LDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkLCBjb25zdAogICAgIHJlc3VsdCA9IG9iamVjdDsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgcmVz
dWx0KQordm9pZCBET01BZ2VudDo6Z2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
PiYgcmVzdWx0KQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVycm9y
U3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTExOTUsNyArMTE5NSw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQCiAgICAgcmVzdWx0ID0gYnVpbGRBcnJheUZvckVsZW1l
bnRBdHRyaWJ1dGVzKGVsZW1lbnQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXF1
ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCogbm9kZUlk
KQordm9pZCBET01BZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBpbnQqIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvck9iamVj
dElkKG9iamVjdElkKTsKICAgICBpZiAobm9kZSkKQEAgLTEyMDUsNyArMTIwNSw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgaW50KiBuCiB9CiAKIC8vIHN0YXRpYwotU3RyaW5nIEluc3BlY3RvckRPTUFn
ZW50Ojpkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpCitTdHJpbmcgRE9NQWdl
bnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBpZiAoIWRv
Y3VtZW50IHx8IGRvY3VtZW50LT51cmwoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuICIiOwpA
QCAtMTIxNyw3ICsxMjE3LDcgQEAgc3RhdGljIFN0cmluZyBkb2N1bWVudEJhc2VVUkxTdHJpbmco
RG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+Y29tcGxldGVVUkwoIiIp
LnN0cmluZygpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwg
Tm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZT4gRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgZGVwdGgsIE5v
ZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBpbnQgaWQgPSBiaW5kKG5vZGUsIG5vZGVzTWFw
KTsKICAgICBTdHJpbmcgbm9kZU5hbWU7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQCBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RG
b3JOb2RlKE5vZGUqCiAgICAgcmV0dXJuIFdURjo6bW92ZSh2YWx1ZSk7CiB9CiAKLVJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRB
cnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1lbnQpCitSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50
QXR0cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KQogewogICAgIGF1dG8gYXR0cmlidXRlc1ZhbHVl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgLy8g
R28gdGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0uCkBAIC0xMzMyLDcg
KzEzMzIsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QQogICAgIHJldHVybiBXVEY6Om1vdmUo
YXR0cmlidXRlc1ZhbHVlKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFy
cmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVU
b0lkTWFwKiBub2Rlc01hcCkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBET01BZ2VudDo6YnVpbGRBcnJheUZvckNvbnRhaW5l
ckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNN
YXApCiB7CiAgICAgYXV0byBjaGlsZHJlbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgIGlmIChkZXB0aCA9
PSAwKSB7CkBAIC0xMzU2LDcgKzEzNTYsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbgogICAg
IHJldHVybiBXVEY6Om1vdmUoY2hpbGRyZW4pOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JF
dmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lciwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIG5vZGUsIGNv
bnN0IFN0cmluZyogb2JqZWN0R3JvdXBJZCkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkV2ZW50TGlzdGVuZXI+IERPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29u
c3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nKiBvYmpl
Y3RHcm91cElkKQogewogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyID0g
cmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIubGlzdGVuZXI7CiAKQEAgLTE0MDgsNyArMTQwOCw3IEBA
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRP
TUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgcmV0dXJuIFdURjo6bW92ZSh2YWx1ZSk7CiB9
CiAgICAgCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxk
cmVuKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiYmIGF4T2JqZWN0LCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mJiBjaGlsZE5vZGVJZHMpCit2b2lkIERPTUFnZW50
Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0
PiYmIGF4T2JqZWN0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mJiBj
aGlsZE5vZGVJZHMpCiB7CiAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBheE9iamVjdC0+Y2hp
bGRyZW4oKTsKICAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKQEAgLTE0MjUsNyArMTQyNSw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oUmVm
UHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+CiAgICAgfQogfQogICAgIAotUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqIG5vZGUpCitS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
RE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTY4Myw3ICsxNjgz
LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICByZXR1cm4gV1RGOjptb3ZlKHZhbHVl
KTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChOb2RlKiBu
b2RlKQorTm9kZSogRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChOb2RlKiBub2RlKQogewogICAg
IG5vZGUgPSBub2RlLT5maXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKGlzV2hpdGVzcGFjZShub2Rl
KSkKQEAgLTE2OTEsNyArMTY5MSw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZp
cnN0Q2hpbGQoTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotTm9kZSogSW5zcGVj
dG9yRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoTm9kZSogbm9kZSkKK05vZGUqIERPTUFnZW50
Ojppbm5lck5leHRTaWJsaW5nKE5vZGUqIG5vZGUpCiB7CiAgICAgZG8gewogICAgICAgICBub2Rl
ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKQEAgLTE2OTksNyArMTY5OSw3IEBAIE5vZGUqIEluc3Bl
Y3RvckRPTUFnZW50Ojppbm5lck5leHRTaWJsaW5nKE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIG5v
ZGU7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojppbm5lclByZXZpb3VzU2libGluZyhO
b2RlKiBub2RlKQorTm9kZSogRE9NQWdlbnQ6OmlubmVyUHJldmlvdXNTaWJsaW5nKE5vZGUqIG5v
ZGUpCiB7CiAgICAgZG8gewogICAgICAgICBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7
CkBAIC0xNzA3LDcgKzE3MDcsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQcmV2
aW91c1NpYmxpbmcoTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotdW5zaWduZWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyQ2hpbGROb2RlQ291bnQoTm9kZSogbm9kZSkKK3Vuc2ln
bmVkIERPTUFnZW50Ojppbm5lckNoaWxkTm9kZUNvdW50KE5vZGUqIG5vZGUpCiB7CiAgICAgdW5z
aWduZWQgY291bnQgPSAwOwogICAgIE5vZGUqIGNoaWxkID0gaW5uZXJGaXJzdENoaWxkKG5vZGUp
OwpAQCAtMTcxOCw3ICsxNzE4LDcgQEAgdW5zaWduZWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVy
Q2hpbGROb2RlQ291bnQoTm9kZSogbm9kZSkKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLU5vZGUq
IEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUoTm9kZSogbm9kZSkKK05vZGUqIERP
TUFnZW50Ojppbm5lclBhcmVudE5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7
CiAgICAgaWYgKGlzPERvY3VtZW50Pigqbm9kZSkpCkBAIC0xNzI2LDEzICsxNzI2LDEzIEBAIE5v
ZGUqIEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUoTm9kZSogbm9kZSkKICAgICBy
ZXR1cm4gbm9kZS0+cGFyZW50Tm9kZSgpOwogfQogCi1ib29sIEluc3BlY3RvckRPTUFnZW50Ojpp
c1doaXRlc3BhY2UoTm9kZSogbm9kZSkKK2Jvb2wgRE9NQWdlbnQ6OmlzV2hpdGVzcGFjZShOb2Rl
KiBub2RlKQogewogICAgIC8vVE9ETzogcHVsbCBpZ25vcmVXaGl0ZXNwYWNlIHNldHRpbmcgZnJv
bSB0aGUgZnJvbnRlbmQgYW5kIHVzZSBoZXJlLgogICAgIHJldHVybiBub2RlICYmIG5vZGUtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFICYmIG5vZGUtPm5vZGVWYWx1ZSgpLnN0cmlwV2hp
dGVTcGFjZSgpLmxlbmd0aCgpID09IDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1h
aW5GcmFtZURPTUNvbnRlbnRMb2FkZWQoKQordm9pZCBET01BZ2VudDo6bWFpbkZyYW1lRE9NQ29u
dGVudExvYWRlZCgpCiB7CiAgICAgLy8gUmUtcHVzaCBkb2N1bWVudCBvbmNlIGl0IGlzIGxvYWRl
ZC4KICAgICBkaXNjYXJkQmluZGluZ3MoKTsKQEAgLTE3NDAsNyArMTc0MCw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6Om1haW5GcmFtZURPTUNvbnRlbnRMb2FkZWQoKQogICAgICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+ZG9jdW1lbnRVcGRhdGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmRpZENvbW1pdExvYWQoRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBET01BZ2Vu
dDo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgRWxlbWVudCogZnJh
bWVPd25lciA9IGRvY3VtZW50LT5vd25lckVsZW1lbnQoKTsKICAgICBpZiAoIWZyYW1lT3duZXIp
CkBAIC0xNzYxLDcgKzE3NjEsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDb21taXRM
b2FkKERvY3VtZW50KiBkb2N1bWVudCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGRO
b2RlSW5zZXJ0ZWQocGFyZW50SWQsIHByZXZJZCwgV1RGOjptb3ZlKHZhbHVlKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYgbm9kZSkKK3ZvaWQg
RE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAoaXNXaGl0
ZXNwYWNlKCZub2RlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc5MCw3ICsxNzkwLDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogICAgIH0K
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2Rl
KQordm9pZCBET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogewogICAgIGlm
IChpc1doaXRlc3BhY2UoJm5vZGUpKQogICAgICAgICByZXR1cm47CkBAIC0xODEyLDEyICsxODEy
LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSYgbm9k
ZSkKICAgICB1bmJpbmQoJm5vZGUsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogfQogCi12b2lk
IEluc3BlY3RvckRPTUFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50JiwgY29uc3QgQXRv
bWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkKK3ZvaWQg
RE9NQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQmLCBjb25zdCBBdG9taWNTdHJpbmcm
IG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQogewogICAgIG1fc3VwcHJl
c3NBdHRyaWJ1dGVNb2RpZmllZEV2ZW50ID0gKG9sZFZhbHVlID09IG5ld1ZhbHVlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCit2
b2lkIERPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBib29s
IHNob3VsZFN1cHByZXNzRXZlbnQgPSBtX3N1cHByZXNzQXR0cmlidXRlTW9kaWZpZWRFdmVudDsK
ICAgICBtX3N1cHByZXNzQXR0cmlidXRlTW9kaWZpZWRFdmVudCA9IGZhbHNlOwpAQCAtMTgzNSw3
ICsxODM1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG4KICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+YXR0cmlidXRlTW9kaWZpZWQoaWQsIG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpCit2b2lkIERPTUFnZW50OjpkaWRSZW1vdmVET01BdHRyKEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBpbnQgaWQgPSBi
b3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgLy8gSWYgbm9kZSBpcyBub3QgbWFwcGVkIHlldCAt
PiBpZ25vcmUgdGhlIGV2ZW50LgpAQCAtMTg0OCw3ICsxODQ4LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlkUmVtb3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNT
dHJpbmcmIG4KICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+YXR0cmlidXRlUmVtb3ZlZChpZCwg
bmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxp
ZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMpCit2b2lkIERPTUFnZW50Ojpz
dHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRz
KQogewogICAgIGF1dG8gbm9kZUlkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46
OmNyZWF0ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBlbGVtZW50cy5zaXpl
KCk7IGkgPCBzaXplOyArK2kpIHsKQEAgLTE4NjUsNyArMTg2NSw3IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQq
PiYgZWxlbWVuCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmlubGluZVN0eWxlSW52YWxpZGF0
ZWQoV1RGOjptb3ZlKG5vZGVJZHMpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hh
cmFjdGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRhdGEmIGNoYXJhY3RlckRhdGEpCit2b2lkIERP
TUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSYgY2hhcmFjdGVyRGF0
YSkKIHsKICAgICBpbnQgaWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZjaGFyYWN0ZXJE
YXRhKTsKICAgICBpZiAoIWlkKSB7CkBAIC0xODc2LDcgKzE4NzYsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSYgY2hhcmFjdGVy
RGF0YSkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKGlk
LCBjaGFyYWN0ZXJEYXRhLmRhdGEoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRp
ZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkKK3ZvaWQgRE9NQWdlbnQ6OmRpZEludmFs
aWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkKIHsKICAgICBpbnQgaWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KCZub2RlKTsKICAgICAvLyBJZiBub2RlIGlzIG5vdCBtYXBwZWQgeWV0IC0+
IGlnbm9yZSB0aGUgZXZlbnQuCkBAIC0xODg4LDE0ICsxODg4LDE0IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoTm9kZSYgbm9kZSkKICAgICBtX3JldmFs
aWRhdGVTdHlsZUF0dHJUYXNrLT5zY2hlZHVsZUZvcihkb3duY2FzdDxFbGVtZW50Pigmbm9kZSkp
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRQdXNoU2hhZG93Um9vdChFbGVtZW50
JiBob3N0LCBTaGFkb3dSb290JiByb290KQordm9pZCBET01BZ2VudDo6ZGlkUHVzaFNoYWRvd1Jv
b3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBpbnQgaG9zdElkID0g
bV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7CiAgICAgaWYgKGhvc3RJZCkKICAgICAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNoYWRvd1Jvb3RQdXNoZWQoaG9zdElkLCBidWlsZE9i
amVjdEZvck5vZGUoJnJvb3QsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbFBvcFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hh
ZG93Um9vdCYgcm9vdCkKK3ZvaWQgRE9NQWdlbnQ6OndpbGxQb3BTaGFkb3dSb290KEVsZW1lbnQm
IGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgaW50IGhvc3RJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJmhvc3QpOwogICAgIGludCByb290SWQgPSBtX2RvY3VtZW50Tm9kZVRv
SWRNYXAuZ2V0KCZyb290KTsKQEAgLTE5MDMsNyArMTkwMyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OndpbGxQb3BTaGFkb3dSb290KEVsZW1lbnQmIGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3Qp
CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zaGFkb3dSb290UG9wcGVkKGhvc3RJZCwg
cm9vdElkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZnJhbWVEb2N1bWVudFVwZGF0
ZWQoRnJhbWUqIGZyYW1lKQordm9pZCBET01BZ2VudDo6ZnJhbWVEb2N1bWVudFVwZGF0ZWQoRnJh
bWUqIGZyYW1lKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgp
OwogICAgIGlmICghZG9jdW1lbnQpCkBAIC0xOTE5LDcgKzE5MTksNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpmcmFtZURvY3VtZW50VXBkYXRlZChGcmFtZSogZnJhbWUpCiAgICAgc2V0RG9j
dW1lbnQoZG9jdW1lbnQpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvclBh
dGgoY29uc3QgU3RyaW5nJiBwYXRoKQorTm9kZSogRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKICAgICAvLyBUaGUgcGF0aCBpcyBvZiBmb3JtICIxLEhUTUwsMixC
T0RZLDEsRElWIgogICAgIGlmICghbV9kb2N1bWVudCkKQEAgLTE5NTAsMTcgKzE5NTAsMTcgQEAg
Tm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkK
ICAgICByZXR1cm4gbm9kZTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JP
YmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKQorTm9kZSogRE9NQWdlbnQ6Om5vZGVGb3JP
YmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKQogewogICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9y
T2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUg
dmFsdWUgPSBpbmplY3RlZFNjcmlwdC5maW5kT2JqZWN0QnlJZChvYmplY3RJZCk7Ci0gICAgcmV0
dXJuIEluc3BlY3RvckRPTUFnZW50OjpzY3JpcHRWYWx1ZUFzTm9kZSh2YWx1ZSk7CisgICAgcmV0
dXJuIERPTUFnZW50OjpzY3JpcHRWYWx1ZUFzTm9kZSh2YWx1ZSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBub2RlSWQpCit2b2lkIERPTUFnZW50Ojpw
dXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHBhdGgsIGludCogbm9kZUlkKQogewogICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZv
clBhdGgocGF0aCkpCiAgICAgICAgICpub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5v
ZGUpOwpAQCAtMTk2OCw3ICsxOTY4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5v
ZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5vIG5vZGUgd2l0aCBnaXZlbiBwYXRoIGZv
dW5kIik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlCYWNrZW5kSWRU
b0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgQmFja2VuZE5vZGVJZCBiYWNrZW5k
Tm9kZUlkLCBpbnQqIG5vZGVJZCkKK3ZvaWQgRE9NQWdlbnQ6OnB1c2hOb2RlQnlCYWNrZW5kSWRU
b0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgQmFja2VuZE5vZGVJZCBiYWNrZW5k
Tm9kZUlkLCBpbnQqIG5vZGVJZCkKIHsKICAgICBpZiAoIW1fYmFja2VuZElkVG9Ob2RlLmNvbnRh
aW5zKGJhY2tlbmROb2RlSWQpKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFs
KCJObyBub2RlIHdpdGggZ2l2ZW4gYmFja2VuZCBpZCBmb3VuZCIpOwpAQCAtMTk4NSw3ICsxOTg1
LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeUJhY2tlbmRJZFRvRnJvbnRl
bmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLAogICAgIH0KIH0KIAotUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
c29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCitSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBET01BZ2VudDo6cmVz
b2x2ZU5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBG
cmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkK
QEAgLTE5OTYsMTAgKzE5OTYsMTAgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2QKICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJl
dHVybiBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KEluc3BlY3RvckRPTUFnZW50Ojpub2RlQXNT
Y3JpcHRWYWx1ZShzY3JpcHRTdGF0ZSwgbm9kZSksIG9iamVjdEdyb3VwKTsKKyAgICByZXR1cm4g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChET01BZ2VudDo6bm9kZUFzU2NyaXB0VmFsdWUoc2Ny
aXB0U3RhdGUsIG5vZGUpLCBvYmplY3RHcm91cCk7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFn
ZW50OjpzY3JpcHRWYWx1ZUFzTm9kZShEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2YWx1ZSkKK05v
ZGUqIERPTUFnZW50OjpzY3JpcHRWYWx1ZUFzTm9kZShEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2
YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjAwNyw3ICsyMDA3LDcgQEAgTm9kZSogSW5zcGVj
dG9yRE9NQWdlbnQ6OnNjcmlwdFZhbHVlQXNOb2RlKERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZh
bHVlKQogICAgIHJldHVybiBKU05vZGU6OnRvV3JhcHBlZCh2YWx1ZS5qc1ZhbHVlKCkpOwogfQog
Ci1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUFzU2NyaXB0
VmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQorRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgRE9NQWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRl
LCBub2RlKSkKICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHN0YXRlLT52
bSgpLCBKU0M6OmpzTnVsbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmgKaW5kZXggOWZjOTUyNWRiN2NmYzQyNWZhZTlmMTM5YjlmZGU3YjE3OWFhNmZh
Yi4uOTRjNjJlZTAzNTI5NzNjYWM1YjBlY2EzOTRkNjcwZTFhZGRjNjBkNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTU0LDcgKzU0LDcgQEAg
Y2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgCisKIGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7CiBjbGFzcyBDb250YWluZXJOb2RlOwog
Y2xhc3MgQ2hhcmFjdGVyRGF0YTsKQEAgLTY0LDEyICs2NCwxMiBAQCBjbGFzcyBFbGVtZW50Owog
Y2xhc3MgRXZlbnQ7CiBjbGFzcyBJbnNwZWN0b3JIaXN0b3J5OwogY2xhc3MgSW5zcGVjdG9yT3Zl
cmxheTsKLWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBj
bGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBOYW1l
Tm9kZU1hcDsKIGNsYXNzIE5vZGU7CitjbGFzcyBQYWdlQWdlbnQ7CiBjbGFzcyBSZXZhbGlkYXRl
U3R5bGVBdHRyaWJ1dGVUYXNrOwogY2xhc3MgU2hhZG93Um9vdDsKIApAQCAtOTEsOCArOTEsOCBA
QCBzdHJ1Y3QgRXZlbnRMaXN0ZW5lckluZm8gewogICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0
b3IgZXZlbnRMaXN0ZW5lclZlY3RvcjsKIH07CiAKLWNsYXNzIEluc3BlY3RvckRPTUFnZW50IGZp
bmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RE9NQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0
b3JET01BZ2VudCk7CitjbGFzcyBET01BZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJBZ2VudEJhc2Us
IHB1YmxpYyBJbnNwZWN0b3I6OkRPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRE9NQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIHN0cnVjdCBET01MaXN0ZW5lciB7CkBAIC0xMDQsOCArMTA0LDggQEAg
cHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50Kikg
PSAwOwogICAgIH07CiAKLSAgICBJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXIq
LCBJbnNwZWN0b3JPdmVybGF5Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yRE9NQWdlbnQoKTsK
KyAgICBET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZUFnZW50KiwgSW5zcGVjdG9y
OjpJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7CisgICAgdmlydHVh
bCB+RE9NQWdlbnQoKTsKIAogICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0cmluZyhjb25zdCBF
eGNlcHRpb25Db2RlJik7CiAKQEAgLTIwOSw3ICsyMDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRl
KiwgTm9kZSopOwogCiAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSBvdGhlciBhZ2VudHMuCi0g
ICAgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQoKSB7IHJldHVybiBtX3BhZ2VBZ2VudDsg
fQorICAgIFBhZ2VBZ2VudCogcGFnZUFnZW50KCkgeyByZXR1cm4gbV9wYWdlQWdlbnQ7IH0KIAog
cHJpdmF0ZToKICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBib29s
IGVuYWJsZWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRDb25maWcpOwpA
QCAtMjQzLDcgKzI0Myw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVh
ZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpOwog
Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBQYWdlQWdlbnQqIG1f
cGFnZUFnZW50OwogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVj
dGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXk7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6RE9NRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250
ZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCBmNzc4ZGQ5NjJjYjJkZGMxNjA2MzE3NDZh
OTk1YmRkYTBhOWIyNzhiLi43N2NmZDMyNDYwMTAyZWNmMjJiYTY1Y2NkYTRkMzhiYTdmMDU5NTcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQuY3BwCkBAIC01OSw4ICs1OSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQsIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQqIGRlYnVnZ2VyQWdlbnQpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRl
cmFsKCJET01EZWJ1Z2dlciIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorRE9NRGVidWdnZXJBZ2Vu
dDo6RE9NRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBET01BZ2VudCogZG9tQWdlbnQsIERlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQpCisg
ICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJET01EZWJ1Z2dlciIpLCBpbnN0cnVtZW50
aW5nQWdlbnRzKQogICAgICwgbV9kb21BZ2VudChkb21BZ2VudCkKICAgICAsIG1fZGVidWdnZXJB
Z2VudChkZWJ1Z2dlckFnZW50KQogICAgICwgbV9wYXVzZUluTmV4dEV2ZW50TGlzdGVuZXIoZmFs
c2UpCkBAIC02OSw3MyArNjksNzMgQEAgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6SW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnUKICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPnNldExpc3RlbmVyKHRoaXMpOwogfQogCi1JbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50Ojp+SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpCitET01EZWJ1Z2dlckFnZW50Ojp+
RE9NRGVidWdnZXJBZ2VudCgpCiB7CiAgICAgQVNTRVJUKCFtX2RlYnVnZ2VyQWdlbnQpOwotICAg
IEFTU0VSVCghbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
KCkpOworICAgIEFTU0VSVCghbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5kb21EZWJ1Z2dlckFnZW50
KCkpOwogfQogCiAvLyBCcm93c2VyIGRlYnVnZ2VyIGFnZW50IGVuYWJsZWQgb25seSB3aGVuIEpT
IGRlYnVnZ2VyIGlzIGVuYWJsZWQuCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRl
YnVnZ2VyV2FzRW5hYmxlZCgpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyV2FzRW5h
YmxlZCgpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0RE9NRGVidWdn
ZXJBZ2VudCh0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZWJ1
Z2dlcldhc0Rpc2FibGVkKCkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJXYXNEaXNh
YmxlZCgpCiB7CiAgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OnN0ZXBJbnRvKCkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6c3RlcEludG8oKQogewog
ICAgIG1fcGF1c2VJbk5leHRFdmVudExpc3RlbmVyID0gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSgpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OmRp
ZFBhdXNlKCkKIHsKICAgICBtX3BhdXNlSW5OZXh0RXZlbnRMaXN0ZW5lciA9IGZhbHNlOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQordm9pZCBET01EZWJ1
Z2dlckFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQobnVsbHB0cik7CisgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLT5zZXRET01EZWJ1Z2dlckFnZW50KG51bGxwdHIpOwogICAgIGNsZWFyKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OmRpZENyZWF0ZUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fYmFja2VuZERp
c3BhdGNoZXIgPSBJbnNwZWN0b3I6OkRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQordm9pZCBET01EZWJ1Z2dlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci5jbGVhcigpOwogCiAgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OmRp
c2NhcmRBZ2VudCgpCiB7CiAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRMaXN0ZW5lcihudWxscHRy
KTsKICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBudWxscHRyOwogfQogCi12b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OmRpc2NhcmRCaW5kaW5ncygpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6
OmRpc2NhcmRCaW5kaW5ncygpCiB7CiAgICAgbV9kb21CcmVha3BvaW50cy5jbGVhcigpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldEV2ZW50TGlzdGVuZXJCcmVha3Bv
aW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIERP
TURlYnVnZ2VyQWdlbnQ6OnNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KEVycm9yU3RyaW5nJiBl
cnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgc2V0QnJlYWtwb2ludChlcnJv
ciwgU3RyaW5nKGxpc3RlbmVyRXZlbnRDYXRlZ29yeVR5cGUpICsgZXZlbnROYW1lKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRJbnN0cnVtZW50YXRpb25CcmVha3Bv
aW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIERP
TURlYnVnZ2VyQWdlbnQ6OnNldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcm
IGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBzZXRCcmVha3BvaW50KGVy
cm9yLCBTdHJpbmcoaW5zdHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUpICsgZXZlbnROYW1l
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIERPTURlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcm
IGV2ZW50TmFtZSkKIHsKICAgICBpZiAoZXZlbnROYW1lLmlzRW1wdHkoKSkgewogICAgICAgICBl
cnJvciA9IEFTQ0lJTGl0ZXJhbCgiRXZlbnQgbmFtZSBpcyBlbXB0eSIpOwpAQCAtMTQ1LDE3ICsx
NDUsMTcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJgogICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnRzLmFkZChldmVudE5hbWUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29u
c3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZUV2ZW50
TGlzdGVuZXJCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVu
dE5hbWUpCiB7CiAgICAgcmVtb3ZlQnJlYWtwb2ludChlcnJvciwgU3RyaW5nKGxpc3RlbmVyRXZl
bnRDYXRlZ29yeVR5cGUpICsgZXZlbnROYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50OjpyZW1vdmVJbnN0cnVtZW50YXRpb25CcmVha3BvaW50KEVycm9yU3RyaW5nJiBl
cnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OnJl
bW92ZUluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBT
dHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICByZW1vdmVCcmVha3BvaW50KGVycm9yLCBTdHJpbmco
aW5zdHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUpICsgZXZlbnROYW1lKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5n
JiBlcnJvciwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50
TmFtZSkKIHsKICAgICBpZiAoZXZlbnROYW1lLmlzRW1wdHkoKSkgewogICAgICAgICBlcnJvciA9
IEFTQ0lJTGl0ZXJhbCgiRXZlbnQgbmFtZSBpcyBlbXB0eSIpOwpAQCAtMTY1LDcgKzE2NSw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluCiAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMu
cmVtb3ZlKGV2ZW50TmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihOb2RlJiBub2RlKQordm9pZCBET01EZWJ1Z2dlckFnZW50
OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKGhhc0JyZWFr
cG9pbnQoJm5vZGUsIEF0dHJpYnV0ZU1vZGlmaWVkKSkgewogICAgICAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtMTc0LDMw
ICsxNzQsMzAgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkaWRJbnZhbGlkYXRl
U3R5bGVBdHRyKE5vZGUmIG5vZGUpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYgbm9kZSkKK3ZvaWQgRE9NRGVidWdnZXJB
Z2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogewogICAgIGlmIChtX2RvbUJyZWFr
cG9pbnRzLnNpemUoKSkgewotICAgICAgICB1aW50MzJfdCBtYXNrID0gbV9kb21CcmVha3BvaW50
cy5nZXQoSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSgmbm9kZSkpOworICAgICAg
ICB1aW50MzJfdCBtYXNrID0gbV9kb21CcmVha3BvaW50cy5nZXQoRE9NQWdlbnQ6OmlubmVyUGFy
ZW50Tm9kZSgmbm9kZSkpOwogICAgICAgICB1aW50MzJfdCBpbmhlcml0YWJsZVR5cGVzTWFzayA9
IChtYXNrIHwgKG1hc2sgPj4gZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQpKSAmIGluaGVy
aXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzazsKICAgICAgICAgaWYgKGluaGVyaXRhYmxlVHlw
ZXNNYXNrKQogICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKCZub2RlLCBpbmhl
cml0YWJsZVR5cGVzTWFzaywgdHJ1ZSk7CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkKK3ZvaWQgRE9NRGVidWdn
ZXJBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogewogICAgIGlmIChtX2RvbUJy
ZWFrcG9pbnRzLnNpemUoKSkgewogICAgICAgICAvLyBSZW1vdmUgc3VidHJlZSBicmVha3BvaW50
cy4KICAgICAgICAgbV9kb21CcmVha3BvaW50cy5yZW1vdmUoJm5vZGUpOwotICAgICAgICBWZWN0
b3I8Tm9kZSo+IHN0YWNrKDEsIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hpbGQoJm5v
ZGUpKTsKKyAgICAgICAgVmVjdG9yPE5vZGUqPiBzdGFjaygxLCBET01BZ2VudDo6aW5uZXJGaXJz
dENoaWxkKCZub2RlKSk7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBz
dGFjay5sYXN0KCk7CiAgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBtX2Rv
bUJyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKLSAgICAgICAgICAgIHN0YWNrLmFwcGVuZChJbnNw
ZWN0b3JET01BZ2VudDo6aW5uZXJGaXJzdENoaWxkKG5vZGUpKTsKLSAgICAgICAgICAgIHN0YWNr
LmFwcGVuZChJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhub2RlKSk7CisgICAg
ICAgICAgICBzdGFjay5hcHBlbmQoRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKSk7Cisg
ICAgICAgICAgICBzdGFjay5hcHBlbmQoRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcobm9kZSkp
OwogICAgICAgICB9IHdoaWxlICghc3RhY2suaXNFbXB0eSgpKTsKICAgICB9CiB9CkBAIC0yMjUs
NyArMjI1LDcgQEAgc3RhdGljIFN0cmluZyBkb21UeXBlTmFtZShpbnQgdHlwZSkKICAgICByZXR1
cm4gIiI7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtw
b2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
dHlwZVN0cmluZykKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmlu
ZykKIHsKICAgICBOb2RlKiBub2RlID0gbV9kb21BZ2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC0yMzgsMTIgKzIzOCwxMiBAQCB2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbgogICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7CiAgICAg
bV9kb21CcmVha3BvaW50cy5zZXQobm9kZSwgbV9kb21CcmVha3BvaW50cy5nZXQobm9kZSkgfCBy
b290Qml0KTsKICAgICBpZiAocm9vdEJpdCAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVz
TWFzaykgewotICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6Omlu
bmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6Omlu
bmVyTmV4dFNpYmxpbmcoY2hpbGQpKQorICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gRE9NQWdl
bnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gRE9NQWdlbnQ6OmlubmVy
TmV4dFNpYmxpbmcoY2hpbGQpKQogICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRz
KGNoaWxkLCByb290Qml0LCB0cnVlKTsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK3ZvaWQgRE9NRGVidWdnZXJB
Z2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKIHsKICAgICBOb2RlKiBub2RlID0gbV9k
b21BZ2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
CkBAIC0yNjAsMTIgKzI2MCwxMiBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJl
bW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbgogICAgICAgICBt
X2RvbUJyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKIAogICAgIGlmICgocm9vdEJpdCAmIGluaGVy
aXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgJiYgIShtYXNrICYgKHJvb3RCaXQgPDwgZG9t
QnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQpKSkgewotICAgICAgICBmb3IgKE5vZGUqIGNoaWxk
ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxk
ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQorICAgICAgICBm
b3IgKE5vZGUqIGNoaWxkID0gRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7
IGNoaWxkID0gRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQogICAgICAgICAgICAg
dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKGNoaWxkLCByb290Qml0LCBmYWxzZSk7CiAgICAgfQog
fQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5v
ZGUmIHBhcmVudCkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6d2lsbEluc2VydERPTU5vZGUoTm9k
ZSYgcGFyZW50KQogewogICAgIGlmIChoYXNCcmVha3BvaW50KCZwYXJlbnQsIFN1YnRyZWVNb2Rp
ZmllZCkpIHsKICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKQEAgLTI3NCw5ICsyNzQsOSBAQCB2b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUmIHBhcmVudCkKICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9k
ZSYgbm9kZSkKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYg
bm9kZSkKIHsKLSAgICBOb2RlKiBwYXJlbnROb2RlID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVy
UGFyZW50Tm9kZSgmbm9kZSk7CisgICAgTm9kZSogcGFyZW50Tm9kZSA9IERPTUFnZW50Ojppbm5l
clBhcmVudE5vZGUoJm5vZGUpOwogICAgIGlmIChoYXNCcmVha3BvaW50KCZub2RlLCBOb2RlUmVt
b3ZlZCkpIHsKICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2Rl
LCBOb2RlUmVtb3ZlZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7CkBAIC0yODgsNyArMjg4LDcg
QEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2Rl
JiBub2RlKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxs
TW9kaWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50KQordm9pZCBET01EZWJ1Z2dlckFnZW50Ojp3
aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChoYXNCcmVha3Bv
aW50KCZlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKICAgICAgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKQEAgLTI5Nyw3
ICsyOTcsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01B
dHRyKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSYgdGFyZ2V0LCBpbnQgYnJlYWtw
b2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNwZWN0b3JPYmplY3QmIGRlc2NyaXB0aW9uKQor
dm9pZCBET01EZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUmIHRhcmdl
dCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29sIGluc2VydGlvbiwgSW5zcGVjdG9yT2JqZWN0JiBk
ZXNjcmlwdGlvbikKIHsKICAgICBBU1NFUlQoaGFzQnJlYWtwb2ludCgmdGFyZ2V0LCBicmVha3Bv
aW50VHlwZSkpOwogCkBAIC0zMDUsMTUgKzMwNSwxNSBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSYgdGFyZ2V0LCBpbnQgYnJlYWtw
bwogICAgIGlmICgoMSA8PCBicmVha3BvaW50VHlwZSkgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9p
bnRUeXBlc01hc2spIHsKICAgICAgICAgLy8gRm9yIGluaGVyaXRhYmxlIGJyZWFrcG9pbnQgdHlw
ZXMsIHRhcmdldCBub2RlIGlzbid0IGFsd2F5cyB0aGUgc2FtZSBhcyB0aGUgbm9kZSB0aGF0IG93
bnMgYSBicmVha3BvaW50LgogICAgICAgICAvLyBUYXJnZXQgbm9kZSBtYXkgYmUgdW5rbm93biB0
byBmcm9udGVuZCwgc28gd2UgbmVlZCB0byBwdXNoIGl0IGZpcnN0LgotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB0YXJnZXROb2RlT2Jq
ZWN0ID0gbV9kb21BZ2VudC0+cmVzb2x2ZU5vZGUoJnRhcmdldCwgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXApOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB0YXJnZXROb2RlT2JqZWN0ID0gbV9kb21B
Z2VudC0+cmVzb2x2ZU5vZGUoJnRhcmdldCwgRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0
R3JvdXApOwogICAgICAgICBkZXNjcmlwdGlvbi5zZXRWYWx1ZSgidGFyZ2V0Tm9kZSIsIHRhcmdl
dE5vZGVPYmplY3QpOwogCiAgICAgICAgIC8vIEZpbmQgYnJlYWtwb2ludCBvd25lciBub2RlLgog
ICAgICAgICBpZiAoIWluc2VydGlvbikKLSAgICAgICAgICAgIGJyZWFrcG9pbnRPd25lciA9IElu
c3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUoJnRhcmdldCk7CisgICAgICAgICAgICBi
cmVha3BvaW50T3duZXIgPSBET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKCZ0YXJnZXQpOwogICAg
ICAgICBBU1NFUlQoYnJlYWtwb2ludE93bmVyKTsKICAgICAgICAgd2hpbGUgKCEobV9kb21CcmVh
a3BvaW50cy5nZXQoYnJlYWtwb2ludE93bmVyKSAmICgxIDw8IGJyZWFrcG9pbnRUeXBlKSkpIHsK
LSAgICAgICAgICAgIE5vZGUqIHBhcmVudE5vZGUgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQ
YXJlbnROb2RlKGJyZWFrcG9pbnRPd25lcik7CisgICAgICAgICAgICBOb2RlKiBwYXJlbnROb2Rl
ID0gRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZShicmVha3BvaW50T3duZXIpOwogICAgICAgICAg
ICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
YnJlYWtwb2ludE93bmVyID0gcGFyZW50Tm9kZTsKQEAgLTMyOSwxNCArMzI5LDE0IEBAIHZvaWQg
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlJiB0
YXJnZXQsIGludCBicmVha3BvCiAgICAgZGVzY3JpcHRpb24uc2V0U3RyaW5nKCJ0eXBlIiwgZG9t
VHlwZU5hbWUoYnJlYWtwb2ludFR5cGUpKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGludCB0eXBlKQorYm9vbCBET01EZWJ1
Z2dlckFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGludCB0eXBlKQogewogICAgIHVp
bnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7CiAgICAgdWludDMyX3QgZGVyaXZlZEJpdCA9IHJv
b3RCaXQgPDwgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQ7CiAgICAgcmV0dXJuIG1fZG9t
QnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgKHJvb3RCaXQgfCBkZXJpdmVkQml0KTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9k
ZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KQordm9pZCBET01EZWJ1Z2dlckFn
ZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm9vdE1h
c2ssIGJvb2wgc2V0KQogewogICAgIHVpbnQzMl90IG9sZE1hc2sgPSBtX2RvbUJyZWFrcG9pbnRz
LmdldChub2RlKTsKICAgICB1aW50MzJfdCBkZXJpdmVkTWFzayA9IHJvb3RNYXNrIDw8IGRvbUJy
ZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0OwpAQCAtMzUwLDExICszNTAsMTEgQEAgdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogbm9k
ZSwgdWludDMyX3Qgcm8KICAgICBpZiAoIW5ld1Jvb3RNYXNrKQogICAgICAgICByZXR1cm47CiAK
LSAgICBmb3IgKE5vZGUqIGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGls
ZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxp
bmcoY2hpbGQpKQorICAgIGZvciAoTm9kZSogY2hpbGQgPSBET01BZ2VudDo6aW5uZXJGaXJzdENo
aWxkKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhjaGls
ZCkpCiAgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgbmV3Um9vdE1hc2ss
IHNldCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cGF1c2VPbk5hdGl2
ZUV2ZW50SWZOZWVkZWQoYm9vbCBpc0RPTUV2ZW50LCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwg
Ym9vbCBzeW5jaHJvbm91cykKK3ZvaWQgRE9NRGVidWdnZXJBZ2VudDo6cGF1c2VPbk5hdGl2ZUV2
ZW50SWZOZWVkZWQoYm9vbCBpc0RPTUV2ZW50LCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgYm9v
bCBzeW5jaHJvbm91cykKIHsKICAgICBTdHJpbmcgZnVsbEV2ZW50TmFtZSA9IChpc0RPTUV2ZW50
ID8gbGlzdGVuZXJFdmVudENhdGVnb3J5VHlwZSA6IGluc3RydW1lbnRhdGlvbkV2ZW50Q2F0ZWdv
cnlUeXBlKSArIGV2ZW50TmFtZTsKICAgICBpZiAobV9wYXVzZUluTmV4dEV2ZW50TGlzdGVuZXIp
CkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpwYXVz
ZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChib29sIGlzRE9NRXZlbnQsIGNvbnMKICAgICAgICAgbV9k
ZWJ1Z2dlckFnZW50LT5zY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3Rvcjo6RGVi
dWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RXZlbnRMaXN0ZW5lciwgV1RGOjptb3Zl
KGV2ZW50RGF0YSkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFhI
UkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgRE9NRGVi
dWdnZXJBZ2VudDo6c2V0WEhSQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dXJsKQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fcGF1c2VPbkFsbFhI
UnNFbmFibGVkID0gdHJ1ZTsKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIEluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybAogICAgIG1feGhyQnJlYWtwb2ludHMuYWRkKHVybCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlWEhSQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgdXJsKQordm9pZCBET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVYSFJCcmVha3BvaW50
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc0VtcHR5
KCkpIHsKICAgICAgICAgbV9wYXVzZU9uQWxsWEhSc0VuYWJsZWQgPSBmYWxzZTsKQEAgLTM5Miw3
ICszOTIsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZVhIUkJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmCiAgICAgbV94aHJCcmVha3BvaW50cy5y
ZW1vdmUodXJsKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsU2Vu
ZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBET01EZWJ1Z2dlckFnZW50
Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIFN0cmlu
ZyBicmVha3BvaW50VVJMOwogICAgIGlmIChtX3BhdXNlT25BbGxYSFJzRW5hYmxlZCkKQEAgLTQx
NSw3ICs0MTUsNyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1M
SHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVh
a1Byb2dyYW0oSW5zcGVjdG9yOjpEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpY
SFIsIFdURjo6bW92ZShldmVudERhdGEpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50OjpjbGVhcigpCit2b2lkIERPTURlYnVnZ2VyQWdlbnQ6OmNsZWFyKCkKIHsKICAgICBt
X2RvbUJyZWFrcG9pbnRzLmNsZWFyKCk7CiAgICAgbV9wYXVzZUluTmV4dEV2ZW50TGlzdGVuZXIg
PSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01EZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudC5oCmluZGV4IGFmZTNjZmI5ZDMwOTU1ZGZhMzMyOTVlZjA5OWViZmZjYTI0
N2NlNjcuLjk1YzYyOWEzODI5ZmExOTAzYzBhYTExYTEzZGNkOWM0NTIzMjdjY2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQu
aApAQCAtNDQsMTkgKzQ0LDE5IEBAIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBET01BZ2VudDsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbnNw
ZWN0b3JET01BZ2VudDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBOb2RlOwog
CiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okxpc3RlbmVyLCBwdWJsaWMgSW5zcGVjdG9yOjpE
T01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCk7CitjbGFzcyBET01EZWJ1Z2dlckFnZW50
IGZpbmFsIDogcHVibGljIFdlYkFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RGVidWdnZXJB
Z2VudDo6TGlzdGVuZXIsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTURlYnVnZ2VyQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShET01EZWJ1Z2dlckFnZW50
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JE
T01EZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JET01BZ2VudCos
IEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIHZpcnR1YWwgfkluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQoKTsKKyAgICBET01EZWJ1Z2dlckFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqLCBET01BZ2VudCosIEluc3BlY3Rvcjo6RGVidWdnZXJBZ2VudCopOworICAgIHZp
cnR1YWwgfkRPTURlYnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIERPTURlYnVnZ2VyIEFQSQogICAg
IHZpcnR1YWwgdm9pZCBzZXRYSFJCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiB1cmwpIG92ZXJyaWRlOwpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRpc2NhcmRBZ2VudCgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIC8vIEluc3BlY3Rv
cjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6TGlzdGVuZXIgaW1wbGVtZW50YXRpb24uCisgICAg
Ly8gSW5zcGVjdG9yOjpEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbi4KICAg
ICB2aXJ0dWFsIHZvaWQgZGVidWdnZXJXYXNFbmFibGVkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGRlYnVnZ2VyV2FzRGlzYWJsZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RlcEludG8oKSBvdmVycmlkZTsKQEAgLTk5LDggKzk5LDggQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgY2xlYXIoKTsKIAotICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OwotICAgIElu
c3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9kZWJ1Z2dlckFnZW50OworICAgIERP
TUFnZW50KiBtX2RvbUFnZW50OworICAgIEluc3BlY3Rvcjo6RGVidWdnZXJBZ2VudCogbV9kZWJ1
Z2dlckFnZW50OwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkRPTURlYnVnZ2VyQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdWludDMyX3Q+
IG1fZG9tQnJlYWtwb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCA4ZTUyM2ZmYjhjZDRmZGZmYmQ0ZDZhNjZlMzM0ZDNm
NTgwYjA3ZmJhLi44NTFlZmIzYzRjODU3YzNhOTRjZDAzYTNhYTY4ZDlhMzQ3YzZhMjJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50LmNwcApAQCAtNTIsMjcgKzUyLDI3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJh
c2UoQVNDSUlMaXRlcmFsKCJET01TdG9yYWdlIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCitET01T
dG9yYWdlQWdlbnQ6OkRPTVN0b3JhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBQYWdlQWdlbnQqIHBhZ2VBZ2VudCkKKyAgICA6IFdlYkFnZW50QmFzZShB
U0NJSUxpdGVyYWwoIkRPTVN0b3JhZ2UiKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1f
cGFnZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1fZW5hYmxlZChmYWxzZSkKIHsKLSAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCh0aGlzKTsKKyAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldERPTVN0b3JhZ2VBZ2VudCh0aGlzKTsKIH0KIAot
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojp+SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KCkKK0RP
TVN0b3JhZ2VBZ2VudDo6fkRPTVN0b3JhZ2VBZ2VudCgpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLT5zZXRJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQobnVsbHB0cik7CisgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5zZXRET01TdG9yYWdlQWdlbnQobnVsbHB0cik7CiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzID0gbnVsbHB0cjsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcikKK3ZvaWQgRE9NU3RvcmFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6RE9NU3RvcmFn
ZUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyID0gSW5zcGVjdG9yOjpET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShi
YWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RS
ZWFzb24pCit2b2lkIERPTVN0b3JhZ2VBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CkBAIC04MSwx
NyArODEsMTcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmUKICAgICBkaXNhYmxlKHVudXNlZCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcm
KQordm9pZCBET01TdG9yYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgbV9l
bmFibGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQordm9pZCBET01TdG9yYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcmKQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4m
IGl0ZW1zKQordm9pZCBET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgc3RvcmFn
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4+JiBpdGVtcykKIHsKICAgICBGcmFtZSogZnJhbWU7CiAgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmlu
Zywgc3RvcmFnZUlkLmNvcHlSZWYoKSwgZnJhbWUpOwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zCiAgICAgaXRlbXMgPSBXVEY6Om1vdmUoc3RvcmFnZUl0ZW1zKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBz
dG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBE
T01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZTsKICAgICBS
ZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3Ry
aW5nLCBzdG9yYWdlSWQuY29weVJlZigpLCBmcmFtZSk7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QKICAgICAgICAgZXJyb3JTdHJpbmcgPSBFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24oUVVPVEFfRVhDRUVERURfRVJSKS5uYW1lOwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgY29uc3Qg
U3RyaW5nJiBrZXkpCit2b2lkIERPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgRnJhbWUqIGZyYW1lOwogICAg
IFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JT
dHJpbmcsIHN0b3JhZ2VJZC5jb3B5UmVmKCksIGZyYW1lKTsKQEAgLTE0Miw3ICsxNDIsNyBAQCB2
b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjbwogICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGZyYW1l
LCBrZXkpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQo
U3RvcmFnZSogc3RvcmFnZSkKK1N0cmluZyBET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9y
YWdlKiBzdG9yYWdlKQogewogICAgIEFTU0VSVChzdG9yYWdlKTsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBzdG9yYWdlLT5mcmFtZSgpLT5kb2N1bWVudCgpOwpAQCAtMTU0LDcgKzE1NCw3IEBA
IFN0cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlKiBzdG9y
YWdlKQogICAgIHJldHVybiBzdG9yYWdlSWQoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGlzTG9jYWxT
dG9yYWdlKS0+dG9KU09OU3RyaW5nKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFn
ZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkK
K1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IERPTVN0
b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9v
bCBpc0xvY2FsU3RvcmFnZSkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
U3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2VjdXJpdHlPcmlnaW4o
c2VjdXJpdHlPcmlnaW4tPnRvUmF3U3RyaW5nKCkpCkBAIC0xNjIsNyArMTYyLDcgQEAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpzdG8KICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBT
dG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBQ
YWdlKikKK3ZvaWQgRE9NU3RvcmFnZUFnZW50OjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgUGFnZSopCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5kRGlzcGF0Y2hlciB8fCAhbV9l
bmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC0xNzksNyArMTc5LDcgQEAgdm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmlu
ZyYga2V5LCBjb24KICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVt
VXBkYXRlZChpZCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCi1SZWZQdHI8U3RvcmFn
ZUFyZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdl
SWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUpCitSZWZQdHI8U3RvcmFnZUFyZWE+IERPTVN0b3JhZ2VB
Z2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUpCiB7
CiAgICAgU3RyaW5nIHNlY3VyaXR5T3JpZ2luOwogICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuaAppbmRleCBiZWJkMWVmNDEyZjJkYmZiNjEzYTcxM2FiZDQ4YTcyNDQyZDM2YjI2
Li5mNmViNzU2N2Y2YzQyZjY1NzZhOWY1MGZmMjVjOTJiZDQ3YTg4YzlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC00
MywxOSArNDMsMTkgQEAgY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZyYW1lOwotY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zdHJ1
bWVudGluZ0FnZW50czsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQYWdlQWdlbnQ7CiBjbGFzcyBTZWN1
cml0eU9yaWdpbjsKIGNsYXNzIFN0b3JhZ2U7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwogCi1jbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVj
dG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01TdG9yYWdlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyIHsKK2NsYXNzIERPTVN0b3JhZ2VBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJBZ2Vu
dEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50
Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KCk7CisgICAgRE9NU3Rv
cmFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlQWdlbnQqKTsKKyAgICB2aXJ0dWFs
IH5ET01TdG9yYWdlQWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0b3I6OkJhY2tl
bmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CkBA
IC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVh
PiBmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+JiYsIEZyYW1lKiYpOwogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBt
X3BhZ2VBZ2VudDsKKyAgICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnNwZWN0b3I6OkRPTVN0b3JhZ2VGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmRE
aXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBib29sIG1fZW5hYmxlZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAppbmRl
eCA5MTM0ZGZlNDdjNzljNmM2ZWY0NDEzNDQ1MjBiNzA0NmUxZDVkYzEzLi45NjFiZTQwMjY3YTk3
MGY0MmNkZjYwMWJiM2JkNTQzNWFjNDgxODUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UKIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50
OjpkaWRPcGVuRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0
cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikK
K3ZvaWQgRGF0YWJhc2VBZ2VudDo6ZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+
IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24pCiB7CiAgICAgaWYgKEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2Uq
IHJlc291cmNlID0gZmluZEJ5RmlsZU5hbWUoZGF0YWJhc2UtPmZpbGVOYW1lKCkpKSB7CiAgICAg
ICAgIHJlc291cmNlLT5zZXREYXRhYmFzZShkYXRhYmFzZSk7CkBAIC0yMDUsMzAgKzIwNSwzMCBA
QCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpZE9wZW5EYXRhYmFzZShQYXNzUmVmUHRy
PERhdGFiYXNlPiBkYXRhYmFzZSwgY29ucwogICAgICAgICByZXNvdXJjZS0+YmluZChtX2Zyb250
ZW5kRGlzcGF0Y2hlci5nZXQoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
Y2xlYXJSZXNvdXJjZXMoKQordm9pZCBEYXRhYmFzZUFnZW50OjpjbGVhclJlc291cmNlcygpCiB7
CiAgICAgbV9yZXNvdXJjZXMuY2xlYXIoKTsKIH0KIAotSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzKQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2Ui
KSwgaW5zdHJ1bWVudGluZ0FnZW50cykKK0RhdGFiYXNlQWdlbnQ6OkRhdGFiYXNlQWdlbnQoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKKyAgICA6IFdlYkFnZW50QmFz
ZShBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBt
X2VuYWJsZWQoZmFsc2UpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0
b3JEYXRhYmFzZUFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0RGF0
YWJhc2VBZ2VudCh0aGlzKTsKIH0KIAotSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6fkluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQoKQorRGF0YWJhc2VBZ2VudDo6fkRhdGFiYXNlQWdlbnQoKQogewotICAg
IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yRGF0YWJhc2VBZ2VudChudWxscHRy
KTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldERhdGFiYXNlQWdlbnQobnVsbHB0cik7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQordm9pZCBEYXRhYmFz
ZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENo
YW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEluc3BlY3Rvcjo6RGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hh
bm5lbCk7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3Rvcjo6RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIERhdGFiYXNlQWdlbnQ6OndpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci5jbGVhcigpOwpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0CiAg
ICAgZGlzYWJsZSh1bnVzZWQpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVu
YWJsZShFcnJvclN0cmluZyYpCit2b2lkIERhdGFiYXNlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ4LDE0ICsy
NDgsMTQgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcm
KQogICAgICAgICBpdC0+dmFsdWUtPmJpbmQobV9mcm9udGVuZERpc3BhdGNoZXIuZ2V0KCkpOwog
fQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQor
dm9pZCBEYXRhYmFzZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKIHsKICAgICBpZiAoIW1f
ZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwogfQogCi12
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0
cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBuYW1lcykKK3ZvaWQgRGF0YWJhc2VBZ2VudDo6Z2V0
RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvciwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG5hbWVz
KQogewogICAgIGlmICghbV9lbmFibGVkKSB7CiAgICAgICAgIGVycm9yID0gQVNDSUlMaXRlcmFs
KCJEYXRhYmFzZSBhZ2VudCBpcyBub3QgZW5hYmxlZCIpOwpAQCAtMjczLDcgKzI3Myw3IEBAIHZv
aWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3Ry
aW5nJiBlcnJvciwgY29uc3QgU3RyCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQ6OmV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENh
bGxiYWNrKQordm9pZCBEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNR
TENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkgewog
ICAgICAgICByZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJEYXRhYmFzZSBhZ2VudCBpcyBu
b3QgZW5hYmxlZCIpOwpAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6ZXhlY3V0ZVNRTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwK
ICAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oV1RGOjptb3ZlKGNhbGxiYWNrKSwgV1RGOjptb3Zl
KGVycm9yQ2FsbGJhY2spLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7CiB9CiAKLVN0cmlu
ZyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkK
K1N0cmluZyBEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKIHsK
ICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChp
dC0+dmFsdWUtPmRhdGFiYXNlKCkgPT0gZGF0YWJhc2UpCkBAIC0zMDEsNyArMzAxLDcgQEAgU3Ry
aW5nIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlSWQoRGF0YWJhc2UqIGRhdGFiYXNl
KQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSog
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZmluZEJ5RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSkKK0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UqIERhdGFiYXNlQWdlbnQ6OmZpbmRCeUZp
bGVOYW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCiB7CiAgICAgZm9yIChEYXRhYmFzZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291
cmNlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoaXQtPnZhbHVlLT5kYXRhYmFzZSgpLT5m
aWxlTmFtZSgpID09IGZpbGVOYW1lKQpAQCAtMzEwLDcgKzMxMCw3IEBAIEluc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UqIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmZpbmRCeUZpbGVOYW1lKGNvbnN0
IFN0cmluZyYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRGF0YWJhc2UqIEluc3BlY3RvckRh
dGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkKQorRGF0
YWJhc2UqIERhdGFiYXNlQWdlbnQ6OmRhdGFiYXNlRm9ySWQoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkKQogewogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3Vy
Y2VzLmZpbmQoZGF0YWJhc2VJZCk7CiAgICAgaWYgKGl0ID09IG1fcmVzb3VyY2VzLmVuZCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgK
aW5kZXggM2ZkYWEyY2I3NDE4ZTUyMzBhMmZmOWJhYWQwNGY2ZTZmM2YyYWQ1NC4uOGRlZGJiZTM2
ZWRhNTJkY2U2OTgzMTc5ZTIwMzJlMTJlMDBhOGZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBAIC00NywxMSArNDcsMTEgQEAg
Y2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CiAKLWNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
QWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CitjbGFzcyBEYXRhYmFzZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkFnZW50QmFzZSwg
cHVibGljIEluc3BlY3Rvcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyopOwotICAgIHZpcnR1YWwgfkluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQoKTsKKyAgICBleHBsaWNpdCBEYXRhYmFzZUFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqKTsKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZUFnZW50KCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nv
bm5lY3RSZWFzb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggOTQ5Y2JlNzBkZTJmN2U1MzdjOGY1
Nzc2NDY1YTQ0YmE5MjE2MTA0Mi4uMjQyNTk3NmYxNWQwNWZlYjJlNjFkMjYzMjVhNDNjY2Q2YmEx
ODRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4
ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5k
ZXhlZERCQWdlbnQuY3BwCkBAIC01NjQsMjMgKzU2NCwyMyBAQCBwdWJsaWM6CiAKIH0gLy8gbmFt
ZXNwYWNlCiAKLUluc3BlY3RvckluZGV4ZWREQkFnZW50OjpJbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQpCi0gICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJJbmRleGVkREIi
KSwgaW5zdHJ1bWVudGluZ0FnZW50cykKK0luZGV4ZWREQkFnZW50OjpJbmRleGVkREJBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgUGFnZUFnZW50KiBwYWdlQWdlbnQpCisgICAg
OiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJJbmRleGVkREIiKSwgaW5zdHJ1bWVudGluZ0Fn
ZW50cykKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdl
cikKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKIHsKIH0KIAotSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQ6On5JbnNwZWN0b3JJbmRleGVkREJBZ2VudCgpCitJbmRleGVkREJBZ2VudDo6fklu
ZGV4ZWREQkFnZW50KCkKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCit2b2lkIEluZGV4
ZWREQkFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cikKIHsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yOjpJbmRleGVkREJCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQordm9pZCBJbmRleGVkREJBZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewog
ICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIApAQCAtNTg4LDExICs1ODgsMTEgQEAg
dm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpEaXNjb25uZWMKICAgICBkaXNhYmxlKHVudXNlZCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCit2b2lkIEluZGV4
ZWREQkFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogewogfQogCi12b2lkIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK3ZvaWQgSW5kZXhlZERCQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogewogfQogCkBAIC02MTksNyArNjE5LDcgQEAgc3RhdGlj
IElEQkZhY3RvcnkqIGFzc2VydElEQkZhY3RvcnkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBE
b2N1bWVudCogZG9jdW1lbnQKICAgICByZXR1cm4gaWRiRmFjdG9yeTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlTmFtZXMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBSZWY8UmVxdWVzdERhdGFi
YXNlTmFtZXNDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluZGV4ZWREQkFnZW50
OjpyZXF1ZXN0RGF0YWJhc2VOYW1lcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYm
IHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+Zmlu
ZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNjQwLDcg
KzY0MCw3IEBAIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZU5h
bWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uCiAgICAgaWRiUmVxdWVzdC0+YWRkRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBHZXREYXRhYmFzZU5hbWVzQ2Fs
bGJhY2s6OmNyZWF0ZShXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSwgZG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCktPnRvUmF3U3RyaW5nKCkpLCBmYWxzZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
SW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQordm9pZCBJ
bmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUs
IFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihz
ZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQo
ZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAgLTY1NSw3ICs2NTUsNyBAQCB2b2lkIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdAogICAgIGRhdGFiYXNlTG9hZGVyLT5zdGFydChpZGJGYWN0b3J5LCBkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2VOYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbmRl
eGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tp
cENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYga2V5
UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKK3ZvaWQg
SW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNv
bnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50
IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiB7
CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZpbmRGcmFtZVdpdGhTZWN1cml0eU9y
aWdpbihzZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYXNzZXJ0RG9j
dW1lbnQoZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAgLTc2MCw3ICs3NjAsNyBAQCBwcml2YXRlOgog
ICAgIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsK
IAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6Y2xlYXJPYmplY3RTdG9yZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENs
ZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluZGV4ZWRE
QkFnZW50OjpjbGVhck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0
IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYm
IHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+Zmlu
ZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaAppbmRleCA0
ZDJjMTY5ODIyOGQ2MzNkMzlkZjI5ODk1YjcwYmRjOTAxY2EwMjBlLi44MjZjYWFjM2ViNGNiZTQx
YThjNGYyMTM4YTRiNmQ5ZWU1ZDQxYzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaApAQCAtNDMsMTQgKzQzLDE0IEBAIGNsYXNz
IEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJ
bnNwZWN0b3JQYWdlQWdlbnQ7CitjbGFzcyBQYWdlQWdlbnQ7CiAKIHR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JJbmRleGVkREJBZ2VudCBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CitjbGFzcyBJbmRleGVkREJBZ2VudCBmaW5hbCA6IHB1YmxpYyBX
ZWJBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyosIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9y
UGFnZUFnZW50Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoKTsKKyAg
ICBJbmRleGVkREJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqLCBQYWdlQWdlbnQqKTsKKyAgICB2aXJ0dWFsIH5JbmRleGVkREJBZ2Vu
dCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKQEAgLTY1LDcgKzY1LDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFn
ZUFnZW50OworICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uY3BwCmluZGV4IGU2MGYwZDY0NzY0Zjc5Njk0MjE0ZDlkZDRhOWMyYzdmOWFhNzI4MjMu
Ljk3OTA4NzZiMTRkYzg2MzU0ZDJkZTgxNTFjYTdhZjIwMTU5ZmVmYjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBA
IC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIEZyYW1lKiBmcmFtZUZvclNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIAogdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZEltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lLCBET01XcmFwcGVy
V29ybGQmIHdvcmxkKQogewotICAgIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKTsKKyAgICBQYWdlQWdlbnQqIHBh
Z2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCk7CiAgICAgaWYgKHBhZ2VB
Z2VudCkKICAgICAgICAgcGFnZUFnZW50LT5kaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoJmZy
YW1lLCB3b3JsZCk7CiAgICAgaWYgKFBhZ2VEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlRGVidWdnZXJBZ2VudCgpKSB7CkBAIC0xMjMsNjQgKzEy
Myw2NCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkSW1wbChJbnN0cnVtZW50aW5nQWdlbgogCiBib29sIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6aXNEZWJ1Z2dlclBhdXNlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdn
ZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpKQor
ICAgIGlmIChEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5kZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIHJldHVybiBkZWJ1Z2dlckFnZW50LT5pc1BhdXNl
ZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxJbnNlcnRET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBOb2RlJiBwYXJlbnQpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBk
b21EZWJ1Z2dlckFnZW50LT53aWxsSW5zZXJ0RE9NTm9kZShwYXJlbnQpOwogfQogCiB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zZXJ0RE9NTm9kZUltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmRvbUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5kaWRJbnNlcnRET01Ob2RlKG5vZGUp
OwotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYg
KERPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LmRvbURlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+ZGlkSW5zZXJ0
RE9NTm9kZShub2RlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxS
ZW1vdmVET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBOb2RlJiBub2RlKQogewotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21E
ZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50KCkpCisgICAgaWYgKERPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmRvbURlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJB
Z2VudC0+d2lsbFJlbW92ZURPTU5vZGUobm9kZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRSZW1vdmVET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBOb2RlJiBub2RlKQogewotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKERPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVn
Z2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbURlYnVnZ2VyQWdlbnQoKSkKICAgICAg
ICAgZG9tRGVidWdnZXJBZ2VudC0+ZGlkUmVtb3ZlRE9NTm9kZShub2RlKTsKLSAgICBpZiAoSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmRvbUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUp
OwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1vZGlmeURPTUF0dHJJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmV3VmFsdWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVn
Z2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQo
KSkKKyAgICBpZiAoRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuZG9tRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21EZWJ1Z2dlckFnZW50
LT53aWxsTW9kaWZ5RE9NQXR0cihlbGVtZW50KTsKLSAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQq
IGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAg
IGlmIChET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbUFnZW50KCkp
CiAgICAgICAgIGRvbUFnZW50LT53aWxsTW9kaWZ5RE9NQXR0cihlbGVtZW50LCBvbGRWYWx1ZSwg
bmV3VmFsdWUpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTW9kaWZ5
RE9NQXR0ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBk
b21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdl
bnQtPmRpZE1vZGlmeURPTUF0dHIoZWxlbWVudCwgbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlRE9NQXR0ckltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFn
ZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAg
ZG9tQWdlbnQtPmRpZFJlbW92ZURPTUF0dHIoZWxlbWVudCwgbmFtZSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRySW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlJiBub2RlKQogewotICAgIGlm
IChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3Bl
Y3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPmRpZEludmFsaWRhdGVTdHls
ZUF0dHIobm9kZSk7Ci0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVn
Z2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQo
KSkKKyAgICBpZiAoRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuZG9tRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21EZWJ1Z2dlckFnZW50
LT5kaWRJbnZhbGlkYXRlU3R5bGVBdHRyKG5vZGUpOwogfQogCkBAIC0xOTIsMTkgKzE5MiwxOSBA
QCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVXaW5kb3dEaXNjYXJkZWRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmIGlucwogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3Ry
dW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yQ1NTQWdlbnQoKSkKKyAgICBpZiAoQ1NTQWdl
bnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5jc3NBZ2VudCgpKQogICAgICAgICBj
c3NBZ2VudC0+bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290SW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiBpbnN0cnVtZW50aW5nQWdlbnRzLCBFbGVtZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQog
ewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPmRpZFB1c2hT
aGFkb3dSb290KGhvc3QsIHJvb3QpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbFBvcFNoYWRvd1Jvb3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRp
bmdBZ2VudHMsIEVsZW1lbnQmIGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgaWYgKElu
c3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
RE9NQWdlbnQoKSkKKyAgICBpZiAoRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5kb21BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+d2lsbFBvcFNoYWRvd1Jvb3QoaG9z
dCwgcm9vdCk7CiB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ3JlYXRlTmFtZWRGbG93SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cgogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0
b3JDU1NBZ2VudCogY3NzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckNTU0Fn
ZW50KCkpCisgICAgaWYgKENTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
Y3NzQWdlbnQoKSkKICAgICAgICAgY3NzQWdlbnQtPmRpZENyZWF0ZU5hbWVkRmxvdygqZG9jdW1l
bnQsIG5hbWVkRmxvdyk7CiB9CiAKQEAgLTIyMiw5MSArMjIyLDkxIEBAIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlTmFtZWRGbG93SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVj
dG9yQ1NTQWdlbnQoKSkKKyAgICBpZiAoQ1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5jc3NBZ2VudCgpKQogICAgICAgICBjc3NBZ2VudC0+d2lsbFJlbW92ZU5hbWVkRmxv
dygqZG9jdW1lbnQsIG5hbWVkRmxvdyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDaGFuZ2VSZWdpb25PdmVyc2V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFt
ZWRGbG93KQogewotICAgIGlmIChJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvckNTU0FnZW50KCkpCisgICAgaWYgKENTU0FnZW50KiBjc3NB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuY3NzQWdlbnQoKSkKICAgICAgICAgY3NzQWdlbnQt
PmRpZENoYW5nZVJlZ2lvbk92ZXJzZXQoZG9jdW1lbnQsIG5hbWVkRmxvdyk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVt
ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBEb2N1bWVu
dCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93LCBOb2RlJiBjb250ZW50RWxl
bWVudCwgTm9kZSogbmV4dENvbnRlbnRFbGVtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JDU1NB
Z2VudCogY3NzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckNTU0FnZW50KCkp
CisgICAgaWYgKENTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuY3NzQWdl
bnQoKSkKICAgICAgICAgY3NzQWdlbnQtPmRpZFJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1l
bnQoZG9jdW1lbnQsIG5hbWVkRmxvdywgY29udGVudEVsZW1lbnQsIG5leHRDb250ZW50RWxlbWVu
dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRVbnJlZ2lzdGVyTmFt
ZWRGbG93Q29udGVudEVsZW1lbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRp
bmdBZ2VudHMsIERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JiBuYW1lZEZsb3cs
IE5vZGUmIGNvbnRlbnRFbGVtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JDU1NBZ2VudCogY3Nz
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckNTU0FnZW50KCkpCisgICAgaWYg
KENTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuY3NzQWdlbnQoKSkKICAg
ICAgICAgY3NzQWdlbnQtPmRpZFVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudChkb2N1
bWVudCwgbmFtZWRGbG93LCBjb250ZW50RWxlbWVudCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1
bnNpZ25lZCBtb2RpZmllckZsYWdzKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9t
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYg
KERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAg
ICAgICAgZG9tQWdlbnQtPm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHJlc3VsdCwgbW9kaWZpZXJG
bGFncyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY3JvbGxJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0
b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAgICBwYWdlQWdlbnQtPmRpZFNjcm9sbCgpOwog
fQogCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlVG91Y2hFdmVudEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgTm9kZSYgbm9kZSkKIHsK
LSAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmRvbUFnZW50KCkpCiAgICAgICAgIHJldHVybiBkb21BZ2VudC0+aGFu
ZGxlVG91Y2hFdmVudChub2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCog
ZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAg
aWYgKERPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkK
ICAgICAgICAgcmV0dXJuIGRvbUFnZW50LT5oYW5kbGVNb3VzZVByZXNzKCk7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9T
dGF0ZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRWxlbWVu
dCYgZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1ZG9TdGF0ZSkKIHsK
LSAgICBpZiAoSW5zcGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JDU1NBZ2VudCgpKQorICAgIGlmIChDU1NBZ2VudCogY3NzQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmNzc0FnZW50KCkpCiAgICAgICAgIHJldHVybiBjc3NBZ2VudC0+Zm9y
Y2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBwc2V1ZG9TdGF0ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBDaGFyYWN0ZXJE
YXRhJiBjaGFyYWN0ZXJEYXRhKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKERP
TUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuZG9tQWdlbnQoKSkKICAgICAg
ICAgZG9tQWdlbnQtPmNoYXJhY3RlckRhdGFNb2RpZmllZChjaGFyYWN0ZXJEYXRhKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFN0cmluZyYg
dXJsKQogewotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisg
ICAgaWYgKERPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLmRvbURlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+d2ls
bFNlbmRYTUxIdHRwUmVxdWVzdCh1cmwpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkSW5zdGFsbFRpbWVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBwYXVzZU9uTmF0aXZlRXZlbnRJ
Zk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBmYWxzZSwgc2V0VGltZXJFdmVudE5hbWUsIHRy
dWUpOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYgKFRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdl
bnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkSW5zdGFsbFRpbWVyKHRpbWVySWQsIHRp
bWVvdXQsIHNpbmdsZVNob3QsIGZyYW1lRm9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVUaW1lcklt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgaW50IHRpbWVySWQs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgcGF1c2VPbk5hdGl2ZUV2
ZW50SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgZmFsc2UsIGNsZWFyVGltZXJFdmVudE5h
bWUsIHRydWUpOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYg
KFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVs
aW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkUmVtb3ZlVGltZXIodGltZXJJ
ZCwgZnJhbWVGb3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpKTsKIH0KIAogSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENh
bGxGdW5jdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywg
Y29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBp
ZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKSB7CisgICAgaWYgKFRpbWVsaW5lQWdlbnQq
IHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkgewog
ICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsQ2FsbEZ1bmN0aW9uKHNjcmlwdE5hbWUsIHNjcmlw
dExpbmUsIGZyYW1lRm9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KSk7CiAgICAgICAg
IHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CiAgICAgfQpAQCAtMzE1LDE0
ICszMTUsMTQgQEAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlvbkltcGwoSW4KIAogdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbkltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llJiBjb29raWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7
Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2
ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQogICAgICAgICB0aW1lbGluZUFn
ZW50LT5kaWRDYWxsRnVuY3Rpb24oZnJhbWVGb3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRl
eHQpKTsKIH0KIAogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50SW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBYTUxIdHRwUmVxdWVzdCYgcmVx
dWVzdCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBpbnQgdGltZWxp
bmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CisgICAgVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVB
Z2VudCgpOwogICAgIGlmICh0aW1lbGluZUFnZW50ICYmIHJlcXVlc3QuaGFzRXZlbnRMaXN0ZW5l
cnMoZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCkpIHsKICAgICAgICAgdGltZWxp
bmVBZ2VudC0+d2lsbERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KHJlcXVlc3QudXJs
KCkuc3RyaW5nKCksIHJlcXVlc3QucmVhZHlTdGF0ZSgpLCBmcmFtZUZvclNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoY29udGV4dCkpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFn
ZW50LT5pZCgpOwpAQCAtMzMyLDIwICszMzIsMjAgQEAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoWEhSUmVhZHlTdGEK
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoWEhSUmVhZHlTdGF0
ZUNoYW5nZUV2ZW50SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNv
b2tpZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9
IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0
aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCiAgICAgICAgIHRp
bWVsaW5lQWdlbnQtPmRpZERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KCk7CiB9CiAK
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEaXNwYXRjaEV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEV2ZW50JiBldmVudCwgYm9vbCBoYXNF
dmVudExpc3RlbmVycykKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CisgICAgVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpOwogICAgIGlmICh0aW1lbGlu
ZUFnZW50ICYmIGhhc0V2ZW50TGlzdGVuZXJzKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndp
bGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBkb2N1bWVudC5mcmFtZSgpKTsKICAgICAgICAgdGltZWxp
bmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9CiAjaWYgRU5BQkxFKFdFQl9S
RVBMQVkpCi0gICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdl
bnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAg
ICAgICByZXBsYXlBZ2VudC0+d2lsbERpc3BhdGNoRXZlbnQoZXZlbnQsIGRvY3VtZW50LmZyYW1l
KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShp
bnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50SWQpOwpAQCAtMzY1LDIwICszNjUsMjAg
QEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50SW1wbChjb25z
dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSYgY29va2llKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGlu
ZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCisgICAgaWYgKFRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKICAg
ICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hFdmVudCgpOwogfQogCiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0
Y2hFdmVudE9uV2luZG93SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyYgd2luZG93KQogewogICAgIGludCB0
aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5l
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKTsKKyAg
ICBUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1l
bGluZUFnZW50KCk7CiAgICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYgd2luZG93Lmhhc0V2ZW50TGlz
dGVuZXJzKGV2ZW50LnR5cGUoKSkpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbERpc3Bh
dGNoRXZlbnQoZXZlbnQsIHdpbmRvdy5mcmFtZSgpKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElk
ID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0g
ICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxh
eUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICByZXBs
YXlBZ2VudC0+d2lsbERpc3BhdGNoRXZlbnQoZXZlbnQsIHdpbmRvdy5mcmFtZSgpKTsKICNlbmRp
ZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGlu
Z0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKQEAgLTM4NiwxNCArMzg2LDE0IEBAIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNw
YXRjaEV2ZW50T25XaW5kCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNw
YXRjaEV2ZW50T25XaW5kb3dJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSYgY29va2llKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFn
ZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCisgICAgaWYgKFRpbWVsaW5lQWdl
bnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKICAgICAg
ICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hFdmVudCgpOwogfQogCiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVT
Y3JpcHRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1l
JiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKQogewogICAgIGludCB0
aW1lbGluZUFnZW50SWQgPSAwOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1l
bGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkp
IHsKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMudGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxFdmFs
dWF0ZVNjcmlwdCh1cmwsIGxpbmVOdW1iZXIsIGZyYW1lKTsKICAgICAgICAgdGltZWxpbmVBZ2Vu
dElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9CkBAIC00MDIsMTMgKzQwMiwxMyBAQCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsRXZhbHVhdGVTY3JpcHRJbXBsKAogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkRXZhbHVhdGVTY3JpcHRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSYgY29va2llLCBGcmFtZSYgZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdl
bnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKKyAgICBp
ZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChj
b29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRFdmFsdWF0ZVNjcmlwdChmcmFtZSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRzRW5hYmxlZEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgYm9vbCBpc0VuYWJsZWQp
CiB7Ci0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBwYWdlQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAgICBwYWdlQWdlbnQt
PnNjcmlwdHNFbmFibGVkKGlzRW5hYmxlZCk7CiB9CiAKQEAgLTQxNyw3ICs0MTcsNyBAQCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
RmlyZVRpbWVySW1wbChJbnN0cgogICAgIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGZhbHNlLCB0aW1lckZpcmVkRXZlbnROYW1lLCBmYWxzZSk7CiAKICAg
ICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVB
Z2VudCgpKSB7CisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53
aWxsRmlyZVRpbWVyKHRpbWVySWQsIGZyYW1lRm9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250
ZXh0KSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CiAg
ICAgfQpAQCAtNDI5LDIwICs0MjksMjAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZEZpcmVUaW1lckltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ28KICAgICBp
ZiAoY29va2llLmlzVmFsaWQoKSkKICAgICAgICAgY2FuY2VsUGF1c2VPbk5hdGl2ZUV2ZW50KCpj
b29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpKTsKIAotICAgIGlmIChJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCisg
ICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdl
bnQoY29va2llKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRmlyZVRpbWVyKCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlTGF5b3V0SW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUpCiB7
Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAoVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgp
KQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRJbnZhbGlkYXRlTGF5b3V0KGZyYW1lKTsKIH0K
IAogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbExheW91dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50
cywgRnJhbWUmIGZyYW1lKQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIGlm
IChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKKyAgICBpZiAoVGltZWxpbmVBZ2VudCog
dGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKSB7CiAg
ICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxMYXlvdXQoZnJhbWUpOwogICAgICAgICB0aW1lbGlu
ZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KQEAgLTQ1MSwxNyArNDUxLDE3
IEBAIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxMYXlvdXRJbXBsKEluc3RydW1lCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRMYXlvdXRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYg
Y29va2llLCBSZW5kZXJPYmplY3QqIHJvb3QpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKKyAg
ICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2Vu
dChjb29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRMYXlvdXQocm9vdCk7CiAKLSAg
ICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBjb29raWUuaW5zdHJ1bWVudGlu
Z0FnZW50cygpLT5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBwYWdl
QWdlbnQgPSBjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpLT5wYWdlQWdlbnQoKSkKICAgICAg
ICAgcGFnZUFnZW50LT5kaWRMYXlvdXQoKTsKIH0KIAogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoWEhSTG9hZEV2ZW50
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBYTUxIdHRwUmVx
dWVzdCYgcmVxdWVzdCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBp
bnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1l
bGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7
CisgICAgVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
dGltZWxpbmVBZ2VudCgpOwogICAgIGlmICh0aW1lbGluZUFnZW50ICYmIHJlcXVlc3QuaGFzRXZl
bnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLmxvYWRFdmVudCkpIHsKICAgICAgICAgdGltZWxpbmVB
Z2VudC0+d2lsbERpc3BhdGNoWEhSTG9hZEV2ZW50KHJlcXVlc3QudXJsKCksIGZyYW1lRm9yU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9
IHRpbWVsaW5lQWdlbnQtPmlkKCk7CkBAIC00NzEsNDUgKzQ3MSw0NSBAQCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hY
SFJMb2FkRXZlbgogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hY
SFJMb2FkRXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29v
a2llKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
cmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKICAgICAgICAgdGlt
ZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hYSFJMb2FkRXZlbnQoKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxQYWludEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5z
dHJ1bWVudGluZ0FnZW50cywgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICBpZiAoSW5z
cGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGlu
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRp
bWVsaW5lQWdlbnQtPndpbGxQYWludChyZW5kZXJlci0+ZnJhbWUoKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQYWludEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0
UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQorICAg
IGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy50
aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFBhaW50KHJlbmRlcmVy
LCByZWN0KTsKIAotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2VudCog
cGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKSkKICAgICAgICAgcGFn
ZUFnZW50LT5kaWRQYWludChyZW5kZXJlciwgcmVjdCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsU2Nyb2xsTGF5ZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlu
c3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
VGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdl
bnQtPndpbGxTY3JvbGwoZnJhbWUpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkU2Nyb2xsTGF5ZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAo
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxp
bmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRTY3JvbGwoKTsKIH0KIAogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bFJlY2FsY3VsYXRlU3R5bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0g
MDsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKSB7CisgICAgaWYgKFRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdl
bnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsUmVjYWxjdWxhdGVTdHlsZShkb2N1
bWVudC5mcmFtZSgpKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+
aWQoKTsKICAgICB9Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBp
ZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVz
b3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT53aWxsUmVjYWxjdWxhdGVTdHls
ZSgpOwogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVu
dGluZ0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKIH0KQEAgLTUyMSwyNSArNTIxLDI1IEBAIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNhbGN1bGF0ZVN0eWxlSW1wbChjb25z
dCBJbnNwZWN0b3JJbnN0cnVtZW50CiAgICAgCiAgICAgSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5z
dHJ1bWVudGluZ0FnZW50cyA9ICpjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpOwogCi0gICAg
aWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVs
aW5lQWdlbnQoY29va2llKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9
IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5k
aWRSZWNhbGN1bGF0ZVN0eWxlKCk7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJl
c291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQo
KSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNhbGN1
bGF0ZVN0eWxlKCk7Ci0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50
KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAgICBw
YWdlQWdlbnQtPmRpZFJlY2FsY3VsYXRlU3R5bGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0g
ICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAoVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKQog
ICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihkb2N1
bWVudC5mcmFtZSgpKTsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAg
IGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5y
ZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFNjaGVkdWxlU3R5bGVS
ZWNhbGN1bGF0aW9uKGRvY3VtZW50KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmFwcGx5RW11bGF0ZWRNZWRpYUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVu
dGluZ0FnZW50cywgU3RyaW5nJiBtZWRpYSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50
KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQor
ICAgIGlmIChQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFn
ZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+YXBwbHlFbXVsYXRlZE1lZGlhKG1lZGlhKTsKIH0K
IApAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
U2VuZFJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lCiAgICAgaWYgKCFs
b2FkZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50
KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KCkpCisgICAgaWYgKFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLnJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbFNl
bmRSZXF1ZXN0KGlkZW50aWZpZXIsICpsb2FkZXIsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2Up
OwogfQogCkBAIC01NTksNyArNTU5LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJgogCiB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFya1Jlc291cmNlQXNDYWNoZWRJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllcikKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChS
ZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJj
ZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPm1hcmtSZXNvdXJjZUFzQ2FjaGVkKGlk
ZW50aWZpZXIpOwogfQogCkBAIC01NzEsNyArNTcxLDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUltcGwoSW5zdHJ1bWVudGlu
Z0EKICAgICBpZiAoIWxvYWRlciB8fCAhY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYgKFJlc291cmNl
QWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291cmNlQWdlbnQo
KSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hl
KCpsb2FkZXIsICpjYWNoZWRSZXNvdXJjZSk7CiB9CiAKQEAgLTU5MCw3ICs1OTAsNyBAQCB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBs
KGNvbnN0IEluc3BlY3RvcklucwogCiAgICAgSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVu
dGluZ0FnZW50cyA9ICpjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpOwogCi0gICAgaWYgKElu
c3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Lmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3Vy
Y2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICBy
ZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgKmxvYWRlciwgcmVz
cG9uc2UsIHJlc291cmNlTG9hZGVyKTsKICAgICBpZiAoV2ViQ29uc29sZUFnZW50KiBjb25zb2xl
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKQogICAgICAgICBj
b25zb2xlQWdlbnQtPmRpZFJlY2VpdmVSZXNwb25zZShpZGVudGlmaWVyLCByZXNwb25zZSk7IC8v
IFRoaXMgc2hvdWxkIGNvbWUgQUZURVIgcmVzb3VyY2Ugbm90aWZpY2F0aW9uLCBmcm9udC1lbmQg
cmVsaWVzIG9uIHRoaXMuCkBAIC02MjIsNyArNjIyLDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeUlnbm9yZUltcGwoRnJhbWUqIGZyYW1lLCBEb2N1
bWUKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVEYXRhSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERh
dGFMZW5ndGgpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBp
ZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVz
b3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlRGF0YShpZGVu
dGlmaWVyLCBkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0aCk7CiB9CiAKQEAgLTYz
MSw3ICs2MzEsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoTG9h
ZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bQogICAgIGlmICghbG9hZGVyKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3Vy
Y2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQor
ICAgIGlmIChSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5yZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZEZpbmlzaExvYWRp
bmcoaWRlbnRpZmllciwgKmxvYWRlciwgZmluaXNoVGltZSk7CiB9CiAKQEAgLTY0MCw3ICs2NDAs
NyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExvYWRpbmdJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbgogICAgIGlmICghbG9hZGVyKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChS
ZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJj
ZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZEZhaWxMb2FkaW5nKGlkZW50aWZp
ZXIsICpsb2FkZXIsIGVycm9yKTsKICAgICBpZiAoV2ViQ29uc29sZUFnZW50KiBjb25zb2xlQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKQogICAgICAgICBjb25z
b2xlQWdlbnQtPmRpZEZhaWxMb2FkaW5nKGlkZW50aWZpZXIsIGVycm9yKTsgLy8gVGhpcyBzaG91
bGQgY29tZSBBRlRFUiByZXNvdXJjZSBub3RpZmljYXRpb24sIGZyb250LWVuZCByZWxpZXMgb24g
dGhpcy4KQEAgLTY1MCw1OCArNjUwLDU4IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRGaW5pc2hYSFJMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0CiB7CiAg
ICAgaWYgKFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5kaWRGaW5pc2hYSFJM
b2FkaW5nKGlkZW50aWZpZXIsIHVybCwgc2VuZFVSTCwgc2VuZExpbmVOdW1iZXIsIHNlbmRDb2x1
bW5OdW1iZXIpOwotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCisgICAgaWYg
KFJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlc291
cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkRmluaXNoWEhSTG9hZGluZyhj
bGllbnQsIGlkZW50aWZpZXIsIHNvdXJjZVN0cmluZyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlWEhSUmVzcG9uc2VJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKLSAg
ICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50
KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAg
ICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVYSFJSZXNwb25zZShpZGVudGlmaWVyKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSU3luY2hyb25v
dXNseUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAg
ICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50
KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAg
ICAgICAgIHJlc291cmNlQWdlbnQtPndpbGxMb2FkWEhSU3luY2hyb25vdXNseSgpOwogfQogCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFhIUlN5bmNocm9ub3VzbHlJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgaWYgKElu
c3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Lmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3Vy
Y2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICBy
ZXNvdXJjZUFnZW50LT5kaWRMb2FkWEhSU3luY2hyb25vdXNseSgpOwogfQogCiB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VTdHJpbmcpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdl
bnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5zZXRJbml0
aWFsU2NyaXB0Q29udGVudChpZGVudGlmaWVyLCBzb3VyY2VTdHJpbmcpOwogfQogCiB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIGRp
cmVjdGl2ZVRleHQpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2Vy
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKSkKKyAg
ICBpZiAoRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
ZGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkZWJ1Z2dlckFnZW50LT5zY3JpcHRFeGVjdXRpb25C
bG9ja2VkQnlDU1AoZGlyZWN0aXZlVGV4dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRSZWNlaXZlU2NyaXB0UmVzcG9uc2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAg
ICAgIHJlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVTY3JpcHRSZXNwb25zZShpZGVudGlmaWVyKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvbUNvbnRlbnRMb2FkZWRFdmVu
dEZpcmVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFt
ZSYgZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBp
ZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGlt
ZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRNYXJrRE9NQ29udGVudEV2
ZW50KGZyYW1lKTsKIAogICAgIGlmICghZnJhbWUuaXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAoRE9NQWdlbnQqIGRvbUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+bWFp
bkZyYW1lRE9NQ29udGVudExvYWRlZCgpOwogCi0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCog
cGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAg
ICBpZiAoUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2Vu
dCgpKQogICAgICAgICBwYWdlQWdlbnQtPmRvbUNvbnRlbnRFdmVudEZpcmVkKCk7CiB9CiAKQEAg
LTcxMCwyNiArNzEwLDI2IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2FkRXZl
bnRGaXJlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVuCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQo
KSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMudGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRNYXJrTG9h
ZEV2ZW50KCpmcmFtZSk7CiAKICAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQq
IHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCkpCiAgICAgICAgIHBh
Z2VBZ2VudC0+bG9hZEV2ZW50RmlyZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdl
bnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LnBhZ2VBZ2VudCgpKQogICAgICAgICBwYWdlQWdlbnQtPmZyYW1lRGV0YWNoZWQoZnJhbWUpOwog
CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlm
IChSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFn
ZW50KCkpCiAgICAgICAgIHJlcGxheUFnZW50LT5mcmFtZURldGFjaGVkKGZyYW1lKTsKICNlbmRp
ZgogfQpAQCAtNzQ2LDMwICs3NDYsMzAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENvbW1pdExvYWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnQKICAgICAg
ICAgaWYgKFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgICAgIGNvbnNvbGVBZ2VudC0+cmVzZXQoKTsK
IAotICAgICAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgICAgICBpZiAo
UmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3Vy
Y2VBZ2VudCgpKQogICAgICAgICAgICAgcmVzb3VyY2VBZ2VudC0+bWFpbkZyYW1lTmF2aWdhdGVk
KCpsb2FkZXIpOwogCi0gICAgICAgIGlmIChJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckNTU0FnZW50KCkpCisgICAgICAgIGlmIChDU1NB
Z2VudCogY3NzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmNzc0FnZW50KCkpCiAgICAgICAg
ICAgICBjc3NBZ2VudC0+cmVzZXQoKTsKIAotICAgICAgICBpZiAoSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudCogZGF0YWJhc2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRGF0YWJh
c2VBZ2VudCgpKQorICAgICAgICBpZiAoRGF0YWJhc2VBZ2VudCogZGF0YWJhc2VBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMuZGF0YWJhc2VBZ2VudCgpKQogICAgICAgICAgICAgZGF0YWJhc2VB
Z2VudC0+Y2xlYXJSZXNvdXJjZXMoKTsKIAotICAgICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQq
IGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAg
ICAgICBpZiAoRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21BZ2Vu
dCgpKQogICAgICAgICAgICAgZG9tQWdlbnQtPnNldERvY3VtZW50KHBhZ2UtPm1haW5GcmFtZSgp
LmRvY3VtZW50KCkpOwogCi0gICAgICAgIGlmIChJbnNwZWN0b3JMYXllclRyZWVBZ2VudCogbGF5
ZXJUcmVlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckxheWVyVHJlZUFnZW50
KCkpCisgICAgICAgIGlmIChMYXllclRyZWVBZ2VudCogbGF5ZXJUcmVlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmxheWVyVHJlZUFnZW50KCkpCiAgICAgICAgICAgICBsYXllclRyZWVBZ2Vu
dC0+cmVzZXQoKTsKICAgICB9CiAKLSAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChET01B
Z2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbUFnZW50KCkpCiAgICAgICAg
IGRvbUFnZW50LT5kaWRDb21taXRMb2FkKGxvYWRlci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAK
LSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZnJh
bWVOYXZpZ2F0ZWQobG9hZGVyKTsKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIGlmIChJ
bnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmlu
c3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQt
PmZyYW1lTmF2aWdhdGVkKGxvYWRlcik7CiAjZW5kaWYKIH0KQEAgLTc3OCw1MCArNzc4LDUwIEBA
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZURvY3VtZW50VXBkYXRlZEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zCiB7CiAgICAgaWYgKCFpbnN0cnVtZW50aW5nQWdlbnRz
Lmluc3BlY3RvckVudmlyb25tZW50KCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAoRE9NQWdlbnQqIGRvbUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kb21BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+
ZnJhbWVEb2N1bWVudFVwZGF0ZWQoZnJhbWUpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6bG9hZGVyRGV0YWNoZWRGcm9tRnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIERvY3VtZW50TG9hZGVyJiBsb2FkZXIpCiB7Ci0gICAgaWYg
KEluc3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBpbnNwZWN0b3JQ
YWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAgICBpbnNw
ZWN0b3JQYWdlQWdlbnQtPmxvYWRlckRldGFjaGVkRnJvbUZyYW1lKGxvYWRlcik7CiB9CiAKIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVN0YXJ0ZWRMb2FkaW5nSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUpCiB7Ci0g
ICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoUGFnZUFnZW50KiBpbnNw
ZWN0b3JQYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VBZ2VudCgpKQogICAgICAg
ICBpbnNwZWN0b3JQYWdlQWdlbnQtPmZyYW1lU3RhcnRlZExvYWRpbmcoZnJhbWUpOwogfQogCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVTdG9wcGVkTG9hZGluZ0ltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lKQogewot
ICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIGluc3BlY3RvclBhZ2VBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2VudCogaW5z
cGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKSkKICAgICAg
ICAgaW5zcGVjdG9yUGFnZUFnZW50LT5mcmFtZVN0b3BwZWRMb2FkaW5nKGZyYW1lKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbklt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1l
LCBkb3VibGUgZGVsYXkpCiB7Ci0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9y
UGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAg
ICBpZiAoUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LnBhZ2VBZ2VudCgpKQogICAgICAgICBpbnNwZWN0b3JQYWdlQWdlbnQtPmZyYW1lU2NoZWR1bGVk
TmF2aWdhdGlvbihmcmFtZSwgZGVsYXkpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lKQogewotICAgIGlmIChJbnNw
ZWN0b3JQYWdlQWdlbnQqIGluc3BlY3RvclBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
aW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKFBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlQWdlbnQoKSkKICAgICAgICAgaW5zcGVjdG9y
UGFnZUFnZW50LT5mcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKGZyYW1lKTsKIH0KIAog
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbFJ1bkphdmFTY3JpcHREaWFsb2dJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1l
bnRpbmdBZ2VudHMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9y
UGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3Bl
Y3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQqIGluc3BlY3RvclBhZ2VBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZUFnZW50KCkpCiAgICAgICAgIGluc3BlY3RvclBhZ2VB
Z2VudC0+d2lsbFJ1bkphdmFTY3JpcHREaWFsb2cobWVzc2FnZSk7CiAgICAgcmV0dXJuIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCAwKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJ1bkphdmFTY3JpcHREaWFsb2dJbXBs
KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQogewotICAgIGlm
IChJbnNwZWN0b3JQYWdlQWdlbnQqIGluc3BlY3RvclBhZ2VBZ2VudCA9IGNvb2tpZS5pbnN0cnVt
ZW50aW5nQWdlbnRzKCktPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChQYWdlQWdlbnQq
IGluc3BlY3RvclBhZ2VBZ2VudCA9IGNvb2tpZS5pbnN0cnVtZW50aW5nQWdlbnRzKCktPnBhZ2VB
Z2VudCgpKQogICAgICAgICBpbnNwZWN0b3JQYWdlQWdlbnQtPmRpZFJ1bkphdmFTY3JpcHREaWFs
b2coKTsKIH0KIApAQCAtODMxLDcgKzgzMSw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsRGVzdHJveUNhY2hlZFJlc291cmNlSW1wbChDYWNoZWRSZXNvdXJjZSYgY2FjCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50IDogKnNf
aW5zdHJ1bWVudGluZ0FnZW50c1NldCkgewotICAgICAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCogaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudC0+aW5zcGVj
dG9yUmVzb3VyY2VBZ2VudCgpKQorICAgICAgICBpZiAoUmVzb3VyY2VBZ2VudCogaW5zcGVjdG9y
UmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudC0+cmVzb3VyY2VBZ2VudCgpKQogICAg
ICAgICAgICAgaW5zcGVjdG9yUmVzb3VyY2VBZ2VudC0+d2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJj
ZShjYWNoZWRSZXNvdXJjZSk7CiAgICAgfQogfQpAQCAtODM5LDcgKzgzOSw3IEBAIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJveUNhY2hlZFJlc291cmNlSW1wbChDYWNo
ZWRSZXNvdXJjZSYgY2FjCiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBzdGFydExpbmUsIEZyYW1lKiBmcmFtZSkKIHsK
ICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxp
bmVBZ2VudCgpKSB7CisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50
LT53aWxsV3JpdGVIVE1MKHN0YXJ0TGluZSwgZnJhbWUpOwogICAgICAgICB0aW1lbGluZUFnZW50
SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KQEAgLTg0OCwxMSArODQ4LDExIEBAIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxXcml0ZUhUTUxJbXBsKEluc3RyCiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRXcml0ZUhUTUxJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29v
a2llLCB1bnNpZ25lZCBlbmRMaW5lKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50
KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCisgICAgaWYg
KFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29v
a2llKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkV3JpdGVIVE1MKGVuZExpbmUpOwogfQog
Ci0vLyBKYXZhU2NyaXB0Q29yZSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHNob3VsZCBrbm93IENv
bnNvbGUgTWVzc2FnZVR5cGVzLgorLy8gSmF2YVNjcmlwdENvcmUgRGVidWdnZXJBZ2VudCBzaG91
bGQga25vdyBDb25zb2xlIE1lc3NhZ2VUeXBlcy4KIHN0YXRpYyBib29sIGlzQ29uc29sZUFzc2Vy
dE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUpCiB7CiAgICAg
cmV0dXJuIHNvdXJjZSA9PSBNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJICYmIHR5cGUgPT0gTWVz
c2FnZVR5cGU6OkFzc2VydDsKQEAgLTg2Niw4ICs4NjYsOCBAQCB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdAogCiAgICAgaWYgKFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5hZGRN
ZXNzYWdlVG9Db25zb2xlKFdURjo6bW92ZShtZXNzYWdlKSk7Ci0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGp1c3QgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUgZGVidWdnZXIgYWdlbnQuIEph
dmFTY3JpcHRDb3JlIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgc2hvdWxkIGtub3cgQ29uc29sZSBN
ZXNzYWdlVHlwZXMuCi0gICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKSkgeworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBqdXN0IHBhc3MgdGhlIG1lc3NhZ2Ugb24gdG8gdGhlIGRl
YnVnZ2VyIGFnZW50LiBKYXZhU2NyaXB0Q29yZSBEZWJ1Z2dlckFnZW50IHNob3VsZCBrbm93IENv
bnNvbGUgTWVzc2FnZVR5cGVzLgorICAgIGlmIChEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kZWJ1Z2dlckFnZW50KCkpIHsKICAgICAgICAgaWYgKGlz
Q29uc29sZUFzc2VydE1lc3NhZ2Uoc291cmNlLCB0eXBlKSkKICAgICAgICAgICAgIGRlYnVnZ2Vy
QWdlbnQtPmhhbmRsZUNvbnNvbGVBc3NlcnQobWVzc2FnZVRleHQpOwogICAgIH0KQEAgLTg4MSw3
ICs4ODEsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50SW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aQogCiB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7
Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAoVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgp
KQogICAgICAgICB0aW1lbGluZUFnZW50LT50aW1lKGZyYW1lLCB0aXRsZSk7CiAgICAgaWYgKFdl
YkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25z
b2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5zdGFydFRpbWluZyh0aXRsZSk7CkBA
IC04OTEsMTMgKzg5MSwxMyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENv
bnNvbGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydQogewogICAgIGlmIChX
ZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2ViQ29u
c29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+c3RvcFRpbWluZyh0aXRsZSwgc3Rh
Y2spOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgaWYgKFRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdl
bnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+dGltZUVuZChmcmFtZSwgdGl0bGUpOwogfQog
CiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVRpbWVTdGFtcEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lLCBSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
VGltZWxpbmVBZ2VudCgpKSB7CisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLnRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICBTdHJpbmcg
bWVzc2FnZTsKICAgICAgICAgYXJndW1lbnRzLT5nZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcobWVz
c2FnZSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFRpbWVTdGFtcChmcmFtZSwgbWVzc2Fn
ZSk7CkBAIC05MDYsMTMgKzkwNiwxMyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Y29uc29sZVRpbWVTdGFtcEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bQogCiB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRQcm9maWxpbmdJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1l
bGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxp
bmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50VGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGlu
ZUFnZW50LT5zdGFydEZyb21Db25zb2xlKGV4ZWMsIHRpdGxlKTsKIH0KIAogUmVmUHRyPEpTQzo6
UHJvZmlsZT4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudFRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAg
cmV0dXJuIHRpbWVsaW5lQWdlbnQtPnN0b3BGcm9tQ29uc29sZShleGVjLCB0aXRsZSk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CkBAIC05MjEsMjYgKzkyMSwyNiBAQCB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZQogewogICAgIGlmICghaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JFbnZpcm9u
bWVudCgpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlm
IChJbnNwZWN0b3JEYXRhYmFzZUFnZW50KiBkYkFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JEYXRhYmFzZUFnZW50KCkpCisgICAgaWYgKERhdGFiYXNlQWdlbnQqIGRiQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmRhdGFiYXNlQWdlbnQoKSkKICAgICAgICAgZGJBZ2VudC0+
ZGlkT3BlbkRhdGFiYXNlKGRhdGFiYXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOwogfQogCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBT
dG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBQ
YWdlKiBwYWdlKQogewotICAgIGlmIChJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQqIGRvbVN0b3Jh
Z2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KCkp
CisgICAgaWYgKERPTVN0b3JhZ2VBZ2VudCogZG9tU3RvcmFnZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5kb21TdG9yYWdlQWdlbnQoKSkKICAgICAgICAgZG9tU3RvcmFnZUFnZW50LT5kaWRE
aXNwYXRjaERPTVN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc3RvcmFnZVR5
cGUsIHNlY3VyaXR5T3JpZ2luLCBwYWdlKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNob3VsZFBhdXNlRGVkaWNhdGVkV29ya2VyT25TdGFydEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9yV29ya2Vy
QWdlbnQqIHdvcmtlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JXb3JrZXJB
Z2VudCgpKQorICAgIGlmIChXb3JrZXJBZ2VudCogd29ya2VyQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLndvcmtlckFnZW50KCkpCiAgICAgICAgIHJldHVybiB3b3JrZXJBZ2VudC0+c2hvdWxk
UGF1c2VEZWRpY2F0ZWRXb3JrZXJPblN0YXJ0KCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU3RhcnRXb3JrZXJHbG9iYWxTY29wZUlt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgV29ya2VyR2xvYmFs
U2NvcGVQcm94eSogd29ya2VyR2xvYmFsU2NvcGVQcm94eSwgY29uc3QgVVJMJiB1cmwpCiB7Ci0g
ICAgaWYgKEluc3BlY3RvcldvcmtlckFnZW50KiB3b3JrZXJBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yV29ya2VyQWdlbnQoKSkKKyAgICBpZiAoV29ya2VyQWdlbnQqIHdvcmtl
ckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy53b3JrZXJBZ2VudCgpKQogICAgICAgICB3b3Jr
ZXJBZ2VudC0+ZGlkU3RhcnRXb3JrZXJHbG9iYWxTY29wZSh3b3JrZXJHbG9iYWxTY29wZVByb3h5
LCB1cmwpOwogfQogCkBAIC05NTksNyArOTU5LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxFdmFsdWF0ZVdvcmtlclNjcmlwdChXb3JrZXJHbG9iYWxTY29wZSogd29ya2UK
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondvcmtlckdsb2JhbFNjb3BlVGVybWlu
YXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgV29ya2Vy
R2xvYmFsU2NvcGVQcm94eSogcHJveHkpCiB7Ci0gICAgaWYgKEluc3BlY3RvcldvcmtlckFnZW50
KiB3b3JrZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yV29ya2VyQWdlbnQo
KSkKKyAgICBpZiAoV29ya2VyQWdlbnQqIHdvcmtlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy53b3JrZXJBZ2VudCgpKQogICAgICAgICB3b3JrZXJBZ2VudC0+d29ya2VyR2xvYmFsU2NvcGVU
ZXJtaW5hdGVkKHByb3h5KTsKIH0KIApAQCAtOTcyLDkgKzk3Miw5IEBAIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXZWJTb2NrZXRJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmIGluc3RyCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVz
b3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAg
ICByZXNvdXJjZUFnZW50LT5kaWRDcmVhdGVXZWJTb2NrZXQoaWRlbnRpZmllciwgcmVxdWVzdFVS
TCk7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAoVGltZWxp
bmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2Vu
dCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRDcmVhdGVXZWJTb2NrZXQoaWRlbnRpZmll
ciwgcmVxdWVzdFVSTCwgcHJvdG9jb2wsIGRvY3VtZW50LT5mcmFtZSgpKTsKIH0KIApAQCAtOTgz
LDkgKzk4Myw5IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFdlYlNv
Y2tldEhhbmRzaGFrZVJlcXVlc3RJbXBsKEluc3RydW1lbnRpCiAgICAgaWYgKCFkb2N1bWVudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291
cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkK
KyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT53aWxsU2VuZFdlYlNv
Y2tldEhhbmRzaGFrZVJlcXVlc3QoaWRlbnRpZmllciwgcmVxdWVzdCk7Ci0gICAgaWYgKEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmlu
c3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1l
bGluZUFnZW50LT53aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QoaWRlbnRpZmllciwg
ZG9jdW1lbnQtPmZyYW1lKCkpOwogfQogCkBAIC05OTQsOSArOTk0LDkgQEAgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZUlt
cGwoSW5zdHJ1bWUKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAg
ICAgIHJlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShp
ZGVudGlmaWVyLCByZXNwb25zZSk7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQo
KSkKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMudGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRSZWNlaXZl
V2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoaWRlbnRpZmllciwgZG9jdW1lbnQtPmZyYW1lKCkp
OwogfQogCkBAIC0xMDA1LDI1ICsxMDA1LDI1IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDbG9zZVdlYlNvY2tldEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1CiAg
ICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluc3BlY3RvclJl
c291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3Rv
clJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFn
ZW50LT5kaWRDbG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKLSAgICBpZiAoSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
VGltZWxpbmVBZ2VudCgpKQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdl
bnQtPmRpZERlc3Ryb3lXZWJTb2NrZXQoaWRlbnRpZmllciwgZG9jdW1lbnQtPmZyYW1lKCkpOwog
fQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEZy
YW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQorICAgIGlmIChSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXNvdXJjZUFnZW50KCkpCiAgICAg
ICAgIHJlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZShpZGVudGlmaWVyLCBm
cmFtZSk7CiB9CiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNv
Y2tldEZyYW1lRXJyb3JJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
CiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKKyAgICBpZiAoUmVzb3Vy
Y2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVzb3VyY2VBZ2Vu
dCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVFcnJv
cihpZGVudGlmaWVyLCBlcnJvck1lc3NhZ2UpOwogfQogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFNlbmRXZWJTb2NrZXRGcmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5z
dHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2Nr
ZXRGcmFtZSYgZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291
cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkK
KyAgICBpZiAoUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMucmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRTZW5kV2ViU29j
a2V0RnJhbWUoaWRlbnRpZmllciwgZnJhbWUpOwogfQogI2VuZGlmCkBAIC0xMDMxLDExMyArMTAz
MSwxMTMgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNlbmRXZWJTb2NrZXRG
cmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW4KICNpZiBFTkFCTEUoV0VCX1JFUExBWSkK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZEltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb24+
JiYgc2Vzc2lvbikKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChS
ZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50
KCkpCiAgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uQ3JlYXRlZChXVEY6Om1vdmUoc2Vzc2lv
bikpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkxvYWRlZElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxh
eVNlc3Npb24+JiYgc2Vzc2lvbikKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJl
cGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQor
ICAgIGlmIChSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJl
cGxheUFnZW50KCkpCiAgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTG9hZGVkKFdURjo6bW92
ZShzZXNzaW9uKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9u
TW9kaWZpZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlcGxh
eUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5
QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICByZXBsYXlBZ2VudC0+c2Vzc2lvbk1vZGlm
aWVkKFdURjo6bW92ZShzZXNzaW9uKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzZWdtZW50Q3JlYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGlu
Z0FnZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7Ci0gICAg
aWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxheUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICByZXBsYXlB
Z2VudC0+c2VnbWVudENyZWF0ZWQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4m
JiBzZWdtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgaWYgKFJl
cGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVwbGF5QWdlbnQo
KSkKICAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRDb21wbGV0ZWQoV1RGOjptb3ZlKHNlZ21l
bnQpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFJlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlB
Z2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFn
ZW50KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRMb2FkZWQo
V1RGOjptb3ZlKHNlZ21lbnQpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlZ21lbnRVbmxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0Fn
ZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBsYXlB
Z2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkpCiAg
ICAgICAgIHJlcGxheUFnZW50LT5zZWdtZW50VW5sb2FkZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdGFydGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCog
cmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkp
CisgICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
cmVwbGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPmNhcHR1cmVTdGFydGVkKCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYXB0dXJlU3RvcHBlZEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVj
dG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0
b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkpCiAgICAgICAgIHJlcGxheUFnZW50LT5jYXB0
dXJlU3RvcHBlZCgpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxheWJh
Y2tTdGFydGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQog
ewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiBy
ZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAg
cmVwbGF5QWdlbnQtPnBsYXliYWNrU3RhcnRlZCgpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6cGxheWJhY2tQYXVzZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgIGlmIChSZXBsYXlBZ2VudCogcmVwbGF5QWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnJlcGxheUFnZW50KCkpCiAgICAgICAgIHJlcGxheUFn
ZW50LT5wbGF5YmFja1BhdXNlZChwb3NpdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpwbGF5YmFja0hpdFBvc2l0aW9uSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0g
ICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKKyAgICBpZiAoUmVwbGF5QWdlbnQqIHJlcGxh
eUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5yZXBsYXlBZ2VudCgpKQogICAgICAgICByZXBs
YXlBZ2VudC0+cGxheWJhY2tIaXRQb3NpdGlvbihwb3NpdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja0ZpbmlzaGVkSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2Vu
dCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50
KCkpCisgICAgaWYgKFJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMucmVwbGF5QWdlbnQoKSkKICAgICAgICAgcmVwbGF5QWdlbnQtPnBsYXliYWNrRmluaXNoZWQo
KTsKIH0KICNlbmRpZgogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0
YXRlQ2hhbmdlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykK
IHsKLSAgICBpZiAoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNh
Y2hlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudCgpKQorICAgIGlmIChBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIGFwcGxpY2F0aW9uQ2FjaGVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuYXBwbGljYXRpb25DYWNoZUFnZW50KCkpCiAgICAg
ICAgIGFwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwogfQogCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1
c0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUqIGZy
YW1lKQogewotICAgIGlmIChJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIGFwcGxpY2F0
aW9uQ2FjaGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50KCkpCisgICAgaWYgKEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRpb25D
YWNoZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5hcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSkK
ICAgICAgICAgYXBwbGljYXRpb25DYWNoZUFnZW50LT51cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3Rh
dHVzKGZyYW1lKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVB
Z2VudEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCkKIHsKICAgICBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAg
SW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
ID8gaW5zdHJ1bWVudGluZ0FnZW50cy0+d2ViQ29uc29sZUFnZW50KCkgOiBudWxscHRyOworICAg
IENvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cyA/IGluc3Ry
dW1lbnRpbmdBZ2VudHMtPndlYkNvbnNvbGVBZ2VudCgpIDogbnVsbHB0cjsKICAgICByZXR1cm4g
Y29uc29sZUFnZW50ICYmIGNvbnNvbGVBZ2VudC0+ZW5hYmxlZCgpOwogfQogCiBib29sIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6dGltZWxpbmVBZ2VudEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKIHsKICAgICBJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHMg
JiYgaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOworICAgIHJl
dHVybiBpbnN0cnVtZW50aW5nQWdlbnRzICYmIGluc3RydW1lbnRpbmdBZ2VudHMtPnRpbWVsaW5l
QWdlbnQoKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlcGxheUFnZW50
RW5hYmxlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQog
ewogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChzY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKLSAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50cyAmJiBpbnN0cnVt
ZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpOworICAgIHJldHVybiBpbnN0cnVt
ZW50aW5nQWdlbnRzICYmIGluc3RydW1lbnRpbmdBZ2VudHMtPnJlcGxheUFnZW50KCk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xMTQ2LDEzICsxMTQ2LDEzIEBAIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpyZXBsYXlBZ2VudEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRl
ZChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBib29sIGlzRE9NRXZl
bnQsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3VzKQogewotICAgIGlm
IChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKERPTURlYnVn
Z2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmRvbURlYnVn
Z2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+cGF1c2VPbk5hdGl2ZUV2ZW50
SWZOZWVkZWQoaXNET01FdmVudCwgZXZlbnROYW1lLCBzeW5jaHJvbm91cyk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYW5jZWxQYXVzZU9uTmF0aXZlRXZlbnQoSW5zdHJ1
bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9y
RGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVj
dG9yRGVidWdnZXJBZ2VudCgpKQorICAgIGlmIChEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5kZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRlYnVnZ2Vy
QWdlbnQtPmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCk7CiB9CiAKQEAgLTExNjAsNyArMTE2
MCw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZXF1ZXN0QW5pbWF0aW9u
RnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmCiB7CiAgICAgcGF1c2VPbk5hdGl2ZUV2ZW50
SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgZmFsc2UsIHJlcXVlc3RBbmltYXRpb25GcmFt
ZUV2ZW50TmFtZSwgdHJ1ZSk7CiAKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGlt
ZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxpbmVBZ2VudCgp
KQorICAgIGlmIChUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy50aW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFJlcXVlc3RB
bmltYXRpb25GcmFtZShjYWxsYmFja0lkLCBmcmFtZSk7CiB9CiAKQEAgLTExNjgsNyArMTE2OCw3
IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYW5jZWxBbmltYXRpb25GcmFt
ZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYKIHsKICAgICBwYXVzZU9uTmF0aXZlRXZlbnRJZk5l
ZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBmYWxzZSwgY2FuY2VsQW5pbWF0aW9uRnJhbWVFdmVu
dE5hbWUsIHRydWUpOwogCi0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5l
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAg
ICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
dGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRDYW5jZWxBbmltYXRp
b25GcmFtZShjYWxsYmFja0lkLCBmcmFtZSk7CiB9CiAKQEAgLTExNzcsNyArMTE3Nyw3IEBAIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxGaXJlQW5pbWF0aW9uRnJhbWVJCiAgICAgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoaW5z
dHJ1bWVudGluZ0FnZW50cywgZmFsc2UsIGFuaW1hdGlvbkZyYW1lRmlyZWRFdmVudE5hbWUsIGZh
bHNlKTsKIAogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIGlmIChJbnNwZWN0b3JU
aW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0
b3JUaW1lbGluZUFnZW50KCkpIHsKKyAgICBpZiAoVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMudGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIHRpbWVs
aW5lQWdlbnQtPndpbGxGaXJlQW5pbWF0aW9uRnJhbWUoY2FsbGJhY2tJZCwgZnJhbWUpOwogICAg
ICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KQEAgLTEx
ODYsNyArMTE4Niw3IEBAIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxGaXJlQW5pbWF0aW9uRnJhbWVJCiAKIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRGaXJlQW5pbWF0aW9uRnJhbWVJbXBsKGNvbnN0IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1l
bGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkp
CisgICAgaWYgKFRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5l
QWdlbnQoY29va2llKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRmlyZUFuaW1hdGlvbkZy
YW1lKCk7CiB9CiAKQEAgLTEyMTAsMTIgKzEyMTAsMTIgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnVucmVnaXN0ZXJJbnN0cnVtZW50aW5nQWdlbnRzKEluc3RydW1lbnRpbmdBZ2Vu
dHMKICAgICB9CiB9CiAKLUluc3BlY3RvclRpbWVsaW5lQWdlbnQqIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6cmV0cmlldmVUaW1lbGluZUFnZW50KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSYgY29va2llKQorVGltZWxpbmVBZ2VudCogSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpyZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llJiBjb29raWUpCiB7CiAgICAgaWYgKCFjb29raWUuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSBjb29raWUuaW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50
KCk7CisgICAgVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGNvb2tpZS5pbnN0cnVtZW50
aW5nQWdlbnRzKCktPnRpbWVsaW5lQWdlbnQoKTsKICAgICBpZiAodGltZWxpbmVBZ2VudCAmJiBj
b29raWUuaGFzTWF0Y2hpbmdUaW1lbGluZUFnZW50SWQodGltZWxpbmVBZ2VudC0+aWQoKSkpCiAg
ICAgICAgIHJldHVybiB0aW1lbGluZUFnZW50OwogICAgIHJldHVybiBudWxscHRyOwpAQCAtMTI1
MiwxOSArMTI1MiwxOSBAQCBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JOb25Eb2N1bWVudAogCiB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6bGF5ZXJUcmVlRGlkQ2hhbmdlSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JMYXllclRyZWVB
Z2VudCogbGF5ZXJUcmVlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckxheWVy
VHJlZUFnZW50KCkpCisgICAgaWYgKExheWVyVHJlZUFnZW50KiBsYXllclRyZWVBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMubGF5ZXJUcmVlQWdlbnQoKSkKICAgICAgICAgbGF5ZXJUcmVlQWdl
bnQtPmxheWVyVHJlZURpZENoYW5nZSgpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6cmVuZGVyTGF5ZXJEZXN0cm95ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGNvbnN0IFJlbmRlckxheWVyJiByZW5kZXJMYXllcikKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQqIGxheWVyVHJlZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JMYXllclRyZWVBZ2VudCgpKQorICAgIGlmIChMYXllclRyZWVBZ2Vu
dCogbGF5ZXJUcmVlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmxheWVyVHJlZUFnZW50KCkp
CiAgICAgICAgIGxheWVyVHJlZUFnZW50LT5yZW5kZXJMYXllckRlc3Ryb3llZChyZW5kZXJMYXll
cik7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwc2V1ZG9FbGVtZW50RGVz
dHJveWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQc2V1
ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JMYXllclRyZWVB
Z2VudCogbGF5ZXJUcmVlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckxheWVy
VHJlZUFnZW50KCkpCisgICAgaWYgKExheWVyVHJlZUFnZW50KiBsYXllclRyZWVBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMubGF5ZXJUcmVlQWdlbnQoKSkKICAgICAgICAgbGF5ZXJUcmVlQWdl
bnQtPnBzZXVkb0VsZW1lbnREZXN0cm95ZWQocHNldWRvRWxlbWVudCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRl
eCBhZDhkZTZiZjQ2NDRhMmRlMDZmMzhmZGU1YzEzMGJlYTdlM2FjY2ExLi42OTA0MjQyMjMwZWU0
Mjc3YjRhMWYwZWUxNjJkYmZjMmVhM2JhZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC02OCw2ICs2OCw3IEBAIGNs
YXNzIFByb2ZpbGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTQWdlbnQ7CiBj
bGFzcyBDU1NSdWxlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFzcyBDaGFyYWN0ZXJEYXRh
OwpAQCAtODAsMTIgKzgxLDkgQEAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSFRU
UEhlYWRlck1hcDsKLWNsYXNzIEluc3BlY3RvckNTU0FnZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NT
T01XcmFwcGVyczsKIGNsYXNzIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjsKLWNsYXNzIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwotY2xhc3MgVVJM
OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBzZXVkb0VsZW1lbnQ7CiBjbGFzcyBSZW5kZXJMYXllcjsK
QEAgLTEwMCw2ICs5OCw4IEBAIGNsYXNzIFN0b3JhZ2VBcmVhOwogY2xhc3MgU3R5bGVSZXNvbHZl
cjsKIGNsYXNzIFN0eWxlUnVsZTsKIGNsYXNzIFRocmVhZGFibGVMb2FkZXJDbGllbnQ7CitjbGFz
cyBUaW1lbGluZUFnZW50OworY2xhc3MgVVJMOwogY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7CiBj
bGFzcyBXb3JrZXJHbG9iYWxTY29wZVByb3h5OwogY2xhc3MgWE1MSHR0cFJlcXVlc3Q7CkBAIC00
NTgsNyArNDU4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKFdvcmtlckdsb2JhbFNjb3Bl
Kik7CiAgICAgc3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNG
b3JOb25Eb2N1bWVudENvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCi0gICAgc3Rh
dGljIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHJldHJpZXZlVGltZWxpbmVBZ2VudChjb25zdCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKKyAgICBzdGF0aWMgVGltZWxpbmVBZ2Vu
dCogcmV0cmlldmVUaW1lbGluZUFnZW50KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSYpOwogCiAgICAgc3RhdGljIHZvaWQgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoSW5z
dHJ1bWVudGluZ0FnZW50cyYsIGJvb2wgaXNET01FdmVudCwgY29uc3QgU3RyaW5nJiBldmVudE5h
bWUsIGJvb2wgc3luY2hyb25vdXMpOwogICAgIHN0YXRpYyB2b2lkIGNhbmNlbFBhdXNlT25OYXRp
dmVFdmVudChJbnN0cnVtZW50aW5nQWdlbnRzJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAppbmRleCBiZTY0NDk2ZTQ2Mzhk
MDBjM2VjMjg5MDg2NTZhZTY3N2E3Mzg5NzU4Li45Y2IxZjBhYTA0ZWRiM2NkODIzN2RiN2Y1OTM3
MDQ2NzAyYTAxZmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTQ2LDIzICs0NiwyMyBAQCB1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzKQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgi
TGF5ZXJUcmVlIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCitMYXllclRyZWVBZ2VudDo6TGF5ZXJU
cmVlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKKyAgICA6
IFdlYkFnZW50QmFzZShBU0NJSUxpdGVyYWwoIkxheWVyVHJlZSIpLCBpbnN0cnVtZW50aW5nQWdl
bnRzKQogewogfQogCi1JbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6fkluc3BlY3RvckxheWVyVHJl
ZUFnZW50KCkKK0xheWVyVHJlZUFnZW50Ojp+TGF5ZXJUcmVlQWdlbnQoKQogewogICAgIHJlc2V0
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3ZvaWQgTGF5
ZXJUcmVlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6
bWFrZV91bmlxdWU8SW5zcGVjdG9yOjpMYXllclRyZWVGcm9udGVuZERpc3BhdGNoZXI+KGZyb250
ZW5kQ2hhbm5lbCk7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3Rvcjo6TGF5ZXJU
cmVlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKK3ZvaWQgTGF5ZXJUcmVlQWdlbnQ6
OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNv
bikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CiAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci5jbGVhcigpOwpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nv
bm5lYwogICAgIGRpc2FibGUodW51c2VkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6cmVzZXQoKQordm9pZCBMYXllclRyZWVBZ2VudDo6cmVzZXQoKQogewogICAgIG1fZG9j
dW1lbnRMYXllclRvSWRNYXAuY2xlYXIoKTsKICAgICBtX2lkVG9MYXllci5jbGVhcigpOwpAQCAt
NzksMzYgKzc5LDM2IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlc2V0KCkKICAg
ICBtX2lkVG9Qc2V1ZG9FbGVtZW50LmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJU
cmVlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCit2b2lkIExheWVyVHJlZUFnZW50OjplbmFi
bGUoRXJyb3JTdHJpbmcmKQogewotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQodGhpcyk7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRM
YXllclRyZWVBZ2VudCh0aGlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6
ZGlzYWJsZShFcnJvclN0cmluZyYpCit2b2lkIExheWVyVHJlZUFnZW50OjpkaXNhYmxlKEVycm9y
U3RyaW5nJikKIHsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckxheWVy
VHJlZUFnZW50KG51bGxwdHIpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0TGF5ZXJU
cmVlQWdlbnQobnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6Omxh
eWVyVHJlZURpZENoYW5nZSgpCit2b2lkIExheWVyVHJlZUFnZW50OjpsYXllclRyZWVEaWRDaGFu
Z2UoKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sYXllclRyZWVEaWRDaGFuZ2UoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVuZGVyTGF5ZXJEZXN0cm95ZWQo
Y29uc3QgUmVuZGVyTGF5ZXImIHJlbmRlckxheWVyKQordm9pZCBMYXllclRyZWVBZ2VudDo6cmVu
ZGVyTGF5ZXJEZXN0cm95ZWQoY29uc3QgUmVuZGVyTGF5ZXImIHJlbmRlckxheWVyKQogewogICAg
IHVuYmluZCgmcmVuZGVyTGF5ZXIpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50
Ojpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKFBzZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1lbnQpCit2
b2lkIExheWVyVHJlZUFnZW50Ojpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKFBzZXVkb0VsZW1lbnQm
IHBzZXVkb0VsZW1lbnQpCiB7CiAgICAgdW5iaW5kUHNldWRvRWxlbWVudCgmcHNldWRvRWxlbWVu
dCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXll
cnMpCit2b2lkIExheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQogewogICAgIGxh
eWVycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6Okxh
eWVyVHJlZTo6TGF5ZXI+OjpjcmVhdGUoKTsKIAotICAgIE5vZGUqIG5vZGUgPSBtX2luc3RydW1l
bnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQpOworICAg
IE5vZGUqIG5vZGUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmRvbUFnZW50KCktPm5vZGVGb3JJ
ZChub2RlSWQpOwogICAgIGlmICghbm9kZSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJ
TGl0ZXJhbCgiUHJvdmlkZWQgbm9kZSBpZCBkb2Vzbid0IG1hdGNoIGFueSBrbm93biBub2RlIik7
CiAgICAgICAgIHJldHVybjsKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5v
ZGVJZAogICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3Ry
aW5nLCByZW5kZXJlciwgbGF5ZXJzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXll
cnMpCit2b2lkIExheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhp
ZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpM
YXllclRyZWU6OkxheWVyPj4mIGxheWVycykKIHsKICAgICBpZiAocmVuZGVyZXItPmhhc0xheWVy
KCkpIHsKICAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShlcnJv
clN0cmluZywgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXll
cigpLCBsYXllcnMpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KEVycm9yU3RyaW5n
CiAgICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3Ry
aW5nLCByZW5kZXJlciwgbGF5ZXJzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5kZXJMYXllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5
ZXJzKQordm9pZCBMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhp
ZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5kZXJMYXll
ciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJMYXllci0+aXND
b21wb3NpdGVkKCkpCiAgICAgICAgIGxheWVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckxheWVy
KGVycm9yU3RyaW5nLCByZW5kZXJMYXllcikpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJj
aHkoRXJyb3JTdHJpbmcmCiAgICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVy
YXJjaHkoZXJyb3JTdHJpbmcsIHJlbmRlckxheWVyLCBsYXllcnMpOwogfQogCi1SZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZW5kZXJMYXll
ciogcmVuZGVyTGF5ZXIpCitSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXll
cj4gTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9ICZyZW5kZXJMYXllci0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJMYXllckJhY2tp
bmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOwpAQCAtMjAyLDEyICsyMDIsMTIg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEYKICAgICByZXR1cm4gV1RGOjptb3ZlKGxheWVyT2Jq
ZWN0KTsKIH0KIAotaW50IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjppZEZvck5vZGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBOb2RlKiBub2RlKQoraW50IExheWVyVHJlZUFnZW50OjppZEZv
ck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBOb2RlKiBub2RlKQogewogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCk7CisgICAgRE9N
QWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5kb21BZ2VudCgpOwogICAg
IAogICAgIGludCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQobm9kZSk7CiAgICAgaWYg
KCFub2RlSWQpCkBAIC0yMTYsNyArMjE2LDcgQEAgaW50IEluc3BlY3RvckxheWVyVHJlZUFnZW50
OjppZEZvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBOb2RlKiBub2RlKQogICAgIHJl
dHVybiBub2RlSWQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Oklu
dFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK1JlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Oklu
dFJlY3Q+IExheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJ
bnRSZWN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0WChyZWN0LngoKSkKQEAgLTIyNiw3ICsyMjYs
NyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNwZWN0
b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplYwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi12
b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYgY29tcG9z
aXRpbmdSZWFzb25zUmVzdWx0KQordm9pZCBMYXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBv
c2l0aW5nTGF5ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGxheWVy
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVh
c29ucz4mIGNvbXBvc2l0aW5nUmVhc29uc1Jlc3VsdCkKIHsKICAgICBjb25zdCBSZW5kZXJMYXll
ciogcmVuZGVyTGF5ZXIgPSBtX2lkVG9MYXllci5nZXQobGF5ZXJJZCk7CiAKQEAgLTMxMyw3ICsz
MTMsNyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRp
bmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogICAgIGNvbXBvc2l0aW5nUmVhc29uc1Jl
c3VsdCA9IFdURjo6bW92ZShjb21wb3NpdGluZ1JlYXNvbnMpOwogfQogCi1TdHJpbmcgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQorU3RyaW5n
IExheWVyVHJlZUFnZW50OjpiaW5kKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikKIHsKICAgICBp
ZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKQEAgLTMyNiw3ICszMjYs
NyBAQCBTdHJpbmcgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5
ZXIqIGxheWVyKQogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQogCi12b2lkIEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50Ojp1bmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQordm9pZCBMYXll
clRyZWVBZ2VudDo6dW5iaW5kKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikKIHsKICAgICBIYXNo
TWFwPGNvbnN0IFJlbmRlckxheWVyKiwgU3RyaW5nPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Rv
Y3VtZW50TGF5ZXJUb0lkTWFwLmZpbmQobGF5ZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX2Rv
Y3VtZW50TGF5ZXJUb0lkTWFwLmVuZCgpKQpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OnVuYmluZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpCiAgICAg
bV9kb2N1bWVudExheWVyVG9JZE1hcC5yZW1vdmUoaXRlcmF0b3IpOwogfQogCi1TdHJpbmcgSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmRQc2V1ZG9FbGVtZW50KFBzZXVkb0VsZW1lbnQqIHBz
ZXVkb0VsZW1lbnQpCitTdHJpbmcgTGF5ZXJUcmVlQWdlbnQ6OmJpbmRQc2V1ZG9FbGVtZW50KFBz
ZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQpCiB7CiAgICAgaWYgKCFwc2V1ZG9FbGVtZW50KQog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKQEAgLTM0OCw3ICszNDgsNyBAQCBTdHJpbmcg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmRQc2V1ZG9FbGVtZW50KFBzZXVkb0VsZW1lbnQq
IHBzZXVkb0VsZW1lbnQpCiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OnVuYmluZFBzZXVkb0VsZW1lbnQoUHNldWRvRWxlbWVudCogcHNl
dWRvRWxlbWVudCkKK3ZvaWQgTGF5ZXJUcmVlQWdlbnQ6OnVuYmluZFBzZXVkb0VsZW1lbnQoUHNl
dWRvRWxlbWVudCogcHNldWRvRWxlbWVudCkKIHsKICAgICBIYXNoTWFwPFBzZXVkb0VsZW1lbnQq
LCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fcHNldWRvRWxlbWVudFRvSWRNYXAuZmlu
ZChwc2V1ZG9FbGVtZW50KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9wc2V1ZG9FbGVtZW50VG9J
ZE1hcC5lbmQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckxh
eWVyVHJlZUFnZW50LmgKaW5kZXggNWFiYzEzNzUzMjU2ZDg0NDUyNmUyYjM1OThmNGFjMTJiM2Nl
NTc1MS4uMzJkY2YzODJkZDM2NmI1YjFlOGMzMGVhZDBmYThkM2NjNDEzYjIyNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKQEAg
LTQ0LDExICs0NCwxMSBAQCBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogCiB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpMYXllclRyZWVC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworY2xhc3MgTGF5ZXJUcmVlQWdlbnQgZmluYWwgOiBw
dWJsaWMgV2ViQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpMYXllclRyZWVCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIGV4cGxpY2l0IEluc3BlY3RvckxheWVyVHJlZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMq
KTsKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3JMYXllclRyZWVBZ2VudCgpOworICAgIGV4cGxpY2l0
IExheWVyVHJlZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqKTsKKyAgICB2aXJ0dWFsIH5MYXll
clRyZWVBZ2VudCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6QmFja2VuZERpc3Bh
dGNoZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggOGY5Y2Nl
Nzc2ODBmNjIyNmRlNDY4OWMxMmIzZjUwNDZkYzM0MWI5ZS4uNDM0ZDg0NjU1ZTFhZWZlZTI1ODgy
MjIwMTFiZTI0MGY4OTM5OTQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTExMiw4ICsxMTIsOCBAQCBzdGF0aWMgYm9vbCBwcmVw
YXJlQ2FjaGVkUmVzb3VyY2VCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBi
b29sKiBoYQogCiBzdGF0aWMgYm9vbCBoYXNUZXh0Q29udGVudChDYWNoZWRSZXNvdXJjZSogY2Fj
aGVkUmVzb3VyY2UpCiB7Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlw
ZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKCpjYWNoZWRSZXNvdXJj
ZSk7Ci0gICAgcmV0dXJuIHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVudFJlc291
cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3VyY2UgfHwg
dHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlIHx8IHR5cGUgPT0gSW5z
cGVjdG9yUGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKKyAgICBQYWdlQWdlbnQ6OlJlc291cmNlVHlw
ZSB0eXBlID0gUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNhY2hlZFJlc291cmNlKTsK
KyAgICByZXR1cm4gdHlwZSA9PSBQYWdlQWdlbnQ6OkRvY3VtZW50UmVzb3VyY2UgfHwgdHlwZSA9
PSBQYWdlQWdlbnQ6OlN0eWxlc2hlZXRSZXNvdXJjZSB8fCB0eXBlID09IFBhZ2VBZ2VudDo6U2Ny
aXB0UmVzb3VyY2UgfHwgdHlwZSA9PSBQYWdlQWdlbnQ6OlhIUlJlc291cmNlOwogfQogCiBzdGF0
aWMgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZVhIUlRleHREZWNvZGVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSkKQEAgLTEz
MSw3ICsxMzEsNyBAQCBzdGF0aWMgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZVhI
UlRleHREZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsCiAgICAgcmV0dXJuIFdURjo6bW92
ZShkZWNvZGVyKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNl
Q29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyogcmVzdWx0LCBi
b29sKiBiYXNlNjRFbmNvZGVkKQorYm9vbCBQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVu
dChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyogcmVzdWx0LCBib29sKiBi
YXNlNjRFbmNvZGVkKQogewogICAgIGJvb2wgaGFzWmVyb1NpemU7CiAgICAgYm9vbCBwcmVwYXJl
ZCA9IHByZXBhcmVDYWNoZWRSZXNvdXJjZUJ1ZmZlcihjYWNoZWRSZXNvdXJjZSwgJmhhc1plcm9T
aXplKTsKQEAgLTE3OSwyMSArMTc5LDIxIEBAIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNo
ZWRSZXNvdXJjZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBTCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6bWFpblJlc291cmNl
Q29udGVudChGcmFtZSogZnJhbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1
bHQpCitib29sIFBhZ2VBZ2VudDo6bWFpblJlc291cmNlQ29udGVudChGcmFtZSogZnJhbWUsIGJv
b2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gYnVmZmVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPm1haW5S
ZXNvdXJjZURhdGEoKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRhdGFDb250ZW50KGJ1ZmZlci0+ZGF0YSgp
LCBidWZmZXItPnNpemUoKSwgZnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKSwgd2l0
aEJhc2U2NEVuY29kZSwgcmVzdWx0KTsKKyAgICByZXR1cm4gUGFnZUFnZW50OjpkYXRhQ29udGVu
dChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCksIGZyYW1lLT5kb2N1bWVudCgpLT5pbnB1
dEVuY29kaW5nKCksIHdpdGhCYXNlNjRFbmNvZGUsIHJlc3VsdCk7CiB9CiAKIC8vIHN0YXRpYwot
Ym9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29s
IHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KQorYm9vbCBQYWdlQWdlbnQ6OnNoYXJl
ZEJ1ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVz
dWx0KQogewogICAgIHJldHVybiBkYXRhQ29udGVudChidWZmZXIgPyBidWZmZXItPmRhdGEoKSA6
IG51bGxwdHIsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgpIDogMCwgdGV4dEVuY29kaW5nTmFtZSwg
d2l0aEJhc2U2NEVuY29kZSwgcmVzdWx0KTsKIH0KIAotYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRhdGFDb250ZW50KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUsIGNvbnN0IFN0cmlu
ZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3Vs
dCkKK2Jvb2wgUGFnZUFnZW50OjpkYXRhQ29udGVudChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBzaXplLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVu
Y29kZSwgU3RyaW5nKiByZXN1bHQpCiB7CiAgICAgaWYgKHdpdGhCYXNlNjRFbmNvZGUpIHsKICAg
ICAgICAgKnJlc3VsdCA9IGJhc2U2NEVuY29kZShkYXRhLCBzaXplKTsKQEAgLTIwNCw3ICsyMDQs
NyBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGF0YUNvbnRlbnQoY29uc3QgY2hhciogZGF0
YSwgdW5zaWduZWQgc2l6ZSwgY29uc3QgU3RyaQogfQogCiAvLyBzdGF0aWMKLXZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBG
cmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0
RW5jb2RlZCkKK3ZvaWQgUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcqIHJlc3VsdCwg
Ym9vbCogYmFzZTY0RW5jb2RlZCkKIHsKICAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gYXNz
ZXJ0RG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKICAgICBpZiAoIWxvYWRlcikK
QEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250
ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLAogfQogCiAvL3N0YXRp
YwotU3RyaW5nIEluc3BlY3RvclBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQorU3RyaW5nIFBhZ2VBZ2VudDo6c291cmNlTWFw
VVJMRm9yUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQogewogICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNvdXJjZU1hcEhUVFBIZWFkZXIs
IChBU0NJSUxpdGVyYWwoIlNvdXJjZU1hcCIpKSk7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgc291cmNlTWFwSFRUUEhlYWRlckRlcHJlY2F0ZWQsIChBU0NJSUxp
dGVyYWwoIlgtU291cmNlTWFwIikpKTsKQEAgLTI0NywxMyArMjQ3LDEzIEBAIFN0cmluZyBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKENhY2hlZFJlc291cmNlKiBj
YWNoZWRSZXNvdXJjCiAKICAgICBTdHJpbmcgY29udGVudDsKICAgICBib29sIGJhc2U2NEVuY29k
ZWQ7Ci0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KGNh
Y2hlZFJlc291cmNlLCAmY29udGVudCwgJmJhc2U2NEVuY29kZWQpICYmICFiYXNlNjRFbmNvZGVk
KQorICAgIGlmIChQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudChjYWNoZWRSZXNvdXJj
ZSwgJmNvbnRlbnQsICZiYXNlNjRFbmNvZGVkKSAmJiAhYmFzZTY0RW5jb2RlZCkKICAgICAgICAg
cmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmZpbmRTdHlsZXNoZWV0U291cmNlTWFwVVJM
KGNvbnRlbnQpOwogCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1DYWNoZWRSZXNvdXJjZSog
SW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShGcmFtZSogZnJhbWUsIGNvbnN0IFVS
TCYgdXJsKQorQ2FjaGVkUmVzb3VyY2UqIFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UoRnJhbWUq
IGZyYW1lLCBjb25zdCBVUkwmIHVybCkKIHsKICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVz
b3VyY2UgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5jYWNoZWRS
ZXNvdXJjZSh1cmwpOwogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpIHsKQEAgLTI2Nyw3ICsyNjcs
NyBAQCBDYWNoZWRSZXNvdXJjZSogSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShG
cmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiBjYWNoZWRSZXNvdXJjZTsK
IH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBh
Z2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlw
ZSByZXNvdXJjZVR5cGUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUg
UGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKFBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHJlc291
cmNlVHlwZSkKIHsKICAgICBzd2l0Y2ggKHJlc291cmNlVHlwZSkgewogICAgIGNhc2UgRG9jdW1l
bnRSZXNvdXJjZToKQEAgLTI5MCw0MSArMjkwLDQxIEBAIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24oSW5z
CiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6T3Ro
ZXI7CiB9CiAKLUluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VB
Z2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNv
dXJjZSkKK1BhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VU
eXBlKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKICAgICBzd2l0Y2gg
KGNhY2hlZFJlc291cmNlLnR5cGUoKSkgewogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdl
UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OkltYWdlUmVzb3Vy
Y2U7CisgICAgICAgIHJldHVybiBQYWdlQWdlbnQ6OkltYWdlUmVzb3VyY2U7CiAjaWYgRU5BQkxF
KFNWR19GT05UUykKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6CiAj
ZW5kaWYKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OkZvbnRSZXNvdXJjZTsKKyAgICAgICAgcmV0dXJuIFBh
Z2VBZ2VudDo6Rm9udFJlc291cmNlOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxl
U2hlZXQ6CiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KICNpZiBFTkFCTEUoWFNMVCkKICAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgogI2VuZGlmCi0gICAgICAgIHJldHVy
biBJbnNwZWN0b3JQYWdlQWdlbnQ6OlN0eWxlc2hlZXRSZXNvdXJjZTsKKyAgICAgICAgcmV0dXJu
IFBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291cmNlOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OlNjcmlwdDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0UmVzb3Vy
Y2U7CisgICAgICAgIHJldHVybiBQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlOwogICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpYSFJSZXNvdXJjZTsKKyAgICAgICAgcmV0dXJuIFBhZ2VBZ2VudDo6WEhSUmVzb3Vy
Y2U7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlOworICAgICAgICByZXR1cm4g
UGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlOwor
ICAgIHJldHVybiBQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2U7CiB9CiAKLUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291
cmNlVHlwZUpzb24oY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQorSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3Vy
Y2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7CiAgICAg
cmV0dXJuIHJlc291cmNlVHlwZUpzb24oY2FjaGVkUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNl
KSk7CiB9CiAKLUluc3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNs
aWVudCogY2xpZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQotICAgIDogSW5zcGVjdG9y
QWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiUGFnZSIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorUGFn
ZUFnZW50OjpQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3Rvck92ZXJsYXkq
IG92ZXJsYXkpCisgICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJQYWdlIiksIGluc3Ry
dW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX3BhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50KGNsaWVu
dCkKICAgICAsIG1fb3ZlcmxheShvdmVybGF5KQpAQCAtMzM3LDEzICszMzcsMTMgQEAgSW5zcGVj
dG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRl
bmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cikKK3ZvaWQgUGFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6UGFnZUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJv
bnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yOjpQYWdl
QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIFBhZ2VBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewogICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNs
ZWFyKCk7CkBAIC0zNTUsMjUgKzM1NSwyNSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6d2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhcwogI2Vu
ZGlmCiB9CiAKLWRvdWJsZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnRpbWVzdGFtcCgpCitkb3VibGUg
UGFnZUFnZW50Ojp0aW1lc3RhbXAoKQogewogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMtPmluc3BlY3RvckVudmlyb25tZW50KCkuZXhlY3V0aW9uU3RvcHdhdGNoKCktPmVsYXBzZWRU
aW1lKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcm
KQordm9pZCBQYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgbV9lbmFibGVk
ID0gdHJ1ZTsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclBhZ2VBZ2Vu
dCh0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFBhZ2VBZ2VudCh0aGlzKTsK
IAogICAgIGlmIChGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKSkKICAgICAgICAgbV9vcmlnaW5h
bFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkID0gIWZyYW1lLT5zZXR0aW5ncygpLmlzU2NyaXB0RW5h
YmxlZCgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYpCit2b2lkIFBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgbV9lbmFi
bGVkID0gZmFsc2U7CiAgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5jbGVhcigpOwotICAg
IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yUGFnZUFnZW50KG51bGxwdHIpOwor
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0UGFnZUFnZW50KG51bGxwdHIpOwogCiAgICAg
RXJyb3JTdHJpbmcgdW51c2VkOwogICAgIHNldFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkKHVudXNl
ZCwgbV9vcmlnaW5hbFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkKTsKQEAgLTM4MSw3ICszODEsNyBA
QCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAgc2V0
RW11bGF0ZWRNZWRpYSh1bnVzZWQsIGVtcHR5U3RyaW5nKCkpOwogfQogCi12b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgc291cmNlLCBTdHJpbmcqIGlkZW50aWZpZXIpCit2b2lkIFBhZ2VBZ2VudDo6YWRk
U2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc291cmNl
LCBTdHJpbmcqIGlkZW50aWZpZXIpCiB7CiAgICAgaWYgKCFtX3NjcmlwdHNUb0V2YWx1YXRlT25M
b2FkKQogICAgICAgICBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcwog
ICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQtPnNldFN0cmluZygqaWRlbnRpZmllciwgc291
cmNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbW92ZVNjcmlwdFRvRXZhbHVh
dGVPbkxvYWQoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit2
b2lkIFBhZ2VBZ2VudDo6cmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyYg
ZXJyb3IsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICBpZiAoIW1fc2NyaXB0c1Rv
RXZhbHVhdGVPbkxvYWQgfHwgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC0+ZmluZChpZGVudGlm
aWVyKSA9PSBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLT5lbmQoKSkgewogICAgICAgICBlcnJv
ciA9IEFTQ0lJTGl0ZXJhbCgiU2NyaXB0IG5vdCBmb3VuZCIpOwpAQCAtNDA1LDEzICs0MDUsMTMg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWQo
RXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdAogICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQt
PnJlbW92ZShpZGVudGlmaWVyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbG9h
ZChFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSWdub3JlQ2FjaGUsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKQordm9pZCBQYWdlQWdl
bnQ6OnJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSWdub3Jl
Q2FjaGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKQogewog
ICAgIG1fcGVuZGluZ1NjcmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlID0gb3B0aW9uYWxTY3JpcHRU
b0V2YWx1YXRlT25Mb2FkID8gKm9wdGlvbmFsU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCA6ICIiOwog
ICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkucmVsb2FkKG9wdGlvbmFsSWdub3JlQ2Fj
aGUgPyAqb3B0aW9uYWxJZ25vcmVDYWNoZSA6IGZhbHNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6Om5hdmlnYXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCit2b2lk
IFBhZ2VBZ2VudDo6bmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkKIHsK
ICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdV
c2VyR2VzdHVyZSk7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKQEAg
LTQ4Niw3ICs0ODYsNyBAQCBzdGF0aWMgVmVjdG9yPFVSTD4gYWxsUmVzb3VyY2VzVVJMc0ZvckZy
YW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiYgY29va2ll
cykKK3ZvaWQgUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+
JiBjb29raWVzKQogewogICAgIC8vIElmIHdlIGNhbiBnZXQgcmF3IGNvb2tpZXMuCiAgICAgTGlz
dEhhc2hTZXQ8Q29va2llPiByYXdDb29raWVzTGlzdDsKQEAgLTUyOCwxOSArNTI4LDE5IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFyCiAgICAgICAgIGNvb2tpZXMgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIFBhZ2VB
Z2VudDo6ZGVsZXRlQ29va2llKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1l
LCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBVUkwgcGFyc2VkVVJMKFBhcnNlZFVSTFN0cmlu
ZywgdXJsKTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQogICAgICAgICBXZWJD
b3JlOjpkZWxldGVDb29raWUoZnJhbWUtPmRvY3VtZW50KCksIHBhcnNlZFVSTCwgY29va2llTmFt
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoRXJyb3JT
dHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRy
ZWU+JiBvYmplY3QpCit2b2lkIFBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5n
JiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiYg
b2JqZWN0KQogewogICAgIG9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKCZtX3BhZ2Ut
Pm1haW5GcmFtZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNl
Q29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkK
K3ZvaWQgUGFnZUFnZW50OjpnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGNv
bnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gYXNzZXJ0
RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUpCkBAIC01NTQsNyAr
NTU0LDcgQEAgc3RhdGljIGJvb2wgdGV4dENvbnRlbnRGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyoKICAgICBpZiAoaGFzVGV4dENvbnRlbnQo
Y2FjaGVkUmVzb3VyY2UpKSB7CiAgICAgICAgIFN0cmluZyBjb250ZW50OwogICAgICAgICBib29s
IGJhc2U2NEVuY29kZWQ7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJl
c291cmNlQ29udGVudChjYWNoZWRSZXNvdXJjZSwgcmVzdWx0LCAmYmFzZTY0RW5jb2RlZCkpIHsK
KyAgICAgICAgaWYgKFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KGNhY2hlZFJlc291
cmNlLCByZXN1bHQsICZiYXNlNjRFbmNvZGVkKSkgewogICAgICAgICAgICAgQVNTRVJUKCFiYXNl
NjRFbmNvZGVkKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC01NjIs
NyArNTYyLDcgQEAgc3RhdGljIGJvb2wgdGV4dENvbnRlbnRGb3JDYWNoZWRSZXNvdXJjZShDYWNo
ZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyoKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBi
b29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJl
c3VsdHMpCit2b2lkIFBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVl
cnksIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCog
Y29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRz
KQogewogICAgIHJlc3VsdHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7CiAKQEAgLTYw
NSw3ICs2MDUsNyBAQCBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJj
aFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoYwogICAgICAgICAucmVsZWFzZSgp
OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNo
UmVzdWx0Pj4mIHJlc3VsdCkKK3ZvaWQgUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxD
YXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFy
Y2hSZXN1bHQ+PiYgcmVzdWx0KQogewogICAgIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD46OmNyZWF0ZSgp
OwogCkBAIC02MzIsNyArNjMyLDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaElu
UmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb24KICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXREb2N1bWVudENvbnRlbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgaHRt
bCkKK3ZvaWQgUGFnZUFnZW50OjpzZXREb2N1bWVudENvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgaHRtbCkKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBhc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAg
aWYgKCFmcmFtZSkKQEAgLTY0Niw3ICs2NDYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
c2V0RG9jdW1lbnRDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaQog
ICAgIERPTVBhdGNoU3VwcG9ydDo6cGF0Y2hEb2N1bWVudChkb2N1bWVudCwgaHRtbCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYs
IGJvb2wgc2hvdykKK3ZvaWQgUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmlu
ZyYsIGJvb2wgc2hvdykKIHsKICAgICBtX3Nob3dQYWludFJlY3RzID0gc2hvdzsKICAgICBtX2Ns
aWVudC0+c2V0U2hvd1BhaW50UmVjdHMoc2hvdyk7CkBAIC02NTcsNyArNjU3LDcgQEAgdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBz
aG93KQogICAgIG1fb3ZlcmxheS0+c2V0U2hvd2luZ1BhaW50UmVjdHMoc2hvdyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJp
bmcmLCBJbnNwZWN0b3I6OlBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3VsdCogc3Rh
dHVzKQordm9pZCBQYWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmlu
ZyYsIEluc3BlY3Rvcjo6UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0KiBzdGF0
dXMpCiB7CiAgICAgYm9vbCBkaXNhYmxlZEJ5U2NyaXB0Q29udHJvbGxlciA9IGZhbHNlOwogICAg
IGJvb2wgZGlzYWJsZWRJblNldHRpbmdzID0gZmFsc2U7CkBAIC02NzgsNyArNjc4LDcgQEAgdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmlu
ZyYsIEluc3BlY3Rvcjo6UGFnZUIKICAgICAgICAgKnN0YXR1cyA9IEluc3BlY3Rvcjo6UGFnZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0OjpGb3JiaWRkZW47CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxlZChFcnJvclN0cmluZyYs
IGJvb2wgdmFsdWUpCit2b2lkIFBhZ2VBZ2VudDo6c2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQo
RXJyb3JTdHJpbmcmLCBib29sIHZhbHVlKQogewogICAgIGlmICghbWFpbkZyYW1lKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTY4OCw3ICs2ODgsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
c2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIHZhbHVlKQogICAg
IG1faWdub3JlU2NyaXB0c0VuYWJsZWROb3RpZmljYXRpb24gPSBmYWxzZTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJh
bWUsIERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCit2b2lkIFBhZ2VBZ2VudDo6ZGlkQ2xlYXJXaW5k
b3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKIHsK
ICAgICBpZiAoJndvcmxkICE9ICZtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNzA4LDE4ICs3MDgsMTggQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENs
ZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3IKICAgICAg
ICAgZnJhbWUtPnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHQobV9zY3JpcHRUb0V2YWx1YXRlT25Mb2Fk
T25jZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpkb21Db250ZW50RXZlbnRGaXJl
ZCgpCit2b2lkIFBhZ2VBZ2VudDo6ZG9tQ29udGVudEV2ZW50RmlyZWQoKQogewogICAgIG1faXNG
aXJzdExheW91dEFmdGVyT25Mb2FkID0gdHJ1ZTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
ZG9tQ29udGVudEV2ZW50RmlyZWQodGltZXN0YW1wKCkpOwogfQogCi12b2lkIEluc3BlY3RvclBh
Z2VBZ2VudDo6bG9hZEV2ZW50RmlyZWQoKQordm9pZCBQYWdlQWdlbnQ6OmxvYWRFdmVudEZpcmVk
KCkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZEV2ZW50RmlyZWQodGltZXN0YW1w
KCkpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKK3ZvaWQgUGFnZUFnZW50OjpmcmFtZU5hdmlnYXRlZChEb2N1bWVu
dExvYWRlciogbG9hZGVyKQogewogICAgIGlmIChsb2FkZXItPmZyYW1lKCktPmlzTWFpbkZyYW1l
KCkpIHsKICAgICAgICAgbV9zY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZSA9IG1fcGVuZGluZ1Nj
cmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlOwpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpmcmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5mcmFtZU5hdmlnYXRlZChidWlsZE9iamVjdEZvckZyYW1l
KGxvYWRlci0+ZnJhbWUoKSkpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVE
ZXRhY2hlZChGcmFtZSYgZnJhbWUpCit2b2lkIFBhZ2VBZ2VudDo6ZnJhbWVEZXRhY2hlZChGcmFt
ZSYgZnJhbWUpCiB7CiAgICAgSGFzaE1hcDxGcmFtZSosIFN0cmluZz46Oml0ZXJhdG9yIGl0ZXJh
dG9yID0gbV9mcmFtZVRvSWRlbnRpZmllci5maW5kKCZmcmFtZSk7CiAgICAgaWYgKGl0ZXJhdG9y
ICE9IG1fZnJhbWVUb0lkZW50aWZpZXIuZW5kKCkpIHsKQEAgLTczOCwxOCArNzM4LDE4IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lJiBmcmFtZSkKICAgICB9
CiB9CiAKLUZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om1haW5GcmFtZSgpCitGcmFtZSogUGFn
ZUFnZW50OjptYWluRnJhbWUoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1cm4g
YSBGcmFtZSYKICAgICByZXR1cm4gJm1fcGFnZS0+bWFpbkZyYW1lKCk7CiB9CiAKLUZyYW1lKiBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRm9ySWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKQorRnJh
bWUqIFBhZ2VBZ2VudDo6ZnJhbWVGb3JJZChjb25zdCBTdHJpbmcmIGZyYW1lSWQpCiB7CiAgICAg
cmV0dXJuIGZyYW1lSWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faWRlbnRpZmllclRvRnJhbWUu
Z2V0KGZyYW1lSWQpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZUlkKEZy
YW1lKiBmcmFtZSkKK1N0cmluZyBQYWdlQWdlbnQ6OmZyYW1lSWQoRnJhbWUqIGZyYW1lKQogewog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAiIjsKQEAgLTc2MiwxMiArNzYyLDEyIEBA
IFN0cmluZyBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lSWQoRnJhbWUqIGZyYW1lKQogICAgIHJl
dHVybiBpZGVudGlmaWVyOwogfQogCi1ib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6aGFzSWRGb3JG
cmFtZShGcmFtZSogZnJhbWUpIGNvbnN0Citib29sIFBhZ2VBZ2VudDo6aGFzSWRGb3JGcmFtZShG
cmFtZSogZnJhbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZyYW1lICYmIG1fZnJhbWVUb0lkZW50
aWZpZXIuY29udGFpbnMoZnJhbWUpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yUGFnZUFnZW50Ojps
b2FkZXJJZChEb2N1bWVudExvYWRlciogbG9hZGVyKQorU3RyaW5nIFBhZ2VBZ2VudDo6bG9hZGVy
SWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAoIWxvYWRlcikKICAgICAgICAg
cmV0dXJuICIiOwpAQCAtNzc5LDcgKzc3OSw3IEBAIFN0cmluZyBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmxvYWRlcklkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgcmV0dXJuIGlkZW50aWZpZXI7
CiB9CiAKLUZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZpbmRGcmFtZVdpdGhTZWN1cml0eU9y
aWdpbihjb25zdCBTdHJpbmcmIG9yaWdpblJhd1N0cmluZykKK0ZyYW1lKiBQYWdlQWdlbnQ6OmZp
bmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpblJhd1N0cmluZykK
IHsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gZG9jdW1lbnRPcmlnaW4gPSBmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKTsKQEAgLTc4OSw3ICs3ODksNyBAQCBGcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50
OjpmaW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5SYXdTdAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3Nl
cnRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkK
K0ZyYW1lKiBQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRm9ySWQo
ZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTc5OCw3ICs3OTgsNyBAQCBGcmFtZSogSW5z
cGVjdG9yUGFnZUFnZW50Ojphc3NlcnRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZgogfQogCiAvLyBzdGF0aWMKLURvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFzc2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
RnJhbWUqIGZyYW1lKQorRG9jdW1lbnRMb2FkZXIqIFBhZ2VBZ2VudDo6YXNzZXJ0RG9jdW1lbnRM
b2FkZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgRnJh
bWVMb2FkZXImIGZyYW1lTG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwogICAgIERvY3VtZW50TG9h
ZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lTG9hZGVyLmRvY3VtZW50TG9hZGVyKCk7CkBAIC04
MDcsNDIgKzgwNyw0MiBAQCBEb2N1bWVudExvYWRlciogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3Nl
cnREb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogICAgIHJldHVybiBkb2N1
bWVudExvYWRlcjsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRlckRldGFjaGVk
RnJvbUZyYW1lKERvY3VtZW50TG9hZGVyJiBsb2FkZXIpCit2b2lkIFBhZ2VBZ2VudDo6bG9hZGVy
RGV0YWNoZWRGcm9tRnJhbWUoRG9jdW1lbnRMb2FkZXImIGxvYWRlcikKIHsKICAgICBtX2xvYWRl
clRvSWRlbnRpZmllci5yZW1vdmUoJmxvYWRlcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpmcmFtZVN0YXJ0ZWRMb2FkaW5nKEZyYW1lJiBmcmFtZSkKK3ZvaWQgUGFnZUFnZW50Ojpm
cmFtZVN0YXJ0ZWRMb2FkaW5nKEZyYW1lJiBmcmFtZSkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZnJhbWVTdGFydGVkTG9hZGluZyhmcmFtZUlkKCZmcmFtZSkpOwogfQogCi12b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVTdG9wcGVkTG9hZGluZyhGcmFtZSYgZnJhbWUpCit2b2lk
IFBhZ2VBZ2VudDo6ZnJhbWVTdG9wcGVkTG9hZGluZyhGcmFtZSYgZnJhbWUpCiB7CiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmZyYW1lU3RvcHBlZExvYWRpbmcoZnJhbWVJZCgmZnJhbWUpKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbihG
cmFtZSYgZnJhbWUsIGRvdWJsZSBkZWxheSkKK3ZvaWQgUGFnZUFnZW50OjpmcmFtZVNjaGVkdWxl
ZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lLCBkb3VibGUgZGVsYXkpCiB7CiAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPmZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbihmcmFtZUlkKCZmcmFtZSksIGRl
bGF5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lQ2xlYXJlZFNjaGVkdWxl
ZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lKQordm9pZCBQYWdlQWdlbnQ6OmZyYW1lQ2xlYXJlZFNj
aGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5mcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKGZyYW1lSWQoJmZyYW1lKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojp3aWxsUnVuSmF2YVNjcmlwdERpYWxvZyhjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFBhZ2VBZ2VudDo6d2lsbFJ1bkphdmFTY3JpcHREaWFs
b2coY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5q
YXZhc2NyaXB0RGlhbG9nT3BlbmluZyhtZXNzYWdlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmRpZFJ1bkphdmFTY3JpcHREaWFsb2coKQordm9pZCBQYWdlQWdlbnQ6OmRpZFJ1bkph
dmFTY3JpcHREaWFsb2coKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5qYXZhc2NyaXB0
RGlhbG9nQ2xvc2VkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRQYWludChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQordm9pZCBQYWdl
QWdlbnQ6OmRpZFBhaW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpCiB7CiAgICAgaWYgKCFtX2VuYWJsZWQgfHwgIW1fc2hvd1BhaW50UmVjdHMpCiAgICAg
ICAgIHJldHVybjsKQEAgLTg2NCw3ICs4NjQsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGlkUGFpbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdAog
ICAgIG1fb3ZlcmxheS0+c2hvd1BhaW50UmVjdChyb290UmVjdCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpkaWRMYXlvdXQoKQordm9pZCBQYWdlQWdlbnQ6OmRpZExheW91dCgpCiB7
CiAgICAgYm9vbCBpc0ZpcnN0TGF5b3V0ID0gbV9pc0ZpcnN0TGF5b3V0QWZ0ZXJPbkxvYWQ7CiAg
ICAgaWYgKGlzRmlyc3RMYXlvdXQpCkBAIC04NzYsMTkgKzg3NiwxOSBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6ZGlkTGF5b3V0KCkKICAgICBtX292ZXJsYXktPnVwZGF0ZSgpOwogfQogCi12
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkU2Nyb2xsKCkKK3ZvaWQgUGFnZUFnZW50OjpkaWRT
Y3JvbGwoKQogewogICAgIGlmIChtX2VuYWJsZWQpCiAgICAgICAgIG1fb3ZlcmxheS0+dXBkYXRl
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkK
K3ZvaWQgUGFnZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkKIHsKICAgICBpZiAobV9lbmFi
bGVkKQogICAgICAgICBtX292ZXJsYXktPnVwZGF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBh
Z2VBZ2VudDo6c2NyaXB0c0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCit2b2lkIFBhZ2VBZ2VudDo6
c2NyaXB0c0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCiB7CiAgICAgaWYgKG1faWdub3JlU2NyaXB0
c0VuYWJsZWROb3RpZmljYXRpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTg5Niw3ICs4OTYsNyBA
QCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2NyaXB0c0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQp
CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNjcmlwdHNFbmFibGVkKGlzRW5hYmxlZCk7CiB9
CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK1JlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpGcmFtZT4gUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1l
KiBmcmFtZSkKIHsKICAgICBhdXRvIGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJZChmcmFtZUlkKGZyYW1lKSkKQEAg
LTkxNyw3ICs5MTcsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IElu
c3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcgogICAgIHJldHVybiBXVEY6
Om1vdmUoZnJhbWVPYmplY3QpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFt
ZVRyZWUoRnJhbWUqIGZyYW1lKQorUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
UmVzb3VyY2VUcmVlPiBQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBm
cmFtZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IGZyYW1l
T2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShmcmFtZSk7CiAgICAgYXV0byBzdWJyZXNvdXJj
ZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7CkBAIC05MzYsNyArOTM2LDcgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRDYW5jZWxlZCh0
cnVlKTsKICAgICAgICAgZWxzZSBpZiAoY2FjaGVkUmVzb3VyY2UtPnN0YXR1cygpID09IENhY2hl
ZFJlc291cmNlOjpMb2FkRXJyb3IpCiAgICAgICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0RmFp
bGVkKHRydWUpOwotICAgICAgICBTdHJpbmcgc291cmNlTWFwcGluZ1VSTCA9IEluc3BlY3RvclBh
Z2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UpOworICAgICAg
ICBTdHJpbmcgc291cmNlTWFwcGluZ1VSTCA9IFBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVz
b3VyY2UoY2FjaGVkUmVzb3VyY2UpOwogICAgICAgICBpZiAoIXNvdXJjZU1hcHBpbmdVUkwuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmVzb3VyY2VPYmplY3QtPnNldFNvdXJjZU1hcFVSTChzb3Vy
Y2VNYXBwaW5nVVJMKTsKICAgICAgICAgc3VicmVzb3VyY2VzLT5hZGRJdGVtKFdURjo6bW92ZShy
ZXNvdXJjZU9iamVjdCkpOwpAQCAtOTU0LDE0ICs5NTQsMTQgQEAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxk
T2JqZWMKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6dXBkYXRlVG91Y2hFdmVudEVtdWxhdGlvbkluUGFnZShib29sIGVuYWJsZWQpCit2b2lk
IFBhZ2VBZ2VudDo6dXBkYXRlVG91Y2hFdmVudEVtdWxhdGlvbkluUGFnZShib29sIGVuYWJsZWQp
CiB7CiAgICAgaWYgKG1haW5GcmFtZSgpKQogICAgICAgICBtYWluRnJhbWUoKS0+c2V0dGluZ3Mo
KS5zZXRUb3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KICNlbmRpZgogCi12
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0VG91Y2hFbXVsYXRpb25FbmFibGVkKEVycm9yU3Ry
aW5nJiBlcnJvciwgYm9vbCBlbmFibGVkKQordm9pZCBQYWdlQWdlbnQ6OnNldFRvdWNoRW11bGF0
aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3IsIGJvb2wgZW5hYmxlZCkKIHsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQogICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CkBAIC05NzIsNyArOTcy
LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFRvdWNoRW11bGF0aW9uRW5hYmxlZChF
cnJvclN0cmluZyYgZXJyb3IsIGJvb2wgZW5hYmwKICNlbmRpZgogfQogCi12b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
bWVkaWEpCit2b2lkIFBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgbWVkaWEpCiB7CiAgICAgaWYgKG1lZGlhID09IG1fZW11bGF0ZWRNZWRpYSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtOTg1LDI5ICs5ODUsMjkgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1lZGlh
KQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFwcGx5RW11bGF0ZWRNZWRp
YShTdHJpbmcmIG1lZGlhKQordm9pZCBQYWdlQWdlbnQ6OmFwcGx5RW11bGF0ZWRNZWRpYShTdHJp
bmcmIG1lZGlhKQogewogICAgIGlmICghbV9lbXVsYXRlZE1lZGlhLmlzRW1wdHkoKSkKICAgICAg
ICAgbWVkaWEgPSBtX2VtdWxhdGVkTWVkaWE7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpnZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKEVycm9yU3RyaW5nJiwgYm9vbCogb3V0UGFy
YW0pCit2b2lkIFBhZ2VBZ2VudDo6Z2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShFcnJvclN0
cmluZyYsIGJvb2wqIG91dFBhcmFtKQogewogICAgICpvdXRQYXJhbSA9IG1fcGFnZS0+c2V0dGlu
Z3MoKS5zaG93RGVidWdCb3JkZXJzKCkgfHwgbV9wYWdlLT5zZXR0aW5ncygpLnNob3dSZXBhaW50
Q291bnRlcigpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29tcG9zaXRpbmdC
b3JkZXJzVmlzaWJsZShFcnJvclN0cmluZyYsIGJvb2wgdmlzaWJsZSkKK3ZvaWQgUGFnZUFnZW50
OjpzZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKEVycm9yU3RyaW5nJiwgYm9vbCB2aXNpYmxl
KQogewogICAgIG1fcGFnZS0+c2V0dGluZ3MoKS5zZXRTaG93RGVidWdCb3JkZXJzKHZpc2libGUp
OwogICAgIG1fcGFnZS0+c2V0dGluZ3MoKS5zZXRTaG93UmVwYWludENvdW50ZXIodmlzaWJsZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdE5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBTdHJpbmcqIG91dERhdGFVUkwpCit2b2lkIFBhZ2VB
Z2VudDo6c25hcHNob3ROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwg
U3RyaW5nKiBvdXREYXRhVVJMKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOwog
ICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCk7CisgICAgRE9NQWdlbnQq
IGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5kb21BZ2VudCgpOwogICAgIEFTU0VS
VChkb21BZ2VudCk7CiAgICAgTm9kZSogbm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9y
U3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTEwMjIsNyArMTAyMiw3IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBTdHJpCiAgICAgKm91dERhdGFVUkwgPSBzbmFwc2hvdC0+dG9EYXRh
VVJMKEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwg
U3RyaW5nKiBvdXREYXRhVVJMKQordm9pZCBQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBj
b25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwpAQCAtMTA0
MiwxMyArMTA0MiwxMyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3RSZWN0KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgsIGludCB5LCBpbgogICAgICpvdXREYXRhVVJM
ID0gc25hcHNob3QtPnRvRGF0YVVSTChBU0NJSUxpdGVyYWwoImltYWdlL3BuZyIpKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmhhbmRsZUphdmFTY3JpcHREaWFsb2coRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBib29sIGFjY2VwdCwgY29uc3QgU3RyaW5nKiBwcm9tcHRUZXh0KQor
dm9pZCBQYWdlQWdlbnQ6OmhhbmRsZUphdmFTY3JpcHREaWFsb2coRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBib29sIGFjY2VwdCwgY29uc3QgU3RyaW5nKiBwcm9tcHRUZXh0KQogewogICAgIGlm
ICghbV9jbGllbnQtPmhhbmRsZUphdmFTY3JpcHREaWFsb2coYWNjZXB0LCBwcm9tcHRUZXh0KSkK
ICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBoYW5kbGUgSmF2
YVNjcmlwdCBkaWFsb2ciKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBTdHJpbmcqIGRhdGEpCit2b2lkIFBhZ2VBZ2VudDo6
YXJjaGl2ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKIHsKICAgICBG
cmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggY2M2ZTEwZmFmY2Vm
ZThhODNjZTQ1YmU1MzliMjBmMjY0MmEzMjQ5My4uMDJiMWQ0NmNkNThlNDI4ODhkMGY0ZjAyM2Ux
ZTBiYjJkYTc0Y2ZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuaApAQCAtNTYsMTkgKzU2LDE5IEBAIGNsYXNzIEZyb250ZW5kOwogY2xhc3MgSW5z
cGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3RydW1lbnRp
bmdBZ2VudHM7Ci1jbGFzcyBVUkw7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKK2NsYXNzIFVS
TDsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvclBhZ2VB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6
OlBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEluc3BlY3RvclBhZ2VBZ2VudCk7CitjbGFzcyBQYWdlQWdlbnQgZmluYWwgOiBwdWJsaWMgV2Vi
QWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsK
KyAgICBQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JDbGll
bnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAKICAgICBlbnVtIFJlc291cmNlVHlwZSB7CiAgICAg
ICAgIERvY3VtZW50UmVzb3VyY2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlcGxheUFnZW50LmNwcAppbmRleCAyZjY4NzUzMjA1OTY5NzQ4MThmNjJhNjVkMThl
OTc2M2QzNDQ2N2M4Li4zMDE1NDdkZGIzNTQzY2NhYmM0ODBiZTZmMTE4ZjUwNzUzZGIxNDAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5j
cHAKQEAgLTE1MCwyOSArMTUwLDI5IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTCiAgICAgICAg
IC5yZWxlYXNlKCk7CiB9CiAKLUluc3BlY3RvclJlcGxheUFnZW50OjpJbnNwZWN0b3JSZXBsYXlB
Z2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCkKLSAgICA6IEluc3BlY3RvckFnZW50QmFzZShBU0NJSUxpdGVy
YWwoIlJlcGxheSIpLCBpbnN0cnVtZW50aW5nQWdlbnRzKQorUmVwbGF5QWdlbnQ6OlJlcGxheUFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2VBZ2VudCog
cGFnZUFnZW50KQorICAgIDogV2ViQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiUmVwbGF5IiksIGlu
c3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX3BhZ2UoKnBhZ2VBZ2VudC0+cGFnZSgpKQogewog
fQogCi1JbnNwZWN0b3JSZXBsYXlBZ2VudDo6fkluc3BlY3RvclJlcGxheUFnZW50KCkKK1JlcGxh
eUFnZW50Ojp+UmVwbGF5QWdlbnQoKQogewogICAgIEFTU0VSVCghbV9zZXNzaW9uc01hcC5zaXpl
KCkpOwogICAgIEFTU0VSVCghbV9zZWdtZW50c01hcC5zaXplKCkpOwogfQogCi1XZWJDb3JlOjpT
ZXNzaW9uU3RhdGUgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSgpIGNvbnN0CitX
ZWJDb3JlOjpTZXNzaW9uU3RhdGUgUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc2Vzc2lvblN0YXRlKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3ZvaWQgUmVwbGF5QWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCog
ZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8
SW5zcGVjdG9yOjpSZXBsYXlGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7CiAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3Rvcjo6UmVwbGF5QmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiAKLSAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMtPnNldEluc3BlY3RvclJlcGxheUFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1bWVu
dGluZ0FnZW50cy0+c2V0UmVwbGF5QWdlbnQodGhpcyk7CiAgICAgQVNTRVJUKHNlc3Npb25TdGF0
ZSgpID09IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpOwogCiAgICAgLy8gS2VlcCB0
cmFjayBvZiB0aGUgKGRlZmF1bHQpIHNlc3Npb24gY3VycmVudGx5IGxvYWRlZCBieSBSZXBsYXlD
b250cm9sbGVyLApAQCAtMTg0LDM3ICsxODQsMzcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmUK
ICAgICAgICAgbV9zZWdtZW50c01hcC5hZGQoKCppdCktPmlkZW50aWZpZXIoKSwgKml0KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQordm9pZCBSZXBsYXlBZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLmNsZWFyKCk7CiAKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclJl
cGxheUFnZW50KG51bGxwdHIpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0UmVwbGF5
QWdlbnQobnVsbHB0cik7CiAKICAgICAvLyBEcm9wIHJlZmVyZW5jZXMgdG8gYWxsIHNlc3Npb25z
IGFuZCBzZWdtZW50cy4KICAgICBtX3Nlc3Npb25zTWFwLmNsZWFyKCk7CiAgICAgbV9zZWdtZW50
c01hcC5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpmcmFtZU5hdmln
YXRlZChEb2N1bWVudExvYWRlciogbG9hZGVyKQordm9pZCBSZXBsYXlBZ2VudDo6ZnJhbWVOYXZp
Z2F0ZWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAoc2Vzc2lvblN0YXRlKCkg
IT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkKICAgICAgICAgbV9wYWdlLnJlcGxh
eUNvbnRyb2xsZXIoKS5mcmFtZU5hdmlnYXRlZChsb2FkZXIpOwogfQogCi12b2lkIEluc3BlY3Rv
clJlcGxheUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lJiBmcmFtZSkKK3ZvaWQgUmVwbGF5QWdl
bnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUmIGZyYW1lKQogewogICAgIGlmIChzZXNzaW9uU3RhdGUo
KSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3BhZ2UucmVw
bGF5Q29udHJvbGxlcigpLmZyYW1lRGV0YWNoZWQoZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3Rv
clJlcGxheUFnZW50Ojp3aWxsRGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCYgZXZlbnQsIEZyYW1l
KiBmcmFtZSkKK3ZvaWQgUmVwbGF5QWdlbnQ6OndpbGxEaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50
JiBldmVudCwgRnJhbWUqIGZyYW1lKQogewogICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJD
b3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3BhZ2UucmVwbGF5Q29udHJv
bGxlcigpLndpbGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25DcmVhdGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNl
c3Npb24pCit2b2lkIFJlcGxheUFnZW50OjpzZXNzaW9uQ3JlYXRlZChSZWZQdHI8UmVwbGF5U2Vz
c2lvbj4mJiBzZXNzaW9uKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uc01hcC5hZGQo
c2Vzc2lvbi0+aWRlbnRpZmllcigpLCBzZXNzaW9uKTsKICAgICAvLyBDYW4ndCBoYXZlIHR3byBz
ZXNzaW9ucyB3aXRoIHNhbWUgaWRlbnRpZmllci4KQEAgLTIyMywxMiArMjIzLDEyIEBAIHZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25DcmVhdGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9u
PiYmIHNlc3Npb24pCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNlc3Npb25DcmVhdGVkKHNl
c3Npb24tPmlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNl
c3Npb25Nb2RpZmllZChSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQordm9pZCBSZXBs
YXlBZ2VudDo6c2Vzc2lvbk1vZGlmaWVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24p
CiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNlc3Npb25Nb2RpZmllZChzZXNzaW9uLT5p
ZGVudGlmaWVyKCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpzZXNzaW9uTG9h
ZGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCit2b2lkIFJlcGxheUFnZW50Ojpz
ZXNzaW9uTG9hZGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCiB7CiAgICAgLy8g
SW4gY2FzZSB3ZSBkaWRuJ3Qga25vdyBhYm91dCB0aGUgbG9hZGVkIHNlc3Npb24sIGFkZCBoZXJl
LgogICAgIG1fc2Vzc2lvbnNNYXAuYWRkKHNlc3Npb24tPmlkZW50aWZpZXIoKSwgc2Vzc2lvbik7
CkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vzc2lvbkxv
YWRlZChSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5zZXNzaW9uTG9hZGVkKHNlc3Npb24tPmlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21lbnRDcmVhdGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9u
U2VnbWVudD4mJiBzZWdtZW50KQordm9pZCBSZXBsYXlBZ2VudDo6c2VnbWVudENyZWF0ZWQoUmVm
UHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCiB7CiAgICAgYXV0byByZXN1bHQg
PSBtX3NlZ21lbnRzTWFwLmFkZChzZWdtZW50LT5pZGVudGlmaWVyKCksIHNlZ21lbnQpOwogICAg
IC8vIENhbid0IGhhdmUgdHdvIHNlZ21lbnRzIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KQEAg
LTI0NSwxMiArMjQ1LDEyIEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21lbnRDcmVh
dGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50CiAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnNlZ21lbnRDcmVhdGVkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21lbnRDb21wbGV0ZWQoUmVmUHRyPFJlcGxh
eVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCit2b2lkIFJlcGxheUFnZW50OjpzZWdtZW50Q29t
cGxldGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQogewogICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5zZWdtZW50Q29tcGxldGVkKHNlZ21lbnQtPmlkZW50aWZpZXIo
KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21lbnRMb2FkZWQoUmVmUHRy
PFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCit2b2lkIFJlcGxheUFnZW50OjpzZWdt
ZW50TG9hZGVkKFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQogewogICAg
IC8vIEluIGNhc2Ugd2UgZGlkbid0IGtub3cgYWJvdXQgdGhlIGxvYWRlZCBzZWdtZW50LCBhZGQg
aGVyZS4KICAgICBtX3NlZ21lbnRzTWFwLmFkZChzZWdtZW50LT5pZGVudGlmaWVyKCksIHNlZ21l
bnQuY29weVJlZigpKTsKQEAgLTI1OCw1MiArMjU4LDUyIEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5
QWdlbnQ6OnNlZ21lbnRMb2FkZWQoUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21l
bnQpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNlZ21lbnRMb2FkZWQoc2VnbWVudC0+aWRl
bnRpZmllcigpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2VnbWVudFVubG9h
ZGVkKCkKK3ZvaWQgUmVwbGF5QWdlbnQ6OnNlZ21lbnRVbmxvYWRlZCgpCiB7CiAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPnNlZ21lbnRVbmxvYWRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpjYXB0dXJlU3RhcnRlZCgpCit2b2lkIFJlcGxheUFnZW50OjpjYXB0dXJlU3Rh
cnRlZCgpCiB7CiAgICAgTE9HKFdlYlJlcGxheSwgIi0tLS0tQ0FQVFVSRSBTVEFSVC0tLS0tIik7
CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FwdHVyZVN0YXJ0ZWQoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y2FwdHVyZVN0b3BwZWQoKQordm9pZCBSZXBsYXlBZ2Vu
dDo6Y2FwdHVyZVN0b3BwZWQoKQogewogICAgIExPRyhXZWJSZXBsYXksICItLS0tLUNBUFRVUkUg
U1RPUC0tLS0tIik7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FwdHVyZVN0b3BwZWQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJhY2tTdGFydGVkKCkKK3Zv
aWQgUmVwbGF5QWdlbnQ6OnBsYXliYWNrU3RhcnRlZCgpCiB7CiAgICAgTE9HKFdlYlJlcGxheSwg
Ii0tLS0tUkVQTEFZIFNUQVJULS0tLS0iKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5w
bGF5YmFja1N0YXJ0ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJh
Y2tQYXVzZWQoY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQordm9pZCBSZXBsYXlBZ2Vu
dDo6cGxheWJhY2tQYXVzZWQoY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQogewogICAg
IExPRyhXZWJSZXBsYXksICItLS0tLVJFUExBWSBQQVVTRUQtLS0tLSIpOwogCiAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPnBsYXliYWNrUGF1c2VkKGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9z
aXRpb24ocG9zaXRpb24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJh
Y2tIaXRQb3NpdGlvbihjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24pCit2b2lkIFJlcGxh
eUFnZW50OjpwbGF5YmFja0hpdFBvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlv
bikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cGxheWJhY2tIaXRQb3NpdGlvbihidWls
ZEluc3BlY3Rvck9iamVjdEZvclBvc2l0aW9uKHBvc2l0aW9uKSwgbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpwbGF5YmFja0Zp
bmlzaGVkKCkKK3ZvaWQgUmVwbGF5QWdlbnQ6OnBsYXliYWNrRmluaXNoZWQoKQogewogICAgIExP
RyhXZWJSZXBsYXksICItLS0tLVJFUExBWSBGSU5JU0hFRC0tLS0tIik7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+cGxheWJhY2tGaW5pc2hlZCgpOwogfQogCi12b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpzdGFydENhcHR1cmluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCit2b2lk
IFJlcGxheUFnZW50OjpzdGFydENhcHR1cmluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7
CiAgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3Rp
dmUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHN0YXJ0IGNh
cHR1cmluZyBpZiB0aGUgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZyBvciByZXBsYXlpbmcu
Iik7CkBAIC0zMTMsNyArMzEzLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3RhcnRD
YXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIG1fcGFnZS5yZXBsYXlDb250
cm9sbGVyKCkuc3RhcnRDYXB0dXJpbmcoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6c3RvcENhcHR1cmluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCit2b2lkIFJlcGxheUFn
ZW50OjpzdG9wQ2FwdHVyaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBpZiAo
c2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcpIHsKICAg
ICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHN0b3AgY2FwdHVyaW5nIGlm
IGNhcHR1cmUgaXMgbm90IGluIHByb2dyZXNzLiIpOwpAQCAtMzIzLDcgKzMyMyw3IEBAIHZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQogICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc3RvcENhcHR1cmluZygpOwogfQog
Ci12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwb3NpdGlvbk9i
amVjdCwgYm9vbCBmYXN0UmVwbGF5KQordm9pZCBSZXBsYXlBZ2VudDo6cmVwbGF5VG9Qb3NpdGlv
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgcG9zaXRpb25PYmplY3QsIGJvb2wgZmFzdFJlcGxheSkKIHsKICAgICBSZXBsYXlQb3NpdGlv
biBwb3NpdGlvbjsKICAgICBpZiAoIXBvc2l0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKEFTQ0lJTGl0
ZXJhbCgic2VnbWVudE9mZnNldCIpLCBwb3NpdGlvbi5zZWdtZW50T2Zmc2V0KSkgewpAQCAtMzQ0
LDcgKzM0NCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9zaXRpb24o
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQCiAgICAgbV9wYWdlLnJlcGxheUNv
bnRyb2xsZXIoKS5yZXBsYXlUb1Bvc2l0aW9uKHBvc2l0aW9uLCAoZmFzdFJlcGxheSkgPyBEaXNw
YXRjaFNwZWVkOjpGYXN0Rm9yd2FyZCA6IERpc3BhdGNoU3BlZWQ6OlJlYWxUaW1lKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21wbGV0aW9uKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgYm9vbCBmYXN0UmVwbGF5KQordm9pZCBSZXBsYXlBZ2VudDo6cmVwbGF5
VG9Db21wbGV0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBmYXN0UmVwbGF5KQog
ewogICAgIGlmIChzZXNzaW9uU3RhdGUoKSA9PSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkNhcHR1
cmluZykgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RhcnQg
cmVwbGF5IHdoaWxlIGNhcHR1cmUgaXMgaW4gcHJvZ3Jlc3MuIik7CkBAIC0zNTQsNyArMzU0LDcg
QEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21wbGV0aW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgYm9vbCBmYXMKICAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigp
LnJlcGxheVRvQ29tcGxldGlvbigoZmFzdFJlcGxheSkgPyBEaXNwYXRjaFNwZWVkOjpGYXN0Rm9y
d2FyZCA6IERpc3BhdGNoU3BlZWQ6OlJlYWxUaW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6cGF1c2VQbGF5YmFjayhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCit2b2lkIFJl
cGxheUFnZW50OjpwYXVzZVBsYXliYWNrKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAg
ICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpSZXBsYXlpbmcp
IHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHBhdXNlIHBsYXli
YWNrIGlmIHBsYXliYWNrIGlzIG5vdCBpbiBwcm9ncmVzcy4iKTsKQEAgLTM2NCw3ICszNjQsNyBA
QCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpwYXVzZVBsYXliYWNrKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZykKICAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnBhdXNlUGxheWJhY2so
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y2FuY2VsUGxheWJhY2soRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nKQordm9pZCBSZXBsYXlBZ2VudDo6Y2FuY2VsUGxheWJhY2soRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nKQogewogICAgIGlmIChzZXNzaW9uU3RhdGUoKSA9PSBXZWJD
b3JlOjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZykgewogICAgICAgICBlcnJvclN0cmluZyA9IEFT
Q0lJTGl0ZXJhbCgiQ2FuJ3QgY2FuY2VsIHBsYXliYWNrIGlmIGNhcHR1cmUgaXMgaW4gcHJvZ3Jl
c3MuIik7CkBAIC0zNzQsNyArMzc0LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y2Fu
Y2VsUGxheWJhY2soRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIG1fcGFnZS5yZXBsYXlD
b250cm9sbGVyKCkuY2FuY2VsUGxheWJhY2soKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6c3dpdGNoU2Vzc2lvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3ZvaWQgUmVw
bGF5QWdlbnQ6OnN3aXRjaFNlc3Npb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7CiAg
ICAgQVNTRVJUX0FSRyhpZGVudGlmaWVyLCBpZGVudGlmaWVyID4gMCk7CiAKQEAgLTM5MCw3ICsz
OTAsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yOjpQcgogICAgIG1fcGFnZS5yZXBsYXlDb250cm9s
bGVyKCkuc3dpdGNoU2Vzc2lvbihXVEY6Om1vdmUoc2Vzc2lvbikpOwogfQogCi12b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50OjppbnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgc2Vz
c2lvbklkZW50aWZpZXIsIFNlZ21lbnRJZGVudGlmaWVyIHNlZ21lbnRJZGVudGlmaWVyLCBpbnQg
c2VnbWVudEluZGV4KQordm9pZCBSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Np
b25JZGVudGlmaWVyIHNlc3Npb25JZGVudGlmaWVyLCBTZWdtZW50SWRlbnRpZmllciBzZWdtZW50
SWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkKIHsKICAgICBBU1NFUlRfQVJHKHNlc3Npb25J
ZGVudGlmaWVyLCBzZXNzaW9uSWRlbnRpZmllciA+IDApOwogICAgIEFTU0VSVF9BUkcoc2VnbWVu
dElkZW50aWZpZXIsIHNlZ21lbnRJZGVudGlmaWVyID4gMCk7CkBAIC00MTYsNyArNDE2LDcgQEAg
dm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBJbnNwZWMKICAgICBzZXNzaW9uTW9kaWZpZWQoV1RGOjptb3ZlKHNl
c3Npb24pKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVtb3ZlU2Vzc2lvblNl
Z21lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBs
YXk6OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpCit2b2lk
IFJlcGxheUFnZW50OjpyZW1vdmVTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRp
ZmllciwgaW50IHNlZ21lbnRJbmRleCkKIHsKICAgICBBU1NFUlRfQVJHKGlkZW50aWZpZXIsIGlk
ZW50aWZpZXIgPiAwKTsKICAgICBBU1NFUlRfQVJHKHNlZ21lbnRJbmRleCwgc2VnbWVudEluZGV4
ID49IDApOwpAQCAtNDQwLDcgKzQ0MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJl
bW92ZVNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjCiAgICAg
c2Vzc2lvbk1vZGlmaWVkKFdURjo6bW92ZShzZXNzaW9uKSk7CiB9CiAKLVJlZlB0cjxSZXBsYXlT
ZXNzaW9uPiBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZmluZFNlc3Npb24oRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVyKQorUmVmUHRyPFJlcGxheVNl
c3Npb24+IFJlcGxheUFnZW50OjpmaW5kU2Vzc2lvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IFNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUX0FSRyhpZGVudGlm
aWVyLCBpZGVudGlmaWVyID4gMCk7CiAKQEAgLTQ1Myw3ICs0NTMsNyBAQCBSZWZQdHI8UmVwbGF5
U2Vzc2lvbj4gSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZpbmRTZXNzaW9uKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLVJlZlB0cjxSZXBsYXlTZXNz
aW9uU2VnbWVudD4gSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZpbmRTZWdtZW50KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgU2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllcikKK1JlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4gUmVwbGF5QWdlbnQ6OmZpbmRTZWdtZW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgU2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlRf
QVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIgPiAwKTsKIApAQCAtNDY2LDcgKzQ2Niw3IEBAIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZpbmRTZWdt
ZW50KEVycm9yU3RyaW5nJiBlcnJvCiAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVycm9yU3RyaW5nJiwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciogc2Vzc2lvbklkZW50
aWZpZXIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSZXBsYXk6OlNlZ21lbnRJZGVudGlmaWVyPiogc2VnbWVudElkZW50aWZpZXIsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblN0YXRlKiBzZXNzaW9uU3RhdGUsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudFN0YXRlKiBzZWdtZW50U3RhdGUsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiYgcmVwbGF5UG9zaXRp
b24pCit2b2lkIFJlcGxheUFnZW50OjpjdXJyZW50UmVwbGF5U3RhdGUoRXJyb3JTdHJpbmcmLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyKiBzZXNzaW9uSWRl
bnRpZmllciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXI+KiBzZWdtZW50SWRlbnRpZmllciwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU3RhdGUqIHNlc3Npb25TdGF0ZSwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZWdtZW50U3RhdGUqIHNlZ21lbnRTdGF0ZSwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+JiByZXBsYXlQb3Np
dGlvbikKIHsKICAgICAqc2Vzc2lvblN0YXRlID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNz
aW9uU3RhdGUobV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zZXNzaW9uU3RhdGUoKSk7CiAgICAg
KnNlZ21lbnRTdGF0ZSA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFN0YXRlKG1fcGFn
ZS5yZXBsYXlDb250cm9sbGVyKCkuc2VnbWVudFN0YXRlKCkpOwpAQCAtNDc4LDE0ICs0NzgsMTQg
QEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVycm9yU3Ry
aW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDoKICAgICByZXBsYXlQb3NpdGlvbiA9IGJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24obV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5jdXJyZW50
UG9zaXRpb24oKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldEF2YWlsYWJs
ZVNlc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFNlc3Npb25JZGVudGlmaWVyPj4mIHNlc3Npb25zTGlzdCkKK3ZvaWQgUmVwbGF5QWdlbnQ6Omdl
dEF2YWlsYWJsZVNlc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFNlc3Npb25JZGVudGlmaWVyPj4mIHNlc3Npb25zTGlzdCkKIHsKICAgICBzZXNz
aW9uc0xpc3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBw
YWlyIDogbV9zZXNzaW9uc01hcCkKICAgICAgICAgc2Vzc2lvbnNMaXN0LT5hZGRJdGVtKHBhaXIu
a2V5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Np
b25JZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBs
YXk6OlJlcGxheVNlc3Npb24+JiBzZXJpYWxpemVkT2JqZWN0KQordm9pZCBSZXBsYXlBZ2VudDo6
Z2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+JiBzZXJpYWxpemVkT2JqZWN0KQog
ewogICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gZmluZFNlc3Npb24oZXJyb3JT
dHJpbmcsIGlkZW50aWZpZXIpOwogICAgIGlmICghc2Vzc2lvbikgewpAQCAtNDk2LDcgKzQ5Niw3
IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlc3Npb25EYXRhKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgSW5zcGVjdG9yOjpQCiAgICAgc2VyaWFsaXplZE9iamVjdCA9IGJ1aWxk
SW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihXVEY6Om1vdmUoc2Vzc2lvbikpOwogfQogCi12b2lk
IEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXIgaWRl
bnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblNlZ21l
bnQ+JiBzZXJpYWxpemVkT2JqZWN0KQordm9pZCBSZXBsYXlBZ2VudDo6Z2V0U2VnbWVudERhdGEo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNl
Z21lbnRJZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
ZXBsYXk6OlNlc3Npb25TZWdtZW50PiYgc2VyaWFsaXplZE9iamVjdCkKIHsKICAgICBSZWZQdHI8
UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnQgPSBmaW5kU2VnbWVudChlcnJvclN0cmluZywg
aWRlbnRpZmllcik7CiAgICAgaWYgKCFzZWdtZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oCmluZGV4IDMzYmYyOWMxMWE1MTBjYmE5MzNm
ODVhZTVhMmU1ZjIyNDA2NTYwNGIuLjZiNjUwNmE2ZjczMDg3NzI0ODJjY2M4MmEyMjU0MWJmYmFm
Y2FhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBs
YXlBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlB
Z2VudC5oCkBAIC00Miw5ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERvY3Vt
ZW50TG9hZGVyOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIEluc3BlY3RvclBh
Z2VBZ2VudDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBQYWdlOworY2xhc3Mg
UGFnZUFnZW50OwogY2xhc3MgUmVwbGF5U2Vzc2lvbjsKIGNsYXNzIFJlcGxheVNlc3Npb25TZWdt
ZW50OwogCkBAIC01NiwxMyArNTYsMTMgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiB0
eXBlZGVmIGludCBTZXNzaW9uSWRlbnRpZmllcjsKIHR5cGVkZWYgaW50IFNlZ21lbnRJZGVudGlm
aWVyOwogCi1jbGFzcyBJbnNwZWN0b3JSZXBsYXlBZ2VudCBmaW5hbAotICAgIDogcHVibGljIElu
c3BlY3RvckFnZW50QmFzZQorY2xhc3MgUmVwbGF5QWdlbnQgZmluYWwKKyAgICA6IHB1YmxpYyBX
ZWJBZ2VudEJhc2UKICAgICAsIHB1YmxpYyBJbnNwZWN0b3I6OlJlcGxheUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUmVwbGF5QWdl
bnQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlcGxheUFnZW50KTsKIHB1YmxpYzoKLSAg
ICBJbnNwZWN0b3JSZXBsYXlBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFn
ZUFnZW50Kik7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yUmVwbGF5QWdlbnQoKTsKKyAgICBSZXBs
YXlBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZUFnZW50Kik7CisgICAgdmlydHVhbCB+
UmVwbGF5QWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNw
YXRjaGVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5k
ZXggMjZhYzI5YmFiMmMyYWMzN2MyN2E2ZDNmYzllYjA1NjU4MzE5YzI5My4uNjU3NjUxNDdmMDFk
Y2YwMmUwMzkwODZjYmE1YjljNGVhODViNjg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMTYwLDggKzE2MCw4IEBA
IHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlCiAKLUluc3BlY3RvclJlc291cmNlQWdlbnQ6Oklu
c3BlY3RvclJlc291cmNlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvckNsaWVudCogY2xp
ZW50KQotICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiTmV0d29yayIpLCBp
bnN0cnVtZW50aW5nQWdlbnRzKQorUmVzb3VyY2VBZ2VudDo6UmVzb3VyY2VBZ2VudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlQWdlbnQqIHBhZ2VBZ2VudCwg
SW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBXZWJBZ2VudEJhc2UoQVNDSUlMaXRlcmFs
KCJOZXR3b3JrIiksIGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX3BhZ2VBZ2VudChwYWdl
QWdlbnQpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3Jlc291cmNlc0RhdGEoc3Rk
OjptYWtlX3VuaXF1ZTxOZXR3b3JrUmVzb3VyY2VzRGF0YT4oKSkKQEAgLTE3MiwxMyArMTcyLDEz
IEBAIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Okluc3BlY3RvclJlc291cmNlQWdlbnQoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rvcjo6TmV0d29ya0Zy
b250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyID0gSW5zcGVjdG9yOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5k
RGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQor
dm9pZCBSZXNvdXJjZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxs
cHRyOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKQEAgLTI0OCwzNSArMjQ4LDM1
IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3Vy
Y2U+IGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzCiB7CiAgICAgYXV0byByZXNvdXJjZU9iamVjdCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwoKSkKLSAgICAgICAgLnNldFR5cGUo
SW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uKCpjYWNoZWRSZXNvdXJj
ZSkpCisgICAgICAgIC5zZXRUeXBlKFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbigq
Y2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAuc2V0Qm9keVNpemUoY2FjaGVkUmVzb3VyY2UtPmVu
Y29kZWRTaXplKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBhdXRvIHJlc291cmNlUmVz
cG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJl
c3BvbnNlKCksIGxvYWRlcik7CiAgICAgcmVzb3VyY2VPYmplY3QtPnNldFJlc3BvbnNlKFdURjo6
bW92ZShyZXNvdXJjZVJlc3BvbnNlKSk7CiAKLSAgICBTdHJpbmcgc291cmNlTWFwcGluZ1VSTCA9
IEluc3BlY3RvclBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoY2FjaGVkUmVzb3Vy
Y2UpOworICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMID0gUGFnZUFnZW50Ojpzb3VyY2VNYXBV
UkxGb3JSZXNvdXJjZShjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFzb3VyY2VNYXBwaW5nVVJM
LmlzRW1wdHkoKSkKICAgICAgICAgcmVzb3VyY2VPYmplY3QtPnNldFNvdXJjZU1hcFVSTChzb3Vy
Y2VNYXBwaW5nVVJMKTsKIAogICAgIHJldHVybiBXVEY6Om1vdmUocmVzb3VyY2VPYmplY3QpOwog
fQogCi1JbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp+SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpCitS
ZXNvdXJjZUFnZW50Ojp+UmVzb3VyY2VBZ2VudCgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkgewog
ICAgICAgICBFcnJvclN0cmluZyB1bnVzZWQ7CiAgICAgICAgIGRpc2FibGUodW51c2VkKTsKICAg
ICB9Ci0gICAgQVNTRVJUKCFtX2luc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlc291cmNl
QWdlbnQoKSk7CisgICAgQVNTRVJUKCFtX2luc3RydW1lbnRpbmdBZ2VudHMtPnJlc291cmNlQWdl
bnQoKSk7CiB9CiAKLWRvdWJsZSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp0aW1lc3RhbXAoKQor
ZG91YmxlIFJlc291cmNlQWdlbnQ6OnRpbWVzdGFtcCgpCiB7CiAgICAgcmV0dXJuIG1faW5zdHJ1
bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2go
KS0+ZWxhcHNlZFRpbWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxs
U2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciYgbG9h
ZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
ZGlyZWN0UmVzcG9uc2UpCit2b2lkIFJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyJiBsb2FkZXIsIFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkK
IHsKICAgICBpZiAocmVxdWVzdC5oaWRkZW5Gcm9tSW5zcGVjdG9yKCkpIHsKICAgICAgICAgbV9o
aWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIpOwpAQCAtMjg2LDE1ICsyODYs
MTUgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRl
bnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7CiAgICAgbV9yZXNvdXJjZXNE
YXRhLT5yZXNvdXJjZUNyZWF0ZWQocmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+bG9hZGVySWQoJmxv
YWRlcikpOwogCi0gICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gSW5zcGVjdG9y
UGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShsb2FkZXIuZnJhbWUoKSwgcmVxdWVzdC51cmwoKSk7
Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSA9IGNhY2hlZFJlc291
cmNlID8gSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNhY2hlZFJlc291
cmNlKSA6IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCk7Ci0gICAgaWYg
KHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlKSB7CisgICAgQ2FjaGVk
UmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShsb2Fk
ZXIuZnJhbWUoKSwgcmVxdWVzdC51cmwoKSk7CisgICAgUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUg
dHlwZSA9IGNhY2hlZFJlc291cmNlID8gUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNh
Y2hlZFJlc291cmNlKSA6IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCk7
CisgICAgaWYgKHR5cGUgPT0gUGFnZUFnZW50OjpPdGhlclJlc291cmNlKSB7CiAgICAgICAgIGlm
IChtX2xvYWRpbmdYSFJTeW5jaHJvbm91c2x5KQotICAgICAgICAgICAgdHlwZSA9IEluc3BlY3Rv
clBhZ2VBZ2VudDo6WEhSUmVzb3VyY2U7CisgICAgICAgICAgICB0eXBlID0gUGFnZUFnZW50OjpY
SFJSZXNvdXJjZTsKICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRp
ZmllcihyZXF1ZXN0LnVybCgpLCBsb2FkZXIuZnJhbWVMb2FkZXIoKS0+aWNvbigpLnVybCgpKSkK
LSAgICAgICAgICAgIHR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OkltYWdlUmVzb3VyY2U7Cisg
ICAgICAgICAgICB0eXBlID0gUGFnZUFnZW50OjpJbWFnZVJlc291cmNlOwogICAgICAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHJlcXVlc3QudXJsKCksIGxvYWRl
ci51cmwoKSkgJiYgIWxvYWRlci5pc0NvbW1pdHRlZCgpKQotICAgICAgICAgICAgdHlwZSA9IElu
c3BlY3RvclBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZTsKKyAgICAgICAgICAgIHR5cGUgPSBQ
YWdlQWdlbnQ6OkRvY3VtZW50UmVzb3VyY2U7CiAgICAgfQogCiAgICAgbV9yZXNvdXJjZXNEYXRh
LT5zZXRSZXNvdXJjZVR5cGUocmVxdWVzdElkLCB0eXBlKTsKQEAgLTMxNywxMyArMzE3LDEzIEBA
IHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lOjpDYWNoZUNvbnRyb2wsICJuby1jYWNoZSIpOwogICAgIH0KIAot
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUg
PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24odHlwZSk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSA9IFBhZ2VBZ2Vu
dDo6cmVzb3VyY2VUeXBlSnNvbih0eXBlKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IGluaXRpYXRvck9iamVjdCA9IGJ1aWxkSW5pdGlhdG9y
T2JqZWN0KGxvYWRlci5mcmFtZSgpID8gbG9hZGVyLmZyYW1lKCktPmRvY3VtZW50KCkgOiBudWxs
cHRyKTsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQocmVxdWVz
dElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXIuZnJhbWUoKSksIG1fcGFnZUFnZW50LT5s
b2FkZXJJZCgmbG9hZGVyKSwgbG9hZGVyLnVybCgpLnN0cmluZygpLCBidWlsZE9iamVjdEZvclJl
c291cmNlUmVxdWVzdChyZXF1ZXN0KSwgdGltZXN0YW1wKCksIGluaXRpYXRvck9iamVjdCwgYnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UsICZsb2FkZXIpLCB0
eXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZSA/ICZyZXNvdXJjZVR5cGUg
OiBudWxscHRyKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQo
cmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXIuZnJhbWUoKSksIG1fcGFnZUFn
ZW50LT5sb2FkZXJJZCgmbG9hZGVyKSwgbG9hZGVyLnVybCgpLnN0cmluZygpLCBidWlsZE9iamVj
dEZvclJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgdGltZXN0YW1wKCksIGluaXRpYXRvck9iamVj
dCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UsICZsb2Fk
ZXIpLCB0eXBlICE9IFBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZSA/ICZyZXNvdXJjZVR5cGUgOiBu
dWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjptYXJrUmVzb3VyY2VB
c0NhY2hlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit2b2lkIFJlc291cmNlQWdlbnQ6Om1h
cmtSZXNvdXJjZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBpZiAo
bV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMuY29udGFpbnMoaWRlbnRpZmllcikpCiAgICAgICAg
IHJldHVybjsKQEAgLTMzMSw3ICszMzEsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6
Om1hcmtSZXNvdXJjZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFNlcnZlZEZyb21DYWNoZShJZGVudGlmaWVyc0ZhY3Rv
cnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bnRMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291
cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXImIGxvYWRl
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlTG9hZGVyKiByZXNv
dXJjZUxvYWRlcikKIHsKICAgICBpZiAobV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMuY29udGFp
bnMoaWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybjsKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lk
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIERvY3VtZQogICAgIGlmIChyZXNvdXJjZUxvYWRlciAmJiByZXNvdXJjZUxv
YWRlci0+aXNTdWJyZXNvdXJjZUxvYWRlcigpICYmICFpc05vdE1vZGlmaWVkKQogICAgICAgICBj
YWNoZWRSZXNvdXJjZSA9IHN0YXRpY19jYXN0PFN1YnJlc291cmNlTG9hZGVyKj4ocmVzb3VyY2VM
b2FkZXIpLT5jYWNoZWRSZXNvdXJjZSgpOwogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCi0gICAg
ICAgIGNhY2hlZFJlc291cmNlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShs
b2FkZXIuZnJhbWUoKSwgcmVzcG9uc2UudXJsKCkpOworICAgICAgICBjYWNoZWRSZXNvdXJjZSA9
IFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UobG9hZGVyLmZyYW1lKCksIHJlc3BvbnNlLnVybCgp
KTsKIAogICAgIGlmIChjYWNoZWRSZXNvdXJjZSkgewogICAgICAgICAvLyBVc2UgbWltZSB0eXBl
IGZyb20gY2FjaGVkIHJlc291cmNlIGluIGNhc2UgdGhlIG9uZSBpbiByZXNwb25zZSBpcyBlbXB0
eS4KQEAgLTM1NCwxOCArMzU0LDE4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lCiAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+YWRkQ2FjaGVkUmVzb3VyY2UocmVxdWVzdElkLCBjYWNoZWRSZXNv
dXJjZSk7CiAgICAgfQogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlw
ZSA9IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCk7Ci0gICAgSW5zcGVj
dG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgbmV3VHlwZSA9IGNhY2hlZFJlc291cmNlID8gSW5z
cGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNhY2hlZFJlc291cmNlKSA6IHR5
cGU7CisgICAgUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSA9IG1fcmVzb3VyY2VzRGF0YS0+
cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCk7CisgICAgUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgbmV3
VHlwZSA9IGNhY2hlZFJlc291cmNlID8gUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNh
Y2hlZFJlc291cmNlKSA6IHR5cGU7CiAKICAgICAvLyBGSVhNRTogWEhSUmVzb3VyY2UgaXMgcmV0
dXJuZWQgZm9yIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZSwgaXQgc2hvdWxkIGJlIE90aGVy
UmVzb3VyY2UgdW5sZXNzIGl0IHRydWx5IGlzIGFuIFhIUi4KICAgICAvLyBSYXdSZXNvdXJjZSBp
cyB1c2VkIGZvciBsb2FkaW5nIHdvcmtlciBzY3JpcHRzLCBhbmQgdGhvc2Ugc2hvdWxkIHN0YXkg
YXMgU2NyaXB0UmVzb3VyY2UgYW5kIG5vdCBjaGFuZ2UgdG8gWEhSUmVzb3VyY2UuCi0gICAgaWYg
KHR5cGUgIT0gbmV3VHlwZSAmJiBuZXdUeXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6WEhSUmVz
b3VyY2UgJiYgbmV3VHlwZSAhPSBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpCisg
ICAgaWYgKHR5cGUgIT0gbmV3VHlwZSAmJiBuZXdUeXBlICE9IFBhZ2VBZ2VudDo6WEhSUmVzb3Vy
Y2UgJiYgbmV3VHlwZSAhPSBQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpCiAgICAgICAgIHR5cGUg
PSBuZXdUeXBlOwogCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5yZXNwb25zZVJlY2VpdmVkKHJlcXVl
c3RJZCwgbV9wYWdlQWdlbnQtPmZyYW1lSWQobG9hZGVyLmZyYW1lKCkpLCByZXNwb25zZSk7CiAg
ICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZVR5cGUocmVxdWVzdElkLCB0eXBlKTsKIAot
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZVJlY2VpdmVkKHJlcXVlc3RJZCwgbV9w
YWdlQWdlbnQtPmZyYW1lSWQobG9hZGVyLmZyYW1lKCkpLCBtX3BhZ2VBZ2VudC0+bG9hZGVySWQo
JmxvYWRlciksIHRpbWVzdGFtcCgpLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpz
b24odHlwZSksIHJlc291cmNlUmVzcG9uc2UpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5y
ZXNwb25zZVJlY2VpdmVkKHJlcXVlc3RJZCwgbV9wYWdlQWdlbnQtPmZyYW1lSWQobG9hZGVyLmZy
YW1lKCkpLCBtX3BhZ2VBZ2VudC0+bG9hZGVySWQoJmxvYWRlciksIHRpbWVzdGFtcCgpLCBQYWdl
QWdlbnQ6OnJlc291cmNlVHlwZUpzb24odHlwZSksIHJlc291cmNlUmVzcG9uc2UpOwogCiAgICAg
Ly8gSWYgd2UgcmV2YWxpZGF0ZWQgdGhlIHJlc291cmNlIGFuZCBnb3QgTm90IG1vZGlmaWVkLCBz
ZW5kIGNvbnRlbnQgbGVuZ3RoIGZvbGxvd2luZyBkaWRSZWNlaXZlUmVzcG9uc2UKICAgICAvLyBh
cyB0aGVyZSB3aWxsIGJlIG5vIGNhbGxzIHRvIGRpZFJlY2VpdmVEYXRhIGZyb20gdGhlIG5ldHdv
cmsgc3RhY2suCkBAIC0zNzgsNyArMzc4LDcgQEAgc3RhdGljIGJvb2wgaXNFcnJvclN0YXR1c0Nv
ZGUoaW50IHN0YXR1c0NvZGUpCiAgICAgcmV0dXJuIHN0YXR1c0NvZGUgPj0gNDAwOwogfQogCi12
b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVEYXRhKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVk
RGF0YUxlbmd0aCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZURhdGEodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCwgaW50IGVu
Y29kZWREYXRhTGVuZ3RoKQogewogICAgIGlmIChtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVycy5j
b250YWlucyhpZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzk0LDEzICszOTQsMTMg
QEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlRGF0YSh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IGNoYXIKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGF0
YVJlY2VpdmVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGRhdGFMZW5ndGgsIGVuY29kZWREYXRh
TGVuZ3RoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRGaW5pc2hMb2Fk
aW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXImIGxvYWRlciwgZG91
YmxlIGZpbmlzaFRpbWUpCit2b2lkIFJlc291cmNlQWdlbnQ6OmRpZEZpbmlzaExvYWRpbmcodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciYgbG9hZGVyLCBkb3VibGUgZmlu
aXNoVGltZSkKIHsKICAgICBpZiAobV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMucmVtb3ZlKGlk
ZW50aWZpZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRl
bnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7Ci0gICAgaWYgKG1fcmVzb3Vy
Y2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVlc3RJZCkgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpE
b2N1bWVudFJlc291cmNlKQorICAgIGlmIChtX3Jlc291cmNlc0RhdGEtPnJlc291cmNlVHlwZShy
ZXF1ZXN0SWQpID09IFBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZSkKICAgICAgICAgbV9yZXNv
dXJjZXNEYXRhLT5hZGRSZXNvdXJjZVNoYXJlZEJ1ZmZlcihyZXF1ZXN0SWQsIGxvYWRlci5mcmFt
ZUxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VEYXRhKCksIGxvYWRlci5m
cmFtZSgpLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCkpOwogCiAgICAgbV9yZXNvdXJjZXNE
YXRhLT5tYXliZURlY29kZURhdGFUb0NvbnRlbnQocmVxdWVzdElkKTsKQEAgLTQxNCwxOSArNDE0
LDE5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkRmluaXNoTG9hZGluZyh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50CiAgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdV
Ukw7CiAgICAgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSBjb25zdCogcmVzb3Vy
Y2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVlc3RJZCk7CiAgICAgaWYgKHJlc291
cmNlRGF0YSAmJiByZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCkpCi0gICAgICAgIHNvdXJj
ZU1hcHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNl
KHJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSk7CisgICAgICAgIHNvdXJjZU1hcHBpbmdV
UkwgPSBQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKHJlc291cmNlRGF0YS0+Y2Fj
aGVkUmVzb3VyY2UoKSk7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0Zpbmlz
aGVkKHJlcXVlc3RJZCwgZmluaXNoVGltZSwgIXNvdXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpID8g
JnNvdXJjZU1hcHBpbmdVUkwgOiBudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50
TG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBSZXNvdXJj
ZUFnZW50OjpkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50
TG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIGlmICht
X2hpZGRlblJlcXVlc3RJZGVudGlmaWVycy5yZW1vdmUoaWRlbnRpZmllcikpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVl
c3RJZChpZGVudGlmaWVyKTsKIAotICAgIGlmIChtX3Jlc291cmNlc0RhdGEtPnJlc291cmNlVHlw
ZShyZXF1ZXN0SWQpID09IEluc3BlY3RvclBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZSkgewor
ICAgIGlmIChtX3Jlc291cmNlc0RhdGEtPnJlc291cmNlVHlwZShyZXF1ZXN0SWQpID09IFBhZ2VB
Z2VudDo6RG9jdW1lbnRSZXNvdXJjZSkgewogICAgICAgICBGcmFtZSogZnJhbWUgPSBsb2FkZXIu
ZnJhbWUoKTsKICAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExv
YWRlcigpICYmIGZyYW1lLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBtX3Jlc291cmNlc0Rh
dGEtPmFkZFJlc291cmNlU2hhcmVkQnVmZmVyKHJlcXVlc3RJZCwKQEAgLTQzOSw3ICs0MzksNyBA
QCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgRG9jdW1lbnRMbwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sb2Fk
aW5nRmFpbGVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGVycm9yLmxvY2FsaXplZERlc2NyaXB0
aW9uKCksIGNhbmNlbGVkID8gJmNhbmNlbGVkIDogbnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50
TG9hZGVyJiBsb2FkZXIsIENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3ZvaWQgUmVzb3VyY2VB
Z2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyJiBsb2Fk
ZXIsIENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKIHsKICAgICBTdHJpbmcgbG9hZGVySWQgPSBt
X3BhZ2VBZ2VudC0+bG9hZGVySWQoJmxvYWRlcik7CiAgICAgU3RyaW5nIGZyYW1lSWQgPSBtX3Bh
Z2VBZ2VudC0+ZnJhbWVJZChsb2FkZXIuZnJhbWUoKSk7CkBAIC00NTMsMTcgKzQ1MywxNyBAQCB2
b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZShEb2N1bWVudExvYWRlciYgbG9hZAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIGxvYWRl
ci51cmwoKS5zdHJpbmcoKSwgdGltZXN0YW1wKCksIGluaXRpYXRvck9iamVjdCwgYnVpbGRPYmpl
Y3RGb3JDYWNoZWRSZXNvdXJjZSgmcmVzb3VyY2UsICZsb2FkZXIpKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRJbml0aWFsU2NyaXB0Q29udGVudCh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQordm9pZCBSZXNvdXJjZUFn
ZW50OjpzZXRJbml0aWFsU2NyaXB0Q29udGVudCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQogewogICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVz
b3VyY2VDb250ZW50KElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCBz
b3VyY2VTdHJpbmcpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2Vp
dmVTY3JpcHRSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit2b2lkIFJlc291cmNl
QWdlbnQ6OmRpZFJlY2VpdmVTY3JpcHRSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIp
CiB7Ci0gICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZVR5cGUoSWRlbnRpZmllcnNGYWN0
b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0UmVz
b3VyY2UpOworICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VUeXBlKElkZW50aWZpZXJz
RmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCBQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNl
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRGaW5pc2hYSFJMb2FkaW5n
KFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlU3RyaW5nKQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRGaW5pc2hYSFJM
b2FkaW5nKFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQogewogICAgIC8vIEZvciBBc3luY2hyb25vdXMg
WEhScywgdGhlIGluc3BlY3RvciBjYW4gZ3JhYiB0aGUgZGF0YSBkaXJlY3RseSBvZmYgb2YgdGhl
IENhY2hlZFJlc291cmNlLiBGb3Igc3luYyBYSFJzLCB3ZSBuZWVkIHRvCiAgICAgLy8gcHJvdmlk
ZSB0aGUgZGF0YSBoZXJlLCBzaW5jZSBubyBDYWNoZWRSZXNvdXJjZSB3YXMgaW52b2x2ZWQuCkBA
IC00NzEsMjIgKzQ3MSwyMiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZEZpbmlz
aFhIUkxvYWRpbmcoVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIHVuc2lnbgogICAgICAgICBtX3Jl
c291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVl
c3RJZChpZGVudGlmaWVyKSwgc291cmNlU3RyaW5nKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpkaWRSZWNlaXZlWEhSUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlWEhSUmVzcG9uc2UodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKQogewotICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VUeXBlKElk
ZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OlhIUlJlc291cmNlKTsKKyAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlVHlwZShJ
ZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgUGFnZUFnZW50OjpYSFJS
ZXNvdXJjZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbExvYWRYSFJT
eW5jaHJvbm91c2x5KCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6d2lsbExvYWRYSFJTeW5jaHJvbm91
c2x5KCkKIHsKICAgICBtX2xvYWRpbmdYSFJTeW5jaHJvbm91c2x5ID0gdHJ1ZTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRMb2FkWEhSU3luY2hyb25vdXNseSgpCit2b2lk
IFJlc291cmNlQWdlbnQ6OmRpZExvYWRYSFJTeW5jaHJvbm91c2x5KCkKIHsKICAgICBtX2xvYWRp
bmdYSFJTeW5jaHJvbm91c2x5ID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6d2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVz
b3VyY2UpCit2b2lkIFJlc291cmNlQWdlbnQ6OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVl
c3RJZHMgPSBtX3Jlc291cmNlc0RhdGEtPnJlbW92ZUNhY2hlZFJlc291cmNlKCZjYWNoZWRSZXNv
dXJjZSk7CiAgICAgaWYgKCFyZXF1ZXN0SWRzLnNpemUoKSkKQEAgLTQ5NCwzMSArNDk0LDMxIEBA
IHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzCiAKICAgICBTdHJpbmcgY29udGVudDsKICAgICBib29s
IGJhc2U2NEVuY29kZWQ7Ci0gICAgaWYgKCFJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291
cmNlQ29udGVudCgmY2FjaGVkUmVzb3VyY2UsICZjb250ZW50LCAmYmFzZTY0RW5jb2RlZCkpCisg
ICAgaWYgKCFQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCgmY2FjaGVkUmVzb3VyY2Us
ICZjb250ZW50LCAmYmFzZTY0RW5jb2RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8
U3RyaW5nPjo6aXRlcmF0b3IgZW5kID0gcmVxdWVzdElkcy5lbmQoKTsKICAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IHJlcXVlc3RJZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQogICAgICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlQ29udGVudCgqaXQsIGNv
bnRlbnQsIGJhc2U2NEVuY29kZWQpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6
OndpbGxSZWNhbGN1bGF0ZVN0eWxlKCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6d2lsbFJlY2FsY3Vs
YXRlU3R5bGUoKQogewogICAgIG1faXNSZWNhbGN1bGF0aW5nU3R5bGUgPSB0cnVlOwogfQogCi12
b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2FsY3VsYXRlU3R5bGUoKQordm9pZCBS
ZXNvdXJjZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkKIHsKICAgICBtX2lzUmVjYWxjdWxh
dGluZ1N0eWxlID0gZmFsc2U7CiAgICAgbV9zdHlsZVJlY2FsY3VsYXRpb25Jbml0aWF0b3IgPSBu
dWxscHRyOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFNjaGVkdWxlU3R5
bGVSZWNhbGN1bGF0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6
ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAg
IGlmICghbV9zdHlsZVJlY2FsY3VsYXRpb25Jbml0aWF0b3IpCiAgICAgICAgIG1fc3R5bGVSZWNh
bGN1bGF0aW9uSW5pdGlhdG9yID0gYnVpbGRJbml0aWF0b3JPYmplY3QoJmRvY3VtZW50KTsKIH0K
IAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50
KQorUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gUmVzb3Vy
Y2VBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAg
IFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrVHJhY2UgPSBjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2soSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSwgU2NyaXB0Q2FsbFN0YWNr
OjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKTsKICAgICBpZiAoc3RhY2tUcmFjZSAmJiBzdGFj
a1RyYWNlLT5zaXplKCkgPiAwKSB7CkBAIC01NDgsMTIgKzU0OCwxMiBAQCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpidWlsZEluaQogCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQogCi12b2lkIEluc3BlY3RvclJl
c291cmNlQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFVSTCYgcmVxdWVzdFVSTCkKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6ZGlkQ3JlYXRlV2Vi
U29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgVVJMJiByZXF1ZXN0VVJMKQog
ewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRDcmVhdGVkKElkZW50aWZpZXJz
RmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCByZXF1ZXN0VVJMLnN0cmluZygpKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFr
ZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCit2b2lkIFJlc291cmNlQWdlbnQ6OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtl
UmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKICAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0SGVhZGVy
cyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQpAQCAt
NTYxLDcgKzU2MSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRXZWJT
b2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlCiAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPndlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChJZGVudGlmaWVyc0Zh
Y3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92ZShyZXF1
ZXN0T2JqZWN0KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2
ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIFJlc291cmNlQWdlbnQ6OmRpZFJl
Y2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGF1dG8gcmVzcG9uc2VP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZTo6
Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXR1cyhyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKQpA
QCAtNTcxLDEyICs1NzEsMTIgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNl
aXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5zaWduZWQgbG9uZwogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT53ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKElkZW50aWZp
ZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgV1RGOjptb3Zl
KHJlc3BvbnNlT2JqZWN0KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlk
Q2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQordm9pZCBSZXNvdXJjZUFn
ZW50OjpkaWRDbG9zZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldENsb3NlZChJZGVudGlmaWVyc0ZhY3Rvcnk6
OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCkpOwogfQogCi12b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZSh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKK3ZvaWQgUmVzb3VyY2VBZ2Vu
dDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEZyYW1lKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQogewogICAgIGF1dG8gZnJhbWVPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAg
ICAgLnNldE9wY29kZShmcmFtZS5vcENvZGUpCkBAIC01ODYsNyArNTg2LDcgQEAgdm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWUodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRGcmFtZVJl
Y2VpdmVkKElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3Rh
bXAoKSwgV1RGOjptb3ZlKGZyYW1lT2JqZWN0KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQordm9pZCBSZXNvdXJjZUFnZW50OjpkaWRTZW5k
V2ViU29ja2V0RnJhbWUodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRG
cmFtZSYgZnJhbWUpCiB7CiAgICAgYXV0byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bjb2Rl
KGZyYW1lLm9wQ29kZSkKQEAgLTU5Niw0MCArNTk2LDQwIEBAIHZvaWQgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1lU2VudChJZGVudGlm
aWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92
ZShmcmFtZU9iamVjdCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJl
Y2VpdmVXZWJTb2NrZXRGcmFtZUVycm9yKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpCit2b2lkIFJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJT
b2NrZXRGcmFtZUVycm9yKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1l
RXJyb3IoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFt
cCgpLCBlcnJvck1lc3NhZ2UpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQog
Ci12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCit2b2lk
IFJlc291cmNlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiB7CiAgICAgZW5hYmxlKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZW5hYmxlKCkKK3ZvaWQgUmVzb3VyY2VB
Z2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAoIW1fZnJvbnRlbmREaXNwYXRjaGVyKQogICAgICAg
ICByZXR1cm47CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMtPnNldEluc3BlY3RvclJlc291cmNlQWdlbnQodGhpcyk7CisgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLT5zZXRSZXNvdXJjZUFnZW50KHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291
cmNlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQordm9pZCBSZXNvdXJjZUFnZW50OjpkaXNh
YmxlKEVycm9yU3RyaW5nJikKIHsKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKLSAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclJlc291cmNlQWdlbnQobnVsbHB0cik7CisgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRSZXNvdXJjZUFnZW50KG51bGxwdHIpOwogICAgIG1f
cmVzb3VyY2VzRGF0YS0+Y2xlYXIoKTsKICAgICBtX2V4dHJhUmVxdWVzdEhlYWRlcnMuY2xlYXIo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJz
KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBoZWFkZXJzKQor
dm9pZCBSZXNvdXJjZUFnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBoZWFkZXJzKQogewogICAgIG1fZXh0cmFSZXF1
ZXN0SGVhZGVycyA9IGhlYWRlcnMuY29weVJlZigpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291
cmNlQWdlbnQ6OmdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQp
Cit2b2lkIFJlc291cmNlQWdlbnQ6OmdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJh
c2U2NEVuY29kZWQpCiB7CiAgICAgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSBj
b25zdCogcmVzb3VyY2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVlc3RJZCk7CiAg
ICAgaWYgKCFyZXNvdXJjZURhdGEpIHsKQEAgLTY1MCw0NiArNjUwLDQ2IEBAIHZvaWQgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6Z2V0UmVzcG9uc2VCb2R5KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyCiAKICAgICBpZiAocmVzb3VyY2VEYXRhLT5idWZmZXIoKSAmJiAhcmVzb3Vy
Y2VEYXRhLT50ZXh0RW5jb2RpbmdOYW1lKCkuaXNOdWxsKCkpIHsKICAgICAgICAgKmJhc2U2NEVu
Y29kZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVm
ZmVyQ29udGVudChyZXNvdXJjZURhdGEtPmJ1ZmZlcigpLCByZXNvdXJjZURhdGEtPnRleHRFbmNv
ZGluZ05hbWUoKSwgKmJhc2U2NEVuY29kZWQsIGNvbnRlbnQpKQorICAgICAgICBpZiAoUGFnZUFn
ZW50OjpzaGFyZWRCdWZmZXJDb250ZW50KHJlc291cmNlRGF0YS0+YnVmZmVyKCksIHJlc291cmNl
RGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLCAqYmFzZTY0RW5jb2RlZCwgY29udGVudCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHJlc291cmNlRGF0YS0+Y2FjaGVkUmVz
b3VyY2UoKSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZUNvbnRlbnQocmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpLCBjb250ZW50LCBiYXNlNjRF
bmNvZGVkKSkKKyAgICAgICAgaWYgKFBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KHJl
c291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVy
YWwoIk5vIGRhdGEgZm91bmQgZm9yIHJlc291cmNlIHdpdGggZ2l2ZW4gaWRlbnRpZmllciIpOwog
fQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNhbkNsZWFyQnJvd3NlckNhY2hlKEVy
cm9yU3RyaW5nJiwgYm9vbCogcmVzdWx0KQordm9pZCBSZXNvdXJjZUFnZW50OjpjYW5DbGVhckJy
b3dzZXJDYWNoZShFcnJvclN0cmluZyYsIGJvb2wqIHJlc3VsdCkKIHsKICAgICAqcmVzdWx0ID0g
bV9jbGllbnQtPmNhbkNsZWFyQnJvd3NlckNhY2hlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6Y2xlYXJCcm93c2VyQ2FjaGUoRXJyb3JTdHJpbmcmKQordm9pZCBSZXNvdXJj
ZUFnZW50OjpjbGVhckJyb3dzZXJDYWNoZShFcnJvclN0cmluZyYpCiB7CiAgICAgbV9jbGllbnQt
PmNsZWFyQnJvd3NlckNhY2hlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
Y2FuQ2xlYXJCcm93c2VyQ29va2llcyhFcnJvclN0cmluZyYsIGJvb2wqIHJlc3VsdCkKK3ZvaWQg
UmVzb3VyY2VBZ2VudDo6Y2FuQ2xlYXJCcm93c2VyQ29va2llcyhFcnJvclN0cmluZyYsIGJvb2wq
IHJlc3VsdCkKIHsKICAgICAqcmVzdWx0ID0gbV9jbGllbnQtPmNhbkNsZWFyQnJvd3NlckNvb2tp
ZXMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjbGVhckJyb3dzZXJDb29r
aWVzKEVycm9yU3RyaW5nJikKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6Y2xlYXJCcm93c2VyQ29va2ll
cyhFcnJvclN0cmluZyYpCiB7CiAgICAgbV9jbGllbnQtPmNsZWFyQnJvd3NlckNvb2tpZXMoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRDYWNoZURpc2FibGVkKEVycm9y
U3RyaW5nJiwgYm9vbCBjYWNoZURpc2FibGVkKQordm9pZCBSZXNvdXJjZUFnZW50OjpzZXRDYWNo
ZURpc2FibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBjYWNoZURpc2FibGVkKQogewogICAgIG1fY2Fj
aGVEaXNhYmxlZCA9IGNhY2hlRGlzYWJsZWQ7CiAgICAgaWYgKGNhY2hlRGlzYWJsZWQpCiAgICAg
ICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5ldmljdFJlc291cmNlcygpOwogfQogCi12b2lk
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIFJl
ZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6
bG9hZFJlc291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFt
ZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgUmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5hc3NlcnRGcmFt
ZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTcyOSw3ICs3Mjks
NyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmxvYWRSZXNvdXJjZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgIGluc3BlY3RvclRocmVhZGFibGVMb2Fk
ZXJDbGllbnQtPnNldExvYWRlcihsb2FkZXIucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjptYWluRnJhbWVOYXZpZ2F0ZWQoRG9jdW1lbnRMb2FkZXImIGxvYWRl
cikKK3ZvaWQgUmVzb3VyY2VBZ2VudDo6bWFpbkZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVy
JiBsb2FkZXIpCiB7CiAgICAgaWYgKG1fY2FjaGVEaXNhYmxlZCkKICAgICAgICAgTWVtb3J5Q2Fj
aGU6OnNpbmdsZXRvbigpLmV2aWN0UmVzb3VyY2VzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaAppbmRleCA2YWNkZTJiN2EzYWRlNmQ4
NWRiNTQwM2UxNDdkZWZhMDZjYWFiZmJkLi45OWY5NTNhZTk1YTcxNGJiMDNkM2E1MTA2ZWNmMDkw
NzUyOWMxZDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmgKQEAgLTUzLDEwICs1MywxMCBAQCBjbGFzcyBGb3JtRGF0YTsKIGNsYXNz
IEZyYW1lOwogY2xhc3MgSFRUUEhlYWRlck1hcDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKLWNs
YXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFz
cyBOZXR3b3JrUmVzb3VyY2VzRGF0YTsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQYWdlQWdlbnQ7CiBj
bGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBSZXNvdXJj
ZVJlcXVlc3Q7CkBAIC03MiwxMSArNzIsMTEgQEAgc3RydWN0IFdlYlNvY2tldEZyYW1lOwogCiB0
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6Ok5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworY2xhc3MgUmVzb3VyY2VBZ2VudCBmaW5h
bCA6IHB1YmxpYyBXZWJBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6Ok5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIEluc3BlY3RvclJlc291cmNlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3Bl
Y3RvclBhZ2VBZ2VudCosIEluc3BlY3RvckNsaWVudCopOwotICAgIHZpcnR1YWwgfkluc3BlY3Rv
clJlc291cmNlQWdlbnQoKTsKKyAgICBSZXNvdXJjZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMq
LCBQYWdlQWdlbnQqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5SZXNvdXJjZUFn
ZW50KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciop
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwpAQCAtMTMxLDcgKzEzMSw3
IEBAIHByaXZhdGU6CiAKICAgICBkb3VibGUgdGltZXN0YW1wKCk7CiAKLSAgICBJbnNwZWN0b3JQ
YWdlQWdlbnQqIG1fcGFnZUFnZW50OworICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAg
SW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
OjpOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAKaW5kZXggMDhiZGJlZTEzNmFjNzJjZGNlZDZlZTQ0YWE2ZWE3N2U4ZTQyODE4Yy4uMDli
N2Q5N2NkOTg1ZTQ5MjI4ZTBiODRkOGM5MDU2ODNhNDM2OTQ3OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtMjQzLDcgKzI0Myw3
IEBAIHN0YXRpYyB2b2lkIGZpbGxNZWRpYUxpc3RDaGFpbihDU1NSdWxlKiBydWxlLCBBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTCiAgICAgICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0
KSB7CiAgICAgICAgICAgICBzb3VyY2VVUkwgPSBwYXJlbnRTdHlsZVNoZWV0LT5jb250ZW50cygp
LmJhc2VVUkwoKTsKICAgICAgICAgICAgIGlmIChzb3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgIHNvdXJjZVVSTCA9IEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmlu
ZyhwYXJlbnRTdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCkpOworICAgICAgICAgICAgICAgIHNv
dXJjZVVSTCA9IERPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhwYXJlbnRTdHlsZVNoZWV0LT5v
d25lckRvY3VtZW50KCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHNvdXJjZVVSTCA9
ICIiOwogCkBAIC01NjEsNyArNTYxLDcgQEAgVmVjdG9yPFN0cmluZz4gSW5zcGVjdG9yU3R5bGU6
OmxvbmdoYW5kUHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnQKICAgICBy
ZXR1cm4gcHJvcGVydGllczsKIH0KIAotUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3Qg
U3RyaW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0b3JTdHlsZVNo
ZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNv
bnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBT
dHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW5zcGVjdG9yU3R5bGVTaGVldChwYWdlQWdlbnQsIGlkLCBXVEY6Om1vdmUo
cGFnZVN0eWxlU2hlZXQpLCBvcmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0ZW5lcikpOwogfQpAQCAt
NTc0LDcgKzU3NCw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VVJM
KENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3Rv
clBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVT
aGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxp
c3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVldChQYWdlQWdl
bnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYg
cGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikK
ICAgICA6IG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1faWQoaWQpCiAgICAgLCBtX3Bh
Z2VTdHlsZVNoZWV0KFdURjo6bW92ZShwYWdlU3R5bGVTaGVldCkpCkBAIC02OTksNyArNjk5LDcg
QEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IsIEV4Y2VwdGlvbkNvZGUKICAgICBDU1NSdWxlKiBydWxlID0gbV9wYWdlU3R5
bGVTaGVldC0+aXRlbShsYXN0UnVsZUluZGV4KTsKICAgICBBU1NFUlQocnVsZSk7CiAKLSAgICBD
U1NTdHlsZVJ1bGUqIHN0eWxlUnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVs
ZSgqcnVsZSk7CisgICAgQ1NTU3R5bGVSdWxlKiBzdHlsZVJ1bGUgPSBDU1NBZ2VudDo6YXNDU1NT
dHlsZVJ1bGUoKnJ1bGUpOwogICAgIGlmICghc3R5bGVSdWxlKSB7CiAgICAgICAgIC8vIFdoYXQg
d2UganVzdCBhZGRlZCBoYXMgdG8gYmUgYSBDU1NTdHlsZVJ1bGUgLSB3ZSBjYW5ub3QgaGFuZGxl
IG90aGVyIHR5cGVzIG9mIHJ1bGVzIHlldC4KICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgc3R5
bGUgcnVsZSwgcHJldGVuZCB3ZSBuZXZlciB0b3VjaGVkIHRoZSBzdHlsZXNoZWV0LgpAQCAtMTE4
NSw3ICsxMTg1LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXNvdXJjZVN0eWxlU2hl
ZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogCiAgICAgU3RyaW5nIGVycm9yOwogICAgIGJv
b2wgYmFzZTY0RW5jb2RlZDsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVu
dChlcnJvciwgb3duZXJEb2N1bWVudCgpLT5mcmFtZSgpLCBVUkwoUGFyc2VkVVJMU3RyaW5nLCBt
X3BhZ2VTdHlsZVNoZWV0LT5ocmVmKCkpLCByZXN1bHQsICZiYXNlNjRFbmNvZGVkKTsKKyAgICBQ
YWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChlcnJvciwgb3duZXJEb2N1bWVudCgpLT5mcmFtZSgp
LCBVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX3BhZ2VTdHlsZVNoZWV0LT5ocmVmKCkpLCByZXN1bHQs
ICZiYXNlNjRFbmNvZGVkKTsKICAgICByZXR1cm4gZXJyb3IuaXNFbXB0eSgpICYmICFiYXNlNjRF
bmNvZGVkOwogfQogCkBAIC0xMjI4LDcgKzEyMjgsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUmVmUHRyPENTU1J1bGVMaXN0PiYmIHJ1bGVMaXN0LCBDU1NT
dAogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IHJ1bGVMaXN0LT5sZW5ndGgoKTsg
aSA8IHNpemU7ICsraSkgewogICAgICAgICBDU1NSdWxlKiBydWxlID0gcnVsZUxpc3QtPml0ZW0o
aSk7Ci0gICAgICAgIENTU1N0eWxlUnVsZSogc3R5bGVSdWxlID0gSW5zcGVjdG9yQ1NTQWdlbnQ6
OmFzQ1NTU3R5bGVSdWxlKCpydWxlKTsKKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBzdHlsZVJ1bGUg
PSBDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUoKnJ1bGUpOwogICAgICAgICBpZiAoc3R5bGVSdWxl
KQogICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoc3R5bGVSdWxlKTsKICAgICAgICAgZWxzZSB7
CkBAIC0xMjM5LDEyICsxMjM5LDEyIEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVj
dEZsYXRSdWxlcyhSZWZQdHI8Q1NTUnVsZUxpc3Q+JiYgcnVsZUxpc3QsIENTU1N0CiAgICAgfQog
fQogCi1SZWY8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPEVsZW1lbnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3Rl
bmVyKQorUmVmPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0
IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYmIGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsK
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUocGFnZUFnZW50LCBpZCwgV1RGOjptb3ZlKGVsZW1lbnQpLCBvcmlnaW4sIGxpc3RlbmVyKSk7
CiB9CiAKLUluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBT
dHJpbmcmIGlkLCBSZWZQdHI8RWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZShQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPEVs
ZW1lbnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogSW5zcGVjdG9yU3R5bGVTaGVl
dChwYWdlQWdlbnQsIGlkLCBudWxscHRyLCBvcmlnaW4sIFN0cmluZygpLCBsaXN0ZW5lcikKICAg
ICAsIG1fZWxlbWVudChXVEY6Om1vdmUoZWxlbWVudCkpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRh
KG51bGxwdHIpCkBAIC0xMjc4LDcgKzEyNzgsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZTo6c2V0U3R5bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLAog
ICAgIEFTU0VSVF9VTlVTRUQoc3R5bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOwogCiAgICAg
ewotICAgICAgICBJbnNwZWN0b3JDU1NBZ2VudDo6SW5saW5lU3R5bGVPdmVycmlkZVNjb3BlIG92
ZXJyaWRlU2NvcGUoJm1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgICAgIENTU0FnZW50OjpJ
bmxpbmVTdHlsZU92ZXJyaWRlU2NvcGUgb3ZlcnJpZGVTY29wZSgmbV9lbGVtZW50LT5kb2N1bWVu
dCgpKTsKICAgICAgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgdGV4dCwgZWMp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmgKaW5kZXggOWE4MjE4N2I4MmNjMDE2MjI3MzA0YWVhYWM4MDFhNzBiYTI3ZjQzNS4uYjU1
MDE0MjkyNTFiNWIyYjIzZDk1M2VkZDJmNmNkNWY2OTkzZjQ4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC00Nyw4ICs0Nyw4IEBAIGNs
YXNzIENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0
b3JTdHlsZVNoZWV0OworY2xhc3MgUGFnZUFnZW50OwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIApAQCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgdHlwZWRl
ZiBIYXNoTWFwPENTU1N0eWxlRGVjbGFyYXRpb24qLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+PiBJ
bnNwZWN0b3JTdHlsZU1hcDsKLSAgICBzdGF0aWMgUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IGNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5
bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOworICAg
IHN0YXRpYyBSZWY8SW5zcGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKFBhZ2VBZ2VudCosIGNvbnN0
IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9j
dW1lbnRVUkwsIExpc3RlbmVyKik7CiAgICAgc3RhdGljIFN0cmluZyBzdHlsZVNoZWV0VVJMKENT
U1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KTsKIAogICAgIHZpcnR1YWwgfkluc3BlY3RvclN0
eWxlU2hlZXQoKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ1NT
SWQgc3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gcnVs
ZU9yU3R5bGVJZChzdHlsZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIEluc3BlY3RvclN0eWxlU2hl
ZXQoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPENTU1N0eWxl
U2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKKyAgICBJ
bnNwZWN0b3JTdHlsZVNoZWV0KFBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxD
U1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7
CiAKICAgICBib29sIGNhbkJpbmQoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbiAhPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXJBZ2VudCAmJiBtX29yaWdp
biAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXI7IH0K
ICAgICBJbnNwZWN0b3JDU1NJZCBydWxlT3JTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qKSBj
b25zdDsKQEAgLTIyNyw3ICsyMjcsNyBAQCBwcml2YXRlOgogICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiwgRWxlbWVudCopOwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNlbGVjdG9yTGlzdD4gYnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NTU3R5bGVSdWxlKiwg
RWxlbWVudCopOwogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBQ
YWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIFN0cmluZyBtX2lkOwogICAgIFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiBtX3BhZ2VTdHlsZVNoZWV0OwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbiBtX29yaWdpbjsKQEAgLTIzOSwxNCArMjM5LDE0IEBAIHByaXZh
dGU6CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3JTdHlsZVNoZWV0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCos
IGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYmLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIExpc3RlbmVyKik7CisgICAgc3RhdGljIFJlZjxJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IGNyZWF0ZShQYWdlQWdlbnQqLCBjb25zdCBT
dHJpbmcmIGlkLCBSZWZQdHI8RWxlbWVudD4mJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luLCBMaXN0ZW5lciopOwogCiAgICAgdm9pZCBkaWRNb2RpZnlFbGVtZW50
QXR0cmlidXRlKCk7CiAgICAgdmlydHVhbCBib29sIGdldFRleHQoU3RyaW5nKiByZXN1bHQpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJ
ZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJUX1VOVVNF
RChpZCwgIWlkLm9yZGluYWwoKSk7IHJldHVybiBpbmxpbmVTdHlsZSgpOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFn
ZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPEVsZW1lbnQ+JiYsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUmVm
UHRyPEVsZW1lbnQ+JiYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biwgTGlzdGVuZXIqKTsKIAogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVs
ZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IG92ZXJyaWRl
IHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7IHJldHVybiBt
X3J1bGVTb3VyY2VEYXRhOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXggMWE0ZDZlNzczMmI1NmI4NTZhMTUyMDYxNDAx
ZjQzZWI4Y2U1OGY1YS4uZmJjODMxYTMwMzUyNGY0MmJhMmNkZjBjNTEwYTc4NDQ0ZjdjYjYzYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmNwcApAQCAtNTgsMjcgKzU4LDI3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6fkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKQorVGltZWxpbmVBZ2VudDo6flRpbWVsaW5lQWdlbnQoKQogewogfQog
Ci12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3ZvaWQgVGltZWxpbmVBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
KiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1
ZTxJbnNwZWN0b3I6OlRpbWVsaW5lRnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwp
OwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3I6OlRpbWVsaW5lQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiAKLSAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldFBlcnNpc3RlbnRJbnNwZWN0b3JUaW1lbGluZUFnZW50KHRoaXMp
OworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0UGVyc2lzdGVudFRpbWVsaW5lQWdlbnQo
dGhpcyk7CiAKICAgICBpZiAobV9zY3JpcHREZWJ1Z1NlcnZlcikKICAgICAgICAgbV9zY3JpcHRE
ZWJ1Z1NlcnZlci0+cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQog
ewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLmNsZWFyKCk7CiAKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFBlcnNpc3Rl
bnRJbnNwZWN0b3JUaW1lbGluZUFnZW50KG51bGxwdHIpOworICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy0+c2V0UGVyc2lzdGVudFRpbWVsaW5lQWdlbnQobnVsbHB0cik7CiAKICAgICBpZiAocmVh
c29uICE9IEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJv
eWVkKSB7CiAgICAgICAgIGlmIChtX3NjcmlwdERlYnVnU2VydmVyKQpAQCAtODksMjEgKzg5LDIx
IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0CiAgICAgc3RvcCh1bnVzZWQpOwogfQogCi12b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBt
YXhDYWxsU3RhY2tEZXB0aCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6c3RhcnQoRXJyb3JTdHJpbmcm
LCBjb25zdCBpbnQqIG1heENhbGxTdGFja0RlcHRoKQogewogICAgIG1fZW5hYmxlZEZyb21Gcm9u
dGVuZCA9IHRydWU7CiAKICAgICBpbnRlcm5hbFN0YXJ0KG1heENhbGxTdGFja0RlcHRoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wKEVycm9yU3RyaW5nJikKK3ZvaWQg
VGltZWxpbmVBZ2VudDo6c3RvcChFcnJvclN0cmluZyYpCiB7CiAgICAgaW50ZXJuYWxTdG9wKCk7
CiAKICAgICBtX2VuYWJsZWRGcm9tRnJvbnRlbmQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVw
dGgpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmludGVybmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxs
U3RhY2tEZXB0aCkKIHsKICAgICBpZiAobWF4Q2FsbFN0YWNrRGVwdGggJiYgKm1heENhbGxTdGFj
a0RlcHRoID4gMCkKICAgICAgICAgbV9tYXhDYWxsU3RhY2tEZXB0aCA9ICptYXhDYWxsU3RhY2tE
ZXB0aDsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Omlu
dGVybmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkKIAogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2go
KS0+c3RhcnQoKTsKIAotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCh0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFRpbWVsaW5l
QWdlbnQodGhpcyk7CiAKICAgICBpZiAobV9zY3JpcHREZWJ1Z1NlcnZlcikKICAgICAgICAgbV9z
Y3JpcHREZWJ1Z1NlcnZlci0+YWRkTGlzdGVuZXIodGhpcyk7CkBAIC0xMjMsNyArMTIzLDcgQEAg
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4
Q2FsbFN0YWNrRGVwdGgpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZWNvcmRpbmdT
dGFydGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdG9w
KCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdG9wKCkKIHsKICAgICBpZiAoIW1fZW5h
YmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdG9wKCkKICAgICBpZiAoc3RvcHdhdGNoLT5pc0FjdGl2
ZSgpKQogICAgICAgICBzdG9wd2F0Y2gtPnN0b3AoKTsKIAotICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy0+c2V0SW5zcGVjdG9yVGltZWxpbmVBZ2VudChudWxscHRyKTsKKyAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMtPnNldFRpbWVsaW5lQWdlbnQobnVsbHB0cik7CiAKICAgICBpZiAobV9zY3Jp
cHREZWJ1Z1NlcnZlcikKICAgICAgICAgbV9zY3JpcHREZWJ1Z1NlcnZlci0+cmVtb3ZlTGlzdGVu
ZXIodGhpcywgdHJ1ZSk7CkBAIC0xNDYsMTIgKzE0NiwxMiBAQCB2b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OmludGVybmFsU3RvcCgpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5y
ZWNvcmRpbmdTdG9wcGVkKCk7CiB9CiAKLWRvdWJsZSBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0
aW1lc3RhbXAoKQorZG91YmxlIFRpbWVsaW5lQWdlbnQ6OnRpbWVzdGFtcCgpCiB7CiAgICAgcmV0
dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRp
b25TdG9wd2F0Y2goKS0+ZWxhcHNlZFRpbWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzZXRQYWdlU2NyaXB0RGVidWdTZXJ2ZXIoUGFnZVNjcmlwdERlYnVnU2VydmVyKiBz
Y3JpcHREZWJ1Z1NlcnZlcikKK3ZvaWQgVGltZWxpbmVBZ2VudDo6c2V0UGFnZVNjcmlwdERlYnVn
U2VydmVyKFBhZ2VTY3JpcHREZWJ1Z1NlcnZlciogc2NyaXB0RGVidWdTZXJ2ZXIpCiB7CiAgICAg
QVNTRVJUKCFtX2VuYWJsZWQpOwogICAgIEFTU0VSVCghbV9zY3JpcHREZWJ1Z1NlcnZlcik7CkBA
IC0xNzksNyArMTc5LDcgQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4g
c3RvcFByb2ZpbGluZyhGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gc3Rv
cFByb2ZpbGluZyh0b0pTRE9NV2luZG93KGZyYW1lLCBkZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxF
eGVjKCksIHRpdGxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydEZy
b21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcgJnRpdGxlKQordm9p
ZCBUaW1lbGluZUFnZW50OjpzdGFydEZyb21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcgJnRpdGxlKQogewogICAgIC8vIE9ubHkgYWxsb3cgcmVjb3JkaW5nIG9mIGEg
cHJvZmlsZSBpZiBpdCBpcyBhbm9ueW1vdXMgKGVtcHR5IHRpdGxlKSBvciBkb2VzIG5vdCBtYXRj
aAogICAgIC8vIHRoZSB0aXRsZSBvZiBhbiBhbHJlYWR5IHJlY29yZGluZyBwcm9maWxlLgpAQCAt
MjA0LDcgKzIwNCw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29u
c29sZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nCiAgICAgbV9wZW5kaW5nQ29u
c29sZVByb2ZpbGVSZWNvcmRzLmFwcGVuZChjcmVhdGVSZWNvcmRFbnRyeShUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZUNvbnNvbGVQcm9maWxlRGF0YSh0aXRsZSksIFRpbWVsaW5lUmVjb3Jk
VHlwZTo6Q29uc29sZVByb2ZpbGUsIHRydWUsIGZyYW1lRnJvbUV4ZWNTdGF0ZShleGVjKSkpOwog
fQogCi1QYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3Rv
cEZyb21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQor
UGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IFRpbWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICAvLyBTdG9w
IHByb2ZpbGVzIGluIHJldmVyc2Ugb3JkZXIuIElmIHRoZSB0aXRsZSBpcyBlbXB0eSwgdGhlbiBz
dG9wIHRoZSBsYXN0IHByb2ZpbGUuCiAgICAgLy8gT3RoZXJ3aXNlLCBtYXRjaCB0aGUgdGl0bGUg
b2YgdGhlIHByb2ZpbGUgdG8gc3RvcC4KQEAgLTIzMyw3ICsyMzMsNyBAQCBQYXNzUmVmUHRyPEpT
Qzo6UHJvZmlsZT4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcEZyb21Db25zb2xlKEpTQzo6
RXhlY1N0YXRlKgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OndpbGxDYWxsRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQg
c2NyaXB0TGluZSwgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxsQ2FsbEZ1
bmN0aW9uKGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUsIEZyYW1lKiBm
cmFtZSkKIHsKICAgICBwdXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUZ1bmN0aW9uQ2FsbERhdGEoc2NyaXB0TmFtZSwgc2NyaXB0TGluZSksIFRpbWVsaW5lUmVj
b3JkVHlwZTo6RnVuY3Rpb25DYWxsLCB0cnVlLCBmcmFtZSk7CiAKQEAgLTI0Myw3ICsyNDMsNyBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxDYWxsRnVuY3Rpb24oY29uc3QgU3Ry
aW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaQogICAgICsrbV9jYWxsU3RhY2tEZXB0aDsKIH0KIAot
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDYWxsRnVuY3Rpb24oRnJhbWUqIGZyYW1l
KQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRDYWxsRnVuY3Rpb24oRnJhbWUqIGZyYW1lKQogewog
ICAgIGlmIChmcmFtZSAmJiBtX2NhbGxTdGFja0RlcHRoKSB7CiAgICAgICAgIC0tbV9jYWxsU3Rh
Y2tEZXB0aDsKQEAgLTI2NSwyMiArMjY1LDIyIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkQ2FsbEZ1bmN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICBkaWRDb21wbGV0ZUN1cnJlbnRS
ZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlOjpGdW5jdGlvbkNhbGwpOwogfQogCi12b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OndpbGxEaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50JiBldmVudCwg
RnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxsRGlzcGF0Y2hFdmVudChjb25z
dCBFdmVudCYgZXZlbnQsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBwdXNoQ3VycmVudFJlY29yZChU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKGV2ZW50KSwgVGlt
ZWxpbmVSZWNvcmRUeXBlOjpFdmVudERpc3BhdGNoLCBmYWxzZSwgZnJhbWUpOwogfQogCi12b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZERpc3BhdGNoRXZlbnQoKQordm9pZCBUaW1lbGlu
ZUFnZW50OjpkaWREaXNwYXRjaEV2ZW50KCkKIHsKICAgICBkaWRDb21wbGV0ZUN1cnJlbnRSZWNv
cmQoVGltZWxpbmVSZWNvcmRUeXBlOjpFdmVudERpc3BhdGNoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpkaWRJbnZhbGlkYXRlTGF5b3V0KEZyYW1lJiBmcmFtZSkKK3ZvaWQg
VGltZWxpbmVBZ2VudDo6ZGlkSW52YWxpZGF0ZUxheW91dChGcmFtZSYgZnJhbWUpCiB7CiAgICAg
YXBwZW5kUmVjb3JkKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFRpbWVsaW5lUmVjb3JkVHlw
ZTo6SW52YWxpZGF0ZUxheW91dCwgdHJ1ZSwgJmZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JU
aW1lbGluZUFnZW50Ojp3aWxsTGF5b3V0KEZyYW1lJiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2Vu
dDo6d2lsbExheW91dChGcmFtZSYgZnJhbWUpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByb290ID0g
ZnJhbWUudmlldygpLT5sYXlvdXRSb290KCk7CiAgICAgYm9vbCBwYXJ0aWFsTGF5b3V0ID0gISFy
b290OwpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2ls
bExheW91dChGcmFtZSYgZnJhbWUpCiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNv
cmRGYWN0b3J5OjpjcmVhdGVMYXlvdXREYXRhKGRpcnR5T2JqZWN0cywgdG90YWxPYmplY3RzLCBw
YXJ0aWFsTGF5b3V0KSwgVGltZWxpbmVSZWNvcmRUeXBlOjpMYXlvdXQsIHRydWUsICZmcmFtZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkTGF5b3V0KFJlbmRlck9iamVj
dCogcm9vdCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkTGF5b3V0KFJlbmRlck9iamVjdCogcm9v
dCkKIHsKICAgICBpZiAobV9yZWNvcmRTdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTMxMywyNyArMzEzLDI3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkTGF5
b3V0KFJlbmRlck9iamVjdCogcm9vdCkKICAgICBkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQoVGlt
ZWxpbmVSZWNvcmRUeXBlOjpMYXlvdXQpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGlt
ZWxpbmVBZ2VudDo6ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oRnJhbWUqIGZyYW1lKQog
ewogICAgIGFwcGVuZFJlY29yZChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBUaW1lbGluZVJl
Y29yZFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uLCB0cnVlLCBmcmFtZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbFJlY2FsY3VsYXRlU3R5bGUoRnJhbWUq
IGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxsUmVjYWxjdWxhdGVTdHlsZShGcmFtZSog
ZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSwgVGltZWxpbmVSZWNvcmRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlcywgdHJ1ZSwgZnJhbWUpOwog
fQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFJlY2FsY3VsYXRlU3R5bGUoKQor
dm9pZCBUaW1lbGluZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkKIHsKICAgICBkaWRDb21w
bGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlcyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbFBhaW50KEZyYW1lJiBmcmFt
ZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2lsbFBhaW50KEZyYW1lJiBmcmFtZSkKIHsKICAgICBw
dXNoQ3VycmVudFJlY29yZChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBUaW1lbGluZVJlY29y
ZFR5cGU6OlBhaW50LCB0cnVlLCAmZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OmRpZFBhaW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3Qm
IGNsaXBSZWN0KQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRQYWludChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBUaW1lbGluZVJlY29y
ZEVudHJ5JiBlbnRyeSA9IG1fcmVjb3JkU3RhY2subGFzdCgpOwogICAgIEFTU0VSVChlbnRyeS50
eXBlID09IFRpbWVsaW5lUmVjb3JkVHlwZTo6UGFpbnQpOwpAQCAtMzQzLDIyICszNDMsMjIgQEAg
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRQYWludChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBMYXlvdXRSZWN0JgogICAgIGRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1l
bGluZVJlY29yZFR5cGU6OlBhaW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
Ojp3aWxsU2Nyb2xsKEZyYW1lJiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2lsbFNjcm9s
bChGcmFtZSYgZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpTY3JvbGxMYXllciwgZmFsc2UsICZmcmFt
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkU2Nyb2xsKCkKK3ZvaWQg
VGltZWxpbmVBZ2VudDo6ZGlkU2Nyb2xsKCkKIHsKICAgICBkaWRDb21wbGV0ZUN1cnJlbnRSZWNv
cmQoVGltZWxpbmVSZWNvcmRUeXBlOjpTY3JvbGxMYXllcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6d2lsbFdyaXRlSFRNTCh1bnNpZ25lZCBzdGFydExpbmUsIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2lsbFdyaXRlSFRNTCh1bnNpZ25lZCBzdGFydExp
bmUsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBwdXNoQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVBhcnNlSFRNTERhdGEoc3RhcnRMaW5lKSwgVGltZWxpbmVSZWNvcmRU
eXBlOjpQYXJzZUhUTUwsIHRydWUsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpkaWRXcml0ZUhUTUwodW5zaWduZWQgZW5kTGluZSkKK3ZvaWQgVGltZWxpbmVBZ2Vu
dDo6ZGlkV3JpdGVIVE1MKHVuc2lnbmVkIGVuZExpbmUpCiB7CiAgICAgaWYgKCFtX3JlY29yZFN0
YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5JiBlbnRy
eSA9IG1fcmVjb3JkU3RhY2subGFzdCgpOwpAQCAtMzY3LDQ3ICszNjcsNDcgQEAgdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpkaWRXcml0ZUhUTUwodW5zaWduZWQgZW5kTGluZSkKICAgICB9
CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkSW5zdGFsbFRpbWVyKGludCB0
aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBzaW5nbGVTaG90LCBGcmFtZSogZnJhbWUpCit2b2lk
IFRpbWVsaW5lQWdlbnQ6OmRpZEluc3RhbGxUaW1lcihpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQs
IGJvb2wgc2luZ2xlU2hvdCwgRnJhbWUqIGZyYW1lKQogewogICAgIGFwcGVuZFJlY29yZChUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVySW5zdGFsbERhdGEodGltZXJJZCwgdGltZW91
dCwgc2luZ2xlU2hvdCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZXJJbnN0YWxsLCB0cnVlLCBm
cmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkUmVtb3ZlVGltZXIo
aW50IHRpbWVySWQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkUmVtb3Zl
VGltZXIoaW50IHRpbWVySWQsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBhcHBlbmRSZWNvcmQoVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljVGltZXJEYXRhKHRpbWVySWQpLCBUaW1l
bGluZVJlY29yZFR5cGU6OlRpbWVyUmVtb3ZlLCB0cnVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbEZpcmVUaW1lcihpbnQgdGltZXJJZCwgRnJhbWUqIGZy
YW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxsRmlyZVRpbWVyKGludCB0aW1lcklkLCBGcmFt
ZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5
OjpjcmVhdGVHZW5lcmljVGltZXJEYXRhKHRpbWVySWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OlRp
bWVyRmlyZSwgZmFsc2UsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpkaWRGaXJlVGltZXIoKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRGaXJlVGltZXIoKQogewog
ICAgIGRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVyRmly
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbERpc3BhdGNoWEhSUmVh
ZHlTdGF0ZUNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgcmVhZHlTdGF0ZSwgRnJh
bWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxsRGlzcGF0Y2hYSFJSZWFkeVN0YXRl
Q2hhbmdlRXZlbnQoY29uc3QgU3RyaW5nJiB1cmwsIGludCByZWFkeVN0YXRlLCBGcmFtZSogZnJh
bWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YSh1cmwsIHJlYWR5U3RhdGUpLCBUaW1lbGluZVJlY29y
ZFR5cGU6OlhIUlJlYWR5U3RhdGVDaGFuZ2UsIGZhbHNlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkRGlzcGF0Y2hYSFJSZWFkeVN0YXRlQ2hhbmdlRXZlbnQo
KQordm9pZCBUaW1lbGluZUFnZW50OjpkaWREaXNwYXRjaFhIUlJlYWR5U3RhdGVDaGFuZ2VFdmVu
dCgpCiB7CiAgICAgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZTo6
WEhSUmVhZHlTdGF0ZUNoYW5nZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
d2lsbERpc3BhdGNoWEhSTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgdXJsLCBGcmFtZSogZnJhbWUp
Cit2b2lkIFRpbWVsaW5lQWdlbnQ6OndpbGxEaXNwYXRjaFhIUkxvYWRFdmVudChjb25zdCBTdHJp
bmcmIHVybCwgRnJhbWUqIGZyYW1lKQogewogICAgIHB1c2hDdXJyZW50UmVjb3JkKFRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSTG9hZERhdGEodXJsKSwgVGltZWxpbmVSZWNvcmRUeXBl
OjpYSFJMb2FkLCB0cnVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkRGlzcGF0Y2hYSFJMb2FkRXZlbnQoKQordm9pZCBUaW1lbGluZUFnZW50OjpkaWREaXNw
YXRjaFhIUkxvYWRFdmVudCgpCiB7CiAgICAgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVs
aW5lUmVjb3JkVHlwZTo6WEhSTG9hZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6d2lsbEV2YWx1YXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlciwg
RnJhbWUmIGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxsRXZhbHVhdGVTY3JpcHQoY29u
c3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyLCBGcmFtZSYgZnJhbWUpCiB7CiAgICAgcHVz
aEN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmFsdWF0ZVNjcmlw
dERhdGEodXJsLCBsaW5lTnVtYmVyKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpFdmFsdWF0ZVNjcmlw
dCwgdHJ1ZSwgJmZyYW1lKTsKIApAQCAtNDE3LDcgKzQxNyw3IEBAIHZvaWQgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDo6d2lsbEV2YWx1YXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGlu
ZU51bWJlCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZEV2YWx1
YXRlU2NyaXB0KEZyYW1lJiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkRXZhbHVhdGVT
Y3JpcHQoRnJhbWUmIGZyYW1lKQogewogICAgIGlmIChtX2NhbGxTdGFja0RlcHRoKSB7CiAgICAg
ICAgIC0tbV9jYWxsU3RhY2tEZXB0aDsKQEAgLTQzOSw3MyArNDM5LDczIEBAIHZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6ZGlkRXZhbHVhdGVTY3JpcHQoRnJhbWUmIGZyYW1lKQogICAgIGRp
ZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5cGU6OkV2YWx1YXRlU2NyaXB0
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRUaW1lU3RhbXAoRnJhbWUm
IGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZFRp
bWVTdGFtcChGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBhcHBl
bmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lU3RhbXBEYXRhKG1lc3Nh
Z2UpLCBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVTdGFtcCwgdHJ1ZSwgJmZyYW1lKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0aW1lKEZyYW1lJiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQordm9pZCBUaW1lbGluZUFnZW50Ojp0aW1lKEZyYW1lJiBmcmFtZSwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEobWVzc2FnZSksIFRpbWVsaW5lUmVjb3JkVHlwZTo6
VGltZSwgdHJ1ZSwgJmZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0
aW1lRW5kKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBUaW1lbGlu
ZUFnZW50Ojp0aW1lRW5kKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewog
ICAgIGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERh
dGEobWVzc2FnZSksIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZUVuZCwgdHJ1ZSwgJmZyYW1lKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRNYXJrRE9NQ29udGVudEV2ZW50
KEZyYW1lJiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkTWFya0RPTUNvbnRlbnRFdmVu
dChGcmFtZSYgZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlTWFya0RhdGEoZnJhbWUuaXNNYWluRnJhbWUoKSksIFRpbWVsaW5lUmVjb3JkVHlw
ZTo6TWFya0RPTUNvbnRlbnQsIGZhbHNlLCAmZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmRpZE1hcmtMb2FkRXZlbnQoRnJhbWUmIGZyYW1lKQordm9pZCBUaW1lbGlu
ZUFnZW50OjpkaWRNYXJrTG9hZEV2ZW50KEZyYW1lJiBmcmFtZSkKIHsKICAgICBhcHBlbmRSZWNv
cmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVNYXJrRGF0YShmcmFtZS5pc01haW5GcmFt
ZSgpKSwgVGltZWxpbmVSZWNvcmRUeXBlOjpNYXJrTG9hZCwgZmFsc2UsICZmcmFtZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tbWl0TG9hZCgpCit2b2lkIFRpbWVs
aW5lQWdlbnQ6OmRpZENvbW1pdExvYWQoKQogewogICAgIGNsZWFyUmVjb3JkU3RhY2soKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
aW50IGNhbGxiYWNrSWQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6ZGlkUmVx
dWVzdEFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkLCBGcmFtZSogZnJhbWUpCiB7CiAgICAg
YXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlQW5pbWF0aW9uRnJhbWVE
YXRhKGNhbGxiYWNrSWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OlJlcXVlc3RBbmltYXRpb25GcmFt
ZSwgdHJ1ZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENh
bmNlbEFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkLCBGcmFtZSogZnJhbWUpCit2b2lkIFRp
bWVsaW5lQWdlbnQ6OmRpZENhbmNlbEFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkLCBGcmFt
ZSogZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlQW5pbWF0aW9uRnJhbWVEYXRhKGNhbGxiYWNrSWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OkNh
bmNlbEFuaW1hdGlvbkZyYW1lLCB0cnVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDo6d2lsbEZpcmVBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCwgRnJhbWUq
IGZyYW1lKQordm9pZCBUaW1lbGluZUFnZW50Ojp3aWxsRmlyZUFuaW1hdGlvbkZyYW1lKGludCBj
YWxsYmFja0lkLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVBbmltYXRpb25GcmFtZURhdGEoY2FsbGJhY2tJZCksIFRp
bWVsaW5lUmVjb3JkVHlwZTo6RmlyZUFuaW1hdGlvbkZyYW1lLCBmYWxzZSwgZnJhbWUpOwogfQog
Ci12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZEZpcmVBbmltYXRpb25GcmFtZSgpCit2
b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZEZpcmVBbmltYXRpb25GcmFtZSgpCiB7CiAgICAgZGlkQ29t
cGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZTo6RmlyZUFuaW1hdGlvbkZyYW1l
KTsKIH0KIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGlt
ZWxpbmVBZ2VudDo6ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEZyYW1lKiBmcmFtZSkKIHsK
ICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVXZWJTb2NrZXRD
cmVhdGVEYXRhKGlkZW50aWZpZXIsIHVybCwgcHJvdG9jb2wpLCBUaW1lbGluZVJlY29yZFR5cGU6
OldlYlNvY2tldENyZWF0ZSwgdHJ1ZSwgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6d2lsbFNlbmRX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRnJhbWUq
IGZyYW1lKQogewogICAgIGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZUdlbmVyaWNXZWJTb2NrZXREYXRhKGlkZW50aWZpZXIpLCBUaW1lbGluZVJlY29yZFR5cGU6Oldl
YlNvY2tldFNlbmRIYW5kc2hha2VSZXF1ZXN0LCB0cnVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNl
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRnJhbWUqIGZyYW1lKQordm9pZCBUaW1lbGluZUFn
ZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1dlYlNvY2tldERhdGEoaWRlbnRpZmllciksIFRpbWVs
aW5lUmVjb3JkVHlwZTo6V2ViU29ja2V0UmVjZWl2ZUhhbmRzaGFrZVJlc3BvbnNlLCBmYWxzZSwg
ZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZERlc3Ryb3lXZWJT
b2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBGcmFtZSogZnJhbWUpCit2b2lkIFRpbWVs
aW5lQWdlbnQ6OmRpZERlc3Ryb3lXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBG
cmFtZSogZnJhbWUpCiB7CiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlR2VuZXJpY1dlYlNvY2tldERhdGEoaWRlbnRpZmllciksIFRpbWVsaW5lUmVjb3JkVHlw
ZTo6V2ViU29ja2V0RGVzdHJveSwgdHJ1ZSwgZnJhbWUpOwogfQpAQCAtNTEzLDcgKzUxMyw3IEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkRGVzdHJveVdlYlNvY2tldCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIEZyYW1lCiAKIC8vIFNjcmlwdERlYnVnTGlzdGVuZXIKIAotdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEluc3BlY3Rvcjo6U2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0
aW9uLCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25lZCBzYW1wbGVJZCwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmKQordm9pZCBUaW1lbGluZUFnZW50OjpicmVha3BvaW50QWN0aW9uUHJv
YmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3BlY3Rvcjo6U2NyaXB0QnJlYWtwb2lu
dEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25lZCBzYW1wbGVJZCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKQogewogICAgIFVOVVNFRF9QQVJBTShiYXRjaElk
KTsKICAgICBBU1NFUlQoZXhlYyk7CkBAIC01OTYsNyArNTk2LDcgQEAgc3RhdGljIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29y
ZFR5cGUgdHkKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZTo6VGltZVN0YW1wOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJl
Y29yZFRvVGltZWxpbmUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiByZWNvcmQsIFRpbWVsaW5l
UmVjb3JkVHlwZSB0eXBlKQordm9pZCBUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5l
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKIHsKICAgICBBU1NFUlRfQVJHKHJlY29yZCwgcmVjb3JkKTsKICAgICByZWNvcmQtPnNldFN0
cmluZygidHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHRv
UHJvdG9jb2wodHlwZSkpKTsKQEAgLTYxMCw3ICs2MTAsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBy
ZWNvcgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRGcmFtZUlk
ZW50aWZpZXIoSW5zcGVjdG9yT2JqZWN0KiByZWNvcmQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGlt
ZWxpbmVBZ2VudDo6c2V0RnJhbWVJZGVudGlmaWVyKEluc3BlY3Rvck9iamVjdCogcmVjb3JkLCBG
cmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFmcmFtZSB8fCAhbV9wYWdlQWdlbnQpCiAgICAgICAg
IHJldHVybjsKQEAgLTYyMCw3ICs2MjAsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OnNldEZyYW1lSWRlbnRpZmllcihJbnNwZWN0b3JPYmplY3QqIHJlY29yZCwgRnJhbWUqCiAgICAg
cmVjb3JkLT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5lUmVj
b3JkRW50cnkmIGVudHJ5KQordm9pZCBUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVu
dHJ5KGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIGVudHJ5KQogewogICAgIGVudHJ5LnJlY29y
ZC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBlbnRyeS5kYXRhKTsKICAgICBlbnRy
eS5yZWNvcmQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY2hpbGRyZW4iKSwgZW50cnkuY2hpbGRy
ZW4pOwpAQCAtNjI4LDcgKzYyOCw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlk
Q29tcGxldGVSZWNvcmRFbnRyeShjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5JiBlCiAgICAgYWRk
UmVjb3JkVG9UaW1lbGluZShlbnRyeS5yZWNvcmQuY29weVJlZigpLCBlbnRyeS50eXBlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZUN1cnJlbnRSZWNvcmQo
VGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCit2b2lkIFRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRl
Q3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsKICAgICAvLyBBbiBlbXB0
eSBzdGFjayBjb3VsZCBtZXJlbHkgbWVhbiB0aGF0IHRoZSB0aW1lbGluZSBhZ2VudCB3YXMgdHVy
bmVkIG9uIGluIHRoZSBtaWRkbGUgb2YKICAgICAvLyBhbiBldmVudC4gIERvbid0IHRyZWF0IGFz
IGFuIGVycm9yLgpAQCAtNjQwLDggKzY0MCw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogICAg
IH0KIH0KIAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdl
bnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yVHlwZSB0eXBlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVu
dCkKLSAgICA6IEluc3BlY3RvckFnZW50QmFzZShBU0NJSUxpdGVyYWwoIlRpbWVsaW5lIiksIGlu
c3RydW1lbnRpbmdBZ2VudHMpCitUaW1lbGluZUFnZW50OjpUaW1lbGluZUFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2VBZ2VudCogcGFnZUFnZW50LCBJ
bnNwZWN0b3JUeXBlIHR5cGUsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIDogV2ViQWdl
bnRCYXNlKEFTQ0lJTGl0ZXJhbCgiVGltZWxpbmUiKSwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAg
ICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1fc2NyaXB0RGVidWdTZXJ2ZXIobnVs
bHB0cikKICAgICAsIG1faWQoMSkKQEAgLTY1NCw3ICs2NTQsNyBAQCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpJbnNwZWN0b3JUaW1lbGluZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbgogewogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29y
ZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBl
LCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKK3ZvaWQgVGltZWxpbmVBZ2Vu
dDo6YXBwZW5kUmVjb3JkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVS
ZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewog
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6
Y3JlYXRlR2VuZXJpY1JlY29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4
Q2FsbFN0YWNrRGVwdGggOiAwKTsKICAgICByZWNvcmQtPnNldE9iamVjdCgiZGF0YSIsIFdURjo6
bW92ZShkYXRhKSk7CkBAIC02NjIsNyArNjYyLDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjphcHBlbmRSZWNvcmQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhLCBUaW1lbGkK
ICAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKFdURjo6bW92ZShyZWNvcmQpLCB0eXBlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBldmVudCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgZXZlbnQpCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5kRGlzcGF0Y2hlcikK
ICAgICAgICAgcmV0dXJuOwpAQCAtNjcyLDI1ICs2NzIsMjUgQEAgdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpzZW5kRXZlbnQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBldmVudCkKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXZlbnRSZWNvcmRlZChXVEY6Om1vdmUocmVjb3JkQ2hl
Y2tlZCkpOwogfQogCi1JbnNwZWN0b3JUaW1lbGluZUFnZW50OjpUaW1lbGluZVJlY29yZEVudHJ5
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJlY29yZEVudHJ5KFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNh
bGxTdGFjaywgRnJhbWUqIGZyYW1lKQorVGltZWxpbmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRy
eSBUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ss
IEZyYW1lKiBmcmFtZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1
cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7CiAgICAgc2V0RnJhbWVJZGVu
dGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZyYW1lKTsKICAgICByZXR1cm4gVGltZWxpbmVSZWNvcmRF
bnRyeShXVEY6Om1vdmUocmVjb3JkKSwgV1RGOjptb3ZlKGRhdGEpLCBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCksIHR5cGUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hD
dXJyZW50UmVjb3JkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNv
cmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQordm9pZCBU
aW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZy
YW1lKiBmcmFtZSkKIHsKICAgICBwdXNoQ3VycmVudFJlY29yZChjcmVhdGVSZWNvcmRFbnRyeShX
VEY6Om1vdmUoZGF0YSksIHR5cGUsIGNhcHR1cmVDYWxsU3RhY2ssIGZyYW1lKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y2xlYXJSZWNvcmRTdGFjaygpCit2b2lkIFRpbWVs
aW5lQWdlbnQ6OmNsZWFyUmVjb3JkU3RhY2soKQogewogICAgIG1fcmVjb3JkU3RhY2suY2xlYXIo
KTsKICAgICBtX2lkKys7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6bG9jYWxU
b1BhZ2VRdWFkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3Qm
IHJlY3QsIEZsb2F0UXVhZCogcXVhZCkKK3ZvaWQgVGltZWxpbmVBZ2VudDo6bG9jYWxUb1BhZ2VR
dWFkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3Qs
IEZsb2F0UXVhZCogcXVhZCkKIHsKICAgICBjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJl
bmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICBGbG9hdFF1YWQgYWJzb2x1dGUgPSByZW5k
ZXJlci5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChyZWN0KSk7CkBAIC03MDAsNyArNzAw
LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpsb2NhbFRvUGFnZVF1YWQoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QKICAgICBxdWFkLT5zZXRQNChmcmFtZVZpZXcu
Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChhYnNvbHV0ZS5wNCgpKSkpOwogfQog
Ci1QYWdlKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpwYWdlKCkKK1BhZ2UqIFRpbWVsaW5lQWdl
bnQ6OnBhZ2UoKQogewogICAgIHJldHVybiBtX3BhZ2VBZ2VudCA/IG1fcGFnZUFnZW50LT5wYWdl
KCkgOiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JUaW1lbGluZUFnZW50LmgKaW5kZXggNDVhZjYzNTk5ZjhjZTdkMzVmNzE5MTFkYTg5MTYyN2Qw
Y2Y5ZWM3YS4uZjJkNzI0MzdlNzQzNjg0Mzk2NTRjYjM3YmYzZjIxODUzYWNhOGQzMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBA
IC01MiwxNSArNTIsMTUgQEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBGbG9hdFF1YWQ7CiBjbGFzcyBG
cmFtZTsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKLWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsK
IGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgVVJMOwog
Y2xhc3MgUGFnZTsKK2NsYXNzIFBhZ2VBZ2VudDsKIGNsYXNzIFBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFJl
c291cmNlUmVzcG9uc2U7CitjbGFzcyBVUkw7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwogCkBAIC0xMDUsMTcgKzEwNSwxNyBAQCBlbnVtIGNsYXNzIFRpbWVsaW5lUmVjb3JkVHlwZSB7
CiAgICAgV2ViU29ja2V0RGVzdHJveQogfTsKIAotY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCBmaW5hbAotICAgIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZQorY2xhc3MgVGltZWxpbmVB
Z2VudCBmaW5hbAorICAgIDogcHVibGljIFdlYkFnZW50QmFzZQogICAgICwgcHVibGljIEluc3Bl
Y3Rvcjo6VGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKICAgICAsIHB1YmxpYyBJbnNw
ZWN0b3I6OlNjcmlwdERlYnVnTGlzdGVuZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElu
c3BlY3RvclRpbWVsaW5lQWdlbnQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbWVsaW5l
QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGVudW0g
SW5zcGVjdG9yVHlwZSB7IFBhZ2VJbnNwZWN0b3IsIFdvcmtlckluc3BlY3RvciB9OwogCi0gICAg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFn
ZUFnZW50KiwgSW5zcGVjdG9yVHlwZSwgSW5zcGVjdG9yQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+
SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOworICAgIFRpbWVsaW5lQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIFBhZ2VBZ2VudCosIEluc3BlY3RvclR5cGUsIEluc3BlY3RvckNsaWVudCopOwor
ICAgIHZpcnR1YWwgflRpbWVsaW5lQWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0
b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3Zl
cnJpZGU7CkBAIC0yMjYsNyArMjI2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvY2FsVG9QYWdl
UXVhZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBMYXlvdXRSZWN0JiwgRmxvYXRRdWFkKik7
CiAgICAgUGFnZSogcGFnZSgpOwogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2Vu
dDsKKyAgICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIFBhZ2VTY3JpcHREZWJ1Z1NlcnZl
ciogbV9zY3JpcHREZWJ1Z1NlcnZlcjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6
OlRpbWVsaW5lRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJBZ2VudEJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJBZ2VudEJhc2UuaAppbmRleCBk
ZmNjNGE4NDUzYmEyMDdmYjEzZDc2OTkzOThiYTc4ZmZlYTJlZjVjLi5hODg2NjUyYTRhNmM2NjU2
OTIxMTM5MGU3Y2VlYWI1YTYyMDZlNzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yV2ViQWdlbnRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvcldlYkFnZW50QmFzZS5oCkBAIC0zNSwxNyArMzUsMTcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogCi1jbGFzcyBJbnNwZWN0
b3JBZ2VudEJhc2UgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudEJhc2UgeworY2xh
c3MgV2ViQWdlbnRCYXNlIDogcHVibGljIEluc3BlY3Rvcjo6QWdlbnRCYXNlIHsKIHByb3RlY3Rl
ZDoKLSAgICBJbnNwZWN0b3JBZ2VudEJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQotICAgICAgICA6IEluc3BlY3Rvcjo6SW5z
cGVjdG9yQWdlbnRCYXNlKG5hbWUpCisgICAgV2ViQWdlbnRCYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKKyAgICAgICAgOiBJ
bnNwZWN0b3I6OkFnZW50QmFzZShuYW1lKQogICAgICAgICAsIG1faW5zdHJ1bWVudGluZ0FnZW50
cyhpbnN0cnVtZW50aW5nQWdlbnRzKQogICAgIHsKICAgICB9CiAKICAgICBJbnN0cnVtZW50aW5n
QWdlbnRzKiBtX2luc3RydW1lbnRpbmdBZ2VudHM7CiB9OwotICAgIAorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JXZWJBZ2VudEJhc2VfaCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3Bw
CmluZGV4IGQ4NGJiMDU5YmZkYmMwNTMyMjM3YTQ0YzI2NDhhYThhYjUzOTRlMzEuLjgyM2NmZjg4
ZWQ0NzliM2I2YTc3NzllNzc3NzgyZjhmOTgxNmFhNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcApAQCAtNDMsNyArNDMsNyBAQCB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEluc3BlY3RvcldvcmtlckFnZW50OjpXb3JrZXJGcm9udGVuZENoYW5uZWwgOiBwdWJsaWMgV29y
a2VyR2xvYmFsU2NvcGVQcm94eTo6UGFnZUluc3BlY3RvciB7CitjbGFzcyBXb3JrZXJBZ2VudDo6
V29ya2VyRnJvbnRlbmRDaGFubmVsIDogcHVibGljIFdvcmtlckdsb2JhbFNjb3BlUHJveHk6OlBh
Z2VJbnNwZWN0b3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IGV4cGxpY2l0IFdvcmtlckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3I6OldvcmtlckZyb250ZW5k
RGlzcGF0Y2hlciogZnJvbnRlbmREaXNwYXRjaGVyLCBXb3JrZXJHbG9iYWxTY29wZVByb3h5KiBw
cm94eSkKQEAgLTk5LDI4ICs5OSwyOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbnQgc19uZXh0
SWQ7CiB9OwogCi1pbnQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OldvcmtlckZyb250ZW5kQ2hhbm5l
bDo6c19uZXh0SWQgPSAxOworaW50IFdvcmtlckFnZW50OjpXb3JrZXJGcm9udGVuZENoYW5uZWw6
OnNfbmV4dElkID0gMTsKIAotSW5zcGVjdG9yV29ya2VyQWdlbnQ6Okluc3BlY3RvcldvcmtlckFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCi0gICAgOiBJbnNw
ZWN0b3JBZ2VudEJhc2UoQVNDSUlMaXRlcmFsKCJXb3JrZXIiKSwgaW5zdHJ1bWVudGluZ0FnZW50
cykKK1dvcmtlckFnZW50OjpXb3JrZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzKQorICAgIDogV2ViQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiV29ya2VyIiks
IGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX2VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3No
b3VsZFBhdXNlRGVkaWNhdGVkV29ya2VyT25TdGFydChmYWxzZSkKIHsKLSAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMtPnNldEluc3BlY3RvcldvcmtlckFnZW50KHRoaXMpOworICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy0+c2V0V29ya2VyQWdlbnQodGhpcyk7CiB9CiAKLUluc3BlY3Rvcldvcmtl
ckFnZW50Ojp+SW5zcGVjdG9yV29ya2VyQWdlbnQoKQorV29ya2VyQWdlbnQ6On5Xb3JrZXJBZ2Vu
dCgpCiB7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JXb3JrZXJBZ2Vu
dChudWxscHRyKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldFdvcmtlckFnZW50KG51
bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCit2b2lkIFdv
cmtlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPEluc3BlY3Rvcjo6V29ya2VyRnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENo
YW5uZWwpOwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3I6OldvcmtlckJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCi12b2lk
IEluc3BlY3RvcldvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCit2b2lkIFdvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9z
aG91bGRQYXVzZURlZGljYXRlZFdvcmtlck9uU3RhcnQgPSBmYWxzZTsKICAgICBFcnJvclN0cmlu
ZyB1bnVzZWQ7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmUKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2Vy
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCit2b2lkIFdvcmtlckFnZW50OjplbmFibGUoRXJy
b3JTdHJpbmcmKQogewogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAgICAgaWYgKCFtX2Zyb250ZW5k
RGlzcGF0Y2hlcikKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNG
b3JFeGlzdGluZ1dvcmtlcnMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGlz
YWJsZShFcnJvclN0cmluZyYpCit2b2lkIFdvcmtlckFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
JikKIHsKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKICAgICBpZiAoIW1fZnJvbnRlbmREaXNwYXRj
aGVyKQpAQCAtMTQ4LDEyICsxNDgsMTIgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGlz
YWJsZShFcnJvclN0cmluZyYpCiAgICAgZGVzdHJveVdvcmtlckZyb250ZW5kQ2hhbm5lbHMoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6Y2FuSW5zcGVjdFdvcmtlcnMoRXJyb3JT
dHJpbmcmLCBib29sKiByZXN1bHQpCit2b2lkIFdvcmtlckFnZW50OjpjYW5JbnNwZWN0V29ya2Vy
cyhFcnJvclN0cmluZyYsIGJvb2wqIHJlc3VsdCkKIHsKICAgICAqcmVzdWx0ID0gdHJ1ZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6Y29ubmVjdFRvV29ya2VyKEVycm9yU3RyaW5n
JiBlcnJvciwgaW50IHdvcmtlcklkKQordm9pZCBXb3JrZXJBZ2VudDo6Y29ubmVjdFRvV29ya2Vy
KEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklkKQogewogICAgIFdvcmtlckZyb250ZW5k
Q2hhbm5lbCogY2hhbm5lbCA9IG1faWRUb0NoYW5uZWwuZ2V0KHdvcmtlcklkKTsKICAgICBpZiAo
Y2hhbm5lbCkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojpj
b25uZWN0VG9Xb3JrZXIoRXJyb3JTdHJpbmcmIGVycm9yLCBpbnQgd29ya2VySWQpCiAgICAgICAg
IGVycm9yID0gQVNDSUlMaXRlcmFsKCJXb3JrZXIgaXMgZ29uZSIpOwogfQogCi12b2lkIEluc3Bl
Y3RvcldvcmtlckFnZW50OjpkaXNjb25uZWN0RnJvbVdvcmtlcihFcnJvclN0cmluZyYgZXJyb3Is
IGludCB3b3JrZXJJZCkKK3ZvaWQgV29ya2VyQWdlbnQ6OmRpc2Nvbm5lY3RGcm9tV29ya2VyKEVy
cm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklkKQogewogICAgIFdvcmtlckZyb250ZW5kQ2hh
bm5lbCogY2hhbm5lbCA9IG1faWRUb0NoYW5uZWwuZ2V0KHdvcmtlcklkKTsKICAgICBpZiAoY2hh
bm5lbCkKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkaXNj
b25uZWN0RnJvbVdvcmtlcihFcnJvclN0cmluZyYgZXJyb3IsIGludCB3b3JrZXJJZAogICAgICAg
ICBlcnJvciA9IEFTQ0lJTGl0ZXJhbCgiV29ya2VyIGlzIGdvbmUiKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYgZXJyb3Is
IGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQor
dm9pZCBXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYgZXJyb3Is
IGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQog
ewogICAgIFdvcmtlckZyb250ZW5kQ2hhbm5lbCogY2hhbm5lbCA9IG1faWRUb0NoYW5uZWwuZ2V0
KHdvcmtlcklkKTsKICAgICBpZiAoY2hhbm5lbCkKQEAgLTE4MCwyNCArMTgwLDI0IEBAIHZvaWQg
SW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9Xb3JrZXIoRXJyb3JTdHJpbmcmIGVy
cm9yLCBpbnQgd29ya2VySWQsCiAgICAgICAgIGVycm9yID0gQVNDSUlMaXRlcmFsKCJXb3JrZXIg
aXMgZ29uZSIpOwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpzZXRBdXRvY29ubmVj
dFRvV29ya2VycyhFcnJvclN0cmluZyYsIGJvb2wgdmFsdWUpCit2b2lkIFdvcmtlckFnZW50Ojpz
ZXRBdXRvY29ubmVjdFRvV29ya2VycyhFcnJvclN0cmluZyYsIGJvb2wgdmFsdWUpCiB7CiAgICAg
bV9zaG91bGRQYXVzZURlZGljYXRlZFdvcmtlck9uU3RhcnQgPSB2YWx1ZTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JXb3JrZXJBZ2VudDo6c2hvdWxkUGF1c2VEZWRpY2F0ZWRXb3JrZXJPblN0YXJ0KCkg
Y29uc3QKK2Jvb2wgV29ya2VyQWdlbnQ6OnNob3VsZFBhdXNlRGVkaWNhdGVkV29ya2VyT25TdGFy
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2hvdWxkUGF1c2VEZWRpY2F0ZWRXb3JrZXJPblN0
YXJ0OwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkaWRTdGFydFdvcmtlckdsb2Jh
bFNjb3BlKFdvcmtlckdsb2JhbFNjb3BlUHJveHkqIHdvcmtlckdsb2JhbFNjb3BlUHJveHksIGNv
bnN0IFVSTCYgdXJsKQordm9pZCBXb3JrZXJBZ2VudDo6ZGlkU3RhcnRXb3JrZXJHbG9iYWxTY29w
ZShXb3JrZXJHbG9iYWxTY29wZVByb3h5KiB3b3JrZXJHbG9iYWxTY29wZVByb3h5LCBjb25zdCBV
UkwmIHVybCkKIHsKICAgICBtX2RlZGljYXRlZFdvcmtlcnMuc2V0KHdvcmtlckdsb2JhbFNjb3Bl
UHJveHksIHVybC5zdHJpbmcoKSk7CiAgICAgaWYgKG1fZnJvbnRlbmREaXNwYXRjaGVyICYmIG1f
ZW5hYmxlZCkKICAgICAgICAgY3JlYXRlV29ya2VyRnJvbnRlbmRDaGFubmVsKHdvcmtlckdsb2Jh
bFNjb3BlUHJveHksIHVybC5zdHJpbmcoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdl
bnQ6Ondvcmtlckdsb2JhbFNjb3BlVGVybWluYXRlZChXb3JrZXJHbG9iYWxTY29wZVByb3h5KiBw
cm94eSkKK3ZvaWQgV29ya2VyQWdlbnQ6Ondvcmtlckdsb2JhbFNjb3BlVGVybWluYXRlZChXb3Jr
ZXJHbG9iYWxTY29wZVByb3h5KiBwcm94eSkKIHsKICAgICBtX2RlZGljYXRlZFdvcmtlcnMucmVt
b3ZlKHByb3h5KTsKICAgICBmb3IgKFdvcmtlckNoYW5uZWxzOjppdGVyYXRvciBpdCA9IG1faWRU
b0NoYW5uZWwuYmVnaW4oKTsgaXQgIT0gbV9pZFRvQ2hhbm5lbC5lbmQoKTsgKytpdCkgewpAQCAt
MjEwLDEzICsyMTAsMTMgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d29ya2VyR2xvYmFs
U2NvcGVUZXJtaW5hdGVkKFdvcmtlckdsb2JhbFNjb3BlUHJveHkqIHAKICAgICB9CiB9CiAKLXZv
aWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZVdvcmtlckZyb250ZW5kQ2hhbm5lbHNGb3JF
eGlzdGluZ1dvcmtlcnMoKQordm9pZCBXb3JrZXJBZ2VudDo6Y3JlYXRlV29ya2VyRnJvbnRlbmRD
aGFubmVsc0ZvckV4aXN0aW5nV29ya2VycygpCiB7CiAgICAgZm9yIChEZWRpY2F0ZWRXb3JrZXJz
OjppdGVyYXRvciBpdCA9IG1fZGVkaWNhdGVkV29ya2Vycy5iZWdpbigpOyBpdCAhPSBtX2RlZGlj
YXRlZFdvcmtlcnMuZW5kKCk7ICsraXQpCiAgICAgICAgIGNyZWF0ZVdvcmtlckZyb250ZW5kQ2hh
bm5lbChpdC0+a2V5LCBpdC0+dmFsdWUpOwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50
OjpkZXN0cm95V29ya2VyRnJvbnRlbmRDaGFubmVscygpCit2b2lkIFdvcmtlckFnZW50OjpkZXN0
cm95V29ya2VyRnJvbnRlbmRDaGFubmVscygpCiB7CiAgICAgZm9yIChXb3JrZXJDaGFubmVsczo6
aXRlcmF0b3IgaXQgPSBtX2lkVG9DaGFubmVsLmJlZ2luKCk7IGl0ICE9IG1faWRUb0NoYW5uZWwu
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgaXQtPnZhbHVlLT5kaXNjb25uZWN0RnJvbVdvcmtlckds
b2JhbFNjb3BlKCk7CkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2Vu
dDo6ZGVzdHJveVdvcmtlckZyb250ZW5kQ2hhbm5lbHMoKQogICAgIG1faWRUb0NoYW5uZWwuY2xl
YXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6Y3JlYXRlV29ya2VyRnJvbnRl
bmRDaGFubmVsKFdvcmtlckdsb2JhbFNjb3BlUHJveHkqIHdvcmtlckdsb2JhbFNjb3BlUHJveHks
IGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBXb3JrZXJBZ2VudDo6Y3JlYXRlV29ya2VyRnJvbnRl
bmRDaGFubmVsKFdvcmtlckdsb2JhbFNjb3BlUHJveHkqIHdvcmtlckdsb2JhbFNjb3BlUHJveHks
IGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIFdvcmtlckZyb250ZW5kQ2hhbm5lbCogY2hhbm5l
bCA9IG5ldyBXb3JrZXJGcm9udGVuZENoYW5uZWwobV9mcm9udGVuZERpc3BhdGNoZXIuZ2V0KCks
IHdvcmtlckdsb2JhbFNjb3BlUHJveHkpOwogICAgIG1faWRUb0NoYW5uZWwuc2V0KGNoYW5uZWwt
PmlkKCksIGNoYW5uZWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvcldvcmtlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
V29ya2VyQWdlbnQuaAppbmRleCA0ZTczY2ZiOTE3MGYyMzQwYmIwNDg5YzZkOTFhZjNjOWYzOThh
NTkyLi4xNmRhODA2OTg4OWEwYjc3ZjQyNGIzOGJkYzM2NGY3YjhiM2ViOGJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaApAQCAtNDgsMTEg
KzQ4LDExIEBAIGNsYXNzIFdvcmtlckdsb2JhbFNjb3BlUHJveHk7CiAKIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JXb3JrZXJBZ2VudCBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OldvcmtlckJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CitjbGFzcyBXb3JrZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJBZ2Vu
dEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OldvcmtlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSW5z
cGVjdG9yV29ya2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyopOwotICAgIHZpcnR1YWwgfklu
c3BlY3RvcldvcmtlckFnZW50KCk7CisgICAgZXhwbGljaXQgV29ya2VyQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyopOworICAgIHZpcnR1YWwgfldvcmtlckFnZW50KCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3RydW1lbnRpbmdBZ2VudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Ry
dW1lbnRpbmdBZ2VudHMuY3BwCmluZGV4IGVjMDQ2NDIxYmYyNmRkNzhmNDRmYzZkNGNlNjZkMDlm
YjYyNTVkZGMuLmQwMDhiNzkzOTI0OWU2OWQ4NDRkYzU3OWY0ZjFiOGViOWYwNTcwMDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5jcHAKQEAg
LTQ1LDUyICs0NSw1MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBJbnN0cnVtZW50aW5nQWdlbnRz
OjpJbnN0cnVtZW50aW5nQWdlbnRzKEluc3BlY3RvckVudmlyb25tZW50JiBlbnZpcm9ubWVudCkK
ICAgICA6IG1fZW52aXJvbm1lbnQoZW52aXJvbm1lbnQpCiAgICAgLCBtX2luc3BlY3RvckFnZW50
KG51bGxwdHIpCi0gICAgLCBtX2luc3BlY3RvclBhZ2VBZ2VudChudWxscHRyKQotICAgICwgbV9p
bnNwZWN0b3JDU1NBZ2VudChudWxscHRyKQotICAgICwgbV9pbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dChudWxscHRyKQorICAgICwgbV9wYWdlQWdlbnQobnVsbHB0cikKKyAgICAsIG1fY3NzQWdlbnQo
bnVsbHB0cikKKyAgICAsIG1fbGF5ZXJUcmVlQWdlbnQobnVsbHB0cikKICAgICAsIG1fd2ViQ29u
c29sZUFnZW50KG51bGxwdHIpCi0gICAgLCBtX2luc3BlY3RvckRPTUFnZW50KG51bGxwdHIpCi0g
ICAgLCBtX2luc3BlY3RvclJlc291cmNlQWdlbnQobnVsbHB0cikKKyAgICAsIG1fZG9tQWdlbnQo
bnVsbHB0cikKKyAgICAsIG1fcmVzb3VyY2VBZ2VudChudWxscHRyKQogICAgICwgbV9wYWdlUnVu
dGltZUFnZW50KG51bGxwdHIpCiAgICAgLCBtX3dvcmtlclJ1bnRpbWVBZ2VudChudWxscHRyKQot
ICAgICwgbV9pbnNwZWN0b3JUaW1lbGluZUFnZW50KG51bGxwdHIpCi0gICAgLCBtX3BlcnNpc3Rl
bnRJbnNwZWN0b3JUaW1lbGluZUFnZW50KG51bGxwdHIpCi0gICAgLCBtX2luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudChudWxscHRyKQorICAgICwgbV90aW1lbGluZUFnZW50KG51bGxwdHIpCisgICAg
LCBtX3BlcnNpc3RlbnRUaW1lbGluZUFnZW50KG51bGxwdHIpCisgICAgLCBtX2RvbVN0b3JhZ2VB
Z2VudChudWxscHRyKQogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgICwgbV9pbnNwZWN0b3JS
ZXBsYXlBZ2VudChudWxscHRyKQorICAgICwgbV9yZXBsYXlBZ2VudChudWxscHRyKQogI2VuZGlm
Ci0gICAgLCBtX2luc3BlY3RvckRhdGFiYXNlQWdlbnQobnVsbHB0cikKLSAgICAsIG1faW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50KG51bGxwdHIpCi0gICAgLCBtX2luc3BlY3RvckRlYnVn
Z2VyQWdlbnQobnVsbHB0cikKKyAgICAsIG1fZGF0YWJhc2VBZ2VudChudWxscHRyKQorICAgICwg
bV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQobnVsbHB0cikKKyAgICAsIG1fZGVidWdnZXJBZ2VudChu
dWxscHRyKQogICAgICwgbV9wYWdlRGVidWdnZXJBZ2VudChudWxscHRyKQotICAgICwgbV9pbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50KG51bGxwdHIpCi0gICAgLCBtX2luc3BlY3RvcldvcmtlckFn
ZW50KG51bGxwdHIpCisgICAgLCBtX2RvbURlYnVnZ2VyQWdlbnQobnVsbHB0cikKKyAgICAsIG1f
d29ya2VyQWdlbnQobnVsbHB0cikKIHsKIH0KIAogdm9pZCBJbnN0cnVtZW50aW5nQWdlbnRzOjpy
ZXNldCgpCiB7CiAgICAgbV9pbnNwZWN0b3JBZ2VudCA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0
b3JQYWdlQWdlbnQgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yQ1NTQWdlbnQgPSBudWxscHRy
OwotICAgIG1faW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQgPSBudWxscHRyOworICAgIG1fcGFnZUFn
ZW50ID0gbnVsbHB0cjsKKyAgICBtX2Nzc0FnZW50ID0gbnVsbHB0cjsKKyAgICBtX2xheWVyVHJl
ZUFnZW50ID0gbnVsbHB0cjsKICAgICBtX3dlYkNvbnNvbGVBZ2VudCA9IG51bGxwdHI7Ci0gICAg
bV9pbnNwZWN0b3JET01BZ2VudCA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JSZXNvdXJjZUFn
ZW50ID0gbnVsbHB0cjsKKyAgICBtX2RvbUFnZW50ID0gbnVsbHB0cjsKKyAgICBtX3Jlc291cmNl
QWdlbnQgPSBudWxscHRyOwogICAgIG1fcGFnZVJ1bnRpbWVBZ2VudCA9IG51bGxwdHI7CiAgICAg
bV93b3JrZXJSdW50aW1lQWdlbnQgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yVGltZWxpbmVB
Z2VudCA9IG51bGxwdHI7Ci0gICAgbV9wZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxpbmVBZ2VudCA9
IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JET01TdG9yYWdlQWdlbnQgPSBudWxscHRyOworICAg
IG1fdGltZWxpbmVBZ2VudCA9IG51bGxwdHI7CisgICAgbV9wZXJzaXN0ZW50VGltZWxpbmVBZ2Vu
dCA9IG51bGxwdHI7CisgICAgbV9kb21TdG9yYWdlQWdlbnQgPSBudWxscHRyOwogI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQotICAgIG1faW5zcGVjdG9yUmVwbGF5QWdlbnQgPSBudWxscHRyOworICAg
IG1fcmVwbGF5QWdlbnQgPSBudWxscHRyOwogI2VuZGlmCi0gICAgbV9pbnNwZWN0b3JEYXRhYmFz
ZUFnZW50ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9
IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JEZWJ1Z2dlckFnZW50ID0gbnVsbHB0cjsKKyAgICBt
X2RhdGFiYXNlQWdlbnQgPSBudWxscHRyOworICAgIG1fYXBwbGljYXRpb25DYWNoZUFnZW50ID0g
bnVsbHB0cjsKKyAgICBtX2RlYnVnZ2VyQWdlbnQgPSBudWxscHRyOwogICAgIG1fcGFnZURlYnVn
Z2VyQWdlbnQgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCA9IG51
bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JXb3JrZXJBZ2VudCA9IG51bGxwdHI7CisgICAgbV9kb21E
ZWJ1Z2dlckFnZW50ID0gbnVsbHB0cjsKKyAgICBtX3dvcmtlckFnZW50ID0gbnVsbHB0cjsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnN0cnVtZW50aW5nQWdlbnRzLmgKaW5kZXggZjkxYTY4NTllNDc3NWRjMDQ3ODRmYTMxNzQ4MmIz
OGU4ZDk5ZGE2NS4uY2I5YTJhYjY2ODJhMDVkODc5OTQ4M2NmMjA0ODYxZDdlZGU2MWIzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oCkBAIC0z
OSwyOCArMzksMjggQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKK2NsYXNzIERlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBZ2VudDsK
LWNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OwotY2xhc3MgSW5zcGVjdG9y
Q1NTQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKLWNsYXNzIEluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ7Ci1jbGFzcyBJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50OwotY2xhc3MgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ7Ci1jbGFz
cyBJbnNwZWN0b3JQYWdlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OwotY2xh
c3MgSW5zcGVjdG9yUmVwbGF5QWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50Owot
Y2xhc3MgSW5zcGVjdG9yV29ya2VyQWdlbnQ7CitjbGFzcyBBcHBsaWNhdGlvbkNhY2hlQWdlbnQ7
CitjbGFzcyBDU1NBZ2VudDsKK2NsYXNzIERhdGFiYXNlQWdlbnQ7CitjbGFzcyBET01BZ2VudDsK
K2NsYXNzIERPTURlYnVnZ2VyQWdlbnQ7CitjbGFzcyBET01TdG9yYWdlQWdlbnQ7CitjbGFzcyBM
YXllclRyZWVBZ2VudDsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQYWdlQWdlbnQ7CiBjbGFzcyBQYWdl
RGVidWdnZXJBZ2VudDsKIGNsYXNzIFBhZ2VSdW50aW1lQWdlbnQ7CitjbGFzcyBSZXBsYXlBZ2Vu
dDsKK2NsYXNzIFJlc291cmNlQWdlbnQ7CitjbGFzcyBUaW1lbGluZUFnZW50OwogY2xhc3MgV2Vi
Q29uc29sZUFnZW50OworY2xhc3MgV29ya2VyQWdlbnQ7CiBjbGFzcyBXb3JrZXJHbG9iYWxTY29w
ZTsKIGNsYXNzIFdvcmtlclJ1bnRpbWVBZ2VudDsKIApAQCAtNjgsOSArNjgsOSBAQCBjbGFzcyBJ
bnN0cnVtZW50aW5nQWdlbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zdHJ1bWVudGluZ0FnZW50
cz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3RydW1lbnRpbmdBZ2VudHMpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3RydW1lbnRpbmdBZ2VudHM+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckVudmlyb25t
ZW50JiBlbnZpcm9ubWVudCkKKyAgICBzdGF0aWMgUmVmPEluc3RydW1lbnRpbmdBZ2VudHM+IGNy
ZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckVudmlyb25tZW50JiBlbnZpcm9ubWVudCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zdHJ1bWVudGluZ0FnZW50cyhlbnZpcm9u
bWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnN0cnVtZW50aW5nQWdlbnRz
KGVudmlyb25tZW50KSk7CiAgICAgfQogICAgIH5JbnN0cnVtZW50aW5nQWdlbnRzKCkgeyB9CiAg
ICAgdm9pZCByZXNldCgpOwpAQCAtODAsMjAgKzgwLDIwIEBAIHB1YmxpYzoKICAgICBJbnNwZWN0
b3I6Okluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5z
cGVjdG9yQWdlbnQ7IH0KICAgICB2b2lkIHNldEluc3BlY3RvckFnZW50KEluc3BlY3Rvcjo6SW5z
cGVjdG9yQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yQWdlbnQgPSBhZ2VudDsgfQogCi0gICAg
SW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQoKSBjb25zdCB7IHJldHVybiBt
X2luc3BlY3RvclBhZ2VBZ2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yUGFnZUFnZW50KElu
c3BlY3RvclBhZ2VBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JQYWdlQWdlbnQgPSBhZ2VudDsg
fQorICAgIFBhZ2VBZ2VudCogcGFnZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlQWdlbnQ7
IH0KKyAgICB2b2lkIHNldFBhZ2VBZ2VudChQYWdlQWdlbnQqIGFnZW50KSB7IG1fcGFnZUFnZW50
ID0gYWdlbnQ7IH0KIAotICAgIEluc3BlY3RvckNTU0FnZW50KiBpbnNwZWN0b3JDU1NBZ2VudCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTQWdlbnQ7IH0KLSAgICB2b2lkIHNldEluc3Bl
Y3RvckNTU0FnZW50KEluc3BlY3RvckNTU0FnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvckNTU0Fn
ZW50ID0gYWdlbnQ7IH0KKyAgICBDU1NBZ2VudCogY3NzQWdlbnQoKSBjb25zdCB7IHJldHVybiBt
X2Nzc0FnZW50OyB9CisgICAgdm9pZCBzZXRDU1NBZ2VudChDU1NBZ2VudCogYWdlbnQpIHsgbV9j
c3NBZ2VudCA9IGFnZW50OyB9CiAKICAgICBXZWJDb25zb2xlQWdlbnQqIHdlYkNvbnNvbGVBZ2Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViQ29uc29sZUFnZW50OyB9CiAgICAgdm9pZCBzZXRXZWJD
b25zb2xlQWdlbnQoV2ViQ29uc29sZUFnZW50KiBhZ2VudCkgeyBtX3dlYkNvbnNvbGVBZ2VudCA9
IGFnZW50OyB9CiAKLSAgICBJbnNwZWN0b3JET01BZ2VudCogaW5zcGVjdG9yRE9NQWdlbnQoKSBj
b25zdCB7IHJldHVybiBtX2luc3BlY3RvckRPTUFnZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0
b3JET01BZ2VudChJbnNwZWN0b3JET01BZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JET01BZ2Vu
dCA9IGFnZW50OyB9CisgICAgRE9NQWdlbnQqIGRvbUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9k
b21BZ2VudDsgfQorICAgIHZvaWQgc2V0RE9NQWdlbnQoRE9NQWdlbnQqIGFnZW50KSB7IG1fZG9t
QWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogaW5zcGVjdG9y
UmVzb3VyY2VBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUmVzb3VyY2VBZ2VudDsg
fQotICAgIHZvaWQgc2V0SW5zcGVjdG9yUmVzb3VyY2VBZ2VudChJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvclJlc291cmNlQWdlbnQgPSBhZ2VudDsgfQorICAgIFJl
c291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlQWdl
bnQ7IH0KKyAgICB2b2lkIHNldFJlc291cmNlQWdlbnQoUmVzb3VyY2VBZ2VudCogYWdlbnQpIHsg
bV9yZXNvdXJjZUFnZW50ID0gYWdlbnQ7IH0KIAogICAgIFBhZ2VSdW50aW1lQWdlbnQqIHBhZ2VS
dW50aW1lQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VSdW50aW1lQWdlbnQ7IH0KICAgICB2
b2lkIHNldFBhZ2VSdW50aW1lQWdlbnQoUGFnZVJ1bnRpbWVBZ2VudCogYWdlbnQpIHsgbV9wYWdl
UnVudGltZUFnZW50ID0gYWdlbnQ7IH0KQEAgLTEwMSw0MCArMTAxLDQwIEBAIHB1YmxpYzoKICAg
ICBXb3JrZXJSdW50aW1lQWdlbnQqIHdvcmtlclJ1bnRpbWVBZ2VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fd29ya2VyUnVudGltZUFnZW50OyB9CiAgICAgdm9pZCBzZXRXb3JrZXJSdW50aW1lQWdlbnQo
V29ya2VyUnVudGltZUFnZW50KiBhZ2VudCkgeyBtX3dvcmtlclJ1bnRpbWVBZ2VudCA9IGFnZW50
OyB9CiAKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiBpbnNwZWN0b3JUaW1lbGluZUFnZW50
KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JUaW1lbGluZUFnZW50OyB9Ci0gICAgdm9pZCBz
ZXRJbnNwZWN0b3JUaW1lbGluZUFnZW50KEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIGFnZW50KSB7
IG1faW5zcGVjdG9yVGltZWxpbmVBZ2VudCA9IGFnZW50OyB9CisgICAgVGltZWxpbmVBZ2VudCog
dGltZWxpbmVBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZWxpbmVBZ2VudDsgfQorICAgIHZv
aWQgc2V0VGltZWxpbmVBZ2VudChUaW1lbGluZUFnZW50KiBhZ2VudCkgeyBtX3RpbWVsaW5lQWdl
bnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogcGVyc2lzdGVudElu
c3BlY3RvclRpbWVsaW5lQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3BlcnNpc3RlbnRJbnNwZWN0
b3JUaW1lbGluZUFnZW50OyB9Ci0gICAgdm9pZCBzZXRQZXJzaXN0ZW50SW5zcGVjdG9yVGltZWxp
bmVBZ2VudChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiBhZ2VudCkgeyBtX3BlcnNpc3RlbnRJbnNw
ZWN0b3JUaW1lbGluZUFnZW50ID0gYWdlbnQ7IH0KKyAgICBUaW1lbGluZUFnZW50KiBwZXJzaXN0
ZW50VGltZWxpbmVBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyc2lzdGVudFRpbWVsaW5lQWdl
bnQ7IH0KKyAgICB2b2lkIHNldFBlcnNpc3RlbnRUaW1lbGluZUFnZW50KFRpbWVsaW5lQWdlbnQq
IGFnZW50KSB7IG1fcGVyc2lzdGVudFRpbWVsaW5lQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50KiBpbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoKSBjb25zdCB7
IHJldHVybiBtX2luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50KEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogYWdlbnQpIHsgbV9p
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQgPSBhZ2VudDsgfQorICAgIERPTVN0b3JhZ2VBZ2VudCog
ZG9tU3RvcmFnZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb21TdG9yYWdlQWdlbnQ7IH0KKyAg
ICB2b2lkIHNldERPTVN0b3JhZ2VBZ2VudChET01TdG9yYWdlQWdlbnQqIGFnZW50KSB7IG1fZG9t
U3RvcmFnZUFnZW50ID0gYWdlbnQ7IH0KIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIElu
c3BlY3RvclJlcGxheUFnZW50KiBpbnNwZWN0b3JSZXBsYXlBZ2VudCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zcGVjdG9yUmVwbGF5QWdlbnQ7IH0KLSAgICB2b2lkIHNldEluc3BlY3RvclJlcGxheUFn
ZW50KEluc3BlY3RvclJlcGxheUFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvclJlcGxheUFnZW50
ID0gYWdlbnQ7IH0KKyAgICBSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQoKSBjb25zdCB7IHJldHVy
biBtX3JlcGxheUFnZW50OyB9CisgICAgdm9pZCBzZXRSZXBsYXlBZ2VudChSZXBsYXlBZ2VudCog
YWdlbnQpIHsgbV9yZXBsYXlBZ2VudCA9IGFnZW50OyB9CiAjZW5kaWYKIAotICAgIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQqIGluc3BlY3RvckRhdGFiYXNlQWdlbnQoKSBjb25zdCB7IHJldHVybiBt
X2luc3BlY3RvckRhdGFiYXNlQWdlbnQ7IH0KLSAgICB2b2lkIHNldEluc3BlY3RvckRhdGFiYXNl
QWdlbnQoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JEYXRhYmFz
ZUFnZW50ID0gYWdlbnQ7IH0KKyAgICBEYXRhYmFzZUFnZW50KiBkYXRhYmFzZUFnZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhYmFzZUFnZW50OyB9CisgICAgdm9pZCBzZXREYXRhYmFzZUFnZW50
KERhdGFiYXNlQWdlbnQqIGFnZW50KSB7IG1fZGF0YWJhc2VBZ2VudCA9IGFnZW50OyB9CiAKLSAg
ICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIGluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudCA9IGFnZW50OyB9CisgICAgQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlv
bkNhY2hlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudDsgfQor
ICAgIHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZUFnZW50KEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCog
YWdlbnQpIHsgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVj
dG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBpbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkgY29u
c3QgeyByZXR1cm4gbV9pbnNwZWN0b3JEZWJ1Z2dlckFnZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogYWdl
bnQpIHsgbV9pbnNwZWN0b3JEZWJ1Z2dlckFnZW50ID0gYWdlbnQ7IH0KKyAgICBJbnNwZWN0b3I6
OkRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2Vy
QWdlbnQ7IH0KKyAgICB2b2lkIHNldERlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yOjpEZWJ1Z2dlckFn
ZW50KiBhZ2VudCkgeyBtX2RlYnVnZ2VyQWdlbnQgPSBhZ2VudDsgfQogCiAgICAgUGFnZURlYnVn
Z2VyQWdlbnQqIHBhZ2VEZWJ1Z2dlckFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlRGVidWdn
ZXJBZ2VudDsgfQogICAgIHZvaWQgc2V0UGFnZURlYnVnZ2VyQWdlbnQoUGFnZURlYnVnZ2VyQWdl
bnQqIGFnZW50KSB7IG1fcGFnZURlYnVnZ2VyQWdlbnQgPSBhZ2VudDsgfQogCi0gICAgSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudCogaW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBhZ2VudCkgeyBt
X2luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQgPSBhZ2VudDsgfQorICAgIERPTURlYnVnZ2VyQWdl
bnQqIGRvbURlYnVnZ2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2RvbURlYnVnZ2VyQWdlbnQ7
IH0KKyAgICB2b2lkIHNldERPTURlYnVnZ2VyQWdlbnQoRE9NRGVidWdnZXJBZ2VudCogYWdlbnQp
IHsgbV9kb21EZWJ1Z2dlckFnZW50ID0gYWdlbnQ7IH0KIAotICAgIEluc3BlY3RvcldvcmtlckFn
ZW50KiBpbnNwZWN0b3JXb3JrZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yV29y
a2VyQWdlbnQ7IH0KLSAgICB2b2lkIHNldEluc3BlY3RvcldvcmtlckFnZW50KEluc3BlY3Rvcldv
cmtlckFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvcldvcmtlckFnZW50ID0gYWdlbnQ7IH0KKyAg
ICBXb3JrZXJBZ2VudCogd29ya2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlckFnZW50
OyB9CisgICAgdm9pZCBzZXRXb3JrZXJBZ2VudChXb3JrZXJBZ2VudCogYWdlbnQpIHsgbV93b3Jr
ZXJBZ2VudCA9IGFnZW50OyB9CiAKLSAgICBJbnNwZWN0b3JMYXllclRyZWVBZ2VudCogaW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckxheWVyVHJlZUFn
ZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JMYXllclRyZWVBZ2VudChJbnNwZWN0b3JMYXll
clRyZWVBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JMYXllclRyZWVBZ2VudCA9IGFnZW50OyB9
CisgICAgTGF5ZXJUcmVlQWdlbnQqIGxheWVyVHJlZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9s
YXllclRyZWVBZ2VudDsgfQorICAgIHZvaWQgc2V0TGF5ZXJUcmVlQWdlbnQoTGF5ZXJUcmVlQWdl
bnQqIGFnZW50KSB7IG1fbGF5ZXJUcmVlQWdlbnQgPSBhZ2VudDsgfQogCiBwcml2YXRlOgogICAg
IEluc3RydW1lbnRpbmdBZ2VudHMoSW5zcGVjdG9yOjpJbnNwZWN0b3JFbnZpcm9ubWVudCYpOwpA
QCAtMTQyLDI2ICsxNDIsMjYgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvckVu
dmlyb25tZW50JiBtX2Vudmlyb25tZW50OwogCiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2Vu
dCogbV9pbnNwZWN0b3JBZ2VudDsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1faW5zcGVjdG9y
UGFnZUFnZW50OwotICAgIEluc3BlY3RvckNTU0FnZW50KiBtX2luc3BlY3RvckNTU0FnZW50Owot
ICAgIEluc3BlY3RvckxheWVyVHJlZUFnZW50KiBtX2luc3BlY3RvckxheWVyVHJlZUFnZW50Owor
ICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CisgICAgQ1NTQWdlbnQqIG1fY3NzQWdlbnQ7Cisg
ICAgTGF5ZXJUcmVlQWdlbnQqIG1fbGF5ZXJUcmVlQWdlbnQ7CiAgICAgV2ViQ29uc29sZUFnZW50
KiBtX3dlYkNvbnNvbGVBZ2VudDsKLSAgICBJbnNwZWN0b3JET01BZ2VudCogbV9pbnNwZWN0b3JE
T01BZ2VudDsKLSAgICBJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBtX2luc3BlY3RvclJlc291cmNl
QWdlbnQ7CisgICAgRE9NQWdlbnQqIG1fZG9tQWdlbnQ7CisgICAgUmVzb3VyY2VBZ2VudCogbV9y
ZXNvdXJjZUFnZW50OwogICAgIFBhZ2VSdW50aW1lQWdlbnQqIG1fcGFnZVJ1bnRpbWVBZ2VudDsK
ICAgICBXb3JrZXJSdW50aW1lQWdlbnQqIG1fd29ya2VyUnVudGltZUFnZW50OwotICAgIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIG1faW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKLSAgICBJbnNwZWN0
b3JUaW1lbGluZUFnZW50KiBtX3BlcnNpc3RlbnRJbnNwZWN0b3JUaW1lbGluZUFnZW50OwotICAg
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogbV9pbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ7Cisg
ICAgVGltZWxpbmVBZ2VudCogbV90aW1lbGluZUFnZW50OworICAgIFRpbWVsaW5lQWdlbnQqIG1f
cGVyc2lzdGVudFRpbWVsaW5lQWdlbnQ7CisgICAgRE9NU3RvcmFnZUFnZW50KiBtX2RvbVN0b3Jh
Z2VBZ2VudDsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dCogbV9pbnNwZWN0b3JSZXBsYXlBZ2VudDsKKyAgICBSZXBsYXlBZ2VudCogbV9yZXBsYXlBZ2Vu
dDsKICNlbmRpZgotICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIG1faW5zcGVjdG9yRGF0YWJh
c2VBZ2VudDsKLSAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIG1faW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50OwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudCogbV9pbnNwZWN0b3JEZWJ1Z2dlckFnZW50OworICAgIERhdGFiYXNlQWdlbnQqIG1fZGF0
YWJhc2VBZ2VudDsKKyAgICBBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIG1fYXBwbGljYXRpb25DYWNo
ZUFnZW50OworICAgIEluc3BlY3Rvcjo6RGVidWdnZXJBZ2VudCogbV9kZWJ1Z2dlckFnZW50Owog
ICAgIFBhZ2VEZWJ1Z2dlckFnZW50KiBtX3BhZ2VEZWJ1Z2dlckFnZW50OwotICAgIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQqIG1faW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDsKLSAgICBJbnNw
ZWN0b3JXb3JrZXJBZ2VudCogbV9pbnNwZWN0b3JXb3JrZXJBZ2VudDsKKyAgICBET01EZWJ1Z2dl
ckFnZW50KiBtX2RvbURlYnVnZ2VyQWdlbnQ7CisgICAgV29ya2VyQWdlbnQqIG1fd29ya2VyQWdl
bnQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29y
a1Jlc291cmNlc0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNv
dXJjZXNEYXRhLmNwcAppbmRleCA0MjUxNmNkNjZmMWRkYmIzNWUxMTBiNjMzMGVkOThlNmE5NjUy
ZmZmLi5kODFkNzllYmZiMDk5MjA2MTQ4ODBmNDZkOTk3Njg4MjRkOGE1ZTZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKQEAgLTUz
LDcgKzUzLDcgQEAgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YTo6UmVzb3VyY2VE
YXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdAogICAgICwgbV9sb2FkZXJJZChsb2Fk
ZXJJZCkKICAgICAsIG1fYmFzZTY0RW5jb2RlZChmYWxzZSkKICAgICAsIG1faXNDb250ZW50RXZp
Y3RlZChmYWxzZSkKLSAgICAsIG1fdHlwZShJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3Vy
Y2UpCisgICAgLCBtX3R5cGUoUGFnZUFnZW50OjpPdGhlclJlc291cmNlKQogICAgICwgbV9jYWNo
ZWRSZXNvdXJjZShudWxscHRyKQogewogfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTmV0d29y
a1Jlc291cmNlc0RhdGE6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluCiAgICAgcmVzb3VyY2VEYXRhLT5zZXRIVFRQU3RhdHVzQ29kZShyZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6c2V0
UmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OlJlc291cmNlVHlwZSB0eXBlKQordm9pZCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6c2V0UmVzb3Vy
Y2VUeXBlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSB0
eXBlKQogewogICAgIFJlc291cmNlRGF0YSogcmVzb3VyY2VEYXRhID0gcmVzb3VyY2VEYXRhRm9y
UmVxdWVzdElkKHJlcXVlc3RJZCk7CiAgICAgaWYgKCFyZXNvdXJjZURhdGEpCkBAIC0xNzAsMTEg
KzE3MCwxMSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpzZXRSZXNvdXJjZVR5cGUoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIEluc3BlY3RvclBhZwogICAgIHJlc291cmNlRGF0YS0+c2V0
VHlwZSh0eXBlKTsKIH0KIAotSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgTmV0d29y
a1Jlc291cmNlc0RhdGE6OnJlc291cmNlVHlwZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKK1Bh
Z2VBZ2VudDo6UmVzb3VyY2VUeXBlIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpyZXNvdXJjZVR5cGUo
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpCiB7CiAgICAgUmVzb3VyY2VEYXRhKiByZXNvdXJjZURh
dGEgPSByZXNvdXJjZURhdGFGb3JSZXF1ZXN0SWQocmVxdWVzdElkKTsKICAgICBpZiAoIXJlc291
cmNlRGF0YSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJj
ZTsKKyAgICAgICAgcmV0dXJuIFBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZTsKICAgICByZXR1cm4g
cmVzb3VyY2VEYXRhLT50eXBlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L05ldHdvcmtSZXNvdXJjZXNEYXRhLmgKaW5kZXggZWRkNzU3OTljY2VkZjFmNzBlYTFhNjY0MTlk
MzBmNTNmNDk2ZWRlMy4uMjViNTA4YWZiOTVhMWZlZDk0ZmI2ZTNlMTRhNmMyZmVkMjViZGIzOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmgK
QEAgLTc1LDggKzc1LDggQEAgcHVibGljOgogICAgICAgICBib29sIGlzQ29udGVudEV2aWN0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzQ29udGVudEV2aWN0ZWQ7IH0KICAgICAgICAgdW5zaWduZWQg
ZXZpY3RDb250ZW50KCk7CiAKLSAgICAgICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICB2b2lkIHNldFR5cGUo
SW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9
CisgICAgICAgIFBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KKyAgICAgICAgdm9pZCBzZXRUeXBlKFBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHR5
cGUpIHsgbV90eXBlID0gdHlwZTsgfQogCiAgICAgICAgIGludCBodHRwU3RhdHVzQ29kZSgpIGNv
bnN0IHsgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7IH0KICAgICAgICAgdm9pZCBzZXRIVFRQU3Rh
dHVzQ29kZShpbnQgaHR0cFN0YXR1c0NvZGUpIHsgbV9odHRwU3RhdHVzQ29kZSA9IGh0dHBTdGF0
dXNDb2RlOyB9CkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogICAgICAgICBib29sIG1fYmFz
ZTY0RW5jb2RlZDsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhQnVmZmVyOwog
ICAgICAgICBib29sIG1faXNDb250ZW50RXZpY3RlZDsKLSAgICAgICAgSW5zcGVjdG9yUGFnZUFn
ZW50OjpSZXNvdXJjZVR5cGUgbV90eXBlOworICAgICAgICBQYWdlQWdlbnQ6OlJlc291cmNlVHlw
ZSBtX3R5cGU7CiAgICAgICAgIGludCBtX2h0dHBTdGF0dXNDb2RlOwogCiAgICAgICAgIFN0cmlu
ZyBtX3RleHRFbmNvZGluZ05hbWU7CkBAIC0xMjMsOCArMTIzLDggQEAgcHVibGljOgogCiAgICAg
dm9pZCByZXNvdXJjZUNyZWF0ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbG9hZGVySWQpOwogICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
Ci0gICAgdm9pZCBzZXRSZXNvdXJjZVR5cGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlKTsKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJl
c291cmNlVHlwZSByZXNvdXJjZVR5cGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpOworICAgIHZv
aWQgc2V0UmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBQYWdlQWdlbnQ6OlJl
c291cmNlVHlwZSk7CisgICAgUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICB2b2lkIHNldFJlc291cmNlQ29udGVudChjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVu
Y29kZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBtYXliZUFkZFJlc291cmNlRGF0YShjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpOwogICAg
IHZvaWQgbWF5YmVEZWNvZGVEYXRhVG9Db250ZW50KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmNwcAppbmRleCBl
NzU5YWE4MDU3Njk4NTBlM2YzOTU5ZmMzNGMwYzVkNjUxMjdkYzE3Li4xMzI4YzdlOTNjN2QwNTQ0
NzRlY2QxYTUzZjhiNmVhYTFjYjA3ZjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvUGFnZUNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1BhZ2VDb25zb2xlQWdlbnQuY3BwCkBAIC00MCwxNSArNDAsMTUgQEAgdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYWdlQ29uc29sZUFnZW50OjpQ
YWdlQ29uc29sZUFnZW50KFdlYkluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLCBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQpCitQYWdlQ29uc29sZUFnZW50OjpQ
YWdlQ29uc29sZUFnZW50KFdlYkluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLCBET01BZ2VudCogZG9tQWdlbnQpCiAgICAgOiBXZWJDb25zb2xlQWdlbnQoaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQotICAgICwgbV9pbnNwZWN0b3JET01BZ2VudChkb21BZ2VudCkKKyAg
ICAsIG1fZG9tQWdlbnQoZG9tQWdlbnQpCiB7CiB9CiAKIHZvaWQgUGFnZUNvbnNvbGVBZ2VudDo6
Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7Ci0gICAgbV9pbnNwZWN0
b3JET01BZ2VudC0+cmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKKyAgICBtX2RvbUFnZW50LT5yZWxl
YXNlRGFuZ2xpbmdOb2RlcygpOwogCiAgICAgV2ViQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2Vz
KGVycm9yU3RyaW5nKTsKIH0KQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0
IEluc3BlY3RhYmxlTm9kZShOb2RlKiBub2RlKSA6IG1fbm9kZShub2RlKSB7IH0KICAgICB2aXJ0
dWFsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGdldChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIG92
ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVBc1Nj
cmlwdFZhbHVlKHN0YXRlLCBtX25vZGUuZ2V0KCkpOworICAgICAgICByZXR1cm4gRE9NQWdlbnQ6
Om5vZGVBc1NjcmlwdFZhbHVlKHN0YXRlLCBtX25vZGUuZ2V0KCkpOwogICAgIH0KIHByaXZhdGU6
CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAog
dm9pZCBQYWdlQ29uc29sZUFnZW50OjphZGRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCkKIHsKLSAgICBOb2RlKiBub2RlID0gbV9pbnNwZWN0b3JET01B
Z2VudC0+bm9kZUZvcklkKG5vZGVJZCk7CisgICAgTm9kZSogbm9kZSA9IG1fZG9tQWdlbnQtPm5v
ZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8fCBub2RlLT5pc0luU2hhZG93VHJlZSgp
KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJub2RlSWQgaXMgbm90IHZh
bGlkIik7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9QYWdlQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZUNv
bnNvbGVBZ2VudC5oCmluZGV4IDM2YzMwYzI0ZDgyNjNiODAwZjNmYjI0OWYwNjlhNjViZTk0OWEw
MmIuLmRlZTI5Y2ZiOTI3ZDM5M2Y3M2Q0MzEzOTJhZjA4NWI3MDAwYzAwNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VDb25zb2xlQWdlbnQuaApAQCAtMzUsMTMgKzM1LDEzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CitjbGFz
cyBET01BZ2VudDsKIAogY2xhc3MgUGFnZUNvbnNvbGVBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJD
b25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VDb25zb2xlQWdlbnQp
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFBhZ2VDb25zb2xl
QWdlbnQoV2ViSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yRE9NQWdlbnQqKTsKKyAg
ICBQYWdlQ29uc29sZUFnZW50KFdlYkluamVjdGVkU2NyaXB0TWFuYWdlciosIERPTUFnZW50Kik7
CiAgICAgdmlydHVhbCB+UGFnZUNvbnNvbGVBZ2VudCgpIHsgfQogCiBwcml2YXRlOgpAQCAtNDks
NyArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhck1lc3NhZ2VzKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGFkZEluc3BlY3RlZE5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkKSBvdmVycmlkZTsKIAotICAgIEluc3BlY3RvckRPTUFnZW50
KiBtX2luc3BlY3RvckRPTUFnZW50OworICAgIERPTUFnZW50KiBtX2RvbUFnZW50OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMDAyMzliN2QyNTNhOWRmMWQxNTViYzU2NzNkYjk5MGNl
NjMxYWRkOC4uOGNkNGZkNmViYTVlYmVhY2UwNzkyODQyOWI4NjQ1ZTQzYTdkMGMzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00OSw3
ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9y
T3ZlcmxheSogb3ZlcmxheSkKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3Bl
Y3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBXZWJEZWJ1Z2dlckFnZW50KGluamVjdGVkU2Ny
aXB0TWFuYWdlciwgaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VB
Z2VudCkKICAgICAsIG1fb3ZlcmxheShvdmVybGF5KQpAQCAtODcsNyArODcsNyBAQCBTdHJpbmcg
UGFnZURlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmIHNj
cmlwdCkKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoc2NyaXB0KTsKKyAgICByZXR1cm4gRGVidWdnZXJB
Z2VudDo6c291cmNlTWFwVVJMRm9yU2NyaXB0KHNjcmlwdCk7CiB9CiAKIHZvaWQgUGFnZURlYnVn
Z2VyQWdlbnQ6OnN0YXJ0TGlzdGVuaW5nU2NyaXB0RGVidWdTZXJ2ZXIoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaAppbmRleCA1NDlmN2QzZmM2ZWI5MWYw
OWYwM2Y3N2I1NWIxZmE1ODY1MGRmYTRmLi42NDQyY2E5ZWQ2OTA1MTAxNzBmZGQ5NGQ5NGYxNTY1
MTkyZDMzMjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVn
Z2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdl
bnQuaApAQCAtMzcsMTYgKzM3LDE2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElu
c3BlY3Rvck92ZXJsYXk7Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnN0cnVt
ZW50aW5nQWdlbnRzOwogY2xhc3MgUGFnZTsKK2NsYXNzIFBhZ2VBZ2VudDsKIGNsYXNzIFBhZ2VT
Y3JpcHREZWJ1Z1NlcnZlcjsKIAogY2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJs
aWMgV2ViRGVidWdnZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZURlYnVn
Z2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFBh
Z2VEZWJ1Z2dlckFnZW50KEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zdHJ1
bWVudGluZ0FnZW50cyosIEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3Rvck92ZXJsYXkqKTsK
KyAgICBQYWdlRGVidWdnZXJBZ2VudChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlcios
IEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlQWdlbnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAg
ICAgdmlydHVhbCB+UGFnZURlYnVnZ2VyQWdlbnQoKSB7IH0KIAogICAgIHZvaWQgZGlkQ2xlYXJN
YWluRnJhbWVXaW5kb3dPYmplY3QoKTsKQEAgLTcwLDcgKzcwLDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVy
cm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRPdmVybGF5TWVzc2FnZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyopIG92ZXJyaWRlOwogCi0gICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAg
ICBQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIEluc3BlY3Rvck92ZXJsYXkqIG1fb3Zlcmxh
eTsKICAgICBQYWdlU2NyaXB0RGVidWdTZXJ2ZXIgbV9zY3JpcHREZWJ1Z1NlcnZlcjsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggYzlk
MzQ2ZTY0MzNmZjlhNmFlOTFjZjc2MGMyNTJhOTMxNDg1MTg1Yi4uMTg4NzFjMWM5MmVhZDQ5YWVk
NDg0NjZlMTBjYzk0NDZkNDI5ZjllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Q
YWdlUnVudGltZUFnZW50LmNwcApAQCAtNTIsOCArNTIsOCBAQCB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhZ2VSdW50aW1lQWdlbnQ6OlBhZ2VS
dW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IFBhZ2UqIHBhZ2UsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQotICAgIDogSW5zcGVj
dG9yUnVudGltZUFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VSdW50aW1lQWdlbnQ6
OlBhZ2VSdW50aW1lQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1h
bmFnZXIsIFBhZ2UqIHBhZ2UsIFBhZ2VBZ2VudCogcGFnZUFnZW50KQorICAgIDogUnVudGltZUFn
ZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1faW5zcGVjdGVkUGFnZShwYWdlKQog
ICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQogICAgICwgbV9tYWluV29ybGRDb250ZXh0Q3Jl
YXRlZChmYWxzZSkKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBQYWdlUnVudGltZUFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24KICAg
ICBTdHJpbmcgdW51c2VkOwogICAgIGRpc2FibGUodW51c2VkKTsKIAotICAgIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQocmVhc29uKTsKKyAgICBS
dW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKHJlYXNvbik7CiB9CiAK
IHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykK
QEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBQYWdlUnVudGltZUFnZW50OjplbmFibGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nKQogICAgIGlmIChlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlKGVycm9yU3RyaW5nKTsKKyAgICBSdW50
aW1lQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7CiAKICAgICAvLyBPbmx5IHJlcG9ydCBleGlz
dGluZyBjb250ZXh0cyBpZiB0aGUgcGFnZSBkaWQgY29tbWl0IGxvYWQsIG90aGVyd2lzZSB3ZSBt
YXkKICAgICAvLyB1bmludGVudGlvbmFsbHkgaW5pdGlhbGl6ZSBjb250ZXh0cyBpbiB0aGUgZnJh
bWVzIHdoaWNoIG1heSB0cmlnZ2VyIHNvbWUgbGlzdGVuZXJzCkBAIC05Niw3ICs5Niw3IEBAIHZv
aWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAg
ICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisgICAgUnVudGltZUFnZW50OjpkaXNhYmxl
KGVycm9yU3RyaW5nKTsKIH0KIAogdm9pZCBQYWdlUnVudGltZUFnZW50OjpkaWRDcmVhdGVNYWlu
V29ybGRDb250ZXh0KEZyYW1lJiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZVJ1bnRpbWVBZ2VudC5oCmluZGV4IGU3YjJjMjRkOGQwZTU0NDljZTcyZjExOTRjOGQyMzRiNzMw
ZmFhZjkuLmE0MGE1YTQwNDFlOGJjZTQxNGEwNGRhM2FmMTYyNmJhNjFjMGRmNWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQuaApAQCAtNDQsMTYgKzQ0LDE2
IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFBhZ2U7Citj
bGFzcyBQYWdlQWdlbnQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIHR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwogCi1jbGFzcyBQYWdlUnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50IHsKK2NsYXNzIFBhZ2VSdW50aW1lQWdlbnQgZmlu
YWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpSdW50aW1lQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIFBhZ2VSdW50aW1lQWdlbnQoSW5zcGVjdG9yOjpJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqLCBQYWdlKiwgSW5zcGVjdG9yUGFnZUFnZW50Kik7CisgICAgUGFn
ZVJ1bnRpbWVBZ2VudChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciosIFBhZ2UqLCBQ
YWdlQWdlbnQqKTsKICAgICB2aXJ0dWFsIH5QYWdlUnVudGltZUFnZW50KCkgeyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwpAQCAt
NzMsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5Q29udGV4dENyZWF0ZWQoY29u
c3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkV4ZWNTdGF0ZSosIFNlY3VyaXR5T3JpZ2luKiwgYm9v
bCBpc1BhZ2VDb250ZXh0KTsKIAogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKLSAgICBJbnNw
ZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OworICAgIFBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6UnVudGltZUZyb250ZW5kRGlzcGF0Y2hl
cj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UnVudGltZUJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIGJvb2wgbV9tYWluV29y
bGRDb250ZXh0Q3JlYXRlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9X
ZWJDb25zb2xlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkNvbnNvbGVB
Z2VudC5jcHAKaW5kZXggNDcwMDU4ZWU0M2U5MmI5NTI1MDQ5MWU5YThhZjUzZmU2MjQ1MjY4YS4u
MmY0NzI1N2QzNjA3NDZmNjRiMjk5OWM5ODYxYTc1YjBjODI5NDAxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV2ViQ29uc29s
ZUFnZW50OjpXZWJDb25zb2xlQWdlbnQoV2ViSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0b3JDb25zb2xlQWdlbnQoaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKQorICAgIDogQ29uc29sZUFnZW50KGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAg
ICAsIG1fbW9uaXRvcmluZ1hIUkVuYWJsZWQoZmFsc2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvV2ViQ29uc29sZUFnZW50LmgKaW5kZXggY2FmMWIxZGVhNTQxMTkyOTU5YjcxMmEz
ZDBiZjZlZDljMTAxZjk5ZS4uMzY3ZTI3ODUzNmI3NzBhYWIwZjQ2MjY2YzAzNWU4ZGRlMDQ2ZDU2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkNvbnNvbGVBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJDb25zb2xlQWdlbnQuaApAQCAtMzYs
NyArMzYsNyBAQCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgV2ViSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOwogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIFdlYkNvbnNv
bGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckNvbnNvbGVBZ2VudCB7CitjbGFz
cyBXZWJDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yOjpDb25zb2xlQWdlbnQgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkNvbnNvbGVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvV2ViRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViRGVi
dWdnZXJBZ2VudC5jcHAKaW5kZXggZGQ2OWU1ZjNmMTQyNGZjOGMzZTU0NmRlZTJhMmY3ZjliNjVk
OTkxNi4uNzVhMGY1YjE3NjkzYmRhMGRmNzU4Yjg4ZTZiMTIwNWQwMjNlZmU5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJEZWJ1Z2dlckFnZW50LmNwcApAQCAtMzMsMjEgKzMz
LDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFdlYkRlYnVnZ2VyQWdlbnQ6OldlYkRlYnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMpCi0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluamVjdGVkU2NyaXB0TWFu
YWdlcikKKyAgICA6IERlYnVnZ2VyQWdlbnQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwg
bV9pbnN0cnVtZW50aW5nQWdlbnRzKGluc3RydW1lbnRpbmdBZ2VudHMpCiB7CiB9CiAKIHZvaWQg
V2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjplbmFibGUoKTsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQodGhpcyk7CisgICAgRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCk7CisgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5zZXREZWJ1Z2dlckFnZW50KHRoaXMpOwogfQogCiB2b2lkIFdlYkRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogewotICAgIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7Ci0gICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KG51bGxwdHIpOworICAg
IERlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLT5zZXREZWJ1Z2dlckFnZW50KG51bGxwdHIpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkRlYnVnZ2VyQWdlbnQu
aAppbmRleCAwNzQxNjYyMTYxZGNjMTU1YmQxMjkxZGViNmE4NTM0ZWM0YjkzZGJkLi4yNWFlYjEy
NTBlZWY0MzgwMjQ0NGY1NThiYmU1ZGNjZTdiNjUxMWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV2ViRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9XZWJEZWJ1Z2dlckFnZW50LmgKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIHR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogCi1jbGFzcyBXZWJEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCB7CitjbGFzcyBXZWJEZWJ1Z2dlckFnZW50IDogcHVibGljIElu
c3BlY3Rvcjo6RGVidWdnZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViRGVi
dWdnZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKaW5kZXggZjFmZTQxMDA1YWRmZWE0YmMwMWUwYWQ1Yjc3ZjU4ZjBiOTZjMjcwZC4uOGVk
NjM4NTFjYmZiZGIzZWE0YzIwMGZjYTJiY2Q4MzI3ZDc2N2JmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAt
OTIsNyArOTIsNyBAQCBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJJbnNwZWN0b3JD
b250cm9sbGVyKFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbAogICAgIG1fcnVudGltZUFnZW50
LT5zZXRTY3JpcHREZWJ1Z1NlcnZlcigmZGVidWdnZXJBZ2VudC0+c2NyaXB0RGVidWdTZXJ2ZXIo
KSk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKFdURjo6bW92ZShkZWJ1Z2dlckFnZW50KSk7CiAKLSAg
ICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JUaW1lbGluZUFnZW50
PihtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG51bGxwdHIsIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6Oldvcmtlckluc3BlY3RvciwgbnVsbHB0cikpOworICAgIG1fYWdlbnRzLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPFRpbWVsaW5lQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQo
KSwgbnVsbHB0ciwgVGltZWxpbmVBZ2VudDo6V29ya2VySW5zcGVjdG9yLCBudWxscHRyKSk7CiAg
ICAgbV9hZ2VudHMuYXBwZW5kKFdURjo6bW92ZShjb25zb2xlQWdlbnQpKTsKIAogICAgIGlmIChD
b21tYW5kTGluZUFQSUhvc3QqIGNvbW1hbmRMaW5lQVBJSG9zdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLT5jb21tYW5kTGluZUFQSUhvc3QoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcAppbmRleCAyMDZhNDFmNWZiNDJjZDE1YTMzNmNj
YjM5NGIyZWFjNTFkZTU0ZmZhLi42MGY2NGQ0MzIyYjk0MGYwZWMwYjVlODEyZWE4NDY0MGI5MDY2
NGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50
LmNwcApAQCAtNDcsNyArNDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBXb3JrZXJSdW50aW1lQWdlbnQ6OldvcmtlclJ1bnRpbWVBZ2VudChJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgV29ya2VyR2xvYmFs
U2NvcGUqIHdvcmtlckdsb2JhbFNjb3BlKQotICAgIDogSW5zcGVjdG9yUnVudGltZUFnZW50KGlu
amVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICA6IFJ1bnRpbWVBZ2VudChpbmplY3RlZFNjcmlwdE1h
bmFnZXIpCiAgICAgLCBtX3dvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKQogICAg
ICwgbV9wYXVzZWQoZmFsc2UpCiB7CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgV29ya2VyUnVudGlt
ZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzCiB7CiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCi0gICAgSW5zcGVj
dG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChyZWFzb24pOwor
ICAgIFJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQocmVhc29uKTsK
IH0KIAogSW5qZWN0ZWRTY3JpcHQgV29ya2VyUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZv
ckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuaAppbmRleCA4
NzhiZGQyNDhiMDhiZTFjOGFmNGVmNDU3MjczMzRlNzA4YTkwYzNhLi5mMWZkOGU0OWU3NjYxZTQ2
N2I3Njc5NDc3YjgwNTk0OTNmOGE2MWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1dvcmtlclJ1bnRpbWVBZ2VudC5oCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIFdvcmtlckdsb2JhbFNjb3BlOwogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CiAKLWNsYXNzIFdvcmtlclJ1bnRpbWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Oklu
c3BlY3RvclJ1bnRpbWVBZ2VudCB7CitjbGFzcyBXb3JrZXJSdW50aW1lQWdlbnQgZmluYWwgOiBw
dWJsaWMgSW5zcGVjdG9yOjpSdW50aW1lQWdlbnQgewogcHVibGljOgogICAgIFdvcmtlclJ1bnRp
bWVBZ2VudChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciosIFdvcmtlckdsb2JhbFNj
b3BlKik7CiAgICAgdmlydHVhbCB+V29ya2VyUnVudGltZUFnZW50KCkgeyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNv
cmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuaAppbmRleCAwNjVhNDk0YTEyOTBiYTJlOTc1MWNj
YmQ0YmFhMmEwYmNjZGZiMzA5Li5mNWFkZWI5NTU1MDU1Yzk1ZWIxMWRjMmZkMTIyMTNmYzE1NTk1
MGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmgKQEAgLTEzMCw3
ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN3aXRjaFNlc3Npb24oUmVmUHRyPFJlcGxh
eVNlc3Npb24+JiYpOwogCi0gICAgLy8gSW5zcGVjdG9yUmVwbGF5QWdlbnQgbm90aWZpY2F0aW9u
cy4KKyAgICAvLyBSZXBsYXlBZ2VudCBub3RpZmljYXRpb25zLgogICAgIHZvaWQgZnJhbWVOYXZp
Z2F0ZWQoRG9jdW1lbnRMb2FkZXIqKTsKICAgICB2b2lkIGZyYW1lRGV0YWNoZWQoRnJhbWUmKTsK
ICAgICB2b2lkIHdpbGxEaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50JiwgRnJhbWUqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBkYTZlNzA5MGM2MjRmMTU1NGIzODdmMjAx
YzhlYTU3NWY3NGE4N2UwLi44MGRmZmFiMzNiZDM0ZDQ0ZWYwNmVkYjY2OTFkZjFiNDU4N2ZmNjVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNTMwLDcgKzE1MzAsNyBA
QCBWZWN0b3I8U3RyaW5nPiBJbnRlcm5hbHM6OmNvbnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMo
KSBjb25zdAogICAgIGlmICghaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CiAKLSAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPndlYkNvbnNvbGVBZ2VudCgpOworICAgIENvbnNvbGVB
Z2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+d2ViQ29uc29sZUFnZW50
KCk7CiAgICAgaWYgKCFjb25zb2xlQWdlbnQpCiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>