<?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>184236</bug_id>
          
          <creation_ts>2018-04-02 09:49:26 -0700</creation_ts>
          <short_desc>[DFG] Remove duplicate 32bit code more</short_desc>
          <delta_ts>2018-04-11 02:37:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1411100</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-02 09:49:26 -0700</bug_when>
    <thetext>[DFG] Remove duplicate 32bit code more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411105</commentid>
    <comment_count>1</comment_count>
      <attachid>336990</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-02 09:52:48 -0700</bug_when>
    <thetext>Created attachment 336990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411108</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-02 09:55:35 -0700</bug_when>
    <thetext>Attachment 336990 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCompareSlowPathGenerator.h:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCompareSlowPathGenerator.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411113</commentid>
    <comment_count>3</comment_count>
      <attachid>336993</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-02 10:09:19 -0700</bug_when>
    <thetext>Created attachment 336993
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411115</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-02 10:13:14 -0700</bug_when>
    <thetext>Attachment 336993 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCompareSlowPathGenerator.h:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCompareSlowPathGenerator.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411138</commentid>
    <comment_count>5</comment_count>
      <attachid>336998</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-02 10:47:20 -0700</bug_when>
    <thetext>Created attachment 336998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411140</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-02 10:48:59 -0700</bug_when>
    <thetext>Attachment 336998 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCompareSlowPathGenerator.h:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGCompareSlowPathGenerator.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412595</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-07 07:09:30 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413172</commentid>
    <comment_count>8</comment_count>
      <attachid>336998</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-09 21:20:14 -0700</bug_when>
    <thetext>Comment on attachment 336998
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:12920
&gt; +    unblessedBooleanResult(resultGPR, node, UseChildrenCalledExplicitly);

This is not equivalent to the original.  From my reading of the code, this merely performs a bool to JSBoolean conversion.  The original code which calls jsValueResult() (see DFGSpeculativeJIT.h:855-867) which adds JIT asserts, do some tracking for register spilling, and capture GenerationInfo.  There appear to be a lot of work which are missing here.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:438
&gt; +    JITCompiler::Jump twoCellsCase = m_jit.branchTest64(JITCompiler::Zero, resultGPR, GPRInfo::tagMaskRegister);

I don&apos;t see how this can work for 32-bit targets.  The tagMaskRegister only exits for x86_64 and ARM64.  What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413578</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-10 22:15:58 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #8)
&gt; Comment on attachment 336998 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=336998&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:12920
&gt; &gt; +    unblessedBooleanResult(resultGPR, node, UseChildrenCalledExplicitly);
&gt; 
&gt; This is not equivalent to the original.  From my reading of the code, this
&gt; merely performs a bool to JSBoolean conversion.  The original code which
&gt; calls jsValueResult() (see DFGSpeculativeJIT.h:855-867) which adds JIT
&gt; asserts, do some tracking for register spilling, and capture GenerationInfo.
&gt; There appear to be a lot of work which are missing here.

I misread the code.  I thought unblessedBooleanResult() only did blessBoolean() part for 64-bit, and not the blessedBooleanResult() part.  It actually does both.

&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:438
&gt; &gt; +    JITCompiler::Jump twoCellsCase = m_jit.branchTest64(JITCompiler::Zero, resultGPR, GPRInfo::tagMaskRegister);
&gt; 
&gt; I don&apos;t see how this can work for 32-bit targets.  The tagMaskRegister only
&gt; exits for x86_64 and ARM64.  What am I missing?

I misread this part too.  I thought that there&apos;s only one consolidated version of nonSpeculativeNonPeepholeStrictEq().  That&apos;s not the case: this is just the 64-bit version.  Hence, there&apos;s no issue here.

Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413596</commentid>
    <comment_count>10</comment_count>
      <attachid>336998</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-10 23:26:52 -0700</bug_when>
    <thetext>Comment on attachment 336998
Patch

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

r=me.  Thanks for the hard work.  This is a big patch.

&gt; Source/JavaScriptCore/jit/RegisterSet.h:210
&gt; +    void setAny(JSValueRegs reg) { set(reg); }

nit: lets call the argument &quot;regs&quot; instead of &quot;reg&quot;.  I think this is the convention used everywhere else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413605</commentid>
    <comment_count>11</comment_count>
      <attachid>336998</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-11 00:17:13 -0700</bug_when>
    <thetext>Comment on attachment 336998
Patch

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

Thank you for your review!

&gt;&gt; Source/JavaScriptCore/jit/RegisterSet.h:210
&gt;&gt; +    void setAny(JSValueRegs reg) { set(reg); }
&gt; 
&gt; nit: lets call the argument &quot;regs&quot; instead of &quot;reg&quot;.  I think this is the convention used everywhere else.

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413614</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-11 00:45:03 -0700</bug_when>
    <thetext>Committed r230517: &lt;https://trac.webkit.org/changeset/230517&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413615</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-11 00:46:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/39340504&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413625</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-11 02:37:22 -0700</bug_when>
    <thetext>Committed r230520: &lt;https://trac.webkit.org/changeset/230520&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336990</attachid>
            <date>2018-04-02 09:52:48 -0700</date>
            <delta_ts>2018-04-02 10:09:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184236-20180403015246.patch</filename>
            <type>text/plain</type>
            <size>113829</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MmEzNjcxOTRhMDVkYmM3Y2M0MGQ0Njg0MjkzNDc0YzRhZmNiYmQ4Li45NjM5NDFhOTliNjU2Mjc4
MGZmMWRkNGNkZjNhNzc1MWNjYTcxYjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAxOC0wNC0wMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBSZW1vdmUgZHVwbGljYXRlIDMyYml0IGNvZGUgbW9yZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjM2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGR1
cGxpY2F0ZSAzMmJpdCBjb2RlIG1vcmUgYWdncmVzc2l2ZWx5IHBhcnQgMi4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZn
L0RGR0NvbXBhcmVTbG93UGF0aEdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVTbG93UGF0aEdlbmVyYXRvcik6Cisg
ICAgICAgIERyb3AgYm94aW5nIHBhcnQuIFVzZSB1bmJsZXNzZWRCb29sZWFuUmVzdWx0IGluIERG
R1NwZWN1bGF0aXZlSklUIHNpZGUgaW5zdGVhZC4KKworICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPdmVycmlkZXNIYXNJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDaGVja05vdEVtcHR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5SWRGbHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5SWREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0SW5pdGlhbGl6ZUJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBu
YW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUV4dHJhY3RD
YXRjaExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OnNlbGVjdFNjcmF0Y2hHUFIpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5k
Qm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94Qm9v
bGVhblNsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNv
bXBhcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTWlzY1N0cmljdEVxKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEluaXRpYWxpemVCdXR0ZXJmbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RF
cSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q29tcGFyZUFuZEJveEJvb2xlYW5T
bG93UGF0aEdlbmVyYXRvcjo6Q29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0SW5pdGlhbGl6
ZUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgb3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5QnlJbnQgc3RhcnRzIHJldHVybmluZyB1bmJsZXNzZWQgYm9vbGVhbiB3aXRo
IHNpemVfdC4KKworICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpsb2FkVmFsdWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmNvbnN0cnVjdFJlZ2lzdGVyU2V0KToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDoKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisgICAgICAgIENsZWFuIHVwIHNlbGVj
dFNjcmF0Y2hHUFIgY29kZSB0byBwYXNzIEpTVmFsdWVSZWdzLgorCiAyMDE4LTA0LTAyICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtERkddIE1vcmUg
YWdncmVzc2l2ZSByZW1vdmFsIG9mIGR1cGxpY2F0ZSAzMmJpdCBERkcgY29kZQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA3NTQ4YmFjMjM3ZjAyODg1OTEwNTMxZTI4ZjBjNGQ3Yzk5
Y2I3YTg1Li5iNTcwNDdjZmMxZDEwZjk0MzFiYTk0MjA5ZDUxNjFmMzA4MGVhZmYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTcwOCw2ICsxNzA4LDcgQEAKIAkJRTM1NDYyMkIx
QjYwNjVEMTAwNTQ1Mzg2IC8qIENvbnN0cnVjdEFiaWxpdHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTQ2MjJBMUI2MDY1RDEwMDU0NTM4NiAvKiBD
b25zdHJ1Y3RBYmlsaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTM1NTVCOEExREFFMDNBNTAwRjM2OTIxIC8qIERPTUpJVENhbGxET01HZXR0
ZXJTbmlwcGV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzU1NUI4OTFEQUUwM0EyMDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclNuaXBwZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzU1
RjM1MzFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1RjM1MTFCN0RDODUzMDBD
NTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggKi87IH07CisJCUUzNTZEODY0MjA3Mjgz
ODEwMDVBQzc1MCAvKiBERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTZEODYzMjA3MjgzODEwMDVBQzc1
MCAvKiBERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRTM1Q0ExNTQxREJD
M0E1QzAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1Q0ExNTIxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJ
VEhlYXBSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUUzNUNBMTU2MURCQzNBNUYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUNBMTUwMURC
QzNBNTYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVFMDM2MDFCN0FCNDNFMDA3M0FEMkEg
LyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFMDM1RTFCN0FCNDNFMDA3M0FEMkEgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ1NjAsNiArNDU2MSw3IEBACiAJCUUzNTU1Qjg5MURB
RTAzQTIwMEYzNjkyMSAvKiBET01KSVRDYWxsRE9NR2V0dGVyU25pcHBldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01KSVRDYWxsRE9NR2V0dGVyU25pcHBldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzU1RjM1MDFCN0RDODUzMDBDNTBEQzUgLyogTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1vZHVsZUxvYWRlclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNTVGMzUxMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTZEODYzMjA3MjgzODEwMDVBQzc1MCAv
KiBERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQ29tcGFyZVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ29t
cGFyZVNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
NUNBMTRGMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NSklUQWJzdHJhY3RIZWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNTAxREJDM0E1NjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01K
SVRBYnN0cmFjdEhlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNTEx
REJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNzE3MCw2ICs3MTcyLDcgQEAKIAkJCQkwRkMwOTc3RTE0NjlFQkM0MDBD
RjI0NDIgLyogREZHQ29tbW9uLmggKi8sCiAJCQkJMEZFQTBBMkQxNzBENDBCRjAwQkI3MjJDIC8q
IERGR0NvbW1vbkRhdGEuY3BwICovLAogCQkJCTBGRUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdDb21tb25EYXRhLmggKi8sCisJCQkJRTM1NkQ4NjMyMDcyODM4MTAwNUFDNzUwIC8qIERGR0Nv
bXBhcmVTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTBGMzhCMDEzMTdDRkU3NTUwMEIxNDRE
MyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi8sCiAJCQkJMEYzOEIwMTQxN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggKi8sCiAJCQkJMEYzOEIwMTUxN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8sCkBAIC04NTE5LDYgKzg1MjIsNyBAQAog
CQkJCTBGMDQzOTZFMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9u
RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1NkQ4NjQyMDcyODM4MTAwNUFDNzUwIC8qIERG
R0NvbXBhcmVTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIwMTgx
N0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjNCM0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTA0NCw3ICs5MDQ4LDYgQEAKIAkJCQlBNTAz
RkExRTE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xleGljYWxF
bnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0E5Nzc0QTgyMDZCODJFNDAwOEQwM0Qw
IC8qIEpTV2Vha1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBG
Q0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThB
NDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTkxMTYsNiArOTExOSw3IEBACiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpT
V2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVC
OEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlG
Qjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3
QTk3NzRBODIwNkI4MkU0MDA4RDAzRDAgLyogSlNXZWFrVmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGFyZVNsb3dQYXRoR2VuZXJh
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2MzZjA1YjhlNmQxZDkwOWUyZWM5ZTg4Mjc4NmNkZWU0ZmVmYTE2
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGFy
ZVNsb3dQYXRoR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlw
ZT4KK2NsYXNzIENvbXBhcmVTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93
UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKK3B1
YmxpYzoKKyAgICBDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCisgICAgICAgIFNfSklUT3BlcmF0aW9uX0VKSiBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikK
KyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfSklUT3BlcmF0aW9u
X0VKSiwgR1BSUmVnPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5lZWRUb1Nw
aWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwgcmVzdWx0KQorICAg
ICAgICAsIG1fYXJnMShhcmcxKQorICAgICAgICAsIG1fYXJnMihhcmcyKQorICAgIHsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQq
IGppdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAg
IHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRo
aXMtPm1fcmVzdWx0LCBtX2FyZzEsIG1fYXJnMikpOworICAgICAgICB0aGlzLT50ZWFyRG93bihq
aXQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1ZhbHVlUmVncyBtX2FyZzE7CisgICAgSlNW
YWx1ZVJlZ3MgbV9hcmcyOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IGVj
MzA1MDA2YTUzMjI2YjlmMDhiNGZiZjQwZWQ4MmEzZDhjZThmZWMuLjEwNmI5NGRkZjNjYTRiNzg2
MWUxNjYyZTIyZjc4ZmFjMWMyYWMzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcApAQCAtMTkxNSwxNiArMTkxNSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2UtPmhhc1By
b3BlcnR5R2VuZXJpYyhleGVjLCBhc1N0cmluZyhwcm9wZXJ0eU5hbWUpLT50b0lkZW50aWZpZXIo
ZXhlYyksIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVk
UHJvcGVydHlCeUludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZUNlbGwsIGludDMyX3Qg
c3Vic2NyaXB0LCBpbnQzMl90IGludGVybmFsTWV0aG9kVHlwZSkKK3NpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQsIGludDMyX3QgaW50ZXJuYWxNZXRob2RU
eXBlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlQ2VsbC0+
dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoVU5M
SUtFTFkoc3Vic2NyaXB0IDwgMCkpIHsKICAgICAgICAgLy8gR28gdGhlIHNsb3dlc3Qgd2F5IHBv
c3NpYmxlIGJlY2F1c2UgbmVnYXRpdmUgaW5kaWNlcyBkb24ndCB1c2UgaW5kZXhlZCBzdG9yYWdl
LgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1By
b3BlcnR5R2VuZXJpYyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHN1YnNjcmlwdCksIHN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlPihpbnRlcm5hbE1ldGhv
ZFR5cGUpKSkpOworICAgICAgICByZXR1cm4gb2JqZWN0LT5oYXNQcm9wZXJ0eUdlbmVyaWMoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBzdWJzY3JpcHQpLCBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZT4oaW50ZXJuYWxNZXRob2RUeXBlKSk7CiAgICAgfQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aGFzUHJvcGVydHlH
ZW5lcmljKGV4ZWMsIHN1YnNjcmlwdCwgc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpKSk7CisgICAgcmV0dXJuIG9iamVjdC0+
aGFzUHJvcGVydHlHZW5lcmljKGV4ZWMsIHN1YnNjcmlwdCwgc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOwogfQogCiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCmluZGV4IGEzNTZkODI4YzdjNmM3NDhmMDQ4MjM3ZDE4MTIw
YjZmZGM5NTAwNGUuLmJjMWY1NjhjZTliMjM1MDJiMmMwYWY5NzZjOWFkYWEwNjBjZjBhMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCkBAIC04MSw3ICs4MSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxXaXRoVGhp
cyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3Rv
dHlwZU9mT2JqZWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCopOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludChFeGVjU3RhdGUqLCBKU0NlbGwq
LCBpbnQzMl90LCBpbnQzMl90KTsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eUJ5SW50KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QsIGludDMyX3Qp
OwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvcihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSosIGludDMy
X3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAppbmRleCBlNDQyYjRiYWI4YmQxN2U0NWQ1YmIzOGE4N2FkNDQyYzBiMTE5YjhjLi43MTM2Zjcz
MzUwMGIwOGRjZTE1MzI2Yjc3YjcxOTlmMGEwMDU2MTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkRGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkRGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93
UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUg
IkRGR0NvbXBhcmVTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIK
ICNpbmNsdWRlICJERkdPU1JFeGl0RnV6ei5oIgogI2luY2x1ZGUgIkRGR1NhbmVTdHJpbmdHZXRC
eVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgiCkBAIC0xMTM2LDI3ICsxMTM3LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1c2hXaXRoU2NvcGUoTm9kZSogbm9kZSkKICAgICBjZWxsUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi17Ci0gICAgdW5z
aWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKLSAgICBp
ZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJyYW5j
aE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwotCi0gICAgICAgIEFTU0VS
VChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgIAotICAgICAgICBub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmQsIGhlbHBlckZ1
bmN0aW9uKTsKLSAgICAKLSAgICAgICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxv
Y2s7Ci0gICAgICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhv
bGVDb21wYXJlKG5vZGUsIGNvbmQsIGhlbHBlckZ1bmN0aW9uKTsKLSAgICAKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlU3RyaWN0RXEo
Tm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJs
b2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKQEAgLTM0MjAsNiArMzQwMCw0NSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGFyc2VJbnQoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT3ZlcnJpZGVzSGFzSW5zdGFuY2UoTm9kZSogbm9kZSkKK3sKKyAgICBOb2RlKiBoYXNJbnN0
YW5jZVZhbHVlTm9kZSA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICBKU0Z1bmN0aW9uKiBk
ZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+Y2Vs
bE9wZXJhbmQoKS0+dmFsdWUoKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm90
RGVmYXVsdDsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBoYXNJbnN0YW5jZVZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiBjb25zdGFudCBmb2xkaW5nIGhhbmRsZWQg
YXV0b21hdGljYWxseSB0aGUgY2FzZSB3aGVyZSB3ZSBrbmV3IHRoZSBoYXNJbnN0YW5jZSBmdW5j
dGlvbgorICAgIC8vIHdhcyBhIGNvbnN0YW50LiBVbmZvcnR1bmF0ZWx5LCB0aGUgZm9sZGluZyBy
dWxlIGZvciBPdmVycmlkZXNIYXNJbnN0YW5jZSBpcyBpbiB0aGUgc3RyZW5ndGggcmVkdWN0aW9u
IHBoYXNlCisgICAgLy8gc2luY2UgaXQgcmVsaWVzIG9uIE9TUiBpbmZvcm1hdGlvbi4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDgzMgorICAgIGlmICghaGFzSW5z
dGFuY2VWYWx1ZU5vZGUtPmlzQ2VsbENvbnN0YW50KCkgfHwgZGVmYXVsdEhhc0luc3RhbmNlRnVu
Y3Rpb24gIT0gaGFzSW5zdGFuY2VWYWx1ZU5vZGUtPmFzQ2VsbCgpKSB7CisgICAgICAgIEpTVmFs
dWVSZWdzIGhhc0luc3RhbmNlVmFsdWVSZWdzID0gaGFzSW5zdGFuY2VWYWx1ZS5qc1ZhbHVlUmVn
cygpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG5vdERlZmF1bHQuYXBwZW5kKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGhhc0luc3RhbmNlVmFsdWVSZWdz
LmdwcigpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpKSk7CisjZWxzZQorICAg
ICAgICBub3REZWZhdWx0LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoaGFzSW5zdGFuY2VW
YWx1ZVJlZ3MpKTsKKyAgICAgICAgbm90RGVmYXVsdC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaGFzSW5zdGFuY2VWYWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpKSk7CisjZW5kaWYKKyAgICB9CisK
KyAgICAvLyBDaGVjayB0aGF0IGJhc2UgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgor
ICAgIG1faml0LnRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQ
Uik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAg
IGlmICghbm90RGVmYXVsdC5lbXB0eSgpKSB7CisgICAgICAgIG5vdERlZmF1bHQubGluaygmbV9q
aXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAg
ICB9CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0
YW5jZU9mKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBVbnR5cGVkVXNlKSB7CkBAIC02OTAyLDYgKzY5MjEsNTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUp
OwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9k
ZSkKK3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKworICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7CisgICAgeworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBhcmd1
bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdz
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0KTsK
KyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFs
dWVSZWdzKCk7CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgfQorICAgIHVubG9jayhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFu
Y2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4g
VGhpcyBpcyBzYWZlCisgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRl
Z3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCisgICAg
Ly8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNh
biBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAgLy8gcGFzdCB0aGUg
c2l6aW5nLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDE0NDgKKworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICBK
SVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJn
dW1lbnRzUmVncyk7CisKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOworCisgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVk
Z2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUs
CisgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUikpOworCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCisgICAgICAgICAgICBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXNHUFIsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQp
KSk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFy
Z3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEt
Pm1hbmRhdG9yeU1pbmltdW0pOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBu
b1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRW
YXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7CkBAIC04NTM4LDYgKzg2MTAsMjkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7
CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdChOb2RlKiBub2RlKQor
eworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSk7CisKKyAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2pp
dC5icmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKTsKKworICAgIG1faml0LmNvbXBhcmU4KEpJVENv
bXBpbGVyOjpBYm92ZU9yRXF1YWwsCisgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAg
ICBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksCisgICAgICAgIHJlc3VsdEdQUik7CisgICAgSklU
Q29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5r
KCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisK
KyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdE9y
TnVsbChOb2RlKiBub2RlKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwpAQCAt
ODY5Niw2ICs4NzkxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0NlbGwo
Tm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUNoZWNrTm90RW1wdHkoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBvcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyByZWdzID0g
b3BlcmFuZC5qc1ZhbHVlUmVncygpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soVERaRmFpbHVyZSwg
SlNWYWx1ZVNvdXJjZSgpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlZ3MpKTsKKyAg
ICBub1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNr
U3RydWN0dXJlKE5vZGUqIG5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKQEAgLTExNTc0LDYgKzExNjc3LDUyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVUb0luZGV4U3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZEZsdXNoKE5v
ZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVS
ZWdzKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisKKyAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
YmFzZUdQUiwgdmFsdWVSZWdzLCBzY3JhdGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCks
IE5vdERpcmVjdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAoKSwgRG9udFNwaWxsKTsKKworICAgIG5v
UmVzdWx0KG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZChO
b2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVl
UmVncygpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgIGNh
Y2hlZFB1dEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBiYXNlR1BSLCB2YWx1ZVJlZ3MsIHNj
cmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKKworICAgIG5v
UmVzdWx0KG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZERp
cmVjdChOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5q
c1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKwor
ICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBiYXNlR1BSLCB2YWx1ZVJl
Z3MsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKKworICAg
IG5vUmVzdWx0KG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJ
ZFdpdGhUaGlzKE5vZGUqIG5vZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CkBAIC0xMTg3OCw3ICsxMjAyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTaXplKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2Vs
ZWN0U2NyYXRjaEdQUihzaXplR1BSKTsKKyAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gQXNzZW1i
bHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHNpemVHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGJpZ0xlbmd0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJ
T05fTEVOR1RIKSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCku
cmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSksIHN0cnVjdHVyZUdQ
Uik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKQEAgLTEy
NDI3LDYgKzEyNTc2LDQxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSWRlbnRpdHko
Tm9kZSogbm9kZSkKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNj
U3RyaWN0RXEoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgSlNWYWx1ZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwor
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IE1pc2NVc2UpCisgICAgICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQx
KCksIG9wMS5qc1ZhbHVlUmVncygpKTsKKyAgICBpZiAobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgp
ID09IE1pc2NVc2UpCisgICAgICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQyKCksIG9wMi5q
c1ZhbHVlUmVncygpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9qaXQuY29tcGFyZTY0
KEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7
CisjZWxzZQorICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOwor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBvcDEudGFnR1BSKCksIG9wMi50YWdHUFIoKSk7CisgICAgbV9qaXQuY29t
cGFyZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxLnBheWxvYWRHUFIoKSwgb3AyLnBheWxvYWRH
UFIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBub3RFcXVhbC5saW5rKCZtX2ppdCk7CisjZW5kaWYK
KyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbml0aWFsaXplQnV0dGVyZmx5KEdQUlJlZyBzdG9yYWdl
R1BSLCBHUFJSZWcgc2l6ZUdQUiwgSlNWYWx1ZVJlZ3MgZW1wdHlWYWx1ZVJlZ3MsIEdQUlJlZyBz
Y3JhdGNoR1BSKQoreworICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKHNpemVHUFIsIHNjcmF0
Y2hHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKKyAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoMSksIHNjcmF0Y2hHUFIpOworICAgIG1faml0LnN0b3JlVmFsdWUoZW1wdHlWYWx1ZVJlZ3Ms
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKKyAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAgIGRv
bmUubGluaygmbV9qaXQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2Nh
dGVOZXdBcnJheVdpdGhTaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEdQUlJlZyBy
ZXN1bHRHUFIsIEdQUlJlZyBzaXplR1BSLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBib29s
IHNob3VsZENvbnZlcnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSkKK3sKKyAgICBHUFJUZW1wb3Jh
cnkgc3RvcmFnZSh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisKKyAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOworCisgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzdG9yYWdlR1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgaWYgKHNob3VsZENvbnZlcnRMYXJnZVNpemVUb0Fy
cmF5U3RvcmFnZSkKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVkSW1tMzIoTUlOX0FSUkFZ
X1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpKTsKKworICAgIC8vIFdlIGNhbiB1c2UgcmVz
dWx0R1BSIGFzIGEgc2NyYXRjaCByaWdodCBub3cuCisgICAgZW1pdEFsbG9jYXRlQnV0dGVyZmx5
KHN0b3JhZ2VHUFIsIHNpemVHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCByZXN1bHRHUFIs
IHNsb3dDYXNlcyk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGVtcHR5
VmFsdWVSZWdzKHNjcmF0Y2hHUFIpOworICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkK
KyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBO
YU4pKSwgZW1wdHlWYWx1ZVJlZ3MuZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBlbXB0eVZhbHVlUmVn
cy5ncHIoKSk7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGVtcHR5VmFsdWVSZWdzKHNjcmF0Y2hH
UFIsIHNjcmF0Y2gyR1BSKTsKKyAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAg
ICAgIG1faml0Lm1vdmVWYWx1ZShKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFO
KSwgZW1wdHlWYWx1ZVJlZ3MpOworICAgIGVsc2UKKyAgICAgICAgbV9qaXQubW92ZVZhbHVlKEpT
VmFsdWUoKSwgZW1wdHlWYWx1ZVJlZ3MpOworI2VuZGlmCisgICAgZW1pdEluaXRpYWxpemVCdXR0
ZXJmbHkoc3RvcmFnZUdQUiwgc2l6ZUdQUiwgZW1wdHlWYWx1ZVJlZ3MsIHJlc3VsdEdQUik7CisK
KyAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0
ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSk7CisKKyAgICBlbWl0QWxsb2NhdGVKU09iamVj
dDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CisKKyAgICBtX2ppdC5tdXRh
dG9yRmVuY2UoKm1faml0LnZtKCkpOworCisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5l
cmF0b3I+KAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emUsIHJlc3VsdEdQUiwKKyAgICAgICAgc3RydWN0dXJlLAorICAgICAgICBzaG91bGRDb252ZXJ0
TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UgPyBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJl
KGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0
aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpIDogc3RydWN0dXJlLAorICAgICAgICBzaXplR1BS
LCBzdG9yYWdlR1BSKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIGluZGV4
R1BSID0gaW5kZXguZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgQXJyYXlNb2Rl
IG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAg
ICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgaWYg
KG1vZGUuaXNJbkJvdW5kcygpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgb3V0T2ZCb3VuZHMpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNjcmF0
Y2hHUFIpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOworI2Vsc2UKKyAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5kaWYKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFy
cmF5OjpEb3VibGU6IHsKKyAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAg
RlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0g
c2NyYXRjaC5mcHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigp
OworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpOworICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBvdXRPZkJvdW5k
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3Vu
ZHMpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBzY3Jh
dGNoRlBSKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hEb3VibGUoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHNjcmF0Y2hGUFIsIHNjcmF0
Y2hGUFIpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigp
OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAg
ICBpZiAobW9kZS5pc0luQm91bmRzKCkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBvdXRPZkJvdW5kcyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3Jh
dGNoR1BSKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisjZW5kaWYKKyAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBkZWZhdWx0OiB7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5
SW50LCByZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihu
b2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpKTsKKworICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dERpcmVjdFBuYW1lKE5vZGUqIG5vZGUpCit7CisgICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1f
aml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworI2lmIENQVShY
ODYpCisgICAgLy8gTm90IGVub3VnaCByZWdpc3RlcnMgb24gWDg2IGZvciB0aGlzIGNvZGUsIHNv
IGFsd2F5cyB1c2UgdGhlIHNsb3cgcGF0aC4KKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEpT
VmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
R2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBiYXNlR1BSLCBKU1ZhbHVlOjpKU0NlbGxUeXBlLCBw
cm9wZXJ0eUdQUik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworI2Vsc2UKKyAgICBFZGdlJiBpbmRleEVkZ2UgPSBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdl
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKKyAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgaW5kZXhFZGdlKTsKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsKKyAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7
CisKKyAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVy
YXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwor
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgLy8gQ2hlY2sg
dGhlIHN0cnVjdHVyZQorICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBz
bG93UGF0aC5hcHBlbmQoCisgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKKworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgIC8vIElmIGluZGV4IGlzIGxlc3Mg
dGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFu
IGlubGluZSBhY2Nlc3MKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3Mg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICBp
bmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICBt
X2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSksIHJlc3VsdFJlZ3MpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKKworICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
c3VsdFJlZ3MuZ3ByKCkpOworICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIpOworICAgIG1faml0LnNpZ25F
eHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbV9q
aXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0UmVncy5ncHIoKSwg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlc3VsdFJlZ3MpOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUikpOworI2Vsc2UKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
c2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVncywgYmFzZUdQ
UiwgSlNWYWx1ZTo6SlNDZWxsVHlwZSwgcHJvcGVydHlHUFIpKTsKKyNlbmRpZgorCisgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyNlbmRpZgorfQorCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSogbm9kZSkKK3sKKyAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CisKKyAgICBKU1ZhbHVlKiBwdHIgPSAmcmVpbnRlcnByZXRfY2Fz
dDxKU1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlci0+
ZGF0YUJ1ZmZlcigpKVtub2RlLT5jYXRjaE9TUkVudHJ5SW5kZXgoKV07CisgICAgbV9qaXQubG9h
ZFZhbHVlKHB0ciwgcmVzdWx0UmVncyk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MsIEdQUlJl
ZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQs
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3Bp
bGxNb2RlKQoreworICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVn
aXN0ZXJzKCk7CisgICAgaWYgKHNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKKyAgICAgICAgLy8g
V2UndmUgYWxyZWFkeSBmbHVzaGVkIHJlZ2lzdGVycyB0byB0aGUgc3RhY2ssIHdlIGRvbid0IG5l
ZWQgdG8gc3BpbGwgdGhlc2UuCisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KGJhc2VHUFIsIGZh
bHNlKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQodmFsdWVSZWdzLCBmYWxzZSk7CisgICAg
fQorICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdl
bmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJl
YW0tPnNpemUoKSk7CisgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1faml0
LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywKKyAgICAg
ICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCB2YWx1ZVJlZ3MsCisgICAgICAg
IHNjcmF0Y2hHUFIsIG1faml0LmVjbWFNb2RlRm9yKGNvZGVPcmlnaW4pLCBwdXRLaW5kKTsKKwor
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYXV0byBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBOb1Jlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlUmVncywKKyAgICAg
ICAgYmFzZUdQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CisjZWxzZQorICAg
IGF1dG8gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgTm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2YWx1ZVJl
Z3MsCisgICAgICAgIEpTVmFsdWU6OkpTQ2VsbFR5cGUsIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQo
aWRlbnRpZmllck51bWJlcikpOworI2VuZGlmCisKKyAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwg
c2xvd1BhdGguZ2V0KCkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1Bh
dGgpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9s
ZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQoreworICAgIEFTU0VSVChu
b2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOworCisgICAgSlNWYWx1ZVJlZ3MgYXJnMVJlZ3MgPSBhcmcxLmpzVmFs
dWVSZWdzKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJnMlJlZ3MgPSBhcmcyLmpzVmFsdWVSZWdzKCk7
CisKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICBpZiAoaXNLbm93
bk5vdEludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBhcmcxLnVzZSgpOworICAgICAgICBhcmcyLnVzZSgpOworCisgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3Vs
dEdQUiwgYXJnMVJlZ3MsIGFyZzJSZWdzKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKKworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGFyZzEpOworICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBhcmcxLnVzZSgpOworICAgIGFyZzIudXNlKCk7
CisKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGFyZzFSZWdzKSk7Cisg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICBz
bG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RJbnQzMihhcmcyUmVncykpOworCisgICAg
bV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFSZWdzLnBheWxvYWRHUFIoKSwgYXJnMlJlZ3MucGF5
bG9hZEdQUigpLCByZXN1bHRHUFIpOworCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5j
aGlsZDEoKS5ub2RlKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkp
KSB7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q29tcGFy
ZVNsb3dQYXRoR2VuZXJhdG9yPEpJVENvbXBpbGVyOjpKdW1wTGlzdD4+KAorICAgICAgICAgICAg
c2xvd1BhdGgsIHRoaXMsIGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFSZWdzLCBhcmcy
UmVncykpOworICAgIH0KKworICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBu
b2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5j
aE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3Bl
cmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJy
YW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90
VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOworCisgICAg
SklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29t
cGlsZXI6Ok5vblplcm87CisKKyAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJh
bmNoIHRvIHRoZSB0YWtlbiBibG9jay4KKyAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2gg
dGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBj
YW4gZmFsbCB0aHJvdWdoLgorICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgeworICAgICAg
ICBjb25kID0gSklUQ29tcGlsZXI6OmludmVydChjb25kKTsKKyAgICAgICAgY2FsbFJlc3VsdENv
bmRpdGlvbiA9IEpJVENvbXBpbGVyOjpaZXJvOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0
YWtlbjsKKyAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7
CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgSlNW
YWx1ZVJlZ3MgYXJnMVJlZ3MgPSBhcmcxLmpzVmFsdWVSZWdzKCk7CisgICAgSlNWYWx1ZVJlZ3Mg
YXJnMlJlZ3MgPSBhcmcyLmpzVmFsdWVSZWdzKCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CisKKyAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Cisg
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhcmcxLnVzZSgpOworICAgICAg
ICBhcmcyLnVzZSgpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMVJlZ3MsIGFyZzJSZWdzKTsK
KyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBicmFuY2hUZXN0MzIo
Y2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSLCB0YWtlbik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYXJnMik7CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYXJnMS51c2UoKTsKKyAg
ICAgICAgYXJnMi51c2UoKTsKKworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3RJbnQzMihhcmcxUmVncykpOworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOb3RJbnQzMihhcmcyUmVncykpOworCisgICAgICAgIGJyYW5jaDMyKGNvbmQsIGFyZzFS
ZWdzLnBheWxvYWRHUFIoKSwgYXJnMlJlZ3MucGF5bG9hZEdQUigpLCB0YWtlbik7CisKKyAgICAg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8ICFpc0tub3du
SW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICBqdW1wKG5vdFRh
a2VuLCBGb3JjZUp1bXApOworCisgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisK
KyAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFSZWdzLCBh
cmcyUmVncyk7CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CisgICAgICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICBicmFuY2hUZXN0MzIo
Y2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSLCB0YWtlbik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBqdW1wKG5vdFRha2VuKTsKKworICAgIG1faW5kZXhJbkJsb2NrID0gbV9ibG9jay0+
c2l6ZSgpIC0gMTsKKyAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKK30KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKaW5kZXggYzA5Zjk1NWUxMzE4Y2E1Zjc2ZDg2MGNlOGEyZWU2ZDcxZmQ5
NTU4OS4uZDEwYWQyYTg0YmMwMmJhZTk1ODdiZGNiNjY0ZWRkMzI3ZmViMmVkMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMzQ1LDExICsz
NDUsNiBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAKICAgICB2b2lkIGNvbXBpbGVTdG9yZUJh
cnJpZXIoTm9kZSopOwogCi0gICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJl
ZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQ
UlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQg
PSBJbnZhbGlkR1BSUmVnKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUihwcmVzZXJ2ZTEsIHByZXNlcnZlMiwgcHJlc2VydmUzLCBwcmVzZXJ2
ZTQpOwotICAgIH0KLQogICAgIC8vIENhbGxlZCBieSB0aGUgc3BlY3VsYXRpdmUgb3BlcmFuZCB0
eXBlcywgYmVsb3csIHRvIGZpbGwgb3BlcmFuZCB0bwogICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJz
LCBpbXBsaWNpdGx5IGdlbmVyYXRpbmcgc3BlY3VsYXRpb24gY2hlY2tzIGFzIG5lZWRlZC4KICAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludDMyKEVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1h
dCk7CkBAIC03MjUsMTQgKzcyMCwxMyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9p
ZCBjb21waWxlTW92SGludEFuZENoZWNrKE5vZGUqKTsKIAogICAgIHZvaWQgY2FjaGVkR2V0QnlJ
ZChDb2RlT3JpZ2luLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyByZXN1bHQsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0g
SklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwsIEFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXQpOworICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2Rl
T3JpZ2luLCBHUFJSZWcgYmFzZSwgSlNWYWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRU
b1NwaWxsKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENv
ZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBp
bGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsLCBBY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6R2V0KTsKLSAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwg
R1BSUmVnIGJhc2UsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwp
OwogICAgIHZvaWQgY2FjaGVkR2V0QnlJZFdpdGhUaGlzKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNl
R1BSLCBHUFJSZWcgdGhpc0dQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGls
ZXI6Okp1bXBMaXN0KCkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB2b2lkIGNhY2hl
ZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5vbmUsIEdQUlJlZyBiYXNl
UGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3Bp
bGwsIEFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXQpOwotICAgIHZvaWQgY2FjaGVkUHV0QnlJ
ZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwg
R1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0g
SklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwog
ICAgIHZvaWQgY2FjaGVkR2V0QnlJZFdpdGhUaGlzKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFn
R1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB0aGlzVGFnR1BST3JOb25l
LCBHUFJSZWcgdGhpc1BheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1
bHRQYXlsb2FkR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAjZW5kaWYK
IApAQCAtNzQ3LDcgKzc0MSw2IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICAKICAgICB2
b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkog
aGVscGVyRnVuY3Rpb24pOwogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBh
cmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwotICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJl
KE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19KSVRPcGVyYXRp
b25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKICAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVl
cGhvbGVTdHJpY3RFcShOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxz
ZSk7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9kZSosIGJv
b2wgaW52ZXJ0ID0gZmFsc2UpOwpAQCAtNzU2LDYgKzc0OSw3IEBAIGNsYXNzIFNwZWN1bGF0aXZl
SklUIHsKICAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mRm9yT2JqZWN0KE5vZGUqLCBHUFJSZWcg
dmFsdWVSZWcsIEdQUlJlZyBwcm90b3R5cGVSZWcsIEdQUlJlZyBzY3JhdGNoQW5kUmVzdWx0UmVn
LCBHUFJSZWcgc2NyYXRjaDJSZWcsIEdQUlJlZyBzY3JhdGNoM1JlZyk7CiAgICAgdm9pZCBjb21w
aWxlSW5zdGFuY2VPZihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSW5zdGFuY2VPZkN1c3RvbShO
b2RlKik7CisgICAgdm9pZCBjb21waWxlT3ZlcnJpZGVzSGFzSW5zdGFuY2UoTm9kZSopOwogCiAg
ICAgdm9pZCBjb21waWxlSXNDZWxsV2l0aFR5cGUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlz
VHlwZWRBcnJheVZpZXcoTm9kZSopOwpAQCAtMTM4Nyw2ICsxMzgxLDcgQEAgY2xhc3MgU3BlY3Vs
YXRpdmVKSVQgewogICAgIHZvaWQgY29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlTmV3UmVnZXhwKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFy
YXJncyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0
ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0RnJvbUFyZ3VtZW50
cyhOb2RlKik7CkBAIC0xNDA5LDEwICsxNDA0LDEyIEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsK
ICAgICB2b2lkIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3RHbG9iYWwoTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZVJlZ0V4cFRlc3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVN0cmluZ1JlcGxhY2Uo
Tm9kZSopOworICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVJc09iamVjdE9yTnVsbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlVHlwZU9mKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDaGVj
a0NlbGwoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUNoZWNrTm90RW1wdHkoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqKTsKICAgICB2b2lkIGVtaXRTdHJ1Y3R1
cmVDaGVjayhOb2RlKiwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKTsKICAgICB2b2lk
IGNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSopOwpAQCAtMTQ0Miw4ICsxNDM5LDEyIEBAIGNs
YXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3Ro
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVIYXNHZW5lcmljUHJvcGVydHkoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1dEJ5
SWRGbHVzaChOb2RlKik7CisgICAgdm9pZCBjb21waWxlUHV0QnlJZChOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZFdp
dGhUaGlzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2Rl
Kik7CisgICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0RW51
bWVyYXRvclBuYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxlKE5vZGUq
KTsKQEAgLTE0NjIsNiArMTQ2Myw4IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICB2b2lk
IGNvbXBpbGVUb1ByaW1pdGl2ZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93Q2hp
Y2tlblByb2xvZ3VlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuVGFp
bChOb2RlKik7CisgICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqKTsKKyAg
ICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKik7CiAKICAgICB2b2lkIG1vdmVU
cnVlVG8oR1BSUmVnKTsKICAgICB2b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRl
eCAzZmU1NjBlNmM2ZDI5MzA3NTgxNjViMDMyOGMzOWZhMjllZGM0YTE5Li41MWFiYTJjMDVlZTA5
Njk4YjdiYjc0MGNiNmUwZDZmYTVhZjM5ZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTI3MSwzNSArMjcxLDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhUaGlzKAogICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5
bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5k
LCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNw
aWxsTW9kZSkKLXsKLSAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJl
Z2lzdGVycygpOwotICAgIGlmIChzcGlsbE1vZGUgPT0gRG9udFNwaWxsKSB7Ci0gICAgICAgIC8v
IFdlJ3ZlIGFscmVhZHkgZmx1c2hlZCByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLCB3ZSBkb24ndCBu
ZWVkIHRvIHNwaWxsIHRoZXNlLgotICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChiYXNlUGF5bG9h
ZEdQUiwgZmFsc2UpOwotICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChKU1ZhbHVlUmVncyh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgZmFsc2UpOwotICAgIH0KLSAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhh
bmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgIEpTVmFsdWVSZWdzOjpw
YXlsb2FkT25seShiYXNlUGF5bG9hZEdQUiksIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1
ZVBheWxvYWRHUFIpLAotICAgICAgICBzY3JhdGNoR1BSLCBtX2ppdC5lY21hTW9kZUZvcihjb2Rl
T3JpZ2luKSwgcHV0S2luZCk7Ci0gICAgCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQp
OwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgaWYgKHNs
b3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhU
YXJnZXQpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLQotICAg
IGF1dG8gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywg
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgTm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVl
UmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwKLSAgICAgICAgICAgIEpTVmFsdWU6
OkpTQ2VsbFR5cGUsICBiYXNlUGF5bG9hZEdQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVt
YmVyKSk7Ci0KLSAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKLX0KLQogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmlu
ZWQoRWRnZSBvcGVyYW5kKQogewogICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5k
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtNDE4LDE2MiArMzg5LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVuZGVmaW5l
ZChFZGdlIG9wZXJhbmQsIE4KICAgICBqdW1wKG5vdFRha2VuKTsKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBi
cmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJ
VE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi17Ci0gICAgQmFzaWNCbG9jayogdGFrZW4g
PSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOwotICAgIEJhc2ljQmxvY2sq
IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKLQot
ICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJ
VENvbXBpbGVyOjpOb25aZXJvOwotCi0gICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxs
IGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCi0gICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dp
dGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28g
d2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKLSAg
ICAgICAgY29uZCA9IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCk7Ci0gICAgICAgIGNhbGxSZXN1
bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6WmVybzsKLSAgICAgICAgQmFzaWNCbG9jayogdG1w
ID0gdGFrZW47Ci0gICAgICAgIHRha2VuID0gbm90VGFrZW47Ci0gICAgICAgIG5vdFRha2VuID0g
dG1wOwotICAgIH0KLQotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAg
IEpTVmFsdWVSZWdzIGFyZzFSZWdzID0gYXJnMS5qc1ZhbHVlUmVncygpOwotICAgIEpTVmFsdWVS
ZWdzIGFyZzJSZWdzID0gYXJnMi5qc1ZhbHVlUmVncygpOwotICAgIEdQUlJlZyBhcmcxVGFnR1BS
ID0gYXJnMS50YWdHUFIoKTsKLSAgICBHUFJSZWcgYXJnMVBheWxvYWRHUFIgPSBhcmcxLnBheWxv
YWRHUFIoKTsKLSAgICBHUFJSZWcgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7Ci0gICAgR1BS
UmVnIGFyZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2FkR1BSKCk7Ci0gICAgCi0gICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpIHsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIGFy
ZzEudXNlKCk7Ci0gICAgICAgIGFyZzIudXNlKCk7Ci0KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcx
UmVncywgYXJnMlJlZ3MpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotCi0gICAg
ICAgIGJyYW5jaFRlc3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIsIHRha2VuKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgICAgICBhcmcxLnVz
ZSgpOwotICAgICAgICBhcmcyLnVzZSgpOwotCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGlmICghaXNL
bm93bkludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzJUYWdH
UFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAg
Ci0gICAgICAgIGJyYW5jaDMyKGNvbmQsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiwg
dGFrZW4pOwotICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAg
ICAgICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNlSnVtcCk7Ci0gICAgCi0gICAgICAgICAgICBz
bG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5j
dGlvbiwgcmVzdWx0R1BSLCBhcmcxUmVncywgYXJnMlJlZ3MpOwotICAgICAgICAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsK
LSAgICAgICAgCi0gICAgICAgICAgICBicmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwg
cmVzdWx0R1BSLCB0YWtlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBqdW1wKG5vdFRha2Vu
KTsKLSAgICAKLSAgICBtX2luZGV4SW5CbG9jayA9IG1fYmxvY2stPnNpemUoKSAtIDE7Ci0gICAg
bV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5vZGU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEp1bXBU
eXBlPgotY2xhc3MgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcgotICAgIDog
cHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpK
LCBHUFJSZWc+IHsKLXB1YmxpYzoKLSAgICBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2Vu
ZXJhdG9yKAotICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LAotICAg
ICAgICBTX0pJVE9wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsCi0gICAgICAgIEdQUlJlZyBhcmcyVGFnLCBHUFJS
ZWcgYXJnMlBheWxvYWQpCi0gICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBl
LCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4oCi0gICAgICAgICAgICBmcm9tLCBqaXQsIGZ1
bmN0aW9uLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVk
ZWQsIHJlc3VsdCkKLSAgICAgICAgLCBtX2FyZzFUYWcoYXJnMVRhZykKLSAgICAgICAgLCBtX2Fy
ZzFQYXlsb2FkKGFyZzFQYXlsb2FkKQotICAgICAgICAsIG1fYXJnMlRhZyhhcmcyVGFnKQotICAg
ICAgICAsIG1fYXJnMlBheWxvYWQoYXJnMlBheWxvYWQpCi0gICAgewotICAgIH0KLSAgICAKLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJ
VCogaml0KQotICAgIHsKLSAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKLSAgICAgICAgdGhpcy0+
cmVjb3JkQ2FsbCgKLSAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAg
ICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgSlNWYWx1ZVJlZ3MobV9hcmcx
VGFnLCBtX2FyZzFQYXlsb2FkKSwgSlNWYWx1ZVJlZ3MobV9hcmcyVGFnLCBtX2FyZzJQYXlsb2Fk
KSkpOwotICAgICAgICBqaXQtPm1faml0LmFuZDMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
MSksIHRoaXMtPm1fcmVzdWx0KTsKLSAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKLSAgICB9
Ci0gICAKLXByaXZhdGU6Ci0gICAgR1BSUmVnIG1fYXJnMVRhZzsKLSAgICBHUFJSZWcgbV9hcmcx
UGF5bG9hZDsKLSAgICBHUFJSZWcgbV9hcmcyVGFnOwotICAgIEdQUlJlZyBtX2FyZzJQYXlsb2Fk
OwotfTsKLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNv
bXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQotewotICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIEdQUlJlZyBhcmcxVGFnR1BSID0gYXJnMS50YWdH
UFIoKTsKLSAgICBHUFJSZWcgYXJnMVBheWxvYWRHUFIgPSBhcmcxLnBheWxvYWRHUFIoKTsKLSAg
ICBHUFJSZWcgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7Ci0gICAgR1BSUmVnIGFyZzJQYXls
b2FkR1BSID0gYXJnMi5wYXlsb2FkR1BSKCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IHNsb3dQYXRoOwotICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGls
ZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkp
IHsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBH
UFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICAgICAgYXJn
MS51c2UoKTsKLSAgICAgICAgYXJnMi51c2UoKTsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRQYXlsb2FkR1BS
LCBhcmcxLmpzVmFsdWVSZWdzKCksIGFyZzIuanNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIAotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3Vs
dFBheWxvYWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgUmV1c2UsIGFy
ZzEsIFBheWxvYWRXb3JkKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1
bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAgIGFyZzEudXNlKCk7Ci0gICAgICAgIGFyZzIudXNl
KCk7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+
Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzJUYWdHUFIsIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0KLSAgICAgICAgbV9qaXQuY29tcGFy
ZTMyKGNvbmQsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQ
Uik7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDb21wYXJlQW5kQm94
Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yPEpJVENvbXBpbGVyOjpKdW1wTGlzdD4+KAotICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgaGVscGVyRnVuY3Rpb24sIHJlc3VsdFBheWxv
YWRHUFIsIGFyZzFUYWdHUFIsCi0gICAgICAgICAgICAgICAgICAgIGFyZzFQYXlsb2FkR1BSLCBh
cmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUikpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7Ci0gICAgfQotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBp
bnZlcnQpCiB7CiAgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRh
KCktPnRha2VuLmJsb2NrOwpAQCAtNjc0LDI0ICs0ODksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZl
cnQpCiAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlz
Y1N0cmljdEVxKE5vZGUqIG5vZGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgIEpTVmFsdWVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
LSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAotICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gTWlzY1VzZSkKLSAgICAgICAgc3BlY3VsYXRlTWlzYyhub2RlLT5j
aGlsZDEoKSwgb3AxLmpzVmFsdWVSZWdzKCkpOwotICAgIGlmIChub2RlLT5jaGlsZDIoKS51c2VL
aW5kKCkgPT0gTWlzY1VzZSkKLSAgICAgICAgc3BlY3VsYXRlTWlzYyhub2RlLT5jaGlsZDIoKSwg
b3AyLmpzVmFsdWVSZWdzKCkpOwotICAgIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZXN1bHQuZ3ByKCkpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsID0gbV9qaXQu
YnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBvcDEudGFnR1BSKCksIG9wMi50YWdHUFIo
KSk7Ci0gICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxLnBheWxvYWRH
UFIoKSwgb3AyLnBheWxvYWRHUFIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICBub3RFcXVhbC5saW5r
KCZtX2ppdCk7Ci0gICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotfQotCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29tcGFyZUVxUHRyKE5vZGUqIG5vZGUpCiB7CiAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0zNjcw
LDEwICszNDY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgQ2hlY2tOb3RFbXB0eTogewotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBvcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIHRhZ0dQUiA9
IG9wZXJhbmQudGFnR1BSKCk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVERaRmFpbHVyZSwg
SlNWYWx1ZVNvdXJjZSgpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1
YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAg
ICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tOb3RFbXB0eShub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNzgxLDUxICszNTc1LDE3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5
SWRGbHVzaDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQotICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9
IHZhbHVlLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUu
cGF5bG9hZEdQUigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGJhc2VHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIs
IHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0LCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCgpLCBEb250U3BpbGwpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwor
ICAgICAgICBjb21waWxlUHV0QnlJZEZsdXNoKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgICAgIAorCiAgICAgY2FzZSBQdXRCeUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAg
R1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAKLSAgICAgICAgY2FjaGVk
UHV0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VHUFIsIHZhbHVlVGFnR1BSLCB2YWx1
ZVBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGly
ZWN0KTsKLSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxl
UHV0QnlJZChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlk
RGlyZWN0OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAKLSAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVU
YWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9
IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOwotICAgICAgICAKLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGJhc2VHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIHNjcmF0Y2hHUFIs
IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKLQotICAgICAgICBub1Jlc3VsdChu
b2RlKTsKKyAgICAgICAgY29tcGlsZVB1dEJ5SWREaXJlY3Qobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtMzg4OCwzOCArMzY0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIE92ZXJyaWRlc0hhc0luc3RhbmNl
OiB7Ci0KLSAgICAgICAgTm9kZSogaGFzSW5zdGFuY2VWYWx1ZU5vZGUgPSBub2RlLT5jaGlsZDIo
KS5ub2RlKCk7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9u
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKLQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm90RGVmYXVsdEhhc0luc3RhbmNlVmFs
dWU7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBoYXNJbnN0YW5jZVZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgY29uc3Rh
bnQgZm9sZGluZyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgdGhlIGNhc2Ugd2hlcmUgd2Uga25ldyB0
aGUgaGFzSW5zdGFuY2UgZnVuY3Rpb24KLSAgICAgICAgLy8gd2FzIGEgY29uc3RhbnQuIFVuZm9y
dHVuYXRlbHksIHRoZSBmb2xkaW5nIHJ1bGUgZm9yIE92ZXJyaWRlc0hhc0luc3RhbmNlIGlzIGlu
IHRoZSBzdHJlbmd0aCByZWR1Y3Rpb24gcGhhc2UKLSAgICAgICAgLy8gc2luY2UgaXQgcmVsaWVz
IG9uIE9TUiBpbmZvcm1hdGlvbi4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NDgzMgotICAgICAgICBpZiAoIWhhc0luc3RhbmNlVmFsdWVOb2RlLT5pc0NlbGxDb25z
dGFudCgpIHx8IGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9uICE9IGhhc0luc3RhbmNlVmFsdWVO
b2RlLT5hc0NlbGwoKSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgaGFzSW5zdGFuY2VWYWx1
ZVJlZ3MgPSBoYXNJbnN0YW5jZVZhbHVlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICBub3RE
ZWZhdWx0SGFzSW5zdGFuY2VWYWx1ZS5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGhhc0lu
c3RhbmNlVmFsdWVSZWdzKSk7Ci0gICAgICAgICAgICBub3REZWZhdWx0SGFzSW5zdGFuY2VWYWx1
ZS5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaGFzSW5z
dGFuY2VWYWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVy
YW5kKCkpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9y
ICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJy4KLSAgICAgICAgbV9qaXQudGVzdDgoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICBpZiAoIW5vdERl
ZmF1bHRIYXNJbnN0YW5jZVZhbHVlLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIG5vdERlZmF1bHRI
YXNJbnN0YW5jZVZhbHVlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIG1vdmVUcnVlVG8ocmVz
dWx0R1BSKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAg
ICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVPdmVycmlk
ZXNIYXNJbnN0YW5jZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDExLDIy
ICszNzQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IH0KIAogICAgIGNhc2UgSXNPYmplY3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IFJldXNlLCB2YWx1ZSwgVGFnV29yZCk7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNO
b3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOwotCi0g
ICAgICAgIG1faml0LmNvbXBhcmU4KEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCi0gICAgICAg
ICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZS5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUp
LAotICAgICAgICAgICAgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwot
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0LmdwcigpKTsKLQotICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUpOworICAgICAgICBjb21waWxlSXNPYmplY3Qobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtNDE2Niw1OSArMzg4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIExvYWRWYXJhcmdz
OiB7Ci0gICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0
YSgpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGFyZ3VtZW50c1RhZ0dQUjsKLSAgICAgICAg
R1BSUmVnIGFyZ3VtZW50c1BheWxvYWRHUFI7Ci0gICAgICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50
c1JlZ3M7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1l
bnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFy
Z3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQp
OwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAKLSAgICAgICAgbG9j
ayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBh
cmd1bWVudHNUYWdHUFIgPSBhcmd1bWVudHMudGFnR1BSKCk7Ci0gICAgICAgICAgICBhcmd1bWVu
dHNQYXlsb2FkR1BSID0gYXJndW1lbnRzLnBheWxvYWRHUFIoKTsKLSAgICAgICAgICAgIGFyZ3Vt
ZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0
IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlz
IHNhZmUKLSAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3Jp
dHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgICAg
IC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBj
YW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgICAgICAvLyBwYXN0
IHRoZSBzaXppbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDE0NDgKLQotICAgICAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BS
ID0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBhcmd1bWVudHNUYWdHUFIsIGFyZ3VtZW50c1BheWxvYWRHUFIpOwotICAg
ICAgICAKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsKLQotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCks
IEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAg
ICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOwotCi0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCi0gICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwg
RWRnZSgpLCBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWJvdmUsCi0gICAgICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLAotICAgICAg
ICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKLSAgICAgICAgCi0gICAgICAg
IG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBKSVRDb21waWxlcjo6cGF5
bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKLSAgICAgICAgCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwg
YXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0
YS0+bWFuZGF0b3J5TWluaW11bSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0g
ICAgICAgIAotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZUxvYWRWYXJh
cmdzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDQzMCwxNTIg
KzQwOTIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKLSAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgIEdQ
UlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKLQotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUt
PmFycmF5TW9kZSgpOwotICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAg
ICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTog
ewotICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBG
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBS
ID0gc2NyYXRjaC5mcHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFn
ZS5ncHIoKTsKLQotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwot
ICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNjcmF0Y2hG
UFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hEb3VibGUoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHNjcmF0Y2hGUFIsIHNjcmF0
Y2hGUFIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkp
OwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMo
KSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQotICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBtb3ZlVHJ1ZVRvKHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3Vs
dFBheWxvYWRHUFIpLCBiYXNlR1BSLCBpbmRleEdQUiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9k
ZS0+aW50ZXJuYWxNZXRob2RUeXBlKCkpKSk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKLSAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsK
KyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgRWRnZSYgYmFzZUVk
Z2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICBFZGdlJiBw
cm9wZXJ0eUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotCi0gICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOwotICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5LmdwcigpOwotCi0jaWYgQ1BVKFg4NikKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7Ci0KLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOwotCi0gICAgICAgIC8vIE5vdCBlbm91Z2ggcmVnaXN0ZXJzIG9uIFg4NiBmb3IgdGhpcyBj
b2RlLCBzbyBhbHdheXMgdXNlIHRoZSBzbG93IHBhdGguCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7Ci0gICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwot
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENl
bGwsIHJlc3VsdFJlZ3MsIGJhc2VHUFIsIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIsIHByb3BlcnR5
R1BSKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0jZWxzZQotICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0KLSAg
ICAgICAgRWRnZSYgaW5kZXhFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAy
KTsKLSAgICAgICAgRWRnZSYgZW51bWVyYXRvckVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0No
aWxkKG5vZGUsIDMpOwotCi0gICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlz
LCBpbmRleEVkZ2UpOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRo
aXMsIGVudW1lcmF0b3JFZGdlKTsKLQotICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOwot
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLQotICAgICAgICAv
LyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNo
MzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAotICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFu
IHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5s
aW5lIGFjY2VzcwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3Mg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCAKLSAgICAgICAg
ICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLQot
ICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQu
c2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3Mu
dGFnR1BSKCkpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChiYXNlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgICAgICBvdXRPZkxpbmVBY2Nlc3Mu
bGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIpOwotICAgICAg
ICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgLy8gV2UgdXNlIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpIGFzIGEgdGVtcG9yYXJ5IGhlcmUu
IFdlIGhhdmUgdG8gbWFrZSBzdXJlIGNsb2JiZXIgaXQgYWZ0ZXIgZ2V0dGluZyB0aGUgCi0gICAg
ICAgIC8vIHZhbHVlIG91dCBvZiBpbmRleEdQUiBhbmQgZW51bWVyYXRvckdQUiBiZWNhdXNlIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpIGNvdWxkIHJldXNlIGVpdGhlciBvZiB0aG9zZSByZWdpc3Rl
cnMuCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwotICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7Ci0gICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwot
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBiYXNlR1BSLCBKU1ZhbHVlOjpK
U0NlbGxUeXBlLCBwcm9wZXJ0eUdQUikpOwotI2VuZGlmCi0KLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1lKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6
IHsKQEAgLTQ3NDAsMTkgKzQyNjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDog
ewotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHRhZyh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHBheWxvYWQodGhpcyk7Ci0KLSAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICBHUFJSZWcgdGFnR1BSID0g
dGFnLmdwcigpOwotICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IHBheWxvYWQuZ3ByKCk7Ci0K
LSAgICAgICAgSlNWYWx1ZSogcHRyID0gJnJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KG1faml0
LmppdENvZGUoKS0+Y29tbW9uLmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlbbm9k
ZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCldOwotICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihwdHIpLCB0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEND
YWxsSGVscGVyczo6QWRkcmVzcyh0ZW1wR1BSLCBUYWdPZmZzZXQpLCB0YWdHUFIpOwotICAgICAg
ICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHRlbXBHUFIsIFBheWxvYWRPZmZz
ZXQpLCBwYXlsb2FkR1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdCh0YWdHUFIsIHBheWxvYWRH
UFIsIG5vZGUpOworICAgICAgICBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDg0OCw1OSArNDM1Nyw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcml0aFJhbmRvbShOb2RlKiBub2RlKQogICAgIGRvdWJsZVJlc3VsdChy
ZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0SW5pdGlh
bGl6ZUJ1dHRlcmZseShHUFJSZWcgc3RvcmFnZUdQUiwgR1BSUmVnIHNpemVHUFIsIEpTVmFsdWVS
ZWdzIGVtcHR5VmFsdWVSZWdzLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBtX2ppdC5tb3Zl
KHNpemVHUFIsIHNjcmF0Y2hHUFIpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKLSAgICBtX2ppdC5z
dWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgIG1faml0LnN0b3JlMzIoZW1w
dHlWYWx1ZVJlZ3MudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgbV9qaXQuc3RvcmUzMihlbXB0eVZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0g
ICAgZG9uZS5saW5rKCZtX2ppdCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgR1BS
UmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNpemVHUFIsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUs
IGJvb2wgc2hvdWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlKQotewotICAgIEdQUlRl
bXBvcmFyeSBzdG9yYWdlKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwot
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLSAgICAKLSAgICBHUFJSZWcgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOwotICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwotICAgIAotICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgc3RvcmFnZUdQUik7Ci0gICAgICAg
ICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIGlmIChz
aG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UpCi0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQ
UiwgVHJ1c3RlZEltbTMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSk7
Ci0KLSAgICAvLyBXZSBjYW4gdXNlIHJlc3VsdCBhcyBhIHNjcmF0Y2ggZm9yIHRoaXMuCi0gICAg
ZW1pdEFsbG9jYXRlQnV0dGVyZmx5KHN0b3JhZ2VHUFIsIHNpemVHUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCByZXN1bHRHUFIsIHNsb3dDYXNlcyk7Ci0KLSAgICBKU1ZhbHVlIGhvbGU7Ci0g
ICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUpKQotICAgICAgICBob2xlID0gSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgUE5hTik7Ci0gICAgZWxzZQotICAgICAgICBob2xlID0g
SlNWYWx1ZSgpOwotICAgIEpTVmFsdWVSZWdzIGVtcHR5VmFsdWVSZWdzKHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihob2xlLnRhZygpKSwgZW1w
dHlWYWx1ZVJlZ3MudGFnR1BSKCkpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKGhvbGUu
cGF5bG9hZCgpKSwgZW1wdHlWYWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICAvLyBXZSBjYW4g
dXNlIHJlc3VsdCBhcyBhIHNjcmF0Y2ggZm9yIHRoaXMuCi0gICAgZW1pdEluaXRpYWxpemVCdXR0
ZXJmbHkoc3RvcmFnZUdQUiwgc2l6ZUdQUiwgZW1wdHlWYWx1ZVJlZ3MsIHJlc3VsdEdQUik7Ci0g
ICAgICAgICAgICAKLSAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0Lmdy
YXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSk7Ci0KLSAgICBlbWl0QWxs
b2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7Ci0KLSAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRv
cldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCi0gICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLAotICAgICAgICBzdHJ1
Y3R1cmUsCi0gICAgICAgIHNob3VsZENvbnZlcnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSA/IG1f
aml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkg
OiBzdHJ1Y3R1cmUsCi0gICAgICAgIHNpemVHUFIsIHN0b3JhZ2VHUFIpKTsKLX0KLQogI2VuZGlm
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDViMDNjMTQ2YTA4NDE0NWZkMDg1
OGI5NmJmYmZlM2ZmOTA1YjIyYWUuLjc2YTY0MmRmNzhiMTg4NTM1MDVjYTFkZjNkZjNjMjM5ZjE0
MDUzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcApAQCAtMjE2LDM1ICsyMTYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRHZXRCeUlkV2l0aFRoaXMoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUgog
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJl
ZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQotewotICAgIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9u
SGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0g
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLSAg
ICBpZiAoc3BpbGxNb2RlID09IERvbnRTcGlsbCkgewotICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5
IGZsdXNoZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjaywgd2UgZG9uJ3QgbmVlZCB0byBzcGlsbCB0
aGVzZS4KLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoYmFzZUdQUiwgZmFsc2UpOwotICAgICAg
ICB1c2VkUmVnaXN0ZXJzLnNldCh2YWx1ZUdQUiwgZmFsc2UpOwotICAgIH0KLQotICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdp
biwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAotICAgICAg
ICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIG1faml0LmVjbWFNb2RlRm9yKGNv
ZGVPcmlnaW4pLCBwdXRLaW5kKTsKLQotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsK
LSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIGlmIChzbG93
UGF0aFRhcmdldC5pc1NldCgpKQotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFy
Z2V0KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgCi0g
ICAgYXV0byBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBOb1Jlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIHZhbHVl
R1BSLCBiYXNlR1BSLAotICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsK
LQotICAgIG1faml0LmFkZFB1dEJ5SWQoZ2VuLCBzbG93UGF0aC5nZXQoKSk7Ci0gICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChFZGdl
IG9wZXJhbmQpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSB8fCAhaXNLbm93bkNlbGwob3BlcmFuZC5ub2Rl
KCkpLCAiVGhlIENvbXBhcmUgc2hvdWxkIGhhdmUgYmVlbiBlbGltaW5hdGVkLCBpdCBpcyBrbm93
biB0byBiZSBhbHdheXMgZmFsc2UuIik7CkBAIC0zNTcsMTUyICszMjgsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKEVk
Z2Ugb3BlcmFuZCwgTgogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVs
cGVyRnVuY3Rpb24pCi17Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFu
Y2hEYXRhKCktPnRha2VuLmJsb2NrOwotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNo
Tm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKLQotICAgIEpJVENvbXBpbGVyOjpS
ZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJv
OwotCi0gICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFr
ZW4gYmxvY2suCi0gICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90
VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3Vn
aC4KLSAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKLSAgICAgICAgY29uZCA9IEpJVENv
bXBpbGVyOjppbnZlcnQoY29uZCk7Ci0gICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRD
b21waWxlcjo6WmVybzsKLSAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47Ci0gICAgICAg
IHRha2VuID0gbm90VGFrZW47Ci0gICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgIH0KLQotICAg
IEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEpTVmFsdWVP
cGVyYW5kIGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIEdQUlJlZyBhcmcxR1BSID0g
YXJnMS5ncHIoKTsKLSAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7Ci0gICAgCi0gICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAgIGlmIChpc0tub3duTm90
SW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpIHsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAot
ICAgICAgICBhcmcxLnVzZSgpOwotICAgICAgICBhcmcyLnVzZSgpOwotICAgIAotICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCBy
ZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwotCi0gICAgICAgIGJyYW5jaFRlc3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRH
UFIsIHRha2VuKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIFJldXNlLCBhcmcyKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLSAgICAKLSAgICAgICAgYXJnMS51c2UoKTsKLSAgICAgICAgYXJnMi51c2UoKTsKLSAgICAK
LSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAg
IGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFy
ZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgIAotICAgICAgICBi
cmFuY2gzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSLCB0YWtlbik7Ci0gICAgCi0gICAgICAgIGlm
ICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCAhaXNLbm93bkludGVn
ZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICAgICAganVtcChub3RUYWtlbiwg
Rm9yY2VKdW1wKTsKLSAgICAKLSAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAg
ICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIs
IGFyZzJHUFIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwotICAgICAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAgICAgICAgICBicmFu
Y2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSLCB0YWtlbik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBqdW1wKG5vdFRha2VuKTsKLQotICAgIG1faW5kZXhJbkJsb2NrID0g
bV9ibG9jay0+c2l6ZSgpIC0gMTsKLSAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+Ci1jbGFzcyBDb21wYXJlQW5kQm94Qm9vbGVh
blNsb3dQYXRoR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1
bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4gewotcHVibGljOgotICAgIENvbXBh
cmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIEp1bXBUeXBlIGZyb20s
IFNwZWN1bGF0aXZlSklUKiBqaXQsCi0gICAgICAgIFNfSklUT3BlcmF0aW9uX0VKSiBmdW5jdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQotICAgICAgICA6IENh
bGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+
KAotICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlv
bkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLCByZXN1bHQpCi0gICAgICAgICwgbV9hcmcx
KGFyZzEpCi0gICAgICAgICwgbV9hcmcyKGFyZzIpCi0gICAgewotICAgIH0KLSAgICAKLXByb3Rl
Y3RlZDoKLSAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIHRoaXMtPnNldFVwKGppdCk7Ci0gICAgICAgIHRoaXMtPnJl
Y29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVz
dWx0LCBtX2FyZzEsIG1fYXJnMikpOwotICAgICAgICBqaXQtPm1faml0LmFuZDMyKEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIoMSksIHRoaXMtPm1fcmVzdWx0KTsKLSAgICAgICAgaml0LT5tX2pp
dC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHRoaXMtPm1fcmVz
dWx0KTsKLSAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKLSAgICB9Ci0gICAKLXByaXZhdGU6
Ci0gICAgR1BSUmVnIG1fYXJnMTsKLSAgICBHUFJSZWcgbV9hcmcyOwotfTsKLQotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9kZSwg
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25f
RUpKIGhlbHBlckZ1bmN0aW9uKQotewotICAgIEFTU0VSVChub2RlLT5pc0JpbmFyeVVzZUtpbmQo
VW50eXBlZFVzZSkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAg
IEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKLSAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIu
Z3ByKCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAot
ICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25v
d25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAgICAgICAgR1BSRmx1c2hl
ZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwotICAgIAotICAgICAgICBhcmcxLnVzZSgpOwotICAgICAgICBhcmcyLnVzZSgp
OwotICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQub3IzMihUcnVz
dGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgUmV1c2UsIGFyZzIpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwotCi0gICAgICAgIGFyZzEudXNlKCk7Ci0gICAgICAgIGFyZzIudXNlKCk7Ci0g
ICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkK
LSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAg
ICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCi0gICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAKLSAgICAg
ICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7Ci0g
ICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENvbXBhcmVBbmRCb3hC
b29sZWFuU2xvd1BhdGhHZW5lcmF0b3I8SklUQ29tcGlsZXI6Okp1bXBMaXN0Pj4oCi0gICAgICAg
ICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFH
UFIsIGFyZzJHUFIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOwotICAgIH0KLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wg
aW52ZXJ0KQogewogICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0
YSgpLT50YWtlbi5ibG9jazsKQEAgLTU3NSw4ICs0MDAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZl
cnQpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSUmVn
IGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsK
KyAgICBKU1ZhbHVlUmVncyBhcmcxUmVncyA9IGFyZzEuanNWYWx1ZVJlZ3MoKTsKKyAgICBKU1Zh
bHVlUmVncyBhcmcyUmVncyA9IGFyZzIuanNWYWx1ZVJlZ3MoKTsKICAgICAKICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CkBAIC01ODgsNzEgKzQxMyw1MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgICAgIC8v
IHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5
IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBz
dHJpY3RseSBlcXVhbC4KICAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGZsdXNoIHJlZ2lz
dGVycyBpbnN0ZWFkIG9mIHNpbGVudCBzcGlsbC9maWxsLgotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWws
IGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENh
c2UgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFSZWdzLmdwcigp
LCBhcmcyUmVncy5ncHIoKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCBy
ZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tNjQo
IWludmVydCksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogCiAgICAgICAgIG5vdEVxdWFsQ2FzZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgIAogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJl
c3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBhcmcxUmVncywgYXJnMlJlZ3MpOwog
ICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hbmQ2NChKSVRDb21waWxlcjo6VHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2ppdC5vcjY0KGFy
ZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIHR3b0NlbGxzQ2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVy
bywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbGVmdE9LID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6
OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
LSAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBp
bGVyOjpOb25aZXJvLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
LSAgICAgICAgbGVmdE9LLmxpbmsoJm1faml0KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
cmlnaHRPSyA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIGFyZzJH
UFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIHNsb3dQYXRoQ2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMkdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgIHJpZ2h0T0subGlu
aygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuY29tcGFyZTY0KGludmVydCA/IEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQ
UiwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQub3IzMihKSVRDb21waWxlcjo6VHJ1c3RlZElt
bTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHR3b0NlbGxz
Q2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUikpOwotICAgICAg
ICAKLSAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oIWludmVydCkpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q29tcGFyZUFuZEJveEJv
b2xlYW5TbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+PigKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYXNlcywgdGhpcywgb3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCByZXN1bHRHUFIsIGFyZzFHUFIsCi0gICAgICAgICAgICAgICAgICAgIGFyZzJHUFIpKTsK
LSAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICB1bmJsZXNzZWRC
b29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLX0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU1pc2NTdHJpY3RFcShOb2RlKiBub2RlKQotewotICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICBKU1ZhbHVl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAKLSAgICBpZiAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IE1pc2NVc2UpCi0gICAgICAgIHNwZWN1bGF0ZU1pc2Mobm9k
ZS0+Y2hpbGQxKCksIG9wMS5qc1ZhbHVlUmVncygpKTsKLSAgICBpZiAobm9kZS0+Y2hpbGQyKCku
dXNlS2luZCgpID09IE1pc2NVc2UpCi0gICAgICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQy
KCksIG9wMi5qc1ZhbHVlUmVncygpKTsKLSAgICAKLSAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29t
cGlsZXI6OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICBt
X2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Cisg
ICAgbV9qaXQub3I2NChhcmcxUmVncy5ncHIoKSwgYXJnMlJlZ3MuZ3ByKCksIHJlc3VsdEdQUik7
CisKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKKworICAgIEpJVENv
bXBpbGVyOjpKdW1wIHR3b0NlbGxzQ2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxl
cjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworCisgICAgSklU
Q29tcGlsZXI6Okp1bXAgbGVmdE9LID0gbV9qaXQuYnJhbmNoSWZJbnQzMihhcmcxUmVncyk7Cisg
ICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOdW1iZXIoYXJnMVJlZ3MsIElu
dmFsaWRHUFJSZWcpKTsKKyAgICBsZWZ0T0subGluaygmbV9qaXQpOworICAgIEpJVENvbXBpbGVy
OjpKdW1wIHJpZ2h0T0sgPSBtX2ppdC5icmFuY2hJZkludDMyKGFyZzJSZWdzKTsKKyAgICBzbG93
UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk51bWJlcihhcmcyUmVncywgSW52YWxpZEdQ
UlJlZykpOworICAgIHJpZ2h0T0subGluaygmbV9qaXQpOworCisgICAgbV9qaXQuY29tcGFyZTY0
KGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgYXJn
MVJlZ3MuZ3ByKCksIGFyZzJSZWdzLmdwcigpLCByZXN1bHRHUFIpOworCisgICAgSklUQ29tcGls
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIHR3b0NlbGxzQ2FzZS5saW5rKCZt
X2ppdCk7CisgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoNjQoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBhcmcxUmVncy5ncHIoKSwgYXJnMlJlZ3MuZ3ByKCkpKTsKKworICAgIG1f
aml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NCghaW52ZXJ0KSwgcmVzdWx0R1BSKTsK
KworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q29tcGFyZVNsb3dQ
YXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4+KAorICAgICAgICBzbG93UGF0
aENhc2VzLCB0aGlzLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMVJl
Z3MsIGFyZzJSZWdzKSk7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgIHVuYmxlc3Nl
ZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlKQpAQCAtMzg2NCwxMCArMzY3MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIENoZWNrTm90RW1wdHk6IHsKLSAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQ
UlJlZyBncHIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFREWkZh
aWx1cmUsIEpTVmFsdWVTb3VyY2UoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENv
bXBpbGVyOjpaZXJvLCBncHIpKTsKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNv
bXBpbGVDaGVja05vdEVtcHR5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM5
ODksMzMgKzM3OTIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZEZsdXNoOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAg
ICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYmFzZUdQUiwgdmFsdWVH
UFIsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCgpLCBEb250U3BpbGwpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUp
OworICAgICAgICBjb21waWxlUHV0QnlJZEZsdXNoKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlJZDogewotICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGNhY2hlZFB1
dEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQ
Uiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOwotCi0gICAgICAgIG5vUmVz
dWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0QnlJZChub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC00MDQzLDE3ICszODI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewotICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAg
Ci0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBiYXNlR1BSLCB2
YWx1ZUdQUiwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwot
Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0QnlJZERpcmVjdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MTMxLDM4ICszOTAzLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
T3ZlcnJpZGVzSGFzSW5zdGFuY2U6IHsKLQotICAgICAgICBOb2RlKiBoYXNJbnN0YW5jZVZhbHVl
Tm9kZSA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKLSAgICAgICAgSlNGdW5jdGlvbiogZGVmYXVs
dEhhc0luc3RhbmNlRnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG5vZGUtPmNlbGxPcGVy
YW5kKCktPnZhbHVlKCkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdERlZmF1
bHQ7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBoYXNJbnN0YW5jZVZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgY29uc3Rh
bnQgZm9sZGluZyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgdGhlIGNhc2Ugd2hlcmUgd2Uga25ldyB0
aGUgaGFzSW5zdGFuY2UgZnVuY3Rpb24KLSAgICAgICAgLy8gd2FzIGEgY29uc3RhbnQuIFVuZm9y
dHVuYXRlbHksIHRoZSBmb2xkaW5nIHJ1bGUgZm9yIE92ZXJyaWRlc0hhc0luc3RhbmNlIGlzIGlu
IHRoZSBzdHJlbmd0aCByZWR1Y3Rpb24gcGhhc2UKLSAgICAgICAgLy8gc2luY2UgaXQgcmVsaWVz
IG9uIE9TUiBpbmZvcm1hdGlvbi4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NDgzMgotICAgICAgICBpZiAoIWhhc0luc3RhbmNlVmFsdWVOb2RlLT5pc0NlbGxDb25z
dGFudCgpIHx8IGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9uICE9IGhhc0luc3RhbmNlVmFsdWVO
b2RlLT5hc0NlbGwoKSkgewotICAgICAgICAgICAgR1BSUmVnIGhhc0luc3RhbmNlVmFsdWVHUFIg
PSBoYXNJbnN0YW5jZVZhbHVlLmdwcigpOwotICAgICAgICAgICAgbm90RGVmYXVsdCA9IG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGhhc0luc3RhbmNlVmFsdWVHUFIs
IFRydXN0ZWRJbW1QdHIobm9kZS0+Y2VsbE9wZXJhbmQoKSkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBiYXNlICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJy4KLSAg
ICAgICAgbV9qaXQudGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0
R1BSKTsKLSAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7
Ci0KLSAgICAgICAgaWYgKG5vdERlZmF1bHQuaXNTZXQoKSkgewotICAgICAgICAgICAgbm90RGVm
YXVsdC5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtb3ZlVHJ1ZVRvKHJlc3VsdEdQUik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBjb21w
aWxlT3ZlcnJpZGVzSGFzSW5zdGFuY2Uobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtNDE3Niw3ICszOTE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIElzRW1wdHk6IHsgICAgICAg
IAorICAgIGNhc2UgSXNFbXB0eTogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1
c2UsIHZhbHVlKTsKIApAQCAtNDU5NywyMyArNDMzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIElzT2JqZWN0OiB7Ci0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgdmFsdWUpOwotCi0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZS5qc1Zh
bHVlUmVncygpKTsKLQotICAgICAgICBtX2ppdC5jb21wYXJlOChKSVRDb21waWxlcjo6QWJvdmVP
ckVxdWFsLAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWUuZ3ByKCksIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpLAotICAgICAgICAgICAgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgbV9qaXQub3Iz
MihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgaXNOb3RDZWxsLmxp
bmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSks
IHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAg
ICAgICAgY29tcGlsZUlzT2JqZWN0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTQ2NjYsNTUgKzQzOTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewotICAgICAgICBM
b2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAg
Ci0gICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7Ci0gICAgICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIs
IGRhdGEtPm9mZnNldCk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAg
IAotICAgICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgewotICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKLSAgICAgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdW5sb2NrKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNo
YW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNl
LiBUaGlzIGlzIHNhZmUKLSAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0n
cyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNl
Ci0gICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3
aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgICAg
ICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKLQotICAgICAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRp
bmdUaGlzR1BSID0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIpOwotICAgICAgICAKLSAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJn
Q291bnRJbmNsdWRpbmdUaGlzR1BSKTsKLQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQu
YnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAg
ICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICAgICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUikpOwotCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAg
ICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5i
cmFuY2gzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAg
ICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLAotICAgICAgICAgICAgICAgIFRydXN0
ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIo
YXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5t
YWNoaW5lQ291bnQpKTsKLSAgICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TG9hZFZhcmFyZ3MsIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzR1BSLCBk
YXRhLT5vZmZzZXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5p
bXVtKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAgICAg
IG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00OTQ2LDE0MiArNDYyMywxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJy
YXlNb2RlKCk7Ci0gICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAg
ICAgIEFTU0VSVCghIW5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3Vu
ZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCi0g
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgMCwgb3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwotCi0gICAgICAgICAgICBtX2ppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BS
KSk7Ci0gICAgICAgICAgICBtb3ZlVHJ1ZVRvKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAg
IEFTU0VSVCghIW5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnBy
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwotICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG91dE9mQm91bmRz
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91
dE9mQm91bmRzKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksIHNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHNj
cmF0Y2hGUFIsIHNjcmF0Y2hGUFIpKTsKLSAgICAgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BS
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOwotICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQotICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAobW9kZS5pc0lu
Qm91bmRzKCkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywg
SlNWYWx1ZVJlZ3MoKSwgMCwgb3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgZWxzZSAgICAKLSAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLQotICAgICAgICAg
ICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5k
ZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOwotICAgICAg
ICAgICAgbW92ZVRydWVUbyhyZXN1bHRHUFIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCByZXN1bHRHUFIsIGJhc2VHUFIsIGlu
ZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkp
KTsKLSAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAg
ICAgICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDAp
OwotICAgICAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDEpOwotICAgICAgICBFZGdlJiBpbmRleEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDIpOwotICAgICAgICBFZGdlJiBlbnVtZXJhdG9yRWRnZSA9IG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMyk7Ci0KLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIHByb3BlcnR5RWRnZSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBpbmRleEVkZ2UpOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwot
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Ci0KLSAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKLSAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0g
c2NyYXRjaDEuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdw
cigpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLQotICAg
ICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoMUdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgIG1faml0
LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0g
ICAgICAgICAgICAgICAgc2NyYXRjaDFHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgICAgICAvLyBJZiBpbmRleCBpcyBs
ZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQn
cyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIAot
ICAgICAgICAgICAgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSkpOwotCi0gICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJh
c2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKLQotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgLy8gT3Ro
ZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7Ci0gICAgICAg
IG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2gxR1BSKTsKLSAgICAgICAgbV9qaXQuc3ViMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwotICAg
ICAgICBtX2ppdC5uZWczMihzY3JhdGNoMUdQUik7Ci0gICAgICAgIG1faml0LnNpZ25FeHRlbmQz
MlRvUHRyKHNjcmF0Y2gxR1BSLCBzY3JhdGNoMUdQUik7Ci0gICAgICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoMUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSksIHJlc3VsdEdQUik7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbCwgcmVzdWx0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOwotCi0gICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldERpcmVj
dFBuYW1lKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRQcm9wZXJ0
eUVudW1lcmF0b3I6IHsKQEAgLTUyMDIsMTIgKzQ3NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFeHRyYWN0
Q2F0Y2hMb2NhbDogewotICAgICAgICBKU1ZhbHVlKiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxK
U1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0
YUJ1ZmZlcigpKVtub2RlLT5jYXRjaE9TUkVudHJ5SW5kZXgoKV07Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0g
ICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHB0ciksIHRlbXBH
UFIpOwotICAgICAgICBtX2ppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHRlbXBHUFIp
LCB0ZW1wR1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKKyAgICAg
ICAgY29tcGlsZUV4dHJhY3RDYXRjaExvY2FsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTU0MzUsNTUgKzQ5NzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJp
dGhSYW5kb20oTm9kZSogbm9kZSkKICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEluaXRpYWxpemVCdXR0ZXJmbHkoR1BS
UmVnIHN0b3JhZ2VHUFIsIEdQUlJlZyBzaXplR1BSLCBKU1ZhbHVlUmVncyBlbXB0eVZhbHVlUmVn
cywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoc2l6
ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOwotICAgIG1faml0LnN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3RvcmU2NChlbXB0eVZh
bHVlUmVncy5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3Jh
dGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCkpOwotICAgIG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZt
X2ppdCk7Ci0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNpemVHUFIsIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUsIGJvb2wgc2hvdWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlKQotewot
ICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLSAgICAKLSAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoLmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwot
ICAgIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgc3RvcmFnZUdQUik7
Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBpZiAo
c2hvdWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlKQotICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVH
UFIsIFRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSkp
OwotICAgICAgICAgICAgCi0gICAgLy8gV2UgY2FuIHVzZSByZXN1bHRHUFIgYXMgYSBzY3JhdGNo
IHJpZ2h0IG5vdy4KLSAgICBlbWl0QWxsb2NhdGVCdXR0ZXJmbHkoc3RvcmFnZUdQUiwgc2l6ZUdQ
UiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLQotICAg
IGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7Ci0gICAgZWxz
ZQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIHNjcmF0Y2hHUFIpOwotICAgIGVtaXRJbml0aWFsaXplQnV0dGVyZmx5KHN0b3JhZ2VH
UFIsIHNpemVHUFIsIEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpLCBzY3JhdGNoMkdQUik7Ci0KLSAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJT
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSk7Ci0KLSAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxK
U0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgbV9qaXQubXV0
YXRvckZlbmNlKCptX2ppdC52bSgpKTsKLSAgICAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
dGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0
aEdlbmVyYXRvcj4oCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZSwgcmVzdWx0R1BSLAotICAgICAgICBzdHJ1Y3R1cmUsCi0gICAgICAgIHNob3VsZENv
bnZlcnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSA/IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkgOiBzdHJ1Y3R1cmUsCi0gICAgICAgIHNp
emVHUFIsIHN0b3JhZ2VHUFIpKTsKLX0KLQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCA3MWEyZTU4MTI2MDRjMzg1YzIwMzA1OWRjYjYzMTE5NWYxYmQzN2I0Li41MGYyNmJiMjUw
OGIyZGVkYzlmNzQ0MzhkNGZkYWRiMGI4NmIyOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xMDAzNCw5ICsxMDAzNCw4IEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBtX291dC5icmFuY2goY2hlY2tIb2xlUmVzdWx0
VmFsdWUsIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAKICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5lcXVhbCgK
LSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwg
aW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgbV9vdXQubm90WmVy
bzY0KHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9w
ZXJ0eUJ5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUp
KSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMTAwNzEsOSArMTAw
NzAsOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGNo
ZWNrSG9sZVJlc3VsdFZhbHVlLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2Fz
ZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIAotICAgICAgICAgICAgICAgIHZt
Q2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5
SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7Cisg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAg
ICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCksIG1fY2FsbEZyYW1lLCBiYXNlLCBp
bmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTEwMTA3LDkgKzEwMTA1LDggQEAgY2xhc3MgTG93ZXJE
RkdUb0IzIHsKICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChjaGVja0hvbGVSZXN1bHRWYWx1ZSwg
dXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKAotICAgICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLAotICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4LCBp
bnRlcm5hbE1ldGhvZFR5cGUpKSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNh
bGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUlu
dCksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOwogICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTEwMTIxLDkgKzEwMTE4LDcgQEAg
Y2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgTFZhbHVlIGludGVybmFsTWV0aG9kVHlwZSA9
IG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9ub2RlLT5pbnRlcm5hbE1l
dGhvZFR5cGUoKSkpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbCgKLSAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSwKLSAgICAgICAgICAgICAgICB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCwg
aW50ZXJuYWxNZXRob2RUeXBlKSkpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3Ra
ZXJvNjQodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5QnlJbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlw
ZSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDE4ODI4OTZlMTA2OGQ3
NDE1ZmUxYmJmZWUwMGExNWM1ZDJiMzQ5ODAuLjE0ZWRkM2ZkMTcwYTA4ZDEyMGZiNzc3OTNiYzA5
YmUyZTlhZDY3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaApAQCAtMTY0LDggKzE2NCw4IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBN
YWNyb0Fzc2VtYmxlciB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgbG9hZDY0KGFkZHJl
c3MsIHJlZ3MuZ3ByKCkpOwogI2Vsc2UKLSAgICAgICAgbG9hZDMyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBQYXlsb2FkT2Zmc2V0KSwgcmVn
cy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBsb2FkMzIoYml0d2lzZV9jYXN0PHZvaWQqPihiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSArIFRhZ09mZnNldCksIHJlZ3MudGFnR1BSKCkp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIHJlZ3MucGF5bG9hZEdQUigp
KTsKKyAgICAgICAgbG9hZFZhbHVlKEFkZHJlc3MocmVncy5wYXlsb2FkR1BSKCkpLCByZWdzKTsK
ICNlbmRpZgogICAgIH0KICAgICAKQEAgLTEwMDksMjQgKzEwMDksNTMgQEAgY2xhc3MgQXNzZW1i
bHlIZWxwZXJzIDogcHVibGljIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgcmV0dXJuIGNhbGxl
ZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVz
ZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywg
R1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZh
bGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU1ID0gSW52YWxpZEdQUlJlZykKKyAgICBzdGF0aWMg
R1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoUmVnaXN0ZXJTZXQgcHJlc2VydmVkKQogICAgIHsKLSAg
ICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTIgIT0gR1BS
SW5mbzo6cmVnVDAgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlNCAh
PSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTUgIT0gR1BSSW5mbzo6cmVnVDApCi0gICAgICAg
ICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDA7CisgICAgICAgIEdQUlJlZyByZWdpc3RlcnNbXSA9
IHsKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVn
VDEsCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMiwKKyAgICAgICAgICAgIEdQUkluZm86OnJl
Z1QzLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDQsCisgICAgICAgICAgICBHUFJJbmZvOjpy
ZWdUNSwKKyAgICAgICAgfTsKIAotICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJl
Z1QxICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5m
bzo6cmVnVDEgJiYgcHJlc2VydmU0ICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlNSAhPSBH
UFJJbmZvOjpyZWdUMSkKLSAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMTsKKyAgICAg
ICAgZm9yIChHUFJSZWcgcmVnIDogcmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIXByZXNl
cnZlZC5jb250YWlucyhyZWcpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IEludmFsaWRHUFJSZWc7CisgICAgfQogCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5m
bzo6cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBH
UFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmU1
ICE9IEdQUkluZm86OnJlZ1QyKQotICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QyOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFJlZ3M+CisgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RT
Y3JhdGNoR1BSKFJlZ3MuLi4gYXJncykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHNldDsK
KyAgICAgICAgY29uc3RydWN0UmVnaXN0ZXJTZXQoc2V0LCBhcmdzLi4uKTsKKyAgICAgICAgcmV0
dXJuIHNlbGVjdFNjcmF0Y2hHUFIoc2V0KTsKKyAgICB9CiAKLSAgICAgICAgaWYgKHByZXNlcnZl
MSAhPSBHUFJJbmZvOjpyZWdUMyAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDMgJiYgcHJl
c2VydmUzICE9IEdQUkluZm86OnJlZ1QzICYmIHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUMyAm
JiBwcmVzZXJ2ZTUgIT0gR1BSSW5mbzo6cmVnVDMpCi0gICAgICAgICAgICByZXR1cm4gR1BSSW5m
bzo6cmVnVDM7CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0UmVnaXN0ZXJTZXQoUmVnaXN0ZXJT
ZXQmKQorICAgIHsKKyAgICB9CiAKLSAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpy
ZWdUNCAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDQgJiYgcHJlc2VydmUzICE9IEdQUklu
Zm86OnJlZ1Q0ICYmIHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTUgIT0g
R1BSSW5mbzo6cmVnVDQpCi0gICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDQ7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gUmVncz4KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RSZWdp
c3RlclNldChSZWdpc3RlclNldCYgc2V0LCBKU1ZhbHVlUmVncyByZWdzLCBSZWdzLi4uIGFyZ3Mp
CisgICAgeworICAgICAgICBpZiAocmVncy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgc2V0LnNldChyZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgaWYgKHJlZ3MucGF5bG9h
ZEdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBzZXQuc2V0KHJlZ3MucGF5bG9h
ZEdQUigpKTsKKyAgICAgICAgY29uc3RydWN0UmVnaXN0ZXJTZXQoc2V0LCBhcmdzLi4uKTsKKyAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1Q1OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIFJlZ3M+CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0UmVnaXN0ZXJTZXQoUmVnaXN0
ZXJTZXQmIHNldCwgR1BSUmVnIHJlZywgUmVncy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgaWYg
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgc2V0LnNldChyZWcpOworICAgICAg
ICBjb25zdHJ1Y3RSZWdpc3RlclNldChzZXQsIGFyZ3MuLi4pOwogICAgIH0KIAogICAgIC8vIEFk
ZCBhIGRlYnVnIGNhbGwuIFRoaXMgY2FsbCBoYXMgbm8gZWZmZWN0IG9uIEpJVCBjb2RlIGV4ZWN1
dGlvbiBzdGF0ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAppbmRleCAy
NDhkZmQ0OTI2ZDYwNTdiNjQ3MWYzZmMyMWU2MjRlZGZmMDdhYzA5Li42YmE5YjU3ZTFjYTI0NGU4
NmVmMDRiOWMzMmVlOTg1OTU2NjY4ZDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCkBAIC0yMDcsNiArMjA3LDcgQEAgY2xhc3MgUmVnaXN0ZXJTZXQgewogICAgIAog
cHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9CisgICAgdm9p
ZCBzZXRBbnkoSlNWYWx1ZVJlZ3MgcmVnKSB7IHNldChyZWcpOyB9CiAgICAgdm9pZCBzZXRBbnko
Y29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgeyBtZXJnZShzZXQpOyB9CiAgICAgdm9pZCBzZXRNYW55
KCkgeyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVnVHlwZSwgdHlwZW5hbWUuLi4gUmVncz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336993</attachid>
            <date>2018-04-02 10:09:19 -0700</date>
            <delta_ts>2018-04-02 10:47:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184236-20180403020918.patch</filename>
            <type>text/plain</type>
            <size>113919</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MmEzNjcxOTRhMDVkYmM3Y2M0MGQ0Njg0MjkzNDc0YzRhZmNiYmQ4Li45NjM5NDFhOTliNjU2Mjc4
MGZmMWRkNGNkZjNhNzc1MWNjYTcxYjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAxOC0wNC0wMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBSZW1vdmUgZHVwbGljYXRlIDMyYml0IGNvZGUgbW9yZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjM2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGR1
cGxpY2F0ZSAzMmJpdCBjb2RlIG1vcmUgYWdncmVzc2l2ZWx5IHBhcnQgMi4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZn
L0RGR0NvbXBhcmVTbG93UGF0aEdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVTbG93UGF0aEdlbmVyYXRvcik6Cisg
ICAgICAgIERyb3AgYm94aW5nIHBhcnQuIFVzZSB1bmJsZXNzZWRCb29sZWFuUmVzdWx0IGluIERG
R1NwZWN1bGF0aXZlSklUIHNpZGUgaW5zdGVhZC4KKworICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPdmVycmlkZXNIYXNJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDaGVja05vdEVtcHR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5SWRGbHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5SWREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0SW5pdGlhbGl6ZUJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBu
YW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUV4dHJhY3RD
YXRjaExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OnNlbGVjdFNjcmF0Y2hHUFIpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5k
Qm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94Qm9v
bGVhblNsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNv
bXBhcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTWlzY1N0cmljdEVxKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEluaXRpYWxpemVCdXR0ZXJmbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RF
cSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q29tcGFyZUFuZEJveEJvb2xlYW5T
bG93UGF0aEdlbmVyYXRvcjo6Q29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0SW5pdGlhbGl6
ZUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgb3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5QnlJbnQgc3RhcnRzIHJldHVybmluZyB1bmJsZXNzZWQgYm9vbGVhbiB3aXRo
IHNpemVfdC4KKworICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpsb2FkVmFsdWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmNvbnN0cnVjdFJlZ2lzdGVyU2V0KToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDoKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisgICAgICAgIENsZWFuIHVwIHNlbGVj
dFNjcmF0Y2hHUFIgY29kZSB0byBwYXNzIEpTVmFsdWVSZWdzLgorCiAyMDE4LTA0LTAyICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtERkddIE1vcmUg
YWdncmVzc2l2ZSByZW1vdmFsIG9mIGR1cGxpY2F0ZSAzMmJpdCBERkcgY29kZQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA3NTQ4YmFjMjM3ZjAyODg1OTEwNTMxZTI4ZjBjNGQ3Yzk5
Y2I3YTg1Li5iNTcwNDdjZmMxZDEwZjk0MzFiYTk0MjA5ZDUxNjFmMzA4MGVhZmYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTcwOCw2ICsxNzA4LDcgQEAKIAkJRTM1NDYyMkIx
QjYwNjVEMTAwNTQ1Mzg2IC8qIENvbnN0cnVjdEFiaWxpdHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTQ2MjJBMUI2MDY1RDEwMDU0NTM4NiAvKiBD
b25zdHJ1Y3RBYmlsaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTM1NTVCOEExREFFMDNBNTAwRjM2OTIxIC8qIERPTUpJVENhbGxET01HZXR0
ZXJTbmlwcGV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzU1NUI4OTFEQUUwM0EyMDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclNuaXBwZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzU1
RjM1MzFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1RjM1MTFCN0RDODUzMDBD
NTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggKi87IH07CisJCUUzNTZEODY0MjA3Mjgz
ODEwMDVBQzc1MCAvKiBERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTZEODYzMjA3MjgzODEwMDVBQzc1
MCAvKiBERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRTM1Q0ExNTQxREJD
M0E1QzAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1Q0ExNTIxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJ
VEhlYXBSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUUzNUNBMTU2MURCQzNBNUYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUNBMTUwMURC
QzNBNTYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVFMDM2MDFCN0FCNDNFMDA3M0FEMkEg
LyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFMDM1RTFCN0FCNDNFMDA3M0FEMkEgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ1NjAsNiArNDU2MSw3IEBACiAJCUUzNTU1Qjg5MURB
RTAzQTIwMEYzNjkyMSAvKiBET01KSVRDYWxsRE9NR2V0dGVyU25pcHBldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01KSVRDYWxsRE9NR2V0dGVyU25pcHBldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzU1RjM1MDFCN0RDODUzMDBDNTBEQzUgLyogTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1vZHVsZUxvYWRlclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNTVGMzUxMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTZEODYzMjA3MjgzODEwMDVBQzc1MCAv
KiBERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQ29tcGFyZVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ29t
cGFyZVNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
NUNBMTRGMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NSklUQWJzdHJhY3RIZWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNTAxREJDM0E1NjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01K
SVRBYnN0cmFjdEhlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNTEx
REJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNzE3MCw2ICs3MTcyLDcgQEAKIAkJCQkwRkMwOTc3RTE0NjlFQkM0MDBD
RjI0NDIgLyogREZHQ29tbW9uLmggKi8sCiAJCQkJMEZFQTBBMkQxNzBENDBCRjAwQkI3MjJDIC8q
IERGR0NvbW1vbkRhdGEuY3BwICovLAogCQkJCTBGRUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdDb21tb25EYXRhLmggKi8sCisJCQkJRTM1NkQ4NjMyMDcyODM4MTAwNUFDNzUwIC8qIERGR0Nv
bXBhcmVTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTBGMzhCMDEzMTdDRkU3NTUwMEIxNDRE
MyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi8sCiAJCQkJMEYzOEIwMTQxN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggKi8sCiAJCQkJMEYzOEIwMTUxN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8sCkBAIC04NTE5LDYgKzg1MjIsNyBAQAog
CQkJCTBGMDQzOTZFMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9u
RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1NkQ4NjQyMDcyODM4MTAwNUFDNzUwIC8qIERG
R0NvbXBhcmVTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIwMTgx
N0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjNCM0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTA0NCw3ICs5MDQ4LDYgQEAKIAkJCQlBNTAz
RkExRTE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xleGljYWxF
bnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0E5Nzc0QTgyMDZCODJFNDAwOEQwM0Qw
IC8qIEpTV2Vha1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBG
Q0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThB
NDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTkxMTYsNiArOTExOSw3IEBACiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpT
V2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVC
OEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlG
Qjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3
QTk3NzRBODIwNkI4MkU0MDA4RDAzRDAgLyogSlNXZWFrVmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGFyZVNsb3dQYXRoR2VuZXJh
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2MzZjA1YjhlNmQxZDkwOWUyZWM5ZTg4Mjc4NmNkZWU0ZmVmYTE2
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGFy
ZVNsb3dQYXRoR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlw
ZT4KK2NsYXNzIENvbXBhcmVTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93
UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKK3B1
YmxpYzoKKyAgICBDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCisgICAgICAgIFNfSklUT3BlcmF0aW9uX0VKSiBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikK
KyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfSklUT3BlcmF0aW9u
X0VKSiwgR1BSUmVnPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5lZWRUb1Nw
aWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwgcmVzdWx0KQorICAg
ICAgICAsIG1fYXJnMShhcmcxKQorICAgICAgICAsIG1fYXJnMihhcmcyKQorICAgIHsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQq
IGppdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAg
IHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRo
aXMtPm1fcmVzdWx0LCBtX2FyZzEsIG1fYXJnMikpOworICAgICAgICB0aGlzLT50ZWFyRG93bihq
aXQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1ZhbHVlUmVncyBtX2FyZzE7CisgICAgSlNW
YWx1ZVJlZ3MgbV9hcmcyOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IGVj
MzA1MDA2YTUzMjI2YjlmMDhiNGZiZjQwZWQ4MmEzZDhjZThmZWMuLjEwNmI5NGRkZjNjYTRiNzg2
MWUxNjYyZTIyZjc4ZmFjMWMyYWMzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcApAQCAtMTkxNSwxNiArMTkxNSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2UtPmhhc1By
b3BlcnR5R2VuZXJpYyhleGVjLCBhc1N0cmluZyhwcm9wZXJ0eU5hbWUpLT50b0lkZW50aWZpZXIo
ZXhlYyksIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVk
UHJvcGVydHlCeUludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZUNlbGwsIGludDMyX3Qg
c3Vic2NyaXB0LCBpbnQzMl90IGludGVybmFsTWV0aG9kVHlwZSkKK3NpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQsIGludDMyX3QgaW50ZXJuYWxNZXRob2RU
eXBlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlQ2VsbC0+
dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoVU5M
SUtFTFkoc3Vic2NyaXB0IDwgMCkpIHsKICAgICAgICAgLy8gR28gdGhlIHNsb3dlc3Qgd2F5IHBv
c3NpYmxlIGJlY2F1c2UgbmVnYXRpdmUgaW5kaWNlcyBkb24ndCB1c2UgaW5kZXhlZCBzdG9yYWdl
LgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1By
b3BlcnR5R2VuZXJpYyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHN1YnNjcmlwdCksIHN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlPihpbnRlcm5hbE1ldGhv
ZFR5cGUpKSkpOworICAgICAgICByZXR1cm4gb2JqZWN0LT5oYXNQcm9wZXJ0eUdlbmVyaWMoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBzdWJzY3JpcHQpLCBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZT4oaW50ZXJuYWxNZXRob2RUeXBlKSk7CiAgICAgfQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aGFzUHJvcGVydHlH
ZW5lcmljKGV4ZWMsIHN1YnNjcmlwdCwgc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpKSk7CisgICAgcmV0dXJuIG9iamVjdC0+
aGFzUHJvcGVydHlHZW5lcmljKGV4ZWMsIHN1YnNjcmlwdCwgc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOwogfQogCiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCmluZGV4IGEzNTZkODI4YzdjNmM3NDhmMDQ4MjM3ZDE4MTIw
YjZmZGM5NTAwNGUuLmJjMWY1NjhjZTliMjM1MDJiMmMwYWY5NzZjOWFkYWEwNjBjZjBhMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCkBAIC04MSw3ICs4MSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxXaXRoVGhp
cyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3Rv
dHlwZU9mT2JqZWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCopOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludChFeGVjU3RhdGUqLCBKU0NlbGwq
LCBpbnQzMl90LCBpbnQzMl90KTsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eUJ5SW50KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QsIGludDMyX3Qp
OwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvcihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSosIGludDMy
X3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAppbmRleCBlNDQyYjRiYWI4YmQxN2U0NWQ1YmIzOGE4N2FkNDQyYzBiMTE5YjhjLi4zMzdiNzZj
MTUyYzYyY2NjNjcxOWNmYTZiZmVjZTJmNjIxZjZlY2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkRGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkRGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93
UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUg
IkRGR0NvbXBhcmVTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIK
ICNpbmNsdWRlICJERkdPU1JFeGl0RnV6ei5oIgogI2luY2x1ZGUgIkRGR1NhbmVTdHJpbmdHZXRC
eVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgiCkBAIC0xMTM2LDI3ICsxMTM3LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1c2hXaXRoU2NvcGUoTm9kZSogbm9kZSkKICAgICBjZWxsUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi17Ci0gICAgdW5z
aWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKLSAgICBp
ZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJyYW5j
aE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwotCi0gICAgICAgIEFTU0VS
VChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgIAotICAgICAgICBub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmQsIGhlbHBlckZ1
bmN0aW9uKTsKLSAgICAKLSAgICAgICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxv
Y2s7Ci0gICAgICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhv
bGVDb21wYXJlKG5vZGUsIGNvbmQsIGhlbHBlckZ1bmN0aW9uKTsKLSAgICAKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlU3RyaWN0RXEo
Tm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJs
b2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKQEAgLTM0MjAsNiArMzQwMCw0NSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGFyc2VJbnQoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT3ZlcnJpZGVzSGFzSW5zdGFuY2UoTm9kZSogbm9kZSkKK3sKKyAgICBOb2RlKiBoYXNJbnN0
YW5jZVZhbHVlTm9kZSA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICBKU0Z1bmN0aW9uKiBk
ZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+Y2Vs
bE9wZXJhbmQoKS0+dmFsdWUoKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm90
RGVmYXVsdDsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBoYXNJbnN0YW5jZVZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiBjb25zdGFudCBmb2xkaW5nIGhhbmRsZWQg
YXV0b21hdGljYWxseSB0aGUgY2FzZSB3aGVyZSB3ZSBrbmV3IHRoZSBoYXNJbnN0YW5jZSBmdW5j
dGlvbgorICAgIC8vIHdhcyBhIGNvbnN0YW50LiBVbmZvcnR1bmF0ZWx5LCB0aGUgZm9sZGluZyBy
dWxlIGZvciBPdmVycmlkZXNIYXNJbnN0YW5jZSBpcyBpbiB0aGUgc3RyZW5ndGggcmVkdWN0aW9u
IHBoYXNlCisgICAgLy8gc2luY2UgaXQgcmVsaWVzIG9uIE9TUiBpbmZvcm1hdGlvbi4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDgzMgorICAgIGlmICghaGFzSW5z
dGFuY2VWYWx1ZU5vZGUtPmlzQ2VsbENvbnN0YW50KCkgfHwgZGVmYXVsdEhhc0luc3RhbmNlRnVu
Y3Rpb24gIT0gaGFzSW5zdGFuY2VWYWx1ZU5vZGUtPmFzQ2VsbCgpKSB7CisgICAgICAgIEpTVmFs
dWVSZWdzIGhhc0luc3RhbmNlVmFsdWVSZWdzID0gaGFzSW5zdGFuY2VWYWx1ZS5qc1ZhbHVlUmVn
cygpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG5vdERlZmF1bHQuYXBwZW5kKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGhhc0luc3RhbmNlVmFsdWVSZWdz
LmdwcigpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpKSk7CisjZWxzZQorICAg
ICAgICBub3REZWZhdWx0LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoaGFzSW5zdGFuY2VW
YWx1ZVJlZ3MpKTsKKyAgICAgICAgbm90RGVmYXVsdC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaGFzSW5zdGFuY2VWYWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpKSk7CisjZW5kaWYKKyAgICB9CisK
KyAgICAvLyBDaGVjayB0aGF0IGJhc2UgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgor
ICAgIG1faml0LnRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQ
Uik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAg
IGlmICghbm90RGVmYXVsdC5lbXB0eSgpKSB7CisgICAgICAgIG5vdERlZmF1bHQubGluaygmbV9q
aXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAg
ICB9CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0
YW5jZU9mKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBVbnR5cGVkVXNlKSB7CkBAIC02OTAyLDYgKzY5MjEsNTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUp
OwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9k
ZSkKK3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKworICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7CisgICAgeworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBhcmd1
bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdz
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0KTsK
KyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFs
dWVSZWdzKCk7CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgfQorICAgIHVubG9jayhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFu
Y2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4g
VGhpcyBpcyBzYWZlCisgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRl
Z3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCisgICAg
Ly8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNh
biBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAgLy8gcGFzdCB0aGUg
c2l6aW5nLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDE0NDgKKworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICBK
SVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJn
dW1lbnRzUmVncyk7CisKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOworCisgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVk
Z2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUs
CisgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUikpOworCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCisgICAgICAgICAgICBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXNHUFIsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQp
KSk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFy
Z3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEt
Pm1hbmRhdG9yeU1pbmltdW0pOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBu
b1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRW
YXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7CkBAIC04NTM4LDYgKzg2MTAsMzMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7
CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdChOb2RlKiBub2RlKQor
eworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVl
KTsKKyNlbHNlCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgdmFsdWUsIFRh
Z1dvcmQpOworI2VuZGlmCisKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1Zh
bHVlUmVncygpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFsdWVS
ZWdzKTsKKworICAgIG1faml0LmNvbXBhcmU4KEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCisg
ICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoT2JqZWN0VHlw
ZSksCisgICAgICAgIHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKiBub2RlKQogewogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwpAQCAtODY5Niw2ICs4Nzk1LDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0NlbGwoTm9kZSogbm9kZSkKICAgICBub1Jlc3Vs
dChub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrTm90RW1wdHko
Tm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyByZWdzID0gb3BlcmFuZC5qc1ZhbHVlUmVncygpOwor
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVERaRmFpbHVyZSwgSlNWYWx1ZVNvdXJjZSgpLCBudWxscHRy
LCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlZ3MpKTsKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCiB7
CiAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKQEAgLTExNTc0LDYgKzEx
NjgxLDUyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0luZGV4U3RyaW5nKE5vZGUq
IG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBjYWNo
ZWRQdXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYmFzZUdQUiwgdmFsdWVSZWdzLCBzY3Jh
dGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAoKSwgRG9udFNwaWxsKTsKKworICAgIG5vUmVzdWx0KG5vZGUpOworfQorCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZChOb2RlKiBub2RlKQoreworICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBiYXNlR1BSLCB2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZp
ZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOworfQorCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKiBub2RlKQoreworICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+
b3JpZ2luLnNlbWFudGljLCBiYXNlR1BSLCB2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIG5vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZFdpdGhUaGlzKE5vZGUqIG5vZGUpCiB7
CiAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMTg3
OCw3ICsxMjAzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhT
aXplKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLSAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2VsZWN0U2NyYXRjaEdQUihzaXplR1BSKTsK
KyAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKHNpemVHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJpZ0xlbmd0aCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJ
bW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSk7CiAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSksIHN0cnVjdHVyZUdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKQEAgLTEyNDI3LDYgKzEyNTgwLDQxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSWRlbnRpdHkoTm9kZSogbm9kZSkKICAgICB9CiB9CiAK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEoTm9kZSogbm9kZSkKK3sK
KyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxk
MigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1pc2NVc2UpCisg
ICAgICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQxKCksIG9wMS5qc1ZhbHVlUmVncygpKTsK
KyAgICBpZiAobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE1pc2NVc2UpCisgICAgICAgIHNw
ZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQyKCksIG9wMi5qc1ZhbHVlUmVncygpKTsKKworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgbV9qaXQuY29tcGFyZTY0KEpJVENvbXBpbGVyOjpFcXVhbCwgb3Ax
LmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisjZWxzZQorICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dEVxdWFsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBvcDEudGFnR1BS
KCksIG9wMi50YWdHUFIoKSk7CisgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVh
bCwgb3AxLnBheWxvYWRHUFIoKSwgb3AyLnBheWxvYWRHUFIoKSwgcmVzdWx0LmdwcigpKTsKKyAg
ICBub3RFcXVhbC5saW5rKCZtX2ppdCk7CisjZW5kaWYKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJ
bml0aWFsaXplQnV0dGVyZmx5KEdQUlJlZyBzdG9yYWdlR1BSLCBHUFJSZWcgc2l6ZUdQUiwgSlNW
YWx1ZVJlZ3MgZW1wdHlWYWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIG1faml0
Lnplcm9FeHRlbmQzMlRvUHRyKHNpemVHUFIsIHNjcmF0Y2hHUFIpOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2hHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFi
ZWwoKTsKKyAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAg
IG1faml0LnN0b3JlVmFsdWUoZW1wdHlWYWx1ZVJlZ3MsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsK
KyAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hH
UFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAgIGRvbmUubGluaygmbV9qaXQpOworfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzaXplR1BS
LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBib29sIHNob3VsZENvbnZlcnRMYXJnZVNpemVU
b0FycmF5U3RvcmFnZSkKK3sKKyAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhp
cyk7CisKKyAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNj
cmF0Y2gyLmdwcigpOworCisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBz
dG9yYWdlR1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgaWYgKHNob3VsZENvbnZlcnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSkKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzaXplR1BSLCBUcnVzdGVkSW1tMzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xF
TkdUSCkpKTsKKworICAgIC8vIFdlIGNhbiB1c2UgcmVzdWx0R1BSIGFzIGEgc2NyYXRjaCByaWdo
dCBub3cuCisgICAgZW1pdEFsbG9jYXRlQnV0dGVyZmx5KHN0b3JhZ2VHUFIsIHNpemVHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCByZXN1bHRHUFIsIHNsb3dDYXNlcyk7CisKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGVtcHR5VmFsdWVSZWdzKHNjcmF0Y2hHUFIpOwor
ICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgZW1wdHlWYWx1ZVJlZ3MuZ3By
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBlbXB0eVZhbHVlUmVncy5ncHIoKSk7CisjZWxzZQorICAgIEpT
VmFsdWVSZWdzIGVtcHR5VmFsdWVSZWdzKHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICBp
ZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgIG1faml0Lm1vdmVWYWx1ZShKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSwgZW1wdHlWYWx1ZVJlZ3MpOworICAg
IGVsc2UKKyAgICAgICAgbV9qaXQubW92ZVZhbHVlKEpTVmFsdWUoKSwgZW1wdHlWYWx1ZVJlZ3Mp
OworI2VuZGlmCisgICAgZW1pdEluaXRpYWxpemVCdXR0ZXJmbHkoc3RvcmFnZUdQUiwgc2l6ZUdQ
UiwgZW1wdHlWYWx1ZVJlZ3MsIHJlc3VsdEdQUik7CisKKyAgICBSZWdpc3RlcmVkU3RydWN0dXJl
IHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdU
eXBlKSk7CisKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIHNsb3dDYXNlcyk7CisKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwor
CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxv
Y2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwKKyAgICAgICAg
c3RydWN0dXJlLAorICAgICAgICBzaG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2Ug
PyBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkpIDogc3RydWN0dXJlLAorICAgICAgICBzaXplR1BSLCBzdG9yYWdlR1BSKSk7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSkK
K3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUo
KTsKKyAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6SW50MzI6Cisg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICBBU1NFUlQoISFub2RlLT5jaGls
ZDMoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQorICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVs
bHB0ciwgb3V0T2ZCb3VuZHMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG91dE9mQm91bmRzKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1faml0
LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNjcmF0Y2hHUFIpOworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRj
aEdQUikpOworI2Vsc2UKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Cisj
ZW5kaWYKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAg
QVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKKyAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICBpZiAobW9kZS5p
c0luQm91bmRzKCkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBudWxscHRyLCBvdXRPZkJvdW5kcyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworCisgICAgICAgIG1faml0Lmxv
YWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQsIHNjcmF0Y2hGUFIsIHNjcmF0Y2hGUFIpKTsKKyAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQVNTRVJUKCEhbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0
T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBp
bmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkp
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCBudWxscHRyLCBvdXRPZkJvdW5kcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CisjZWxzZQorICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpKSk7CisjZW5kaWYKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IH0KKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCByZXN1bHRHUFIsIGJhc2VHUFIs
IGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUo
KSkpKTsKKworICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBuYW1lKE5vZGUqIG5vZGUp
Cit7CisgICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDApOworICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgMSk7CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdl
KTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2Up
OworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworI2lmIENQVShYODYpCisgICAgLy8gTm90IGVub3VnaCBy
ZWdpc3RlcnMgb24gWDg2IGZvciB0aGlzIGNvZGUsIHNvIGFsd2F5cyB1c2UgdGhlIHNsb3cgcGF0
aC4KKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1
bHQgcmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVn
cygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdz
LCBiYXNlR1BSLCBKU1ZhbHVlOjpKU0NlbGxUeXBlLCBwcm9wZXJ0eUdQUik7CisgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwor
I2Vsc2UKKyAgICBFZGdlJiBpbmRleEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpOworICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAzKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhp
cywgaW5kZXhFZGdlKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMs
IGVudW1lcmF0b3JFZGdlKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBHUFJSZWcgaW5kZXhHUFIg
PSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3By
KCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dQYXRoOworCisgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAg
IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAor
ICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAorICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgIC8vIENvbXB1dGUgdGhl
IG9mZnNldAorICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MpOwor
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1f
aml0KTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIG1f
aml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIG1faml0LnN1YjMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIG1faml0Lm5l
ZzMyKHNjcmF0Y2hHUFIpOworICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIs
IHNjcmF0Y2hHUFIpOworICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgocmVzdWx0UmVncy5ncHIoKSwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdFJlZ3MpOworCisg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxDZWxsLCByZXN1bHRSZWdzLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOworI2Vsc2UKKyAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVncywgYmFzZUdQUiwgSlNWYWx1ZTo6SlNDZWxsVHlwZSwg
cHJvcGVydHlHUFIpKTsKKyNlbmRpZgorCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKKyNlbmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRXh0cmFjdENh
dGNoTG9jYWwoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisKKyAg
ICBKU1ZhbHVlKiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKVtub2RlLT5jYXRj
aE9TUkVudHJ5SW5kZXgoKV07CisgICAgbV9qaXQubG9hZFZhbHVlKHB0ciwgcmVzdWx0UmVncyk7
CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNl
R1BSLCBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQoreworICAgIFJlZ2lzdGVy
U2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgaWYgKHNwaWxs
TW9kZSA9PSBEb250U3BpbGwpIHsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBmbHVzaGVkIHJl
Z2lzdGVycyB0byB0aGUgc3RhY2ssIHdlIGRvbid0IG5lZWQgdG8gc3BpbGwgdGhlc2UuCisgICAg
ICAgIHVzZWRSZWdpc3RlcnMuc2V0KGJhc2VHUFIsIGZhbHNlKTsKKyAgICAgICAgdXNlZFJlZ2lz
dGVycy5zZXQodmFsdWVSZWdzLCBmYWxzZSk7CisgICAgfQorICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdP
U1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KGJhc2VHUFIpLCB2YWx1ZVJlZ3MsCisgICAgICAgIHNjcmF0Y2hHUFIsIG1faml0LmVjbWFN
b2RlRm9yKGNvZGVPcmlnaW4pLCBwdXRLaW5kKTsKKworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KG1faml0KTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgaWYg
KHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1Bh
dGhUYXJnZXQpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYXV0byBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBOb1Jlc3VsdCwg
Z2VuLnN0dWJJbmZvKCksIHZhbHVlUmVncywKKyAgICAgICAgYmFzZUdQUiwgaWRlbnRpZmllclVJ
RChpZGVudGlmaWVyTnVtYmVyKSk7CisjZWxzZQorICAgIGF1dG8gc2xvd1BhdGggPSBzbG93UGF0
aENhbGwoCisgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
Tm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2YWx1ZVJlZ3MsCisgICAgICAgIEpTVmFsdWU6OkpT
Q2VsbFR5cGUsIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOworI2Vu
ZGlmCisKKyAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOworICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpK
IGhlbHBlckZ1bmN0aW9uKQoreworICAgIEFTU0VSVChub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50
eXBlZFVzZSkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworCisgICAg
SlNWYWx1ZVJlZ3MgYXJnMVJlZ3MgPSBhcmcxLmpzVmFsdWVSZWdzKCk7CisgICAgSlNWYWx1ZVJl
Z3MgYXJnMlJlZ3MgPSBhcmcyLmpzVmFsdWVSZWdzKCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2xvd1BhdGg7CisKKyAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7
CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhcmcxLnVzZSgpOworICAg
ICAgICBhcmcyLnVzZSgpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMVJlZ3MsIGFyZzJSZWdz
KTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICB1bmJsZXNzZWRC
b29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIGFyZzEpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICBhcmcxLnVzZSgpOworICAgIGFyZzIudXNlKCk7CisKKyAgICBpZiAoIWlzS25vd25JbnRl
Z2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5vdEludDMyKGFyZzFSZWdzKSk7CisgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOb3RJbnQzMihhcmcyUmVncykpOworCisgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFy
ZzFSZWdzLnBheWxvYWRHUFIoKSwgYXJnMlJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRHUFIpOwor
CisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8ICFpc0tu
b3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q29tcGFyZVNsb3dQYXRoR2VuZXJhdG9yPEpJVENv
bXBpbGVyOjpKdW1wTGlzdD4+KAorICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIGhlbHBlckZ1
bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFSZWdzLCBhcmcyUmVncykpOworICAgIH0KKworICAgIHVu
Ymxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlv
bikKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+
dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFu
Y2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOworCisgICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRp
dGlvbiBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CisKKyAgICAv
LyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4K
KyAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGlu
dmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgorICAgIGlm
ICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgeworICAgICAgICBjb25kID0gSklUQ29tcGlsZXI6Omlu
dmVydChjb25kKTsKKyAgICAgICAgY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpa
ZXJvOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKKyAgICAgICAgdGFrZW4gPSBu
b3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgfQorCisgICAgSlNWYWx1ZU9w
ZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
Mih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZVJlZ3MgYXJnMVJlZ3MgPSBhcmcx
LmpzVmFsdWVSZWdzKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJnMlJlZ3MgPSBhcmcyLmpzVmFsdWVS
ZWdzKCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICBpZiAo
aXNLbm93bk5vdEludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc0tub3duTm90SW50
ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBhcmcxLnVzZSgpOworICAgICAgICBhcmcyLnVzZSgpOworCisgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24s
IHJlc3VsdEdQUiwgYXJnMVJlZ3MsIGFyZzJSZWdzKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKKworICAgICAgICBicmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVz
dWx0R1BSLCB0YWtlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBSZXVzZSwgYXJnMik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgYXJnMS51c2UoKTsKKyAgICAgICAgYXJnMi51c2UoKTsKKworICAg
ICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RJbnQzMihhcmcxUmVncykpOwor
ICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RJbnQzMihhcmcyUmVncykp
OworCisgICAgICAgIGJyYW5jaDMyKGNvbmQsIGFyZzFSZWdzLnBheWxvYWRHUFIoKSwgYXJnMlJl
Z3MucGF5bG9hZEdQUigpLCB0YWtlbik7CisKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKSB7CisgICAgICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3JjZUp1bXApOworCisgICAg
ICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBl
ckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFSZWdzLCBhcmcyUmVncyk7CisgICAgICAgICAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOworCisgICAgICAgICAgICBicmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVz
dWx0R1BSLCB0YWtlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBqdW1wKG5vdFRha2VuKTsK
KworICAgIG1faW5kZXhJbkJsb2NrID0gbV9ibG9jay0+c2l6ZSgpIC0gMTsKKyAgICBtX2N1cnJl
bnROb2RlID0gYnJhbmNoTm9kZTsKK30KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggYzA5
Zjk1NWUxMzE4Y2E1Zjc2ZDg2MGNlOGEyZWU2ZDcxZmQ5NTU4OS4uZDEwYWQyYTg0YmMwMmJhZTk1
ODdiZGNiNjY0ZWRkMzI3ZmViMmVkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMzQ1LDExICszNDUsNiBAQCBjbGFzcyBTcGVjdWxhdGl2
ZUpJVCB7CiAKICAgICB2b2lkIGNvbXBpbGVTdG9yZUJhcnJpZXIoTm9kZSopOwogCi0gICAgc3Rh
dGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BS
UmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9
IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVnKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihwcmVzZXJ2
ZTEsIHByZXNlcnZlMiwgcHJlc2VydmUzLCBwcmVzZXJ2ZTQpOwotICAgIH0KLQogICAgIC8vIENh
bGxlZCBieSB0aGUgc3BlY3VsYXRpdmUgb3BlcmFuZCB0eXBlcywgYmVsb3csIHRvIGZpbGwgb3Bl
cmFuZCB0bwogICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzLCBpbXBsaWNpdGx5IGdlbmVyYXRpbmcg
c3BlY3VsYXRpb24gY2hlY2tzIGFzIG5lZWRlZC4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUlu
dDMyKEVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7CkBAIC03MjUsMTQgKzcyMCwxMyBA
QCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxlTW92SGludEFuZENoZWNr
KE5vZGUqKTsKIAogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBKU1ZhbHVlUmVn
cyBiYXNlLCBKU1ZhbHVlUmVncyByZXN1bHQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3Bp
bGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwsIEFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXQpOworICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgSlNW
YWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
dXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpK
dW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BS
LCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0
ZXJzTW9kZSA9IE5lZWRUb1NwaWxsLCBBY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0KTsKLSAg
ICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2UsIEdQUlJlZyB2YWx1
ZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQs
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwg
U3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwogICAgIHZvaWQgY2FjaGVkR2V0QnlJ
ZFdpdGhUaGlzKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdGhpc0dQUiwgR1BS
UmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXBMaXN0KCkpOwogI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BS
UmVnIGJhc2VUYWdHUFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3Vs
dFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAo
KSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwsIEFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXQpOwotICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFz
ZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3Bp
bGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwogICAgIHZvaWQgY2FjaGVkR2V0QnlJZFdp
dGhUaGlzKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBh
eWxvYWRHUFIsIEdQUlJlZyB0aGlzVGFnR1BST3JOb25lLCBHUFJSZWcgdGhpc1BheWxvYWRHUFIs
IEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGhUYXJnZXQgPSBK
SVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAjZW5kaWYKIApAQCAtNzQ3LDcgKzc0MSw2IEBAIGNs
YXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwogICAgIHZv
aWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
OwotICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsK
ICAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwgTm9k
ZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAgdm9pZCBub25TcGVjdWxh
dGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9kZSosIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwpAQCAt
NzU2LDYgKzc0OSw3IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICB2b2lkIGNvbXBpbGVJ
bnN0YW5jZU9mRm9yT2JqZWN0KE5vZGUqLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyBwcm90b3R5
cGVSZWcsIEdQUlJlZyBzY3JhdGNoQW5kUmVzdWx0UmVnLCBHUFJSZWcgc2NyYXRjaDJSZWcsIEdQ
UlJlZyBzY3JhdGNoM1JlZyk7CiAgICAgdm9pZCBjb21waWxlSW5zdGFuY2VPZihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlSW5zdGFuY2VPZkN1c3RvbShOb2RlKik7CisgICAgdm9pZCBjb21waWxl
T3ZlcnJpZGVzSGFzSW5zdGFuY2UoTm9kZSopOwogCiAgICAgdm9pZCBjb21waWxlSXNDZWxsV2l0
aFR5cGUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzVHlwZWRBcnJheVZpZXcoTm9kZSopOwpA
QCAtMTM4Nyw2ICsxMzgxLDcgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHZvaWQgY29t
cGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVnZXhwKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7CisgICAgdm9pZCBj
b21waWxlTG9hZFZhcmFyZ3MoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRp
b24oTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlR2V0RnJvbUFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNDA5LDEwICsx
NDA0LDEyIEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICB2b2lkIGNvbXBpbGVSZWdFeHBN
YXRjaEZhc3RHbG9iYWwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVJlZ0V4cFRlc3QoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZVN0cmluZ1JlcGxhY2UoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZUlzT2JqZWN0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVHlw
ZU9mKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZUNoZWNrTm90RW1wdHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0
dXJlKE5vZGUqKTsKICAgICB2b2lkIGVtaXRTdHJ1Y3R1cmVDaGVjayhOb2RlKiwgR1BSUmVnIGNl
bGxHUFIsIEdQUlJlZyB0ZW1wR1BSKTsKICAgICB2b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQo
Tm9kZSopOwpAQCAtMTQ0Miw4ICsxNDM5LDEyIEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAg
ICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVIYXNHZW5lcmljUHJvcGVydHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRvSW5kZXhTdHJp
bmcoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1dEJ5SWRGbHVzaChOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlUHV0QnlJZChOb2RlKik7CisgICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZFdpdGhUaGlzKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0
RGlyZWN0UG5hbWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRv
cihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0RW51bWVyYXRvclBuYW1lKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxlKE5vZGUqKTsKQEAgLTE0NjIsNiArMTQ2Myw4IEBA
IGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICB2b2lkIGNvbXBpbGVUb1ByaW1pdGl2ZShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuVGFpbChOb2RlKik7CisgICAgdm9pZCBjb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0
Y2hMb2NhbChOb2RlKik7CiAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsKICAgICB2b2lk
IG1vdmVGYWxzZVRvKEdQUlJlZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAzZmU1NjBlNmM2ZDI5MzA3NTgxNjVi
MDMyOGMzOWZhMjllZGM0YTE5Li41MWFiYTJjMDVlZTA5Njk4YjdiYjc0MGNiNmUwZDZmYTVhZjM5
ZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKQEAgLTI3MSwzNSArMjcxLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2FjaGVkR2V0QnlJZFdpdGhUaGlzKAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUo
c2xvd1BhdGgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFn
R1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkKLXsKLSAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwotICAgIGlmIChzcGls
bE1vZGUgPT0gRG9udFNwaWxsKSB7Ci0gICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgZmx1c2hlZCBy
ZWdpc3RlcnMgdG8gdGhlIHN0YWNrLCB3ZSBkb24ndCBuZWVkIHRvIHNwaWxsIHRoZXNlLgotICAg
ICAgICB1c2VkUmVnaXN0ZXJzLnNldChiYXNlUGF5bG9hZEdQUiwgZmFsc2UpOwotICAgICAgICB1
c2VkUmVnaXN0ZXJzLnNldChKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BS
KSwgZmFsc2UpOwotICAgIH0KLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVj
b3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNv
ZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRS
ZWdpc3RlcnMsCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlUGF5bG9hZEdQ
UiksIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLAotICAgICAgICBz
Y3JhdGNoR1BSLCBtX2ppdC5lY21hTW9kZUZvcihjb2RlT3JpZ2luKSwgcHV0S2luZCk7Ci0gICAg
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwotICAgIAotICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0g
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOwotICAgIHNsb3dDYXNlcy5h
cHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLQotICAgIGF1dG8gc2xvd1BhdGggPSBzbG93UGF0
aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
Tm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQ
YXlsb2FkR1BSKSwKLSAgICAgICAgICAgIEpTVmFsdWU6OkpTQ2VsbFR5cGUsICBiYXNlUGF5bG9h
ZEdQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7Ci0KLSAgICBtX2ppdC5hZGRQ
dXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdU
Rk1vdmUoc2xvd1BhdGgpKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kKQogewogICAg
IEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOwpAQCAtNDE4LDE2MiArMzg5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJhbmQsIE4KICAgICBq
dW1wKG5vdFRha2VuKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQ
ZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxl
cjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVu
Y3Rpb24pCi17Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRh
KCktPnRha2VuLmJsb2NrOwotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+
YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKLQotICAgIEpJVENvbXBpbGVyOjpSZXN1bHRD
b25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwotCi0g
ICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxv
Y2suCi0gICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4g
JiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAg
ICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKLSAgICAgICAgY29uZCA9IEpJVENvbXBpbGVy
OjppbnZlcnQoY29uZCk7Ci0gICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxl
cjo6WmVybzsKLSAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47Ci0gICAgICAgIHRha2Vu
ID0gbm90VGFrZW47Ci0gICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgIH0KLQotICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIEpTVmFsdWVSZWdzIGFyZzFSZWdzID0g
YXJnMS5qc1ZhbHVlUmVncygpOwotICAgIEpTVmFsdWVSZWdzIGFyZzJSZWdzID0gYXJnMi5qc1Zh
bHVlUmVncygpOwotICAgIEdQUlJlZyBhcmcxVGFnR1BSID0gYXJnMS50YWdHUFIoKTsKLSAgICBH
UFJSZWcgYXJnMVBheWxvYWRHUFIgPSBhcmcxLnBheWxvYWRHUFIoKTsKLSAgICBHUFJSZWcgYXJn
MlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7Ci0gICAgR1BSUmVnIGFyZzJQYXlsb2FkR1BSID0gYXJn
Mi5wYXlsb2FkR1BSKCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRo
OwotICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkp
IHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIGFyZzEudXNlKCk7Ci0gICAgICAgIGFyZzIu
dXNlKCk7Ci0KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxUmVncywgYXJnMlJlZ3MpOwotICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotCi0gICAgICAgIGJyYW5jaFRlc3QzMihjYWxsUmVz
dWx0Q29uZGl0aW9uLCByZXN1bHRHUFIsIHRha2VuKTsKLSAgICB9IGVsc2UgewotICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwotICAgIAotICAgICAgICBhcmcxLnVzZSgpOwotICAgICAgICBhcmcyLnVzZSgp
OwotCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkK
LSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzJUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgCi0gICAgICAgIGJyYW5jaDMyKGNvbmQs
IGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiwgdGFrZW4pOwotICAgIAotICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgIWlzS25vd25JbnRl
Z2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGp1bXAobm90VGFrZW4s
IEZvcmNlSnVtcCk7Ci0gICAgCi0gICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0g
ICAgCi0gICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxUmVn
cywgYXJnMlJlZ3MpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAg
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBi
cmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSLCB0YWtlbik7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBqdW1wKG5vdFRha2VuKTsKLSAgICAKLSAgICBtX2luZGV4SW5C
bG9jayA9IG1fYmxvY2stPnNpemUoKSAtIDE7Ci0gICAgbV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5v
ZGU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlPgotY2xhc3MgQ29tcGFyZUFuZEJv
eEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcgotICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVy
YXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKLXB1YmxpYzoKLSAg
ICBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBKdW1wVHlw
ZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LAotICAgICAgICBTX0pJVE9wZXJhdGlvbl9FSkog
ZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxv
YWQsCi0gICAgICAgIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCi0gICAgICAg
IDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQ
UlJlZz4oCi0gICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBOZWVkVG9TcGlsbCwgRXhj
ZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsIHJlc3VsdCkKLSAgICAgICAgLCBt
X2FyZzFUYWcoYXJnMVRhZykKLSAgICAgICAgLCBtX2FyZzFQYXlsb2FkKGFyZzFQYXlsb2FkKQot
ICAgICAgICAsIG1fYXJnMlRhZyhhcmcyVGFnKQotICAgICAgICAsIG1fYXJnMlBheWxvYWQoYXJn
MlBheWxvYWQpCi0gICAgewotICAgIH0KLSAgICAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQotICAgIHsKLSAgICAgICAg
dGhpcy0+c2V0VXAoaml0KTsKLSAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbCgKLSAgICAgICAgICAg
IGppdC0+Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0
aGlzLT5tX3Jlc3VsdCwgSlNWYWx1ZVJlZ3MobV9hcmcxVGFnLCBtX2FyZzFQYXlsb2FkKSwgSlNW
YWx1ZVJlZ3MobV9hcmcyVGFnLCBtX2FyZzJQYXlsb2FkKSkpOwotICAgICAgICBqaXQtPm1faml0
LmFuZDMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHRoaXMtPm1fcmVzdWx0KTsKLSAg
ICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKLSAgICB9Ci0gICAKLXByaXZhdGU6Ci0gICAgR1BS
UmVnIG1fYXJnMVRhZzsKLSAgICBHUFJSZWcgbV9hcmcxUGF5bG9hZDsKLSAgICBHUFJSZWcgbV9h
cmcyVGFnOwotICAgIEdQUlJlZyBtX2FyZzJQYXlsb2FkOwotfTsKLQotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhl
bHBlckZ1bmN0aW9uKQotewotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwot
ICAgIEdQUlJlZyBhcmcxVGFnR1BSID0gYXJnMS50YWdHUFIoKTsKLSAgICBHUFJSZWcgYXJnMVBh
eWxvYWRHUFIgPSBhcmcxLnBheWxvYWRHUFIoKTsKLSAgICBHUFJSZWcgYXJnMlRhZ0dQUiA9IGFy
ZzIudGFnR1BSKCk7Ci0gICAgR1BSUmVnIGFyZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2FkR1BS
KCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAg
IGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25O
b3RJbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAgICAgICAgR1BSRmx1c2hlZENh
bGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9
IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICAgICAgYXJnMS51c2UoKTsKLSAgICAgICAgYXJnMi51
c2UoKTsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KGhlbHBlckZ1bmN0aW9uLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxLmpzVmFsdWVSZWdzKCksIGFy
ZzIuanNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAg
ICAgIAotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFBheWxvYWQodGhpcywgUmV1c2UsIGFyZzEsIFBheWxvYWRXb3JkKTsKLSAgICAg
ICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAg
ICAgIGFyZzEudXNlKCk7Ci0gICAgICAgIGFyZzIudXNlKCk7Ci0gICAgCi0gICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzFU
YWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0g
ICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIGFyZzJUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKSk7Ci0KLSAgICAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFQYXlsb2FkR1BS
LCBhcmcyUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgCi0gICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCAhaXNLbm93bkludGVnZXIo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc3RkOjptYWtlX3VuaXF1ZTxDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9y
PEpJVENvbXBpbGVyOjpKdW1wTGlzdD4+KAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwg
dGhpcywgaGVscGVyRnVuY3Rpb24sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsCi0gICAg
ICAgICAgICAgICAgICAgIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQ
UikpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBh
eWxvYWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgfQotfQot
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9k
ZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgQmFzaWNCbG9j
ayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOwpAQCAtNjc0
LDI0ICs0ODksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBo
b2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgYm9vbGVhblJlc3VsdChy
ZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxKE5vZGUqIG5vZGUpCi17
Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWlzY1Vz
ZSkKLSAgICAgICAgc3BlY3VsYXRlTWlzYyhub2RlLT5jaGlsZDEoKSwgb3AxLmpzVmFsdWVSZWdz
KCkpOwotICAgIGlmIChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gTWlzY1VzZSkKLSAgICAg
ICAgc3BlY3VsYXRlTWlzYyhub2RlLT5jaGlsZDIoKSwgb3AyLmpzVmFsdWVSZWdzKCkpOwotICAg
IAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOwotICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCBvcDEudGFnR1BSKCksIG9wMi50YWdHUFIoKSk7Ci0gICAgbV9qaXQuY29tcGFyZTMy
KEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxLnBheWxvYWRHUFIoKSwgb3AyLnBheWxvYWRHUFIoKSwg
cmVzdWx0LmdwcigpKTsKLSAgICBub3RFcXVhbC5saW5rKCZtX2ppdCk7Ci0gICAgYm9vbGVhblJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ29tcGFyZUVxUHRyKE5vZGUqIG5vZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0zNjcwLDEwICszNDY3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tO
b3RFbXB0eTogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wZXJhbmQudGFnR1BSKCk7Ci0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVERaRmFpbHVyZSwgSlNWYWx1ZVNvdXJjZSgpLCBudWxscHRy
LCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAg
ICAgICBjb21waWxlQ2hlY2tOb3RFbXB0eShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0zNzgxLDUxICszNTc1LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5SWRGbHVzaDogewotICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwotICAgICAg
ICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwotICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7Ci0KLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VH
UFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCgpLCBEb250U3Bp
bGwpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0QnlJZEZs
dXNoKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCiAgICAgY2FzZSBQ
dXRCeUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAKLSAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVU
YWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9
IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOwotICAgICAgICAKLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGJhc2VHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIHNjcmF0Y2hHUFIs
IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKLSAgICAgICAgCi0gICAgICAg
IG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0QnlJZChub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsK
LSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAKLSAgICAg
ICAgY2FjaGVkUHV0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VHUFIsIHZhbHVlVGFn
R1BSLCB2YWx1ZVBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIo
KSwgRGlyZWN0KTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1
dEJ5SWREaXJlY3Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzg4OCwzOCAr
MzY0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAKICAgICBjYXNlIE92ZXJyaWRlc0hhc0luc3RhbmNlOiB7Ci0KLSAgICAgICAgTm9kZSogaGFz
SW5zdGFuY2VWYWx1ZU5vZGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgIEpTRnVu
Y3Rpb24qIGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihu
b2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgbm90RGVmYXVsdEhhc0luc3RhbmNlVmFsdWU7Ci0gICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBoYXNJbnN0YW5jZVZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAg
ICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgY29uc3RhbnQgZm9sZGluZyBoYW5kbGVkIGF1dG9t
YXRpY2FsbHkgdGhlIGNhc2Ugd2hlcmUgd2Uga25ldyB0aGUgaGFzSW5zdGFuY2UgZnVuY3Rpb24K
LSAgICAgICAgLy8gd2FzIGEgY29uc3RhbnQuIFVuZm9ydHVuYXRlbHksIHRoZSBmb2xkaW5nIHJ1
bGUgZm9yIE92ZXJyaWRlc0hhc0luc3RhbmNlIGlzIGluIHRoZSBzdHJlbmd0aCByZWR1Y3Rpb24g
cGhhc2UKLSAgICAgICAgLy8gc2luY2UgaXQgcmVsaWVzIG9uIE9TUiBpbmZvcm1hdGlvbi4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDgzMgotICAgICAgICBpZiAo
IWhhc0luc3RhbmNlVmFsdWVOb2RlLT5pc0NlbGxDb25zdGFudCgpIHx8IGRlZmF1bHRIYXNJbnN0
YW5jZUZ1bmN0aW9uICE9IGhhc0luc3RhbmNlVmFsdWVOb2RlLT5hc0NlbGwoKSkgewotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MgaGFzSW5zdGFuY2VWYWx1ZVJlZ3MgPSBoYXNJbnN0YW5jZVZhbHVl
LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICBub3REZWZhdWx0SGFzSW5zdGFuY2VWYWx1ZS5h
cHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGhhc0luc3RhbmNlVmFsdWVSZWdzKSk7Ci0gICAg
ICAgICAgICBub3REZWZhdWx0SGFzSW5zdGFuY2VWYWx1ZS5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaGFzSW5zdGFuY2VWYWx1ZVJlZ3MucGF5bG9hZEdQ
UigpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlJy4KLSAgICAgICAgbV9qaXQudGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3Rh
bmNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKLQotICAgICAgICBpZiAoIW5vdERlZmF1bHRIYXNJbnN0YW5jZVZhbHVlLmVt
cHR5KCkpIHsKLSAgICAgICAgICAgIG5vdERlZmF1bHRIYXNJbnN0YW5jZVZhbHVlLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BSKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVPdmVycmlkZXNIYXNJbnN0YW5jZShub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDExLDIyICszNzQwLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgSXNPYmplY3Q6
IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSwgVGFnV29yZCk7
Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZO
b3RDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOwotCi0gICAgICAgIG1faml0LmNvbXBhcmU4KEpJ
VENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVz
cyh2YWx1ZS5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAg
ICAgICAgICAgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLAotICAgICAgICAgICAgcmVzdWx0Lmdw
cigpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQot
ICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVzdWx0LmdwcigpKTsKLQotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
LSAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21w
aWxlSXNPYmplY3Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDE2Niw1OSAr
Mzg4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Ci0gICAgICAgIExvYWRWYXJhcmdz
RGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAKLSAgICAgICAg
R1BSUmVnIGFyZ3VtZW50c1RhZ0dQUjsKLSAgICAgICAgR1BSUmVnIGFyZ3VtZW50c1BheWxvYWRH
UFI7Ci0gICAgICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAg
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQpOwotICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOwotICAgICAgICAKLSAgICAgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBhcmd1bWVudHNUYWdHUFIgPSBhcmd1bWVu
dHMudGFnR1BSKCk7Ci0gICAgICAgICAgICBhcmd1bWVudHNQYXlsb2FkR1BSID0gYXJndW1lbnRz
LnBheWxvYWRHUFIoKTsKLSAgICAgICAgICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNW
YWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3Rm
dWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAgICAgLy8gZnJvbSB0
aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9u
ZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0
IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2Nh
bGxfdmFyYXJncyByaWdodAotICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKLQotICAgICAg
ICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNU
YWdHUFIsIGFyZ3VtZW50c1BheWxvYWRHUFIpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNs
dWRpbmdUaGlzR1BSKTsKLQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgICAg
IEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVk
aW5nVGhpc0dQUikpOwotCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBW
YXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICAgICAg
YXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLAotICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihk
YXRhLT5saW1pdCkpKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJ
bmNsdWRpbmdUaGlzR1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291
bnQpKTsKLSAgICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFy
Z3MsIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zm
c2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7Ci0g
ICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIAotICAgICAgICBub1Jlc3Vs
dChub2RlKTsKKyAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIApAQCAtNDQzMCwxNTIgKzQwOTIsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwot
Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0g
cmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3Vs
dFRhZy5ncHIoKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwotICAgICAgICBz
d2l0Y2ggKG1vZGUudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBBU1NFUlQoISFub2RlLT5j
aGlsZDMoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUt
PmNoaWxkMygpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7
Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgQVNTRVJUKCEh
bm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKLSAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKLSAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgbV9qaXQubG9hZERv
dWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQsIHNjcmF0Y2hGUFIsIHNjcmF0Y2hGUFIpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAg
ICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOwotCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtb3Zl
VHJ1ZVRvKHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50
LCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBiYXNlR1BSLCBp
bmRleEdQUiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZS0+aW50ZXJuYWxNZXRob2RUeXBlKCkp
KSk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgYm9vbGVh
blJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0RGly
ZWN0UG5hbWU6IHsKLSAgICAgICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDApOwotICAgICAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOwotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotCi0j
aWYgQ1BVKFg4NikKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0KLSAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotCi0gICAgICAgIC8vIE5vdCBl
bm91Z2ggcmVnaXN0ZXJzIG9uIFg4NiBmb3IgdGhpcyBjb2RlLCBzbyBhbHdheXMgdXNlIHRoZSBz
bG93IHBhdGguCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEpTVmFsdWVSZWdz
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIGJhc2VHUFIs
IEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIsIHByb3BlcnR5R1BSKSk7Ci0gICAgICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7Ci0jZWxzZQotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKLSAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0KLSAgICAgICAgRWRnZSYgaW5kZXhFZGdlID0g
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgRWRnZSYgZW51bWVy
YXRvckVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotCi0gICAgICAg
IFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBpbmRleEVkZ2UpOwotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsKLQot
ICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93UGF0aDsKLQotICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0g
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAg
ICBlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVy
ZUlET2Zmc2V0KCkpKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQK
LSAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVk
IGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCAKLSAgICAgICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLQotICAgICAgICBtX2ppdC5tb3ZlKGluZGV4
R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRj
aEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwotICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQg
b2YgbGluZQotICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOwotICAgICAgICBt
X2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
IG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIpOwotICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0
cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgLy8gV2UgdXNlIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpIGFzIGEgdGVtcG9yYXJ5IGhlcmUuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGNs
b2JiZXIgaXQgYWZ0ZXIgZ2V0dGluZyB0aGUgCi0gICAgICAgIC8vIHZhbHVlIG91dCBvZiBpbmRl
eEdQUiBhbmQgZW51bWVyYXRvckdQUiBiZWNhdXNlIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpIGNv
dWxkIHJldXNlIGVpdGhlciBvZiB0aG9zZSByZWdpc3RlcnMuCi0gICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBpbnQzMl90IG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
cmVzdWx0UmVncy50YWdHUFIoKSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwotCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxDZWxs
LCByZXN1bHRSZWdzLCBiYXNlR1BSLCBKU1ZhbHVlOjpKU0NlbGxUeXBlLCBwcm9wZXJ0eUdQUikp
OwotI2VuZGlmCi0KLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAg
ICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1lKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKQEAgLTQ3NDAsMTkgKzQyNjEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDogewotICAgICAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRhZyh0aGlzKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHBheWxvYWQodGhpcyk7Ci0KLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1w
LmdwcigpOwotICAgICAgICBHUFJSZWcgdGFnR1BSID0gdGFnLmdwcigpOwotICAgICAgICBHUFJS
ZWcgcGF5bG9hZEdQUiA9IHBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgSlNWYWx1ZSogcHRyID0g
JnJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KG1faml0LmppdENvZGUoKS0+Y29tbW9uLmNhdGNo
T1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSlbbm9kZS0+Y2F0Y2hPU1JFbnRyeUluZGV4KCld
OwotICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdHIpLCB0
ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyh0ZW1w
R1BSLCBUYWdPZmZzZXQpLCB0YWdHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHRlbXBHUFIsIFBheWxvYWRPZmZzZXQpLCBwYXlsb2FkR1BSKTsKLSAgICAg
ICAganNWYWx1ZVJlc3VsdCh0YWdHUFIsIHBheWxvYWRHUFIsIG5vZGUpOworICAgICAgICBjb21w
aWxlRXh0cmFjdENhdGNoTG9jYWwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAt
NDg0OCw1OSArNDM1Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFJhbmRv
bShOb2RlKiBub2RlKQogICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0SW5pdGlhbGl6ZUJ1dHRlcmZseShHUFJSZWcgc3Rv
cmFnZUdQUiwgR1BSUmVnIHNpemVHUFIsIEpTVmFsdWVSZWdzIGVtcHR5VmFsdWVSZWdzLCBHUFJS
ZWcgc2NyYXRjaEdQUikKLXsKLSAgICBtX2ppdC5tb3ZlKHNpemVHUFIsIHNjcmF0Y2hHUFIpOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBs
b29wID0gbV9qaXQubGFiZWwoKTsKLSAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNj
cmF0Y2hHUFIpOwotICAgIG1faml0LnN0b3JlMzIoZW1wdHlWYWx1ZVJlZ3MudGFnR1BSKCksIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSk7Ci0gICAgbV9qaXQuc3RvcmUzMihlbXB0eVZhbHVlUmVncy5wYXlsb2FkR1BSKCksIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSkpOwotICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2Ny
YXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci19
Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNp
emVHUFIsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGJvb2wgc2hvdWxkQ29udmVydExhcmdl
U2l6ZVRvQXJyYXlTdG9yYWdlKQotewotICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwot
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
Mih0aGlzKTsKLSAgICAKLSAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNo
MkdQUiA9IHNjcmF0Y2gyLmdwcigpOwotICAgIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihudWxscHRyKSwgc3RvcmFnZUdQUik7Ci0gICAgICAgICAgICAKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIGlmIChzaG91bGRDb252ZXJ0TGFyZ2VTaXplVG9B
cnJheVN0b3JhZ2UpCi0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9BUlJB
WV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSk7Ci0KLSAgICAvLyBXZSBjYW4gdXNlIHJl
c3VsdCBhcyBhIHNjcmF0Y2ggZm9yIHRoaXMuCi0gICAgZW1pdEFsbG9jYXRlQnV0dGVyZmx5KHN0
b3JhZ2VHUFIsIHNpemVHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCByZXN1bHRHUFIsIHNs
b3dDYXNlcyk7Ci0KLSAgICBKU1ZhbHVlIGhvbGU7Ci0gICAgaWYgKGhhc0RvdWJsZShpbmRleGlu
Z1R5cGUpKQotICAgICAgICBob2xlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
UE5hTik7Ci0gICAgZWxzZQotICAgICAgICBob2xlID0gSlNWYWx1ZSgpOwotICAgIEpTVmFsdWVS
ZWdzIGVtcHR5VmFsdWVSZWdzKHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKLSAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW0zMihob2xlLnRhZygpKSwgZW1wdHlWYWx1ZVJlZ3MudGFnR1BSKCkpOwot
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKGhvbGUucGF5bG9hZCgpKSwgZW1wdHlWYWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKLSAgICAvLyBXZSBjYW4gdXNlIHJlc3VsdCBhcyBhIHNjcmF0Y2gg
Zm9yIHRoaXMuCi0gICAgZW1pdEluaXRpYWxpemVCdXR0ZXJmbHkoc3RvcmFnZUdQUiwgc2l6ZUdQ
UiwgZW1wdHlWYWx1ZVJlZ3MsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICAKLSAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oaW5kZXhpbmdUeXBlKSk7Ci0KLSAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5Pihy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7Ci0KLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
dGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0
aEdlbmVyYXRvcj4oCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZSwgcmVzdWx0R1BSLAotICAgICAgICBzdHJ1Y3R1cmUsCi0gICAgICAgIHNob3VsZENv
bnZlcnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSA/IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkgOiBzdHJ1Y3R1cmUsCi0gICAgICAgIHNp
emVHUFIsIHN0b3JhZ2VHUFIpKTsKLX0KLQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCmluZGV4IDViMDNjMTQ2YTA4NDE0NWZkMDg1OGI5NmJmYmZlM2ZmOTA1YjIyYWUuLjc2
YTY0MmRmNzhiMTg4NTM1MDVjYTFkZjNkZjNjMjM5ZjE0MDUzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjE2LDM1ICsy
MTYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoaXMoQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUgogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KFdURk1vdmUoc2xvd1BhdGgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5k
IHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVy
c01vZGUgc3BpbGxNb2RlKQotewotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5y
ZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQo
Y29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0gICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLSAgICBpZiAoc3BpbGxNb2RlID09IERvbnRT
cGlsbCkgewotICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGZsdXNoZWQgcmVnaXN0ZXJzIHRvIHRo
ZSBzdGFjaywgd2UgZG9uJ3QgbmVlZCB0byBzcGlsbCB0aGVzZS4KLSAgICAgICAgdXNlZFJlZ2lz
dGVycy5zZXQoYmFzZUdQUiwgZmFsc2UpOwotICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh2YWx1
ZUdQUiwgZmFsc2UpOwotICAgIH0KLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3Rl
cnMsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAotICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IHNjcmF0Y2hHUFIsIG1faml0LmVjbWFNb2RlRm9yKGNvZGVPcmlnaW4pLCBwdXRLaW5kKTsKLQot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIGlmIChzbG93UGF0aFRhcmdldC5pc1NldCgpKQotICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKHNsb3dQYXRoVGFyZ2V0KTsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgCi0gICAgYXV0byBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKLSAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1BhdGhGdW5jdGlvbigp
LCBOb1Jlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlR1BSLCBiYXNlR1BSLAotICAgICAgICBp
ZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKLQotICAgIG1faml0LmFkZFB1dEJ5SWQo
Z2VuLCBzbG93UGF0aC5nZXQoKSk7Ci0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShz
bG93UGF0aCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBl
ZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJhbmQpCiB7CiAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFs
aWQoKSB8fCAhaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpLCAiVGhlIENvbXBhcmUgc2hvdWxk
IGhhdmUgYmVlbiBlbGltaW5hdGVkLCBpdCBpcyBrbm93biB0byBiZSBhbHdheXMgZmFsc2UuIik7
CkBAIC0zNTcsMTUyICszMjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTgogICAgIH0KIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2Rl
KiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi17Ci0gICAgQmFz
aWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOwot
ICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RU
YWtlbi5ibG9jazsKLQotICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3Vs
dENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwotCi0gICAgLy8gVGhlIGJyYW5jaCBp
bnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCi0gICAgLy8gSWYgdGFr
ZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5j
aCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBpZiAodGFrZW4gPT0gbmV4
dEJsb2NrKCkpIHsKLSAgICAgICAgY29uZCA9IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCk7Ci0g
ICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6WmVybzsKLSAgICAgICAg
QmFzaWNCbG9jayogdG1wID0gdGFrZW47Ci0gICAgICAgIHRha2VuID0gbm90VGFrZW47Ci0gICAg
ICAgIG5vdFRha2VuID0gdG1wOwotICAgIH0KLQotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwotICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKLSAgICBHUFJSZWcg
YXJnMkdQUiA9IGFyZzIuZ3ByKCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOwotICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDEoKS5u
b2RlKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgICAgICBhcmcxLnVzZSgpOwotICAg
ICAgICBhcmcyLnVzZSgpOwotICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJH
UFIpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotCi0gICAgICAgIGJyYW5jaFRl
c3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIsIHRha2VuKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBhcmcyKTsKLSAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICAgICAgYXJnMS51
c2UoKTsKLSAgICAgICAgYXJnMi51c2UoKTsKLSAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwotICAgIAotICAgICAgICBicmFuY2gzMihjb25kLCBhcmcxR1BSLCBh
cmcyR1BSLCB0YWtlbik7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSkgewotICAgICAgICAgICAganVtcChub3RUYWtlbiwgRm9yY2VKdW1wKTsKLSAgICAKLSAgICAg
ICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICAgICAgICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhl
bHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKLSAgICAgICAgCi0gICAgICAgICAgICBicmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRp
dGlvbiwgcmVzdWx0R1BSLCB0YWtlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBqdW1wKG5v
dFRha2VuKTsKLQotICAgIG1faW5kZXhJbkJsb2NrID0gbV9ibG9jay0+c2l6ZSgpIC0gMTsKLSAg
ICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSnVt
cFR5cGU+Ci1jbGFzcyBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yCi0gICAg
OiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9F
SkosIEdQUlJlZz4gewotcHVibGljOgotICAgIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhH
ZW5lcmF0b3IoCi0gICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCi0g
ICAgICAgIFNfSklUT3BlcmF0aW9uX0VKSiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQotICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1w
VHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAotICAgICAgICAgICAgZnJvbSwgaml0
LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNr
TmVlZGVkLCByZXN1bHQpCi0gICAgICAgICwgbV9hcmcxKGFyZzEpCi0gICAgICAgICwgbV9hcmcy
KGFyZzIpCi0gICAgewotICAgIH0KLSAgICAKLXByb3RlY3RlZDoKLSAgICB2b2lkIGdlbmVyYXRl
SW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHRo
aXMtPnNldFVwKGppdCk7Ci0gICAgICAgIHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0
aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBtX2FyZzEsIG1fYXJnMikpOwot
ICAgICAgICBqaXQtPm1faml0LmFuZDMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHRo
aXMtPm1fcmVzdWx0KTsKLSAgICAgICAgaml0LT5tX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoVmFsdWVGYWxzZSksIHRoaXMtPm1fcmVzdWx0KTsKLSAgICAgICAgdGhpcy0+dGVh
ckRvd24oaml0KTsKLSAgICB9Ci0gICAKLXByaXZhdGU6Ci0gICAgR1BSUmVnIG1fYXJnMTsKLSAg
ICBHUFJSZWcgbV9hcmcyOwotfTsKLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQotewot
ICAgIEFTU0VSVChub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpOwotICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5n
cHIoKTsKLSAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7Ci0gICAgCi0gICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpIHsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgICAg
ICBhcmcxLnVzZSgpOwotICAgICAgICBhcmcyLnVzZSgpOwotICAgIAotICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRH
UFIsIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwot
ICAgICAgICAKLSAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2N1cnJlbnROb2Rl
LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGFyZzIp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIGFy
ZzEudXNlKCk7Ci0gICAgICAgIGFyZzIudXNlKCk7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93
bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9q
aXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAKLSAgICAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQs
IGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3Rl
ZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFp
c0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8ICFpc0tub3duSW50ZWdlcihu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzdGQ6Om1ha2VfdW5pcXVlPENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I8
SklUQ29tcGlsZXI6Okp1bXBMaXN0Pj4oCi0gICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMs
IGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRh
Rm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgIH0KLX0K
LQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5v
ZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewogICAgIEJhc2ljQmxv
Y2sqIHRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKQEAgLTU3
NSw4ICs0MDAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBo
b2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0
aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwot
ICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyBhcmcxUmVn
cyA9IGFyZzEuanNWYWx1ZVJlZ3MoKTsKKyAgICBKU1ZhbHVlUmVncyBhcmcyUmVncyA9IGFyZzIu
anNWYWx1ZVJlZ3MoKTsKICAgICAKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC01ODgsNzEgKzQxMyw1MiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9k
ZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlm
IHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAg
ICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAg
Ly8gRklYTUU6IHRoaXMgc2hvdWxkIGZsdXNoIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIHNpbGVudCBz
cGlsbC9maWxsLgotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2pp
dC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpOworICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2g2NChKSVRD
b21waWxlcjo6Tm90RXF1YWwsIGFyZzFSZWdzLmdwcigpLCBhcmcyUmVncy5ncHIoKSk7CiAgICAg
ICAgIAotICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2pp
dC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tNjQoIWludmVydCksIHJlc3VsdEdQUik7CiAg
ICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwog
CiAgICAgICAgIG5vdEVxdWFsQ2FzZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAogICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQ
Uik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwg
cmVzdWx0R1BSLCBhcmcxUmVncywgYXJnMlJlZ3MpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIAotICAg
ICAgICBtX2ppdC5hbmQ2NChKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIp
OwotICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBtX2ppdC5vcjY0KGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGhDYXNl
czsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHR3b0NlbGxzQ2FzZSA9IG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbGVm
dE9LID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgc2xvd1BhdGhDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmcxR1BSLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgbGVmdE9LLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHRPSyA9IG1faml0LmJyYW5jaDY0
KEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7Ci0gICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRl
c3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7Ci0gICAgICAgIHJpZ2h0T0subGluaygmbV9qaXQpOwotICAgICAgICAKLSAg
ICAgICAgbV9qaXQuY29tcGFyZTY0KGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJ
VENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAg
bV9qaXQub3IzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHR3b0NlbGxzQ2FzZS5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgYXJnMUdQUiwgYXJnMkdQUikpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWludmVy
dCkpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHN0ZDo6bWFrZV91bmlxdWU8Q29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcjxN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+PigKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YXNlcywgdGhpcywgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1bHRHUFIsIGFyZzFHUFIs
Ci0gICAgICAgICAgICAgICAgICAgIGFyZzJHUFIpKTsKLSAgICAgICAgCiAgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwg
bV9jdXJyZW50Tm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50
Tm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
LX0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJpY3RFcShOb2RlKiBub2Rl
KQotewotICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+
Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLSAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1p
c2NVc2UpCi0gICAgICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQxKCksIG9wMS5qc1ZhbHVl
UmVncygpKTsKLSAgICBpZiAobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE1pc2NVc2UpCi0g
ICAgICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQyKCksIG9wMi5qc1ZhbHVlUmVncygpKTsK
LSAgICAKLSAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDEuZ3ByKCks
IG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihW
YWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgbV9qaXQub3I2NChhcmcxUmVncy5n
cHIoKSwgYXJnMlJlZ3MuZ3ByKCksIHJlc3VsdEdQUik7CisKKyAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2xvd1BhdGhDYXNlczsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIHR3b0NlbGxzQ2Fz
ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgbGVmdE9LID0g
bV9qaXQuYnJhbmNoSWZJbnQzMihhcmcxUmVncyk7CisgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoSWZOdW1iZXIoYXJnMVJlZ3MsIEludmFsaWRHUFJSZWcpKTsKKyAgICBsZWZ0
T0subGluaygmbV9qaXQpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHJpZ2h0T0sgPSBtX2ppdC5i
cmFuY2hJZkludDMyKGFyZzJSZWdzKTsKKyAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hJZk51bWJlcihhcmcyUmVncywgSW52YWxpZEdQUlJlZykpOworICAgIHJpZ2h0T0subGlu
aygmbV9qaXQpOworCisgICAgbV9qaXQuY29tcGFyZTY0KGludmVydCA/IEpJVENvbXBpbGVyOjpO
b3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMVJlZ3MuZ3ByKCksIGFyZzJSZWdzLmdw
cigpLCByZXN1bHRHUFIpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKKworICAgIHR3b0NlbGxzQ2FzZS5saW5rKCZtX2ppdCk7CisgICAgc2xvd1BhdGhDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxUmVncy5n
cHIoKSwgYXJnMlJlZ3MuZ3ByKCkpKTsKKworICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW02NCghaW52ZXJ0KSwgcmVzdWx0R1BSKTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHN0ZDo6bWFrZV91bmlxdWU8Q29tcGFyZVNsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdD4+KAorICAgICAgICBzbG93UGF0aENhc2VzLCB0aGlzLCBvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMVJlZ3MsIGFyZzJSZWdzKSk7CisKKyAgICBk
b25lLmxpbmsoJm1faml0KTsKKworICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BS
LCBtX2N1cnJlbnROb2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQpAQCAtMzg2NCwxMCArMzY3MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIENoZWNrTm90RW1wdHk6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBvcGVyYW5kLmdwcigp
OwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFREWkZhaWx1cmUsIEpTVmFsdWVTb3VyY2UoKSwg
bnVsbHB0ciwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBncHIpKTsKLSAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVDaGVja05vdEVtcHR5KG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM5ODksMzMgKzM3OTIsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0
QnlJZEZsdXNoOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
LSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIsIG5vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCgpLCBEb250
U3BpbGwpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0QnlJ
ZEZsdXNoKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
UHV0QnlJZDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgCi0g
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKLSAgICAgICAgCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJl
cigpLCBOb3REaXJlY3QpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21w
aWxlUHV0QnlJZChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDQzLDE3ICsz
ODI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUiwgbm9k
ZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUp
OworICAgICAgICBjb21waWxlUHV0QnlJZERpcmVjdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkBAIC00MTMxLDM4ICszOTAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgT3ZlcnJpZGVzSGFzSW5zdGFuY2U6IHsK
LQotICAgICAgICBOb2RlKiBoYXNJbnN0YW5jZVZhbHVlTm9kZSA9IG5vZGUtPmNoaWxkMigpLm5v
ZGUoKTsKLSAgICAgICAgSlNGdW5jdGlvbiogZGVmYXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KG5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOwotCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdERlZmF1bHQ7Ci0gICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBoYXNJbnN0YW5jZVZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAg
ICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgY29uc3RhbnQgZm9sZGluZyBoYW5kbGVkIGF1dG9t
YXRpY2FsbHkgdGhlIGNhc2Ugd2hlcmUgd2Uga25ldyB0aGUgaGFzSW5zdGFuY2UgZnVuY3Rpb24K
LSAgICAgICAgLy8gd2FzIGEgY29uc3RhbnQuIFVuZm9ydHVuYXRlbHksIHRoZSBmb2xkaW5nIHJ1
bGUgZm9yIE92ZXJyaWRlc0hhc0luc3RhbmNlIGlzIGluIHRoZSBzdHJlbmd0aCByZWR1Y3Rpb24g
cGhhc2UKLSAgICAgICAgLy8gc2luY2UgaXQgcmVsaWVzIG9uIE9TUiBpbmZvcm1hdGlvbi4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDgzMgotICAgICAgICBpZiAo
IWhhc0luc3RhbmNlVmFsdWVOb2RlLT5pc0NlbGxDb25zdGFudCgpIHx8IGRlZmF1bHRIYXNJbnN0
YW5jZUZ1bmN0aW9uICE9IGhhc0luc3RhbmNlVmFsdWVOb2RlLT5hc0NlbGwoKSkgewotICAgICAg
ICAgICAgR1BSUmVnIGhhc0luc3RhbmNlVmFsdWVHUFIgPSBoYXNJbnN0YW5jZVZhbHVlLmdwcigp
OwotICAgICAgICAgICAgbm90RGVmYXVsdCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIGhhc0luc3RhbmNlVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHIobm9kZS0+Y2Vs
bE9wZXJhbmQoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlICdJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJy4KLSAgICAgICAgbV9qaXQudGVzdDgoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQub3Iz
MihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgaWYgKG5vdERlZmF1
bHQuaXNTZXQoKSkgewotICAgICAgICAgICAgbm90RGVmYXVsdC5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgICAgICBtb3ZlVHJ1ZVRvKHJlc3VsdEdQUik7Ci0gICAgICAgIH0KLQotICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERh
dGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBjb21waWxlT3ZlcnJpZGVzSGFzSW5zdGFuY2Uo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDE3Niw3ICszOTE3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBjYXNlIElzRW1wdHk6IHsgICAgICAgIAorICAgIGNhc2UgSXNFbXB0eTogewog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKIApAQCAtNDU5Nywy
MyArNDMzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICB9CiAKICAgICBjYXNlIElzT2JqZWN0OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBSZXVzZSwgdmFsdWUpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9
IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZS5qc1ZhbHVlUmVncygpKTsKLQotICAgICAgICBt
X2ppdC5jb21wYXJlOChKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLAotICAgICAgICAgICAgSklU
Q29tcGlsZXI6OkFkZHJlc3ModmFsdWUuZ3ByKCksIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLAotICAgICAgICAgICAg
cmVzdWx0LmdwcigpKTsKLSAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxz
ZSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7Ci0KLSAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgY29tcGlsZUlzT2JqZWN0KG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ2NjYsNTUgKzQzOTEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBMb2FkVmFyYXJnczogewotICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBhcmd1bWVu
dHNHUFI7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVu
dHMuZ3ByKCk7Ci0gICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCk7Ci0gICAgICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIAotICAgICAgICBsb2NrKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGFyZ3VtZW50c0dQ
UiA9IGFyZ3VtZW50cy5ncHIoKTsKLSAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBh
biBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKLSAgICAgICAg
Ly8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1
YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCi0gICAgICAgIC8vIHN0YW5kcG9pbnQu
IFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byog
dGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAotICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCi0g
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgK
LQotICAgICAgICBHUFJSZWcgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KLSAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBh
cmd1bWVudHNHUFIpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKTsK
LQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93
LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLAotICAgICAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOwot
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRp
bmdUaGlzR1BSLAotICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsK
LSAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BS
LCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKLSAgICAgICAg
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIGRhdGEtPm1hY2hp
bmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzR1BSLCBkYXRhLT5vZmZzZXQsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKLSAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAg
ICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC00OTQ2LDE0MiArNDYyMywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
LQotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBp
bmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7Ci0gICAgICAgIHN3aXRj
aCAobW9kZS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIEFTU0VSVCghIW5vZGUtPmNoaWxk
MygpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hp
bGQzKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAg
ICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgb3V0T2ZCb3VuZHMpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3Vu
ZHMpOwotCi0gICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBtb3ZlVHJ1
ZVRvKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIEFTU0VSVCghIW5vZGUtPmNoaWxkMygp
KTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQz
KCkpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7Ci0gICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgICAgICAgICAgaWYgKG1vZGUu
aXNJbkJvdW5kcygpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIDAsIG91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLQotICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIs
IGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNjcmF0Y2hGUFIpOwotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHNjcmF0Y2hGUFIsIHNjcmF0Y2hGUFIpKTsK
LSAgICAgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICAg
ICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKLQotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdl
LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwot
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSk7Ci0gICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCi0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgb3V0T2ZC
b3VuZHMpOwotICAgICAgICAgICAgZWxzZSAgICAKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG91dE9mQm91bmRzKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRH
UFIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDogewot
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9w
ZXJ0eUJ5SW50LCByZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQz
Ml90Pihub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpKTsKLSAgICAgICAgCi0gICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAg
ICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgRWRnZSYgYmFzZUVkZ2UgPSBt
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICBFZGdlJiBwcm9wZXJ0
eUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICBFZGdl
JiBpbmRleEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAg
ICBFZGdlJiBlbnVtZXJhdG9yRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
Myk7Ci0KLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7
Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIHByb3BlcnR5RWRn
ZSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBpbmRl
eEVkZ2UpOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIGVu
dW1lcmF0b3JFZGdlKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaDIodGhpcyk7Ci0KLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAg
ICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgR1BSUmVn
IGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0g
ZW51bWVyYXRvci5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwotCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLQotICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgICAgIHNs
b3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICAgICAgc2NyYXRjaDFH
UFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAg
ICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIENvbXB1dGUgdGhl
IG9mZnNldAotICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3In
cyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mTGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIAotICAgICAgICAgICAgaW5kZXhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotCi0gICAgICAgIG1faml0Lmxv
YWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwg
cmVzdWx0R1BSKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOwotICAgICAgICAKLSAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUK
LSAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7Ci0gICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNj
cmF0Y2gxR1BSKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwotICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNo
MUdQUik7Ci0gICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gxR1BSLCBzY3Jh
dGNoMUdQUik7Ci0gICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHNjcmF0Y2gyR1BSLCBzY3JhdGNoMUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7Ci0KLSAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0R1BSLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUikpOwotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1lKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKQEAgLTUyMDIs
MTIgKzQ3NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDogewotICAgICAgICBK
U1ZhbHVlKiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29kZSgp
LT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKVtub2RlLT5jYXRjaE9T
UkVudHJ5SW5kZXgoKV07Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIG1faml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHB0ciksIHRlbXBHUFIpOwotICAgICAgICBtX2ppdC5sb2Fk
NjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHRlbXBHUFIpLCB0ZW1wR1BSKTsKLSAgICAgICAganNW
YWx1ZVJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUV4dHJhY3RDYXRjaExv
Y2FsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTU0MzUsNTUgKzQ5NzYsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20oTm9kZSogbm9kZSkKICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEluaXRpYWxpemVCdXR0ZXJmbHkoR1BSUmVnIHN0b3JhZ2VHUFIsIEdQUlJlZyBz
aXplR1BSLCBKU1ZhbHVlUmVncyBlbXB0eVZhbHVlUmVncywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17
Ci0gICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoc2l6ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgc2NyYXRjaEdQUik7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3Ag
PSBtX2ppdC5sYWJlbCgpOwotICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aEdQUik7Ci0gICAgbV9qaXQuc3RvcmU2NChlbXB0eVZhbHVlUmVncy5ncHIoKSwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCkpOwotICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgc2NyYXRjaEdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0gICAgZG9uZS5saW5rKCZt
X2ppdCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5
V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgR1BSUmVnIHJlc3VsdEdQUiwg
R1BSUmVnIHNpemVHUFIsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGJvb2wgc2hvdWxkQ29u
dmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlKQotewotICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdl
KHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoMih0aGlzKTsKLSAgICAKLSAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgIEdQUlJl
ZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwotICAgIAotICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgc3RvcmFnZUdQUik7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBpZiAoc2hvdWxkQ29udmVydExhcmdlU2l6ZVRv
QXJyYXlTdG9yYWdlKQotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJbW0zMihNSU5fQVJS
QVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSkpOwotICAgICAgICAgICAgCi0gICAgLy8g
V2UgY2FuIHVzZSByZXN1bHRHUFIgYXMgYSBzY3JhdGNoIHJpZ2h0IG5vdy4KLSAgICBlbWl0QWxs
b2NhdGVCdXR0ZXJmbHkoc3RvcmFnZUdQUiwgc2l6ZUdQUiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLQotICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdU
eXBlKSkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKSwgc2NyYXRjaEdQUik7Ci0gICAgZWxzZQotICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHNjcmF0Y2hHUFIpOwotICAg
IGVtaXRJbml0aWFsaXplQnV0dGVyZmx5KHN0b3JhZ2VHUFIsIHNpemVHUFIsIEpTVmFsdWVSZWdz
KHNjcmF0Y2hHUFIpLCBzY3JhdGNoMkdQUik7Ci0KLSAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0
cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBl
KSk7Ci0KLSAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIs
IHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsK
LSAgICAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJh
eUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCi0gICAgICAgIHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLAotICAg
ICAgICBzdHJ1Y3R1cmUsCi0gICAgICAgIHNob3VsZENvbnZlcnRMYXJnZVNpemVUb0FycmF5U3Rv
cmFnZSA/IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKSkgOiBzdHJ1Y3R1cmUsCi0gICAgICAgIHNpemVHUFIsIHN0b3JhZ2VHUFIpKTsKLX0K
LQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA3MWEyZTU4MTI2MDRjMzg1YzIw
MzA1OWRjYjYzMTE5NWYxYmQzN2I0Li41MGYyNmJiMjUwOGIyZGVkYzlmNzQ0MzhkNGZkYWRiMGI4
NmIyOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCkBAIC0xMDAzNCw5ICsxMDAzNCw4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAg
ICAgICBtX291dC5icmFuY2goY2hlY2tIb2xlUmVzdWx0VmFsdWUsIHVzdWFsbHkoY29udGludWF0
aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCi0gICAgICAgICAg
ICAgICAgdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5QnlJbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlw
ZSkpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3IoCisgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50KSwgbV9jYWxsRnJhbWUs
IGJhc2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7CiAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwpAQCAtMTAwNzEsOSArMTAwNzAsOCBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGNoZWNrSG9sZVJlc3VsdFZhbHVlLCB1c3Vh
bGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZXF1YWwo
Ci0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSksIAotICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2Us
IGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFpl
cm82NCh2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJv
cGVydHlCeUludCksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBl
KSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAg
LTEwMTA3LDkgKzEwMTA1LDggQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaChjaGVja0hvbGVSZXN1bHRWYWx1ZSwgdXN1YWxseShjb250aW51YXRpb24pLCBy
YXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2Us
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLAotICAgICAgICAgICAgICAgIHZt
Q2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5
SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7Cisg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAg
ICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCksIG1fY2FsbEZyYW1lLCBiYXNlLCBp
bmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKQEAgLTEwMTIxLDkgKzEwMTE4LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAg
ICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgTFZhbHVlIGludGVybmFsTWV0aG9kVHlwZSA9IG1fb3V0LmNvbnN0SW50MzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obV9ub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUoKSkpOwotICAgICAgICAg
ICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwKLSAgICAgICAgICAgICAgICB2
bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlC
eUludCksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOwor
ICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQpLCBtX2NhbGxGcmFt
ZSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCmluZGV4IDE4ODI4OTZlMTA2OGQ3NDE1ZmUxYmJmZWUwMGExNWM1ZDJiMzQ5
ODAuLjE0ZWRkM2ZkMTcwYTA4ZDEyMGZiNzc3OTNiYzA5YmUyZTlhZDY3YWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMTY0LDggKzE2NCw4IEBA
IGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgbG9hZDY0KGFkZHJlc3MsIHJlZ3MuZ3ByKCkpOwogI2Vsc2UK
LSAgICAgICAgbG9hZDMyKGJpdHdpc2VfY2FzdDx2b2lkKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oYWRkcmVzcykgKyBQYXlsb2FkT2Zmc2V0KSwgcmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAg
ICBsb2FkMzIoYml0d2lzZV9jYXN0PHZvaWQqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihhZGRy
ZXNzKSArIFRhZ09mZnNldCksIHJlZ3MudGFnR1BSKCkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYWRkcmVzcyksIHJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgbG9hZFZhbHVlKEFk
ZHJlc3MocmVncy5wYXlsb2FkR1BSKCkpLCByZWdzKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAg
LTEwMDksMjQgKzEwMDksNTMgQEAgY2xhc3MgQXNzZW1ibHlIZWxwZXJzIDogcHVibGljIE1hY3Jv
QXNzZW1ibGVyIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0
KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEdQ
UlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBH
UFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFs
aWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2Vy
dmU1ID0gSW52YWxpZEdQUlJlZykKKyAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIo
UmVnaXN0ZXJTZXQgcHJlc2VydmVkKQogICAgIHsKLSAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBH
UFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUz
ICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVz
ZXJ2ZTUgIT0gR1BSSW5mbzo6cmVnVDApCi0gICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVn
VDA7CisgICAgICAgIEdQUlJlZyByZWdpc3RlcnNbXSA9IHsKKyAgICAgICAgICAgIEdQUkluZm86
OnJlZ1QwLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEsCisgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMiwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QzLAorICAgICAgICAgICAgR1BSSW5m
bzo6cmVnVDQsCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUNSwKKyAgICAgICAgfTsKIAotICAg
ICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMiAhPSBHUFJJ
bmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmU0ICE9
IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlNSAhPSBHUFJJbmZvOjpyZWdUMSkKLSAgICAgICAg
ICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMTsKKyAgICAgICAgZm9yIChHUFJSZWcgcmVnIDogcmVn
aXN0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIXByZXNlcnZlZC5jb250YWlucyhyZWcpKQorICAg
ICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgfQog
Ci0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUyICE9
IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2
ZTQgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1QyKQotICAg
ICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QyOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IFJlZ3M+CisgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKFJlZ3MuLi4gYXJncykK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHNldDsKKyAgICAgICAgY29uc3RydWN0UmVnaXN0
ZXJTZXQoc2V0LCBhcmdzLi4uKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdFNjcmF0Y2hHUFIoc2V0
KTsKKyAgICB9CiAKLSAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMyAmJiBw
cmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDMgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1Qz
ICYmIHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUMyAmJiBwcmVzZXJ2ZTUgIT0gR1BSSW5mbzo6
cmVnVDMpCi0gICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIHZv
aWQgY29uc3RydWN0UmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQmKQorICAgIHsKKyAgICB9CiAKLSAg
ICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTIgIT0gR1BS
SW5mbzo6cmVnVDQgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1Q0ICYmIHByZXNlcnZlNCAh
PSBHUFJJbmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTUgIT0gR1BSSW5mbzo6cmVnVDQpCi0gICAgICAg
ICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUmVn
cz4KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RSZWdpc3RlclNldChSZWdpc3RlclNldCYgc2V0
LCBKU1ZhbHVlUmVncyByZWdzLCBSZWdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBpZiAocmVn
cy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgc2V0LnNldChyZWdzLnRh
Z0dQUigpKTsKKyAgICAgICAgaWYgKHJlZ3MucGF5bG9hZEdQUigpICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICBzZXQuc2V0KHJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgY29uc3Ry
dWN0UmVnaXN0ZXJTZXQoc2V0LCBhcmdzLi4uKTsKKyAgICB9CiAKLSAgICAgICAgcmV0dXJuIEdQ
UkluZm86OnJlZ1Q1OworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFJlZ3M+CisgICAgc3RhdGlj
IHZvaWQgY29uc3RydWN0UmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQmIHNldCwgR1BSUmVnIHJlZywg
UmVncy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKHJlZyAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgc2V0LnNldChyZWcpOworICAgICAgICBjb25zdHJ1Y3RSZWdpc3RlclNldChz
ZXQsIGFyZ3MuLi4pOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGRlYnVnIGNhbGwuIFRoaXMgY2Fs
bCBoYXMgbm8gZWZmZWN0IG9uIEpJVCBjb2RlIGV4ZWN1dGlvbiBzdGF0ZS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAppbmRleCAyNDhkZmQ0OTI2ZDYwNTdiNjQ3MWYzZmMy
MWU2MjRlZGZmMDdhYzA5Li42YmE5YjU3ZTFjYTI0NGU4NmVmMDRiOWMzMmVlOTg1OTU2NjY4ZDQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCkBAIC0yMDcsNiArMjA3
LDcgQEAgY2xhc3MgUmVnaXN0ZXJTZXQgewogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFu
eShSZWcgcmVnKSB7IHNldChyZWcpOyB9CisgICAgdm9pZCBzZXRBbnkoSlNWYWx1ZVJlZ3MgcmVn
KSB7IHNldChyZWcpOyB9CiAgICAgdm9pZCBzZXRBbnkoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkg
eyBtZXJnZShzZXQpOyB9CiAgICAgdm9pZCBzZXRNYW55KCkgeyB9CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgUmVnVHlwZSwgdHlwZW5hbWUuLi4gUmVncz4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336998</attachid>
            <date>2018-04-02 10:47:20 -0700</date>
            <delta_ts>2018-04-10 23:26:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184236-20180403024718.patch</filename>
            <type>text/plain</type>
            <size>114101</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MmEzNjcxOTRhMDVkYmM3Y2M0MGQ0Njg0MjkzNDc0YzRhZmNiYmQ4Li45NjM5NDFhOTliNjU2Mjc4
MGZmMWRkNGNkZjNhNzc1MWNjYTcxYjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAxOC0wNC0wMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBSZW1vdmUgZHVwbGljYXRlIDMyYml0IGNvZGUgbW9yZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjM2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGR1
cGxpY2F0ZSAzMmJpdCBjb2RlIG1vcmUgYWdncmVzc2l2ZWx5IHBhcnQgMi4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZn
L0RGR0NvbXBhcmVTbG93UGF0aEdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVTbG93UGF0aEdlbmVyYXRvcik6Cisg
ICAgICAgIERyb3AgYm94aW5nIHBhcnQuIFVzZSB1bmJsZXNzZWRCb29sZWFuUmVzdWx0IGluIERG
R1NwZWN1bGF0aXZlSklUIHNpZGUgaW5zdGVhZC4KKworICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPdmVycmlkZXNIYXNJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDaGVja05vdEVtcHR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5SWRGbHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5SWREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0SW5pdGlhbGl6ZUJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBu
YW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUV4dHJhY3RD
YXRjaExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OnNlbGVjdFNjcmF0Y2hHUFIpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5k
Qm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yOjpDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpDb21wYXJlQW5kQm94Qm9v
bGVhblNsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNv
bXBhcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTWlzY1N0cmljdEVxKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEluaXRpYWxpemVCdXR0ZXJmbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RF
cSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Q29tcGFyZUFuZEJveEJvb2xlYW5T
bG93UGF0aEdlbmVyYXRvcjo6Q29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0SW5pdGlhbGl6
ZUJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgb3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5QnlJbnQgc3RhcnRzIHJldHVybmluZyB1bmJsZXNzZWQgYm9vbGVhbiB3aXRo
IHNpemVfdC4KKworICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjpsb2FkVmFsdWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmNvbnN0cnVjdFJlZ2lzdGVyU2V0KToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDoKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisgICAgICAgIENsZWFuIHVwIHNlbGVj
dFNjcmF0Y2hHUFIgY29kZSB0byBwYXNzIEpTVmFsdWVSZWdzLgorCiAyMDE4LTA0LTAyICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtERkddIE1vcmUg
YWdncmVzc2l2ZSByZW1vdmFsIG9mIGR1cGxpY2F0ZSAzMmJpdCBERkcgY29kZQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA3NTQ4YmFjMjM3ZjAyODg1OTEwNTMxZTI4ZjBjNGQ3Yzk5
Y2I3YTg1Li5iNTcwNDdjZmMxZDEwZjk0MzFiYTk0MjA5ZDUxNjFmMzA4MGVhZmYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTcwOCw2ICsxNzA4LDcgQEAKIAkJRTM1NDYyMkIx
QjYwNjVEMTAwNTQ1Mzg2IC8qIENvbnN0cnVjdEFiaWxpdHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTQ2MjJBMUI2MDY1RDEwMDU0NTM4NiAvKiBD
b25zdHJ1Y3RBYmlsaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTM1NTVCOEExREFFMDNBNTAwRjM2OTIxIC8qIERPTUpJVENhbGxET01HZXR0
ZXJTbmlwcGV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzU1NUI4OTFEQUUwM0EyMDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclNuaXBwZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzU1
RjM1MzFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1RjM1MTFCN0RDODUzMDBD
NTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmggKi87IH07CisJCUUzNTZEODY0MjA3Mjgz
ODEwMDVBQzc1MCAvKiBERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTZEODYzMjA3MjgzODEwMDVBQzc1
MCAvKiBERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRTM1Q0ExNTQxREJD
M0E1QzAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1Q0ExNTIxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJ
VEhlYXBSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUUzNUNBMTU2MURCQzNBNUYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUNBMTUwMURC
QzNBNTYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVFMDM2MDFCN0FCNDNFMDA3M0FEMkEg
LyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFMDM1RTFCN0FCNDNFMDA3M0FEMkEgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ1NjAsNiArNDU2MSw3IEBACiAJCUUzNTU1Qjg5MURB
RTAzQTIwMEYzNjkyMSAvKiBET01KSVRDYWxsRE9NR2V0dGVyU25pcHBldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01KSVRDYWxsRE9NR2V0dGVyU25pcHBldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzU1RjM1MDFCN0RDODUzMDBDNTBEQzUgLyogTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1vZHVsZUxvYWRlclByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNTVGMzUxMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlTG9hZGVyUHJvdG90eXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTZEODYzMjA3MjgzODEwMDVBQzc1MCAv
KiBERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQ29tcGFyZVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ29t
cGFyZVNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
NUNBMTRGMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NSklUQWJzdHJhY3RIZWFwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNTAxREJDM0E1NjAwRjgzNTE2IC8qIERP
TUpJVEFic3RyYWN0SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01K
SVRBYnN0cmFjdEhlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNTEx
REJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNzE3MCw2ICs3MTcyLDcgQEAKIAkJCQkwRkMwOTc3RTE0NjlFQkM0MDBD
RjI0NDIgLyogREZHQ29tbW9uLmggKi8sCiAJCQkJMEZFQTBBMkQxNzBENDBCRjAwQkI3MjJDIC8q
IERGR0NvbW1vbkRhdGEuY3BwICovLAogCQkJCTBGRUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdDb21tb25EYXRhLmggKi8sCisJCQkJRTM1NkQ4NjMyMDcyODM4MTAwNUFDNzUwIC8qIERGR0Nv
bXBhcmVTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTBGMzhCMDEzMTdDRkU3NTUwMEIxNDRE
MyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi8sCiAJCQkJMEYzOEIwMTQxN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggKi8sCiAJCQkJMEYzOEIwMTUxN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8sCkBAIC04NTE5LDYgKzg1MjIsNyBAQAog
CQkJCTBGMDQzOTZFMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9u
RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1NkQ4NjQyMDcyODM4MTAwNUFDNzUwIC8qIERG
R0NvbXBhcmVTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIwMTgx
N0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjNCM0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTA0NCw3ICs5MDQ4LDYgQEAKIAkJCQlBNTAz
RkExRTE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xleGljYWxF
bnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0E5Nzc0QTgyMDZCODJFNDAwOEQwM0Qw
IC8qIEpTV2Vha1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBG
Q0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThB
NDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTkxMTYsNiArOTExOSw3IEBACiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpT
V2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEIyODZCMUVC
OEU2Q0YwMDBFQjVEMiAvKiBKU1dlYWtQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlG
Qjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3
QTk3NzRBODIwNkI4MkU0MDA4RDAzRDAgLyogSlNXZWFrVmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21wYXJlU2xvd1BhdGhHZW5lcmF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGFyZVNsb3dQYXRoR2VuZXJh
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2MzZjA1YjhlNmQxZDkwOWUyZWM5ZTg4Mjc4NmNkZWU0ZmVmYTE2
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGFy
ZVNsb3dQYXRoR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlw
ZT4KK2NsYXNzIENvbXBhcmVTbG93UGF0aEdlbmVyYXRvcgorICAgIDogcHVibGljIENhbGxTbG93
UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKK3B1
YmxpYzoKKyAgICBDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgIEp1bXBUeXBlIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCisgICAgICAgIFNfSklUT3BlcmF0aW9uX0VKSiBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikK
KyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfSklUT3BlcmF0aW9u
X0VKSiwgR1BSUmVnPigKKyAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5lZWRUb1Nw
aWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwgcmVzdWx0KQorICAg
ICAgICAsIG1fYXJnMShhcmcxKQorICAgICAgICAsIG1fYXJnMihhcmcyKQorICAgIHsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQq
IGppdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHRoaXMtPnNldFVwKGppdCk7CisgICAgICAg
IHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIHRo
aXMtPm1fcmVzdWx0LCBtX2FyZzEsIG1fYXJnMikpOworICAgICAgICB0aGlzLT50ZWFyRG93bihq
aXQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1ZhbHVlUmVncyBtX2FyZzE7CisgICAgSlNW
YWx1ZVJlZ3MgbV9hcmcyOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IGVj
MzA1MDA2YTUzMjI2YjlmMDhiNGZiZjQwZWQ4MmEzZDhjZThmZWMuLjEwNmI5NGRkZjNjYTRiNzg2
MWUxNjYyZTIyZjc4ZmFjMWMyYWMzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcApAQCAtMTkxNSwxNiArMTkxNSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2UtPmhhc1By
b3BlcnR5R2VuZXJpYyhleGVjLCBhc1N0cmluZyhwcm9wZXJ0eU5hbWUpLT50b0lkZW50aWZpZXIo
ZXhlYyksIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVk
UHJvcGVydHlCeUludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZUNlbGwsIGludDMyX3Qg
c3Vic2NyaXB0LCBpbnQzMl90IGludGVybmFsTWV0aG9kVHlwZSkKK3NpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQsIGludDMyX3QgaW50ZXJuYWxNZXRob2RU
eXBlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlQ2VsbC0+
dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoVU5M
SUtFTFkoc3Vic2NyaXB0IDwgMCkpIHsKICAgICAgICAgLy8gR28gdGhlIHNsb3dlc3Qgd2F5IHBv
c3NpYmxlIGJlY2F1c2UgbmVnYXRpdmUgaW5kaWNlcyBkb24ndCB1c2UgaW5kZXhlZCBzdG9yYWdl
LgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1By
b3BlcnR5R2VuZXJpYyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHN1YnNjcmlwdCksIHN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlPihpbnRlcm5hbE1ldGhv
ZFR5cGUpKSkpOworICAgICAgICByZXR1cm4gb2JqZWN0LT5oYXNQcm9wZXJ0eUdlbmVyaWMoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBzdWJzY3JpcHQpLCBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZT4oaW50ZXJuYWxNZXRob2RUeXBlKSk7CiAgICAgfQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aGFzUHJvcGVydHlH
ZW5lcmljKGV4ZWMsIHN1YnNjcmlwdCwgc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpKSk7CisgICAgcmV0dXJuIG9iamVjdC0+
aGFzUHJvcGVydHlHZW5lcmljKGV4ZWMsIHN1YnNjcmlwdCwgc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOwogfQogCiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCmluZGV4IGEzNTZkODI4YzdjNmM3NDhmMDQ4MjM3ZDE4MTIw
YjZmZGM5NTAwNGUuLmJjMWY1NjhjZTliMjM1MDJiMmMwYWY5NzZjOWFkYWEwNjBjZjBhMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCkBAIC04MSw3ICs4MSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxXaXRoVGhp
cyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3Rv
dHlwZU9mT2JqZWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCopOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludChFeGVjU3RhdGUqLCBKU0NlbGwq
LCBpbnQzMl90LCBpbnQzMl90KTsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eUJ5SW50KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QsIGludDMyX3Qp
OwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvcihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSosIGludDMy
X3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAppbmRleCBlNDQyYjRiYWI4YmQxN2U0NWQ1YmIzOGE4N2FkNDQyYzBiMTE5YjhjLi5mODhjZGRj
ZDIwYzI0NTgxOTMxMjJkNmFlMjdiYmE3MzBhOWZlODk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkRGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkRGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNXaXRoS25vd25MZW5ndGhTbG93
UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUg
IkRGR0NvbXBhcmVTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIK
ICNpbmNsdWRlICJERkdPU1JFeGl0RnV6ei5oIgogI2luY2x1ZGUgIkRGR1NhbmVTdHJpbmdHZXRC
eVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgiCkBAIC0xMTM2LDI3ICsxMTM3LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1c2hXaXRoU2NvcGUoTm9kZSogbm9kZSkKICAgICBjZWxsUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi17Ci0gICAgdW5z
aWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKLSAgICBp
ZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJyYW5j
aE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwotCi0gICAgICAgIEFTU0VS
VChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgIAotICAgICAgICBub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmQsIGhlbHBlckZ1
bmN0aW9uKTsKLSAgICAKLSAgICAgICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxv
Y2s7Ci0gICAgICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhv
bGVDb21wYXJlKG5vZGUsIGNvbmQsIGhlbHBlckZ1bmN0aW9uKTsKLSAgICAKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlU3RyaWN0RXEo
Tm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJs
b2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKQEAgLTM0MjAsNiArMzQwMCw0NSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGFyc2VJbnQoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT3ZlcnJpZGVzSGFzSW5zdGFuY2UoTm9kZSogbm9kZSkKK3sKKyAgICBOb2RlKiBoYXNJbnN0
YW5jZVZhbHVlTm9kZSA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICBKU0Z1bmN0aW9uKiBk
ZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+Y2Vs
bE9wZXJhbmQoKS0+dmFsdWUoKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm90
RGVmYXVsdDsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBoYXNJbnN0YW5jZVZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiBjb25zdGFudCBmb2xkaW5nIGhhbmRsZWQg
YXV0b21hdGljYWxseSB0aGUgY2FzZSB3aGVyZSB3ZSBrbmV3IHRoZSBoYXNJbnN0YW5jZSBmdW5j
dGlvbgorICAgIC8vIHdhcyBhIGNvbnN0YW50LiBVbmZvcnR1bmF0ZWx5LCB0aGUgZm9sZGluZyBy
dWxlIGZvciBPdmVycmlkZXNIYXNJbnN0YW5jZSBpcyBpbiB0aGUgc3RyZW5ndGggcmVkdWN0aW9u
IHBoYXNlCisgICAgLy8gc2luY2UgaXQgcmVsaWVzIG9uIE9TUiBpbmZvcm1hdGlvbi4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDgzMgorICAgIGlmICghaGFzSW5z
dGFuY2VWYWx1ZU5vZGUtPmlzQ2VsbENvbnN0YW50KCkgfHwgZGVmYXVsdEhhc0luc3RhbmNlRnVu
Y3Rpb24gIT0gaGFzSW5zdGFuY2VWYWx1ZU5vZGUtPmFzQ2VsbCgpKSB7CisgICAgICAgIEpTVmFs
dWVSZWdzIGhhc0luc3RhbmNlVmFsdWVSZWdzID0gaGFzSW5zdGFuY2VWYWx1ZS5qc1ZhbHVlUmVn
cygpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG5vdERlZmF1bHQuYXBwZW5kKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGhhc0luc3RhbmNlVmFsdWVSZWdz
LmdwcigpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpKSk7CisjZWxzZQorICAg
ICAgICBub3REZWZhdWx0LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoaGFzSW5zdGFuY2VW
YWx1ZVJlZ3MpKTsKKyAgICAgICAgbm90RGVmYXVsdC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaGFzSW5zdGFuY2VWYWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpKSk7CisjZW5kaWYKKyAgICB9CisK
KyAgICAvLyBDaGVjayB0aGF0IGJhc2UgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgor
ICAgIG1faml0LnRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlc3VsdEdQ
Uik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAg
IGlmICghbm90RGVmYXVsdC5lbXB0eSgpKSB7CisgICAgICAgIG5vdERlZmF1bHQubGluaygmbV9q
aXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAg
ICB9CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0
YW5jZU9mKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBVbnR5cGVkVXNlKSB7CkBAIC02OTAyLDYgKzY5MjEsNTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUp
OwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9k
ZSkKK3sKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKworICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3M7CisgICAgeworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBhcmd1
bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgfQorCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdz
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVncywgZGF0YS0+b2Zmc2V0KTsK
KyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFs
dWVSZWdzKCk7CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgfQorICAgIHVubG9jayhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFu
Y2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4g
VGhpcyBpcyBzYWZlCisgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRl
Z3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCisgICAg
Ly8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNh
biBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAgLy8gcGFzdCB0aGUg
c2l6aW5nLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDE0NDgKKworICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICBK
SVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJn
dW1lbnRzUmVncyk7CisKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOworCisgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVk
Z2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUs
CisgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUikpOworCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCisgICAgICAgICAgICBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXNHUFIsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQp
KSk7CisKKyAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFy
Z3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEt
Pm1hbmRhdG9yeU1pbmltdW0pOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBu
b1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRW
YXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7CkBAIC04NTM4LDYgKzg2MTAsMzMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7
CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdChOb2RlKiBub2RlKQor
eworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVl
KTsKKyNlbHNlCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgdmFsdWUsIFRh
Z1dvcmQpOworI2VuZGlmCisKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1Zh
bHVlUmVncygpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFsdWVS
ZWdzKTsKKworICAgIG1faml0LmNvbXBhcmU4KEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCisg
ICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoT2JqZWN0VHlw
ZSksCisgICAgICAgIHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKiBub2RlKQogewogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwpAQCAtODY5Niw2ICs4Nzk1LDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0NlbGwoTm9kZSogbm9kZSkKICAgICBub1Jlc3Vs
dChub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrTm90RW1wdHko
Tm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyByZWdzID0gb3BlcmFuZC5qc1ZhbHVlUmVncygpOwor
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVERaRmFpbHVyZSwgSlNWYWx1ZVNvdXJjZSgpLCBudWxscHRy
LCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlZ3MpKTsKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCiB7
CiAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKQEAgLTExNTc0LDYgKzEx
NjgxLDUyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0luZGV4U3RyaW5nKE5vZGUq
IG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBjYWNo
ZWRQdXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYmFzZUdQUiwgdmFsdWVSZWdzLCBzY3Jh
dGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAoKSwgRG9udFNwaWxsKTsKKworICAgIG5vUmVzdWx0KG5vZGUpOworfQorCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZChOb2RlKiBub2RlKQoreworICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBiYXNlR1BSLCB2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZp
ZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOworfQorCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKiBub2RlKQoreworICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+
b3JpZ2luLnNlbWFudGljLCBiYXNlR1BSLCB2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIG5vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZFdpdGhUaGlzKE5vZGUqIG5vZGUpCiB7
CiAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMTg3
OCw3ICsxMjAzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhT
aXplKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLSAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2VsZWN0U2NyYXRjaEdQUihzaXplR1BSKTsK
KyAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKHNpemVHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJpZ0xlbmd0aCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJ
bW0zMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSk7CiAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSksIHN0cnVjdHVyZUdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKQEAgLTEyNDI3LDYgKzEyNTgwLDQxOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSWRlbnRpdHkoTm9kZSogbm9kZSkKICAgICB9CiB9CiAK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEoTm9kZSogbm9kZSkKK3sK
KyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxk
MigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1pc2NVc2UpCisg
ICAgICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQxKCksIG9wMS5qc1ZhbHVlUmVncygpKTsK
KyAgICBpZiAobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE1pc2NVc2UpCisgICAgICAgIHNw
ZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQyKCksIG9wMi5qc1ZhbHVlUmVncygpKTsKKworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgbV9qaXQuY29tcGFyZTY0KEpJVENvbXBpbGVyOjpFcXVhbCwgb3Ax
LmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisjZWxzZQorICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dEVxdWFsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBvcDEudGFnR1BS
KCksIG9wMi50YWdHUFIoKSk7CisgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVh
bCwgb3AxLnBheWxvYWRHUFIoKSwgb3AyLnBheWxvYWRHUFIoKSwgcmVzdWx0LmdwcigpKTsKKyAg
ICBub3RFcXVhbC5saW5rKCZtX2ppdCk7CisjZW5kaWYKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJ
bml0aWFsaXplQnV0dGVyZmx5KEdQUlJlZyBzdG9yYWdlR1BSLCBHUFJSZWcgc2l6ZUdQUiwgSlNW
YWx1ZVJlZ3MgZW1wdHlWYWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIG1faml0
Lnplcm9FeHRlbmQzMlRvUHRyKHNpemVHUFIsIHNjcmF0Y2hHUFIpOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2hHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFi
ZWwoKTsKKyAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOworICAg
IG1faml0LnN0b3JlVmFsdWUoZW1wdHlWYWx1ZVJlZ3MsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsK
KyAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hH
UFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAgIGRvbmUubGluaygmbV9qaXQpOworfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzaXplR1BS
LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBib29sIHNob3VsZENvbnZlcnRMYXJnZVNpemVU
b0FycmF5U3RvcmFnZSkKK3sKKyAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhp
cyk7CisKKyAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNj
cmF0Y2gyLmdwcigpOworCisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBz
dG9yYWdlR1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgaWYgKHNob3VsZENvbnZlcnRMYXJnZVNpemVUb0FycmF5U3RvcmFnZSkKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzaXplR1BSLCBUcnVzdGVkSW1tMzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xF
TkdUSCkpKTsKKworICAgIC8vIFdlIGNhbiB1c2UgcmVzdWx0R1BSIGFzIGEgc2NyYXRjaCByaWdo
dCBub3cuCisgICAgZW1pdEFsbG9jYXRlQnV0dGVyZmx5KHN0b3JhZ2VHUFIsIHNpemVHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCByZXN1bHRHUFIsIHNsb3dDYXNlcyk7CisKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIGVtcHR5VmFsdWVSZWdzKHNjcmF0Y2hHUFIpOwor
ICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tNjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgZW1wdHlWYWx1ZVJlZ3MuZ3By
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpLCBlbXB0eVZhbHVlUmVncy5ncHIoKSk7CisjZWxzZQorICAgIEpT
VmFsdWVSZWdzIGVtcHR5VmFsdWVSZWdzKHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKKyAgICBp
ZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSkpCisgICAgICAgIG1faml0Lm1vdmVWYWx1ZShKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBQTmFOKSwgZW1wdHlWYWx1ZVJlZ3MpOworICAg
IGVsc2UKKyAgICAgICAgbV9qaXQubW92ZVZhbHVlKEpTVmFsdWUoKSwgZW1wdHlWYWx1ZVJlZ3Mp
OworI2VuZGlmCisgICAgZW1pdEluaXRpYWxpemVCdXR0ZXJmbHkoc3RvcmFnZUdQUiwgc2l6ZUdQ
UiwgZW1wdHlWYWx1ZVJlZ3MsIHJlc3VsdEdQUik7CisKKyAgICBSZWdpc3RlcmVkU3RydWN0dXJl
IHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdU
eXBlKSk7CisKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIHNsb3dDYXNlcyk7CisKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwor
CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxv
Y2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAorICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwKKyAgICAgICAg
c3RydWN0dXJlLAorICAgICAgICBzaG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2Ug
PyBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkpIDogc3RydWN0dXJlLAorICAgICAgICBzaXplR1BSLCBzdG9yYWdlR1BSKSk7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSkK
K3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUo
KTsKKyAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6SW50MzI6Cisg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICBBU1NFUlQoISFub2RlLT5jaGls
ZDMoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQorICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVs
bHB0ciwgb3V0T2ZCb3VuZHMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG91dE9mQm91bmRzKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1faml0
LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNjcmF0Y2hHUFIpOworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRj
aEdQUikpOworI2Vsc2UKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Cisj
ZW5kaWYKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAg
QVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKKyAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICBpZiAobW9kZS5p
c0luQm91bmRzKCkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBudWxscHRyLCBvdXRPZkJvdW5kcyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworCisgICAgICAgIG1faml0Lmxv
YWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQsIHNjcmF0Y2hGUFIsIHNjcmF0Y2hGUFIpKTsKKyAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQVNTRVJUKCEhbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0
T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBp
bmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkp
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCBudWxscHRyLCBvdXRPZkJvdW5kcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CisjZWxzZQorICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpKSk7CisjZW5kaWYKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IH0KKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCByZXN1bHRHUFIsIGJhc2VHUFIs
IGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2RlLT5pbnRlcm5hbE1ldGhvZFR5cGUo
KSkpKTsKKworICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBuYW1lKE5vZGUqIG5vZGUp
Cit7CisgICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDApOworICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgMSk7CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdl
KTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2Up
OworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworI2lmIENQVShYODYpCisgICAgLy8gTm90IGVub3VnaCBy
ZWdpc3RlcnMgb24gWDg2IGZvciB0aGlzIGNvZGUsIHNvIGFsd2F5cyB1c2UgdGhlIHNsb3cgcGF0
aC4KKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1
bHQgcmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVn
cygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdz
LCBiYXNlR1BSLCBKU1ZhbHVlOjpKU0NlbGxUeXBlLCBwcm9wZXJ0eUdQUik7CisgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwor
I2Vsc2UKKyAgICBFZGdlJiBpbmRleEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpOworICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAzKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhp
cywgaW5kZXhFZGdlKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMs
IGVudW1lcmF0b3JFZGdlKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBHUFJSZWcgaW5kZXhHUFIg
PSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3By
KCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dQYXRoOworCisgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAg
IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAor
ICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAorICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgIC8vIENvbXB1dGUgdGhl
IG9mZnNldAorICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MpOwor
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1f
aml0KTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgIG1f
aml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgIG1faml0LnN1YjMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgIG1faml0Lm5l
ZzMyKHNjcmF0Y2hHUFIpOworICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIs
IHNjcmF0Y2hHUFIpOworICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgocmVzdWx0UmVncy5ncHIoKSwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdFJlZ3MpOworCisg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxDZWxsLCByZXN1bHRSZWdzLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOworI2Vsc2UKKyAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVncywgYmFzZUdQUiwgSlNWYWx1ZTo6SlNDZWxsVHlwZSwg
cHJvcGVydHlHUFIpKTsKKyNlbmRpZgorCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKKyNlbmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRXh0cmFjdENh
dGNoTG9jYWwoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisKKyAg
ICBKU1ZhbHVlKiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKVtub2RlLT5jYXRj
aE9TUkVudHJ5SW5kZXgoKV07CisgICAgbV9qaXQubG9hZFZhbHVlKHB0ciwgcmVzdWx0UmVncyk7
CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNl
R1BSLCBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQoreworICAgIFJlZ2lzdGVy
U2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgaWYgKHNwaWxs
TW9kZSA9PSBEb250U3BpbGwpIHsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBmbHVzaGVkIHJl
Z2lzdGVycyB0byB0aGUgc3RhY2ssIHdlIGRvbid0IG5lZWQgdG8gc3BpbGwgdGhlc2UuCisgICAg
ICAgIHVzZWRSZWdpc3RlcnMuc2V0KGJhc2VHUFIsIGZhbHNlKTsKKyAgICAgICAgdXNlZFJlZ2lz
dGVycy5zZXQodmFsdWVSZWdzLCBmYWxzZSk7CisgICAgfQorICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdP
U1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KGJhc2VHUFIpLCB2YWx1ZVJlZ3MsCisgICAgICAgIHNjcmF0Y2hHUFIsIG1faml0LmVjbWFN
b2RlRm9yKGNvZGVPcmlnaW4pLCBwdXRLaW5kKTsKKworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KG1faml0KTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgaWYg
KHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1Bh
dGhUYXJnZXQpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYXV0byBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBOb1Jlc3VsdCwg
Z2VuLnN0dWJJbmZvKCksIHZhbHVlUmVncywKKyAgICAgICAgYmFzZUdQUiwgaWRlbnRpZmllclVJ
RChpZGVudGlmaWVyTnVtYmVyKSk7CisjZWxzZQorICAgIGF1dG8gc2xvd1BhdGggPSBzbG93UGF0
aENhbGwoCisgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
Tm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2YWx1ZVJlZ3MsCisgICAgICAgIEpTVmFsdWU6OkpT
Q2VsbFR5cGUsIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOworI2Vu
ZGlmCisKKyAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOworICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpK
IGhlbHBlckZ1bmN0aW9uKQoreworICAgIEFTU0VSVChub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50
eXBlZFVzZSkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworCisgICAg
SlNWYWx1ZVJlZ3MgYXJnMVJlZ3MgPSBhcmcxLmpzVmFsdWVSZWdzKCk7CisgICAgSlNWYWx1ZVJl
Z3MgYXJnMlJlZ3MgPSBhcmcyLmpzVmFsdWVSZWdzKCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2xvd1BhdGg7CisKKyAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7
CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhcmcxLnVzZSgpOworICAg
ICAgICBhcmcyLnVzZSgpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMVJlZ3MsIGFyZzJSZWdz
KTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICB1bmJsZXNzZWRC
b29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYXJnMSk7CisjZWxzZQorICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGFyZzEsIFRhZ1dvcmQpOworI2VuZGlmCisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGFyZzEudXNlKCk7CisgICAgYXJn
Mi51c2UoKTsKKworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90SW50MzIoYXJnMVJl
Z3MpKTsKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGFyZzJSZWdzKSk7
CisKKyAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMVJlZ3MucGF5bG9hZEdQUigpLCBhcmcy
UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdEdQUik7CisKKyAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpIHsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1
ZTxDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3I8SklUQ29tcGlsZXI6Okp1bXBMaXN0Pj4oCisgICAg
ICAgICAgICBzbG93UGF0aCwgdGhpcywgaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMVJl
Z3MsIGFyZzJSZWdzKSk7CisgICAgfQorCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1
bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cit9CisKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSogbm9kZSwgTm9k
ZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
U19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQoreworICAgIEJhc2ljQmxvY2sqIHRh
a2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKKyAgICBCYXNpY0Js
b2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uYmxvY2s7
CisKKyAgICBKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24g
PSBKSVRDb21waWxlcjo6Tm9uWmVybzsKKworICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24g
d2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgorICAgIC8vIElmIHRha2VuIGlzIG5leHQs
IHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9u
IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCisgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7
CisgICAgICAgIGNvbmQgPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpOworICAgICAgICBjYWxs
UmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Olplcm87CisgICAgICAgIEJhc2ljQmxvY2sq
IHRtcCA9IHRha2VuOworICAgICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICBub3RUYWtl
biA9IHRtcDsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
KyAgICBKU1ZhbHVlUmVncyBhcmcxUmVncyA9IGFyZzEuanNWYWx1ZVJlZ3MoKTsKKyAgICBKU1Zh
bHVlUmVncyBhcmcyUmVncyA9IGFyZzIuanNWYWx1ZVJlZ3MoKTsKKworICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLT5j
aGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSkpIHsKKyAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGFyZzEudXNlKCk7
CisgICAgICAgIGFyZzIudXNlKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxUmVncywgYXJn
MlJlZ3MpOworICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgIGJyYW5j
aFRlc3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIsIHRha2VuKTsKKyAgICB9IGVs
c2UgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIGFyZzIpOworI2Vsc2UKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBSZXVzZSwgYXJnMiwgVGFnV29yZCk7CisjZW5kaWYKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhcmcxLnVzZSgpOworICAgICAgICBhcmcyLnVz
ZSgpOworCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGFy
ZzFSZWdzKSk7CisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMy
KGFyZzJSZWdzKSk7CisKKyAgICAgICAgYnJhbmNoMzIoY29uZCwgYXJnMVJlZ3MucGF5bG9hZEdQ
UigpLCBhcmcyUmVncy5wYXlsb2FkR1BSKCksIHRha2VuKTsKKworICAgICAgICBpZiAoIWlzS25v
d25JbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNlSnVt
cCk7CisKKyAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKworICAgICAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMVJlZ3MsIGFyZzJSZWdzKTsKKyAg
ICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjYWxsUmVzdWx0Q29u
ZGl0aW9uLCByZXN1bHRHUFIsIHRha2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGp1bXAo
bm90VGFrZW4pOworCisgICAgbV9pbmRleEluQmxvY2sgPSBtX2Jsb2NrLT5zaXplKCkgLSAxOwor
ICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOworfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAppbmRleCBjMDlmOTU1ZTEzMThjYTVmNzZkODYwY2U4YTJlZTZkNzFmZDk1NTg5Li5kMTBhZDJh
ODRiYzAyYmFlOTU4N2JkY2I2NjRlZGQzMjdmZWIyZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0zNDUsMTEgKzM0NSw2IEBAIGNsYXNz
IFNwZWN1bGF0aXZlSklUIHsKIAogICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcihOb2RlKik7
CiAKLSAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9
IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcg
cHJlc2VydmUzID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJS
ZWcpCi0gICAgewotICAgICAgICByZXR1cm4gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKHByZXNlcnZlMSwgcHJlc2VydmUyLCBwcmVzZXJ2ZTMsIHByZXNlcnZlNCk7Ci0gICAgfQot
CiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBzcGVjdWxhdGl2ZSBvcGVyYW5kIHR5cGVzLCBiZWxvdywg
dG8gZmlsbCBvcGVyYW5kIHRvCiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGltcGxpY2l0bHkg
Z2VuZXJhdGluZyBzcGVjdWxhdGlvbiBjaGVja3MgYXMgbmVlZGVkLgogICAgIEdQUlJlZyBmaWxs
U3BlY3VsYXRlSW50MzIoRWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKQEAgLTcyNSwx
NCArNzIwLDEzIEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICB2b2lkIGNvbXBpbGVNb3ZI
aW50QW5kQ2hlY2soTm9kZSopOwogCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4s
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHJlc3VsdCwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6
SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCwgQWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldCk7CisgICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJl
ZyBiYXNlLCBKU1ZhbHVlUmVncywgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklU
Q29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BS
UmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwg
U3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwsIEFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpHZXQpOwotICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwg
R1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxl
cjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7CiAgICAgdm9pZCBj
YWNoZWRHZXRCeUlkV2l0aFRoaXMoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB0
aGlzR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRD
b21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcExpc3Qo
KSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2Rl
T3JpZ2luLCBHUFJSZWcgYmFzZVRhZ0dQUk9yTm9uZSwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBH
UFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21w
aWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCwgQWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkdldCk7Ci0gICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4s
IEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQ
YXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6
SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7CiAgICAgdm9pZCBjYWNo
ZWRHZXRCeUlkV2l0aFRoaXMoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5vbmUsIEdQ
UlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHRoaXNUYWdHUFJPck5vbmUsIEdQUlJlZyB0aGlz
UGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0
aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wTGlzdCgpKTsKICNlbmRpZgogCkBAIC03NDcsNyAr
NzQxLDYgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIAogICAgIHZvaWQgbm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlv
bik7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiwgTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxw
ZXJGdW5jdGlvbik7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSosIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVy
RnVuY3Rpb24pOwogICAgIAogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVx
KE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICB2b2lk
IG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwgYm9vbCBpbnZlcnQgPSBm
YWxzZSk7CkBAIC03NTYsNiArNzQ5LDcgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHZv
aWQgY29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QoTm9kZSosIEdQUlJlZyB2YWx1ZVJlZywgR1BS
UmVnIHByb3RvdHlwZVJlZywgR1BSUmVnIHNjcmF0Y2hBbmRSZXN1bHRSZWcsIEdQUlJlZyBzY3Jh
dGNoMlJlZywgR1BSUmVnIHNjcmF0Y2gzUmVnKTsKICAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9m
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mQ3VzdG9tKE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVPdmVycmlkZXNIYXNJbnN0YW5jZShOb2RlKik7CiAKICAgICB2b2lkIGNvbXBp
bGVJc0NlbGxXaXRoVHlwZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNUeXBlZEFycmF5Vmll
dyhOb2RlKik7CkBAIC0xMzg3LDYgKzEzODEsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAg
ICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVO
ZXdSZWdleHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqKTsK
KyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3Jl
YXRlQWN0aXZhdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1l
bnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRGcm9tQXJndW1lbnRzKE5vZGUqKTsKQEAg
LTE0MDksMTAgKzE0MDQsMTIgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHZvaWQgY29t
cGlsZVJlZ0V4cE1hdGNoRmFzdEdsb2JhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUmVnRXhw
VGVzdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nUmVwbGFjZShOb2RlKik7CisgICAg
dm9pZCBjb21waWxlSXNPYmplY3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JO
dWxsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVUeXBlT2YoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbChOb2RlKik7
CisgICAgdm9pZCBjb21waWxlQ2hlY2tOb3RFbXB0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
Q2hlY2tTdHJ1Y3R1cmUoTm9kZSopOwogICAgIHZvaWQgZW1pdFN0cnVjdHVyZUNoZWNrKE5vZGUq
LCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpOwogICAgIHZvaWQgY29tcGlsZVB1dEFj
Y2Vzc29yQnlJZChOb2RlKik7CkBAIC0xNDQyLDggKzE0MzksMTIgQEAgY2xhc3MgU3BlY3VsYXRp
dmVKSVQgewogICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
VG9JbmRleFN0cmluZyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUq
KTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeUlkKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRC
eUlkRGlyZWN0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkV2l0aFRoaXMoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKKyAgICB2b2lk
IGNvbXBpbGVHZXREaXJlY3RQbmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJvcGVy
dHlFbnVtZXJhdG9yKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEV4ZWN1dGFibGUoTm9kZSopOwpAQCAtMTQ2Miw2
ICsxNDYzLDggQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHZvaWQgY29tcGlsZVRvUHJp
bWl0aXZlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5UYWlsKE5vZGUqKTsKKyAg
ICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZUV4dHJhY3RDYXRjaExvY2FsKE5vZGUqKTsKIAogICAgIHZvaWQgbW92ZVRydWVUbyhHUFJSZWcp
OwogICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDNmZTU2MGU2YzZk
MjkzMDc1ODE2NWIwMzI4YzM5ZmEyOWVkYzRhMTkuLjUxYWJhMmMwNWVlMDk2OThiN2JiNzQwY2I2
ZTBkNmZhNWFmMzlmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMjcxLDM1ICsyNzEsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoaXMoCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoV1RGTW92ZShzbG93UGF0aCkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQ
dXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJS
ZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BS
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQotewot
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7Ci0g
ICAgaWYgKHNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKLSAgICAgICAgLy8gV2UndmUgYWxyZWFk
eSBmbHVzaGVkIHJlZ2lzdGVycyB0byB0aGUgc3RhY2ssIHdlIGRvbid0IG5lZWQgdG8gc3BpbGwg
dGhlc2UuCi0gICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KGJhc2VQYXlsb2FkR1BSLCBmYWxzZSk7
Ci0gICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1
ZVBheWxvYWRHUFIpLCBmYWxzZSk7Ci0gICAgfQotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUg
PSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0
SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0gICAgSklUUHV0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJh
c2VQYXlsb2FkR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiks
Ci0gICAgICAgIHNjcmF0Y2hHUFIsIG1faml0LmVjbWFNb2RlRm9yKGNvZGVPcmlnaW4pLCBwdXRL
aW5kKTsKLSAgICAKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7Ci0gICAgCi0gICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBpZiAoc2xvd1BhdGhUYXJnZXQu
aXNTZXQoKSkKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChzbG93UGF0aFRhcmdldCk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwotCi0gICAgYXV0byBzbG93UGF0
aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBOb1Jlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHZhbHVlVGFn
R1BSLCB2YWx1ZVBheWxvYWRHUFIpLAotICAgICAgICAgICAgSlNWYWx1ZTo6SlNDZWxsVHlwZSwg
IGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKLQotICAg
IG1faml0LmFkZFB1dEJ5SWQoZ2VuLCBzbG93UGF0aC5nZXQoKSk7Ci0gICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJh
bmQpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG9wZXJhbmQsIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CkBAIC00MTgsMTYyICszODksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFu
ZCwgTgogICAgIGp1bXAobm90VGFrZW4pOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VK
SiBoZWxwZXJGdW5jdGlvbikKLXsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUt
PmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBi
cmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwotCi0gICAgSklUQ29tcGls
ZXI6OlJlc3VsdENvbmRpdGlvbiBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5v
blplcm87Ci0KLSAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRo
ZSB0YWtlbiBibG9jay4KLSAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0
aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0
aHJvdWdoLgotICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewotICAgICAgICBjb25kID0g
SklUQ29tcGlsZXI6OmludmVydChjb25kKTsKLSAgICAgICAgY2FsbFJlc3VsdENvbmRpdGlvbiA9
IEpJVENvbXBpbGVyOjpaZXJvOwotICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKLSAg
ICAgICAgdGFrZW4gPSBub3RUYWtlbjsKLSAgICAgICAgbm90VGFrZW4gPSB0bXA7Ci0gICAgfQot
Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
YXJnMVJlZ3MgPSBhcmcxLmpzVmFsdWVSZWdzKCk7Ci0gICAgSlNWYWx1ZVJlZ3MgYXJnMlJlZ3Mg
PSBhcmcyLmpzVmFsdWVSZWdzKCk7Ci0gICAgR1BSUmVnIGFyZzFUYWdHUFIgPSBhcmcxLnRhZ0dQ
UigpOwotICAgIEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOwotICAg
IEdQUlJlZyBhcmcyVGFnR1BSID0gYXJnMi50YWdHUFIoKTsKLSAgICBHUFJSZWcgYXJnMlBheWxv
YWRHUFIgPSBhcmcyLnBheWxvYWRHUFIoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkgfHwgaXNLbm93bk5vdEludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkg
ewotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgYXJnMS51c2UoKTsKLSAg
ICAgICAgYXJnMi51c2UoKTsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFSZWdzLCBhcmcyUmVn
cyk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0KLSAgICAgICAgYnJhbmNoVGVz
dDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiwgdGFrZW4pOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgICAgIGFyZzEudXNlKCk7Ci0gICAgICAg
IGFyZzIudXNlKCk7Ci0KLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQUiwgSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAKLSAgICAgICAgYnJh
bmNoMzIoY29uZCwgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSLCB0YWtlbik7Ci0gICAg
Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCAh
aXNLbm93bkludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICAgICAganVt
cChub3RUYWtlbiwgRm9yY2VKdW1wKTsKLSAgICAKLSAgICAgICAgICAgIHNsb3dQYXRoLmxpbmso
Jm1faml0KTsKLSAgICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRH
UFIsIGFyZzFSZWdzLCBhcmcyUmVncyk7Ci0gICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwotICAgICAgICAKLSAg
ICAgICAgICAgIGJyYW5jaFRlc3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIsIHRh
a2VuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGp1bXAobm90VGFrZW4pOwotICAgIAotICAg
IG1faW5kZXhJbkJsb2NrID0gbV9ibG9jay0+c2l6ZSgpIC0gMTsKLSAgICBtX2N1cnJlbnROb2Rl
ID0gYnJhbmNoTm9kZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+Ci1jbGFzcyBD
b21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4gewot
cHVibGljOgotICAgIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAg
ICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCi0gICAgICAgIFNfSklUT3Bl
cmF0aW9uX0VKSiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJl
ZyBhcmcxUGF5bG9hZCwKLSAgICAgICAgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9h
ZCkKLSAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfSklUT3BlcmF0
aW9uX0VKSiwgR1BSUmVnPigKLSAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5lZWRU
b1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwgcmVzdWx0KQot
ICAgICAgICAsIG1fYXJnMVRhZyhhcmcxVGFnKQotICAgICAgICAsIG1fYXJnMVBheWxvYWQoYXJn
MVBheWxvYWQpCi0gICAgICAgICwgbV9hcmcyVGFnKGFyZzJUYWcpCi0gICAgICAgICwgbV9hcmcy
UGF5bG9hZChhcmcyUGF5bG9hZCkKLSAgICB7Ci0gICAgfQotICAgIAotcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCi0gICAg
ewotICAgICAgICB0aGlzLT5zZXRVcChqaXQpOwotICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKAot
ICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgIHRoaXMtPm1f
ZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0LCBKU1ZhbHVlUmVncyhtX2FyZzFUYWcsIG1fYXJnMVBh
eWxvYWQpLCBKU1ZhbHVlUmVncyhtX2FyZzJUYWcsIG1fYXJnMlBheWxvYWQpKSk7Ci0gICAgICAg
IGppdC0+bV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgdGhpcy0+bV9y
ZXN1bHQpOwotICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOwotICAgIH0KLSAgIAotcHJpdmF0
ZToKLSAgICBHUFJSZWcgbV9hcmcxVGFnOwotICAgIEdQUlJlZyBtX2FyZzFQYXlsb2FkOwotICAg
IEdQUlJlZyBtX2FyZzJUYWc7Ci0gICAgR1BSUmVnIG1fYXJnMlBheWxvYWQ7Ci19OwotCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiBu
b2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5j
aGlsZDIoKSk7Ci0gICAgR1BSUmVnIGFyZzFUYWdHUFIgPSBhcmcxLnRhZ0dQUigpOwotICAgIEdQ
UlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOwotICAgIEdQUlJlZyBhcmcy
VGFnR1BSID0gYXJnMi50YWdHUFIoKTsKLSAgICBHUFJSZWcgYXJnMlBheWxvYWRHUFIgPSBhcmcy
LnBheWxvYWRHUFIoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
Ci0gICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkg
fHwgaXNLbm93bk5vdEludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICBH
UFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRQ
YXlsb2FkR1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgICAgICBhcmcxLnVzZSgpOwotICAg
ICAgICBhcmcyLnVzZSgpOwotCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzEuanNWYWx1
ZVJlZ3MoKSwgYXJnMi5qc1ZhbHVlUmVncygpKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwg
bm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgYXJnMSwgUGF5bG9hZFdv
cmQpOwotICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7Ci0KLSAgICAgICAgYXJnMS51c2UoKTsKLSAgICAgICAgYXJnMi51c2UoKTsKLSAgICAKLSAg
ICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgYXJnMVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZykpKTsKLQotICAgICAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJn
MVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAKLSAg
ICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8ICFpc0tu
b3duSW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1Bh
dGhHZW5lcmF0b3I8SklUQ29tcGlsZXI6Okp1bXBMaXN0Pj4oCi0gICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoLCB0aGlzLCBoZWxwZXJGdW5jdGlvbiwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRh
Z0dQUiwKLSAgICAgICAgICAgICAgICAgICAgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFy
ZzJQYXlsb2FkR1BSKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW5SZXN1
bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
LSAgICB9Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVT
dHJpY3RFcShOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKICAg
ICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxv
Y2s7CkBAIC02NzQsMjQgKzQ4OSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlKiBub2RlLCBib29sIGludmVydCkKICAgICBib29s
ZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEoTm9k
ZSogbm9kZSkKLXsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7Ci0gICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBNaXNjVXNlKQotICAgICAgICBzcGVjdWxhdGVNaXNjKG5vZGUtPmNoaWxkMSgpLCBvcDEu
anNWYWx1ZVJlZ3MoKSk7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBNaXNj
VXNlKQotICAgICAgICBzcGVjdWxhdGVNaXNjKG5vZGUtPmNoaWxkMigpLCBvcDIuanNWYWx1ZVJl
Z3MoKSk7Ci0gICAgCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIo
KSk7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgbm90RXF1YWwgPSBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6Tm90RXF1YWwsIG9wMS50YWdHUFIoKSwgb3AyLnRhZ0dQUigpKTsKLSAgICBtX2pp
dC5jb21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDEucGF5bG9hZEdQUigpLCBvcDIucGF5
bG9hZEdQUigpLCByZXN1bHQuZ3ByKCkpOwotICAgIG5vdEVxdWFsLmxpbmsoJm1faml0KTsKLSAg
ICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDb21wYXJlRXFQdHIoTm9kZSogbm9kZSkKIHsKICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTM2NzAsMTAgKzM0NjcsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBDaGVja05vdEVtcHR5OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdGFnR1BSID0gb3BlcmFuZC50YWdH
UFIoKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhURFpGYWlsdXJlLCBKU1ZhbHVlU291cmNl
KCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CisgICAgICAgIGNvbXBpbGVDaGVja05vdEVtcHR5KG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTM3ODEsNTEgKzM1NzUsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZEZsdXNoOiB7Ci0g
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BS
KCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7
Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYywgYmFzZUdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgc2NyYXRjaEdQUiwg
bm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
KCksIERvbnRTcGlsbCk7Ci0KLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBp
bGVQdXRCeUlkRmx1c2gobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisK
ICAgICBjYXNlIFB1dEJ5SWQ6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0g
ICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQ
UlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgdmFsdWVQ
YXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgYmFzZUdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwg
c2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOwotICAgICAg
ICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVQdXRCeUlkKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKLSAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVl
LnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9h
ZEdQUigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAg
ICAgIAotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYmFzZUdQ
UiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRp
Zmllck51bWJlcigpLCBEaXJlY3QpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAg
ICBjb21waWxlUHV0QnlJZERpcmVjdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBA
IC0zODg4LDM4ICszNjQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgT3ZlcnJpZGVzSGFzSW5zdGFuY2U6IHsKLQotICAgICAg
ICBOb2RlKiBoYXNJbnN0YW5jZVZhbHVlTm9kZSA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKLSAg
ICAgICAgSlNGdW5jdGlvbiogZGVmYXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gPSBqc0Nhc3Q8SlNG
dW5jdGlvbio+KG5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOwotCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBub3REZWZhdWx0SGFzSW5zdGFuY2VWYWx1ZTsKLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIGhhc0luc3RhbmNlVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLQotICAgICAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiBjb25zdGFudCBmb2xkaW5nIGhh
bmRsZWQgYXV0b21hdGljYWxseSB0aGUgY2FzZSB3aGVyZSB3ZSBrbmV3IHRoZSBoYXNJbnN0YW5j
ZSBmdW5jdGlvbgotICAgICAgICAvLyB3YXMgYSBjb25zdGFudC4gVW5mb3J0dW5hdGVseSwgdGhl
IGZvbGRpbmcgcnVsZSBmb3IgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgaXMgaW4gdGhlIHN0cmVuZ3Ro
IHJlZHVjdGlvbiBwaGFzZQotICAgICAgICAvLyBzaW5jZSBpdCByZWxpZXMgb24gT1NSIGluZm9y
bWF0aW9uLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0ODMyCi0g
ICAgICAgIGlmICghaGFzSW5zdGFuY2VWYWx1ZU5vZGUtPmlzQ2VsbENvbnN0YW50KCkgfHwgZGVm
YXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gIT0gaGFzSW5zdGFuY2VWYWx1ZU5vZGUtPmFzQ2VsbCgp
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyBoYXNJbnN0YW5jZVZhbHVlUmVncyA9IGhhc0lu
c3RhbmNlVmFsdWUuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgIG5vdERlZmF1bHRIYXNJbnN0
YW5jZVZhbHVlLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoaGFzSW5zdGFuY2VWYWx1ZVJl
Z3MpKTsKLSAgICAgICAgICAgIG5vdERlZmF1bHRIYXNJbnN0YW5jZVZhbHVlLmFwcGVuZChtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBoYXNJbnN0YW5jZVZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW1QdHIobm9kZS0+Y2VsbE9wZXJhbmQoKSkpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UnLgotICAgICAgICBtX2ppdC50ZXN0OChNYWNyb0Fzc2VtYmxlcjo6
WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZh
dWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIGlmICghbm90RGVmYXVsdEhhc0luc3Rh
bmNlVmFsdWUuZW1wdHkoKSkgewotICAgICAgICAgICAgbm90RGVmYXVsdEhhc0luc3RhbmNlVmFs
dWUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRHUFIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGJvb2xlYW5SZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNl
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQwMTEsMjIgKzM3NDAsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBJc09iamVjdDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVl
LCBUYWdXb3JkKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2pp
dC5icmFuY2hJZk5vdENlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7Ci0KLSAgICAgICAgbV9qaXQu
Y29tcGFyZTgoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksCi0gICAgICAgICAgICBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksCi0gICAgICAgICAg
ICByZXN1bHQuZ3ByKCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOwotCi0gICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOwotCi0gICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Cisg
ICAgICAgIGNvbXBpbGVJc09iamVjdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBA
IC00MTY2LDU5ICszODgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAg
IAotICAgICAgICBHUFJSZWcgYXJndW1lbnRzVGFnR1BSOwotICAgICAgICBHUFJSZWcgYXJndW1l
bnRzUGF5bG9hZEdQUjsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzUmVnczsKLSAgICAg
ICAgewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJl
Z3MoKTsKLSAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCk7Ci0gICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIAotICAgICAgICBsb2NrKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKLSAgICAgICAgewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
dW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGFyZ3VtZW50c1RhZ0dQ
UiA9IGFyZ3VtZW50cy50YWdHUFIoKTsKLSAgICAgICAgICAgIGFyZ3VtZW50c1BheWxvYWRHUFIg
PSBhcmd1bWVudHMucGF5bG9hZEdQUigpOwotICAgICAgICAgICAgYXJndW1lbnRzUmVncyA9IGFy
Z3VtZW50cy5qc1ZhbHVlUmVncygpOwotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICAgICAgfQotICAgICAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAg
ICAKLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxs
IGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQotICAgICAg
ICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mg
c3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8gc3RhbmRwb2lu
dC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRv
KiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0
OAotCi0gICAgICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQotICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IGFyZ3VtZW50c1RhZ0dQUiwgYXJndW1lbnRzUGF5bG9hZEdQUik7Ci0gICAgICAgIAotICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBh
cmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOwotCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2pp
dC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAg
ICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgICAgICAgICAgYXJn
Q291bnRJbmNsdWRpbmdUaGlzR1BSKSk7Ci0KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0
LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAg
ICAgICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsCi0gICAgICAgICAgICAgICAgVHJ1
c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUz
MihhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEt
Pm1hY2hpbmVDb3VudCkpOwotICAgICAgICAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Mb2FkVmFyYXJncywgZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdz
LCBkYXRhLT5vZmZzZXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlN
aW5pbXVtKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAg
ICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00NDMwLDE1MiArNDA5MiwxMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRl
SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRU
YWcodGhpcyk7Ci0KLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAg
ICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFBh
eWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0VGFn
R1BSID0gcmVzdWx0VGFnLmdwcigpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7
Ci0gICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIEFTU0VS
VCghIW5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3Rv
cmFnZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKLQotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
aW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAg
ICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNoLmZw
cigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotCi0g
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICBt
X2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5k
ZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgc2NyYXRjaEZQUik7Ci0gICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgc2NyYXRjaEZQUiwgc2NyYXRjaEZQUikpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5QnlJbnQsIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiks
IGJhc2VHUFIsIGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2RlLT5pbnRlcm5hbE1l
dGhvZFR5cGUoKSkpKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
ICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOworICAgICAgICBjb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBFZGdlJiBiYXNlRWRnZSA9IG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9
IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0KLSAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIHByb3BlcnR5RWRnZSk7Ci0gICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHku
Z3ByKCk7Ci0KLSNpZiBDUFUoWDg2KQotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKLQotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAg
ICAgLy8gTm90IGVub3VnaCByZWdpc3RlcnMgb24gWDg2IGZvciB0aGlzIGNvZGUsIHNvIGFsd2F5
cyB1c2UgdGhlIHNsb3cgcGF0aC4KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAg
SlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHNjcmF0Y2hHUFIp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVn
cywgYmFzZUdQUiwgSlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUiwgcHJvcGVydHlHUFIpKTsKLSAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSNlbHNlCi0gICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwotICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0KLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgICAgICBFZGdlJiBp
bmRleEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICBF
ZGdlJiBlbnVtZXJhdG9yRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMyk7
Ci0KLSAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIGluZGV4RWRnZSk7
Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgZW51bWVyYXRv
ckVkZ2UpOwotCi0gICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgICAg
ICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7Ci0KLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgICAgIHNjcmF0
Y2hHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIENvbXB1dGUg
dGhlIG9mZnNldAotICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mTGluZUFjY2VzcyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIAotICAgICAgICAgICAgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotCi0gICAgICAgIG1faml0
Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJU
b1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7Ci0g
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VHUFIsIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZtX2ppdCk7
Ci0gICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICBtX2pp
dC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgbV9qaXQubmVnMzIoc2NyYXRjaEdQUik7Ci0gICAgICAgIG1faml0LnNpZ25F
eHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAvLyBXZSB1c2Ug
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkgYXMgYSB0ZW1wb3JhcnkgaGVyZS4gV2UgaGF2ZSB0byBt
YWtlIHN1cmUgY2xvYmJlciBpdCBhZnRlciBnZXR0aW5nIHRoZSAKLSAgICAgICAgLy8gdmFsdWUg
b3V0IG9mIGluZGV4R1BSIGFuZCBlbnVtZXJhdG9yR1BSIGJlY2F1c2UgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCkgY291bGQgcmV1c2UgZWl0aGVyIG9mIHRob3NlIHJlZ2lzdGVycy4KLSAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIGlu
dDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0
SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3Vs
dFJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25H
ZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIGJhc2VHUFIsIEpTVmFsdWU6OkpTQ2VsbFR5cGUsIHBy
b3BlcnR5R1BSKSk7Ci0jZW5kaWYKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOworICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogewpAQCAtNDc0MCwx
OSArNDI2MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEV4dHJhY3RDYXRjaExvY2FsOiB7Ci0gICAgICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGFnKHRoaXMpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcGF5bG9hZCh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0YWdHUFIgPSB0YWcuZ3ByKCk7Ci0g
ICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gcGF5bG9hZC5ncHIoKTsKLQotICAgICAgICBKU1Zh
bHVlKiBwdHIgPSAmcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4obV9qaXQuaml0Q29kZSgpLT5j
b21tb24uY2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKVtub2RlLT5jYXRjaE9TUkVu
dHJ5SW5kZXgoKV07Ci0gICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHB0ciksIHRlbXBHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHRlbXBHUFIsIFRhZ09mZnNldCksIHRhZ0dQUik7Ci0gICAgICAgIG1faml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3ModGVtcEdQUiwgUGF5bG9hZE9mZnNldCksIHBheWxvYWRH
UFIpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRhZ0dQUiwgcGF5bG9hZEdQUiwgbm9kZSk7Cisg
ICAgICAgIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkBAIC00ODQ4LDU5ICs0MzU3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFyaXRoUmFuZG9tKE5vZGUqIG5vZGUpCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbml0aWFsaXplQnV0dGVyZmx5
KEdQUlJlZyBzdG9yYWdlR1BSLCBHUFJSZWcgc2l6ZUdQUiwgSlNWYWx1ZVJlZ3MgZW1wdHlWYWx1
ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2Ny
YXRjaEdQUik7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUik7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOwotICAgIG1faml0LnN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgc2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3RvcmUzMihlbXB0eVZhbHVlUmVncy50
YWdHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpKTsKLSAgICBtX2ppdC5zdG9yZTMyKGVtcHR5VmFsdWVSZWdzLnBheWxvYWRH
UFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSk7Ci0gICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICBkb25lLmxpbmso
Jm1faml0KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJy
YXlXaXRoU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBHUFJSZWcgcmVzdWx0R1BS
LCBHUFJSZWcgc2l6ZUdQUiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgYm9vbCBzaG91bGRD
b252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UpCi17Ci0gICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgIAotICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFn
ZS5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgCi0gICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzdG9yYWdlR1BSKTsKLSAgICAgICAgICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgaWYgKHNob3VsZENvbnZlcnRM
YXJnZVNpemVUb0FycmF5U3RvcmFnZSkKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVkSW1t
MzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpKTsKLQotICAgIC8vIFdl
IGNhbiB1c2UgcmVzdWx0IGFzIGEgc2NyYXRjaCBmb3IgdGhpcy4KLSAgICBlbWl0QWxsb2NhdGVC
dXR0ZXJmbHkoc3RvcmFnZUdQUiwgc2l6ZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHJl
c3VsdEdQUiwgc2xvd0Nhc2VzKTsKLQotICAgIEpTVmFsdWUgaG9sZTsKLSAgICBpZiAoaGFzRG91
YmxlKGluZGV4aW5nVHlwZSkpCi0gICAgICAgIGhvbGUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29k
ZUFzRG91YmxlLCBQTmFOKTsKLSAgICBlbHNlCi0gICAgICAgIGhvbGUgPSBKU1ZhbHVlKCk7Ci0g
ICAgSlNWYWx1ZVJlZ3MgZW1wdHlWYWx1ZVJlZ3Moc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwot
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKGhvbGUudGFnKCkpLCBlbXB0eVZhbHVlUmVncy50
YWdHUFIoKSk7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoaG9sZS5wYXlsb2FkKCkpLCBl
bXB0eVZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgIC8vIFdlIGNhbiB1c2UgcmVzdWx0IGFz
IGEgc2NyYXRjaCBmb3IgdGhpcy4KLSAgICBlbWl0SW5pdGlhbGl6ZUJ1dHRlcmZseShzdG9yYWdl
R1BSLCBzaXplR1BSLCBlbXB0eVZhbHVlUmVncywgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIAot
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQuZ3JhcGgoKS5yZWdpc3Rl
clN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpKTsKLQotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BS
LCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLQotICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxl
U2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCi0gICAgICAgIHN0cnVjdHVyZSwKLSAgICAg
ICAgc2hvdWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlID8gbV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSA6IHN0cnVjdHVyZSwK
LSAgICAgICAgc2l6ZUdQUiwgc3RvcmFnZUdQUikpOwotfQotCiAjZW5kaWYKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggNWIwM2MxNDZhMDg0MTQ1ZmQwODU4Yjk2YmZiZmUzZmY5
MDViMjJhZS4uNzZhNjQyZGY3OGIxODg1MzUwNWNhMWRmM2RmM2MyMzlmMTQwNTMxNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBA
IC0yMTYsMzUgKzIxNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWRXaXRo
VGhpcyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSCiAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
OjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQ
UlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIFNw
aWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1vZGUpCi17Ci0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4
aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKLSAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwotICAgIGlmIChzcGlsbE1v
ZGUgPT0gRG9udFNwaWxsKSB7Ci0gICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgZmx1c2hlZCByZWdp
c3RlcnMgdG8gdGhlIHN0YWNrLCB3ZSBkb24ndCBuZWVkIHRvIHNwaWxsIHRoZXNlLgotICAgICAg
ICB1c2VkUmVnaXN0ZXJzLnNldChiYXNlR1BSLCBmYWxzZSk7Ci0gICAgICAgIHVzZWRSZWdpc3Rl
cnMuc2V0KHZhbHVlR1BSLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgSklUUHV0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwg
dXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgc2NyYXRjaEdQUiwgbV9qaXQuZWNtYU1vZGVGb3IoY29kZU9yaWdpbiksIHB1
dEtpbmQpOwotCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwotICAgIAotICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0Lmlz
U2V0KCkpCi0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd1BhdGhUYXJnZXQpOwotICAgIHNs
b3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAKLSAgICBhdXRvIHNsb3dQ
YXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCksIE5vUmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgdmFsdWVHUFIsIGJhc2VHUFIs
Ci0gICAgICAgIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOwotCi0gICAgbV9qaXQu
YWRkUHV0QnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihXVEZNb3ZlKHNsb3dQYXRoKSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCkKIHsK
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dElzU3RpbGxWYWxpZCgpIHx8ICFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSksICJUaGUgQ29t
cGFyZSBzaG91bGQgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQsIGl0IGlzIGtub3duIHRvIGJlIGFsd2F5
cyBmYWxzZS4iKTsKQEAgLTM1NywxNTIgKzMyOCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kLCBO
CiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikK
LXsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFr
ZW4uYmxvY2s7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hE
YXRhKCktPm5vdFRha2VuLmJsb2NrOwotCi0gICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlv
biBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87Ci0KLSAgICAvLyBU
aGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KLSAg
ICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVy
dCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgotICAgIGlmICh0
YWtlbiA9PSBuZXh0QmxvY2soKSkgewotICAgICAgICBjb25kID0gSklUQ29tcGlsZXI6OmludmVy
dChjb25kKTsKLSAgICAgICAgY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpaZXJv
OwotICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKLSAgICAgICAgdGFrZW4gPSBub3RU
YWtlbjsKLSAgICAgICAgbm90VGFrZW4gPSB0bXA7Ci0gICAgfQotCi0gICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0
aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwot
ICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNLbm93bk5vdEludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkgewotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgICAgIGFyZzEu
dXNlKCk7Ci0gICAgICAgIGFyZzIudXNlKCk7Ci0gICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJn
MUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0KLSAgICAg
ICAgYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiwgdGFrZW4pOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGFy
ZzIpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAg
ICAgICBhcmcxLnVzZSgpOwotICAgICAgICBhcmcyLnVzZSgpOwotICAgIAotICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCi0gICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BS
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgCi0gICAgICAgIGJyYW5jaDMyKGNvbmQs
IGFyZzFHUFIsIGFyZzJHUFIsIHRha2VuKTsKLSAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3JjZUp1bXApOwot
ICAgIAotICAgICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgIAotICAgICAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0g
ICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwotICAgICAgICAKLSAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjYWxs
UmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIsIHRha2VuKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGp1bXAobm90VGFrZW4pOwotCi0gICAgbV9pbmRleEluQmxvY2sgPSBtX2Jsb2NrLT5zaXpl
KCkgLSAxOwotICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKdW1wVHlwZT4KLWNsYXNzIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5l
cmF0b3IKLSAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfSklU
T3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7Ci1wdWJsaWM6Ci0gICAgQ29tcGFyZUFuZEJveEJvb2xl
YW5TbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVK
SVQqIGppdCwKLSAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCi0gICAgICAgIDogQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4oCi0gICAgICAgICAg
ICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJl
bWVudDo6Q2hlY2tOZWVkZWQsIHJlc3VsdCkKLSAgICAgICAgLCBtX2FyZzEoYXJnMSkKLSAgICAg
ICAgLCBtX2FyZzIoYXJnMikKLSAgICB7Ci0gICAgfQotICAgIAotcHJvdGVjdGVkOgotICAgIHZv
aWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KSBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKLSAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQt
PmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJnMSwg
bV9hcmcyKSk7Ci0gICAgICAgIGppdC0+bV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgdGhpcy0+bV9yZXN1bHQpOwotICAgICAgICBqaXQtPm1faml0Lm9yMzIoSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgdGhpcy0+bV9yZXN1bHQpOwotICAgICAg
ICB0aGlzLT50ZWFyRG93bihqaXQpOwotICAgIH0KLSAgIAotcHJpdmF0ZToKLSAgICBHUFJSZWcg
bV9hcmcxOwotICAgIEdQUlJlZyBtX2FyZzI7Ci19OwotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxl
cjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVu
Y3Rpb24pCi17Ci0gICAgQVNTRVJUKG5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSk7
Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSUmVnIGFyZzFH
UFIgPSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKLSAgICAK
LSAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKGlzS25v
d25Ob3RJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNLbm93bk5vdEludGVnZXIo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCBy
ZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgCi0gICAgICAgIGFyZzEudXNlKCk7Ci0gICAgICAgIGFyZzIudXNlKCk7Ci0gICAgCi0gICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rp
b24sIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1
ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1f
Y3VycmVudE5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBS
ZXVzZSwgYXJnMik7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0K
LSAgICAgICAgYXJnMS51c2UoKTsKLSAgICAgICAgYXJnMi51c2UoKTsKLSAgICAKLSAgICAgICAg
aWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJn
MUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgIGlmICghaXNL
bm93bkludGVnZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgIAotICAgICAgICBtX2ppdC5jb21w
YXJlMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQu
b3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgIWlzS25v
d25JbnRlZ2VyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0
aEdlbmVyYXRvcjxKSVRDb21waWxlcjo6SnVtcExpc3Q+PigKLSAgICAgICAgICAgICAgICBzbG93
UGF0aCwgdGhpcywgaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUikp
OwotICAgICAgICB9Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY3VycmVu
dE5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
Ci0gICAgfQotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
U3RyaWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQpCiB7CiAg
ICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJs
b2NrOwpAQCAtNTc1LDggKzQwMCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlKiBub2RlLCBib29sIGludmVydCkKIHsKICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBHUFJSZWcgYXJnMUdQUiA9IGFy
ZzEuZ3ByKCk7Ci0gICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOworICAgIEpTVmFsdWVS
ZWdzIGFyZzFSZWdzID0gYXJnMS5qc1ZhbHVlUmVncygpOworICAgIEpTVmFsdWVSZWdzIGFyZzJS
ZWdzID0gYXJnMi5qc1ZhbHVlUmVncygpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTU4OCw3MSAr
NDEzLDUyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVT
dHJpY3RFcShOb2RlKiBub2RlLCBib29sIGludmVydCkKICAgICAgICAgLy8gc2VlIGlmIHdlIGdl
dCBsdWNreTogaWYgdGhlIGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRo
ZSBzYW1lCiAgICAgICAgIC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5IGVxdWFs
LgogICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgZmx1c2ggcmVnaXN0ZXJzIGluc3RlYWQg
b2Ygc2lsZW50IHNwaWxsL2ZpbGwuCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEVxdWFs
Q2FzZSA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJn
MkdQUik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsQ2FzZSA9IG1faml0LmJy
YW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMVJlZ3MuZ3ByKCksIGFyZzJSZWdzLmdw
cigpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NCghaW52ZXJ0KSwgcmVz
dWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CiAKICAgICAgICAgbm90RXF1YWxDYXNlLmxpbmsoJm1faml0KTsKICAgICAgICAg
CiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBhcmcx
R1BSLCBhcmcyR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXFDZWxsLCByZXN1bHRHUFIsIGFyZzFSZWdzLCBhcmcyUmVncyk7CiAgICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAg
ICAgICAgCi0gICAgICAgIG1faml0LmFuZDY0KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygm
bV9qaXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faml0Lm9yNjQoYXJnMUdQUiwgYXJnMkdQ
UiwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBz
bG93UGF0aENhc2VzOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2Vs
bHNDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBsZWZ0T0sgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6QWJvdmVPckVxdWFs
LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBzbG93
UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8s
IGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBsZWZ0
T0subGluaygmbV9qaXQpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCByaWdodE9LID0gbV9q
aXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMkdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgcmlnaHRPSy5saW5rKCZtX2ppdCk7Ci0g
ICAgICAgIAotICAgICAgICBtX2ppdC5jb21wYXJlNjQoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5v
dEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIp
OwotICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxz
ZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoNjQoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKSk7Ci0gICAgICAgIAotICAgICAgICBt
X2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRo
R2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4+KAotICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhc2VzLCB0aGlzLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQ
UiwgYXJnMUdQUiwKLSAgICAgICAgICAgICAgICAgICAgYXJnMkdQUikpOwotICAgICAgICAKICAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQo
cmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOwotfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVx
KE5vZGUqIG5vZGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0
aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gTWlzY1VzZSkKLSAgICAgICAgc3BlY3VsYXRlTWlzYyhub2RlLT5jaGlsZDEoKSwg
b3AxLmpzVmFsdWVSZWdzKCkpOwotICAgIGlmIChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0g
TWlzY1VzZSkKLSAgICAgICAgc3BlY3VsYXRlTWlzYyhub2RlLT5jaGlsZDIoKSwgb3AyLmpzVmFs
dWVSZWdzKCkpOwotICAgIAotICAgIG1faml0LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1YWws
IG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgIG1faml0Lm9yMzIoVHJ1
c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOwotICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICBtX2ppdC5vcjY0
KGFyZzFSZWdzLmdwcigpLCBhcmcyUmVncy5ncHIoKSwgcmVzdWx0R1BSKTsKKworICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aENhc2VzOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAg
dHdvQ2VsbHNDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCByZXN1
bHRHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBKSVRDb21waWxlcjo6SnVt
cCBsZWZ0T0sgPSBtX2ppdC5icmFuY2hJZkludDMyKGFyZzFSZWdzKTsKKyAgICBzbG93UGF0aENh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk51bWJlcihhcmcxUmVncywgSW52YWxpZEdQUlJlZykp
OworICAgIGxlZnRPSy5saW5rKCZtX2ppdCk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHRP
SyA9IG1faml0LmJyYW5jaElmSW50MzIoYXJnMlJlZ3MpOworICAgIHNsb3dQYXRoQ2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaElmTnVtYmVyKGFyZzJSZWdzLCBJbnZhbGlkR1BSUmVnKSk7CisgICAg
cmlnaHRPSy5saW5rKCZtX2ppdCk7CisKKyAgICBtX2ppdC5jb21wYXJlNjQoaW52ZXJ0ID8gSklU
Q29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxUmVncy5ncHIoKSwg
YXJnMlJlZ3MuZ3ByKCksIHJlc3VsdEdQUik7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOworCisgICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1faml0KTsKKyAgICBz
bG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWws
IGFyZzFSZWdzLmdwcigpLCBhcmcyUmVncy5ncHIoKSkpOworCisgICAgbV9qaXQubW92ZShKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTY0KCFpbnZlcnQpLCByZXN1bHRHUFIpOworCisgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDb21wYXJlU2xvd1BhdGhHZW5lcmF0b3I8
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Pj4oCisgICAgICAgIHNsb3dQYXRoQ2FzZXMsIHRoaXMs
IG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0R1BSLCBhcmcxUmVncywgYXJnMlJlZ3Mp
KTsKKworICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3Vs
dChyZXN1bHRHUFIsIG1fY3VycmVudE5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCkBAIC0zODY0
LDEwICszNjcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgQ2hlY2tOb3RFbXB0eTogewotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBvcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IG9w
ZXJhbmQuZ3ByKCk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVERaRmFpbHVyZSwgSlNWYWx1
ZVNvdXJjZSgpLCBudWxscHRyLCBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8s
IGdwcikpOwotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZUNoZWNrTm90
RW1wdHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzk4OSwzMyArMzc5Miwx
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBQdXRCeUlkRmx1c2g6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
Ci0KLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIGNhY2hlZFB1
dEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQ
Uiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wKCksIERvbnRTcGlsbCk7Ci0KLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNv
bXBpbGVQdXRCeUlkRmx1c2gobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBQdXRCeUlkOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwot
ICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOwotICAgICAgICAKLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSLCBub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7Ci0KLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Cisg
ICAgICAgIGNvbXBpbGVQdXRCeUlkKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTQwNDMsMTcgKzM4MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgfQogCiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7Ci0gICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAKLSAgICAgICAgY2Fj
aGVkUHV0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VHUFIsIHZhbHVlR1BSLCBzY3Jh
dGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7Ci0KLSAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVQdXRCeUlkRGlyZWN0KG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTQxMzEsMzggKzM5MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBPdmVycmlkZXNIYXNJ
bnN0YW5jZTogewotCi0gICAgICAgIE5vZGUqIGhhc0luc3RhbmNlVmFsdWVOb2RlID0gbm9kZS0+
Y2hpbGQyKCkubm9kZSgpOwotICAgICAgICBKU0Z1bmN0aW9uKiBkZWZhdWx0SGFzSW5zdGFuY2VG
dW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUo
KSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90RGVmYXVsdDsKLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIGhhc0luc3RhbmNlVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKLQotICAgICAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiBjb25zdGFudCBmb2xkaW5nIGhh
bmRsZWQgYXV0b21hdGljYWxseSB0aGUgY2FzZSB3aGVyZSB3ZSBrbmV3IHRoZSBoYXNJbnN0YW5j
ZSBmdW5jdGlvbgotICAgICAgICAvLyB3YXMgYSBjb25zdGFudC4gVW5mb3J0dW5hdGVseSwgdGhl
IGZvbGRpbmcgcnVsZSBmb3IgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgaXMgaW4gdGhlIHN0cmVuZ3Ro
IHJlZHVjdGlvbiBwaGFzZQotICAgICAgICAvLyBzaW5jZSBpdCByZWxpZXMgb24gT1NSIGluZm9y
bWF0aW9uLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0ODMyCi0g
ICAgICAgIGlmICghaGFzSW5zdGFuY2VWYWx1ZU5vZGUtPmlzQ2VsbENvbnN0YW50KCkgfHwgZGVm
YXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gIT0gaGFzSW5zdGFuY2VWYWx1ZU5vZGUtPmFzQ2VsbCgp
KSB7Ci0gICAgICAgICAgICBHUFJSZWcgaGFzSW5zdGFuY2VWYWx1ZUdQUiA9IGhhc0luc3RhbmNl
VmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICBub3REZWZhdWx0ID0gbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgaGFzSW5zdGFuY2VWYWx1ZUdQUiwgVHJ1c3RlZEltbVB0
cihub2RlLT5jZWxsT3BlcmFuZCgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayB0
aGF0IGJhc2UgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgotICAgICAgICBtX2ppdC50
ZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZXN1bHRHUFIpOwotICAgICAg
ICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICBp
ZiAobm90RGVmYXVsdC5pc1NldCgpKSB7Ci0gICAgICAgICAgICBub3REZWZhdWx0LmxpbmsoJm1f
aml0KTsKLSAgICAgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BSKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGNvbXBpbGVPdmVycmlkZXNI
YXNJbnN0YW5jZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MTc2LDcgKzM5
MTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgSXNFbXB0eTogeyAgICAgICAgCisgICAgY2FzZSBJ
c0VtcHR5OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgdmFsdWUpOwog
CkBAIC00NTk3LDIzICs0MzM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgSXNPYmplY3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSk7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOwot
Ci0gICAgICAgIG1faml0LmNvbXBhcmU4KEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCi0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZS5ncHIoKSwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksCi0g
ICAgICAgICAgICByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0z
MihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwot
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0Lmdwcigp
KTsKLQotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBjb21waWxl
SXNPYmplY3Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDY2Niw1NSArNDM5
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Ci0gICAgICAgIExvYWRWYXJhcmdzRGF0
YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAKLSAgICAgICAgR1BS
UmVnIGFyZ3VtZW50c0dQUjsKLSAgICAgICAgewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGFyZ3VtZW50c0dQ
UiA9IGFyZ3VtZW50cy5ncHIoKTsKLSAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFy
YXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUiwgZGF0YS0+b2Zmc2V0
KTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAgICAgIGxv
Y2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICB7Ci0gICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
YXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOwotICAgICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICAgICAgfQotICAgICAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ug
d2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2Fm
ZQotICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwg
YnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAgICAgICAgLy8g
c3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBl
eGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8vIHBhc3QgdGhl
IHNpemluZy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTQ0OAotCi0gICAgICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQot
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIGFyZ3VtZW50c0dQUik7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGlu
Z1RoaXNHUFIpOwotCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBWYXJh
cmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdU
aGlzR1BSKSk7Ci0KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFZhcmFy
Z3NPdmVyZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAgICAgICAgICAgICAgICBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIsCi0gICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEt
PmxpbWl0KSkpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1
ZGluZ1RoaXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkp
OwotICAgICAgICAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywg
ZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwotICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CisgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKQEAgLTQ5NDYsMTQyICs0NjIzLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAg
ICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKLSAg
ICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoK
LSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgQVNTRVJUKCEh
bm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdl
LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwot
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKTsKLSAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBvdXRPZkJv
dW5kcyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChvdXRPZkJvdW5kcyk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpKTsKLSAgICAgICAg
ICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgQVNTRVJUKCEhbm9k
ZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
LSAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKLSAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAgICAgICAg
ICBpZiAobW9kZS5pc0luQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgb3V0T2ZCb3VuZHMpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwot
Ci0gICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgc2NyYXRj
aEZQUik7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaERvdWJsZShN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgc2NyYXRjaEZQUiwgc2Ny
YXRjaEZQUikpOwotICAgICAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRHUFIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7
Ci0gICAgICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQ
UiA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRz
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCAwLCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBlbHNlICAgIAotICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwotCi0gICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICBtb3ZlVHJ1
ZVRvKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBk
ZWZhdWx0OiB7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5QnlJbnQsIHJlc3VsdEdQUiwgYmFzZUdQUiwgaW5kZXhHUFIsIHN0YXRp
Y19jYXN0PGludDMyX3Q+KG5vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSkpOwotICAgICAgICAK
LSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xl
YW4pOworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBFZGdlJiBi
YXNlRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgIEVk
Z2UmIHByb3BlcnR5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0g
ICAgICAgIEVkZ2UmIGluZGV4RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
Mik7Ci0gICAgICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAzKTsKLQotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IGJhc2VFZGdlKTsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywg
cHJvcGVydHlFZGdlKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4
KHRoaXMsIGluZGV4RWRnZSk7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0
b3IodGhpcywgZW51bWVyYXRvckVkZ2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Ci0gICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKLQotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotICAg
ICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGVudW1l
cmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7Ci0KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAgICAgIC8vIENoZWNr
IHRoZSBzdHJ1Y3R1cmUKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsK
LSAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgICAg
ICBzY3JhdGNoMUdQUiwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygK
LSAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgICAgICAKLSAgICAgICAgLy8g
Q29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgCi0gICAgICAgICAgICBp
bmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0KLSAgICAg
ICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUdQUiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZXN1bHRHUFIpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBv
dXQgb2YgbGluZQotICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOwotICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgbV9qaXQubW92ZShp
bmRleEdQUiwgc2NyYXRjaDFHUFIpOwotICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgICAgIG1faml0Lm5l
ZzMyKHNjcmF0Y2gxR1BSKTsKLSAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRj
aDFHUFIsIHNjcmF0Y2gxR1BSKTsKLSAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVy
dHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGlu
ZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgbV9qaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDJHUFIsIHNjcmF0Y2gxR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BS
KTsKLQotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLQotICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsLCBy
ZXN1bHRHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjog
ewpAQCAtNTIwMiwxMiArNDc0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEV4dHJhY3RDYXRjaExvY2FsOiB7
Ci0gICAgICAgIEpTVmFsdWUqIHB0ciA9ICZyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihtX2pp
dC5qaXRDb2RlKCktPmNvbW1vbi5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpW25v
ZGUtPmNhdGNoT1NSRW50cnlJbmRleCgpXTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAgbV9qaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocHRyKSwgdGVtcEdQUik7Ci0gICAgICAg
IG1faml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3ModGVtcEdQUiksIHRlbXBHUFIpOwot
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHRlbXBHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlRXh0
cmFjdENhdGNoTG9jYWwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNTQzNSw1
NSArNDk3Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFJhbmRvbShOb2Rl
KiBub2RlKQogICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0SW5pdGlhbGl6ZUJ1dHRlcmZseShHUFJSZWcgc3RvcmFnZUdQ
UiwgR1BSUmVnIHNpemVHUFIsIEpTVmFsdWVSZWdzIGVtcHR5VmFsdWVSZWdzLCBHUFJSZWcgc2Ny
YXRjaEdQUikKLXsKLSAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihzaXplR1BSLCBzY3JhdGNo
R1BSKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7Ci0gICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zdG9yZTY0KGVtcHR5VmFsdWVSZWdzLmdwcigp
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7Ci0gICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKLSAgICBk
b25lLmxpbmsoJm1faml0KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9j
YXRlTmV3QXJyYXlXaXRoU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBHUFJSZWcg
cmVzdWx0R1BSLCBHUFJSZWcgc2l6ZUdQUiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgYm9v
bCBzaG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UpCi17Ci0gICAgR1BSVGVtcG9y
YXJ5IHN0b3JhZ2UodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgIAotICAgIEdQUlJlZyBzdG9yYWdlR1BS
ID0gc3RvcmFnZS5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7Ci0gICAgCi0gICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzdG9yYWdlR1BSKTsKLSAgICAKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIGlmIChzaG91bGRDb252ZXJ0
TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UpCi0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQUiwgVHJ1c3RlZElt
bTMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSk7Ci0gICAgICAgICAg
ICAKLSAgICAvLyBXZSBjYW4gdXNlIHJlc3VsdEdQUiBhcyBhIHNjcmF0Y2ggcmlnaHQgbm93Lgot
ICAgIGVtaXRBbGxvY2F0ZUJ1dHRlcmZseShzdG9yYWdlR1BSLCBzaXplR1BSLCByZXN1bHRHUFIs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwotCi0gICAgaWYgKGhhc0RvdWJs
ZShpbmRleGluZ1R5cGUpKQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChiaXR3aXNl
X2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBzY3JhdGNoR1BSKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgc2NyYXRj
aEdQUik7Ci0gICAgZW1pdEluaXRpYWxpemVCdXR0ZXJmbHkoc3RvcmFnZUdQUiwgc2l6ZUdQUiwg
SlNWYWx1ZVJlZ3Moc2NyYXRjaEdQUiksIHNjcmF0Y2gyR1BSKTsKLQotICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihp
bmRleGluZ1R5cGUpKTsKLQotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1f
aml0LnZtKCkpOwotICAgIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigK
LSAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1
bHRHUFIsCi0gICAgICAgIHN0cnVjdHVyZSwKLSAgICAgICAgc2hvdWxkQ29udmVydExhcmdlU2l6
ZVRvQXJyYXlTdG9yYWdlID8gbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJh
eVdpdGhBcnJheVN0b3JhZ2UpKSA6IHN0cnVjdHVyZSwKLSAgICAgICAgc2l6ZUdQUiwgc3RvcmFn
ZUdQUikpOwotfQotCiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDcxYTJlNTgx
MjYwNGMzODVjMjAzMDU5ZGNiNjMxMTk1ZjFiZDM3YjQuLjUwZjI2YmIyNTA4YjJkZWRjOWY3NDQz
OGQ0ZmRhZGIwYjg2YjI5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKQEAgLTEwMDM0LDkgKzEwMDM0LDggQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChjaGVja0hvbGVSZXN1bHRWYWx1ZSwgdXN1YWxs
eShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKAotICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCAK
LSAgICAgICAgICAgICAgICB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHlCeUludCksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCwgaW50ZXJu
YWxNZXRob2RUeXBlKSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQodm1DYWxsKElu
dDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQpLCBt
X2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMDA3MSw5ICsxMDA3MCw4IEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBtX291dC5icmFuY2goY2hlY2tIb2xlUmVzdWx0
VmFsdWUsIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24p
OwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQpLCBtX2NhbGxG
cmFtZSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKKyAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAg
bV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eUJ5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4LCBpbnRlcm5h
bE1ldGhvZFR5cGUpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwpAQCAtMTAxMDcsOSArMTAxMDUsOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKGNoZWNrSG9sZVJlc3VsdFZhbHVlLCB1c3VhbGx5KGNvbnRp
bnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksCi0gICAgICAg
ICAgICAgICAgdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhl
ZFByb3BlcnR5QnlJbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9k
VHlwZSkpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3IoCisgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50KSwgbV9jYWxsRnJh
bWUsIGJhc2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7CiAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMTAxMjEsOSArMTAxMTgsNyBAQCBjbGFzcyBMb3dlckRG
R1RvQjMgewogICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7CiAgICAgICAgICAgICBMVmFsdWUgaW50ZXJuYWxNZXRob2RUeXBlID0gbV9vdXQuY29uc3RJ
bnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX25vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSk7
Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLAotICAgICAg
ICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eUJ5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4LCBpbnRlcm5hbE1ldGhv
ZFR5cGUpKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lm5vdFplcm82NCh2bUNhbGwo
SW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCks
IG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggMTg4Mjg5NmUxMDY4ZDc0MTVmZTFiYmZlZTAw
YTE1YzVkMmIzNDk4MC4uMTRlZGQzZmQxNzBhMDhkMTIwZmI3Nzc5M2JjMDliZTJlOWFkNjdhZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xNjQs
OCArMTY0LDggQEAgY2xhc3MgQXNzZW1ibHlIZWxwZXJzIDogcHVibGljIE1hY3JvQXNzZW1ibGVy
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBsb2FkNjQoYWRkcmVzcywgcmVncy5ncHIo
KSk7CiAjZWxzZQotICAgICAgICBsb2FkMzIoYml0d2lzZV9jYXN0PHZvaWQqPihiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihhZGRyZXNzKSArIFBheWxvYWRPZmZzZXQpLCByZWdzLnBheWxvYWRHUFIo
KSk7Ci0gICAgICAgIGxvYWQzMihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KGFkZHJlc3MpICsgVGFnT2Zmc2V0KSwgcmVncy50YWdHUFIoKSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgcmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBs
b2FkVmFsdWUoQWRkcmVzcyhyZWdzLnBheWxvYWRHUFIoKSksIHJlZ3MpOwogI2VuZGlmCiAgICAg
fQogICAgIApAQCAtMTAwOSwyNCArMTAwOSw1MyBAQCBjbGFzcyBBc3NlbWJseUhlbHBlcnMgOiBw
dWJsaWMgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KDAp
LndpdGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFs
aWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2Vy
dmUzID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcsIEdQ
UlJlZyBwcmVzZXJ2ZTUgPSBJbnZhbGlkR1BSUmVnKQorICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0
U2NyYXRjaEdQUihSZWdpc3RlclNldCBwcmVzZXJ2ZWQpCiAgICAgewotICAgICAgICBpZiAocHJl
c2VydmUxICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMCAm
JiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmU0ICE9IEdQUkluZm86OnJl
Z1QwICYmIHByZXNlcnZlNSAhPSBHUFJJbmZvOjpyZWdUMCkKLSAgICAgICAgICAgIHJldHVybiBH
UFJJbmZvOjpyZWdUMDsKKyAgICAgICAgR1BSUmVnIHJlZ2lzdGVyc1tdID0geworICAgICAgICAg
ICAgR1BSSW5mbzo6cmVnVDAsCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSwKKyAgICAgICAg
ICAgIEdQUkluZm86OnJlZ1QyLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDMsCisgICAgICAg
ICAgICBHUFJJbmZvOjpyZWdUNCwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1Q1LAorICAgICAg
ICB9OwogCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2Vy
dmUyICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMSAmJiBw
cmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1Qx
KQotICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QxOworICAgICAgICBmb3IgKEdQUlJl
ZyByZWcgOiByZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGlmICghcHJlc2VydmVkLmNvbnRhaW5z
KHJlZykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZzsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJl
ZzsKKyAgICB9CiAKLSAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMiAmJiBw
cmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1Qy
ICYmIHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTUgIT0gR1BSSW5mbzo6
cmVnVDIpCi0gICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDI7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gUmVncz4KKyAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoUmVn
cy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc2V0OworICAgICAgICBjb25z
dHJ1Y3RSZWdpc3RlclNldChzZXQsIGFyZ3MuLi4pOworICAgICAgICByZXR1cm4gc2VsZWN0U2Ny
YXRjaEdQUihzZXQpOworICAgIH0KIAotICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86
OnJlZ1QzICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMyAmJiBwcmVzZXJ2ZTMgIT0gR1BS
SW5mbzo6cmVnVDMgJiYgcHJlc2VydmU0ICE9IEdQUkluZm86OnJlZ1QzICYmIHByZXNlcnZlNSAh
PSBHUFJJbmZvOjpyZWdUMykKLSAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMzsKKyAg
ICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RSZWdpc3RlclNldChSZWdpc3RlclNldCYpCisgICAgewor
ICAgIH0KIAotICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1Q0ICYmIHByZXNl
cnZlMiAhPSBHUFJJbmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDQgJiYg
cHJlc2VydmU0ICE9IEdQUkluZm86OnJlZ1Q0ICYmIHByZXNlcnZlNSAhPSBHUFJJbmZvOjpyZWdU
NCkKLSAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUNDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBSZWdzPgorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdFJlZ2lzdGVyU2V0KFJlZ2lz
dGVyU2V0JiBzZXQsIEpTVmFsdWVSZWdzIHJlZ3MsIFJlZ3MuLi4gYXJncykKKyAgICB7CisgICAg
ICAgIGlmIChyZWdzLnRhZ0dQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBzZXQu
c2V0KHJlZ3MudGFnR1BSKCkpOworICAgICAgICBpZiAocmVncy5wYXlsb2FkR1BSKCkgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHNldC5zZXQocmVncy5wYXlsb2FkR1BSKCkpOworICAg
ICAgICBjb25zdHJ1Y3RSZWdpc3RlclNldChzZXQsIGFyZ3MuLi4pOworICAgIH0KIAotICAgICAg
ICByZXR1cm4gR1BSSW5mbzo6cmVnVDU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUmVncz4K
KyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RSZWdpc3RlclNldChSZWdpc3RlclNldCYgc2V0LCBH
UFJSZWcgcmVnLCBSZWdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBpZiAocmVnICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICBzZXQuc2V0KHJlZyk7CisgICAgICAgIGNvbnN0cnVjdFJl
Z2lzdGVyU2V0KHNldCwgYXJncy4uLik7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgZGVidWcgY2Fs
bC4gVGhpcyBjYWxsIGhhcyBubyBlZmZlY3Qgb24gSklUIGNvZGUgZXhlY3V0aW9uIHN0YXRlLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCmluZGV4IDI0OGRmZDQ5MjZkNjA1
N2I2NDcxZjNmYzIxZTYyNGVkZmYwN2FjMDkuLjZiYTliNTdlMWNhMjQ0ZTg2ZWYwNGI5YzMyZWU5
ODU5NTY2NjhkNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKQEAg
LTIwNyw2ICsyMDcsNyBAQCBjbGFzcyBSZWdpc3RlclNldCB7CiAgICAgCiBwcml2YXRlOgogICAg
IHZvaWQgc2V0QW55KFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KKyAgICB2b2lkIHNldEFueShKU1Zh
bHVlUmVncyByZWcpIHsgc2V0KHJlZyk7IH0KICAgICB2b2lkIHNldEFueShjb25zdCBSZWdpc3Rl
clNldCYgc2V0KSB7IG1lcmdlKHNldCk7IH0KICAgICB2b2lkIHNldE1hbnkoKSB7IH0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBSZWdUeXBlLCB0eXBlbmFtZS4uLiBSZWdzPgo=
</data>
<flag name="review"
          id="355450"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>