<?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>23102</bug_id>
          
          <creation_ts>2009-01-04 09:45:21 -0800</creation_ts>
          <short_desc>turn on unused parameter warnings in WebCore</short_desc>
          <delta_ts>2009-01-13 16:16:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>104345</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-04 09:45:21 -0800</bug_when>
    <thetext>We have unused parameter warnings turned on in JavaScriptCore, but off in WebCore. If we turn them on we will probably find a few mistakes, so it&apos;s worth the effort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104350</commentid>
    <comment_count>1</comment_count>
      <attachid>26414</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-04 10:04:30 -0800</bug_when>
    <thetext>Created attachment 26414
step 1 -- covers the simplest cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104413</commentid>
    <comment_count>2</comment_count>
      <attachid>26414</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-05 04:24:57 -0800</bug_when>
    <thetext>Comment on attachment 26414
step 1 -- covers the simplest cases

r=me

Is there any good in leaving long lists of changed files in ChangeLog when there are no per-file comments? I never found that useful, and did actually find it a little harmful, as they tend to show up as false hits when searching for meaningful changes.

-    ASSERT(m_handle == handle);

I find this kind of assertions extremely helpful as documentation at list, and would prefer to have them kept. You could use ASSERT_UNUSED from my patch that is pending review now.

+void Frame::adjustPageHeight(float *newBottom, float oldTop, float oldBottom, float /*bottomLimit*/)

You could move a star here.

+void InitArenaPool(ArenaPool *pool, const char *, unsigned int size, unsigned int align)

And here.

-    virtual PassRefPtr&lt;TransformOperation&gt; blend(const TransformOperation* from, double progress, bool blendToIdentity = false)
+    virtual PassRefPtr&lt;TransformOperation&gt; blend(const TransformOperation*, double, bool)

I don&apos;t think it&apos;s good style to have default arguments on base class version of a function, but not on overrides - this makes it important which version to use at call sites, which is against the purpose of virtual functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104428</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-05 07:25:30 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Is there any good in leaving long lists of changed files in ChangeLog when
&gt; there are no per-file comments?

I think there is some value in listing all the functions changed when there is a substantive change to the functions even if you don&apos;t have time to comment on each change. But in this case where there&apos;s no substantive change, it&apos;s better to leave them out.

I&apos;ll do the rest of the things you suggest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104429</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-05 07:29:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; -    virtual PassRefPtr&lt;TransformOperation&gt; blend(const TransformOperation*
&gt; from, double progress, bool blendToIdentity = false)
&gt; +    virtual PassRefPtr&lt;TransformOperation&gt; blend(const TransformOperation*,
&gt; double, bool)
&gt; 
&gt; I don&apos;t think it&apos;s good style to have default arguments on base class version
&gt; of a function, but not on overrides - this makes it important which version to
&gt; use at call sites, which is against the purpose of virtual functions.

I&apos;m not sure I agree with this one entirely. The compiler doesn&apos;t help us keep these consistent. And I think in many cases the subclass version of the function isn&apos;t intended for calling at all, which is why I mark it &quot;private&quot;. I&apos;d prefer to mark it even more private, &quot;uncallable&quot;, if the language had a way to do that, making it clear you&apos;d only call it through a base class pointer.

I find it irritating to try to keep all the subclass argument lists and defaults in sync with the base class.

That having been said, I&apos;ll take your recommendation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104440</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-05 09:14:04 -0800</bug_when>
    <thetext>Since Subversion is down right now, I&apos;ll post my corrected patch so I can land it later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104441</commentid>
    <comment_count>6</comment_count>
      <attachid>26433</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-05 09:14:41 -0800</bug_when>
    <thetext>Created attachment 26433
step 1 ready to land after fixing what Alexey asked</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104443</commentid>
    <comment_count>7</comment_count>
      <attachid>26434</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-05 09:17:26 -0800</bug_when>
    <thetext>Created attachment 26434
other parts of this, work in progress

This part needs to be landed in smaller pieces. And the UNUSED_PARAM stuff can be largely replaced by use of Alexey&apos;s new ASSERT_UNUSED macro once he lands that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104444</commentid>
    <comment_count>8</comment_count>
      <attachid>26414</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-05 09:21:31 -0800</bug_when>
    <thetext>Comment on attachment 26414
step 1 -- covers the simplest cases

Clearing review flag since this was landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104446</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-05 09:28:17 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/39601</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104455</commentid>
    <comment_count>10</comment_count>
      <attachid>26435</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-05 10:29:42 -0800</bug_when>
    <thetext>Created attachment 26435
more work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105241</commentid>
    <comment_count>11</comment_count>
      <attachid>26608</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 11:25:06 -0800</bug_when>
    <thetext>Created attachment 26608
step 2 -- covers ObjC files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105242</commentid>
    <comment_count>12</comment_count>
      <attachid>26435</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 11:26:24 -0800</bug_when>
    <thetext>Comment on attachment 26435
more work in progress

This patch is now bug 23239.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105243</commentid>
    <comment_count>13</comment_count>
      <attachid>26608</attachid>
    <who name="">mitz</who>
    <bug_when>2009-01-11 11:30:52 -0800</bug_when>
    <thetext>Comment on attachment 26608
step 2 -- covers ObjC files

&gt; +#import &lt;JavaScriptCore/UnusedParam.h&gt;

Everywhere else you used &lt;wtf/UnusedParam.h&gt;. Why not here?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105249</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 11:48:58 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 26608 [review])
&gt; &gt; +#import &lt;JavaScriptCore/UnusedParam.h&gt;
&gt; 
&gt; Everywhere else you used &lt;wtf/UnusedParam.h&gt;. Why not here?

I&apos;m so glad you asked that. There&apos;s no reason. I noticed it myself in the patch.

I&apos;m conflicted about how to handle includes from Mac-platform-specific files. Whether to use framework-style includes &lt;JavaScriptCore/Vector.h&gt; or whether to use the simulated Unix-library-style includes &lt;wtf/Vector.h&gt;. Someone should make a policy decision so I don&apos;t have to think so much.

I&apos;ll use wtf here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105251</commentid>
    <comment_count>15</comment_count>
      <attachid>26608</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 12:12:09 -0800</bug_when>
    <thetext>Comment on attachment 26608
step 2 -- covers ObjC files

Clearing review flag since this was landed in &lt;http://trac.webkit.org/changeset/39806&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105252</commentid>
    <comment_count>16</comment_count>
      <attachid>26613</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 12:27:32 -0800</bug_when>
    <thetext>Created attachment 26613
step 3 -- covers mostly arguments used only in assertions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105256</commentid>
    <comment_count>17</comment_count>
      <attachid>26613</attachid>
    <who name="">mitz</who>
    <bug_when>2009-01-11 12:42:16 -0800</bug_when>
    <thetext>Comment on attachment 26613
step 3 -- covers mostly arguments used only in assertions

&gt;      setDatabaseVersion.begin();
&gt;  
&gt;      char userVersionSQL[32];
&gt; -    int numBytes = snprintf(userVersionSQL, sizeof(userVersionSQL), &quot;PRAGMA user_version=%d&quot;, schemaVersion);
&gt; -    ASSERT_UNUSED(numBytes, static_cast&lt;int&gt;(sizeof(userVersionSQL)) &gt;= numBytes);
&gt; +    int unusedNumBytes = snprintf(userVersionSQL, sizeof(userVersionSQL), &quot;PRAGMA user_version=%d&quot;, schemaVersion);
&gt; +    ASSERT_UNUSED(unusedNumBytes, static_cast&lt;int&gt;(sizeof(userVersionSQL)) &gt;= unusedNumBytes);

Is there a reason to even call sprintf() if assertions are disabled? If not, then both lines should be #if-ed to compile only when assertions are enabled.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105263</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 13:26:10 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt;      char userVersionSQL[32];
&gt; &gt; -    int numBytes = snprintf(userVersionSQL, sizeof(userVersionSQL), &quot;PRAGMA user_version=%d&quot;, schemaVersion);
&gt; &gt; -    ASSERT_UNUSED(numBytes, static_cast&lt;int&gt;(sizeof(userVersionSQL)) &gt;= numBytes);
&gt; &gt; +    int unusedNumBytes = snprintf(userVersionSQL, sizeof(userVersionSQL), &quot;PRAGMA user_version=%d&quot;, schemaVersion);
&gt; &gt; +    ASSERT_UNUSED(unusedNumBytes, static_cast&lt;int&gt;(sizeof(userVersionSQL)) &gt;= unusedNumBytes);
&gt; 
&gt; Is there a reason to even call sprintf() if assertions are disabled?

Yes, snprintf if needed in any case, to construct the SQL command; it&apos;s side effect is the important part. The assertion-only part is asserting that the return value from snprintf is what&apos;s expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105267</commentid>
    <comment_count>19</comment_count>
      <attachid>26613</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 14:01:48 -0800</bug_when>
    <thetext>Comment on attachment 26613
step 3 -- covers mostly arguments used only in assertions

Landed as http://trac.webkit.org/changeset/39810</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105288</commentid>
    <comment_count>20</comment_count>
      <attachid>26620</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 18:23:39 -0800</bug_when>
    <thetext>Created attachment 26620
step 4 -- removes unused arguments that were unnecessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105300</commentid>
    <comment_count>21</comment_count>
      <attachid>26620</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-01-11 21:42:51 -0800</bug_when>
    <thetext>Comment on attachment 26620
step 4 -- removes unused arguments that were unnecessary

r=me assuming all tests pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105309</commentid>
    <comment_count>22</comment_count>
      <attachid>26620</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-11 23:45:35 -0800</bug_when>
    <thetext>Comment on attachment 26620
step 4 -- removes unused arguments that were unnecessary

Landed as http://trac.webkit.org/changeset/39818 so clearing the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105311</commentid>
    <comment_count>23</comment_count>
      <attachid>26626</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-12 00:16:58 -0800</bug_when>
    <thetext>Created attachment 26626
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105590</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-13 16:16:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/39880</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26414</attachid>
            <date>2009-01-04 10:04:30 -0800</date>
            <delta_ts>2009-01-05 09:21:31 -0800</delta_ts>
            <desc>step 1 -- covers the simplest cases</desc>
            <filename>UnusedParamsStep1Patch.txt</filename>
            <type>text/plain</type>
            <size>273083</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzIzIEBACisyMDA5LTAxLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjMxMDI6IHR1cm4gb24gdW51c2VkIHBhcmFtZXRlciB3YXJuaW5ncyBpbiBXZWJDb3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwMgorCisgICAg
ICAgIEZpcnN0IHN0ZXA6IEZpeCB0aGUgc2ltcGxlIGNhc2VzIHdoZXJlIHdlIGNhbiBqdXN0IHJl
bW92ZSBhbiBhcmd1bWVudCBuYW1lLgorICAgICAgICBBbHNvIG1hZGUgYSBmZXcgbW9yZSB0aGlu
Z3MgcHJvdGVjdGVkIGFuZCBwcml2YXRlLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52
YXNQaXhlbEFycmF5Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1BpeGVsQXJy
YXk6OmdldEJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSFRNTENhbnZhc1N0eWxl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNDbG9zZUZ1bmN0aW9uR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNCbHVyRnVuY3Rpb25HZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0ZvY3VzRnVuY3Rpb25HZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdlRnVuY3Rp
b25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZvcm1FbGVtZW50OjpjYW5HZXRJdGVtc0Zv
ck5hbWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNIaXN0b3J5OjpjdXN0b21QdXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFT
Y3JpcHRDYWxsRnJhbWU6OnRoaXNPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1JlcGxh
Y2VGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljUmVs
b2FkRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0Fz
c2lnbkZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnJlbG9h
ZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U05vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1Bs
dWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cnVudGltZU9iamVj
dEdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBw
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6Omdl
dFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBw
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXJXaXRoUGFy
ZW50Ojpjb21taXRDaGFuZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xp
c3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6Y2xlYXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6OnBhcmVudE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtl
cjo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6bmV4dFNpYmxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpuZXh0Tm9kZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RXb3Jr
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6OnNlbGYpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnN0cnVjdFhTTFRQcm9jZXNzb3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVSZW5kZXJpbmdGb3JCaW5k
aW5ncyk6CisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKF9OUE5f
Q29uc3RydWN0KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpSdW50aW1lT2JqZWN0SW1wOjpSdW50aW1lT2JqZWN0SW1wKToKKyAgICAgICAgKEpT
Qzo6UnVudGltZU9iamVjdEltcDo6cHV0KToKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAg
ICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1w
bGljaXQpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpjcmVhdGVWYXJpYWJsZXNSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6YWRkVmFyaWFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRWYXJp
YWJsZURlY2xhcmF0aW9uQmxvY2spOgorICAgICAgICAqIGNzcy9DU1NSdWxlLmg6CisgICAgICAg
IChXZWJDb3JlOjpDU1NSdWxlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICog
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnJlc29sdmVWYXJpYWJsZURl
cGVuZGVudFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Omxhcmdl
ckZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNtYWxsZXJG
b250U2l6ZSk6CisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uOjpnZXRQYXJzZWRWYXJpYWJs
ZURlY2xhcmF0aW9uQmxvY2spOgorICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChX
ZWJDb3JlOjptb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6Omdy
aWRNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZV9oZWlnaHRNZWRp
YUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZV93aWR0aE1lZGlhRmVhdHVy
ZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6aGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCk6CisgICAg
ICAgIChXZWJDb3JlOjp3aWR0aE1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
bWluX2NvbG9yTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptYXhfY29sb3JN
ZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6Om1pbl9tb25vY2hyb21lTWVkaWFG
ZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptYXhfbW9ub2Nocm9tZU1lZGlhRmVhdHVy
ZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6bWluX2RldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZl
YXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6Om1heF9kZXZpY2VfYXNwZWN0X3JhdGlvTWVk
aWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptaW5fZGV2aWNlX3BpeGVsX3JhdGlv
TWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptYXhfZGV2aWNlX3BpeGVsX3Jh
dGlvTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptaW5faGVpZ2h0TWVkaWFG
ZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptYXhfaGVpZ2h0TWVkaWFGZWF0dXJlRXZh
bCk6CisgICAgICAgIChXZWJDb3JlOjptaW5fd2lkdGhNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1heF93aWR0aE1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6bWluX2RldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6
Om1heF9kZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpt
aW5fZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptYXhf
ZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgICogZG9tL0VkaXRpbmdUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdUZXh0OjpyZW5kZXJlcklzTmVlZGVkKToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojph
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzVVJMQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoQXR0ckFkZGl0aW9uRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y29w
eU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YWNj
ZXNzS2V5QWN0aW9uKToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50VGFyZ2V0Ojpwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAq
IGRvbS9NZXNzYWdlUG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6Y2hlY2tTZXRQcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2Fu
UmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNyZWF0ZVJlbmRlcmVyKToK
KyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW5zZXJ0ZWRJ
bnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW1vdmVkRnJvbVRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKiBkb20vUG9z
aXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFj
ZVBvc2l0aW9uKToKKyAgICAgICAgKiBkb20vUXVhbGlmaWVkTmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpRTmFtZUNvbXBvbmVudHNUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlFOYW1lQ29tcG9uZW50c1RyYW5zbGF0b3I6OmVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlFOYW1lQ29tcG9uZW50c1RyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgICogZG9tL1N0
eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KToKKyAgICAgICAgKiBkb20vVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogZG9tL1Rva2VuaXplci5oOgorICAg
ICAgICAoV2ViQ29yZTo6VG9rZW5pemVyOjp3cml0ZVJhd0RhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6VG9rZW5pemVyOjpUb2tlbml6ZXIpOgorICAgICAgICAqIGRvbS9Xb3JrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBk
b20vV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBkb20vV29ya2VyTWVzc2FnaW5nUHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s6OnBlcmZv
cm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFz
azo6cGVyZm9ybVRhc2spOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om1hdGNoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1
bmMpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kRWxlbWVudE5zSGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpleHRlcm5hbFN1YnNldEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6aWdub3Jh
YmxlV2hpdGVzcGFjZUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlc1N0YXJ0
RWxlbWVudE5zSGFuZGxlcik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZEZpcnN0R3JhbW1hckRldGFpbEluUmFuZ2UpOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVsZXRl
Rm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTWFrZVRleHRXcml0aW5nRGlyZWN0
aW9uTGVmdFRvUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1ha2VUZXh0V3JpdGlu
Z0RpcmVjdGlvbk5hdHVyYWwpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1ha2VUZXh0V3Jp
dGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KToKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAgICAqIGh0bWwvSFRNTEFwcGxldEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVy
KToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxCdXR0b25FbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9I
VE1MRW1iZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6
OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIp
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0QWN0aXZhdGVkU3VibWl0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZy
YW1lRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJh
bWVFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6OmFjY2Vz
c0tleUFjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKToKKyAgICAg
ICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6
aGVhZENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6Ym9k
eUNyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6ZnJhbWVz
ZXRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OnNlbGVj
dENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6bmVzdGVk
Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpuZXN0ZWRT
dHlsZUNyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6dGFi
bGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjp0
YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJz
ZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJz
ZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFy
c2VyOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlcjo6cENsb3NlclN0cmljdENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBhcnNlcjo6bWFwQ3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgICogaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OndyYXBD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjptb3VzZURp
ZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRGYWlsTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpmYWlsZWRUb1BhcnNlU291cmNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlw
dFByb2ZpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VGl0bGVDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRIZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGVh
dnlQcm9maWxlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VHJlZVByb2ZpbGVDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpnZXRVbmlxdWVJZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OnJlc3RvcmVBbGwpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0UHJv
ZmlsZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RnVuY3Rpb25OYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRMaW5lTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFRvdGFsVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRT
ZWxmVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRUb3RhbFBlcmNlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0U2VsZlBlcmNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TnVtYmVyT2ZD
YWxscyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRWaXNpYmxlKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkRm9udC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRGb250Ojpsb2FkKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGll
bnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6YWRkTWVzc2FnZVRv
Q29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6cnVuQmVmb3Jl
VW5sb2FkQ29uZmlybVBhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50
OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xp
ZW50OjpzY3JvbGxCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVD
bGllbnQ6OnJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNocm9tZUNsaWVudDo6bW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6
YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxM
b2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJl
Y2VpdmVUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmNhblNob3dNSU1F
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpyZXByZXNl
bnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1l
TG9hZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6b2JqZWN0Q29udGVudFR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6d2luZG93T2JqZWN0
Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaWRQ
ZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RnJhbWVMb2Fk
ZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojp3aWxsQ2FjaGVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hvd1NwZWxsaW5n
VUkpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JX
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpzZXRJbnB1dE1ldGhv
ZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q29udGV4dE1lbnVDbGllbnQ6OmRvd25s
b2FkVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RHJhZ0NsaWVudDo6Y3JlYXRlRHJhZ0lt
YWdlRm9yTGluayk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUluc3BlY3RvckNsaWVudDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUluc3BlY3RvckNsaWVu
dDo6cG9wdWxhdGVTZXR0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5SW5zcGVjdG9yQ2xp
ZW50OjpzdG9yZVNldHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGll
bnQ6OnJlbW92ZVNldHRpbmcpOgorICAgICAgICAqIGxvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGVFBEaXJlY3RvcnlUb2tlbml6ZXI6OndyaXRlKToK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZEl0ZW0pOgorICAgICAgICAqIGxvYWRlci9JbWFnZURv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVG9rZW5pemVyOjp3cml0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVRva2VuaXplcjo6d3JpdGVSYXdEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGxv
YWRlci9JbWFnZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6bm90
aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpjb250aW51ZUFmdGVyTmF2aWdh
dGlvblBvbGljeSk6CisgICAgICAgICogbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFUb2tlbml6ZXI6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhVG9rZW5pemVyOjp3cml0ZVJhd0RhdGEpOgorICAgICAgICAqIGxvYWRlci9QbHVnaW5Eb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Ub2tlbml6ZXI6OndyaXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblRva2VuaXplcjo6d3JpdGVSYXdEYXRhKToKKyAgICAgICAg
KiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkZXI6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKiBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJD
bGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyQ2xpZW50Ojp3aWxs
U2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6
OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyQ2xpZW50
OjpnZXRTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgICogbG9hZGVyL1RleHRE
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VG9rZW5pemVyOjp3cml0ZSk6Cisg
ICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6ZHluYW1pY0VudHJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmFkZER5bmFtaWNFbnRyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVEeW5hbWljRW50cnkpOgorICAgICAgICAqIGxvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpjYWNoZUZvck1haW5SZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZURh
dGEpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZUNsaWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlQ2xpZW50OjpkaXNwYXRjaERpZEFkZEljb25Gb3JQYWdl
VVJMKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRmV0Y2hlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJY29uRmV0Y2hlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNv
cmU6Okljb25GZXRjaGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJY29u
RmV0Y2hlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRmV0Y2hl
cjo6ZGlkRmFpbCk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJY29uTG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SWNvblJlY29yZDo6aW1hZ2UpOgorICAgICAgICAqIGxvYWRlci9tYWMvUmVzb3VyY2VM
b2FkZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hl
UmVzcG9uc2UpOgorICAgICAgICAqIHBhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRGb2N1c2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRp
b25Gb3JJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRl
eEZvclZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb0FYUmFuZ2VGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhSYW5nZUZvckluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhTdHJpbmdGb3JSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9BY2Nlc3NpYmlsaXR5SGl0VGVzdCk6
CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50OjpwYWludEN1c3RvbVNjcm9sbGJhcik6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpmaW5kKToKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRpc3BhdGNo
TW91c2VFdmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6YWRqdXN0UGFnZUhlaWdodCk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibGVuZEZ1bmMpOgorICAgICAgICAq
IHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkJhc2U6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6YWZm
ZWN0c1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6Om9uQW5pbWF0
aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6b25BbmltYXRpb25J
dGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6b25BbmltYXRpb25F
bmQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6c3RhcnRBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6ZW5kQW5pbWF0aW9uKToKKyAgICAgICAg
KiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0
aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAq
IHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9BcmVuYS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbml0QXJlbmFQb29sKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxiYXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OnBh
aW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
aGVtZTo6Y29udHJvbEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZTo6Y29udHJvbFBh
ZGRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL1RoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpU
aGVtZTo6Y29udHJvbEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjptaW5pbXVtQ29udHJvbFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGhlbWU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjppbmZs
YXRlQ29udHJvbFBhaW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJ
bWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlOjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFB
dEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkZXN0cm95RGVjb2RlZERh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjQVRTVUkubW06Cisg
ICAgICAgIChXZWJDb3JlOjpvdmVycmlkZUxheW91dE9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6YXBwbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJh
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjphcHBs
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9T
a2V3VHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpTa2V3VHJhbnNmb3Jt
T3BlcmF0aW9uOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJh
dGlvbjo6aXNTYW1lVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRnJhZ21lbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2U6OnBsYXRmb3JtQ29tcGFyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VFcnJvckJhc2U6OnBsYXRmb3JtQ29tcGFyZSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGxhdGZvcm1Db21wYXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZWZldGNoRE5T
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OmZvcm1PcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1DbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtU2NoZWR1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Zm9ybVVuc2NoZWR1bGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL05ldHdvcmtT
dGF0ZU5vdGlmaWVyTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdGF0ZU5vdGlm
aWVyOjpkeW5hbWljU3RvcmVDYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVVEYxNi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVVEYxNjo6ZGVjb2Rl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheSk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnBsYWNl
RWxsaXBzaXNCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnNldFZlcnRpY2FsU2VsZWN0aW9u
UG9zaXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lUnVuQm94Lmg6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVSdW5Cb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lUnVuQm94OjpwYWludFRleHREZWNvcmF0aW9ucyk6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCUi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCUjo6bGluZUhlaWdodCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmaWxs
TGVmdFNlbGVjdGlvbkdhcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZmlsbFJp
Z2h0U2VsZWN0aW9uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50
SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dExlZ2VuZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omxv
d2VzdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmlnaHRtb3N0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpsZWZ0bW9zdFBvc2l0aW9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmJvcmRlckZpdEFkanVzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvbnRh
aW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OmNvbGxlY3RBYnNv
bHV0ZUxpbmVCb3hRdWFkcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6bGluZUhlaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93OjpjcmVhdGVJbmxpbmVCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6aXND
aGlsZEFsbG93ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbWFnZTo6aW1hZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2FuQmVQcm9ncmFtYXRp
Y2FsbHlTY3JvbGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZExpbmVC
b3hSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbGxlY3RBYnNvbHV0
ZUxpbmVCb3hRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlcGFpbnRE
dXJpbmdMYXlvdXRJZk1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVw
YWludE92ZXJoYW5naW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omxv
Y2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cG9zaXRpb25G
b3JDb29yZGluYXRlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpwYWludEJveERlY29yYXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cGFpbnRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmltYWdlQ2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6bGluZUhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclBhdGg6OmFic29sdXRlUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUGF0aDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6
ZHJhd01hcmtlcnNJZk5lZWRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpvdmVyZmxvd0hlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dMZWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlcGxhY2VkOjpvdmVyZmxvd1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpwYWludFJlcGxh
Y2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bGluZUhlaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjphcHBseUFkZGl0aW9uYWxUcmFuc2Zvcm1zKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlUXVhZHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmFic29sdXRlUmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpyZWxhdGl2ZUJC
b3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0ltYWdlOjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0
OjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsaW5lSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVRdWFkcyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclNWR1RTcGFuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RTcGFuOjph
YnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpjcmVhdGVJbmxpbmVCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1RleHRQYXRoOjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xp
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6YmFzZWxpbmVQb3NpdGlv
bik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ29sOjppbWFnZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6
aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93OjpzZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlUm93Ojp0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZVJvdzo6bGluZUhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmltYWdlQ2hhbmdl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29sdXRlUXVh
ZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpsYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtU3R5bGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRq
dXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRl
eHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RUZXh0
QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlz
dFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25J
bm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJU
cmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJU
aHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjph
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VG9wR3JhZGllbnRJbnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCb3R0b21HcmFkaWVudEludGVycG9sYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5HcmFk
aWVudEludGVycG9sYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrR3JhZGllbnRJbnRlcnBv
bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0
U2VhcmNoQ2VsbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6bG9jYWxUb0Fic29sdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFic29s
dXRlVG9Mb2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwYWludEJveERlY29y
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFic29sdXRlUXVhZHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZUZsb3dCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGlu
ZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRC
b3g6OmNhbGN1bGF0ZUdseXBoSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRl
eHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRl
eHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRl
eHRCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6
OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
U3R5bGVJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFnZTo6Y2FuUmVuZGVyKToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93QWx0ZXJUYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZUF1dGhvcml6ZXI6OmNyZWF0ZVRyaWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VB
dXRob3JpemVyOjpjcmVhdGVUZW1wVHJpZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZUF1dGhvcml6ZXI6OmRyb3BUcmlnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0
aG9yaXplcjo6ZHJvcFRlbXBUcmlnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0
aG9yaXplcjo6Y3JlYXRlVlRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9y
aXplcjo6ZHJvcFZUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6
OmFsbG93VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6YWxs
b3dSZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dQcmFn
bWEpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0F0dGFjaCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGV0YWNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dGdW5jdGlvbik6CisgICAg
ICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
QXV0aG9yaXplcjo6ZHJvcFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3Jp
emVyOjpkcm9wVGVtcFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVy
OjphbGxvd1JlaW5kZXgpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmludGVybmFsU2V0SXRlbSk6CisgICAgICAgICog
c3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbHRHbHlwaEVsZW1lbnQ6OnNldEdseXBoUmVmKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FsdEdseXBoRWxlbWVudDo6c2V0Rm9ybWF0KToKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmJlZ2luRWxlbWVudEF0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmVuZEVsZW1lbnRBdCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZURpc3Rh
bmNlKToKKyAgICAgICAgKiBzdmcvU1ZHQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Q29sb3I6OnNldFJHQkNvbG9ySUNDQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ29sb3I6
OnNldENvbG9yKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQpOgorICAgICAgICAq
IHN2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
b3JlaWduT2JqZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTWFya2VyRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAq
IHN2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBh
cnNlcjo6c3ZnTGluZVRvSG9yaXpvbnRhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFy
c2VyOjpzdmdMaW5lVG9WZXJ0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpzdmdDdXJ2ZVRvQ3ViaWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNl
cjo6c3ZnQ3VydmVUb1F1YWRyYXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpzdmdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQ
YXJzZXI6OnN2Z0FyY1RvKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp1bnN1c3BlbmRSZWRyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Z2V0SW50ZXJzZWN0aW9uTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpnZXRFbmNsb3N1cmVMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NWR0VsZW1lbnQ6OmNoZWNrSW50ZXJzZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OmNoZWNrRW5jbG9zdXJlKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dENv
bnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3hRdWVy
eVdhbGtlcjo6Y2h1bmtQb3J0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIHN2Zy9TVkdUZXh0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6Y3JlYXRlUmVuZGVy
ZXIpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dFBhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3Zn
L2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb25kaXRp
b25FdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6Y3JlYXRlSW5zdGFuY2VUaW1lc0Zyb21TeW5jYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTTUlMRWxlbWVudDo6aGFuZGxlQ29uZGl0aW9uRXZlbnQpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNocm9t
ZUNsaWVudDo6cmVwYWludCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bik6CisgICAgICAgICogc3ZnL2dy
YXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFp
bnRTZXJ2ZXI6OnRlYXJkb3duKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZEZhaWwpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmdQcmVmbGlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgICog
eG1sL1hQYXRoR3JhbW1hci55OgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKToKKyAgICAgICAgKiB4
bWwvWFNMVFByb2Nlc3Nvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpn
ZW5lcmljRXJyb3JGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmRvY0xvYWRlckZ1bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpY
U0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIpOgorCiAyMDA4LTEyLTMwICBBZGFtIFRyZWF0
ICA8dHJlYXRAa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcy4K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20u
aAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUGl4ZWxB
cnJheUN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBpbmxpbmUgSlNWYWx1
ZSogSlNDYW52YXNQaXhlbEFycmF5OjpnZXRCeUluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaW5kZXgpCisgICAgaW5saW5lIEpTVmFsdWUqIEpTQ2FudmFzUGl4ZWxBcnJheTo6Z2V0QnlJ
bmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVk
IGNoYXIgcmVzdWx0OwogICAgICAgICBpZiAoIWltcGwoKS0+Z2V0KGluZGV4LCByZXN1bHQpKQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBD
YQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdHlsZS0+Y29sb3IoKSk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiB0b0hUTUxDYW52YXNTdHlsZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHZhbHVlKQorc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRvSFRN
TENhbnZhc1N0eWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1
ZS0+aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpjcmVhdGUoYXNTdHJp
bmcodmFsdWUpLT52YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIEpTRXZl
bnRMaXN0ZW5lciogSlNET01HbG9iYWxPYmplY3Q6OmZpbmQKICAgICByZXR1cm4gbGlzdGVuZXJz
LmdldChvYmplY3QpOwogfQogCi1QYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gSlNET01HbG9i
YWxPYmplY3Q6OmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUqIHZhbCwgYm9vbCBpc0lubGluZSkKK1Bhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBK
U0RPTUdsb2JhbE9iamVjdDo6ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSos
IEpTVmFsdWUqIHZhbCwgYm9vbCBpc0lubGluZSkKIHsKICAgICBpZiAoSlNFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IGZpbmRKU0V2ZW50TGlzdGVuZXIodmFsLCBpc0lubGluZSkpCiAgICAgICAg
IHJldHVybiBsaXN0ZW5lcjsKQEAgLTEwNyw3ICsxMDcsNyBAQCBQYXNzUmVmUHRyPEpTRXZlbnRM
aXN0ZW5lcj4gSlNET01HbG9iYWxPCiAgICAgcmV0dXJuIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KHZhbCksIHRoaXMsIGlzSW5saW5lKS5nZXQoKTsKIH0KIAotSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIqIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCitK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogSlNET01HbG9iYWxPYmplY3Q6OmZpbmRKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxp
bmUpCiB7CiAgICAgaWYgKCF2YWwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDM5
NTg0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwMiwyMiArMzAyLDIyIEBAIERPTVdpbmRvdyogdG9ET01XaW5kb3coSlNW
YWx1ZSogdmFsdWUpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0
aWNDbG9zZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBub25DYWNo
aW5nU3RhdGljQ2xvc2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4g
bmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIGpzRE9N
V2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSk7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdT
dGF0aWNCbHVyRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIG5vbkNh
Y2hpbmdTdGF0aWNCbHVyRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJu
IG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMCwgcHJvcGVydHlOYW1lLCBqc0RP
TVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQmx1cik7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdT
dGF0aWNGb2N1c0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBub25D
YWNoaW5nU3RhdGljRm9jdXNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1
cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIGpz
RE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25Gb2N1cyk7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hp
bmdTdGF0aWNQb3N0TWVzc2FnZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlKiBub25DYWNoaW5nU3RhdGljUG9zdE1lc3NhZ2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JikKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAyLCBw
cm9wZXJ0eU5hbWUsIGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZSk7CiB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1F
bGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNIVE1MRm9ybUVs
ZW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqIGV4ZWMsIEhUTUxGb3JtRWxlbWVu
dCogZm9ybSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorYm9vbCBKU0hUTUxGb3Jt
RWxlbWVudDo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIEhUTUxGb3JtRWxlbWVudCog
Zm9ybSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIFZlY3RvcjxSZWZQ
dHI8Tm9kZT4gPiBuYW1lZEl0ZW1zOwogICAgIGZvcm0tPmdldE5hbWVkRWxlbWVudHMocHJvcGVy
dHlOYW1lLCBuYW1lZEl0ZW1zKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJh
bWVTZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpjYW5H
ZXRJdGVtc0YKICAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05hbWUoZnJhbWVUYWcp
OwogfQogCi1KU1ZhbHVlKiBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTSFRNTEZyYW1lU2V0RWxlbWVudDo6bmFtZUdldHRlcihF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBKU0hUTUxFbGVtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
SlNIVE1MRWxlbWVudCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPih0aGlzT2JqLT5pbXBsKCkp
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24g
Mzk1ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDE3ICszNywxNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNCYWNrRnVuY3Rpb25H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNCYWNrRnVu
Y3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgMCwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5j
dGlvbkJhY2spOwogfQogCi1KU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljRm9yd2Fy
ZEZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFBy
b3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBl
RnVuY3Rpb25Gb3J3YXJkKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0dvRnVuY3Rp
b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNHb0Z1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3Rv
dHlwZUZ1bmN0aW9uKGV4ZWMsIDEsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVu
Y3Rpb25Hbyk7CiB9CkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgSlNIaXN0b3J5OjpjdXN0b21HZXRP
d25Qcm9wZXJ0eVNsb3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBKU0hpc3Rvcnk6OmN1
c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCitib29sIEpTSGlzdG9yeTo6Y3VzdG9t
UHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqLCBQdXRQcm9w
ZXJ0eVNsb3QmKQogewogICAgIC8vIE9ubHkgYWxsb3cgcHV0dGluZyBieSBmcmFtZXMgaW4gdGhl
IHNhbWUgb3JpZ2luLgogICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbUZyYW1lKGV4ZWMsIGltcGwo
KS0+ZnJhbWUoKSkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxG
cmFtZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFT
Y3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNyBAQCBKU1ZhbHVlKiBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRl
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSlNKYXZhU2NyaXB0Q2FsbEZyYW1l
Ojp0aGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUqIEpTSmF2YVNjcmlw
dENhbGxGcmFtZTo6dGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdAogewogICAgIHJldHVybiBp
bXBsKCktPnRoaXNPYmplY3QoKSA/IGltcGwoKS0+dGhpc09iamVjdCgpIDoganNOdWxsKCk7CiB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9u
IDM5NTg0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5j
dGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY1Jl
cGxhY2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3IChleGVj
KSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90
b3R5cGVGdW5jdGlvblJlcGxhY2UpOwogfQogCi1KU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljUmVs
b2FkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIG5vbkNhY2hpbmdT
dGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3
IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRp
b25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCk7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0
aWNBc3NpZ25GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogbm9uQ2Fj
aGluZ1N0YXRpY0Fzc2lnbkZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVy
biBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDEsIHByb3BlcnR5TmFtZSwganNM
b2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKTsKIH0KQEAgLTI2MSw3ICsyNjEsNyBAQCBK
U1ZhbHVlKiBKU0xvY2F0aW9uOjpyZXBsYWNlKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTTG9jYXRpb246OnJlbG9hZChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBKU0xvY2F0aW9uOjpyZWxvYWQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBs
KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMyArNDgsMTMgQEAgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6SlNOYW1lZE5vZGVz
Q29sbAogewogfQogCi1KU1ZhbHVlKiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpsZW5ndGhHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb246Omxl
bmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbiogdGhpc09iaiA9
IHN0YXRpY19jYXN0PEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24qPihhc09iamVjdChzbG90LnNsb3RC
YXNlKCkpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdGhpc09iai0+bV9ub2Rlcy0+c2l6
ZSgpKTsKIH0KIAotSlNWYWx1ZSogSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb246OmluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBKU05hbWVkTm9kZXNDb2xsZWN0aW9uICp0aGlzT2JqID0gc3Rh
dGljX2Nhc3Q8SlNOYW1lZE5vZGVzQ29sbGVjdGlvbio+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2Uo
KSkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsICgqdGhpc09iai0+bV9ub2Rlcylbc2xvdC5pbmRl
eCgpXS5nZXQoKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9y
Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB2b2lk
IEpTTm9kZUl0ZXJhdG9yOjptYXJrKCkKICAgICBET01PYmplY3Q6Om1hcmsoKTsKIH0KIAotSlNW
YWx1ZSogSlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5uZXh0Tm9kZShleGVjLCBlYyk7CkBAIC01Miw3
ICs1Miw3IEBAIEpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3QKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBub2RlLmdldCgpKTsKIH0KIAotSlNWYWx1ZSogSlNOb2RlSXRlcmF0
b3I6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlKiBKU05vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPE5v
ZGU+IG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZShleGVjLCBlYyk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCShyZXZpc2lv
biAzOTU4NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgUnVudGltZU9iamVj
dEltcCogZ2V0UnVudGltZU9iamVjCiAgICAgcmV0dXJuIEpTQzo6QmluZGluZ3M6Okluc3RhbmNl
OjpjcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMsIGluc3RhbmNlKTsKIH0KIAotSlNWYWx1ZSogcnVu
dGltZU9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogcnVudGltZU9iamVj
dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNIVE1MRWxlbWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0
PEpTSFRNTEVsZW1lbnQqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgp
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXIuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNR
dWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNyArMjY3
LDcgQEAgQ2FsbFR5cGUgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmdldAogICAgIHJldHVy
biBDYWxsVHlwZUhvc3Q7CiB9CiAKLXZvaWQgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6Omdl
dFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXkp
Cit2b2lkIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSkKIHsKICAgICBpZiAoIWFsbG93c0dldFBy
b3BlcnR5TmFtZXMoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR1BPRFR5cGVXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR1BPRFR5cGVXcmFwcGVyLmgJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NWR1BPRFR5cGVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsx
OTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAobV9wYXJlbnQuZ2V0KCktPiptX2dldHRl
cikoKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBPRFR5cGUgdHlw
ZSwgU1ZHRWxlbWVudCogY29udGV4dCkKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKFBP
RFR5cGUgdHlwZSwgU1ZHRWxlbWVudCopCiAgICAgewogICAgICAgICAobV9wYXJlbnQuZ2V0KCkt
PiptX3NldHRlcikodHlwZSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NW
R1BhdGhTZWdMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1KU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShy
ZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB2b2lkIEpTVHJlZVdhbGtlcjo6
bWFyaygpCiAgICAgRE9NT2JqZWN0OjptYXJrKCk7CiB9CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVX
YWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+cGFyZW50Tm9kZShleGVjKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEpTVmFsdWUq
IEpTVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShFeGVjU3QKICAgICByZXR1cm4gdG9KUyhleGVjLCBu
b2RlKTsKIH0KICAgICAKLUpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OmZp
cnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBOb2RlKiBu
b2RlID0gaW1wbCgpLT5maXJzdENoaWxkKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKQEAgLTUzLDcgKzUzLDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxk
KEV4ZWNTdAogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1ZSog
SlNUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5sYXN0Q2hpbGQoZXhl
Yyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNjEsNyArNjEsNyBAQCBKU1Zh
bHVlKiBKU1RyZWVXYWxrZXI6Omxhc3RDaGlsZChFeGVjU3RhCiAgICAgcmV0dXJuIHRvSlMoZXhl
Yywgbm9kZSk7CiB9CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIEpTVHJlZVdhbGtl
cjo6bmV4dFNpYmxpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBO
b2RlKiBub2RlID0gaW1wbCgpLT5uZXh0U2libGluZyhleGVjKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCkBAIC02OSw3ICs2OSw3IEBAIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bmV4
dFNpYmxpbmcoRXhlY1MKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0KICAgICAKLUpT
VmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5n
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGlt
cGwoKS0+cHJldmlvdXNTaWJsaW5nKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKQEAgLTc3LDcgKzc3LDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxp
bmcoRQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1ZSogSlNU
cmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05v
ZGUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtODUsNyArODUsNyBA
QCBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjCiAgICAgcmV0dXJuIHRv
SlMoZXhlYywgbm9kZSk7CiB9CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Om5leHROb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIEpTVHJlZVdh
bGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBO
b2RlKiBub2RlID0gaW1wbCgpLT5uZXh0Tm9kZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBKU1dvcmtlckNv
bnN0cnVjdG9yOjpKU1dvcmtlckNvbnN0cnVjdG9yCiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFkT25seXxEb250RGVsZXRl
fERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXb3JrZXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitz
dGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCkKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFy
Z3VtZW50cyIpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9p
ZCBKU1dvcmtlckNvbnRleHQ6Om1hcmsoKQogICAgIH0KIH0KIAotSlNWYWx1ZSogSlNXb3JrZXJD
b250ZXh0OjpzZWxmKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUqIEpTV29ya2VyQ29u
dGV4dDo6c2VsZihFeGVjU3RhdGUqKSBjb25zdAogewogICAgIHJldHVybiBhc1ZhbHVlKCk7CiB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNM
VFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBA
QCBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvcjo6SlNYU0xUUHJvY2VzCiAgICAgcHV0RGlyZWN0
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTWFNMVFByb2Nlc3NvclByb3RvdHlw
ZTo6c2VsZihleGVjKSwgTm9uZSk7CiB9CiAKLXN0YXRpYyBKU09iamVjdCogY29uc3RydWN0WFNM
VFByb2Nlc3NvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0WFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgcmV0dXJuIENSRUFURV9ET01f
T0JKRUNUX1dSQVBQRVIoZXhlYywgWFNMVFByb2Nlc3NvciwgWFNMVFByb2Nlc3Nvcjo6Y3JlYXRl
KCkuZ2V0KCkpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ck1hYy5tbQkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNCw5ICsxMzQsMTAgQEAgdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpkaXNjb25uZWN0UGxhdGZvcgogfQogCiAjaWYgRU5BQkxFKE1BQ19K
QVZBX0JSSURHRSkKKwogc3RhdGljIHB0aHJlYWRfdCBtYWluVGhyZWFkOwogCi1zdGF0aWMgdm9p
ZCB1cGRhdGVSZW5kZXJpbmdGb3JCaW5kaW5ncyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpK
U09iamVjdCogcm9vdE9iamVjdCkKK3N0YXRpYyB2b2lkIHVwZGF0ZVJlbmRlcmluZ0ZvckJpbmRp
bmdzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCogcm9vdE9iamVjdCkKIHsKICAgICBp
ZiAocHRocmVhZF9zZWxmKCkgIT0gbWFpblRocmVhZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY1
LDYgKzE2Niw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6aW5pdEphdmFKU0JpbmRpbmcKICAg
ICBKU0M6OkJpbmRpbmdzOjpKYXZhSlNPYmplY3Q6OmluaXRpYWxpemVKTklUaHJlYWRpbmcoKTsK
ICAgICBKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6c2V0RGlkRXhlY3V0ZUZ1bmN0aW9uKHVwZGF0
ZVJlbmRlcmluZ0ZvckJpbmRpbmdzKTsKIH0KKwogI2VuZGlmCiAKIH0KSW5kZXg6IFdlYkNvcmUv
YnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9OUF9q
c29iamVjdC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9icmlkZ2UvTlBfanNvYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTYsNyArNDE2LDcgQEAgYm9vbCBfTlBOX0VudW1l
cmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBf
TlBOX0NvbnN0cnVjdChOUFAgbnBwLCBOUE9iamVjdCogbywgY29uc3QgTlBWYXJpYW50KiBhcmdz
LCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCitib29sIF9OUE5fQ29uc3Ry
dWN0KE5QUCwgTlBPYmplY3QqIG8sIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJn
Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3Jp
cHRPYmplY3RDbGFzcykgewogICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVy
cHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29i
amVjdC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFJ1bnRpbWVPYmplY3RJbXA6
OlJ1bnRpbWVPYmplY3RJbXAoRXhlY1MKICAgICBpbnN0YW5jZS0+cm9vdE9iamVjdCgpLT5hZGRS
dW50aW1lT2JqZWN0KHRoaXMpOwogfQogICAgIAotUnVudGltZU9iamVjdEltcDo6UnVudGltZU9i
amVjdEltcChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUs
IFBhc3NSZWZQdHI8SW5zdGFuY2U+IGkpCitSdW50aW1lT2JqZWN0SW1wOjpSdW50aW1lT2JqZWN0
SW1wKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQ
dHI8SW5zdGFuY2U+IGkpCiAgICAgOiBKU09iamVjdChzdHJ1Y3R1cmUpCiAgICAgLCBpbnN0YW5j
ZShpKQogewpAQCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wgUnVudGltZU9iamVjdEltcDo6Z2V0T3du
UHJvcGVydHlTbG8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUnVudGltZU9iamVjdElt
cDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBSdW50aW1lT2JqZWN0
SW1wOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQogewogICAgIGlmICghaW5zdGFuY2Up
IHsKICAgICAgICAgdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ2Fu
dmFzVmFsdWUuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU0NhbnZhc1Zh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBTdHJpbmcgQ1NTQ2FudmFz
VmFsdWU6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NT
Q2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IEZsb2F0UmVjdCYgY2hhbmdlZFJlY3QpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXND
aGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUmVjdCkK
IHsKICAgICBJbnRSZWN0IGltYWdlQ2hhbmdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2hhbmdl
ZFJlY3QpOwogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgSW50U2l6ZT46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBDU1NDYW52
YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQwogICAgICAgICBjdXJyLT5maXJzdC0+aW1hZ2VD
aGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcyksICZpbWFnZUNoYW5nZVJl
Y3QpOwogfQogCi12b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKEhUTUxDYW52YXNF
bGVtZW50KiBlbGVtZW50KQordm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzUmVzaXplZChIVE1M
Q2FudmFzRWxlbWVudCopCiB7CiAgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBJbnRTaXplPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jbGllbnRzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDxS
ZW5kZXJPYmplY3QqLCBJbnRTaXplPjo6Y29uc3RfaXRlcmF0b3IgY3VyciA9IG1fY2xpZW50cy5i
ZWdpbigpOyBjdXJyICE9IGVuZDsgKytjdXJyKQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9jc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlD
U1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJv
cGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBy
b3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdl
dFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdCB7IHJldHVybiAtMTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQo
aW50IC8qcHJvcGVydHlJRCovKSBjb25zdCB7IHJldHVybiAtMTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IC8qcHJvcGVydHlJRCovKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBjb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAz
OTU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
NjYsMjMgKzQ1NjYsMzcgQEAgQ1NTUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUo
KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKyNpZiAhRU5BQkxFKENTU19WQVJJQUJMRVMpCisK
K0NTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlVmFyaWFibGVzUnVsZShNZWRpYUxpc3QqLCBib29s
KQoreworICAgIHJldHVybiAwOworfQorCitib29sIENTU1BhcnNlcjo6YWRkVmFyaWFibGUoY29u
c3QgQ1NTUGFyc2VyU3RyaW5nJiwgQ1NTUGFyc2VyVmFsdWVMaXN0KikKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQ1NTUGFyc2VyOjphZGRWYXJpYWJsZURlY2xhcmF0aW9uQmxvY2so
Y29uc3QgQ1NTUGFyc2VyU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNlbHNl
CisKIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlVmFyaWFibGVzUnVsZShNZWRpYUxpc3QqIG1l
ZGlhTGlzdCwgYm9vbCB2YXJpYWJsZXNLZXl3b3JkKQogewotI2lmIEVOQUJMRShDU1NfVkFSSUFC
TEVTKQogICAgIFJlZlB0cjxDU1NWYXJpYWJsZXNSdWxlPiBydWxlID0gQ1NTVmFyaWFibGVzUnVs
ZTo6Y3JlYXRlKG1fc3R5bGVTaGVldCwgbWVkaWFMaXN0LCB2YXJpYWJsZXNLZXl3b3JkKTsKICAg
ICBydWxlLT5zZXREZWNsYXJhdGlvbihDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbjo6Y3JlYXRlKHJ1
bGUuZ2V0KCksIG1fdmFyaWFibGVOYW1lcywgbV92YXJpYWJsZVZhbHVlcykpOwogICAgIGNsZWFy
VmFyaWFibGVzKCk7ICAgIAogICAgIENTU1J1bGUqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CiAgICAg
bV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiBib29sIENTU1BhcnNl
cjo6YWRkVmFyaWFibGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBuYW1lLCBDU1NQYXJzZXJWYWx1
ZUxpc3QqIHZhbHVlTGlzdCkKIHsKLSNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICBpZiAo
Y2hlY2tGb3JWYXJpYWJsZXModmFsdWVMaXN0KSkgewogICAgICAgICBkZWxldGUgdmFsdWVMaXN0
OwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTkwLDI0ICs0NjA0LDIxIEBAIGJvb2wgQ1NT
UGFyc2VyOjphZGRWYXJpYWJsZShjb25zdCBDU1NQYXIKICAgICBtX3ZhcmlhYmxlTmFtZXMuYXBw
ZW5kKFN0cmluZyhuYW1lKSk7CiAgICAgbV92YXJpYWJsZVZhbHVlcy5hcHBlbmQoQ1NTVmFsdWVM
aXN0OjpjcmVhdGVGcm9tUGFyc2VyVmFsdWVMaXN0KHZhbHVlTGlzdCkpOwogICAgIHJldHVybiB0
cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKIH0KIAotYm9vbCBDU1NQYXJz
ZXI6OmFkZFZhcmlhYmxlRGVjbGFyYXRpb25CbG9jayhjb25zdCBDU1NQYXJzZXJTdHJpbmcmIG5h
bWUpCitib29sIENTU1BhcnNlcjo6YWRkVmFyaWFibGVEZWNsYXJhdGlvbkJsb2NrKGNvbnN0IENT
U1BhcnNlclN0cmluZyYpCiB7CiAvLyBGSVhNRTogRGlzYWJsaW5nIGRlY2xhcmF0aW9ucyBhcyB2
YXJpYWJsZSB2YWx1ZXMgZm9yIG5vdyBzaW5jZSB0aGV5IG5vIGxvbmdlciBoYXZlIGEgY29tbW9u
IGJhc2UgY2xhc3Mgd2l0aCBDU1NWYWx1ZXMuCi0jaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpICYm
IDAKKyNpZiAwCiAgICAgbV92YXJpYWJsZU5hbWVzLmFwcGVuZChTdHJpbmcobmFtZSkpOwogICAg
IG1fdmFyaWFibGVWYWx1ZXMuYXBwZW5kKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVh
dGUoMCwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMpKTsKICAgICBj
bGVhclByb3BlcnRpZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCisgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNlbmRpZgorCiB2b2lkIENTU1Bh
cnNlcjo6Y2xlYXJWYXJpYWJsZXMoKQogewogICAgIG1fdmFyaWFibGVOYW1lcy5jbGVhcigpOwpJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1J1bGUuaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGNz
c1RleHQoKSBjb25zdCA9IDA7CiAgICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJM
cyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgeyB9CisgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgeyB9CiAKIHByb3RlY3RlZDoKICAg
ICBDU1NSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCkKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjA2LDcgKzE2MDYsNyBAQCBQYXNzUmVmUHRyPENTU1J1
bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgp
OwogfQogCi1QYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9T
dHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9TdHlsZSwg
Ym9vbCBhdXRob3JPbmx5KQorUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rv
cjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIGNvbnN0IFN0cmluZyYsIGJv
b2wpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogICAgIHJldHVybiAwOwpAQCAt
MjQyNCw3ICsyNDI0LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6
OgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvciogc2VsLCBSZW5k
ZXJTdHlsZTo6UHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0Citib29sIENTU1N0eWxlU2Vs
ZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxl
Y3Rvciogc2VsLCBSZW5kZXJTdHlsZTo6UHNldWRvSWQmKSBjb25zdAogewogICAgIFJlbmRlclNj
cm9sbGJhciogc2Nyb2xsYmFyID0gUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJl
c29sdmUoKTsKICAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSBSZW5kZXJTY3JvbGxiYXI6OnBhcnRG
b3JTdHlsZVJlc29sdmUoKTsKQEAgLTI1MTIsNyArMjUxMiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YWRkVmFyaWFibGVzKENTU1YKICAgICB9CiB9CiAKLUNTU1ZhbHVlKiBDU1NTdHlsZVNl
bGVjdG9yOjpyZXNvbHZlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShDU1NWYXJpYWJsZURlcGVuZGVu
dFZhbHVlKiB2YWwpCitDU1NWYWx1ZSogQ1NTU3R5bGVTZWxlY3Rvcjo6cmVzb2x2ZVZhcmlhYmxl
RGVwZW5kZW50VmFsdWUoQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSopCiB7CiAgICAgcmV0dXJu
IDA7CiB9CkBAIC01NjAxLDE0ICs1NjAxLDE0IEBAIGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OmZv
bnRTaXplRm9yS2V5d28KICAgICByZXR1cm4gbWF4KGZvbnRTaXplRmFjdG9yc1trZXl3b3JkIC0g
Q1NTVmFsdWVYeFNtYWxsXSptZWRpdW1TaXplLCBtaW5Mb2dpY2FsU2l6ZSk7CiB9CiAKLWZsb2F0
IENTU1N0eWxlU2VsZWN0b3I6OmxhcmdlckZvbnRTaXplKGZsb2F0IHNpemUsIGJvb2wgcXVpcmtz
TW9kZSkgY29uc3QKK2Zsb2F0IENTU1N0eWxlU2VsZWN0b3I6OmxhcmdlckZvbnRTaXplKGZsb2F0
IHNpemUsIGJvb2wpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hlcmUgd2Ug
ZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkgYW5kIHNjYWxl
IHVwIHRvCiAgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4gIAogICAgIHJldHVybiBzaXplICog
MS4yZjsKIH0KIAotZmxvYXQgQ1NTU3R5bGVTZWxlY3Rvcjo6c21hbGxlckZvbnRTaXplKGZsb2F0
IHNpemUsIGJvb2wgcXVpcmtzTW9kZSkgY29uc3QKK2Zsb2F0IENTU1N0eWxlU2VsZWN0b3I6OnNt
YWxsZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBG
aWd1cmUgb3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0byB4
eHgtbGFyZ2UpIGFuZCBzY2FsZSBkb3duIHRvCiAgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4g
CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZXNEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVzRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAz
OTU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIENTU1ZhbHVlTGlzdCogQ1NTVmFyaWFibGVzRGVj
bGFyYXRpb246OmcKICAgICByZXR1cm4gMDsKIH0KIAotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIENTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uOjpnZXRQYXJzZWRWYXJpYWJsZURlY2xhcmF0aW9u
QmxvY2soY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUpCitDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogQ1NTVmFyaWFibGVzRGVjbGFyYXRpb246OmdldFBhcnNlZFZhcmlhYmxlRGVjbGFyYXRp
b25CbG9jayhjb25zdCBTdHJpbmcmKQogewogLy8gRklYTUU6IERpc2FibGluZyBkZWNsYXJhdGlv
bnMgYXMgdmFyaWFibGUgdmFsdWVzIGZvciBub3cgc2luY2UgdGhleSBubyBsb25nZXIgaGF2ZSBh
IGNvbW1vbiBiYXNlIGNsYXNzIHdpdGggQ1NTVmFsdWVzLgogI2lmIDAKSW5kZXg6IFdlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBNZWRpYUZlYXR1cmVOYW1lczsKIAogZW51bSBNZWRpYUZlYXR1cmVQcmVm
aXggeyBNaW5QcmVmaXgsIE1heFByZWZpeCwgTm9QcmVmaXggfTsKIAotdHlwZWRlZiBib29sICgq
RXZhbEZ1bmMpKENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqLCBGcmFtZSosICBNZWRpYUZlYXR1cmVQ
cmVmaXgpOwordHlwZWRlZiBib29sICgqRXZhbEZ1bmMpKENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUq
LCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCk7CiB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIEV2YWxGdW5jPiBGdW5jdGlvbk1hcDsKIHN0YXRpYyBGdW5jdGlvbk1hcCogZ0Z1
bmN0aW9uTWFwOwogCkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBGdW5jdGlvbk1hcCogZ0Z1bmN0
aW9uTWFwOwogICogc2NhbjogVGhlICJzY2FuIiBtZWRpYSBmZWF0dXJlIGRlc2NyaWJlcyB0aGUg
c2Nhbm5pbmcgcHJvY2VzcyBvZgogICogdHYgb3V0cHV0IGRldmljZXMuIEl0J3MgdW5rbm93biBo
b3cgdG8gcmV0cmlldmUgdGhpcyBpbmZvcm1hdGlvbiBmcm9tCiAgKiB0aGUgcGxhdGZvcm0KLSAq
IHJlc29sdXRpb24sIG1pbi1yZXNvbHV0aW9uLCAgbWF4LXJlc29sdXRpb246IGNzcyBwYXJzZXIg
ZG9lc24ndCBzZWVtIHRvCisgKiByZXNvbHV0aW9uLCBtaW4tcmVzb2x1dGlvbiwgbWF4LXJlc29s
dXRpb246IGNzcyBwYXJzZXIgZG9lc24ndCBzZWVtIHRvCiAgKiBzdXBwb3J0IENTU19ESU1FTlNJ
T04KICAqLwogCkBAIC0yMDcsNyArMjA3LDcgQEAgc3RhdGljIGJvb2wgbnVtYmVyVmFsdWUoQ1NT
VmFsdWUqIHZhbHVlLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgY29sb3JN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFt
ZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBjb2xvck1lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiBmcmFtZSwg
TWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAgIGludCBiaXRzUGVyQ29tcG9uZW50ID0gc2Ny
ZWVuRGVwdGhQZXJDb21wb25lbnQoZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7
CiAgICAgZmxvYXQgbnVtYmVyOwpAQCAtMjE3LDcgKzIxNyw3IEBAIHN0YXRpYyBib29sIGNvbG9y
TWVkaWFGZWF0dXJlRXZhbChDU1NWYWwKICAgICByZXR1cm4gYml0c1BlckNvbXBvbmVudCAhPSAw
OwogfQogCi1zdGF0aWMgYm9vbCBtb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSog
dmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQorc3RhdGljIGJvb2wgbW9ub2Nocm9tZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQogewogICAgIGlmICghc2NyZWVuSXNNb25vY2hyb21lKGZyYW1lLT5wYWdlKCktPm1h
aW5GcmFtZSgpLT52aWV3KCkpKSB7CiAgICAgICAgIGlmICh2YWx1ZSkgewpAQCAtMjMwLDcgKzIz
MCw3IEBAIHN0YXRpYyBib29sIG1vbm9jaHJvbWVNZWRpYUZlYXR1cmVFdmFsKEMKICAgICByZXR1
cm4gY29sb3JNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBzdHlsZSwgZnJhbWUsIG9wKTsKIH0KIAot
c3RhdGljIGJvb2wgZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVhdHVyZVBy
ZWZpeCBvcCkKK3N0YXRpYyBib29sIGRldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCBvcCkKIHsKICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgRmxvYXRSZWN0IHNnID0g
c2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKQEAgLTI0Niw3
ICsyNDYsNyBAQCBzdGF0aWMgYm9vbCBkZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVh
dHVyZUV2YWwoQ1NTVmFsdWUgKnZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFt
ZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgZGV2aWNlX3BpeGVsX3JhdGlv
TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSAqdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqIGZy
YW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgaWYgKHZhbHVlKQogICAgICAgICBy
ZXR1cm4gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBjb21wYXJlVmFsdWUoZnJhbWUtPnBh
Z2UoKS0+Y2hyb21lKCktPnNjYWxlRmFjdG9yKCksIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpLT5nZXRGbG9hdFZhbHVlKCksIG9wKTsKQEAgLTI1NCw3ICsyNTQsNyBAQCBz
dGF0aWMgYm9vbCBkZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1CiAgICAgcmV0dXJuIGZyYW1l
LT5wYWdlKCktPmNocm9tZSgpLT5zY2FsZUZhY3RvcigpICE9IDA7CiB9CiAKLXN0YXRpYyBib29s
IGdyaWRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBncmlk
TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBN
ZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgLy8gaWYgb3V0cHV0IGRldmljZSBpcyBiaXRt
YXAsIGdyaWQ6IDAgPT0gdHJ1ZQogICAgIC8vIGFzc3VtZSB3ZSBoYXZlIGJpdG1hcCBkZXZpY2UK
QEAgLTI2NCw3ICsyNjQsNyBAQCBzdGF0aWMgYm9vbCBncmlkTWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBkZXZpY2VfaGVpZ2h0TWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUq
IGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgZGV2aWNlX2hlaWdo
dE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAgIGlmICh2YWx1ZSkgewog
ICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCkpOwpAQCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRpYyBib29sIGRldmljZV9oZWln
aHRNZWRpYUZlYXR1cmVFdmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZGV2
aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wg
ZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgaWYg
KHZhbHVlKSB7CiAgICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBhZ2Uo
KS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CkBAIC0yODYsNyArMjg2LDcgQEAgc3RhdGljIGJvb2wg
ZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgYm9vbCBoZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMg
Ym9vbCBoZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIApAQCAtMjk2LDcgKzI5Niw3IEBAIHN0
YXRpYyBib29sIGhlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmEKICAgICByZXR1cm4gdmlldy0+
bGF5b3V0SGVpZ2h0KCkgIT0gMDsKIH0KIAotc3RhdGljIGJvb2wgd2lkdGhNZWRpYUZlYXR1cmVF
dmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBN
ZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCB3aWR0aE1lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4IG9wKQogewogICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7
CiAgICAgCkBAIC0zMDgsODIgKzMwOCw4MiBAQCBzdGF0aWMgYm9vbCB3aWR0aE1lZGlhRmVhdHVy
ZUV2YWwoQ1NTVmFsCiAKIC8vIHJlc3Qgb2YgdGhlIGZ1bmN0aW9ucyBhcmUgdHJhbXBvbGluZXMg
d2hpY2ggc2V0IHRoZSBwcmVmaXggYWNjb3JkaW5nIHRvIHRoZSBtZWRpYSBmZWF0dXJlIGV4cHJl
c3Npb24gdXNlZAogCi1zdGF0aWMgYm9vbCBtaW5fY29sb3JNZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1
cmVQcmVmaXggLypvcCovKQorc3RhdGljIGJvb2wgbWluX2NvbG9yTWVkaWFGZWF0dXJlRXZhbChD
U1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXgpCiB7CiAgICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwg
c3R5bGUsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfY29sb3JNZWRp
YUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSog
ZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggLypvcCovKQorc3RhdGljIGJvb2wgbWF4X2NvbG9y
TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgcmV0dXJuIGNvbG9yTWVkaWFG
ZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMg
Ym9vbCBtaW5fbW9ub2Nocm9tZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVhdHVyZVByZWZpeCAvKm9wKi8p
CitzdGF0aWMgYm9vbCBtaW5fbW9ub2Nocm9tZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZh
bHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
KQogewogICAgIHJldHVybiBtb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUs
IGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfbW9ub2Nocm9tZU1lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBm
cmFtZSwgIE1lZGlhRmVhdHVyZVByZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9vbCBtYXhfbW9ub2No
cm9tZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIHJldHVybiBtb25vY2hy
b21lTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQog
Ci1zdGF0aWMgYm9vbCBtaW5fZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NT
VmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVh
dHVyZVByZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9vbCBtaW5fZGV2aWNlX2FzcGVjdF9yYXRpb01l
ZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1l
KiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIHJldHVybiBkZXZpY2VfYXNwZWN0
X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNaW5QcmVmaXgpOwog
fQogCi1zdGF0aWMgYm9vbCBtYXhfZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlh
RmVhdHVyZVByZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9vbCBtYXhfZGV2aWNlX2FzcGVjdF9yYXRp
b01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIHJldHVybiBkZXZpY2VfYXNw
ZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNYXhQcmVmaXgp
OwogfQogCi1zdGF0aWMgYm9vbCBtaW5fZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVk
aWFGZWF0dXJlUHJlZml4IC8qb3AqLykKK3N0YXRpYyBib29sIG1pbl9kZXZpY2VfcGl4ZWxfcmF0
aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBG
cmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAgICByZXR1cm4gZGV2aWNlX3Bp
eGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNaW5QcmVmaXgp
OwogfQogCi1zdGF0aWMgYm9vbCBtYXhfZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVk
aWFGZWF0dXJlUHJlZml4IC8qb3AqLykKK3N0YXRpYyBib29sIG1heF9kZXZpY2VfcGl4ZWxfcmF0
aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBG
cmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAgICByZXR1cm4gZGV2aWNlX3Bp
eGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNYXhQcmVmaXgp
OwogfQogCi1zdGF0aWMgYm9vbCBtaW5faGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSog
dmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJl
Zml4IC8qb3AqLykKK3N0YXRpYyBib29sIG1pbl9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCkKIHsKICAgICByZXR1cm4gaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5
bGUsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfaGVpZ2h0TWVkaWFG
ZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZy
YW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4IC8qb3AqLykKK3N0YXRpYyBib29sIG1heF9oZWlnaHRN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFt
ZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAgICByZXR1cm4gaGVpZ2h0TWVkaWFG
ZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMg
Ym9vbCBtaW5fd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggLypvcCovKQorc3Rh
dGljIGJvb2wgbWluX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAgICAg
cmV0dXJuIHdpZHRoTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNaW5QcmVm
aXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQ
cmVmaXggLypvcCovKQorc3RhdGljIGJvb2wgbWF4X3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXgpCiB7CiAgICAgcmV0dXJuIHdpZHRoTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5
bGUsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtaW5fZGV2aWNlX2hlaWdo
dE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZy
YW1lKiBmcmFtZSwgIE1lZGlhRmVhdHVyZVByZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9vbCBtaW5f
ZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIHJldHVy
biBkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNaW5Q
cmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2
YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1l
ZGlhRmVhdHVyZVByZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9vbCBtYXhfZGV2aWNlX2hlaWdodE1l
ZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1l
KiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIHJldHVybiBkZXZpY2VfaGVpZ2h0
TWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1z
dGF0aWMgYm9vbCBtaW5fZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4
IC8qb3AqLykKK3N0YXRpYyBib29sIG1pbl9kZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVh
dHVyZVByZWZpeCkKIHsKICAgICByZXR1cm4gZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbCh2
YWx1ZSwgc3R5bGUsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfZGV2
aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4IC8qb3AqLykKK3N0YXRpYyBi
b29sIG1heF9kZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAg
ICByZXR1cm4gZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1l
LCBNYXhQcmVmaXgpOwogfQpJbmRleDogV2ViQ29yZS9kb20vRWRpdGluZ1RleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VkaXRpbmdUZXh0LmNwcAkocmV2aXNpb24gMzk1ODQpCisr
KyBXZWJDb3JlL2RvbS9FZGl0aW5nVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgRWRpdGluZ1RleHQ6On5FZGl0aW5nVGV4dCgpCiB7CiB9CiAKLWJvb2wgRWRpdGluZ1Rl
eHQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQorYm9vbCBFZGl0aW5nVGV4
dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDcgKzQ5NCw3IEBAIFBhc3NSZWZQdHI8QXR0cmlidXRl
PiBFbGVtZW50OjpjcmVhdGVBdHQKICAgICByZXR1cm4gQXR0cmlidXRlOjpjcmVhdGUobmFtZSwg
dmFsdWUpOwogfQogCi12b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBh
dHRyLCBib29sIHByZXNlcnZlRGVjbHMpCit2b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQo
QXR0cmlidXRlKiBhdHRyLCBib29sKQogewogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lID0gYXR0ci0+bmFtZSgpOwogICAgIGlmIChhdHRyTmFtZSA9PSBhcmlhX2FjdGl2ZWRlc2Nl
bmRhbnRBdHRyKSB7CkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBFbGVtZW50OjpjcmVhdGVBdHRy
aWJ1dGVNYXAoKSBjb25zdAogICAgIG5hbWVkQXR0ck1hcCA9IE5hbWVkQXR0ck1hcDo6Y3JlYXRl
KGNvbnN0X2Nhc3Q8RWxlbWVudCo+KHRoaXMpKTsKIH0KIAotYm9vbCBFbGVtZW50Ojppc1VSTEF0
dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0Citib29sIEVsZW1lbnQ6OmlzVVJMQXR0cmli
dXRlKEF0dHJpYnV0ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtODc1LDcg
Kzg3NSw3IEBAIHZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRyUmVtb3ZhbEV2ZW50KEEKICNlbmRp
ZgogfQogCi12b2lkIEVsZW1lbnQ6OmRpc3BhdGNoQXR0ckFkZGl0aW9uRXZlbnQoQXR0cmlidXRl
ICphdHRyKQordm9pZCBFbGVtZW50OjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2ZW50KEF0dHJpYnV0
ZSopCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogI2lmIDAKQEAg
LTEwODksNyArMTA4OSw3IEBAIHZvaWQgRWxlbWVudDo6Zm9jdXMoYm9vbCByZXN0b3JlUHJldmlv
dXMKICAgICB1cGRhdGVGb2N1c0FwcGVhcmFuY2UocmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsK
IH0KIAotdm9pZCBFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3JlUHJl
dmlvdXNTZWxlY3Rpb24pCit2b2lkIEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29s
IC8qcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKi8pCiB7CiAgICAgaWYgKHRoaXMgPT0gcm9vdEVk
aXRhYmxlRWxlbWVudCgpKSB7IAogICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5m
cmFtZSgpOwpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gbm90
IHBhcnQgb2YgdGhlIERPTQogICAgIHZvaWQgc2V0QXR0cmlidXRlTWFwKFBhc3NSZWZQdHI8TmFt
ZWRBdHRyTWFwPik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29weU5vbkF0dHJpYnV0ZVByb3BlcnRp
ZXMoY29uc3QgRWxlbWVudCogc291cmNlKSB7fQorICAgIHZpcnR1YWwgdm9pZCBjb3B5Tm9uQXR0
cmlidXRlUHJvcGVydGllcyhjb25zdCBFbGVtZW50KiAvKnNvdXJjZSovKSB7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkBAIC0xNTQs
NyArMTU0LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlzcGF0Y2hBdHRyUmVtb3ZhbEV2ZW50KEF0
dHJpYnV0ZSopOwogICAgIHZvaWQgZGlzcGF0Y2hBdHRyQWRkaXRpb25FdmVudChBdHRyaWJ1dGUq
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFdmVu
dCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIC8qc2VuZFRvQW55
RXZlbnQqLykgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRl
KikgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBRdWFsaWZpZWROYW1lJiBpbWFnZVNvdXJjZUF0
dHJpYnV0ZU5hbWUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMzk1ODQpCisr
KyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gSGFuZGxlcnMgdG8gZG8vdW5kbyBh
Y3Rpb25zIG9uIHRoZSB0YXJnZXQgbm9kZSBiZWZvcmUgYW4gZXZlbnQgaXMgZGlzcGF0Y2hlZCB0
byBpdCBhbmQgYWZ0ZXIgdGhlIGV2ZW50CiAgICAgICAgIC8vIGhhcyBiZWVuIGRpc3BhdGNoZWQu
ICBUaGUgZGF0YSBwb2ludGVyIGlzIGhhbmRlZCBiYWNrIGJ5IHRoZSBwcmVEaXNwYXRjaCBhbmQg
cGFzc2VkIHRvIHBvc3REaXNwYXRjaC4KICAgICAgICAgdmlydHVhbCB2b2lkKiBwcmVEaXNwYXRj
aEV2ZW50SGFuZGxlcihFdmVudCopIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCosIHZvaWQqIGRhdGFGcm9tUHJlRGlzcGF0
Y2gpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2
ZW50Kiwgdm9pZCogLypkYXRhRnJvbVByZURpc3BhdGNoKi8pIHsgfQogCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2aXJ0dWFsIH5FdmVudFRhcmdldCgpOwpJbmRleDogV2ViQ29yZS9kb20vTWVz
c2FnZVBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAko
cmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIE1lc3NhZ2VQb3J0OjphZGRFdmVudExpc3Rl
bmVyKGNvbnN0CiAgICAgfSAgICAKIH0KIAotdm9pZCBNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogZXZl
bnRMaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQordm9pZCBNZXNzYWdlUG9ydDo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciog
ZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKICAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwogICAgIGlmIChpdGVyID09
IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJD
b3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM3LDcgKzgzNyw3IEBAIE5vZGUq
IE5vZGU6OnRyYXZlcnNlUHJldmlvdXNTaWJsaW5nUG9zdE8KICAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBOb2RlOjpjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBOb2RlOjpjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBQZXJmb3JtIGVycm9yIGNoZWNr
aW5nIGFzIHJlcXVpcmVkIGJ5IHNwZWMgZm9yIHNldHRpbmcgTm9kZS5wcmVmaXguIFVzZWQgYnkK
ICAgICAvLyBFbGVtZW50OjpzZXRQcmVmaXgoKSBhbmQgQXR0cjo6c2V0UHJlZml4KCkKQEAgLTg2
NywxOSArODY3LDE3IEBAIHZvaWQgTm9kZTo6Y2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3QK
ICAgICB9Ki8KIH0KIAotYm9vbCBOb2RlOjpjYW5SZXBsYWNlQ2hpbGQoTm9kZSogbmV3Q2hpbGQs
IE5vZGUqIG9sZENoaWxkKQorYm9vbCBOb2RlOjpjYW5SZXBsYWNlQ2hpbGQoTm9kZSogbmV3Q2hp
bGQsIE5vZGUqKQogewogICAgIGlmIChuZXdDaGlsZC0+bm9kZVR5cGUoKSAhPSBET0NVTUVOVF9G
UkFHTUVOVF9OT0RFKSB7CiAgICAgICAgIGlmICghY2hpbGRUeXBlQWxsb3dlZChuZXdDaGlsZC0+
bm9kZVR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVsc2Ug
eworICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoTm9kZSAqbiA9IG5ld0NoaWxkLT5maXJzdENo
aWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoIWNoaWxk
VHlwZUFsbG93ZWQobi0+bm9kZVR5cGUoKSkpIAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTIz
MSw3ICsxMjI5LDcgQEAgYm9vbCBOb2RlOjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlIAog
ICAgIHJldHVybiAoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcykgfHwgKHN0
eWxlLT5kaXNwbGF5KCkgIT0gTk9ORSk7CiB9CiAKLVJlbmRlck9iamVjdCAqTm9kZTo6Y3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCitSZW5kZXJP
YmplY3QqIE5vZGU6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKQog
ewogICAgIEFTU0VSVChmYWxzZSk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2RvbS9O
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAzOTU4NCkK
KysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDE0ICs0NTYsMTQg
QEAgcHVibGljOgogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdoZW5ldmVyIHlv
dSBhcmUgY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZCBmcm9tIGEgdHJlZS4gIFRoYXQgdHJlZSBt
YXkgYmUgdGhlIG1haW4KICAgICAvLyBkb2N1bWVudCB0cmVlLCBvciBpdCBjb3VsZCBiZSBhbm90
aGVyIGRpc2Nvbm5lY3RlZCB0cmVlLiAgT3ZlcnJpZGUgdGhlc2UgZnVuY3Rpb25zIHRvIGRvIGFu
eSB3b3JrIHRoYXQgZGVwZW5kcwogICAgIC8vIG9uIGNvbm5lY3RlZG5lc3MgdG8gc29tZSBhbmNl
c3RvciAoZS5nLiwgYW4gYW5jZXN0b3IgPGZvcm0+IGZvciBleGFtcGxlKS4KLSAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApIHsgfQotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJ
bnRvVHJlZShib29sIC8qZGVlcCovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21U
cmVlKGJvb2wgLypkZWVwKi8pIHsgfQogCiAgICAgLyoqCiAgICAgICogTm90aWZpZXMgdGhlIG5v
ZGUgdGhhdCBpdCdzIGxpc3Qgb2YgY2hpbGRyZW4gaGF2ZSBjaGFuZ2VkIChlaXRoZXIgYnkgYWRk
aW5nIG9yIHJlbW92aW5nIGNoaWxkIG5vZGVzKSwgb3IgYSBjaGlsZAogICAgICAqIG5vZGUgdGhh
dCBpcyBvZiB0aGUgdHlwZSBDREFUQV9TRUNUSU9OX05PREUsIFRFWFRfTk9ERSBvciBDT01NRU5U
X05PREUgaGFzIGNoYW5nZWQgaXRzIHZhbHVlLgogICAgICAqLwotICAgIHZpcnR1YWwgdm9pZCBj
aGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3Jl
Q2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0g
MCkge307CisgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIC8qY2hhbmdlZEJ5
UGFyc2VyKi8gPSBmYWxzZSwgTm9kZSogLypiZWZvcmVDaGFuZ2UqLyA9IDAsIE5vZGUqIC8qYWZ0
ZXJDaGFuZ2UqLyA9IDAsIGludCAvKmNoaWxkQ291bnREZWx0YSovID0gMCkgeyB9CiAKICNpZm5k
ZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZl
ciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDM5NTg0
KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDQsNyAr
NzQ0LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaQogfQogCiAv
LyBUaGlzIGFzc3VtZXMgdGhhdCBpdCBzdGFydHMgaW4gZWRpdGFibGUgY29udGVudC4KLVBvc2l0
aW9uIFBvc2l0aW9uOjp0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UpIGNvbnN0CitQb3NpdGlv
biBQb3NpdGlvbjo6dHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5LCBib29sIGNv
bnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlKSBjb25zdAogewogICAgIEFTU0VSVChpc0Vk
aXRhYmxlUG9zaXRpb24oKnRoaXMpKTsKICAgICBpZiAoaXNOdWxsKCkpCkluZGV4OiBXZWJDb3Jl
L2RvbS9RdWFsaWZpZWROYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9RdWFsaWZp
ZWROYW1lLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHR5cGVkZWYgSGFzaFNldDxRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCosIFF1
YWxpZmllZE5hbWVIYXNoPiBRTmFtZVNldDsKIAogc3RydWN0IFFOYW1lQ29tcG9uZW50c1RyYW5z
bGF0b3IgewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFF1YWxpZmllZE5hbWVDb21w
b25lbnRzJiBjb21wb25lbnRzKSB7IAorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFF1
YWxpZmllZE5hbWVDb21wb25lbnRzJiBjb21wb25lbnRzKQorICAgIHsKICAgICAgICAgcmV0dXJu
IGhhc2hDb21wb25lbnRzKGNvbXBvbmVudHMpOyAKICAgICB9Ci0gICAgc3RhdGljIGJvb2wgZXF1
YWwoUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqIG5hbWUsIGNvbnN0IFF1YWxpZmll
ZE5hbWVDb21wb25lbnRzJiBjKSB7CisgICAgc3RhdGljIGJvb2wgZXF1YWwoUXVhbGlmaWVkTmFt
ZTo6UXVhbGlmaWVkTmFtZUltcGwqIG5hbWUsIGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRz
JiBjKQorICAgIHsKICAgICAgICAgcmV0dXJuIGMubV9wcmVmaXggPT0gbmFtZS0+bV9wcmVmaXgu
aW1wbCgpICYmIGMubV9sb2NhbE5hbWUgPT0gbmFtZS0+bV9sb2NhbE5hbWUuaW1wbCgpICYmIGMu
bV9uYW1lc3BhY2UgPT0gbmFtZS0+bV9uYW1lc3BhY2UuaW1wbCgpOwogICAgIH0KLSAgICBzdGF0
aWMgdm9pZCB0cmFuc2xhdGUoUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqJiBsb2Nh
dGlvbiwgY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGNvbXBvbmVudHMsIHVuc2lnbmVk
IGhhc2gpIHsKKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoUXVhbGlmaWVkTmFtZTo6UXVhbGlm
aWVkTmFtZUltcGwqJiBsb2NhdGlvbiwgY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGNv
bXBvbmVudHMsIHVuc2lnbmVkKQorICAgIHsKICAgICAgICAgbG9jYXRpb24gPSBRdWFsaWZpZWRO
YW1lOjpRdWFsaWZpZWROYW1lSW1wbDo6Y3JlYXRlKGNvbXBvbmVudHMubV9wcmVmaXgsIGNvbXBv
bmVudHMubV9sb2NhbE5hbWUsIGNvbXBvbmVudHMubV9uYW1lc3BhY2UpLnJlbGVhc2VSZWYoKTsK
ICAgICB9CiB9OwpJbmRleDogV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdl
YkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgU3R5bGVTaGVldCogU3R5bGVFbGVtZW50OjpzaGVldChFbGVtZW50KgogICAgIHJldHVybiBt
X3NoZWV0LmdldCgpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW50LCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBTdHlsZUVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KERvY3VtZW50KiwgRWxlbWVudCogZWxlbWVudCkKIHsK
ICAgICBwcm9jZXNzKGVsZW1lbnQpOwogfQpJbmRleDogV2ViQ29yZS9kb20vVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vVGV4dC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2Vi
Q29yZS9kb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwxMiArMjMxLDEyIEBAIGJv
b2wgVGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotUmVuZGVyT2JqZWN0ICpUZXh0OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJl
bmEsIFJlbmRlclN0eWxlICpzdHlsZSkKK1JlbmRlck9iamVjdCAqVGV4dDo6Y3JlYXRlUmVuZGVy
ZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAjaWYgRU5BQkxFKFNWRykK
ICAgICBpZiAocGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5l
dyAoYXJlbmEpIFJlbmRlclNWR0lubGluZVRleHQodGhpcywgbV9kYXRhKTsKLSNlbmRpZiAvLyBF
TkFCTEUoU1ZHKQorI2VuZGlmCiAgICAgCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRl
eHQodGhpcywgbV9kYXRhKTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL1Rva2VuaXplci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Rva2VuaXplci5oCShyZXZpc2lvbiAzOTU4NCkKKysrIFdl
YkNvcmUvZG9tL1Rva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBUb2tlbml6ZXIgewogICAgIHB1YmxpYzoK
LSAgICAgICAgVG9rZW5pemVyKGJvb2wgdmlld1NvdXJjZU1vZGUgPSBmYWxzZSkgCi0gICAgICAg
ICAgICA6IG1fcGFyc2VyU3RvcHBlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV9pblZpZXdTb3Vy
Y2VNb2RlKHZpZXdTb3VyY2VNb2RlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQogICAgICAgICB2
aXJ0dWFsIH5Ub2tlbml6ZXIoKSB7IH0KIAogICAgICAgICAvLyBTY3JpcHQgb3V0cHV0IG11c3Qg
YmUgcHJlcGVuZGVkLCB3aGlsZSBuZXcgZGF0YQpAQCAtNTEsNyArNDUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgaW50IGV4ZWN1dGluZ1NjcmlwdCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgd2FudHNSYXdEYXRhKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIHdyaXRlUmF3RGF0YShjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFs
IGJvb2wgd3JpdGVSYXdEYXRhKGNvbnN0IGNoYXIqIC8qZGF0YSovLCBpbnQgLypsZW5ndGgqLykg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICBib29sIGluVmlld1NvdXJjZU1vZGUoKSBjb25z
dCB7IHJldHVybiBtX2luVmlld1NvdXJjZU1vZGU7IH0KICAgICAgICAgdm9pZCBzZXRJblZpZXdT
b3VyY2VNb2RlKGJvb2wgbW9kZSkgeyBtX2luVmlld1NvdXJjZU1vZGUgPSBtb2RlOyB9CkBAIC02
Niw2ICs2MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c0hUTUxUb2tlbml6ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgcHJvdGVjdGVk
OgorICAgICAgICBUb2tlbml6ZXIoYm9vbCB2aWV3U291cmNlTW9kZSA9IGZhbHNlKSAKKyAgICAg
ICAgICAgIDogbV9wYXJzZXJTdG9wcGVkKGZhbHNlKQorICAgICAgICAgICAgLCBtX2luVmlld1Nv
dXJjZU1vZGUodmlld1NvdXJjZU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCiAgICAgICAg
IC8vIFRoZSB0b2tlbml6ZXIgaGFzIGJ1ZmZlcnMsIHNvIHBhcnNpbmcgbWF5IGNvbnRpbnVlIGV2
ZW4gYWZ0ZXIKICAgICAgICAgLy8gaXQgc3RvcHMgcmVjZWl2aW5nIGRhdGEuIFdlIHVzZSBtX3Bh
cnNlclN0b3BwZWQgdG8gc3RvcCB0aGUgdG9rZW5pemVyCiAgICAgICAgIC8vIGV2ZW4gd2hlbiBp
dCBoYXMgYnVmZmVyZWQgZGF0YS4KSW5kZXg6IFdlYkNvcmUvZG9tL1dvcmtlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vV29ya2VyLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJD
b3JlL2RvbS9Xb3JrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9p
ZCBXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbQogICAgIH0gICAgCiB9CiAKLXZv
aWQgV29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit2b2lk
IFdvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKICAgICBFdmVudExpc3Rl
bmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUp
OwogICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCkluZGV4OiBXZWJDb3Jl
L2RvbS9Xb3JrZXJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Xb3JrZXJD
b250ZXh0LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgV29ya2VyQ29udGV4
dDo6YWRkRXZlbnRMaXN0ZW5lcihjb24KICAgICB9ICAgIAogfQogCi12b2lkIFdvcmtlckNvbnRl
eHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2
ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3ZvaWQgV29ya2Vy
Q29udGV4dDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKICAgICBFdmVudExpc3Rl
bmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUp
OwogICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCkluZGV4OiBXZWJDb3Jl
L2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
V29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvZG9t
L1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb250ZXh0LT5yZXBvcnRFeGNlcHRpb24obV9lcnJv
ck1lc3NhZ2UsIG1fbGluZU51bWJlciwgbV9zb3VyY2VVUkwpOwogICAgIH0KIAotcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgaW50IG1fbGluZU51bWJlcjsKICAgICBT
dHJpbmcgbV9zb3VyY2VVUkw7CkBAIC0xNTQsMTIgKzE1MywxMSBAQCBwcml2YXRlOgogICAgIHsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopCiAgICAgewogICAgICAgICBtX21lc3NhZ2luZ1Byb3h5LT53b3JrZXJDb250
ZXh0RGVzdHJveWVkSW50ZXJuYWwoKTsKICAgICB9CiAKLXByaXZhdGU6CiAgICAgV29ya2VyTWVz
c2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7CiB9OwogCkBAIC0xNzgsMTIgKzE3NiwxMSBA
QCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCiAgICAgewogICAgICAgICBtX21lc3NhZ2lu
Z1Byb3h5LT5yZXBvcnRXb3JrZXJUaHJlYWRBY3Rpdml0eUludGVybmFsKG1fY29uZmlybWluZ01l
c3NhZ2UsIG1faGFzUGVuZGluZ0FjdGl2aXR5KTsKICAgICB9CiAKLXByaXZhdGU6CiAgICAgV29y
a2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7CiAgICAgYm9vbCBtX2NvbmZpcm1p
bmdNZXNzYWdlOwogICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHk7CkluZGV4OiBXZWJDb3Jl
L2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDcgKzMyNyw3IEBA
IHN0YXRpYyBpbnQgZ2xvYmFsRGVzY3JpcHRvciA9IDA7CiBzdGF0aWMgRG9jTG9hZGVyKiBnbG9i
YWxEb2NMb2FkZXIgPSAwOwogc3RhdGljIFRocmVhZElkZW50aWZpZXIgbGlieG1sTG9hZGVyVGhy
ZWFkID0gMDsKIAotc3RhdGljIGludCBtYXRjaEZ1bmMoY29uc3QgY2hhciogdXJpKQorc3RhdGlj
IGludCBtYXRjaEZ1bmMoY29uc3QgY2hhciopCiB7CiAgICAgLy8gT25seSBtYXRjaCBsb2FkcyBp
bml0aWF0ZWQgZHVlIHRvIHVzZXMgb2YgbGlieG1sMiBmcm9tIHdpdGhpbiBYTUxUb2tlbml6ZXIg
dG8gYXZvaWQKICAgICAvLyBpbnRlcmZlcmluZyB3aXRoIGNsaWVudCBhcHBsaWNhdGlvbnMgdGhh
dCBhbHNvIHVzZSBsaWJ4bWwyLiAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTczNTMKQEAgLTQzMCw3ICs0MzAsNyBAQCBzdGF0aWMgaW50IHJlYWRGdW5jKHZvaWQqIGNv
bnRleHQsIGNoYXIqCiAgICAgcmV0dXJuIGRhdGEtPnJlYWRPdXRCeXRlcyhidWZmZXIsIGxlbik7
CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVGdW5jKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1
ZmZlciwgaW50IGxlbikKK3N0YXRpYyBpbnQgd3JpdGVGdW5jKHZvaWQqLCBjb25zdCBjaGFyKiwg
aW50KQogewogICAgIC8vIEFsd2F5cyBqdXN0IGRvIDAtYnl0ZSB3cml0ZXMKICAgICByZXR1cm4g
MDsKQEAgLTk4NSw3ICs5ODUsNyBAQCBzdGF0aWMgdm9pZCBzdGFydEVsZW1lbnROc0hhbmRsZXIo
dm9pZCogCiAgICAgZ2V0VG9rZW5pemVyKGNsb3N1cmUpLT5zdGFydEVsZW1lbnROcyhsb2NhbG5h
bWUsIHByZWZpeCwgdXJpLCBuYl9uYW1lc3BhY2VzLCBuYW1lc3BhY2VzLCBuYl9hdHRyaWJ1dGVz
LCBuYl9kZWZhdWx0ZWQsIGxpYnhtbEF0dHJpYnV0ZXMpOwogfQogCi1zdGF0aWMgdm9pZCBlbmRF
bGVtZW50TnNIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIGxvY2FsbmFtZSwg
Y29uc3QgeG1sQ2hhciogcHJlZml4LCBjb25zdCB4bWxDaGFyKiB1cmkpCitzdGF0aWMgdm9pZCBl
bmRFbGVtZW50TnNIYW5kbGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqLCBjb25zdCB4
bWxDaGFyKiwgY29uc3QgeG1sQ2hhciopCiB7CiAgICAgaWYgKGhhY2tBcm91bmRMaWJYTUxFbnRp
dHlCdWcoY2xvc3VyZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjMsNyArMTEyMyw3IEBAIHN0
YXRpYyB2b2lkIGludGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiAKICAgICB4bWxTQVgySW50ZXJu
YWxTdWJzZXQoY2xvc3VyZSwgbmFtZSwgZXh0ZXJuYWxJRCwgc3lzdGVtSUQpOwogfQogCi1zdGF0
aWMgdm9pZCBleHRlcm5hbFN1YnNldEhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hh
ciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJZCwgY29uc3QgeG1sQ2hhciogc3lzdGVt
SWQpCitzdGF0aWMgdm9pZCBleHRlcm5hbFN1YnNldEhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29u
c3QgeG1sQ2hhciosIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSWQsIGNvbnN0IHhtbENoYXIqKQog
ewogICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSWQpOwogICAgIGlmICgoZXh0
SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIikKQEAgLTExMzcs
NyArMTEzNyw3IEBAIHN0YXRpYyB2b2lkIGV4dGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiAKICAg
ICAgICAgZ2V0VG9rZW5pemVyKGNsb3N1cmUpLT5zZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7IC8v
IGNvbnRyb2xzIGlmIHdlIHJlcGxhY2UgZW50aXRpZXMgb3Igbm90LgogfQogCi1zdGF0aWMgdm9p
ZCBpZ25vcmFibGVXaGl0ZXNwYWNlSGFuZGxlcih2b2lkKiBjdHgsIGNvbnN0IHhtbENoYXIqIGNo
LCBpbnQgbGVuKQorc3RhdGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXIodm9pZCos
IGNvbnN0IHhtbENoYXIqLCBpbnQpCiB7CiAgICAgLy8gbm90aGluZyB0byBkbywgYnV0IHdlIG5l
ZWQgdGhpcyB0byB3b3JrIGFyb3VuZCBhIGNyYXNoZXIKICAgICAvLyBodHRwOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyNTUKQEAgLTEzMDMsOSArMTMwMyw5IEBAIHN0
cnVjdCBBdHRyaWJ1dGVQYXJzZVN0YXRlIHsKICAgICBib29sIGdvdEF0dHJpYnV0ZXM7CiB9Owog
Ci1zdGF0aWMgdm9pZCBhdHRyaWJ1dGVzU3RhcnRFbGVtZW50TnNIYW5kbGVyKHZvaWQqIGNsb3N1
cmUsIGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxD
aGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLCBjb25zdCB4bWxDaGFyKiogbmFtZXNwYWNl
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5iX2F0
dHJpYnV0ZXMsIGludCBuYl9kZWZhdWx0ZWQsIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxBdHRyaWJ1
dGVzKQorc3RhdGljIHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxlbWVudE5zSGFuZGxlcih2b2lkKiBj
bG9zdXJlLCBjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYXIqIC8qeG1s
UHJlZml4Ki8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHhtbENoYXIqIC8qeG1sVVJJKi8sIGludCAvKm5iX25hbWVzcGFjZXMqLywgY29uc3QgeG1s
Q2hhcioqIC8qbmFtZXNwYWNlcyovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbmJfYXR0cmlidXRlcywgaW50IC8qbmJfZGVmYXVsdGVkKi8sIGNvbnN0
IHhtbENoYXIqKiBsaWJ4bWxBdHRyaWJ1dGVzKQogewogICAgIGlmIChzdHJjbXAocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oeG1sTG9jYWxOYW1lKSwgImF0dHJzIikgIT0gMCkKICAgICAg
ICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDAsNyArMTQ0MCw3IEBA
IHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhBbGlnbmUKICAgICByZXR1cm4gcGFy
YWdyYXBoUmFuZ2U7CiB9CiAKLXN0YXRpYyBpbnQgZmluZEZpcnN0R3JhbW1hckRldGFpbEluUmFu
Z2UoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50IGJhZEdy
YW1tYXJQaHJhc2VMb2NhdGlvbiwgaW50IGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgsIFJhbmdlICpz
ZWFyY2hSYW5nZSwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29sIG1hcmtBbGwp
CitzdGF0aWMgaW50IGZpbmRGaXJzdEdyYW1tYXJEZXRhaWxJblJhbmdlKGNvbnN0IFZlY3RvcjxH
cmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRp
b24sIGludCAvKmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgqLywgUmFuZ2UgKnNlYXJjaFJhbmdlLCBp
bnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGJvb2wgbWFya0FsbCkKIHsKICAgICAvLyBG
b3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBlYXJsaWVzdCBkZXRhaWwgcmFuZ2UgdGhh
dCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYgYW55KS4KICAgICAvLyBPcHRpb25hbGx5
IGFkZCBhIERvY3VtZW50TWFya2VyIGZvciBlYWNoIGRldGFpbCBpbiB0aGUgcmFuZ2UuCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVCYWNrd2FyZEJ5RGVjb20KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZUZvcndhcmQoRnJhbWUqIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQorc3Rh
dGljIGJvb2wgZXhlY3V0ZURlbGV0ZUZvcndhcmQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgZnJhbWUtPmVkaXRvcigpLT5k
ZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXI6OkZPUldBUkQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5LCBmYWxzZSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC01NDAsNyAr
NTQwLDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUp1c3RpZnlSaWdodChGcmFtZSogZgogICAgIHJl
dHVybiBleGVjdXRlQXBwbHlQYXJhZ3JhcGhTdHlsZShmcmFtZSwgc291cmNlLCBFZGl0QWN0aW9u
QWxpZ25SaWdodCwgQ1NTUHJvcGVydHlUZXh0QWxpZ24sICJyaWdodCIpOwogfQogCi1zdGF0aWMg
Ym9vbCBleGVjdXRlTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQor
c3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0KEZy
YW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQog
ewogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlRW1iZWQpOwpAQCAtNTQ5LDcgKzU0OSw3IEBA
IHN0YXRpYyBib29sIGV4ZWN1dGVNYWtlVGV4dFdyaXRpbmdEaXJlY3QKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5hdHVy
YWwoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25z
dCBTdHJpbmcmKQorc3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5h
dHVyYWwoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQ1NTVmFsdWVOb3JtYWwpOwpAQCAtNTU3LDcg
KzU1Nyw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVNYWtlVGV4dFdyaXRpbmdEaXJlY3QKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVj
dGlvblJpZ2h0VG9MZWZ0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
IHNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVNYWtlVGV4dFdyaXRp
bmdEaXJlY3Rpb25SaWdodFRvTGVmdChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwog
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZUVt
YmVkKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShy
ZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUxLDcgKzEzNTEsNyBAQCBQYXNzUmVmUHRyPFRleHRN
ZXRyaWNzPiBDYW52YXNSZW5kZXJpbmdDCiAgICAgcmV0dXJuIG1ldHJpY3M7CiB9CiAKLXZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYg
dGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBmbG9hdCBtYXhXaWR0aCwgYm9vbCB1
c2VNYXhXaWR0aCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEludGVy
bmFsKGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBmbG9h
dCAvKm1heFdpZHRoKi8sIGJvb2wgLyp1c2VNYXhXaWR0aCovKQogewogICAgIEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEFwcGxldEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDEyICs5OSwxMiBAQCB2b2lk
IEhUTUxBcHBsZXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtCiAgICAgSFRNTFBsdWdJbkVsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIH0KIAotYm9vbCBIVE1MQXBwbGV0RWxlbWVudDo6
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCitib29sIEhUTUxBcHBsZXRFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikKIHsKICAgICByZXR1cm4gIWdldEF0
dHJpYnV0ZShjb2RlQXR0cikuaXNOdWxsKCk7CiB9CiAKLVJlbmRlck9iamVjdCogSFRNTEFwcGxl
dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUq
IHN0eWxlKQorUmVuZGVyT2JqZWN0KiBIVE1MQXBwbGV0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxC
dXR0b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgSFRNTEJ1dHRvbkVsZW1l
bnQ6On5IVE1MQnV0dG9uRWxlbWVudCgpCiB7CiB9CiAKLVJlbmRlck9iamVjdCogSFRNTEJ1dHRv
bkVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUq
IHN0eWxlKQorUmVuZGVyT2JqZWN0KiBIVE1MQnV0dG9uRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJl
bmEpIFJlbmRlckJ1dHRvbih0aGlzKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5j
cHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKAogICAgIHJldHVybiB0cnVlOwogfQogCi1SZW5kZXJPYmplY3Qq
IEhUTUxFbWJlZEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVu
ZGVyU3R5bGUqIHN0eWxlKQorUmVuZGVyT2JqZWN0KiBIVE1MRW1iZWRFbGVtZW50OjpjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIHsKICAgICBpZiAoaXNJ
bWFnZVR5cGUoKSkKICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckltYWdlKHRoaXMp
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMzk1ODQp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRmllbGRTZXRFbGVtZW50
OgogICAgIHJldHVybiBmaWVsZHNldDsKIH0KIAotUmVuZGVyT2JqZWN0KiBIVE1MRmllbGRTZXRF
bGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBz
dHlsZSkKK1JlbmRlck9iamVjdCogSFRNTEZpZWxkU2V0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJl
bmEpIFJlbmRlckZpZWxkc2V0KHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5oCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGVkU3VibWl0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZhdGVkU3VibWl0KGJv
b2wgZmxhZykgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2YXRlZFN1Ym1pdChib29sKSB7
IH0KIAogICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVFbGVtZW50LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEZyYW1lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBIVE1M
RnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KGNvbnN0CiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoZnJhbWVUYWcpKTsKIH0KIAotYm9vbCBIVE1MRnJhbWVFbGVtZW50OjpyZW5kZXJlcklzTmVl
ZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKK2Jvb2wgSFRNTEZyYW1lRWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChSZW5kZXJTdHlsZSopCiB7CiAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHksIGZyYW1l
cyByZW5kZXIgZXZlbiB3aGVuIGRpc3BsYXk6IG5vbmUgaXMgc2V0LgogICAgIHJldHVybiBpc1VS
TEFsbG93ZWQobV9VUkwpOwogfQogCi1SZW5kZXJPYmplY3QqIEhUTUxGcmFtZUVsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxlKQorUmVu
ZGVyT2JqZWN0KiBIVE1MRnJhbWVFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSog
YXJlbmEsIFJlbmRlclN0eWxlKikKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyRnJh
bWUodGhpcyk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIEhUTUxTZWxlY3RFbGVtZW50KiBIVE1MT3B0
R3JvdXBFbGVtZW50OjoKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQq
PihzZWxlY3QpOwogfQogCi12b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlv
bihib29sIHNlbmRUb0FueUVsZW1lbnQpCit2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmFjY2Vz
c0tleUFjdGlvbihib29sKQogewogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25l
clNlbGVjdEVsZW1lbnQoKTsKICAgICAvLyBzZW5kIHRvIHRoZSBwYXJlbnQgdG8gYnJpbmcgZm9j
dXMgdG8gdGhlIGxpc3QgYm94CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNl
dFRleHQoY29uc3QgU3QKICAgICBhcHBlbmRDaGlsZChuZXcgVGV4dChkb2N1bWVudCgpLCB0ZXh0
KSwgZWMpOwogfQogCi12b2lkIEhUTUxPcHRpb25FbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9v
bCBzZW5kVG9BbnlFbGVtZW50KQordm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6YWNjZXNzS2V5QWN0
aW9uKGJvb2wpCiB7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVyU2VsZWN0
RWxlbWVudCgpOwogICAgIGlmIChzZWxlY3QpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCShyZXZpc2lv
biAzOTU4NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjY3LDcgKzY2Nyw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hl
Y2sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSFRNTFBhcnNlcjo6aGVhZENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBIVE1MUGFyc2Vy
OjpoZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQogewog
ICAgIGlmICghaGVhZCB8fCBjdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAg
ICAgIGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50KGhlYWRUYWcsIGRvY3VtZW50KTsKQEAgLTY3
Nyw3ICs2NzcsNyBAQCBib29sIEhUTUxQYXJzZXI6OmhlYWRDcmVhdGVFcnJvckNoZWNrKFRvCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEhUTUxQYXJzZXI6OmJvZHlDcmVhdGVFcnJvckNo
ZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wgSFRNTFBhcnNlcjo6Ym9k
eUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIC8vIGJvZHkg
bm8gbG9uZ2VyIGFsbG93ZWQgaWYgd2UgaGF2ZSBhIGZyYW1lc2V0CiAgICAgaWYgKGhhdmVGcmFt
ZVNldCkKQEAgLTY4Nyw3ICs2ODcsNyBAQCBib29sIEhUTUxQYXJzZXI6OmJvZHlDcmVhdGVFcnJv
ckNoZWNrKFRvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSFRNTFBhcnNlcjo6ZnJhbWVz
ZXRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wg
SFRNTFBhcnNlcjo6ZnJhbWVzZXRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+
JikKIHsKICAgICBwb3BCbG9jayhoZWFkVGFnKTsKICAgICBpZiAoaW5Cb2R5ICYmICFoYXZlRnJh
bWVTZXQgJiYgIWhhdmVDb250ZW50KSB7CkBAIC03MzEsNyArNzMxLDcgQEAgYm9vbCBIVE1MUGFy
c2VyOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjawogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBIVE1MUGFyc2VyOjpzZWxlY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9k
ZT4mIHJlc3VsdCkKK2Jvb2wgSFRNTFBhcnNlcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tl
biosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03NTIsNyArNzUy
LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpkdENyZWF0ZUVycm9yQ2hlY2soVG9rZQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBIVE1MUGFyc2VyOjpuZXN0ZWRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKHQt
PnRhZ05hbWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNzY1LDE5ICs3NjUsMTkgQEAgYm9vbCBI
VE1MUGFyc2VyOjpuZXN0ZWRQQ2xvc2VyQ3JlYXRlRXJybwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIEhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwg
UmVmUHRyPE5vZGU+JiByZXN1bHQpCitib29sIEhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JikKIHsKICAgICByZXR1cm4gYWxsb3dO
ZXN0ZWRSZWR1bmRhbnRUYWcodC0+dGFnTmFtZSk7CiB9CiAKLWJvb2wgSFRNTFBhcnNlcjo6dGFi
bGVDZWxsQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiti
b29sIEhUTUxQYXJzZXI6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8
Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKHRkVGFnKTsKICAgICBwb3BCbG9jayh0aFRhZyk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSFRNTFBhcnNlcjo6dGFibGVTZWN0aW9uQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCitib29sIEhUTUxQYXJz
ZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQog
ewogICAgIHBvcEJsb2NrKHRoZWFkVGFnKTsKICAgICBwb3BCbG9jayh0Ym9keVRhZyk7CkBAIC03
ODUsMTkgKzc4NSwxOSBAQCBib29sIEhUTUxQYXJzZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9y
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSFRNTFBhcnNlcjo6bm9lbWJlZENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBIVE1MUGFyc2Vy
Ojpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAg
c2V0U2tpcE1vZGUobm9lbWJlZFRhZyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSFRN
TFBhcnNlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4m
IHJlc3VsdCkKK2Jvb2wgSFRNTFBhcnNlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKFRva2Vu
KiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBzZXRTa2lwTW9kZShub2ZyYW1lc1RhZyk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSFRNTFBhcnNlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNo
ZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wgSFRNTFBhcnNlcjo6bm9z
Y3JpcHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBpZiAo
IW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9j
dW1lbnQtPnNldHRpbmdzKCk7CkBAIC04MDcsMTQgKzgwNywxNCBAQCBib29sIEhUTUxQYXJzZXI6
Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSFRN
TFBhcnNlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYg
cmVzdWx0KQorYm9vbCBIVE1MUGFyc2VyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgaWYgKGhhc1BFbGVtZW50SW5TY29wZSgpKQogICAgICAg
ICBwb3BCbG9jayhwVGFnKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBIVE1MUGFyc2Vy
OjpwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiBy
ZXN1bHQpCitib29sIEhUTUxQYXJzZXI6OnBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBpZiAoZG9jdW1lbnQtPmluQ29tcGF0TW9kZSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgyMyw3ICs4MjMsNyBAQCBib29sIEhUTUxQYXJz
ZXI6OnBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
SFRNTFBhcnNlcjo6bWFwQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiBy
ZXN1bHQpCitib29sIEhUTUxQYXJzZXI6Om1hcENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mIHJlc3VsdCkKIHsKICAgICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gbmV3IEhUTUxN
YXBFbGVtZW50KG1hcFRhZywgZG9jdW1lbnQpOwogICAgIHJlc3VsdCA9IG1fY3VycmVudE1hcEVs
ZW1lbnQ7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM5NTg0
KQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEzLDcgKzQxMyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdEFsbCgpCiAg
ICAgbGlzdEJveE9uQ2hhbmdlKCk7CiB9CiAKLVJlbmRlck9iamVjdCAqSFRNTFNlbGVjdEVsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxl
KQorUmVuZGVyT2JqZWN0KiBIVE1MU2VsZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVy
QXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAgICAgaWYgKHVzZXNNZW51TGlzdCgpKQog
ICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyTWVudUxpc3QodGhpcyk7CkluZGV4OiBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzk1ODQp
CisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODk1LDcgKzg5NSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGxvY2FsaXplZFN0cmlu
Z3MoSlNDb24KICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY3R4LCBqc1N0cmluZ1JlZih1
cmwpLmdldCgpKTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgcGxhdGZvcm0oSlNDb250ZXh0UmVm
IGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgLyphcmd1bWVudENvdW50Ki8sIGNvbnN0IEpTVmFsdWVSZWZbXSAvKmFyZ3VtZW50c1td
Ki8sIEpTVmFsdWVSZWYqIC8qZXhjZXB0aW9uKi8pCitzdGF0aWMgSlNWYWx1ZVJlZiBwbGF0Zm9y
bShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiAvKmZ1bmN0aW9uKi8sIEpTT2JqZWN0UmVm
IC8qdGhpc09iamVjdCovLCBzaXplX3QgLyphcmd1bWVudENvdW50Ki8sIGNvbnN0IEpTVmFsdWVS
ZWZbXSAvKmFyZ3VtZW50c1tdKi8sIEpTVmFsdWVSZWYqIC8qZXhjZXB0aW9uKi8pCiB7CiAjaWYg
UExBVEZPUk0oTUFDKQogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCkBAIC05NjAsNyArOTYwLDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaAogICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiB3cmFwQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgLypmdW5jdGlvbiovLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorc3RhdGljIEpTVmFsdWVSZWYgd3Jh
cENhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIC8qZXhjZXB0aW9uKi8pCiB7CiAgICAgSW5zcGVj
dG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW5zcGVjdG9yQ29u
dHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgaWYgKCFjb250
cm9sbGVyKQpAQCAtMTQ3MSw3ICsxNDcxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp0
b2dnbGVTZWFyY2hGbwogICAgICAgICBoaWRlSGlnaGxpZ2h0KCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKQordm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IHVuc2lnbmVkKQogewogICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3NlYXJjaGluZ0Zvck5vZGUp
CiAgICAgICAgIHJldHVybjsKQEAgLTI0MzEsNyArMjQzMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aWRlbnRpZmllckZvckkKICAgICAgICAgYWRkQW5kVXBkYXRlU2NyaXB0UmVzb3Vy
Y2UocmVzb3VyY2UuZ2V0KCkpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxT
ZW5kUmVxdWVzdChEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVk
aXJlY3RSZXNwb25zZSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRSZXF1ZXN0
KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7
CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0OTQsNyArMjQ5NCw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZUNvbnQKICAgICAgICAgdXBk
YXRlU2NyaXB0UmVzb3VyY2UocmVzb3VyY2UsIHJlc291cmNlLT5sZW5ndGgpOwogfQogCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNTE2LDcg
KzI1MTYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRpCiAgICAg
fQogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZhaWxMb2FkaW5nKERvY3VtZW50
TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VF
cnJvciYgLyplcnJvciovKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRGYWlsTG9hZGlu
ZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgLyplcnJvciovKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yODg5LDkgKzI4ODksMTAgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYW5k
bGVFeGNlcHRpbwogfQogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisKIC8vIEph
dmFTY3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZFBhcnNlU291cmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShFeGVjU3RhdGUq
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiB7CiAgICAgSlNWYWx1ZVJlZiBzb3VyY2VJRFZh
bHVlID0gSlNWYWx1ZU1ha2VOdW1iZXIobV9zY3JpcHRDb250ZXh0LCBzb3VyY2UucHJvdmlkZXIo
KS0+YXNJRCgpKTsKICAgICBKU1ZhbHVlUmVmIHNvdXJjZVVSTFZhbHVlID0gSlNWYWx1ZU1ha2VT
dHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihzb3VyY2UucHJvdmlkZXIoKS0+dXJs
KCkpLmdldCgpKTsKQEAgLTI5MDMsNyArMjkwNCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkUGFyc2VTb3VyY2UKICAgICBjYWxsRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3Nj
cmlwdE9iamVjdCwgInBhcnNlZFNjcmlwdFNvdXJjZSIsIDQsIGFyZ3VtZW50cywgZXhjZXB0aW9u
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmYWlsZWRUb1BhcnNlU291cmNlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBj
b25zdCBVU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZh
aWxlZFRvUGFyc2VTb3VyY2UoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBp
bnQgZXJyb3JMaW5lLCBjb25zdCBVU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgSlNWYWx1
ZVJlZiBzb3VyY2VVUkxWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwg
anNTdHJpbmdSZWYoc291cmNlLnByb3ZpZGVyKCktPnVybCgpKS5nZXQoKSk7CiAgICAgSlNWYWx1
ZVJlZiBzb3VyY2VWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwganNT
dHJpbmdSZWYoc291cmNlLmRhdGEoKSkuZ2V0KCkpOwpAQCAtMjkyMSw2ICsyOTIyLDcgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZSgpCiAgICAgSlNWYWx1ZVJlZiBleGNlcHRp
b24gPSAwOwogICAgIGNhbGxGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0
LCAicGF1c2VkU2NyaXB0IiwgMCwgMCwgZXhjZXB0aW9uKTsKIH0KKwogI2VuZGlmCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9m
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmls
ZS5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFBy
b2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyBQcm9maWxl
TWFwJiBwcm9maWxlQ2FjaGUoKQogCiBzdGF0aWMgSlNDbGFzc1JlZiBQcm9maWxlQ2xhc3MoKTsK
IAotc3RhdGljIEpTVmFsdWVSZWYgZ2V0VGl0bGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFRpdGxlQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVS
ZWYqKQogewogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmplY3Qs
IFByb2ZpbGVDbGFzcygpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0
eCk7CkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFRpdGxlQ2FsbGJhY2so
SlNDb24KICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY3R4LCBPcGFxdWVKU1N0cmluZzo6
Y3JlYXRlKHByb2ZpbGUtPnRpdGxlKCkpLmdldCgpKTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYg
Z2V0SGVhZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorc3RhdGlj
IEpTVmFsdWVSZWYgZ2V0SGVhZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKICAgICBpZiAoIUpTVmFs
dWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBQcm9maWxlQ2xhc3MoKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwpAQCAtNzIsNyArNzIsNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBnZXRIZWFkQ2FsbGJhY2soSlNDb250CiAgICAgcmV0dXJuIHRvUmVm
KHRvSlModG9KUyhjdHgpLCBwcm9maWxlLT5oZWFkKCkpKTsKIH0KIAotc3RhdGljIEpTVmFsdWVS
ZWYgZ2V0SGVhdnlQcm9maWxlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRIZWF2eVByb2ZpbGVDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiop
CiB7CiAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGN0eCwgdGhpc09iamVjdCwgUHJv
ZmlsZUNsYXNzKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsK
QEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0SGVhdnlQcm9maWxlQ2FsbGJh
YwogICAgIHJldHVybiB0b1JlZih0b0pTKHRvSlMoY3R4KSwgcHJvZmlsZS0+aGVhdnlQcm9maWxl
KCkpKTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgZ2V0VHJlZVByb2ZpbGVDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFRyZWVQ
cm9maWxlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
SlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQogewogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZD
bGFzcyhjdHgsIHRoaXNPYmplY3QsIFByb2ZpbGVDbGFzcygpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyBKU1ZhbHVl
UmVmIGdldFRyZWVQcm9maWxlQ2FsbGJhY2sKICAgICByZXR1cm4gdG9SZWYodG9KUyh0b0pTKGN0
eCksIHByb2ZpbGUtPnRyZWVQcm9maWxlKCkpKTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgZ2V0
VW5pcXVlSWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3N0YXRp
YyBKU1ZhbHVlUmVmIGdldFVuaXF1ZUlkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQogewogICAgIGlmICgh
SlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmplY3QsIFByb2ZpbGVDbGFzcygpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CkBAIC0xMzUsNyArMTM1
LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZXhjbHVkZShKU0NvbnRleHRSZWYgYwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiByZXN0
b3JlQWxsKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIC8qZXhjZXB0aW9uKi8pCitzdGF0aWMgSlNWYWx1ZVJl
ZiByZXN0b3JlQWxsKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IC8qYXJndW1lbnRDb3VudCovLCBjb25zdCBK
U1ZhbHVlUmVmW10gLyphcmd1bWVudHMqLywgSlNWYWx1ZVJlZiogLypleGNlcHRpb24qLykKIHsK
ICAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBQcm9maWxl
Q2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwpJbmRl
eDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZU5vZGUuY3BwCShyZXZpc2lv
biAzOTU4NCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIFByb2ZpbGVOb2RlTWFwJiBw
cm9maWxlTm9kZUNhY2hlKAogICAgIHJldHVybiBzdGF0aWNQcm9maWxlTm9kZXM7CiB9CiAKLXN0
YXRpYyBKU1ZhbHVlUmVmIGdldEZ1bmN0aW9uTmFtZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldEZ1bmN0aW9uTmFtZShKU0NvbnRleHRSZWYg
Y3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopCiB7
CiAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGN0eCwgdGhpc09iamVjdCwgUHJvZmls
ZU5vZGVDbGFzcygpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7
CkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldEZ1bmN0aW9uTmFtZShKU0Nv
bnQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY3R4LCBmdW5jdGlvbk5hbWVTdHJpbmcu
Z2V0KCkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBnZXRVUkwoSlNDb250ZXh0UmVmIGN0eCwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRVUkwoSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQogewog
ICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmplY3QsIFByb2ZpbGVO
b2RlQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwpA
QCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRVUkwoSlNDb250ZXh0UmVmIGN0
CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGN0eCwgdXJsU3RyaW5nLmdldCgpKTsKIH0K
IAotc3RhdGljIEpTVmFsdWVSZWYgZ2V0TGluZU51bWJlcihKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldExpbmVOdW1iZXIoSlNDb250ZXh0UmVm
IGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQog
ewogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmplY3QsIFByb2Zp
bGVOb2RlQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OwpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRMaW5lTnVtYmVyKEpTQ29u
dGV4CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGN0eCwgcHJvZmlsZU5vZGUtPmxpbmVO
dW1iZXIoKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGdldFRvdGFsVGltZShKU0NvbnRleHRS
ZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFRvdGFsVGltZShK
U0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNW
YWx1ZVJlZiopCiB7CiAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAKQEAgLTkxLDcgKzkx
LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0VG90YWxUaW1lKEpTQ29udGV4dAogICAgIHJldHVy
biBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHByb2ZpbGVOb2RlLT50b3RhbFRpbWUoKSk7CiB9CiAK
LXN0YXRpYyBKU1ZhbHVlUmVmIGdldFNlbGZUaW1lKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQorc3RhdGljIEpTVmFsdWVSZWYgZ2V0U2VsZlRpbWUoSlNDb250ZXh0UmVmIGN0eCwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQogewogICAg
IEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwogCkBAIC0xMDIsNyArMTAyLDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgZ2V0U2VsZlRpbWUoSlNDb250ZXh0UgogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51
bWJlcihjdHgsIHByb2ZpbGVOb2RlLT5zZWxmVGltZSgpKTsKIH0KIAotc3RhdGljIEpTVmFsdWVS
ZWYgZ2V0VG90YWxQZXJjZW50KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorc3Rh
dGljIEpTVmFsdWVSZWYgZ2V0VG90YWxQZXJjZW50KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKICAgICBKU0M6OkpT
TG9jayBsb2NrKGZhbHNlKTsKIApAQCAtMTEzLDcgKzExMyw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IGdldFRvdGFsUGVyY2VudChKU0NvbnQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY3R4
LCBwcm9maWxlTm9kZS0+dG90YWxQZXJjZW50KCkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBn
ZXRTZWxmUGVyY2VudChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBK
U1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3N0YXRpYyBK
U1ZhbHVlUmVmIGdldFNlbGZQZXJjZW50KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKICAgICBKU0M6OkpTTG9jayBs
b2NrKGZhbHNlKTsKIApAQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFNl
bGZQZXJjZW50KEpTQ29udGUKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCBwcm9m
aWxlTm9kZS0+c2VsZlBlcmNlbnQoKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGdldE51bWJl
ck9mQ2FsbHMoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJp
bmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNWYWx1
ZVJlZiBnZXROdW1iZXJPZkNhbGxzKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKICAgICBKU0M6OkpTTG9jayBsb2Nr
KGZhbHNlKTsKIApAQCAtMTM1LDcgKzEzNSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldE51bWJl
ck9mQ2FsbHMoSlNDb24KICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCBwcm9maWxl
Tm9kZS0+bnVtYmVyT2ZDYWxscygpKTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgZ2V0Q2hpbGRy
ZW4oSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNWYWx1ZVJlZiBn
ZXRDaGlsZHJlbihKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0
cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEpTQzo6SlNMb2NrIGxvY2so
ZmFsc2UpOwogCkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0Q2hpbGRy
ZW4oSlNDb250ZXh0UgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVm
IGdldFZpc2libGUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNT
dHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNW
YWx1ZVJlZiBnZXRWaXNpYmxlKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKICAgICBKU0M6OkpTTG9jayBsb2NrKGZh
bHNlKTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcg
QEAgQ2FjaGVkRm9udDo6fkNhY2hlZEZvbnQoKQogI2VuZGlmCiB9CiAKLXZvaWQgQ2FjaGVkRm9u
dDo6bG9hZChEb2NMb2FkZXIqIGRvY0xvYWRlcikKK3ZvaWQgQ2FjaGVkRm9udDo6bG9hZChEb2NM
b2FkZXIqKQogewogICAgIC8vIERvbid0IGxvYWQgdGhlIGZpbGUgeWV0LiAgV2FpdCBmb3IgYW4g
YWNjZXNzIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBsb2FkLgogICAgIG1fbG9hZGluZyA9IHRydWU7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2xv
YWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTYgKzkyLDE2IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNpemFibGUoYm9vbCkgeyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVu
c2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCwg
Y29uc3QgU3RyaW5nJikgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuQmVm
b3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqIGZyYW1l
KSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHJ1bkJlZm9yZVVubG9hZENvbmZp
cm1QYW5lbChjb25zdCBTdHJpbmcmLCBGcmFtZSopIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBjbG9zZVdpbmRvd1Nvb24oKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBydW5K
YXZhU2NyaXB0QWxlcnQoRnJhbWUqLCBjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIGJv
b2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqLCBjb25zdCBTdHJpbmcmKSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiBy
ZXN1bHQpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRQ
cm9tcHQoRnJhbWUqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0
KCkgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNiYXJUZXh0
KGNvbnN0IFN0cmluZyYpIHsgfQpAQCAtMTEwLDE2ICsxMTAsMTYgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVj
dCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVjdCYp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCYWNraW5nU3RvcmUoaW50IGR4LCBpbnQgZHks
IGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShpbnQsIGludCwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IEludFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmFj
a2luZ1N0b3JlKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVwYWludChjb25zdCBJbnRSZWN0
JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSwgYm9vbCByZXBh
aW50Q29udGVudE9ubHkgPSBmYWxzZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbChjb25z
dCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoY29uc3Qg
SW50UmVjdCYsIGJvb2wsIGJvb2wsIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwo
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikgeyB9CiAgICAg
dmlydHVhbCBJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcCkgY29uc3Qg
eyByZXR1cm4gcDsgfQogICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJ
bnRSZWN0JiByKSBjb25zdCB7IHJldHVybiByOyB9CiAgICAgdmlydHVhbCBQbGF0Zm9ybVdpZGdl
dCBwbGF0Zm9ybVdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQg
bW9kaWZpZXJGbGFncykgeyB9CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCkgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgc2V0VG9vbFRpcChjb25zdCBTdHJpbmcmKSB7IH0KIApAQCAtMTU5LDI2ICsxNTksMjYgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkKFJlc291cmNlSGFuZGxlKiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFzc2lnbklkZW50aWZpZXJUb0lu
aXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFNlbmRSZXF1
ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2FuY2Vs
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGludCBsZW5ndGhSZWNlaXZlZCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
RmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFJlc291cmNlRXJyb3ImKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2Fk
UmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50IGxlbmd0aCkgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3Qo
dW5zaWduZWQgbG9uZywgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSB7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcs
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1l
bnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVz
cG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5n
dGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBpbnQpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1l
bnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiwgaW50KSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
SGFuZGxlT25sb2FkRXZlbnRzKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmLCBkb3VibGUg
aW50ZXJ2YWwsIGRvdWJsZSBmaXJlRGF0ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
V2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJMJiwgZG91YmxlLCBkb3VibGUpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZENvbW1pdExvYWQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNvdXJjZUVycm9y
JikgeyB9CkBAIC0xOTAsOCArMTkwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgRnJhbWUqIGRp
c3BhdGNoQ3JlYXRlUGFnZSgpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hTaG93KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JN
SU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdh
dGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRl
PiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERlY2lkZVBvbGljeUZvck1JTUVUeXBlKEZyYW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25z
dCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxG
b3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0
IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQb2xpY3lDaGVjaygpIHsgfQog
CkBAIC0yMzEsOSArMjMxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGYWxs
QmFjayhjb25zdCBSZXNvdXJjZUVycm9yJikgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGNhblNob3dNSU1FVHlwZShjb25zdCBT
dHJpbmcmIE1JTUVUeXBlKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9v
bCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVt
ZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBnZW5lcmF0ZWRN
SU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3QgeyByZXR1
cm4gIiI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHJlcHJlc2VudGF0aW9u
RXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3Qg
U3RyaW5nJikgY29uc3QgeyByZXR1cm4gIiI7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxv
YWRDb21wbGV0ZWQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVZpZXdTdGF0ZSgpIHsg
fQpAQCAtMjQ0LDcgKzI0NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZv
ckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpIHsgfQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPERv
Y3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkgeyByZXR1cm4g
RG9jdW1lbnRMb2FkZXI6OmNyZWF0ZShyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgS1VSTCYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJikg
eyB9CiAKICAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VSTCYpIHsgcmV0dXJu
ICIiOyB9CiAKQEAgLTI1NywyMiArMjU3LDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSopIHsgfQogICAgIHZpcnR1YWwgYm9vbCBj
YW5DYWNoZVBhZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPEZyYW1lPiBjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3Jv
bGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkgeyByZXR1cm4gMDsgfQot
ICAgIHZpcnR1YWwgV2lkZ2V0KiBjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsRWxlbWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEhUTUxG
cmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYsIGJvb2wsIGludCwgaW50KSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwg
RWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1
YWwgV2lkZ2V0KiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50
KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKSB7IHJldHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVj
dENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgeyBy
ZXR1cm4gT2JqZWN0Q29udGVudFR5cGUoKTsgfQorICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5
cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpIHsgcmV0dXJu
IE9iamVjdENvbnRlbnRUeXBlKCk7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlh
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVk
aXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0Kikge30KLSAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2Jq
ZWN0Q2xlYXJlZCgpIHt9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1GaXJzdE5hdmlnYXRp
b24oKSBjb25zdCB7fQorICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdERhdGFUb1BsdWdpbihXaWRn
ZXQqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkgY29uc3QgeyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVuKSB7
fQorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCkgeyB9
CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3
aWxsQ2FjaGVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgTlNDYWNoZWRVUkxSZXNwb25zZSogcmVzcG9uc2UpIGNvbnN0IHsgcmV0dXJuIHJlc3BvbnNl
OyB9CisgICAgdmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShE
b2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3Bv
bnNlKSBjb25zdCB7IHJldHVybiByZXNwb25zZTsgfQogI2VuZGlmCiAKIH07CkBAIC0zMDAsNyAr
Mjk5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUq
LCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAvLyAg
dmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiByZXBsYWNpbmdSYW5n
ZSwgV2ViVmlld0luc2VydEFjdGlvbikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFj
dGlvbikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5LCBi
b29sIHN0aWxsU2VsZWN0aW5nKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiwgUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wp
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uKiwgUmFuZ2UqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdlKikgeyByZXR1
cm4gZmFsc2U7IH0KQEAgLTM0NywxNCArMzQ2LDE0IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZp
cnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJikgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGlu
dCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0
aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCog
YmFkR3JhbW1hckxlbmd0aCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0
cmluZyhjb25zdCBVQ2hhciosIGludCwgaW50KiwgaW50KikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8R3JhbW1hckRl
dGFpbD4mLCBpbnQqLCBpbnQqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdV
SVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBz
aG93KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCkgeyB9CiAgICAg
dmlydHVhbCBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKSB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3Ry
aW5nPiYgZ3Vlc3NlcykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUo
Ym9vbCBlbmFibGVkKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29u
c3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5w
dXRNZXRob2RTdGF0ZShib29sKSB7IH0KIAogCiB9OwpAQCAtMzY3LDcgKzM2Niw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIGdldEN1c3RvbU1lbnVGcm9t
RGVmYXVsdEl0ZW1zKENvbnRleHRNZW51KikgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9p
ZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qLCBjb25zdCBDb250ZXh0
TWVudSopIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRvd25sb2FkVVJMKGNvbnN0IEtVUkwmIHVy
bCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkVVJMKGNvbnN0IEtVUkwmKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgY29weUltYWdlVG9DbGlwYm9hcmQoY29uc3QgSGl0VGVzdFJlc3VsdCYp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IEZyYW1lKikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGxvb2tVcEluRGljdGlvbmFyeShGcmFtZSopIHsgfQpAQCAtMzg3
LDcgKzM4Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBh
Y3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopIHsgcmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlv
bk5vbmU7IH0KICAgICB2aXJ0dWFsIERyYWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1h
c2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYpIHsgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Ob25l
OyB9CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBv
aW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wpIHsgfQotICAg
IHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoS1VSTCYsIGNvbnN0
IFN0cmluZyYgbGFiZWwsIEZyYW1lKikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgRHJhZ0lt
YWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1l
KikgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3ll
ZCgpIHsgfQogfTsKIApAQCAtNDExLDExICs0MTAsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGhpZ2hsaWdodChOb2RlKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGln
aHQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJp
bmcmIG5ld1VSTCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29u
c3QgU3RyaW5nJikgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0
IFN0cmluZyYga2V5LCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJikgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgSW5zcGVjdG9y
Q29udHJvbGxlcjo6U2V0dGluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTZXR0aW5n
KGNvbnN0IFN0cmluZyYga2V5KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5n
KGNvbnN0IFN0cmluZyYsIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEluc3BlY3RvckNv
bnRyb2xsZXI6OlNldHRpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2V0dGluZyhj
b25zdCBTdHJpbmcmKSB7IH0KIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZUUERpcmVj
dG9yeURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GVFBEaXJlY3Rv
cnlEb2N1bWVudC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9sb2FkZXIvRlRQRGly
ZWN0b3J5RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksNyArMzk5LDcgQEAgdm9p
ZCBGVFBEaXJlY3RvcnlUb2tlbml6ZXI6OmNyZWF0ZUJhc2ljRAogICAgIGJvZHlFbGVtZW50LT5h
cHBlbmRDaGlsZChtX3RhYmxlRWxlbWVudCwgZWMpOwogfQogCi1ib29sIEZUUERpcmVjdG9yeVRv
a2VuaXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzLCBib29sIGFwcGVuZERhdGEp
Citib29sIEZUUERpcmVjdG9yeVRva2VuaXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5n
JiBzLCBib29sIC8qYXBwZW5kRGF0YSovKQogeyAgICAKICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2
ZSB0aGUgdGFibGUgZWxlbWVudCB0byBhcHBlbmQgdG8gYnkgbG9hZGluZyB0aGUgdGVtcGxhdGUg
c2V0IGluIHRoZSBwcmVmLCBvcgogICAgIC8vIGNyZWF0aW5nIGEgdmVyeSBiYXNpYyBkb2N1bWVu
dCB3aXRoIHRoZSBhcHByb3ByaWF0ZSB0YWJsZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
cmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4ODcsNyArMzg4Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNhbGxDb250
aW51ZUxvYWRBZnRlck4KICAgICBsb2FkZXItPmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBv
bGljeShyZXF1ZXN0LCBmb3JtU3RhdGUsIHNob3VsZENvbnRpbnVlKTsKIH0KIAotdm9pZCBGcmFt
ZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgYm9vbCBz
aG91bGRDb250aW51ZSkKK3ZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdh
dGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4g
Zm9ybVN0YXRlLCBib29sIHNob3VsZENvbnRpbnVlKQogewogICAgIC8vIElmIHdlIGxvYWRlZCBh
biBhbHRlcm5hdGUgcGFnZSB0byByZXBsYWNlIGFuIHVucmVhY2hhYmxlVVJMLCB3ZSdsbCBnZXQg
aW4gaGVyZSB3aXRoIGEKICAgICAvLyBuaWwgcG9saWN5RGF0YVNvdXJjZSBiZWNhdXNlIGxvYWRp
bmcgdGhlIGFsdGVybmF0ZSBwYWdlIHdpbGwgaGF2ZSBwYXNzZWQKQEAgLTQ4MDYsNyArNDgwNiw3
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNldE1haW5Eb2N1bWVudEVycm9yKEQKICAgICBtX2NsaWVu
dC0+c2V0TWFpbkRvY3VtZW50RXJyb3IobG9hZGVyLCBlcnJvcik7CiB9CiAKLXZvaWQgRnJhbWVM
b2FkZXI6Om1haW5SZWNlaXZlZENvbXBsZXRlRXJyb3IoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIEZyYW1lTG9hZGVyOjptYWluUmVjZWl2
ZWRDb21wbGV0ZUVycm9yKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJy
b3ImKQogewogICAgIGxvYWRlci0+c2V0UHJpbWFyeUxvYWRDb21wbGV0ZSh0cnVlKTsKICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKGFjdGl2ZURvY3VtZW50TG9hZGVy
KCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysg
V2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDEz
ICs5MSwxMyBAQCBwcml2YXRlOgogCiAvLyAtLS0tLS0tLQogCi1ib29sIEltYWdlVG9rZW5pemVy
Ojp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHMsIGJvb2wgYXBwZW5kRGF0YSkKK2Jvb2wg
SW1hZ2VUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wpCiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElt
YWdlVG9rZW5pemVyOjp3cml0ZVJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKK2Jv
b2wgSW1hZ2VUb2tlbml6ZXI6OndyaXRlUmF3RGF0YShjb25zdCBjaGFyKiwgaW50KQogewogICAg
IENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IG1fZG9jLT5jYWNoZWRJbWFnZSgpOwogICAgIGNh
Y2hlZEltYWdlLT5kYXRhKG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KS0+bWFpblJlc291cmNlRGF0YSgpLCBmYWxzZSk7CkBAIC0zNDEsNyArMzQxLDcgQEAgYm9vbCBJ
bWFnZURvY3VtZW50OjpzaG91bGRTaHJpbmtUb0ZpdCgpIAogCiAvLyAtLS0tLS0tLQogCi12b2lk
IEltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50LCBib29sIGlzV2lu
ZG93RXZlbnQpCit2b2lkIEltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2
ZW50LCBib29sKQogewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5yZXNp
emVFdmVudCkKICAgICAgICAgbV9kb2MtPndpbmRvd1NpemVDaGFuZ2VkKCk7CkluZGV4OiBXZWJD
b3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
SW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvbG9hZGVyL0ltYWdl
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgSW1hZ2VM
b2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50SWdub3IKICAgICB1cGRhdGVGcm9tRWxlbWVudCgpOwog
fQogCi12b2lkIEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSAqaW1h
Z2UpCit2b2lkIEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopCiB7
CiAgICAgQVNTRVJUKG1fZmFpbGVkTG9hZFVSTC5pc0VtcHR5KCkpOwogICAgIG1faW1hZ2VDb21w
bGV0ZSA9IHRydWU7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgTWFpblJlc291cmNlTG9hZGVy
OjpjYWxsQ29udGludWVBZnQKICAgICBzdGF0aWNfY2FzdDxNYWluUmVzb3VyY2VMb2FkZXIqPihh
cmd1bWVudCktPmNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KHJlcXVlc3QsIHNob3VsZENv
bnRpbnVlKTsKIH0KIAotdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJOYXZp
Z2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91bGRD
b250aW51ZSkKK3ZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpjb250aW51ZUFmdGVyTmF2aWdhdGlv
blBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZENvbnRpbnVlKQogewog
ICAgIGlmICghc2hvdWxkQ29udGludWUpCiAgICAgICAgIHN0b3BMb2FkaW5nRm9yUG9saWN5Q2hh
bmdlKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAkocmV2aXNpb24gMzk1ODQpCisr
KyBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsNyBAQCBjbGFzcyBNZWRpYVRva2VuaXplciA6IHB1YmxpYyBUb2tlbml6ZXIgCiBwdWJs
aWM6CiAgICAgTWVkaWFUb2tlbml6ZXIoRG9jdW1lbnQqIGRvYykgOiBtX2RvYyhkb2MpLCBtX21l
ZGlhRWxlbWVudCgwKSB7fQogICAgICAgICAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHdy
aXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wgYXBwZW5kRGF0YSk7CiAgICAgdmlydHVh
bCB2b2lkIHN0b3BQYXJzaW5nKCk7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOwpAQCAtNjIs
MTIgKzYzLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVSYXdEYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW4pOwogICAgICAgICAKICAgICB2b2lkIGNyZWF0ZURvY3VtZW50
U3RydWN0dXJlKCk7Ci1wcml2YXRlOgorCiAgICAgRG9jdW1lbnQqIG1fZG9jOwogICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1fbWVkaWFFbGVtZW50OwogfTsKIAotYm9vbCBNZWRpYVRva2VuaXplcjo6
d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzLCBib29sIGFwcGVuZERhdGEpCitib29sIE1l
ZGlhVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sKQogewogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMyw3ICsxMDQs
NyBAQCB2b2lkIE1lZGlhVG9rZW5pemVyOjpjcmVhdGVEb2N1bWVudFN0cnVjCiAgICAgZnJhbWUt
PmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VMb2FkZXIoKS0+
c2V0U2hvdWxkQnVmZmVyRGF0YShmYWxzZSk7CiB9CiAgICAgCi1ib29sIE1lZGlhVG9rZW5pemVy
Ojp3cml0ZVJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKK2Jvb2wgTWVkaWFUb2tl
bml6ZXI6OndyaXRlUmF3RGF0YShjb25zdCBjaGFyKiwgaW50KQogewogICAgIEFTU0VSVCghbV9t
ZWRpYUVsZW1lbnQpOwogICAgIGlmIChtX21lZGlhRWxlbWVudCkKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL1BsdWdpbkRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9QbHVn
aW5Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9sb2FkZXIvUGx1Z2lu
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFBsdWdp
blRva2VuaXplciA6IHB1YmxpYyBUb2tlbml6ZXIKIHB1YmxpYzoKICAgICBQbHVnaW5Ub2tlbml6
ZXIoRG9jdW1lbnQqIGRvYykgOiBtX2RvYyhkb2MpLCBtX2VtYmVkRWxlbWVudCgwKSB7fQogICAg
ICAgICAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0
cmluZyYsIGJvb2wgYXBwZW5kRGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BQYXJzaW5nKCk7
CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOwpAQCAtNTcsMTIgKzU4LDEyIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4p
OwogICAgICAgICAKICAgICB2b2lkIGNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCk7Ci1wcml2YXRl
OgorCiAgICAgRG9jdW1lbnQqIG1fZG9jOwogICAgIEhUTUxFbWJlZEVsZW1lbnQqIG1fZW1iZWRF
bGVtZW50OwogfTsKICAgICAKLWJvb2wgUGx1Z2luVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdt
ZW50ZWRTdHJpbmcmIHMsIGJvb2wgYXBwZW5kRGF0YSkKK2Jvb2wgUGx1Z2luVG9rZW5pemVyOjp3
cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sKQogewogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTk0LDcgKzk1LDcgQEAgdm9pZCBQbHVnaW5U
b2tlbml6ZXI6OmNyZWF0ZURvY3VtZW50U3RydQogICAgIGJvZHktPmFwcGVuZENoaWxkKGVtYmVk
RWxlbWVudCwgZWMpOyAgICAKIH0KICAgICAKLWJvb2wgUGx1Z2luVG9rZW5pemVyOjp3cml0ZVJh
d0RhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKK2Jvb2wgUGx1Z2luVG9rZW5pemVyOjp3
cml0ZVJhd0RhdGEoY29uc3QgY2hhciosIGludCkKIHsKICAgICBBU1NFUlQoIW1fZW1iZWRFbGVt
ZW50KTsKICAgICBpZiAobV9lbWJlZEVsZW1lbnQpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OndpbGxTZW5kUmVxdWVzdChSZXMKICAgICBtX3JlcXVlc3QgPSByZXF1ZXN0OwogfQogCi12
b2lkIFJlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNT
ZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQordm9pZCBSZXNvdXJj
ZUxvYWRlcjo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxv
bmcpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQu
aAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsMTUgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgflN1YnJlc291cmNlTG9hZGVyQ2xpZW50KCkgeyB9IAogCiAgICAgLy8gcmVxdWVzdCBt
YXkgYmUgbW9kaWZpZWQKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291
cmNlTG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVk
aXJlY3RSZXNwb25zZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJlc291
cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVx
dWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIC8qcmVkaXJlY3RSZXNwb25zZSovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
U2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgLypieXRlc1Nl
bnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1RvQmVTZW50Ki8pIHsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURh
dGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciopIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYp
IHsgfQogICAgIAotICAgIHZpcnR1YWwgYm9vbCBnZXRTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZShTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wmIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKSB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBnZXRTaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wmIC8qc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UqLykgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRp
b24oU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsg
fQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9UZXh0RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL1RleHREb2N1bWVudC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2Vi
Q29yZS9sb2FkZXIvVGV4dERvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMs
NyBAQCBUZXh0VG9rZW5pemVyOjpUZXh0VG9rZW5pemVyKEhUTUxWaWV3U291CiAgICAgbV9kZXN0
ID0gbV9idWZmZXI7CiB9ICAgIAogCi1ib29sIFRleHRUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNl
Z21lbnRlZFN0cmluZyYgcywgYm9vbCBhcHBlbmREYXRhKQorYm9vbCBUZXh0VG9rZW5pemVyOjp3
cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHMsIGJvb2wpCiB7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYzsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZS5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB1bnNpZ25l
ZCBBcHBsaWNhdGlvbkNhY2hlOjpudW1EeW5hbWljRW50CiAgICAgcmV0dXJuIDA7CiB9CiAgICAg
Ci1TdHJpbmcgQXBwbGljYXRpb25DYWNoZTo6ZHluYW1pY0VudHJ5KHVuc2lnbmVkIGluZGV4KSBj
b25zdAorU3RyaW5nIEFwcGxpY2F0aW9uQ2FjaGU6OmR5bmFtaWNFbnRyeSh1bnNpZ25lZCkgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50CiAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAt
MTM3LDE1ICsxMzcsMTQgQEAgU3RyaW5nIEFwcGxpY2F0aW9uQ2FjaGU6OmR5bmFtaWNFbnRyeSh1
bgogICAgIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlOjphZGREeW5hbWljRW50cnkoY29uc3QgU3Ry
aW5nJiB1cmwpCiB7Ci0gICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShtX2dyb3VwLT5tYW5pZmVz
dFVSTCgpLnByb3RvY29sKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBLVVJMKHVybCku
cHJvdG9jb2woKSkpCisgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShtX2dyb3VwLT5tYW5pZmVz
dFVSTCgpLnByb3RvY29sKCksIEtVUkwodXJsKS5wcm90b2NvbCgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gRklYTUU6IEltcGxlbWVudAogICAgIHJldHVybiB0cnVlOwogfQog
ICAgIAotdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVEeW5hbWljRW50cnkoY29uc3QgU3Ry
aW5nJiB1cmwpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUR5bmFtaWNFbnRyeShjb25z
dCBTdHJpbmcmKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKIH0KSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2aXNp
b24gMzk1ODQpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3Jv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6fkFwcGxpY2F0aW9uQ2FjaGUKICAgICBjYWNoZVN0b3JhZ2UoKS5jYWNoZUdyb3VwRGVz
dHJveWVkKHRoaXMpOwogfQogICAgIAotQXBwbGljYXRpb25DYWNoZSogQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpjYWNoZUZvck1haW5SZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK0FwcGxpY2F0aW9uQ2FjaGUqIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6Y2FjaGVGb3JNYWluUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIERvY3VtZW50TG9hZGVyKikKIHsKICAgICBpZiAoIUFwcGxpY2F0aW9uQ2FjaGU6OnJl
cXVlc3RJc0hUVFBPckhUVFBTR2V0KHJlcXVlc3QpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTkw
LDcgKzkwLDcgQEAgQXBwbGljYXRpb25DYWNoZSogQXBwbGljYXRpb25DYWNoZUdyb3VwOgogICAg
IHJldHVybiAwOwogfQogICAgIAotQXBwbGljYXRpb25DYWNoZSogQXBwbGljYXRpb25DYWNoZUdy
b3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBEb2N1bWVudExvYWRlciogbG9hZGVyKQorQXBwbGljYXRpb25DYWNoZSogQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJlcXVlc3QoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVudExvYWRlciopCiB7CiAgICAgaWYgKCFBcHBsaWNh
dGlvbkNhY2hlOjpyZXF1ZXN0SXNIVFRQT3JIVFRQU0dldChyZXF1ZXN0KSkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRp
ZFJlY2VpdmVSZQogICAgIG1fY3VycmVudFJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpjcmVhdGUodXJsLCByZXNwb25zZSwgdHlwZSk7CiB9CiAKLXZvaWQgQXBwbGljYXRpb25D
YWNoZUdyb3VwOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50KQogewogICAgIGlmIChoYW5kbGUgPT0gbV9t
YW5pZmVzdEhhbmRsZSkgewogICAgICAgICBkaWRSZWNlaXZlTWFuaWZlc3REYXRhKGRhdGEsIGxl
bmd0aCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlv
bkNhY2hlLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9E
T01BcHBsaWNhdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDcgKzE5OCw3IEBA
IHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW4KICAgICB9ICAgIAogfQog
Ci12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wg
dXNlQ2FwdHVyZSkKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0
ZW5lciwgYm9vbCkKIHsKICAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1f
ZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwogICAgIGlmIChpdGVyID09IG1fZXZlbnRM
aXN0ZW5lcnMuZW5kKCkpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQ2xp
ZW50LmgJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJh
c2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB+SWNvbkRhdGFiYXNlQ2xpZW50KCkgeyB9CiAgICAgdmlydHVhbCBib29sIHBlcmZv
cm1JbXBvcnQoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
UmVtb3ZlQWxsSWNvbnMoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRBZGRJY29u
Rm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZEFkZEljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgLypwYWdlVVJMKi8pIHsg
fQogfTsKICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCisKICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uRmV0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRmV0Y2hlci5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRmV0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxMCArMTg5LDgg
QEAgdm9pZCBJY29uRmV0Y2hlcjo6bG9hZEZhaWxlZCgpCiAgICAgbV9jbGllbnQtPmZpbmlzaGVk
RmV0Y2hpbmdJY29uKDApOwogfSAgICAKICAgICAKLXZvaWQgSWNvbkZldGNoZXI6OmRpZFJlY2Vp
dmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3ZvaWQgSWNvbkZldGNoZXI6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIEFTU0VS
VChtX2hhbmRsZSA9PSBoYW5kbGUpOwotICAgIAogICAgIGludCBzdGF0dXNDb2RlID0gcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMDsKICAgICBpZiAoc3RhdHVzQ29kZSA9PSA0IHx8IHN0
YXR1c0NvZGUgPT0gNSkgewogICAgICAgICBsb2FkRmFpbGVkKCk7CkBAIC0yMDAsMTcgKzE5OCwx
MyBAQCB2b2lkIEljb25GZXRjaGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzCiAgICAgfSAgICAK
IH0KICAgICAKLXZvaWQgSWNvbkZldGNoZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCBsZW5ndGhSZWNlaXZl
ZCkKLXsKLSAgICBBU1NFUlQobV9oYW5kbGUgPT0gaGFuZGxlKTsKLSAgICAKK3ZvaWQgSWNvbkZl
dGNoZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCwgaW50KQoreyAgICAKICAgICBtX2VudHJpZXNbbV9jdXJyZW50RW50cnldLmJ1
ZmZlcigpLT5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBJY29uRmV0Y2hlcjo6ZGlk
RmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQordm9pZCBJY29uRmV0Y2hlcjo6
ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopCiB7Ci0gICAgQVNTRVJUKG1faGFuZGxl
ID09IGhhbmRsZSk7Ci0gICAgCiAgICAgaWYgKG1fY3VycmVudEVudHJ5ID09IG1fZW50cmllcy5z
aXplKCkgLSAxKSB7CiAgICAgICAgIC8vIFdlIGZpbmlzaGVkIGxvYWRpbmcsIGNyZWF0ZSB0aGUg
aWNvbgogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBpY29uRGF0YSA9IGNyZWF0ZUljb24o
KTsKQEAgLTIyNSwxMCArMjE5LDggQEAgdm9pZCBJY29uRmV0Y2hlcjo6ZGlkRmluaXNoTG9hZGlu
ZyhSZXNvdQogICAgIGxvYWRFbnRyeSgpOwogfQogICAgIAotdm9pZCBJY29uRmV0Y2hlcjo6ZGlk
RmFpbChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQg
SWNvbkZldGNoZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9y
JikKIHsKLSAgICBBU1NFUlQobV9oYW5kbGUgPT0gaGFuZGxlKTsKLSAgICAKICAgICBsb2FkRmFp
bGVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2aXNpb24g
Mzk1ODQpCisrKyBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBJY29uTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291
cmNlTG9hZAogICAgIH0KIH0KIAotdm9pZCBJY29uTG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQordm9pZCBJY29uTG9hZGVyOjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCiB7CiAgICAgLy8gV2UgZG9uJ3QgZXZlciB3YW50IHRv
IHByb21wdCBmb3IgYXV0aGVudGljYXRpb24ganVzdCBmb3IgYSBzaXRlIGljb24sIHNvCiAgICAg
Ly8gaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGNhbmNlbCB0aGUgcmVzb3VyY2UgbG9hZApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNv
cmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgSWNvblJlY29yZDo6fkljb25SZWNvcmQoKQogICAgIExPRyhJY29uRGF0YWJhc2UsICJE
ZXN0cm95aW5nIEljb25SZWNvcmQgZm9yIGljb24gdXJsICVzIiwgbV9pY29uVVJMLmFzY2lpKCku
ZGF0YSgpKTsKIH0KIAotSW1hZ2UqIEljb25SZWNvcmQ6OmltYWdlKGNvbnN0IEludFNpemUmIHNp
emUpCitJbWFnZSogSWNvblJlY29yZDo6aW1hZ2UoY29uc3QgSW50U2l6ZSYpCiB7CiAgICAgLy8g
RklYTUUgcmRhcjovLzQ2ODAzNzcgLSBGb3Igc2l6ZSByaWdodCBub3csIHdlIGFyZSByZXR1cm5p
bmcgb3VyIG9uZSBhbmQgb25seSBpbWFnZSBhbmQgdGhlIEJyaWRnZQogICAgIC8vIGlzIHJlc2l6
aW5nIGl0IGluIHBsYWNlLiAgV2UgbmVlZCB0byBhY3R1YWxseSBzdG9yZSBhbGwgdGhlIG9yaWdp
bmFsIHJlcHJlc2VudGF0aW9ucyBoZXJlIGFuZCByZXR1cm4gYSBuYXRpdmUKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL21hYy9SZXNvdXJjZUxvYWRlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9tYWMvUmVzb3VyY2VMb2FkZXJNYWMubW0JKHJldmlzaW9uIDM5NTg0KQorKysgV2Vi
Q29yZS9sb2FkZXIvbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTlNDYWNoZWRVUkxSZXNwb25z
ZSogUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKQorTlNDYWNoZWRVUkxSZXNwb25zZSog
UmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgTlNDYWNo
ZWRVUkxSZXNwb25zZSogcmVzcG9uc2UpCiB7CiAgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCktPmNs
aWVudCgpLT53aWxsQ2FjaGVSZXNwb25zZShkb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVyKCks
IHJlc3BvbnNlKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzZXRTZWxlY3RlZFRleAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2Um
IHJhbmdlKQordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShj
b25zdCBQbGFpblRleHRSYW5nZSYpCiB7CiB9CiAKQEAgLTI3MiwxMSArMjcyLDExIEBAIEtVUkwg
QWNjZXNzaWJpbGl0eU9iamVjdDo6dXJsKCkgY29uc3QKICAgICByZXR1cm4gS1VSTCgpOwogfQog
Ci12b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNldEZvY3VzZWQoYm9vbCBvbikKK3ZvaWQgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6c2V0Rm9jdXNlZChib29sKQogewogfQogCi12b2lkIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmKQogewogfQogCkBAIC0zMjcsMTcg
KzMyNywxNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0CiAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiB9CiAKLVZpc2libGVQb3NpdGlvblJhbmdl
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25l
ZCBsaW5lQ291bnQpIGNvbnN0CitWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0
CitWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uRm9y
SW5kZXgoaW50KSBjb25zdAogewogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIH0KICAg
ICAKLWludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHBvcykgY29uc3QKK2ludCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpp
bmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdAogewog
ICAgIHJldHVybiAwOwogfQpAQCAtNjAwLDcgKzYwMCw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpzdHJpbmdGb3JWaXMKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHRWZWN0
b3IpOwogfQogCi1JbnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kc0ZvclZpc2libGVQ
b3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiB2aXNpYmxlUG9zaXRpb25S
YW5nZSkgY29uc3QKK0ludFJlY3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRzRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdAogewogICAg
IHJldHVybiBJbnRSZWN0KCk7CiB9CkBAIC02MzYsNyArNjM2LDcgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpzZXRTZWxlY3RlZFZpcwogewogfQogCi1WaXNpYmxlUG9zaXRpb24gQWNjZXNz
aWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBv
aW50KSBjb25zdAorVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQ
b3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3QKIHsKICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CiB9CkBAIC03OTgsNyArNzk4LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnByZQogfQogCiAvLyBOT1RFOiBDb25zaWRlciBwcm92aWRpbmcg
dGhpcyB1dGlsaXR5IG1ldGhvZCBhcyBBWCBBUEkKLVZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCh1bnNpZ25lZCBpbmRleFZhbHVlLCBi
b29sIGxhc3RJbmRleE9LKSBjb25zdAorVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KHVuc2lnbmVkLCBib29sKSBjb25zdAogewogICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIH0KQEAgLTg0OSwxNCArODQ5LDE0IEBAIFBsYWlu
VGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBsYWkKIH0KIAogLy8gTk9URTogQ29uc2lk
ZXIgcHJvdmlkaW5nIHRoaXMgdXRpbGl0eSBtZXRob2QgYXMgQVggQVBJCi1pbnQgQWNjZXNzaWJp
bGl0eU9iamVjdDo6aW5kZXgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QK
K2ludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRleChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBj
b25zdAogewogICAgIHJldHVybiAtMTsKIH0KIAogLy8gR2l2ZW4gYSBsaW5lIG51bWJlciwgdGhl
IHJhbmdlIG9mIGNoYXJhY3RlcnMgb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWNj
ZXNzaWJpbGl0eQogLy8gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGxpbmUgbnVtYmVyLgotUGxh
aW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9BWFJhbmdlRm9yTGluZSh1bnNpZ25l
ZCBsaW5lTnVtYmVyKSBjb25zdAorUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6
ZG9BWFJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3QKIHsKICAgICByZXR1cm4gUGxhaW5UZXh0
UmFuZ2UoKTsKIH0KQEAgLTg3OSw3ICs4NzksNyBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojpkb0FYCiAvLyBUaGUgY29tcG9zZWQgY2hhcmFjdGVyIHJhbmdlIGluIHRoZSB0
ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRoYXQKIC8vIGlz
IHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUuIFRoaXMgcGFyYW1ldGVyaXplZCBh
dHRyaWJ1dGUgcmV0dXJucyB0aGUgY29tcGxldGUKIC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMgKGlu
Y2x1ZGluZyBzdXJyb2dhdGUgcGFpcnMgb2YgbXVsdGktYnl0ZSBnbHlwaHMpIGF0IHRoZSBnaXZl
biBpbmRleC4KLVBsYWluVGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhSYW5nZUZv
ckluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAorUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0
eU9iamVjdDo6ZG9BWFJhbmdlRm9ySW5kZXgodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFBsYWluVGV4dFJhbmdlKCk7CiB9CkBAIC04OTQsNyArODk0LDcgQEAgUGxhaW5UZXh0UmFuZ2Ug
QWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9BWAogCiAvLyBBIHN1YnN0cmluZyBvZiB0aGUgdGV4dCBh
c3NvY2lhdGVkIHdpdGggdGhpcyBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0aGF0IGlzCiAvLyBzcGVj
aWZpZWQgYnkgdGhlIGdpdmVuIGNoYXJhY3RlciByYW5nZS4KLVN0cmluZyBBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojpkb0FYU3RyaW5nRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBj
b25zdAorU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhTdHJpbmdGb3JSYW5nZShjb25z
dCBQbGFpblRleHRSYW5nZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpAQCAt
OTAyLDcgKzkwMiw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb0FYU3RyaW5nRm8K
IC8vIFRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgYWNjZXNzaWJpbGl0eSBvYmplY3QgdGhhdCBpcwogLy8gc3BlY2lmaWVkIGJ5IHRoZSBnaXZl
biByYW5nZS4gVGhpcyBpcyB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIGEgc2lnaHRlZCB1c2VyIHdv
dWxkIHNlZQogLy8gb24gdGhlIGRpc3BsYXkgc2NyZWVuLCBpbiBwaXhlbHMuCi1JbnRSZWN0IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5n
ZSYgcmFuZ2UpIGNvbnN0CitJbnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhCb3VuZHNG
b3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEludFJl
Y3QoKTsKIH0KQEAgLTkyNiw3ICs5MjYsNyBAQCBGcmFtZVZpZXcqIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmRvY3VtZW50CiAgICAgcmV0dXJuIG9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKIH0g
ICAgCiAKLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQWNjZXNz
aWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorQWNjZXNzaWJpbGl0
eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9BY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25z
dCBJbnRQb2ludCYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2
aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDM2LDggKzQzNiw4IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjplbmFibGVTdWRkZW5UZXJtaW5h
dGkKIH0KIAogYm9vbCBDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXplLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxiYXJDb250cm9sU3RhdGUs
IFNjcm9sbGJhclBhcnQsIGJvb2wgdmVydGljYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgdmFsdWUsIGZsb2F0IHByb3BvcnRpb24sIFNjcm9sbGJhckNv
bnRyb2xQYXJ0TWFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
Y3JvbGxiYXJDb250cm9sU3RhdGUsIFNjcm9sbGJhclBhcnQsIGJvb2wsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBTY3JvbGxiYXJDb250cm9s
UGFydE1hc2spCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgRE9NV2luZG93Ojpwcm9tcHQoY29uc3QgU3Ry
aW5nJiBtCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1ib29sIERPTVdpbmRvdzo6ZmluZChj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGJhY2t3YXJkcywg
Ym9vbCB3cmFwLCBib29sIHdob2xlV29yZCwgYm9vbCBzZWFyY2hJbkZyYW1lcywgYm9vbCBzaG93
RGlhbG9nKSBjb25zdAorYm9vbCBET01XaW5kb3c6OmZpbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBiYWNrd2FyZHMsIGJvb2wgd3JhcCwgYm9vbCAvKndo
b2xlV29yZCovLCBib29sIC8qc2VhcmNoSW5GcmFtZXMqLywgYm9vbCAvKnNob3dEaWFsb2cqLykg
Y29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTE5LDcgKzE1MTksNyBAQCB2b2lkIEV2
ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdlCiAgICAgfQogfQogCi1ib29sIEV2ZW50
SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBOb2RlKiB0YXJnZXROb2RlLCBib29sIGNhbmNlbGFibGUsIGludCBjbGlja0NvdW50LCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIGJvb2wgc2V0VW5kZXIpCitib29sIEV2
ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBOb2RlKiB0YXJnZXROb2RlLCBib29sIC8qY2FuY2VsYWJsZSovLCBpbnQgY2xpY2tDb3Vu
dCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBib29sIHNldFVuZGVyKQog
ewogICAgIHVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKHRhcmdldE5vZGUsIG1vdXNlRXZlbnQs
IHNldFVuZGVyKTsKIApJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODUsNyArMTI4NSw3IEBAIHZvaWQgRnJh
bWU6OnJldmVhbENhcmV0KGNvbnN0IFJlbmRlckxheWUKICAgICB9CiB9CiAKLXZvaWQgRnJhbWU6
OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBv
bGRCb3R0b20sIGZsb2F0IGJvdHRvbUxpbWl0KQordm9pZCBGcmFtZTo6YWRqdXN0UGFnZUhlaWdo
dChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0IG9sZEJvdHRvbSwgZmxvYXQg
Lypib3R0b21MaW1pdCovKQogewogICAgIFJlbmRlclZpZXcqIHJvb3QgPSBjb250ZW50UmVuZGVy
ZXIoKTsKICAgICBpZiAocm9vdCkgewpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1h
dGlvbkJhc2UuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE3ICs2MywxNyBAQCBzdGF0
aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuCiAgICAgcmV0dXJuIGJlemllci5z
b2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQg
YmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGludCBmcm9tLCBpbnQgdG8sIGRv
dWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBBbmltYXRp
b25CYXNlKiwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQogeyAgCiAgICAgcmV0
dXJuIGludChmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgZG91YmxlIGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBkb3VibGUgZnJv
bSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVu
ZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSosIGRvdWJsZSBmcm9tLCBkb3VibGUgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKIHsgIAogICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVz
czsKIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFz
ZSogYW5pbSwgZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBp
bmxpbmUgZmxvYXQgYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqLCBmbG9hdCBmcm9tLCBm
bG9hdCB0bywgZG91YmxlIHByb2dyZXNzKQogeyAgCiAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwogfQpAQCAtODYsNyArODYs
NyBAQCBzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBBbmltCiAgICAgICAgICAg
ICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLmFscGhhKCksIHRvLmFscGhhKCksIHByb2dyZXNz
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25C
YXNlKiBhbmltLCBjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25C
YXNlKiwgY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCiB7ICAKICAgICByZXR1cm4gdG8uYmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOwogfQpJbmRleDog
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHJldmlzaW9uIDM5NTg0KQorKysg
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiw4ICsxMjIsOCBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNj
YWxlLCBkb3VibGUgb2Zmc2V0LCBjb25zdCBUaW1pbmdGdW5jdGlvbiopIGNvbnN0OwogCi0gICAg
dmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVBbmlt
YXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogLypjdXJyZW50U3R5bGUq
LywgCisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiAvKnRhcmdldFN0eWxlKi8sIFJlZlB0cjxS
ZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRGaXJlRXZlbnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMTQwLDcgKzE0
MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICAvLyBEb2VzIHRoaXMgYW5pbWF0aW9uL3RyYW5zaXRpb24gaW52
b2x2ZSB0aGUgZ2l2ZW4gcHJvcGVydHk/Ci0gICAgdmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0
eShpbnQgcHJvcGVydHkpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGFmZmVjdHNQcm9wZXJ0eShpbnQgLypwcm9wZXJ0eSovKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5u
aW5nTm93KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzUnVubmluZ05vdykKQEAgLTE2MCwx
MSArMTYwLDExIEBAIHByb3RlY3RlZDoKICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0
ZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fY29tcEFuaW07IH0KIAogICAgIC8vIFRoZXNlIGFyZSBj
YWxsZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyB0aW1lciBmaXJlcyBzbyBzdWJjbGFzc2VzIGNh
biBkbyBhbnkgZXh0cmEgd29yawotICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRv
dWJsZSBlbGFwc2VkVGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0
aW9uKGRvdWJsZSBlbGFwc2VkVGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9u
RW5kKGRvdWJsZSBlbGFwc2VkVGltZSkgeyB9Ci0gICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0
aW9uKGRvdWJsZSBiZWdpblRpbWUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGVuZEFuaW1hdGlvbihib29sIHJlc2V0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRp
b25TdGFydChkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25B
bmltYXRpb25JdGVyYXRpb24oZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9CisgICAgdmlydHVh
bCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQorICAgIHZp
cnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgLypiZWdpblRpbWUqLykgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgLypyZXNldCovKSB7
IH0KIAogICAgIHZvaWQgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKIApAQCAtMTc3LDcg
KzE3Nyw2IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgdm9pZCBzZXRDaGFuZ2VkKE5v
ZGUqKTsKIAotcHJvdGVjdGVkOgogICAgIEFuaW1TdGF0ZSBtX2FuaW1TdGF0ZTsKIAogICAgIGJv
b2wgbV9pc0FuaW1hdGluZzsgICAgICAgLy8gdHJhbnNpdGlvbi9hbmltYXRpb24gcmVxdWlyZXMg
Y29udGludWFsIHRpbWVyIGZpcmluZwpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
Niw3ICsyMTYsNyBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRFdmVuCiAg
ICAgc3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7CiB9CiAKLXZvaWQgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU+KiB0aW1lcikKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+KikK
IHsKICAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNhbGwgc2V0Q2hh
bmdlZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFuZCB0aGVuIGRv
IGFuIGltbWVkaWF0ZQogICAgIC8vIHVwZGF0ZVJlbmRlcmluZy4gIEl0IHdpbGwgdGhlbiBjYWxs
IGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUyLDcgKzM1Miw3IEBAIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IENvbXBv
c2l0ZUEKICAgICByZXR1cm4gcmV0dmFsOwogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvblBy
aXZhdGU6OmNsZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
K3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0aW9u
cyhSZW5kZXJPYmplY3QqKQogewogICAgIGlmIChpc1N1c3BlbmRlZCgpKQogICAgICAgICByZXR1
cm47CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNw
cAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5p
bWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCArNjAsNyBAQCBib29sIEltcGxpY2l0
QW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVu
dCgpLT5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOwogfQogCi12b2lkIEltcGxpY2l0
QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5k
ZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCit2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgUmVuZGVy
U3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQog
ewogICAgIC8vIElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBp
dCBtZWFucyB3ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1hdGlvbi4KICAg
ICAvLyBTbyBqdXN0IHJldHVybi4gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGFsbCBjbGVhbmVkIHVw
LgpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJ
KHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1h
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDcgQEAgS2V5ZnJhbWVBbmltYXRp
b246On5LZXlmcmFtZUFuaW1hdGlvbigpCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmlt
YXRpb25TdGF0ZUlucHV0RW5kQW5pbWF0aW9uLCAtMSk7CiB9CiAKLXZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
LCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQordm9pZCBLZXlmcmFtZUFuaW1h
dGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBGaXJlIHRoZSBzdGFydCB0aW1lb3V0
IGlmIG5lZWRlZAogICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9BcmVuYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9B
cmVuYS5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDggKzkwLDcgQEAgc3RhdGljIGludCBDZWlsaW5nTG9nMih1
bnNpZ25lZCBpbnQgaSkgewogICAgIHJldHVybiBsb2cyOwogfQogCi12b2lkIEluaXRBcmVuYVBv
b2woQXJlbmFQb29sICpwb29sLCBjb25zdCBjaGFyICpuYW1lLCAKLSAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKQordm9pZCBJbml0QXJlbmFQ
b29sKEFyZW5hUG9vbCAqcG9vbCwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5z
aWduZWQgaW50IGFsaWduKQogewogICAgICBpZiAoYWxpZ24gPT0gMCkKICAgICAgICAgIGFsaWdu
ID0gQVJFTkFfREVGQVVMVF9BTElHTjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgJ
KHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFNjcm9sbGJhclRoZW1lIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZSgpIHt9OwogCi0gICAgdmlydHVhbCBi
b29sIHBhaW50KFNjcm9sbGJhciosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9s
bGJhciosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIC8qZGFtYWdlUmVjdCovKSB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9s
bGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIE5vUGFydDsgfQogICAg
IAogICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6
ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCShy
ZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTGVuZ3RoQm94
IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25z
dCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aEJv
eCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiwgY29u
c3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0KSBjb25zdAogewogICAgIHN3aXRjaCAocGFy
dCkgewogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgpAQCAtNDIsNyArNDIsNyBAQCBMZW5n
dGhCb3ggVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhCiAgICAgfQogfQogCi1MZW5ndGhC
b3ggVGhlbWU6OmNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBj
b25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0
aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYs
IGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KHBhcnQpIHsKICAgICAgICAgY2FzZSBNZW51bGlzdFBhcnQ6CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL1RoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCShyZXZp
c2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtODEsMTMgKzgxLDEzIEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2RzIHVzZWQgdG8gYWRqdXN0
IHRoZSBSZW5kZXJTdHlsZXMgb2YgY29udHJvbHMuCiAgICAgCiAgICAgLy8gVGhlIGZvbnQgZGVz
Y3JpcHRpb24gcmVzdWx0IHNob3VsZCBoYXZlIGEgem9vbWVkIGZvbnQgc2l6ZS4KLSAgICB2aXJ0
dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYg
Zm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QgeyByZXR1cm4gZm9udC5mb250RGVzY3JpcHRp
b24oKTsgfQorICAgIHZpcnR1YWwgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQ
YXJ0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1
cm4gZm9udC5mb250RGVzY3JpcHRpb24oKTsgfQogICAgIAogICAgIC8vIFRoZSBzaXplIGhlcmUg
aXMgaW4gem9vbWVkIGNvb3JkaW5hdGVzIGFscmVhZHkuICBJZiBhIG5ldyBzaXplIGlzIHJldHVy
bmVkLCBpdCBhbHNvIG5lZWRzIHRvIGJlIGluIHpvb21lZCBjb29yZGluYXRlcy4KLSAgICB2aXJ0
dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25z
dCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCB7IHJldHVy
biB6b29tZWRTaXplOyB9CisgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRy
b2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQg
Lyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIHpvb21lZFNpemU7IH0KICAgICAKICAgICAv
LyBSZXR1cm5zIHRoZSBtaW5pbXVtIHNpemUgZm9yIGEgY29udHJvbCBpbiB6b29tZWQgY29vcmRp
bmF0ZXMuICAKLSAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRy
b2xQYXJ0LCBjb25zdCBGb250JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QgeyByZXR1cm4gTGVu
Z3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQorICAgIHZpcnR1
YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQm
LCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gTGVuZ3RoU2l6ZShMZW5ndGgo
MCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQogICAgIAogICAgIC8vIEFsbG93cyB0aGUg
dGhlbWUgdG8gbW9kaWZ5IHRoZSBleGlzdGluZyBwYWRkaW5nL2JvcmRlci4KICAgICB2aXJ0dWFs
IExlbmd0aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0
IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKQEAgLTk2LDE0
ICs5NiwxNCBAQCBwdWJsaWM6CiAgICAgLy8gV2hldGhlciBvciBub3Qgd2hpdGVzcGFjZTogcHJl
IHNob3VsZCBiZSBmb3JjZWQgb24gYWx3YXlzLgogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sUmVx
dWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
Ci0gICAgLy8gTWV0aG9kIGZvciBwYWludGluZyBhIGNvbnRyb2wuICBUaGUgcmVjdCBpcyBpbiB6
b29tZWQgY29vcmRpbmF0ZXMuCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBD
b250cm9sU3RhdGVzLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0
LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KikgY29uc3QgeyB9OworICAgIC8vIE1ldGhv
ZCBmb3IgcGFpbnRpbmcgYSBjb250cm9sLiBUaGUgcmVjdCBpcyBpbiB6b29tZWQgY29vcmRpbmF0
ZXMuCisgICAgdmlydHVhbCB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiAvKnpvb21lZFJlY3QqLywgZmxvYXQgLyp6
b29tRmFjdG9yKi8sIFNjcm9sbFZpZXcqKSBjb25zdCB7IH0KIAogICAgIC8vIFNvbWUgY29udHJv
bHMgbWF5IHNwaWxsIG91dCBvZiB0aGVpciBjb250YWluZXJzIChlLmcuLCB0aGUgY2hlY2sgb24g
YW4gT1MgWCBjaGVja2JveCkuICBXaGVuIHRoZXNlIGNvbnRyb2xzIHJlcGFpbnQsCiAgICAgLy8g
dGhlIHRoZW1lIG5lZWRzIHRvIGNvbW11bmljYXRlIHRoaXMgaW5mbGF0ZWQgcmVjdCB0byB0aGUg
ZW5naW5lIHNvIHRoYXQgaXQgY2FuIGludmFsaWRhdGUgdGhlIHdob2xlIGNvbnRyb2wuCiAgICAg
Ly8gVGhlIHJlY3QgcGFzc2VkIGluIGlzIGluIHpvb21lZCBjb29yZGluYXRlcywgc28gdGhlIGlu
ZmxhdGlvbiBzaG91bGQgdGFrZSB0aGF0IGludG8gYWNjb3VudCBhbmQgbWFrZSBzdXJlIHRoZSBp
bmZsYXRpb24KICAgICAvLyBhbW91bnQgaXMgYWxzbyBzY2FsZWQgYnkgdGhlIHpvb21GYWN0b3Iu
Ci0gICAgdmlydHVhbCB2b2lkIGluZmxhdGVDb250cm9sUGFpbnRSZWN0KENvbnRyb2xQYXJ0LCBD
b250cm9sU3RhdGVzLCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBh
cnQsIENvbnRyb2xTdGF0ZXMsIEludFJlY3QmIC8qem9vbWVkUmVjdCovLCBmbG9hdCAvKnpvb21G
YWN0b3IqLykgY29uc3QgeyB9CiAgICAgCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9u
Y2UsIGZyb20gUmVuZGVyVGhlbWU6OmFkanVzdERlZmF1bHRTdHlsZVNoZWV0KCksIHRvIGxldCBl
YWNoIHBsYXRmb3JtIGFkanVzdAogICAgIC8vIHRoZSBkZWZhdWx0IENTUyBydWxlcyBpbiBodG1s
NC5jc3MuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAko
cmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6
OnJlc2V0QW5pbWF0aW9uKCkKICAgICBkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeSh0cnVl
KTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6YWR2YW5jZUFuaW1hdGlvbihUaW1lcjxCaXRtYXBJ
bWFnZT4qIHRpbWVyKQordm9pZCBCaXRtYXBJbWFnZTo6YWR2YW5jZUFuaW1hdGlvbihUaW1lcjxC
aXRtYXBJbWFnZT4qKQogewogICAgIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbihmYWxzZSk7CiAg
ICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaW1hZ2UgcmVnaW9uIGhhcyBiZWVuIG1hcmtlZCBkaXJ0
eSwgYW5kIGlmIGl0J3MKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQ
YXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0
UGF0aC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksOCArMjY5LDcgQEAgdm9pZCBG
b250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleAogICAgIGRyYXdHbHlwaEJ1ZmZlcihj
b250ZXh0LCBnbHlwaEJ1ZmZlciwgcnVuLCBzdGFydFBvaW50KTsKIH0KIAotdm9pZCBGb250Ojpk
cmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
CiB7ICAgCiAgICAgLy8gRHJhdyBlYWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyB0aGF0IHVz
ZSB0aGUgc2FtZSBmb250IGRhdGEuCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
ID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdCgwKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQogCiAgICAgLy8gQXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNvbnRlbnQgaGFzIG5v
IGRlY29kZWQgZGF0YSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0Ci0gICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwgPSB0cnVlKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgLypkZXN0cm95QWxsKi8gPSB0cnVlKSB7IH0K
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQog
CiBwcm90ZWN0ZWQ6CkBAIC02MSw3ICs2MSw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRv
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CiAgICAgCi1wcm90ZWN0ZWQ6CiAgICAgR2Vu
ZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKICAgICAgICAgOiBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCiAgICAgICAgICwgbV9z
aXplKHNpemUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiAzOTU4
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CiAKICAg
ICBib29sIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJv
b2wgLyphbGxEYXRhUmVjZWl2ZWQqLykgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKICAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9
IC8vIG51bGwgc3RyaW5nIGlmIHVua25vd24KIApAQCAtMTU5LDcgKzE1OSw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIGJvb2wgbWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIENvbG9yIHNvbGlkQ29sb3IoKSBjb25zdCB7IHJldHVy
biBDb2xvcigpOyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5pbWF0aW9uKGJvb2wg
Y2F0Y2hVcElmTmVjZXNzYXJ5ID0gdHJ1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5p
bWF0aW9uKGJvb2wgLypjYXRjaFVwSWZOZWNlc3NhcnkqLyA9IHRydWUpIHsgfQogICAgIAogICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBv
c2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24gMzk1
ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIEltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2Uo
KQogICAgIGNsZWFyKHRydWUpOwogfQogCi12b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRl
c3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQordm9pZCBJbWFnZVNvdXJjZTo6Y2xl
YXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QpCiB7CiAgICAgaWYgKGRlc3Ryb3lBbGwpIHsKICAg
ICAgICAgaWYgKG1fZGVjb2RlcikgewpAQCAtMjMxLDcgKzIzMSw3IEBAIGZsb2F0IEltYWdlU291
cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCgKICAgICByZXR1cm4gZHVyYXRpb247CiB9CiAKLWJv
b2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK2Jvb2wg
SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkKIHsKICAgICAvLyBNaWdo
dCBiZSBpbnRlcmVzdGluZyB0byBkbyB0aGlzIG9wdGltaXphdGlvbiBvbiBNYWMgc29tZSBkYXks
IGJ1dCBmb3Igbm93IHdlJ3JlIGp1c3QgdXNpbmcgdGhpcwogICAgIC8vIGZvciB0aGUgQ2Fpcm8g
c291cmNlLCBzaW5jZSBpdCB1c2VzIG91ciBkZWNvZGVycywgYW5kIG91ciBkZWNvZGVycyBjYW4g
YW5zd2VyIHRoaXMgcXVlc3Rpb24uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUERGRG9jdW1lbnRJbWFnZSk7CiAgICAgICAgIH0KLSAgICAg
ICAgflBERkRvY3VtZW50SW1hZ2UoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwg
flBERkRvY3VtZW50SW1hZ2UoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzU2luZ2xlU2Vj
dXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTUwLDEyICs1MiwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gRklYTUU6IFBERiBJbWFnZXMgYXJl
IHVuZGVycmVwb3J0aW5nIGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCiAgICAgICAg
IC8vIHRvIHBydW5lIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQg
eWV0LgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJv
eUFsbCA9IHRydWUpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRh
KGJvb2wgLypkZXN0cm95QWxsKi8gPSB0cnVlKSB7IH0KICAgICAgICAgdmlydHVhbCB1bnNpZ25l
ZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgICAgICB2aXJ0dWFsIElu
dFNpemUgc2l6ZSgpIGNvbnN0OwogCi0gICAgcHJpdmF0ZToKICAgICAgICAgUERGRG9jdW1lbnRJ
bWFnZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3IpOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRNYWNBVFNVSS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250TWFjQVRTVUkubW0JKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRm9udE1hY0FUU1VJLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsOCAr
MTU0LDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFUU1VTdHlsZShjb25zdCBTaQogICAgIGZv
bnREYXRhLT5tX0FUU1VTdHlsZUluaXRpYWxpemVkID0gdHJ1ZTsKIH0KIAotc3RhdGljIE9TU3Rh
dHVzIG92ZXJyaWRlTGF5b3V0T3BlcmF0aW9uKEFUU1VMYXlvdXRPcGVyYXRpb25TZWxlY3RvciBp
Q3VycmVudE9wZXJhdGlvbiwgQVRTVUxpbmVSZWYgaUxpbmVSZWYsIFVSZWZDb24gaVJlZkNvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppT3BlcmF0aW9u
Q2FsbGJhY2tQYXJhbWV0ZXJQdHIsIEFUU1VMYXlvdXRPcGVyYXRpb25DYWxsYmFja1N0YXR1cyAq
b0NhbGxiYWNrU3RhdHVzKQorc3RhdGljIE9TU3RhdHVzIG92ZXJyaWRlTGF5b3V0T3BlcmF0aW9u
KEFUU1VMYXlvdXRPcGVyYXRpb25TZWxlY3RvciwgQVRTVUxpbmVSZWYgaUxpbmVSZWYsIFVSZWZD
b24gaVJlZkNvbiwgdm9pZCosIEFUU1VMYXlvdXRPcGVyYXRpb25DYWxsYmFja1N0YXR1cyogb0Nh
bGxiYWNrU3RhdHVzKQogewogICAgIEFUU1VMYXlvdXRQYXJhbWV0ZXJzKiBwYXJhbXMgPSByZWlu
dGVycHJldF9jYXN0PEFUU1VMYXlvdXRQYXJhbWV0ZXJzKj4oaVJlZkNvbik7CiAgICAgT1NTdGF0
dXMgc3RhdHVzOwpAQCAtNTkyLDcgKzU5MSw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dChjb24KICAgICAgICAgICAgTUlOKEZpeGVkVG9GbG9hdChmaXJzdEdseXBoQm91
bmRzLnVwcGVyTGVmdC54KSwgRml4ZWRUb0Zsb2F0KGZpcnN0R2x5cGhCb3VuZHMubG93ZXJMZWZ0
LngpKTsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QK
K2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgaW50IHgsIGJvb2wgLyppbmNsdWRlUGFydGlhbEdseXBocyovKSBjb25zdAogewogICAg
IE93bkFycmF5UHRyPFVDaGFyPiBjaGFyYWN0ZXJzV2l0aE92ZXJyaWRlOwogICAgIFRleHRSdW4g
YWRqdXN0ZWRSdW4gPSBjb3B5UnVuRm9yRGlyZWN0aW9uYWxPdmVycmlkZUlmTmVjZXNzYXJ5KHJ1
biwgY2hhcmFjdGVyc1dpdGhPdmVycmlkZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1P
cGVyYXRpb24uaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWRl
bnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24oKSk7CiAgICAgfQogICAgICAgICAKK3ByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBJ
REVOVElUWTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0gSURFTlRJ
VFk7IH0KQEAgLTQ1LDE3ICs0NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpc1NhbWVU
eXBlKG8pOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKKyAgICB2aXJ0
dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBm
cm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpCisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uKiwgZG91YmxlLCBib29sKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgfQogCi1wcml2YXRlOgogICAgIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uKCkKICAg
ICB7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2aXNpb24g
Mzk1ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihh
LCBiLCBjLCBkLCBlLCBmKSk7CiAgICAgfQogCitwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBp
c0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV9hID09IDEgJiYgbV9iID09IDAgJiYgbV9jID09
IDAgJiYgbV9kID09IDEgJiYgbV9lID09IDAgJiYgbV9mID09IDA7IH0KICAgICB2aXJ0dWFsIE9w
ZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1BVFJJWDsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykg
Y29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0gTUFUUklYOyB9CkBAIC00OSw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYSA9PSBtLT5tX2EgJiYgbV9iID09
IG0tPm1fYiAmJiBtX2MgPT0gbS0+bV9jICYmIG1fZCA9PSBtLT5tX2QgJiYgbV9lID09IG0tPm1f
ZSAmJiBtX2YgPT0gbS0+bV9mOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29u
c3QKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnN0IEludFNpemUmKSBjb25zdAogICAgIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJp
eChtX2EsIG1fYiwgbV9jLCBtX2QsIG1fZSwgbV9mKTsKICAgICAgICAgdHJhbnNmb3JtID0gbWF0
cml4ICogdHJhbnNmb3JtOwpAQCAtNTgsNyArNTksNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxz
ZSk7CiAgICAgCi1wcml2YXRlOgogICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUg
YSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQogICAg
ICAgICA6IG1fYShhKQogICAgICAgICAsIG1fYihiKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9hbmdsZSA9PSByLT5tX2Fu
Z2xlOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKKyAgICB2aXJ0dWFs
IGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIC8q
Ym9yZGVyQm94U2l6ZSovKSBjb25zdAogICAgIHsKICAgICAgICAgdHJhbnNmb3JtLnJvdGF0ZSht
X2FuZ2xlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uLmgJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKHN4LCBzeSwgdHlwZSkpOwogICAgIH0KIAorcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1feCA9PSAxICYmICBtX3kg
PT0gMTsgfQogICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUo
KSA9PSBtX3R5cGU7IH0KQEAgLTQ4LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV94ID09IHMtPm1feCAmJiBtX3kgPT0gcy0+bV95OwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9v
bCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVy
Qm94U2l6ZSkgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmKSBjb25zdAogICAgIHsKICAgICAgICAgdHJhbnNmb3Jt
LnNjYWxlKG1feCwgbV95KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTYsNyArNTcsNiBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBi
bGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9v
bCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7CiAKLXByaXZhdGU6CiAgICAgU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24oZG91YmxlIHN4LCBkb3VibGUgc3ksIE9wZXJhdGlvblR5cGUgdHlwZSkKICAg
ICAgICAgOiBtX3goc3gpCiAgICAgICAgICwgbV95KHN5KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbi5oCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24oYW5nbGVYLCBhbmdsZVksIHR5cGUpKTsKICAgICB9CiAKK3ByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlWCA9
PSAwICYmIG1fYW5nbGVZID09IDA7IH0KICAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3Bl
cmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby5n
ZXRPcGVyYXRpb25UeXBlKCkgPT0gbV90eXBlOyB9CkBAIC00OCw3ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fYW5nbGVYID09IHMtPm1fYW5nbGVYICYmIG1fYW5nbGVZID09IHMt
Pm1fYW5nbGVZOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKKyAgICB2
aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNp
emUmKSBjb25zdAogICAgIHsKICAgICAgICAgdHJhbnNmb3JtLnNrZXcobV9hbmdsZVgsIG1fYW5n
bGVZKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTYsNyArNTcsNiBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRl
bnRpdHkgPSBmYWxzZSk7CiAgICAgCi1wcml2YXRlOgogICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRp
b24oZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFuZ2xlWSwgT3BlcmF0aW9uVHlwZSB0eXBlKQogICAg
ICAgICA6IG1fYW5nbGVYKGFuZ2xlWCkKICAgICAgICAgLCBtX2FuZ2xlWShhbmdsZVkpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Ry
YW5zZm9ybU9wZXJhdGlvbi5oCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9y
bU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpID0gMDsKIAogICAgIHZpcnR1
YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb24mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0JKHJldmlzaW9u
IDM5NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKFN0cmluZyog
dGl0bGUpIGNvCiAgICAgcmV0dXJuIG1fcGFzdGVib2FyZEhlbHBlci0+dXJsRnJvbVBhc3RlYm9h
cmQoW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3RlYm9hcmRdLCB0aXRsZSk7CiB9CiAK
LVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRG9jdW1l
bnQqIGRvYykgY29uc3QKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFz
RnJhZ21lbnQoRG9jdW1lbnQqKSBjb25zdAogewogICAgIHJldHVybiBbbV9wYXN0ZWJvYXJkSGVs
cGVyLT5mcmFnbWVudEZyb21QYXN0ZWJvYXJkKFttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQ
YXN0ZWJvYXJkXSkgX2RvY3VtZW50RnJhZ21lbnRdOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuaAkocmV2
aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgog
CiBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIHN1YmNsYXNz
IG1heSAic2hhZG93IiB0aGlzIG1ldGhvZCB0byBjb21wYXJlIHBsYXRmb3JtIHNwZWNpZmljIGZp
ZWxkcwotICAgIHN0YXRpYyBib29sIHBsYXRmb3JtQ29tcGFyZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZUJhc2UmIGEsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZSYgYikg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHN0YXRpYyBib29sIHBsYXRmb3JtQ29tcGFyZShjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UmLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUJhc2UmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBib29sIG1faXNOdWxsOwogICAgIFByb3Rl
Y3Rpb25TcGFjZSBtX3Byb3RlY3Rpb25TcGFjZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUVycm9yQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5oCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoKSB7fQog
CiAgICAgLy8gVGhlIFJlc291cmNlRXJyb3Igc3ViY2xhc3MgbWF5ICJzaGFkb3ciIHRoaXMgbWV0
aG9kIHRvIGNvbXBhcmUgcGxhdGZvcm0gc3BlY2lmaWMgZmllbGRzCi0gICAgc3RhdGljIGJvb2wg
cGxhdGZvcm1Db21wYXJlKGNvbnN0IFJlc291cmNlRXJyb3ImIGEsIGNvbnN0IFJlc291cmNlRXJy
b3ImIGIpIHsgcmV0dXJuIHRydWU7IH0KKyAgICBzdGF0aWMgYm9vbCBwbGF0Zm9ybUNvbXBhcmUo
Y29uc3QgUmVzb3VyY2VFcnJvciYsIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IHJldHVybiB0cnVl
OyB9CiAKICAgICBTdHJpbmcgbV9kb21haW47CiAgICAgaW50IG1fZXJyb3JDb2RlOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDExICs2MywxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgflJlc291cmNlSGFuZGxlQ2xpZW50KCkgeyB9CiAKICAg
ICAgICAgLy8gcmVxdWVzdCBtYXkgYmUgbW9kaWZpZWQKLSAgICAgICAgdmlydHVhbCB2b2lkIHdp
bGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpIHsgfQotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNT
ZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSB7IH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIC8qcmVkaXJlY3RSZXNwb25zZSovKSB7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFJlc291cmNlSGFuZGxlKiwgdW5zaWdu
ZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0
ZXNUb0JlU2VudCovKSB7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFy
KiwgaW50LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5n
dGhSZWNlaXZlZCovKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmco
UmVzb3VyY2VIYW5kbGUqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxlKikgeyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAkocmV2aXNpb24gMzk1ODQpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBsYXRmb3Jt
TGF6eUluaXQoKSB7IH0KIAogICAgIC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1h
eSAic2hhZG93IiB0aGlzIG1ldGhvZCB0byBjb21wYXJlIHBsYXRmb3JtIHNwZWNpZmljIGZpZWxk
cwotICAgIHN0YXRpYyBib29sIHBsYXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiBhLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBiKSB7IHJldHVybiB0cnVlOyB9CisgICAgc3Rh
dGljIGJvb2wgcGxhdGZvcm1Db21wYXJlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgS1VSTCBtX3VybDsKICAg
ICBTdHJpbmcgbV9taW1lVHlwZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9E
TlNDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0RO
U0NGTmV0LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvRE5TQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQordm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFt
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURh
dGFTdHJlYW1NYWMubW0JKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIy
Myw3IEBAIHN0YXRpYyB2b2lkIGZvcm1GaW5hbGl6ZShDRlJlYWRTdHJlYW1SZWYKICAgICBkZWxl
dGUgZm9ybTsKIH0KIAotc3RhdGljIEJvb2xlYW4gZm9ybU9wZW4oQ0ZSZWFkU3RyZWFtUmVmIHN0
cmVhbSwgQ0ZTdHJlYW1FcnJvciogZXJyb3IsIEJvb2xlYW4qIG9wZW5Db21wbGV0ZSwgdm9pZCog
Y29udGV4dCkKK3N0YXRpYyBCb29sZWFuIGZvcm1PcGVuKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJl
YW1FcnJvciogZXJyb3IsIEJvb2xlYW4qIG9wZW5Db21wbGV0ZSwgdm9pZCogY29udGV4dCkKIHsK
ICAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3JtID0gc3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZpZWxk
cyo+KGNvbnRleHQpOwogCkBAIC0yNzksMTQgKzI3OSwxNCBAQCBzdGF0aWMgQm9vbGVhbiBmb3Jt
Q2FuUmVhZChDRlJlYWRTdHJlYW1SCiAgICAgcmV0dXJuIENGUmVhZFN0cmVhbUhhc0J5dGVzQXZh
aWxhYmxlKGZvcm0tPmN1cnJlbnRTdHJlYW0pOwogfQogCi1zdGF0aWMgdm9pZCBmb3JtQ2xvc2Uo
Q0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCogY29udGV4dCkKK3N0YXRpYyB2b2lkIGZvcm1D
bG9zZShDRlJlYWRTdHJlYW1SZWYsIHZvaWQqIGNvbnRleHQpCiB7CiAgICAgRm9ybVN0cmVhbUZp
ZWxkcyogZm9ybSA9IHN0YXRpY19jYXN0PEZvcm1TdHJlYW1GaWVsZHMqPihjb250ZXh0KTsKIAog
ICAgIGNsb3NlQ3VycmVudFN0cmVhbShmb3JtKTsKIH0KIAotc3RhdGljIHZvaWQgZm9ybVNjaGVk
dWxlKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIENGUnVuTG9vcFJlZiBydW5Mb29wLCBDRlN0cmlu
Z1JlZiBydW5Mb29wTW9kZSwgdm9pZCogY29udGV4dCkKK3N0YXRpYyB2b2lkIGZvcm1TY2hlZHVs
ZShDRlJlYWRTdHJlYW1SZWYsIENGUnVuTG9vcFJlZiBydW5Mb29wLCBDRlN0cmluZ1JlZiBydW5M
b29wTW9kZSwgdm9pZCogY29udGV4dCkKIHsKICAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3JtID0g
c3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZpZWxkcyo+KGNvbnRleHQpOwogCkBAIC0yOTUsNyArMjk1
LDcgQEAgc3RhdGljIHZvaWQgZm9ybVNjaGVkdWxlKENGUmVhZFN0cmVhbVJlZgogICAgIGZvcm0t
PnNjaGVkdWxlZFJ1bkxvb3BQYWlycy5hZGQoU2NoZWR1bGVQYWlyOjpjcmVhdGUocnVuTG9vcCwg
cnVuTG9vcE1vZGUpKTsKIH0KIAotc3RhdGljIHZvaWQgZm9ybVVuc2NoZWR1bGUoQ0ZSZWFkU3Ry
ZWFtUmVmIHN0cmVhbSwgQ0ZSdW5Mb29wUmVmIHJ1bkxvb3AsIENGU3RyaW5nUmVmIHJ1bkxvb3BN
b2RlLCB2b2lkKiBjb250ZXh0KQorc3RhdGljIHZvaWQgZm9ybVVuc2NoZWR1bGUoQ0ZSZWFkU3Ry
ZWFtUmVmLCBDRlJ1bkxvb3BSZWYgcnVuTG9vcCwgQ0ZTdHJpbmdSZWYgcnVuTG9vcE1vZGUsIHZv
aWQqIGNvbnRleHQpCiB7CiAgICAgRm9ybVN0cmVhbUZpZWxkcyogZm9ybSA9IHN0YXRpY19jYXN0
PEZvcm1TdHJlYW1GaWVsZHMqPihjb250ZXh0KTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9OZXR3b3JrU3RhdGVOb3RpZmllck1hYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9OZXR3b3JrU3RhdGVOb3RpZmllck1hYy5jcHAJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9OZXR3b3JrU3Rh
dGVOb3RpZmllck1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBO
ZXR3b3JrU3RhdGVOb3RpZmllcjo6dXBkYXRlU3RhdGUoKQogICAgIH0KIH0KIAotdm9pZCBOZXR3
b3JrU3RhdGVOb3RpZmllcjo6ZHluYW1pY1N0b3JlQ2FsbGJhY2soU0NEeW5hbWljU3RvcmVSZWYg
c3RvcmUsIENGQXJyYXlSZWYgY2hhbmdlZEtleXMsIHZvaWQgKmluZm8pIAordm9pZCBOZXR3b3Jr
U3RhdGVOb3RpZmllcjo6ZHluYW1pY1N0b3JlQ2FsbGJhY2soU0NEeW5hbWljU3RvcmVSZWYsIENG
QXJyYXlSZWYsIHZvaWQqIGluZm8pIAogewogICAgIE5ldHdvcmtTdGF0ZU5vdGlmaWVyKiBub3Rp
ZmllciA9IHN0YXRpY19jYXN0PE5ldHdvcmtTdGF0ZU5vdGlmaWVyKj4oaW5mbyk7CiAgICAgCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAJKHJldmlzaW9uIDM5
NTg0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIFRleHRDb2RlY1VURjE2OjpyZWdpc3RlckNv
ZGVjcyhUZXh0CiAgICAgcmVnaXN0cmFyKCJVVEYtMTZCRSIsIG5ld1N0cmVhbWluZ1RleHREZWNv
ZGVyVVRGMTZCRSwgMCk7CiB9CiAKLVN0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKGNvbnN0
IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sIHN0b3BPbkVycm9yLCBib29s
JiBzYXdFcnJvcikKK1N0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5
dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sJikKIHsKICAgICBpZiAoIWxlbmd0
aCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtODksMTggKzg5LDE5IEBAIFN0cmluZyBU
ZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIKICAgICAgICAgbnVtQ2hhcnMgLT0gMTsK
ICAgICB9CiAKLSAgICBpZiAobV9saXR0bGVFbmRpYW4pCisgICAgaWYgKG1fbGl0dGxlRW5kaWFu
KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hhcnM7ICsraSkgewogICAg
ICAgICAgICAgVUNoYXIgYyA9IHBbMF0gfCAocFsxXSA8PCA4KTsKICAgICAgICAgICAgIHAgKz0g
MjsKICAgICAgICAgICAgICpxKysgPSBjOwogICAgICAgICB9Ci0gICAgZWxzZQorICAgIH0gZWxz
ZSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hhcnM7ICsraSkgewogICAg
ICAgICAgICAgVUNoYXIgYyA9IChwWzBdIDw8IDgpIHwgcFsxXTsKICAgICAgICAgICAgIHAgKz0g
MjsKICAgICAgICAgICAgICpxKysgPSBjOwogICAgICAgICB9CisgICAgfQogCiAgICAgaWYgKG51
bUJ5dGVzICYgMSkgewogICAgICAgICBBU1NFUlQoIW1faGF2ZUJ1ZmZlcmVkQnl0ZSk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gMzk1ODQpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzksNyArNzksNyBAQCBGaXhlZFRhYmxlTGF5b3V0OjpGaXhlZFRhYmxlTGF5b3V0KFJlbmRl
CiB7CiB9CiAKLWludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQgdGFibGVX
aWR0aCkKK2ludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQpCiB7CiAgICAg
aW50IHVzZWRXaWR0aCA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNp
b24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzksNyArMjM5LDcgQEAgYm9vbCBJbmxpbmVCb3g6OmNhbkFjY29tbW9kYXRlRWxs
aXBzaXMoYgogICAgIHJldHVybiAhKGJveFJlY3QuaW50ZXJzZWN0cyhlbGxpcHNpc1JlY3QpKTsK
IH0KIAotaW50IElubGluZUJveDo6cGxhY2VFbGxpcHNpc0JveChib29sIGx0ciwgaW50IGJsb2Nr
RWRnZSwgaW50IGVsbGlwc2lzV2lkdGgsIGJvb2wmKQoraW50IElubGluZUJveDo6cGxhY2VFbGxp
cHNpc0JveChib29sLCBpbnQsIGludCwgYm9vbCYpCiB7CiAgICAgLy8gVXNlIC0xIHRvIG1lYW4g
IndlIGRpZG4ndCBzZXQgdGhlIHBvc2l0aW9uLiIKICAgICByZXR1cm4gLTE7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDggKzEyNCw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgdG9wUG9zaXRpb24sIGlu
dCYgYm90dG9tUG9zaXRpb24sIGludCYgc2VsZWN0aW9uVG9wLCBpbnQmIHNlbGVjdGlvbkJvdHRv
bSk7CiAgICAgdm9pZCBzaHJpbmtCb3hlc1dpdGhOb1RleHRDaGlsZHJlbihpbnQgdG9wUG9zaXRp
b24sIGludCBib3R0b21Qb3NpdGlvbik7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldFZlcnRp
Y2FsT3ZlcmZsb3dQb3NpdGlvbnMoaW50IHRvcCwgaW50IGJvdHRvbSkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldFZlcnRpY2FsU2VsZWN0aW9uUG9zaXRpb25zKGludCB0b3AsIGludCBib3R0b20p
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKGludCAv
KnRvcCovLCBpbnQgLypib3R0b20qLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZlcnRpY2Fs
U2VsZWN0aW9uUG9zaXRpb25zKGludCAvKnRvcCovLCBpbnQgLypib3R0b20qLykgeyB9CiAgICAg
aW50IG1heEhvcml6b250YWxWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4SG9y
aXpvbnRhbFZpc3VhbE92ZXJmbG93OyB9CiAKICAgICB2b2lkIHJlbW92ZUNoaWxkKElubGluZUJv
eCogY2hpbGQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lUnVuQm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lUnVuQm94LmgJKHJldmlzaW9uIDM5NTg0
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lUnVuQm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDggKzQxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmV4dExpbmVCb3goSW5saW5lUnVu
Qm94KiBuKSB7IG1fbmV4dExpbmUgPSBuOyB9CiAgICAgdm9pZCBzZXRQcmV2aW91c0xpbmVCb3go
SW5saW5lUnVuQm94KiBwKSB7IG1fcHJldkxpbmUgPSBwOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRCb3hEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50
IHR5KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RGVjb3JhdGlvbnMoUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgYm9vbCBwYWludGVkQ2hpbGRyZW4gPSBm
YWxzZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUZXh0RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQg
Lyp0eCovLCBpbnQgLyp0eSovLCBib29sIC8qcGFpbnRlZENoaWxkcmVuKi8gPSBmYWxzZSkgeyB9
CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgSW5saW5lUnVuQm94KiBtX3ByZXZMaW5lOyAgLy8gVGhl
IHByZXZpb3VzIGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3
IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6aXNMaW5lQnJlYWsoKSBjb25zdAogICAgIHJldHVybiBv
YmplY3QoKS0+aXNCUigpIHx8IChvYmplY3QoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkg
JiYgbGVuKCkgPT0gMSAmJiAoKnRleHRPYmplY3QoKS0+dGV4dCgpKVtzdGFydCgpXSA9PSAnXG4n
KTsKIH0KIAotYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5KQorYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGlu
dCB0eSkKIHsKICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNDkzLDcgKzQ5Myw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQo
aW4KICAgICBlUG9zID0gbWluKGVuZFBvcyAtIG1fc3RhcnQsIChpbnQpbV9sZW4pOwogfQogCi12
b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCogZikKK3Zv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBpbnQgdHgsIGludCB0eSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250KikKIHsKICAg
ICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHNlbGVjdGlvbiB0byBwYWludCBhdCBhbGwuCiAgICAgaW50
IHNQb3MsIGVQb3M7CkBAIC01MjEsNyArNTIxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dFNlbGVjdGlvbihHcmFwaAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAotdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGludCB0eCwgaW50IHR5LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQqIGYs
IGludCBzdGFydFBvcywgaW50IGVuZFBvcykKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludCB0
eSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250KiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5k
UG9zKQogewogICAgIGludCBvZmZzZXQgPSBtX3N0YXJ0OwogICAgIGludCBzUG9zID0gbWF4KHN0
YXJ0UG9zIC0gb2Zmc2V0LCAwKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5jcHAJKHJldmlzaW9u
IDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw3IEBAIGludCBSZW5kZXJCUjo6YmFzZWxpbmVQb3NpdGlvbihib29sIGZp
cnMKICAgICByZXR1cm4gUmVuZGVyVGV4dDo6YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGlz
Um9vdExpbmVCb3gpOwogfQogCi1pbnQgUmVuZGVyQlI6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExp
bmUsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK2ludCBSZW5kZXJCUjo6bGluZUhlaWdodChi
b29sIGZpcnN0TGluZSwgYm9vbCAvKmlzUm9vdExpbmVCb3gqLykgY29uc3QKIHsKICAgICBpZiAo
Zmlyc3RUZXh0Qm94KCkgJiYgIWZpcnN0VGV4dEJveCgpLT5pc1RleHQoKSkKICAgICAgICAgcmV0
dXJuIDA7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAzOTU4NCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEyMCw3ICsyMTIwLDcgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6ZmlsbFZlcnRpY2FsU2VsZWN0
aQogfQogCiBJbnRSZWN0IFJlbmRlckJsb2NrOjpmaWxsTGVmdFNlbGVjdGlvbkdhcChSZW5kZXJP
YmplY3QqIHNlbE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgaGVpZ2h0LCBSZW5kZXJCbG9j
ayogcm9vdEJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGJsb2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyog
cGFpbnRJbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGJsb2NrWCwgaW50IC8qYmxvY2tZKi8sIGludCB0eCwgaW50IHR5LCBjb25zdCBQYWludEluZm8q
IHBhaW50SW5mbykKIHsKICAgICBpbnQgdG9wID0geVBvcyArIHR5OwogICAgIGludCBsZWZ0ID0g
YmxvY2tYICsgbWF4KGxlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCB5UG9zKSwgbGVmdFNl
bGVjdGlvbk9mZnNldChyb290QmxvY2ssIHlQb3MgKyBoZWlnaHQpKTsKQEAgLTIxMzYsNyArMjEz
Niw3IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmZpbGxMZWZ0U2VsZWN0aW9uR2EKIH0KIAogSW50
UmVjdCBSZW5kZXJCbG9jazo6ZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKFJlbmRlck9iamVjdCogc2Vs
T2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCBoZWlnaHQsIFJlbmRlckJsb2NrKiByb290Qmxv
Y2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2Nr
WCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZv
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja1gs
IGludCAvKmJsb2NrWSovLCBpbnQgdHgsIGludCB0eSwgY29uc3QgUGFpbnRJbmZvKiBwYWludElu
Zm8pCiB7CiAgICAgaW50IGxlZnQgPSBtYXgoeFBvcyArIHR4LCBibG9ja1ggKyBtYXgobGVmdFNl
bGVjdGlvbk9mZnNldChyb290QmxvY2ssIHlQb3MpLCBsZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RC
bG9jaywgeVBvcyArIGhlaWdodCkpKTsKICAgICBpbnQgdG9wID0geVBvcyArIHR5OwpAQCAtMzA4
OSw3ICszMDg5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkVmlzdWFsT3ZlcmZsb3coY29ucwog
ICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVyZmxvd0hlaWdodCwgci5ib3R0b20oKSk7
CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5KQorYm9vbCBS
ZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgaW50LCBpbnQsIGludCwgaW50KQogewogICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNp
b24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBib3JkZXJG
aXRBZGp1c3QoaW50JiB4LCBpbnQmIHcpIGNvbnN0OyAvLyBTaHJpbmsgdGhlIGJveCBpbiB3aGlj
aCB0aGUgYm9yZGVyIHBhaW50cyBpZiBib3JkZXItZml0IGlzIHNldC4KIAogICAgIC8vIENhbGxl
ZCB0byBsYXkgb3V0IHRoZSBsZWdlbmQgZm9yIGEgZmllbGRzZXQuCi0gICAgdmlydHVhbCBSZW5k
ZXJPYmplY3QqIGxheW91dExlZ2VuZChib29sIHJlbGF5b3V0Q2hpbGRyZW4pIHsgcmV0dXJuIDA7
IH07CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxheW91dExlZ2VuZChib29sIC8qcmVsYXlv
dXRDaGlsZHJlbiovKSB7IHJldHVybiAwOyB9CiAKICAgICAvLyB0aGUgaW1wbGVtZW50YXRpb24g
b2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaXMgaW4gYmlkaS5jcHAKICAgICBzdHJ1Y3QgRmxv
YXRXaXRoUmVjdCB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDM5NTg0
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjczNSw3ICsyNzM1LDcgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGlu
ZQogICAgIHJldHVybiByZWN0OwogfQogCi1pbnQgUmVuZGVyQm94Ojpsb3dlc3RQb3NpdGlvbihi
b29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdAoraW50
IFJlbmRlckJveDo6bG93ZXN0UG9zaXRpb24oYm9vbCAvKmluY2x1ZGVPdmVyZmxvd0ludGVyaW9y
Ki8sIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0CiB7CiAgICAgaWYgKCFpbmNsdWRlU2VsZiB8fCAh
bV93aWR0aCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzQ1LDcgKzI3NDUsNyBAQCBpbnQgUmVu
ZGVyQm94Ojpsb3dlc3RQb3NpdGlvbihib29sIGluY2x1CiAgICAgcmV0dXJuIGJvdHRvbTsKIH0K
IAotaW50IFJlbmRlckJveDo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJ
bnRlcmlvciwgYm9vbCBpbmNsdWRlU2VsZikgY29uc3QKK2ludCBSZW5kZXJCb3g6OnJpZ2h0bW9z
dFBvc2l0aW9uKGJvb2wgLyppbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciovLCBib29sIGluY2x1ZGVT
ZWxmKSBjb25zdAogewogICAgIGlmICghaW5jbHVkZVNlbGYgfHwgIW1faGVpZ2h0KQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTI3NTUsNyArMjc1NSw3IEBAIGludCBSZW5kZXJCb3g6OnJpZ2h0bW9z
dFBvc2l0aW9uKGJvb2wgaW4KICAgICByZXR1cm4gcmlnaHQ7CiB9CiAKLWludCBSZW5kZXJCb3g6
OmxlZnRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNs
dWRlU2VsZikgY29uc3QKK2ludCBSZW5kZXJCb3g6OmxlZnRtb3N0UG9zaXRpb24oYm9vbCAvKmlu
Y2x1ZGVPdmVyZmxvd0ludGVyaW9yKi8sIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0CiB7CiAgICAg
aWYgKCFpbmNsdWRlU2VsZiB8fCAhbV9oZWlnaHQpCiAgICAgICAgIHJldHVybiBtX3dpZHRoOwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGlj
OgogICAgIGludCBjYWxjQ29udGVudEJveFdpZHRoKGludCB3aWR0aCkgY29uc3Q7CiAgICAgaW50
IGNhbGNDb250ZW50Qm94SGVpZ2h0KGludCBoZWlnaHQpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2
b2lkIGJvcmRlckZpdEFkanVzdChpbnQmIHgsIGludCYgdykgY29uc3Qge307IC8vIFNocmluayB0
aGUgYm94IGluIHdoaWNoIHRoZSBib3JkZXIgcGFpbnRzIGlmIGJvcmRlci1maXQgaXMgc2V0Lgor
ICAgIHZpcnR1YWwgdm9pZCBib3JkZXJGaXRBZGp1c3QoaW50JiAvKngqLywgaW50JiAvKncqLykg
Y29uc3QgeyB9IC8vIFNocmluayB0aGUgYm94IGluIHdoaWNoIHRoZSBib3JkZXIgcGFpbnRzIGlm
IGJvcmRlci1maXQgaXMgc2V0LgogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgbm93IHB1YmxpYyBz
byB0aGF0IGNlbnRlcmVkIG9iamVjdHMgbGlrZSB0YWJsZXMgdGhhdCBhcmUKICAgICAvLyBzaGlm
dGVkIHJpZ2h0IGJ5IGxlZnQtYWxpZ25lZCBmbG9hdHMgY2FuIHJlY29tcHV0ZSB0aGVpciBsZWZ0
IGFuZApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCShyZXZpc2lvbiAz
OTU4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3OSw3ICs2NzksNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6YWRkTGluZUJv
eFJlY3RzKFZlCiAgICAgfQogfQogCi12b2lkIFJlbmRlckNvbnRhaW5lcjo6Y29sbGVjdEFic29s
dXRlTGluZUJveFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQpCit2b2lkIFJlbmRlckNvbnRh
aW5lcjo6Y29sbGVjdEFic29sdXRlTGluZUJveFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFk
cywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgYm9vbCAvKnVzZVNlbGVjdGlvbkhlaWdo
dCovKQogewogICAgIGlmICghbV9maXJzdENoaWxkICYmIChpc0lubGluZSgpIHx8IGlzQW5vbnlt
b3VzQmxvY2soKSkpIHsKICAgICAgICAgYWJzb2x1dGVRdWFkcyhxdWFkcyk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDcgKzMxMCw3IEBAIHZvaWQg
UmVuZGVyRmxvdzo6ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2gKICAgICB9CiB9CiAKLWludCBSZW5k
ZXJGbG93OjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3gpIGNv
bnN0CitpbnQgUmVuZGVyRmxvdzo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCAvKmlz
Um9vdExpbmVCb3gqLykgY29uc3QKIHsKICAgICBpZiAoZmlyc3RMaW5lKSB7CiAgICAgICAgIFJl
bmRlclN0eWxlKiBzID0gc3R5bGUoZmlyc3RMaW5lKTsKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lk
IFJlbmRlckZsb3c6OmRpcnR5TGluZUJveGVzKGJvb2wgZnVsCiAgICAgfQogfQogCi1JbmxpbmVC
b3gqIFJlbmRlckZsb3c6OmNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwg
Ym9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1bikKK0lubGluZUJveCogUmVuZGVyRmxv
dzo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9vdExp
bmVCb3gsIGJvb2wgLyppc09ubHlSdW4qLykKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDM5NTg0KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NjEsNyArNjYxLDcgQEAgaW50IFJlbmRlckZyYW1lU2V0OjpoaXRUZXN0U3BsaXQoY29uc3Qg
RwogICAgIHJldHVybiBub1NwbGl0OwogfQogCi1ib29sIFJlbmRlckZyYW1lU2V0Ojppc0NoaWxk
QWxsb3dlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citi
b29sIFJlbmRlckZyYW1lU2V0Ojppc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBS
ZW5kZXJTdHlsZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNoaWxkLT5pc0ZyYW1lKCkgfHwgY2hp
bGQtPmlzRnJhbWVTZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgYm9vbCBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2
ZXI6OnNob3VsZEltYQogCiBIYXNoTWFwPFJlbmRlckltYWdlKiwgUmVuZGVySW1hZ2VTY2FsZURh
dGEqPiogUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpnSW1hZ2VzID0gMDsKIAotdm9pZCBSZW5k
ZXJJbWFnZTo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJJbWFnZT4q
IHRpbWVyKQordm9pZCBSZW5kZXJJbWFnZTo6aGlnaFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZChU
aW1lcjxSZW5kZXJJbWFnZT4qKQogewogICAgIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6aGln
aFF1YWxpdHlSZXBhaW50VGltZXJGaXJlZCh0aGlzKTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhp
Z2hRdWFsaXR5UmVwYWludFRpbWVyRmlyZWQoVGltZXI8UmVuZGVySW1hZ2U+Kik7CiAKIHByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIEltYWdlKiBpbWFnZShpbnQgdyA9IDAsIGludCBoID0gMCkgeyBy
ZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCkgOiBudWxsSW1hZ2Uo
KTsgfQorICAgIHZpcnR1YWwgSW1hZ2UqIGltYWdlKGludCAvKncqLyA9IDAsIGludCAvKmgqLyA9
IDApIHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5pbWFnZSgpIDogbnVs
bEltYWdlKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FjaGVkSW1hZ2UgJiYgbV9jYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpOyB9CiAg
ICAgdmlydHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIDog
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SW1hZ2VDb250YWluZXJTaXplKGNvbnN0IElu
dFNpemUmIHNpemUpIGNvbnN0IHsgaWYgKG1fY2FjaGVkSW1hZ2UpIG1fY2FjaGVkSW1hZ2UtPnNl
dEltYWdlQ29udGFpbmVyU2l6ZShzaXplKTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NjIsNyArMjQ2Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OnNob3VsZEJlT3ZlcmZsb3dPbmx5KCkKICAgICAgICAgICAgIWlzVHJhbnNwYXJlbnQoKTsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFJlbmRlclN0eWxlOjpEaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQo
UmVuZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBib29sIGlzT3Zl
cmZsb3dPbmx5ID0gc2hvdWxkQmVPdmVyZmxvd09ubHkoKTsKICAgICBpZiAoaXNPdmVyZmxvd09u
bHkgIT0gbV9pc092ZXJmbG93T25seSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFJlbmRlckxpc3RC
b3g6OmNhbGNIZWlnaHQoKQogICAgIH0KIH0KIAotaW50IFJlbmRlckxpc3RCb3g6OmJhc2VsaW5l
UG9zaXRpb24oYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0CitpbnQgUmVuZGVyTGlz
dEJveDo6YmFzZWxpbmVQb3NpdGlvbihib29sLCBib29sKSBjb25zdAogewogICAgIHJldHVybiBo
ZWlnaHQoKSArIG1hcmdpblRvcCgpICsgbWFyZ2luQm90dG9tKCkgLSBiYXNlbGluZUFkanVzdG1l
bnQ7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDM5NTg0
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUzLDcgKzY1Myw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAgCi1ib29sIFJlbmRlck9iamVjdDo6Y2FuQmVQ
cm9ncmFtYXRpY2FsbHlTY3JvbGxlZChib29sIHNjcm9sbFRvQW5jaG9yKSBjb25zdAorYm9vbCBS
ZW5kZXJPYmplY3Q6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoYm9vbCkgY29uc3QKIHsK
ICAgICBpZiAoIWxheWVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MDIsNyArMTcw
Miw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludEJveFNoYWRvdyhHcmFwaGkKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjphZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+Jiwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCB1c2VTZWxlY3Rp
b25IZWlnaHQpCit2b2lkIFJlbmRlck9iamVjdDo6YWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCkKIHsKIH0KIApAQCAtMTc1MSw3ICsxNzUx
LDcgQEAgSW50UmVjdCBSZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRpbmdCbwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0Ojpjb2xsZWN0QWJzb2x1dGVMaW5lQm94
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKK3ZvaWQgUmVuZGVyT2Jq
ZWN0Ojpjb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCB1bnNp
Z25lZCwgdW5zaWduZWQsIGJvb2wpCiB7CiB9CiAKQEAgLTE5OTgsMTEgKzE5OTgsMTEgQEAgYm9v
bCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKGNvbnN0
IEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlck9iamVjdDo6cmVwYWludER1cmluZ0xheW91dElm
TW92ZWQoY29uc3QgSW50UmVjdCYpCiB7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50
T3ZlcmhhbmdpbmdGbG9hdHMoYm9vbCBwYWludEFsbERlc2NlbmRhbnRzKQordm9pZCBSZW5kZXJP
YmplY3Q6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sKQogewogfQogCkBAIC0yMDY2LDcg
KzIwNjYsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Y29tcHV0ZUFic29sdXRlUmVwYWluCiAgICAg
fQogfQogCi12b2lkIFJlbmRlck9iamVjdDo6ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBjaGlsZCkKK3ZvaWQgUmVuZGVyT2JqZWN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5n
ZWRDaGlsZChSZW5kZXJPYmplY3QqKQogewogfQogCkBAIC0yMzc5LDcgKzIzNzksNyBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFJlbmRlCiAgICAgfQogfQogCi12b2lkIFJl
bmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoUmVuZGVyU3R5bGU6OkRpZmYgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKQordm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdl
KFJlbmRlclN0eWxlOjpEaWZmIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBzZXRI
YXNCb3hEZWNvcmF0aW9ucyhtX3N0eWxlLT5oYXNCb3JkZXIoKSB8fCBtX3N0eWxlLT5oYXNCYWNr
Z3JvdW5kKCkgfHwgbV9zdHlsZS0+aGFzQXBwZWFyYW5jZSgpIHx8IG1fc3R5bGUtPmJveFNoYWRv
dygpKTsKIApAQCAtMjQ4MSw3ICsyNDgxLDcgQEAgSW50U2l6ZSBSZW5kZXJPYmplY3Q6Om9mZnNl
dEZyb21Db250YWluZQogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLUludFJlY3QgUmVuZGVyT2Jq
ZWN0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0
LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0ludFJlY3QgUmVuZGVyT2JqZWN0Ojpsb2Nh
bENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQog
ewogICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAqZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lID0gMDsKQEAgLTI2NzYsNyArMjY3Niw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphcmVu
YURlbGV0ZShSZW5kZXJBcmUKICAgICBhcmVuYS0+ZnJlZSgqKHNpemVfdCopYmFzZSwgYmFzZSk7
CiB9CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJPYmplY3Q6OnBvc2l0aW9uRm9yQ29vcmRpbmF0
ZXMoaW50IHgsIGludCB5KQorVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6cG9zaXRpb25G
b3JDb29yZGluYXRlcyhpbnQsIGludCkKIHsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVs
ZW1lbnQoKSwgY2FyZXRNaW5PZmZzZXQoKSwgRE9XTlNUUkVBTSk7CiB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDgzLDExICs0ODMsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQg
dHksIGludCB3LCBpbnQgaCwgY29uc3QgUmVuZGVyU3R5bGUqLCBib29sIGJlZ2luID0gdHJ1ZSwg
Ym9vbCBlbmQgPSB0cnVlKTsKIAogICAgIC8vIFJlbmRlckJveCBpbXBsZW1lbnRzIHRoaXMuCi0g
ICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludE1hc2soUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50
SW5mbyYsIGludCAvKnR4Ki8sIGludCAvKnR5Ki8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWlu
dE1hc2soUGFpbnRJbmZvJiwgaW50IC8qdHgqLywgaW50IC8qdHkqLykgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgQ29s
b3ImLCBjb25zdCBGaWxsTGF5ZXIqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBjbGlweSwgaW50IGNsaXBoLCBpbnQgdHgsIGludCB0eSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGlu
ZUZsb3dCb3gqIGJveCA9IDAsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zl
cikgeyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qY2xp
cFkqLywgaW50IC8qY2xpcEgqLywgaW50IC8qdHgqLywgaW50IC8qdHkqLywgaW50IC8qd2lkdGgq
LywgaW50IC8qaGVpZ2h0Ki8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lRmxvd0JveCogPSAwLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJj
ZU92ZXIpIHsgfQogCiAgICAgCiAgICAgLyoKQEAgLTg4NSw4ICs4ODUsOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBpbnQgcHJldmlvdXNPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0OwogICAgIHZp
cnR1YWwgaW50IG5leHRPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2
b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QqID0gMCk7
Ci0gICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIgZGF0YSwgY29u
c3QgSW50UmVjdCogPSAwKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNo
ZWRJbWFnZSosIGNvbnN0IEludFJlY3QqID0gMCk7CisgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hh
bmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCkgeyB9CiAgICAgdmlydHVh
bCBib29sIHdpbGxSZW5kZXJJbWFnZShDYWNoZWRJbWFnZSopOwogCiAgICAgdmlydHVhbCB2b2lk
IHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3BvcywgaW50JiBlcG9zKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclBhdGguY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTIgKzIwMCwxMiBAQCBi
b29sIFJlbmRlclBhdGg6OnJlcXVpcmVzTGF5ZXIoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
aW50IFJlbmRlclBhdGg6OmxpbmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3gpIGNv
bnN0CitpbnQgUmVuZGVyUGF0aDo6bGluZUhlaWdodChib29sLCBib29sKSBjb25zdAogewogICAg
IHJldHVybiByZWxhdGl2ZUJCb3godHJ1ZSkuaGVpZ2h0KCk7CiB9CiAKLWludCBSZW5kZXJQYXRo
OjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdAoraW50
IFJlbmRlclBhdGg6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gcmVsYXRpdmVCQm94KHRydWUpLmhlaWdodCgpOwogfQpAQCAtMjY5LDEyICsyNjksMTIg
QEAgdm9pZCBSZW5kZXJQYXRoOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbgogICAgIHJlY3RzLmFw
cGVuZChhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7CiB9CiAKLXZvaWQgUmVuZGVyUGF0
aDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwp
Cit2b2lkIFJlbmRlclBhdGg6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRz
LCBib29sKQogewogICAgIHF1YWRzLmFwcGVuZChhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3Qo
KSk7CiB9CiAKLWJvb2wgUmVuZGVyUGF0aDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCwg
aW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclBhdGg6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQg
X3gsIGludCBfeSwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAg
ICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQt
dGVzdCB0aGVuLgogICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQpA
QCAtNDE3LDcgKzQxNyw3IEBAIHN0YXRpYyB2b2lkIGRyYXdTdGFydEFuZE1pZE1hcmtlcnModm9p
ZCoKICAgICBkYXRhLmVsZW1lbnRJbmRleCsrOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyUGF0aDo6
ZHJhd01hcmtlcnNJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgUGF0aCYgcGF0aCkgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJQYXRo
OjpkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgUGF0aCYgcGF0aCkgY29uc3QKIHsKICAgICBEb2N1bWVudCogZG9jID0g
ZG9jdW1lbnQoKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2
aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjphZGp1
c3RPdmVyZmxvd0ZvckJvCiAgICAgfQogfQogCi1pbnQgUmVuZGVyUmVwbGFjZWQ6Om92ZXJmbG93
SGVpZ2h0KGJvb2wgaW5jbHVkZUludGVyaW9yKSBjb25zdAoraW50IFJlbmRlclJlcGxhY2VkOjpv
dmVyZmxvd0hlaWdodChib29sKSBjb25zdAogewogICAgIGlmIChtX2hhc092ZXJmbG93KSB7CiAg
ICAgICAgIEludFJlY3QgKnIgPSAmZ092ZXJmbG93UmVjdE1hcC0+ZmluZCh0aGlzKS0+c2Vjb25k
OwpAQCAtMzU1LDcgKzM1NSw3IEBAIGludCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dIZWlnaHQo
Ym9vbCAKICAgICByZXR1cm4gaGVpZ2h0KCk7CiB9CiAKLWludCBSZW5kZXJSZXBsYWNlZDo6b3Zl
cmZsb3dXaWR0aChib29sIGluY2x1ZGVJbnRlcmlvcikgY29uc3QKK2ludCBSZW5kZXJSZXBsYWNl
ZDo6b3ZlcmZsb3dXaWR0aChib29sKSBjb25zdAogewogICAgIGlmIChtX2hhc092ZXJmbG93KSB7
CiAgICAgICAgIEludFJlY3QgKnIgPSAmZ092ZXJmbG93UmVjdE1hcC0+ZmluZCh0aGlzKS0+c2Vj
b25kOwpAQCAtMzY1LDcgKzM2NSw3IEBAIGludCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dXaWR0
aChib29sIGkKICAgICByZXR1cm4gd2lkdGgoKTsKIH0KIAotaW50IFJlbmRlclJlcGxhY2VkOjpv
dmVyZmxvd0xlZnQoYm9vbCBpbmNsdWRlSW50ZXJpb3IpIGNvbnN0CitpbnQgUmVuZGVyUmVwbGFj
ZWQ6Om92ZXJmbG93TGVmdChib29sKSBjb25zdAogewogICAgIGlmIChtX2hhc092ZXJmbG93KQog
ICAgICAgICByZXR1cm4gZ092ZXJmbG93UmVjdE1hcC0+Z2V0KHRoaXMpLngoKTsKQEAgLTM3Myw3
ICszNzMsNyBAQCBpbnQgUmVuZGVyUmVwbGFjZWQ6Om92ZXJmbG93TGVmdChib29sIGluCiAgICAg
cmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dUb3AoYm9vbCBpbmNs
dWRlSW50ZXJpb3IpIGNvbnN0CitpbnQgUmVuZGVyUmVwbGFjZWQ6Om92ZXJmbG93VG9wKGJvb2wp
IGNvbnN0CiB7CiAgICAgaWYgKG1faGFzT3ZlcmZsb3cpCiAgICAgICAgIHJldHVybiBnT3ZlcmZs
b3dSZWN0TWFwLT5nZXQodGhpcykueSgpOwpAQCAtMzgxLDcgKzM4MSw3IEBAIGludCBSZW5kZXJS
ZXBsYWNlZDo6b3ZlcmZsb3dUb3AoYm9vbCBpbmMKICAgICByZXR1cm4gMDsKIH0KIAotSW50UmVj
dCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dSZWN0KGJvb2wgaW5jbHVkZUludGVyaW9yKSBjb25z
dAorSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dSZWN0KGJvb2wpIGNvbnN0CiB7CiAg
ICAgaWYgKG1faGFzT3ZlcmZsb3cpCiAgICAgICAgIHJldHVybiBnT3ZlcmZsb3dSZWN0TWFwLT5m
aW5kKHRoaXMpLT5zZWNvbmQ7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgbWlu
aW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50IC8qdHgqLywgaW50IC8qdHkqLykg
eyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgaW50cmluc2ljU2l6ZSgpIGNvbnN0OwogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHJldmlzaW9uIDM5NTg0
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA5LDEyICsyMDksMTIgQEAgYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnJlcXVp
cmVzTGF5ZXIoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50IFJlbmRlclNWR0NvbnRhaW5l
cjo6bGluZUhlaWdodChib29sIGIsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK2ludCBSZW5k
ZXJTVkdDb250YWluZXI6OmxpbmVIZWlnaHQoYm9vbCwgYm9vbCkgY29uc3QKIHsKICAgICByZXR1
cm4gaGVpZ2h0KCkgKyBtYXJnaW5Ub3AoKSArIG1hcmdpbkJvdHRvbSgpOwogfQogCi1pbnQgUmVu
ZGVyU1ZHQ29udGFpbmVyOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5l
Qm94KSBjb25zdAoraW50IFJlbmRlclNWR0NvbnRhaW5lcjo6YmFzZWxpbmVQb3NpdGlvbihib29s
LCBib29sKSBjb25zdAogewogICAgIHJldHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpICsgbWFy
Z2luQm90dG9tKCk7CiB9CkBAIC0yOTksNyArMjk5LDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWlu
ZXI6OmFwcGx5Q29udGVudFRyYQogICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RN
KGxvY2FsVHJhbnNmb3JtKCkpOwogfQogCi12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YXBwbHlB
ZGRpdGlvbmFsVHJhbnNmb3JtcyhQYWludEluZm8mIHBhaW50SW5mbykKK3ZvaWQgUmVuZGVyU1ZH
Q29udGFpbmVyOjphcHBseUFkZGl0aW9uYWxUcmFuc2Zvcm1zKFBhaW50SW5mbyYpCiB7CiAgICAg
Ly8gbm8tb3AKIH0KQEAgLTMyMiw3ICszMjIsNyBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6
c2VsZldpbGxQYWludCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclNWR0Nv
bnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFy
ZW50WSkKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgaW50LCBpbnQpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkgfHwgIWRyYXdzQ29udGVudHMoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzgzLDcgKzM4
Myw3IEBAIEludFJlY3QgUmVuZGVyU1ZHQ29udGFpbmVyOjphYnNvbHV0ZUNsaXAKICAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChyZXBhaW50UmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQ29u
dGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWRkRm9jdXNSaW5n
UmVjdHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCwgaW50KQogewogICAg
IGdyYXBoaWNzQ29udGV4dC0+YWRkRm9jdXNSaW5nUmVjdChtX2Fic29sdXRlQm91bmRzKTsKIH0K
QEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWJzb2x1dGVSZWN0
cyhWCiAgICAgcmVjdHMuYXBwZW5kKGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKIH0K
IAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFic29s
dXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKQogewogICAgIHF1YWRzLmFw
cGVuZChhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7CiB9CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDM5NTg0
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIGJvb2wgUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyOjpyZXF1aXJlc0wKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBSZW5kZXJTVkdIaWRk
ZW5Db250YWluZXI6OmxpbmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0
CitpbnQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsaW5lSGVpZ2h0KGJvb2wsIGJvb2wpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6
OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0CitpbnQg
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC04MSwxMiArODEsMTIgQEAgSW50UmVjdCBSZW5k
ZXJTVkdIaWRkZW5Db250YWluZXI6OmFic29sdQogICAgIHJldHVybiBJbnRSZWN0KCk7CiB9CiAK
LXZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYgcmVjdHMsIGludCwgaW50LCBib29sKQordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXI6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50LCBpbnQsIGJvb2wpCiB7CiAg
ICAgLy8gVGhpcyBzdWJ0cmVlIGRvZXMgbm90IHRha2UgdXAgc3BhY2Ugb3IgcGFpbnQKIH0KIAot
dm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXI6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKQogewogICAgIC8vIFRo
aXMgc3VidHJlZSBkb2VzIG5vdCB0YWtlIHVwIHNwYWNlIG9yIHBhaW50CiB9CkBAIC0xMDEsMTIg
KzEwMSwxMiBAQCBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyCiAgICAg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwogfQogCi1ib29sIFJlbmRlclNWR0hpZGRlbkNvbnRh
aW5lcjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhpdFRlc3RB
Y3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwg
aW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1GbG9h
dFJlY3QgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRl
U3Ryb2tlKSBjb25zdAorRmxvYXRSZWN0IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6cmVsYXRp
dmVCQm94KGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogfQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3
ICsxOTMsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdJbWFnZTo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCwgaW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCitib29sIFJlbmRlclNWR0ltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCwgaW50LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgLy8gV2Ugb25seSBkcmF3IGluIHRo
ZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KICAgICBpZiAoaGl0
VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKQEAgLTI1OCw3ICsyNTgsNyBAQCBJbnRS
ZWN0IFJlbmRlclNWR0ltYWdlOjphYnNvbHV0ZUNsaXBwZWRPCiAgICAgcmV0dXJuIG1fYWJzb2x1
dGVCb3VuZHM7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVu
ZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBpbnQsIGludCkKIHsKICAgICAvLyB0aGlzIGlzIGNhbGxlZCBmcm9tIHBhaW50KCkg
YWZ0ZXIgdGhlIGxvY2FsVHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZAogICAgIElu
dFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlbGF0aXZlQkJveCgpKTsKQEAg
LTI3MCw3ICsyNzAsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjphYnNvbHV0ZVJlY3RzKFZlY3Rv
CiAgICAgcmVjdHMuYXBwZW5kKGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKIH0KIAot
dm9pZCBSZW5kZXJTVkdJbWFnZTo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVh
ZHMsIGJvb2wgdG9wTGV2ZWwpCit2b2lkIFJlbmRlclNWR0ltYWdlOjphYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCkKIHsKICAgICBxdWFkcy5hcHBlbmQoRmxvYXRS
ZWN0KGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKSk7CiB9CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTgsNyArNTgsNyBAQCB2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmFic29sdXRlUmVjdHMoCiAg
ICAgcmVjdHMuYXBwZW5kKGNvbXB1dGVBYnNvbHV0ZVJlY3RGb3JSYW5nZSgwLCB0ZXh0TGVuZ3Ro
KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3Rv
cjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKK3ZvaWQgUmVuZGVyU1ZHSW5saW5l
VGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wpCiB7CiAg
ICAgcXVhZHMuYXBwZW5kKEZsb2F0UmVjdChjb21wdXRlQWJzb2x1dGVSZWN0Rm9yUmFuZ2UoMCwg
dGV4dExlbmd0aCgpKSkpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9v
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJ
KHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDEyICs1MywxMiBAQCBSZW5kZXJTVkdSb290Ojp+UmVuZGVy
U1ZHUm9vdCgpCiB7CiB9CiAKLWludCBSZW5kZXJTVkdSb290OjpsaW5lSGVpZ2h0KGJvb2wgYiwg
Ym9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdAoraW50IFJlbmRlclNWR1Jvb3Q6OmxpbmVIZWlnaHQo
Ym9vbCwgYm9vbCkgY29uc3QKIHsKICAgICByZXR1cm4gaGVpZ2h0KCkgKyBtYXJnaW5Ub3AoKSAr
IG1hcmdpbkJvdHRvbSgpOwogfQogCi1pbnQgUmVuZGVyU1ZHUm9vdDo6YmFzZWxpbmVQb3NpdGlv
bihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK2ludCBSZW5kZXJTVkdSb290Ojpi
YXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhlaWdodCgp
ICsgbWFyZ2luVG9wKCkgKyBtYXJnaW5Cb3R0b20oKTsKIH0KQEAgLTI1OSw3ICsyNTksNyBAQCB2
b2lkIFJlbmRlclNWR1Jvb3Q6OmFic29sdXRlUmVjdHMoVmVjdG9yCiAgICAgICAgIGN1cnJlbnQt
PmFic29sdXRlUmVjdHMocmVjdHMsIDAsIDApOwogfQogCi12b2lkIFJlbmRlclNWR1Jvb3Q6OmFi
c29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQordm9p
ZCBSZW5kZXJTVkdSb290OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywg
Ym9vbCkKIHsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsg
Y3VycmVudCAhPSAwOyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAg
Y3VycmVudC0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdUU3Bhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVFNwYW4uY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1RTcGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFJlbmRl
clNWR1RTcGFuOjphYnNvbHV0ZVJlY3RzKFZlY3RvCiAgICAgfQogfQogCi12b2lkIFJlbmRlclNW
R1RTcGFuOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BM
ZXZlbCkKK3ZvaWQgUmVuZGVyU1ZHVFNwYW46OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzLCBib29sKQogewogICAgIElubGluZVJ1bkJveCogZmlyc3RCb3ggPSBmaXJzdExp
bmVCb3goKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9u
IDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAg
ICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCi1JbmxpbmVCb3gqIFJlbmRlclNWR1RleHQ6
OmNyZWF0ZUlubGluZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5l
Qm94LCBib29sIGlzT25seVJ1bikKK0lubGluZUJveCogUmVuZGVyU1ZHVGV4dDo6Y3JlYXRlSW5s
aW5lQm94KGJvb2wsIGJvb2wsIGJvb2wpCiB7CiAgICAgQVNTRVJUKCFpc0lubGluZUZsb3coKSk7
CiAgICAgSW5saW5lRmxvd0JveCogZmxvd0JveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgU1ZHUm9v
dElubGluZUJveCh0aGlzKTsKQEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIFJlbmRlclNWR1RleHQ6
OmFic29sdXRlUmVjdHMoVmVjdG9yCiAgICAgfQogfQogCi12b2lkIFJlbmRlclNWR1RleHQ6OmFi
c29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQordm9p
ZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywg
Ym9vbCkKIHsKICAgICBSZW5kZXJTVkdSb290KiByb290ID0gZmluZFNWR1Jvb3RPYmplY3QocGFy
ZW50KCkpOwogICAgIGlmICghcm9vdCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RleHRQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0UGF0aC5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVGV4dFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgUmVu
ZGVyU1ZHVGV4dFBhdGg6OmFic29sdXRlUmVjdHMoVmUKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
U1ZHVGV4dFBhdGg6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29s
IHRvcExldmVsKQordm9pZCBSZW5kZXJTVkdUZXh0UGF0aDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8
RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wpCiB7CiAgICAgSW5saW5lUnVuQm94KiBmaXJzdEJveCA9
IGZpcnN0TGluZUJveCgpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIFJlbmRlclNsaWRlcjo6flJlbmRlclNsaWRl
cigpCiAgICAgICAgIG1fdGh1bWItPmRldGFjaCgpOwogfQogCi1pbnQgUmVuZGVyU2xpZGVyOjpi
YXNlbGluZVBvc2l0aW9uKGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdAoraW50IFJl
bmRlclNsaWRlcjo6YmFzZWxpbmVQb3NpdGlvbihib29sLCBib29sKSBjb25zdAogewogICAgIHJl
dHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ29sLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgSW50UmVjdCBS
ZW5kZXJUYWJsZUNvbDo6YWJzb2x1dGVDbGlwcGVkTwogICAgIHJldHVybiBJbnRSZWN0KCk7CiB9
CiAKLXZvaWQgUmVuZGVyVGFibGVDb2w6OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIgaW1h
Z2UsIGNvbnN0IEludFJlY3QqKQordm9pZCBSZW5kZXJUYWJsZUNvbDo6aW1hZ2VDaGFuZ2VkKFdy
YXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCopCiB7CiAgICAgLy8gRklYTUU6IFJlcGFpbnQg
b25seSB0aGUgcmVjdCB0aGUgaW1hZ2UgcGFpbnRzIGluLgogICAgIHJlcGFpbnQoKTsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAs
NyArMjEwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6cGFpbnQoUGFpbnRJbmZvJiBwYQogICAg
IH0KIH0KIAotdm9pZCBSZW5kZXJUYWJsZVJvdzo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0
ciBpbWFnZSwgY29uc3QgSW50UmVjdCopCit2b2lkIFJlbmRlclRhYmxlUm93OjppbWFnZUNoYW5n
ZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KikKIHsKICAgICAvLyBGSVhNRTogRXhh
bWluZSBjZWxscyBhbmQgcmVwYWludCBvbmx5IHRoZSByZWN0IHRoZSBpbWFnZSBwYWludHMgaW4u
CiAgICAgcmVwYWludCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCShyZXZp
c2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDE3ICszNSwxOCBAQCBjbGFzcyBSZW5kZXJUYWJsZVJvdyA6IHB1Ymxp
YyBSZW5kZXJDb250CiBwdWJsaWM6CiAgICAgUmVuZGVyVGFibGVSb3coTm9kZSopOwogCisgICAg
UmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyVGFibGVTZWN0aW9uKj4ocGFyZW50KCkpOyB9CisgICAgUmVuZGVyVGFibGUqIHRhYmxl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihwYXJlbnQoKS0+cGFy
ZW50KCkpOyB9CisKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1l
KCkgY29uc3QgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJUYWJsZVJvdyAoYW5vbnlt
b3VzKSIgOiAiUmVuZGVyVGFibGVSb3ciOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZVJv
dygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
CiAKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihwYXJlbnQoKSk7IH0KLSAgICBSZW5kZXJUYWJs
ZSogdGFibGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVu
dCgpLT5wYXJlbnQoKSk7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7Ci0gICAgdmlydHVhbCBp
bnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2Up
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wsIGJv
b2wpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb24oSW5saW5l
Qm94KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgSW50UmVj
dCBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKQEAgLTU3LDcgKzU4LDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAg
ICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJl
Y3QqID0gMCk7CiAKLXByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdl
KFJlbmRlclN0eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwogCiB9OwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAz
OTU4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3Myw3ICs5NzMsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFp
bnQoUGFpbnRJbmZvCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6aW1hZ2VD
aGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciBpbWFnZSwgY29uc3QgSW50UmVjdCopCit2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVj
dCopCiB7CiAgICAgLy8gRklYTUU6IEV4YW1pbmUgY2VsbHMgYW5kIHJlcGFpbnQgb25seSB0aGUg
cmVjdCB0aGUgaW1hZ2UgcGFpbnRzIGluLgogICAgIHJlcGFpbnQoKTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0
Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3Qq
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAKLSAgICB2aXJ0dWFsIGlu
dCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkg
Y29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihJbmxpbmVCb3gq
KSB7IH0KLQogICAgIHZpcnR1YWwgaW50IGdldEJhc2VsaW5lT2ZGaXJzdExpbmVCb3goKSBjb25z
dDsKIAogICAgIHZvaWQgYWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqLCBSZW5kZXJPYmplY3QqIHJv
dyk7CkBAIC0xMjYsNiArMTIzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFs
IGludCBsaW5lSGVpZ2h0KGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcG9zaXRpb24oSW5saW5lQm94KikgeyB9CisKICAgICBib29sIGVuc3VyZVJvd3Mo
aW50KTsKICAgICB2b2lkIGNsZWFyR3JpZCgpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6YWRk
TGluZUJveFJlY3RzKFZlY3RvcjwKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1
dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit2b2lkIFJl
bmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKQog
ewogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpKQogICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QoYm94LT54UG9zKCksIGJveC0+eVBvcygpLCBib3gtPndpZHRoKCks
IGJveC0+aGVpZ2h0KCkpKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiAz
OTU4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsMTEgKzU2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW5saW5lVGV4dEJveCogY3Jl
YXRlSW5saW5lVGV4dEJveCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXJ0eUxpbmVCb3hlcyhib29s
IGZ1bGxMYXlvdXQsIGJvb2wgaXNSb290SW5saW5lQm94ID0gZmFsc2UpOwogCi0gICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQotCiAgICAgdmlydHVhbCB2b2lk
IGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9w
TGV2ZWwgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkTGluZUJveFJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0g
VUlOVF9NQVgsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwogCkBAIC0xNDQsNiAr
MTM5LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gY2FsbGVycyB3aXRoIGEgUmVuZGVyT2JqZWN0KiBj
YW4gY29udGludWUgdG8gdXNlIGxlbmd0aCgpLgogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gdGV4dExlbmd0aCgpOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgaW50LCBpbnQpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiBmYWxzZTsgfQorCiAgICAgdm9pZCBkZWxldGVUZXh0Qm94ZXMoKTsKICAgICBi
b29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBj
b25zdDsKICAgICBpbnQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udCYsIGludCBzdGFydCwgaW50
IGxlbiwgaW50IHhQb3MpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1NSw3ICs2NTUsNyBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
aXRlbUlzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6aXRlbVN0eWxlKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK1Bv
cHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbVN0eWxlKHVuc2ln
bmVkKSBjb25zdAogewogICAgIHJldHVybiBtZW51U3R5bGUoKTsKIH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTIsNyArNTkyLDggQEAgYm9vbCBS
ZW5kZXJUaGVtZTo6aXNEZWZhdWx0KGNvbnN0IFJlbmRlcgogfQogCiAjaWYgIVVTRShORVdfVEhF
TUUpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CisKK3Zv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9m
IHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWduZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8g
d2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUgYWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9s
IGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRz
LikKQEAgLTYwOSw3ICs2MTAsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0
eWxlKENTCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0UmFkaW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFk
aW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKIHsKICAgICAvLyBBIHN1bW1hcnkgb2YgdGhlIHJ1bGVzIGZvciBjaGVja2JveCBkZXNp
Z25lZCB0byBtYXRjaCBXaW5JRToKICAgICAvLyB3aWR0aC9oZWlnaHQgLSBob25vcmVkIChXaW5J
RSBhY3R1YWxseSBzY2FsZXMgaXRzIGNvbnRyb2wgZm9yIHNtYWxsIHdpZHRocywgYnV0IGxldHMg
aXQgb3ZlcmZsb3cgZm9yIHNtYWxsIGhlaWdodHMuKQpAQCAtNjI2LDM5ICs2MjcsNDAgQEAgdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShDU1NTdAogICAgIHN0eWxlLT5zZXRCb3hT
aGFkb3coMCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBNb3N0IHBs
YXRmb3JtcyB3aWxsIGNvbXBsZXRlbHkgaG9ub3IgYWxsIENTUywgYW5kIHNvIHdlIGhhdmUgbm8g
bmVlZCB0byBhZGp1c3QgdGhlIHN0eWxlCiAgICAgLy8gYXQgYWxsIGJ5IGRlZmF1bHQuICBXZSB3
aWxsIHN0aWxsIGFsbG93IHRoZSB0aGVtZSBhIGNyYWNrIGF0IHNldHRpbmcgdXAgYSBkZXNpcmVk
IHZlcnRpY2FsIHNpemUuCiAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CiB9CisKICNlbmRpZgog
Ci12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVh
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvbklubmVy
U3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
QnV0dG9uSW5uZXJTdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6
OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9
CiAKQEAgLTY2NiwyMyArNjY4LDIzIEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZSgKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAogewogfQogCi12
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdAogewogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2
aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjA3LDcgKzYwNyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNp
emVGcm9tRm9udChSZW4KICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWln
aHQoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250
cm9sU2l6ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBO
U0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0
Rm9udEZyb21Db250cm9sU2l6ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXpl
KHRydWUpOwpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRl
eHRGaWVsZFN0eWwKIHsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0lu
ZGljYXRvcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENh
cHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHBhaW50SW5mby5j
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzQ3
LDcgKzc0Nyw3IEBAIGNvbnN0IGludCBzdHlsZWRQb3B1cFBhZGRpbmdMZWZ0ID0gODsKIGNvbnN0
IGludCBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgPSAxOwogY29uc3QgaW50IHN0eWxlZFBvcHVwUGFk
ZGluZ0JvdHRvbSA9IDI7CiAKLXN0YXRpYyB2b2lkIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUodm9p
ZCogaW5mbywgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQorc3RhdGlj
IHZvaWQgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRh
LCBDR0Zsb2F0KiBvdXREYXRhKQogewogICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAxLjBm
LCAxLjBmLCAxLjBmLCAwLjRmIH07CiAgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAxLjBm
LCAxLjBmLCAxLjBmLCAwLjE1ZiB9OwpAQCAtNzU3LDcgKzc1Nyw3IEBAIHN0YXRpYyB2b2lkIFRv
cEdyYWRpZW50SW50ZXJwb2xhdGUodm9pZCoKICAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0g
YSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOwogfQogCi1zdGF0aWMgdm9pZCBCb3R0b21HcmFk
aWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENHRmxvYXQqIGluRGF0YSwgQ0dGbG9h
dCogb3V0RGF0YSkKK3N0YXRpYyB2b2lkIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUodm9pZCos
IGNvbnN0IENHRmxvYXQqIGluRGF0YSwgQ0dGbG9hdCogb3V0RGF0YSkKIHsKICAgICBzdGF0aWMg
ZmxvYXQgZGFya1s0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMC4wZiB9OwogICAgIHN0YXRpYyBm
bG9hdCBsaWdodFs0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMC4zZiB9OwpAQCAtNzY3LDcgKzc2
Nyw3IEBAIHN0YXRpYyB2b2lkIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUodm8KICAgICAgICAg
b3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOwogfQogCi1z
dGF0aWMgdm9pZCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBpbmZvLCBjb25zdCBDR0Zs
b2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCitzdGF0aWMgdm9pZCBNYWluR3JhZGllbnRJ
bnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRh
KQogewogICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAwLjE1
ZiB9OwogICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4w
ZiB9OwpAQCAtNzc3LDcgKzc3Nyw3IEBAIHN0YXRpYyB2b2lkIE1haW5HcmFkaWVudEludGVycG9s
YXRlKHZvaWQKICAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAq
IGxpZ2h0W2ldOwogfQogCi1zdGF0aWMgdm9pZCBUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUodm9p
ZCogaW5mbywgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQorc3RhdGlj
IHZvaWQgVHJhY2tHcmFkaWVudEludGVycG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRh
dGEsIENHRmxvYXQqIG91dERhdGEpCiB7CiAgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAu
MGYsIDAuMGYsIDAuMGYsIDAuNjc4ZiB9OwogICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsg
MC4wZiwgMC4wZiwgMC4wZiwgMC4xM2YgfTsKQEAgLTk4Niw3ICs5ODYsNyBAQCBpbnQgUmVuZGVy
VGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgZmxvYXQgZm9u
dFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CiAKQEAgLTEwMjcsNyAr
MTAyNyw3IEBAIGludCBSZW5kZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZSgKIGNvbnN0
IGludCB0cmFja1dpZHRoID0gNTsKIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CiAKLXZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNldEJveFNo
YWRvdygwKTsKIH0KQEAgLTEwNzEsNyArMTA3MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2xpZGVyVHJhY2soUmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsK
IH0KQEAgLTExOTMsNyArMTE5Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNo
RmllbGQoUmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnNl
dFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCit2b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBJbnRSZWN0JikKIHsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2Vh
cmNoKCk7CiAKQEAgLTEyMjAsNyArMTIyMCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNl
YXJjaEZpZWxkU2l6ZSgKICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6
ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVyLgogICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OwpAQCAtMTI4OSw3ICsxMjg5LDcgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OmNh
bmNlbEJ1dAogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBJbnRTaXplIHNp
emUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgY2FuY2VsQnV0dG9uU2l6ZXMoKSk7CiAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CkBAIC0xMzA0LDcg
KzEzMDQsNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6cmVzdWx0c0J1CiB9CiAK
IGNvbnN0IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5Owotdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIEludFNpemUgc2l6
ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZzZXQs
IEZpeGVkKSk7CkBAIC0xMzEyLDEyICsxMzEyLDEyIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFNlYXJjaEZpZWxkRGUKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQogCi1ib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
SW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXpl
cygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsK
QEAgLTEzMjUsNyArMTMyNSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZp
ZWxkUmUKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQogCi1ib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JiByKQogewogICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rv
ck5vZGUoKTsKICAgICBzZXRTZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJlbmRlcmVyKCksIHIpOwpA
QCAtMTM0NCw3ICsxMzQ0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVs
ZFJlcwogfQogCiBjb25zdCBpbnQgcmVzdWx0c0Fycm93V2lkdGggPSA1Owotdm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewog
ICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9u
U2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1
bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShy
ZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQog
ICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIAotRmxvYXRQb2ludCBSZW5kZXJWaWV3Ojps
b2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50LCBib29sIGZpeGVkLCBib29sIHVz
ZVRyYW5zZm9ybXMpIGNvbnN0CitGbG9hdFBvaW50IFJlbmRlclZpZXc6OmxvY2FsVG9BYnNvbHV0
ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wpIGNvbnN0CiB7CiAgICAg
aWYgKGZpeGVkICYmIG1fZnJhbWVWaWV3KQogICAgICAgICBsb2NhbFBvaW50ICs9IG1fZnJhbWVW
aWV3LT5zY3JvbGxPZmZzZXQoKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBGbG9hdFBvaW50IFJlbmRl
clZpZXc6OmxvY2FsVG9BYnNvbHV0ZShGCiAgICAgcmV0dXJuIGxvY2FsUG9pbnQ7CiB9CiAKLUZs
b2F0UG9pbnQgUmVuZGVyVmlldzo6YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQgY29udGFpbmVy
UG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QKK0Zsb2F0UG9pbnQg
UmVuZGVyVmlldzo6YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQgY29udGFpbmVyUG9pbnQsIGJv
b2wgZml4ZWQsIGJvb2wpIGNvbnN0CiB7CiAgICAgaWYgKGZpeGVkICYmIG1fZnJhbWVWaWV3KQog
ICAgICAgICBjb250YWluZXJQb2ludCAtPSBtX2ZyYW1lVmlldy0+c2Nyb2xsT2Zmc2V0KCk7CkBA
IC0xNzQsNyArMTc0LDcgQEAgc3RhdGljIGlubGluZSBib29sIHJlbmRlcmVyT2JzY3VyZXNCYWNr
ZwogICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0LT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSAmJiBvYmplY3QtPnN0eWxlKCktPm9wYWNpdHkoKSA9PSAxICYmICFvYmplY3QtPnN0
eWxlKCktPmhhc1RyYW5zZm9ybSgpOwogfQogICAgIAotdm9pZCBSZW5kZXJWaWV3OjpwYWludEJv
eERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQg
UmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgaW50
LCBpbnQpCiB7CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBlbmNsb3NlZCBieSBhIGxh
eWVyIHRoYXQgcmVxdWlyZXMgY29tcGxleCBwYWludGluZyBydWxlcy4gIElmIHNvLCB3ZSBjYW5u
b3QgYmxpdAogICAgIC8vIHdoZW4gc2Nyb2xsaW5nLCBhbmQgd2UgbmVlZCB0byB1c2Ugc2xvdyBy
ZXBhaW50cy4gIEV4YW1wbGVzIG9mIGxheWVycyB0aGF0IHJlcXVpcmUgdGhpcyBhcmUgdHJhbnNw
YXJlbnQgbGF5ZXJzLApAQCAtMjU4LDcgKzI1OCw3IEBAIHZvaWQgUmVuZGVyVmlldzo6YWJzb2x1
dGVSZWN0cyhWZWN0b3I8SW4KICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIG1fbGF5
ZXItPndpZHRoKCksIG1fbGF5ZXItPmhlaWdodCgpKSk7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit2
b2lkIFJlbmRlclZpZXc6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBi
b29sKQogewogICAgIHF1YWRzLmFwcGVuZChGbG9hdFJlY3QoMCwgMCwgbV9sYXllci0+d2lkdGgo
KSwgbV9sYXllci0+aGVpZ2h0KCkpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lu
bGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGlu
ZUZsb3dCb3guY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lu
bGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAKLXZvaWQgU1ZHSW5s
aW5lRmxvd0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCit2b2lkIFNWR0lubGluZUZsb3dCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgaW50LCBpbnQpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LWludCBTVkdJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQm
IGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5n
KQoraW50IFNWR0lubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50LCBpbnQm
LCBpbnQmLCBib29sJikKIHsKICAgICAvLyBuby1vcAogICAgIHJldHVybiAwOwogfQogCi12b2lk
IFNWR0lubGluZUZsb3dCb3g6OnZlcnRpY2FsbHlBbGlnbkJveGVzKGludCYgaGVpZ2h0T2ZCbG9j
aykKK3ZvaWQgU1ZHSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50JikKIHsK
ICAgICAvLyBuby1vcAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCw4IEBAIGZsb2F0IFNWR0lubGluZVRl
eHRCb3g6OmNhbGN1bGF0ZUdseXBoV2kKICAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5mbG9hdFdp
ZHRoKHN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KHRleHRPYmplY3QoKS0+dGV4dCgpLT5jaGFy
YWN0ZXJzKCkgKyBvZmZzZXQsIDEsIHN0eWxlLCB0aGlzLCAwKSwgZXh0cmFDaGFyc0F2YWlsYWJs
ZSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKIH0KIAotZmxvYXQgU1ZHSW5saW5lVGV4dEJv
eDo6Y2FsY3VsYXRlR2x5cGhIZWlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgb2Zmc2V0LCBp
bnQgZXh0cmFDaGFyc0F2YWlsYWJsZSkgY29uc3QKK2Zsb2F0IFNWR0lubGluZVRleHRCb3g6OmNh
bGN1bGF0ZUdseXBoSGVpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSwgaW50LCBpbnQpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQogICAgIC8vIFRoaXMgaXMganVzdCBhIGd1ZXNzLCBhbmQg
dGhlIG9ubHkgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGNlbnRyYWxpemUgdGhpcyBo
YWNrLgogICAgIC8vIEluIHJlYWwtbGlmZSB0b3AtdG9wLWJvdHRvbSBzY3JpcHRzIHRoaXMgd29u
J3QgYmUgZW5vdWdoLCBJIGZlYXIuCiAgICAgcmV0dXJuIHN0eWxlLT5mb250KCkuYXNjZW50KCkg
KyBzdHlsZS0+Zm9udCgpLmRlc2NlbnQoKTsKQEAgLTI3OSwyMSArMjc3LDIxIEBAIGJvb2wgU1ZH
SW5saW5lVGV4dEJveDo6c3ZnQ2hhcmFjdGVySGl0c1AKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
aW50IFNWR0lubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGludCB4LCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IFNWR0lubGluZVRleHRCb3g6Om9mZnNldEZvclBv
c2l0aW9uKGludCwgYm9vbCkgY29uc3QKIHsKICAgICAvLyBTVkcgZG9lc24ndCB1c2UgdGhlIG9m
ZnNldCA8LT4gcG9zaXRpb24gc2VsZWN0aW9uIHN5c3RlbS4gCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBTVkdJbmxpbmVUZXh0Qm94Ojpwb3NpdGlv
bkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdAoraW50IFNWR0lubGluZVRleHRCb3g6OnBvc2l0
aW9uRm9yT2Zmc2V0KGludCkgY29uc3QKIHsKICAgICAvLyBTVkcgZG9lc24ndCB1c2UgdGhlIG9m
ZnNldCA8LT4gcG9zaXRpb24gc2VsZWN0aW9uIHN5c3RlbS4gCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSkKK2Jvb2wgU1ZHSW5saW5lVGV4dEJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgQVNTRVJUKCFpc0xpbmVCcmVh
aygpKTsKIApAQCAtNDM2LDcgKzQzNCw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRD
aGFyYWN0ZXJzKFIKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShjdG0uaW52
ZXJzZSgpKTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihpbnQg
Ym94U3RhcnRPZmZzZXQsIGNvbnN0IFNWR0NoYXImIHN2Z0NoYXIsIGNvbnN0IFVDaGFyKiBjaGFy
cywgaW50IGxlbmd0aCwgR3JhcGhpY3NDb250ZXh0KiBwLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IEZvbnQqIGYpCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKGludCBi
b3hTdGFydE9mZnNldCwgY29uc3QgU1ZHQ2hhciYgc3ZnQ2hhciwgY29uc3QgVUNoYXIqLCBpbnQg
bGVuZ3RoLCBHcmFwaGljc0NvbnRleHQqIHAsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9u
dCogZikKIHsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvbk5vbmUpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0ZpbGxMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxM
YXllci5oCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxM
YXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCArMTIwLDggQEAgcHVibGljOgogICAgIHN0
YXRpYyBFRmlsbFJlcGVhdCBpbml0aWFsRmlsbFJlcGVhdChFRmlsbExheWVyVHlwZSkgeyByZXR1
cm4gUmVwZWF0RmlsbDsgfQogICAgIHN0YXRpYyBDb21wb3NpdGVPcGVyYXRvciBpbml0aWFsRmls
bENvbXBvc2l0ZShFRmlsbExheWVyVHlwZSkgeyByZXR1cm4gQ29tcG9zaXRlU291cmNlT3Zlcjsg
fQogICAgIHN0YXRpYyBMZW5ndGhTaXplIGluaXRpYWxGaWxsU2l6ZShFRmlsbExheWVyVHlwZSkg
eyByZXR1cm4gTGVuZ3RoU2l6ZSgpOyB9Ci0gICAgc3RhdGljIExlbmd0aCBpbml0aWFsRmlsbFhQ
b3NpdGlvbihFRmlsbExheWVyVHlwZSB0eXBlKSB7IHJldHVybiBMZW5ndGgoMC4wLCBQZXJjZW50
KTsgfQotICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbEZpbGxZUG9zaXRpb24oRUZpbGxMYXllclR5
cGUgdHlwZSkgeyByZXR1cm4gTGVuZ3RoKDAuMCwgUGVyY2VudCk7IH0KKyAgICBzdGF0aWMgTGVu
Z3RoIGluaXRpYWxGaWxsWFBvc2l0aW9uKEVGaWxsTGF5ZXJUeXBlKSB7IHJldHVybiBMZW5ndGgo
MC4wLCBQZXJjZW50KTsgfQorICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbEZpbGxZUG9zaXRpb24o
RUZpbGxMYXllclR5cGUpIHsgcmV0dXJuIExlbmd0aCgwLjAsIFBlcmNlbnQpOyB9CiAgICAgc3Rh
dGljIFN0eWxlSW1hZ2UqIGluaXRpYWxGaWxsSW1hZ2UoRUZpbGxMYXllclR5cGUpIHsgcmV0dXJu
IDA7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2Fj
aGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
Q2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBA
IHZvaWQgU3R5bGVDYWNoZWRJbWFnZTo6cmVtb3ZlQ2xpZW50KFJlbmQKICAgICByZXR1cm4gbV9p
bWFnZS0+cmVtb3ZlQ2xpZW50KHJlbmRlcmVyKTsKIH0KIAotSW1hZ2UqIFN0eWxlQ2FjaGVkSW1h
Z2U6OmltYWdlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmKSBjb25zdAor
SW1hZ2UqIFN0eWxlQ2FjaGVkSW1hZ2U6OmltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNp
emUmKSBjb25zdAogewogICAgIHJldHVybiBtX2ltYWdlLT5pbWFnZSgpOwogfQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY3Nz
VmFsdWUoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyKGZsb2F0IG11bHRpcGxp
ZXIpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyKGZs
b2F0IC8qbXVsdGlwbGllciovKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzTG9hZGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBl
cnJvck9jY3VycmVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIEludFNp
emUgaW1hZ2VTaXplKGNvbnN0IFJlbmRlck9iamVjdCosIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0
ID0gMDsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShyZXZpc2lv
biAzOTU4NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw2MSArNjcsNjEgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJv
cFRlbXBUYWJsZShjbwogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUp
OwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0FsdGVyVGFibGUoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoraW50IERhdGFiYXNl
QXV0aG9yaXplcjo6YWxsb3dBbHRlclRhYmxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dGFibGVOYW1lKQogewogICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CiAg
ICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9CiAKLWludCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBjb25z
dCBTdHJpbmcmIHRhYmxlTmFtZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZUluZGV4
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewogICAgIG1fbGFzdEFj
dGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVO
YW1lKHRhYmxlTmFtZSk7CiB9CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBJ
bmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCitp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wSW5kZXgoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1l
KHRhYmxlTmFtZSk7CiB9CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BJbmRleChjb25z
dCBTdHJpbmcmIGluZGV4TmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCitpbnQgRGF0YWJh
c2VBdXRob3JpemVyOjpkcm9wSW5kZXgoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUpCiB7CiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9
CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wSW5kZXgoY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoraW50IERhdGFiYXNlQXV0aG9yaXpl
cjo6ZHJvcFRlbXBJbmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkK
IHsKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAotaW50
IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdnZXJO
YW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNy
ZWF0ZVRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CiAg
ICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKICAgICByZXR1cm4gZGVueUJh
c2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6
Y3JlYXRlVGVtcFRyaWdnZXIoY29uc3QgU3RyaW5nJiB0cmlnZ2VyTmFtZSwgY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVHJpZ2dlcihj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKICAgICByZXR1cm4gZGVu
eUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9yaXpl
cjo6ZHJvcFRyaWdnZXIoY29uc3QgU3RyaW5nJiB0cmlnZ2VyTmFtZSwgY29uc3QgU3RyaW5nJiB0
YWJsZU5hbWUpCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVHJpZ2dlcihjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKICAgICByZXR1cm4gZGVueUJhc2VkT25U
YWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRl
bXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBUcmlnZ2VyKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewogICAgIHJldHVybiBkZW55QmFzZWRPblRh
YmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVW
VGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSkK
K2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZUYWJsZShjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKQogewogICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CiAg
ICAgcmV0dXJuIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3c7
CiB9CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWVGFibGUoY29uc3QgU3RyaW5nJiB0
YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmRyb3BWVGFibGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1
cm4gbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdzsKIH0KQEAg
LTEzOCw3ICsxMzgsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0luc2VydChjb25z
CiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9CiAKLWludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93VXBkYXRlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBj
b25zdCBTdHJpbmcmIGNvbHVtbk5hbWUpCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1Vw
ZGF0ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBtX2xh
c3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwogICAgIHJldHVybiBkZW55QmFzZWRPblRh
YmxlTmFtZSh0YWJsZU5hbWUpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIGludCBEYXRhYmFzZUF1dGhv
cml6ZXI6OmFsbG93VHJhbnNhY3Rpb24KICAgICByZXR1cm4gbV9zZWN1cml0eUVuYWJsZWQgPyBT
UUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdzsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6
YWxsb3dSZWFkKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbHVtbk5h
bWUpCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1JlYWQoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1l
KHRhYmxlTmFtZSk7CiB9CkBAIC0xNTksMjIgKzE1OSwyMiBAQCBpbnQgRGF0YWJhc2VBdXRob3Jp
emVyOjphbGxvd0FuYWx5emUoY29uCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRh
YmxlTmFtZSk7CiB9CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93UHJhZ21hKGNvbnN0
IFN0cmluZyYgcHJhZ21hTmFtZSwgY29uc3QgU3RyaW5nJiBmaXJzdEFyZ3VtZW50KQoraW50IERh
dGFiYXNlQXV0aG9yaXplcjo6YWxsb3dQcmFnbWEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikKIHsKICAgICByZXR1cm4gbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1
dGhBbGxvdzsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dBdHRhY2goY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93QXR0YWNoKGNv
bnN0IFN0cmluZyYpCiB7CiAgICAgcmV0dXJuIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERl
bnkgOiBTUUxBdXRoQWxsb3c7CiB9CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGV0
YWNoKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKQoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6
YWxsb3dEZXRhY2goY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gbV9zZWN1cml0eUVuYWJs
ZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdzsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6YWxsb3dGdW5jdGlvbihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKK2ludCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmFsbG93RnVuY3Rpb24oY29uc3QgU3RyaW5nJikKIHsKICAgICAvLyBG
SVhNRTogQXJlIHRoZXJlIGFueSBvZiB0aGVzZSB3ZSBuZWVkIHRvIHByZXZlbnQ/ICBPbmUgbWln
aHQgZ3Vlc3MgY3VycmVudF9kYXRlLCBjdXJyZW50X3RpbWUsIGN1cnJlbnRfdGltZXN0YW1wIGJl
Y2F1c2UKICAgICAvLyB0aGV5IHdvdWxkIHZpb2xhdGUgdGhlICJzYW5kYm94IGVudmlyb25tZW50
IiBwYXJ0IG9mIDQuMTEuMywgYnV0IHNjcmlwdHMgY2FuIGdlbmVyYXRlIHRoZSBsb2NhbCBjbGll
bnQgc2lkZSBpbmZvcm1hdGlvbiB2aWEKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1
dGhvcml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3Jp
emVyLmgJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksMTAgQEAgcHVibGljOgogICAgIGlu
dCBkcm9wVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSk7CiAgICAgaW50IGRyb3BUZW1wVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdnZXJO
YW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAKLSAgICBpbnQgY3JlYXRlVmlldyhjb25z
dCBTdHJpbmcmIHZpZXdOYW1lKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQgY3Jl
YXRlVGVtcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkgeyByZXR1cm4gU1FMQXV0aEFsbG93
OyB9Ci0gICAgaW50IGRyb3BWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUpIHsgcmV0dXJuIFNR
TEF1dGhBbGxvdzsgfQotICAgIGludCBkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFt
ZSkgeyByZXR1cm4gU1FMQXV0aEFsbG93OyB9CisgICAgaW50IGNyZWF0ZVZpZXcoY29uc3QgU3Ry
aW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQorICAgIGludCBjcmVh
dGVUZW1wVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykgeyByZXR1cm4gU1FMQXV0aEFs
bG93OyB9CisgICAgaW50IGRyb3BWaWV3KGNvbnN0IFN0cmluZyYgLyp2aWV3TmFtZSovKSB7IHJl
dHVybiBTUUxBdXRoQWxsb3c7IH0KKyAgICBpbnQgZHJvcFRlbXBWaWV3KGNvbnN0IFN0cmluZyYg
Lyp2aWV3TmFtZSovKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KIAogICAgIGludCBjcmVhdGVW
VGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSk7
CiAgICAgaW50IGRyb3BWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgbW9kdWxlTmFtZSk7CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBpbnQgYWxsb3dT
ZWxlY3QoKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KICAgICBpbnQgYWxsb3dSZWFkKGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbHVtbk5hbWUpOwogCi0gICAgaW50
IGFsbG93UmVpbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkgeyByZXR1cm4gU1FMQXV0aEFs
bG93OyB9CisgICAgaW50IGFsbG93UmVpbmRleChjb25zdCBTdHJpbmcmIC8qaW5kZXhOYW1lKi8p
IHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQogICAgIGludCBhbGxvd0FuYWx5emUoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUpOwogICAgIGludCBhbGxvd0Z1bmN0aW9uKGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25OYW1lKTsKICAgICBpbnQgYWxsb3dQcmFnbWEoY29uc3QgU3RyaW5nJiBwcmFnbWFOYW1l
LCBjb25zdCBTdHJpbmcmIGZpcnN0QXJndW1lbnQpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEu
Y3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgU3RyaW5nIFN0b3JhZ2VBcmVhOjppbnRl
cm5hbEdldEl0ZW0oY29ucwogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsK
IH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxTZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQor
dm9pZCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxTZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIGZyYW1lKQogewogICAgIEFT
U0VSVCghdmFsdWUuaXNOdWxsKCkpOwogICAgIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHQUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNp
b24gMzk1ODQpCisrKyBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBTVkdBRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
bwogICAgIH0KIH0KIAotUmVuZGVyT2JqZWN0KiBTVkdBRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCitSZW5kZXJPYmplY3QqIFNW
R0FFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxl
KikKIHsKICAgICBpZiAoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhcmVudCgpKS0+aXNUZXh0
Q29udGVudCgpKQogICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHSW5saW5lKHRo
aXMpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU4NCkK
KysrIFdlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgU1ZHQWx0R2x5cGhFbGVtZW50Ojp+U1ZHQWx0R2x5cGhFbGVtZW50KAog
ewogfQogCi12b2lkIFNWR0FsdEdseXBoRWxlbWVudDo6c2V0R2x5cGhSZWYoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgU1ZHQWx0R2x5cGhFbGVtZW50
OjpzZXRHbHlwaFJlZihjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKIH0KQEAgLTUyLDcgKzUyLDcg
QEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdBbHRHbHlwaEVsZW1lbnQ6OgogICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmdseXBoUmVmQXR0cik7CiB9CiAKLXZvaWQgU1ZHQWx0R2x5
cGhFbGVtZW50OjpzZXRGb3JtYXQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgU1ZHQWx0R2x5cGhFbGVtZW50OjpzZXRGb3JtYXQoY29uc3QgQXRvbWlj
U3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSBOT19NT0RJRklDQVRJT05f
QUxMT1dFRF9FUlI7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIGJvb2wgU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KikKK3ZvaWQgU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwg
dW5zaWduZWQsIFNWR1NNSUxFbGVtZW50KikKIHsKICAgICBTVkdFbGVtZW50KiB0YXJnZXQgPSB0
YXJnZXRFbGVtZW50KCk7CiAgICAgaWYgKCF0YXJnZXQpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdB
bmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRp
b25FbGVtZW50LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRp
b25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIGJvb2wgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6YmVnaW5FbGVtZW50KEUKICAgICByZXR1cm4gYmVnaW5FbGVtZW50
QXQoMCwgZWMpOwogfQogCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJlZ2luRWxlbWVudEF0
KGZsb2F0IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmJlZ2luRWxlbWVudEF0KGZsb2F0IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAg
YWRkQmVnaW5UaW1lKGVsYXBzZWQoKSArIG9mZnNldCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
NzAsNyArMTcwLDcgQEAgYm9vbCBTVkdBbmltYXRpb25FbGVtZW50OjplbmRFbGVtZW50KEV4Ywog
ICAgIHJldHVybiBlbmRFbGVtZW50QXQoMCwgZWMpOwogfQogCi1ib29sIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmVuZEVsZW1lbnRBdChmbG9hdCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9v
bCBTVkdBbmltYXRpb25FbGVtZW50OjplbmRFbGVtZW50QXQoZmxvYXQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJikKIHsKICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRl
RnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0
b1N0cmluZykgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZEJ5VmFs
dWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZykgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KSA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5n
JiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKSB7IHJldHVybiAtMS5mOyB9Cisg
ICAgICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiAvKmZy
b21TdHJpbmcqLywgY29uc3QgU3RyaW5nJiAvKnRvU3RyaW5nKi8pIHsgcmV0dXJuIC0xLmY7IH0K
ICAgICAgICAgdmlydHVhbCBQYXRoIGFuaW1hdGlvblBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRo
KCk7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgY3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1h
dGlvbihmbG9hdCBwZXJjZW50LCBmbG9hdCYgZWZmZWN0aXZlUGVyY2VudCwgU3RyaW5nJiBmcm9t
LCBTdHJpbmcmIHRvKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0NvbG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdDb2xvci5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysg
V2ViQ29yZS9zdmcvU1ZHQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMiArODgsMTIg
QEAgQ29sb3IgU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKAogICAgIHJldHVybiBD
b2xvcigpOwogfQogCi12b2lkIFNWR0NvbG9yOjpzZXRSR0JDb2xvcklDQ0NvbG9yKGNvbnN0IFN0
cmluZyYgLyogcmdiQ29sb3IgKi8sIGNvbnN0IFN0cmluZyYgLyogaWNjQ29sb3IgKi8sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBTVkdDb2xvcjo6c2V0UkdCQ29sb3JJQ0NDb2xvcihjb25zdCBT
dHJpbmcmIC8qIHJnYkNvbG9yICovLCBjb25zdCBTdHJpbmcmIC8qIGljY0NvbG9yICovLCBFeGNl
cHRpb25Db2RlJikKIHsKICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgbWUhCiB9CiAKLXZvaWQgU1ZH
Q29sb3I6OnNldENvbG9yKHVuc2lnbmVkIHNob3J0IGNvbG9yVHlwZSwgY29uc3QgU3RyaW5nJiAv
KiByZ2JDb2xvciAqLyAsIGNvbnN0IFN0cmluZyYgLyogaWNjQ29sb3IgKi8sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBTVkdDb2xvcjo6c2V0Q29sb3IodW5zaWduZWQgc2hvcnQgY29sb3JUeXBl
LCBjb25zdCBTdHJpbmcmIC8qIHJnYkNvbG9yICovICwgY29uc3QgU3RyaW5nJiAvKiBpY2NDb2xv
ciAqLywgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1lIQogICAg
IG1fY29sb3JUeXBlID0gY29sb3JUeXBlOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAJKHJldmlzaW9uIDM5NTg0KQor
KysgV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Miw3ICs1ODIs
NyBAQCBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclRleHRVc2luCiAgICAgICAgICAg
ICAgICAgICAgICBwb2ludC55KCksIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0
aGlzLCBydW4sIDAsIGZyb20sIHRvLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpLCBoZWlnaHQp
OwogfQogCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNv
bnN0IFRleHRSdW4mLCBpbnQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0CitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0
IFRleHRSdW4mLCBpbnQsIGJvb2wpIGNvbnN0CiB7CiAgICAgLy8gVE9ETzogRml4IHRleHQgc2Vs
ZWN0aW9uIHdoZW4gSFRNTCB0ZXh0IGlzIGRyYXduIHVzaW5nIGEgU1ZHIEZvbnQKICAgICAvLyBX
ZSBuZWVkIHRvIGludGVncmF0ZSB0aGUgU1ZHIHRleHQgc2VsZWN0aW9uIGNvZGUgaW4gdGhlIG9m
ZnNldEZvclBvc2l0aW9uKCkgZnJhbWV3b3JrLgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9yZWln
bk9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25P
YmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb3Jl
aWduT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2
b2lkIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OjpzdmdBdHRyaWJ1CiAgICAgICAgIHJlbmRlcmVy
KCktPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCi1SZW5kZXJPYmplY3QqIFNWR0ZvcmVpZ25P
YmplY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OmNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewogICAgIHJldHVy
biBuZXcgKGFyZW5hKSBSZW5kZXJGb3JlaWduT2JqZWN0KHRoaXMpOwogfQpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0ltYWdl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBib29sIFNWR0lt
YWdlRWxlbWVudDo6aGFzUmVsYXRpdmVWYWx1ZXMoCiAgICAgICAgICAgICB5KCkuaXNSZWxhdGl2
ZSgpIHx8IGhlaWdodCgpLmlzUmVsYXRpdmUoKSk7CiB9CiAKLVJlbmRlck9iamVjdCogU1ZHSW1h
Z2VFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxl
KiBzdHlsZSkKK1JlbmRlck9iamVjdCogU1ZHSW1hZ2VFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIHsKICAgICByZXR1cm4gbmV3IChhcmVu
YSkgUmVuZGVyU1ZHSW1hZ2UodGhpcyk7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdNYXJrZXJF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNw
cAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIFNWR1Jlc291cmNlKiBTVkdNYXJrZXJF
bGVtZW50OjpjYW52YXNSZXMKICAgICByZXR1cm4gbV9tYXJrZXIuZ2V0KCk7CiB9CiAKLVJlbmRl
ck9iamVjdCogU1ZHTWFya2VyRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFy
ZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCitSZW5kZXJPYmplY3QqIFNWR01hcmtlckVsZW1lbnQ6
OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewogICAg
IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKiBtYXJrZXJDb250YWluZXIgPSBuZXcgKGFyZW5h
KSBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcih0aGlzKTsKICAgICBtYXJrZXJDb250YWluZXIt
PnNldERyYXdzQ29udGVudHMoZmFsc2UpOyAvLyBNYXJrZXIgY29udGVudHMgd2lsbCBiZSBleHBs
aWNpdGx5IGRyYXduLgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCShyZXZpc2lv
biAzOTU4NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMyw4ICsyMDMsNyBAQCBib29sIHBvaW50c0xpc3RGcm9tU1ZHRGF0YShTVkdQ
b2ludExpc3QqCiAgICAgICogc3ZnIHBhdGggZGF0YSBjb21tYW5kcyBhbmQgcGFyYW1ldGVycy4g
SW4gdGhlIHNlY29uZCBtb2RlLCBpdCB3aWxsIGNvbnZlcnQgYWxsCiAgICAgICogcmVsYXRpdmUg
Y29vcmRpbmF0ZXMgdG8gYWJzb2x1dGUgb25lcywgYW5kIGNvbnZlcnQgYWxsIGN1cnZlcyB0byBj
dWJpYyBiZXppZXJzLgogICAgICAqLwotICAgIGNsYXNzIFNWR1BhdGhQYXJzZXIKLSAgICB7Cisg
ICAgY2xhc3MgU1ZHUGF0aFBhcnNlciB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5T
VkdQYXRoUGFyc2VyKCkgeyB9CiAgICAgICAgIGJvb2wgcGFyc2VTVkcoY29uc3QgU3RyaW5nJiBk
LCBib29sIHByb2Nlc3MgPSBmYWxzZSk7CkBAIC0yMTIsMTQgKzIxMSwxNSBAQCBib29sIHBvaW50
c0xpc3RGcm9tU1ZHRGF0YShTVkdQb2ludExpc3QqCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3ZnTW92ZVRvKGRvdWJsZSB4MSwgZG91YmxlIHkxLCBib29sIGNsb3NlZCwg
Ym9vbCBhYnMgPSB0cnVlKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdMaW5lVG8oZG91
YmxlIHgxLCBkb3VibGUgeTEsIGJvb2wgYWJzID0gdHJ1ZSkgPSAwOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgc3ZnTGluZVRvSG9yaXpvbnRhbChkb3VibGUgeCwgYm9vbCBhYnMgPSB0cnVlKSB7fQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnTGluZVRvVmVydGljYWwoZG91YmxlIHksIGJvb2wgYWJz
ID0gdHJ1ZSkge30KKyAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0xpbmVUb0hvcml6b250YWwoZG91
YmxlLCBib29sIC8qYWJzKi8gPSB0cnVlKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0xp
bmVUb1ZlcnRpY2FsKGRvdWJsZSAvKnkqLywgYm9vbCAvKmFicyovID0gdHJ1ZSkgeyB9CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdmdDdXJ2ZVRvQ3ViaWMoZG91YmxlIHgxLCBkb3VibGUgeTEsIGRv
dWJsZSB4MiwgZG91YmxlIHkyLCBkb3VibGUgeCwgZG91YmxlIHksIGJvb2wgYWJzID0gdHJ1ZSkg
PSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQ3VydmVUb0N1YmljU21vb3RoKGRvdWJsZSB4
LCBkb3VibGUgeSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGJvb2wgYWJzID0gdHJ1ZSkge30KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHN2Z0N1cnZlVG9RdWFkcmF0aWMoZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgYm9vbCBhYnMgPSB0cnVlKSB7fQotICAgICAgICB2aXJ0
dWFsIHZvaWQgc3ZnQ3VydmVUb1F1YWRyYXRpY1Ntb290aChkb3VibGUgeCwgZG91YmxlIHksIGJv
b2wgYWJzID0gdHJ1ZSkge30KLSAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0FyY1RvKGRvdWJsZSB4
LCBkb3VibGUgeSwgZG91YmxlIHIxLCBkb3VibGUgcjIsIGRvdWJsZSBhbmdsZSwgYm9vbCBsYXJn
ZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBib29sIGFicyA9IHRydWUpIHt9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzdmdDdXJ2ZVRvQ3ViaWNTbW9vdGgoZG91YmxlIC8qeCovLCBkb3VibGUgLyp5
Ki8sIGRvdWJsZSAvKngyKi8sIGRvdWJsZSAvKnkyKi8sIGJvb2wgLyphYnMqLyA9IHRydWUpIHsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQ3VydmVUb1F1YWRyYXRpYyhkb3VibGUgLyp4Ki8s
IGRvdWJsZSAvKnkqLywgZG91YmxlIC8qeDEqLywgZG91YmxlIC8qeTEqLywgYm9vbCAvKmFicyov
ID0gdHJ1ZSkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoKGRvdWJsZSAvKngqLywgZG91YmxlIC8qeSovLCBib29sIC8qYWJzKi8gPSB0cnVlKSB7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0FyY1RvKGRvdWJsZSAvKngqLywgZG91YmxlIC8qeSov
LCBkb3VibGUgLypyMSovLCBkb3VibGUgLypyMiovLCBkb3VibGUgLyphbmdsZSovLCBib29sIC8q
bGFyZ2VBcmNGbGFnKi8sIGJvb2wgLypzd2VlcEZsYWcqLywgYm9vbCAvKmFicyovID0gdHJ1ZSkg
eyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdDbG9zZVBhdGgoKSA9IDA7CisKICAgICBwcml2
YXRlOgogICAgICAgICB2b2lkIGNhbGN1bGF0ZUFyYyhib29sIHJlbGF0aXZlLCBkb3VibGUmIGN1
cngsIGRvdWJsZSYgY3VyeSwgZG91YmxlIGFuZ2xlLCBkb3VibGUgeCwgZG91YmxlIHksIGRvdWJs
ZSByMSwgZG91YmxlIHIyLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcpOwogICAg
IH07CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBA
IHVuc2lnbmVkIGxvbmcgU1ZHU1ZHRWxlbWVudDo6c3VzcGVuZFJlZHIKICAgICByZXR1cm4gMDsK
IH0KIAotdm9pZCBTVkdTVkdFbGVtZW50Ojp1bnN1c3BlbmRSZWRyYXcodW5zaWduZWQgbG9uZyAv
KiBzdXNwZW5kX2hhbmRsZV9pZCAqLywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFNWR1NWR0Vs
ZW1lbnQ6OnVuc3VzcGVuZFJlZHJhdyh1bnNpZ25lZCBsb25nIC8qIHN1c3BlbmRfaGFuZGxlX2lk
ICovLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICAvLyBpZiBzdXNwZW5kX2hhbmRsZV9pZCBpcyBu
b3QgZm91bmQsIHRocm93IGV4Y2VwdGlvbgogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUgKHNl
ZSBidWcgMTEyNzUpCkBAIC0zMDgsMTkgKzMwOCwxOSBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OmZv
cmNlUmVkcmF3KCkKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjc1KQog
fQogCi1Ob2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6Z2V0SW50ZXJzZWN0aW9uTGlzdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIFNWR0VsZW1lbnQqKQorTm9kZUxpc3QqIFNWR1NWR0VsZW1lbnQ6Omdl
dEludGVyc2VjdGlvbkxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCopCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NCkKICAgICByZXR1cm4gMDsKIH0K
IAotTm9kZUxpc3QqIFNWR1NWR0VsZW1lbnQ6OmdldEVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBTVkdFbGVtZW50KikKK05vZGVMaXN0KiBTVkdTVkdFbGVtZW50OjpnZXRFbmNs
b3N1cmVMaXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQqKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgbWUgKHNlZSBidWcgMTEyNzQpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wg
U1ZHU1ZHRWxlbWVudDo6Y2hlY2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVudCogZWxlbWVudCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBTVkdTVkdFbGVtZW50OjpjaGVja0ludGVyc2VjdGlv
bihTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIC8vIFRPRE8gOiB0
YWtlIGludG8gYWNjb3VudCBwb2ludGVyLWV2ZW50cz8KICAgICAvLyBGSVhNRTogV2h5IGlzIGVs
ZW1lbnQgaWdub3JlZD8/CkBAIC0zMjgsNyArMzI4LDcgQEAgYm9vbCBTVkdTVkdFbGVtZW50Ojpj
aGVja0ludGVyc2VjdGlvbihTVgogICAgIHJldHVybiByZWN0LmludGVyc2VjdHMoZ2V0QkJveCgp
KTsKIH0KIAotYm9vbCBTVkdTVkdFbGVtZW50OjpjaGVja0VuY2xvc3VyZShTVkdFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNr
RW5jbG9zdXJlKFNWR0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgLy8g
VE9ETyA6IHRha2UgaW50byBhY2NvdW50IHBvaW50ZXItZXZlbnRzPwogICAgIC8vIEZJWE1FOiBX
aHkgaXMgZWxlbWVudCBpZ25vcmVkPz8KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgc3RydWN0IFNWR0lu
bGluZVRleHRCb3hRdWVyeVdhbGtlciB7CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgY2h1bmtQ
b3J0aW9uQ2FsbGJhY2soU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50IHN0YXJ0T2Zmc2V0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNodW5rQ3RtLAorICAgIHZvaWQgY2h1bmtQb3J0aW9u
Q2FsbGJhY2soU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50IHN0YXJ0T2Zmc2V0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgc3RhcnQsIGNvbnN0IFZlY3RvcjxTVkdDaGFyPjo6
aXRlcmF0b3ImIGVuZCkKICAgICB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRC
b3gtPnRleHRPYmplY3QoKS0+c3R5bGUoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgQWZmaW5lVHJhbnNmb3JtKiBTVkdUZXh0RWxlbWVu
dDo6c3VwcGxlbQogICAgIHJldHVybiBtX3N1cHBsZW1lbnRhbFRyYW5zZm9ybS5nZXQoKTsKIH0K
IAotUmVuZGVyT2JqZWN0KiBTVkdUZXh0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCitSZW5kZXJPYmplY3QqIFNWR1RleHRFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIHsK
ICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHVGV4dCh0aGlzKTsKIH0KSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3N2
Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBA
IHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHIKICAgICB9CiB9CiAKLVJl
bmRlck9iamVjdCogU1ZHVGV4dFBhdGhFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogU1ZHVGV4dFBhdGhF
bGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikK
IHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHVGV4dFBhdGgodGhpcyk7CiB9Cklu
ZGV4OiBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDM5
NTg0KQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2V2ZW50QmFz
ZS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihtX2NvbmRpdGlvbi0+bV9uYW1lLCB0aGlzLCBmYWxzZSk7
CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9v
bCBpc1dpbmRvd0V2ZW50KSAKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqIGV2
ZW50LCBib29sKSAKICAgICB7CiAgICAgICAgIG1fYW5pbWF0aW9uLT5oYW5kbGVDb25kaXRpb25F
dmVudChldmVudCwgbV9jb25kaXRpb24pOwogICAgIH0KQEAgLTg3Niw3ICs4NzYsNyBAQCB2b2lk
IFNWR1NNSUxFbGVtZW50Ojpub3RpZnlEZXBlbmRlbnRzSW50CiAgICAgbG9vcEJyZWFrZXIucmVt
b3ZlKHRoaXMpOwogfQogICAgIAotdm9pZCBTVkdTTUlMRWxlbWVudDo6Y3JlYXRlSW5zdGFuY2VU
aW1lc0Zyb21TeW5jYmFzZShTVkdTTUlMRWxlbWVudCogc3luY2Jhc2UsIE5ld09yRXhpc3RpbmdJ
bnRlcnZhbCBuZXdPckV4aXN0aW5nKQordm9pZCBTVkdTTUlMRWxlbWVudDo6Y3JlYXRlSW5zdGFu
Y2VUaW1lc0Zyb21TeW5jYmFzZShTVkdTTUlMRWxlbWVudCogc3luY2Jhc2UsIE5ld09yRXhpc3Rp
bmdJbnRlcnZhbCkKIHsKICAgICAvLyBGSVhNRTogVG8gYmUgcmVhbGx5IGNvcnJlY3QsIHRoaXMg
c2hvdWxkIGhhbmRsZSB1cGRhdGluZyBleGlzaW5nIGludGVydmFsIGJ5IGNoYW5naW5nIAogICAg
IC8vIHRoZSBhc3NvY2lhdGVkIHRpbWVzIGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3IG9uZXMuCkBA
IC05MTEsNyArOTExLDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVtb3ZlVGltZURlcGVuZGVu
dAogICAgIG1fdGltZURlcGVuZGVudHMucmVtb3ZlKGFuaW1hdGlvbik7CiB9CiAgICAgCi12b2lk
IFNWR1NNSUxFbGVtZW50OjpoYW5kbGVDb25kaXRpb25FdmVudChFdmVudCogZXZlbnQsIENvbmRp
dGlvbiogY29uZGl0aW9uKQordm9pZCBTVkdTTUlMRWxlbWVudDo6aGFuZGxlQ29uZGl0aW9uRXZl
bnQoRXZlbnQqLCBDb25kaXRpb24qIGNvbmRpdGlvbikKIHsKICAgICBpZiAoY29uZGl0aW9uLT5t
X2JlZ2luT3JFbmQgPT0gQmVnaW4pCiAgICAgICAgIGFkZEJlZ2luVGltZShlbGFwc2VkKCkgKyBj
b25kaXRpb24tPm1fb2Zmc2V0KTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJl
dmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSwxOCArNTksMTggQEAgcHVibGljOgogCiAgICAgU1ZHSW1hZ2UqIGlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQogICAgIAorcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCkKICAgICB7CiAgICAgICAgIG1faW1hZ2UgPSAwOwog
ICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCByZXBhaW50KGNvbnN0IEludFJlY3QmIHIsIGJvb2wg
Y29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJlcGFpbnRDb250ZW50T25seSkK
KyAgICB2aXJ0dWFsIHZvaWQgcmVwYWludChjb25zdCBJbnRSZWN0JiByLCBib29sLCBib29sLCBi
b29sKQogICAgIHsKICAgICAgICAgaWYgKG1faW1hZ2UgJiYgbV9pbWFnZS0+aW1hZ2VPYnNlcnZl
cigpKQogICAgICAgICAgICAgbV9pbWFnZS0+aW1hZ2VPYnNlcnZlcigpLT5jaGFuZ2VkSW5SZWN0
KG1faW1hZ2UsIHIpOwogICAgIH0KIAotcHJpdmF0ZToKICAgICBTVkdJbWFnZSogbV9pbWFnZTsK
IH07CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMzk1ODQpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0
Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTVkdJbWFnZShvYnNlcnZlcikpOwogICAgICAgICB9Ci0gICAgICAgIH5T
VkdJbWFnZSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCB+U1ZHSW1hZ2UoKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCB1c2VzQ29udGFpbmVyU2l6ZSgpIGNvbnN0OwpAQCAtNjAs
MTIgKzYyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBGSVhNRTogU1ZH
SW1hZ2VzIGFyZSB1bmRlcnJlcG9ydGluZyBkZWNvZGVkIHNpemVzIGFuZCB3aWxsIGJlIHVuYWJs
ZQogICAgICAgICAvLyB0byBwcnVuZSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGlt
cGxlbWVudGVkIHlldC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShi
b29sIGRlc3Ryb3lBbGwgPSB0cnVlKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lE
ZWNvZGVkRGF0YShib29sKSB7IH0KICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRy
IGZyYW1lQXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KICAgICAgICAgCi1wcml2YXRlOgog
ICAgICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdG9SZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIApJbmRleDogV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHJldmlz
aW9uIDM5NTg0KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OnJlbmRlclBhdGgoCiAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKTsK
IH0KIAotdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bihHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRU
eXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0Cit2b2lkIFNWR1BhaW50U2VydmVy
R3JhZGllbnQ6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQp
IGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgLy8gcmVuZGVyUGF0aCgpIGlzIG5vdCB1
c2VkIHdoZW4gcGFpbnRpbmcgdGV4dCwgc28gd2UgcGFpbnQgdGhlIGdyYWRpZW50IGR1cmluZyB0
ZWFyZG93bigpCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlckNn
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZl
ckNnLmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQ
YWludFNlcnZlckNnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIFNW
R1BhaW50U2VydmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4CiAgICAgdGVhcmRvd24oY29udGV4dCwg
cGF0aCwgdHlwZSk7CiB9CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnRlYXJkb3duKEdyYXBoaWNz
Q29udGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wg
aXNQYWludGluZ1RleHQpIGNvbnN0Cit2b2lkIFNWR1BhaW50U2VydmVyOjp0ZWFyZG93bihHcmFw
aGljc0NvbnRleHQqJiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlLCBi
b29sKSBjb25zdAogewogICAgIC8vIG5vLW9wCiB9CkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
CShyZXZpc2lvbiAzOTU4NCkKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE1NCw3ICsxMTU0LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6cHJv
Y2Vzc1N5bmNMb2FkUmVzdQogICAgICAgICBlYyA9IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uOjpO
RVRXT1JLX0VSUjsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmFpbChTdWJyZXNvdXJj
ZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3ZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKIHsKICAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBpbiBhbiBlcnJvciBzdGF0ZSwg
Zm9yIGluc3RhbmNlIHdlIGNhbGxlZCBhYm9ydCgpLCBiYWlsIG91dCBlYXJseS4KICAgICBpZiAo
bV9lcnJvcikKQEAgLTEyMDQsNyArMTIwNCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZp
bmlzaExvYWRpbmcoU3UKICAgICAgICAgZHJvcFByb3RlY3Rpb24oKTsKIH0KIAotdm9pZCBYTUxI
dHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZ1ByZWZsaWdodChTdWJyZXNvdXJjZUxvYWRlciog
bG9hZGVyKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZ1ByZWZsaWdodChT
dWJyZXNvdXJjZUxvYWRlciopCiB7CiAgICAgQVNTRVJUKG1faW5QcmVmbGlnaHQpOwogICAgIEFT
U0VSVCghbV9zYW1lT3JpZ2luUmVxdWVzdCk7CkBAIC0xMjE3LDcgKzEyMTcsNyBAQCB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nUHJlCiAgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0Ojp3aWxsU2VuZFJlcXVlc3Qo
U3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit2b2lkIFhNTEh0dHBSZXF1ZXN0Ojp3aWxs
U2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQogewogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRv
IGJlIGZpeGVkIHRvIGZvbGxvdyB0aGUgcmVkaXJlY3QgY29ycmVjdGx5IGV2ZW4gZm9yIGNyb3Nz
LWRvbWFpbiByZXF1ZXN0cy4KICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKSkgewpJbmRleDogV2ViQ29y
ZS94bWwvWFBhdGhHcmFtbWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhHcmFt
bWFyLnkJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFhQYXRoOwogJXsK
IAogaW50IHhwYXRoeXlsZXgoWVlTVFlQRSogeXlsdmFsKSB7IHJldHVybiBQYXJzZXI6OmN1cnJl
bnQoKS0+bGV4KHl5bHZhbCk7IH0KLXZvaWQgeHBhdGh5eWVycm9yKGNvbnN0IGNoYXIqIHN0cikg
eyB9Cit2b2lkIHhwYXRoeXllcnJvcihjb25zdCBjaGFyKikgeyB9CiAgICAgCiAlfQogCkluZGV4
OiBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YU0xTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMzk1ODQpCisrKyBXZWJDb3JlL3htbC9YU0xT
dHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIERvY0xvYWRl
ciogWFNMU3R5bGVTaGVldDo6ZG9jTG9hZGVyKCkKICAgICByZXR1cm4gbV9vd25lckRvY3VtZW50
LT5kb2NMb2FkZXIoKTsKIH0KIAotYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZywgYm9vbCBzdHJpY3QpCitib29sIFhTTFN0eWxlU2hlZXQ6OnBhcnNl
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sKQogewogICAgIC8vIFBhcnNlIGluIGEg
c2luZ2xlIGNodW5rIGludG8gYW4geG1sRG9jUHRyCiAgICAgY29uc3QgVUNoYXIgQk9NID0gMHhG
RUZGOwpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDM5NTg0KQorKysgV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAg
U09GVF9MSU5LKGxpYnhzbHQsIHhzbHROZXh0SW1wb3J0LCB4c2x0UwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyh2b2lkKiB1c2Vy
RGF0YSwgY29uc3QgY2hhciogbXNnLCAuLi4pCit2b2lkIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNF
cnJvckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4pCiB7CiAgICAgLy8gSXQgd291bGQgYmUg
bmljZSB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGVycm9yIG1lc3NhZ2UuCiB9CkBAIC0xMDcs
NyArMTA3LDcgQEAgdm9pZCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYyh2b2lkKgogc3Rh
dGljIFhTTFRQcm9jZXNzb3IqIGdsb2JhbFByb2Nlc3NvciA9IDA7CiBzdGF0aWMgRG9jTG9hZGVy
KiBnbG9iYWxEb2NMb2FkZXIgPSAwOwogc3RhdGljIHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNv
bnN0IHhtbENoYXIqIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHht
bERpY3RQdHIgZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbERp
Y3RQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN0eHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c2x0TG9hZFR5cGUgdHlwZSkKQEAgLTQzNiwy
MSArNDM2LDIxIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gWFNMVFByb2Nlc3MKICAg
ICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKHJlc3VsdFN0cmluZywgcmVzdWx0TUlN
RVR5cGUsIHNvdXJjZU5vZGUsIG91dHB1dERvYyk7CiB9CiAKLXZvaWQgWFNMVFByb2Nlc3Nvcjo6
c2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxv
Y2FsTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgWFNMVFByb2Nlc3Nvcjo6c2V0UGFy
YW1ldGVyKGNvbnN0IFN0cmluZyYgLypuYW1lc3BhY2VVUkkqLywgY29uc3QgU3RyaW5nJiBsb2Nh
bE5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgLy8gRklYTUU6IG5hbWVzcGFjZSBz
dXBwb3J0PwogICAgIC8vIHNob3VsZCBtYWtlIGEgUXVhbGlmaWVkTmFtZSBoZXJlIGJ1dCB3ZSdk
IGhhdmUgdG8gZXhwb3NlIHRoZSBpbXBsCiAgICAgbV9wYXJhbWV0ZXJzLnNldChsb2NhbE5hbWUs
IHZhbHVlKTsKIH0KIAotU3RyaW5nIFhTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihjb25zdCBT
dHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0CitTdHJp
bmcgWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgLypuYW1lc3BhY2VV
UkkqLywgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IG5h
bWVzcGFjZSBzdXBwb3J0PwogICAgIC8vIHNob3VsZCBtYWtlIGEgUXVhbGlmaWVkTmFtZSBoZXJl
IGJ1dCB3ZSdkIGhhdmUgdG8gZXhwb3NlIHRoZSBpbXBsCiAgICAgcmV0dXJuIG1fcGFyYW1ldGVy
cy5nZXQobG9jYWxOYW1lKTsKIH0KIAotdm9pZCBYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0
ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKQor
dm9pZCBYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiAvKm5hbWVz
cGFjZVVSSSovLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkKIHsKICAgICAvLyBGSVhNRTogbmFt
ZXNwYWNlIHN1cHBvcnQ/CiAgICAgbV9wYXJhbWV0ZXJzLnJlbW92ZShsb2NhbE5hbWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26433</attachid>
            <date>2009-01-05 09:14:41 -0800</date>
            <delta_ts>2009-01-05 09:21:47 -0800</delta_ts>
            <desc>step 1 ready to land after fixing what Alexey asked</desc>
            <filename>UnusedParamsStep1Patch2.txt</filename>
            <type>text/plain</type>
            <size>235573</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTU5NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDEtMDUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAg
QnVnIDIzMTAyOiB0dXJuIG9uIHVudXNlZCBwYXJhbWV0ZXIgd2FybmluZ3MgaW4gV2ViQ29yZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMDIKKwor
ICAgICAgICBGaXJzdCBzdGVwOiBGaXggdGhlIHNpbXBsZSBjYXNlcyB3aGVyZSB3ZSBjYW4ganVz
dCByZW1vdmUgYW4gYXJndW1lbnQgbmFtZS4KKyAgICAgICAgQWxzbyBtYWRlIGEgZmV3IG1vcmUg
dGhpbmdzIHByb3RlY3RlZCBhbmQgcHJpdmF0ZS4KKworICAgICAgICAqIG1hbnkgZmlsZXMKKwog
MjAwOS0wMS0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFz
UGl4ZWxBcnJheUN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNQaXhlbEFycmF5Q3VzdG9tLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgCi0gICAgaW5saW5lIEpTVmFsdWUqIEpTQ2FudmFzUGl4ZWxBcnJheTo6Z2V0QnlJbmRleChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQorICAgIGlubGluZSBKU1ZhbHVlKiBKU0Nh
bnZhc1BpeGVsQXJyYXk6OmdldEJ5SW5kZXgoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpCiAg
ICAgewogICAgICAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdDsKICAgICAgICAgaWYgKCFpbXBsKCkt
PmdldChpbmRleCwgcmVzdWx0KSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5
MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBKU1ZhbHVlKiB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ2EKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3R5bGUt
PmNvbG9yKCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gdG9IVE1MQ2Fu
dmFzU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBQYXNzUmVm
UHRyPENhbnZhc1N0eWxlPiB0b0hUTUxDYW52YXNTdHlsZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiB2
YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBDYW52
YXNTdHlsZTo6Y3JlYXRlKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoKSk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNyArOTUsNyBAQCBKU0V2ZW50TGlzdGVuZXIqIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5k
CiAgICAgcmV0dXJuIGxpc3RlbmVycy5nZXQob2JqZWN0KTsKIH0KIAotUGFzc1JlZlB0cjxKU0V2
ZW50TGlzdGVuZXI+IEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCitQYXNzUmVm
UHRyPEpTRXZlbnRMaXN0ZW5lcj4gSlNET01HbG9iYWxPYmplY3Q6OmZpbmRPckNyZWF0ZUpTRXZl
bnRMaXN0ZW5lcihFeGVjU3RhdGUqLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCiB7CiAg
ICAgaWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNFdmVudExpc3RlbmVyKHZh
bCwgaXNJbmxpbmUpKQogICAgICAgICByZXR1cm4gbGlzdGVuZXI7CkBAIC0xMDcsNyArMTA3LDcg
QEAgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+IEpTRE9NR2xvYmFsTwogICAgIHJldHVybiBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdCh2YWwpLCB0aGlzLCBpc0lubGluZSkuZ2V0
KCk7CiB9CiAKLUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBKU0RPTUdsb2JhbE9iamVjdDo6
ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSog
dmFsLCBib29sIGlzSW5saW5lKQorSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIEpTRE9NR2xv
YmFsT2JqZWN0OjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiwgSlNW
YWx1ZSogdmFsLCBib29sIGlzSW5saW5lKQogewogICAgIGlmICghdmFsLT5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsMjIgKzMwMiwyMiBAQCBET01X
aW5kb3cqIHRvRE9NV2luZG93KEpTVmFsdWUqIHZhbHVlKQogICAgIHJldHVybiAwOwogfQogCi1K
U1ZhbHVlKiBub25DYWNoaW5nU3RhdGljQ2xvc2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Nsb3NlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYpCiB7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywg
MCwgcHJvcGVydHlOYW1lLCBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UpOwogfQog
Ci1KU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljQmx1ckZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljQmx1ckZ1bmN0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMs
IDAsIHByb3BlcnR5TmFtZSwganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkJsdXIpOwogfQog
Ci1KU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljRm9jdXNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQorSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0ZvY3VzRnVuY3Rpb25HZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpCiB7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhl
YywgMCwgcHJvcGVydHlOYW1lLCBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uRm9jdXMpOwog
fQogCi1KU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljUG9zdE1lc3NhZ2VGdW5jdGlvbkdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdlRnVu
Y3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgMiwgcHJvcGVydHlOYW1lLCBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1
bmN0aW9uUG9zdE1lc3NhZ2UpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxG
b3JtRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1ib29sIEpTSFRNTEZvcm1FbGVtZW50OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRl
KiBleGVjLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKK2Jvb2wgSlNIVE1MRm9ybUVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3Rh
dGUqLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKIHsKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbmFtZWRJdGVtczsKICAgICBmb3JtLT5n
ZXROYW1lZEVsZW1lbnRzKHByb3BlcnR5TmFtZSwgbmFtZWRJdGVtcyk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBib29sIEpTSFRN
TEZyYW1lU2V0RWxlbWVudDo6Y2FuR2V0SXRlbXNGCiAgICAgcmV0dXJuIGZyYW1lICYmIGZyYW1l
LT5oYXNUYWdOYW1lKGZyYW1lVGFnKTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MRnJhbWVTZXRFbGVt
ZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU0hUTUxGcmFtZVNl
dEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNIVE1MRWxlbWVudCog
dGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihhc09iamVjdChzbG90LnNsb3RC
YXNlKCkpKTsKICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4odGhpc09iai0+aW1wbCgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0
b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBub25DYWNo
aW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBu
b25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJl
dHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwg
anNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25CYWNrKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGlu
Z1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSog
bm9uQ2FjaGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAg
ICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5h
bWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uRm9yd2FyZCk7CiB9CiAKLUpTVmFsdWUqIG5v
bkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
KiBub25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICBy
ZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAxLCBwcm9wZXJ0eU5hbWUs
IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uR28pOwogfQpAQCAtOTIsNyArOTIsNyBAQCBib29s
IEpTSGlzdG9yeTo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgSlNIaXN0b3J5OjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQor
Ym9vbCBKU0hpc3Rvcnk6OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90JikKIHsKICAgICAvLyBPbmx5IGFsbG93IHB1
dHRpbmcgYnkgZnJhbWVzIGluIHRoZSBzYW1lIG9yaWdpbi4KICAgICBpZiAoIWFsbG93c0FjY2Vz
c0Zyb21GcmFtZShleGVjLCBpbXBsKCktPmZyYW1lKCkpKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAkocmV2aXNpb24g
Mzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNWYWx1ZSogSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjpldmFsdWF0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUq
IEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU1ZhbHVlKiBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnRoaXNPYmplY3QoRXhlY1N0YXRlKikg
Y29uc3QKIHsKICAgICByZXR1cm4gaW1wbCgpLT50aGlzT2JqZWN0KCkgPyBpbXBsKCktPnRoaXNP
YmplY3QoKSA6IGpzTnVsbCgpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0
aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNM
b2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICszNywxNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIG5vbkNh
Y2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFs
dWUqIG5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7
CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMSwgcHJvcGVy
dHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZXBsYWNlKTsKIH0KIAotSlNWYWx1
ZSogbm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljUmVsb2FkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYpCiB7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMCwg
cHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZWxvYWQpOwogfQogCi1K
U1ZhbHVlKiBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK0pTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVj
LCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvbkFzc2lnbik7CiB9
CkBAIC0yNjEsNyArMjYxLDcgQEAgSlNWYWx1ZSogSlNMb2NhdGlvbjo6cmVwbGFjZShFeGVjU3Rh
dGUqIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0xvY2F0aW9u
OjpyZWxvYWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSog
SlNMb2NhdGlvbjo6cmVsb2FkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAJKHJl
dmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTMgKzQ4LDEzIEBAIEpTTmFtZWROb2Rlc0Nv
bGxlY3Rpb246OkpTTmFtZWROb2Rlc0NvbGwKIHsKIH0KIAotSlNWYWx1ZSogSlNOYW1lZE5vZGVz
Q29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU05h
bWVkTm9kZXNDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTTmFtZWROb2Rl
c0NvbGxlY3Rpb24qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05hbWVkTm9kZXNDb2xsZWN0aW9u
Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IHRoaXNPYmotPm1fbm9kZXMtPnNpemUoKSk7CiB9CiAKLUpTVmFsdWUqIEpTTmFtZWROb2Rlc0Nv
bGxlY3Rpb246OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU05hbWVk
Tm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNOYW1lZE5vZGVzQ29s
bGVjdGlvbiAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24qPihh
c09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCAoKnRoaXNP
YmotPm1fbm9kZXMpW3Nsb3QuaW5kZXgoKV0uZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBKU05vZGVJdGVyYXRvcjo6bWFyaygpCiAgICAgRE9NT2Jq
ZWN0OjptYXJrKCk7CiB9CiAKLUpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBKU05vZGVJdGVyYXRv
cjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+bmV4dE5v
ZGUoZXhlYywgZWMpOwpAQCAtNTIsNyArNTIsNyBAQCBKU1ZhbHVlKiBKU05vZGVJdGVyYXRvcjo6
bmV4dE5vZGUoRXhlY1N0CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZS5nZXQoKSk7CiB9CiAK
LUpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogSlNOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9k
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05vZGUoZXhl
YywgZWMpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50
RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcg
QEAgc3RhdGljIFJ1bnRpbWVPYmplY3RJbXAqIGdldFJ1bnRpbWVPYmplYwogICAgIHJldHVybiBK
U0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChleGVjLCBpbnN0YW5j
ZSk7CiB9CiAKLUpTVmFsdWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K0pTVmFsdWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTSFRNTEVsZW1lbnQq
IHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oYXNPYmplY3Qoc2xvdC5zbG90
QmFzZSgpKSk7CiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KHRoaXNPYmotPmltcGwoKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVh
cmFudGluZWRPYmplY3RXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY3LDcgKzI2Nyw3IEBAIENhbGxUeXBlIEpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyOjpnZXQKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi12b2lkIEpTUXVhcmFu
dGluZWRPYmplY3RXcmFwcGVyOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIGFycmF5KQordm9pZCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6
Z2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXkpCiB7
CiAgICAgaWYgKCFhbGxvd3NHZXRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQT0RUeXBlV3JhcHBlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQT0RUeXBlV3JhcHBlci5oCShyZXZpc2lvbiAz
OTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQT0RUeXBlV3JhcHBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKG1f
cGFyZW50LmdldCgpLT4qbV9nZXR0ZXIpKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGNv
bW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIFNWR0VsZW1lbnQqIGNvbnRleHQpCisgICAgdmlydHVh
bCB2b2lkIGNvbW1pdENoYW5nZShQT0RUeXBlIHR5cGUsIFNWR0VsZW1lbnQqKQogICAgIHsKICAg
ICAgICAgKG1fcGFyZW50LmdldCgpLT4qbV9zZXR0ZXIpKHR5cGUpOwogICAgIH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogSlNTVkdQYXRoU2VnTGlzdDo6Y2xl
YXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSogSlNTVkdQ
YXRoU2VnTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Ry
ZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNU
cmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcg
QEAgdm9pZCBKU1RyZWVXYWxrZXI6Om1hcmsoKQogICAgIERPTU9iamVjdDo6bWFyaygpOwogfQog
ICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIE5vZGUqIG5vZGUgPSBpbXBs
KCktPnBhcmVudE5vZGUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAt
NDUsNyArNDUsNyBAQCBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0CiAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CiB9CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVXYWxr
ZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+Zmlyc3RDaGlsZChleGVjKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC01Myw3ICs1Myw3IEBAIEpTVmFsdWUqIEpT
VHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChFeGVjU3QKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2Rl
KTsKIH0KICAgICAKLUpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bGFzdENo
aWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9
IGltcGwoKS0+bGFzdENoaWxkKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
QEAgLTYxLDcgKzYxLDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0
YQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1ZSogSlNUcmVl
V2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dFNpYmxpbmcoZXhl
Yyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNjksNyArNjksNyBAQCBKU1Zh
bHVlKiBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTCiAgICAgcmV0dXJuIHRvSlMoZXhl
Yywgbm9kZSk7CiB9CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzU2libGlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlKiBKU1RyZWVX
YWxrZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQog
ewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzU2libGluZyhleGVjKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC03Nyw3ICs3Nyw3IEBAIEpTVmFsdWUqIEpTVHJl
ZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEUKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsK
IH0KICAgICAKLUpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlv
dXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9k
ZSA9IGltcGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwcmV2aW91c05v
ZGUoRXhlYwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1ZSog
SlNUcmVlV2Fsa2VyOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZXhlYyk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDcgKzQ3LDcgQEAgSlNXb3JrZXJDb25zdHJ1Y3Rvcjo6SlNXb3JrZXJDb25zdHJ1Y3RvcgogICAg
IHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAx
KSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9CiAKLXN0YXRpYyBKU09iamVjdCog
Y29uc3RydWN0V29ya2VyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXb3JrZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYg
KGFyZ3Muc2l6ZSgpID09IDApCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSlNXb3JrZXJDb250ZXh0OjptYXJrKCkKICAgICB9CiB9
CiAKLUpTVmFsdWUqIEpTV29ya2VyQ29udGV4dDo6c2VsZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU1ZhbHVlKiBKU1dvcmtlckNvbnRleHQ6OnNlbGYoRXhlY1N0YXRlKikgY29uc3QKIHsKICAg
ICByZXR1cm4gYXNWYWx1ZSgpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQ
cm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3I6OkpTWFNM
VFByb2NlcwogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBK
U1hTTFRQcm9jZXNzb3JQcm90b3R5cGU6OnNlbGYoZXhlYyksIE5vbmUpOwogfQogCi1zdGF0aWMg
SlNPYmplY3QqIGNvbnN0cnVjdFhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFhTTFRQ
cm9jZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmKQogewog
ICAgIHJldHVybiBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFhTTFRQcm9jZXNzb3Is
IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpLmdldCgpKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzQsOSArMTM0LDEwIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZGlzY29ubmVjdFBsYXRmb3IK
IH0KIAogI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisKIHN0YXRpYyBwdGhyZWFkX3QgbWFp
blRocmVhZDsKIAotc3RhdGljIHZvaWQgdXBkYXRlUmVuZGVyaW5nRm9yQmluZGluZ3MoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNPYmplY3QqIHJvb3RPYmplY3QpCitzdGF0aWMgdm9pZCB1
cGRhdGVSZW5kZXJpbmdGb3JCaW5kaW5ncyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
IHJvb3RPYmplY3QpCiB7CiAgICAgaWYgKHB0aHJlYWRfc2VsZigpICE9IG1haW5UaHJlYWQpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE2NSw2ICsxNjYsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmluaXRKYXZhSlNCaW5kaW5nCiAgICAgSlNDOjpCaW5kaW5nczo6SmF2YUpTT2JqZWN0Ojppbml0
aWFsaXplSk5JVGhyZWFkaW5nKCk7CiAgICAgSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OnNldERp
ZEV4ZWN1dGVGdW5jdGlvbih1cGRhdGVSZW5kZXJpbmdGb3JCaW5kaW5ncyk7CiB9CisKICNlbmRp
ZgogCiB9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdl
YkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE2LDcgKzQx
Niw3IEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQIG5wcCwgTlBPYmplY3QqIG8s
IGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVz
dWx0KQorYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBjb25zdCBOUFZhcmlh
bnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBp
ZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgICAgSmF2YVNjcmlw
dE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7Cklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcs
NyBAQCBSdW50aW1lT2JqZWN0SW1wOjpSdW50aW1lT2JqZWN0SW1wKEV4ZWNTCiAgICAgaW5zdGFu
Y2UtPnJvb3RPYmplY3QoKS0+YWRkUnVudGltZU9iamVjdCh0aGlzKTsKIH0KICAgICAKLVJ1bnRp
bWVPYmplY3RJbXA6OlJ1bnRpbWVPYmplY3RJbXAoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRy
PFN0cnVjdHVyZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPEluc3RhbmNlPiBpKQorUnVudGltZU9i
amVjdEltcDo6UnVudGltZU9iamVjdEltcChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPEluc3RhbmNlPiBpKQogICAgIDogSlNPYmplY3Qoc3Ry
dWN0dXJlKQogICAgICwgaW5zdGFuY2UoaSkKIHsKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIFJ1
bnRpbWVPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJ1bnRpbWVPYmplY3RJbXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK3ZvaWQgUnVudGltZU9iamVjdEltcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikK
IHsKICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgIHRocm93SW52YWxpZEFjY2Vzc0Vycm9y
KGV4ZWMpOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBX
ZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgU3RyaW5nIENTU0NhbnZhc1ZhbHVlOjpjc3NUZXh0KCkgY29uc3QKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKEhUTUxDYW52
YXNFbGVtZW50KiBlbGVtZW50LCBjb25zdCBGbG9hdFJlY3QmIGNoYW5nZWRSZWN0KQordm9pZCBD
U1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEZs
b2F0UmVjdCYgY2hhbmdlZFJlY3QpCiB7CiAgICAgSW50UmVjdCBpbWFnZUNoYW5nZVJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKICAgICBIYXNoTWFwPFJlbmRlck9iamVjdCos
IEludFNpemU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7CkBAIC01Miw3
ICs1Miw3IEBAIHZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTEMKICAgICAg
ICAgY3Vyci0+Zmlyc3QtPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+
KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAotdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2Fu
dmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgQ1NTQ2FudmFzVmFs
dWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKQogewogICAgIEhhc2hNYXA8UmVu
ZGVyT2JqZWN0KiwgSW50U2l6ZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQo
KTsKICAgICBmb3IgKEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgSW50U2l6ZT46OmNvbnN0X2l0ZXJh
dG9yIGN1cnIgPSBtX2NsaWVudHMuYmVnaW4oKTsgY3VyciAhPSBlbmQ7ICsrY3VycikKSW5kZXg6
IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAzOTU5
MykKKysrIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw4ICs0Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwogICAg
IHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkg
Y29uc3QgeyByZXR1cm4gLTE7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0
KGludCBwcm9wZXJ0eUlEKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgaW50
IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCAvKnByb3BlcnR5SUQqLykgY29uc3QgeyByZXR1cm4g
LTE7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCAvKnByb3BlcnR5
SUQqLykgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKSW5kZXg6
IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NTY2LDIzICs0NTY2LDM3IEBAIENTU1J1bGUqIENTU1BhcnNl
cjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgIUVO
QUJMRShDU1NfVkFSSUFCTEVTKQorCitDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZVZhcmlhYmxl
c1J1bGUoTWVkaWFMaXN0KiwgYm9vbCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBDU1NQ
YXJzZXI6OmFkZFZhcmlhYmxlKGNvbnN0IENTU1BhcnNlclN0cmluZyYsIENTU1BhcnNlclZhbHVl
TGlzdCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENTU1BhcnNlcjo6YWRkVmFy
aWFibGVEZWNsYXJhdGlvbkJsb2NrKGNvbnN0IENTU1BhcnNlclN0cmluZyYpCit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCisjZWxzZQorCiBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZVZhcmlh
Ymxlc1J1bGUoTWVkaWFMaXN0KiBtZWRpYUxpc3QsIGJvb2wgdmFyaWFibGVzS2V5d29yZCkKIHsK
LSNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICBSZWZQdHI8Q1NTVmFyaWFibGVzUnVsZT4g
cnVsZSA9IENTU1ZhcmlhYmxlc1J1bGU6OmNyZWF0ZShtX3N0eWxlU2hlZXQsIG1lZGlhTGlzdCwg
dmFyaWFibGVzS2V5d29yZCk7CiAgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oQ1NTVmFyaWFibGVz
RGVjbGFyYXRpb246OmNyZWF0ZShydWxlLmdldCgpLCBtX3ZhcmlhYmxlTmFtZXMsIG1fdmFyaWFi
bGVWYWx1ZXMpKTsKICAgICBjbGVhclZhcmlhYmxlcygpOyAgICAKICAgICBDU1NSdWxlKiByZXN1
bHQgPSBydWxlLmdldCgpOwogICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlLnJl
bGVhc2UoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5k
aWYKIH0KIAogYm9vbCBDU1NQYXJzZXI6OmFkZFZhcmlhYmxlKGNvbnN0IENTU1BhcnNlclN0cmlu
ZyYgbmFtZSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QpCiB7Ci0jaWYgRU5BQkxFKENT
U19WQVJJQUJMRVMpCiAgICAgaWYgKGNoZWNrRm9yVmFyaWFibGVzKHZhbHVlTGlzdCkpIHsKICAg
ICAgICAgZGVsZXRlIHZhbHVlTGlzdDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDU5MCwy
NCArNDYwNCwyMSBAQCBib29sIENTU1BhcnNlcjo6YWRkVmFyaWFibGUoY29uc3QgQ1NTUGFyCiAg
ICAgbV92YXJpYWJsZU5hbWVzLmFwcGVuZChTdHJpbmcobmFtZSkpOwogICAgIG1fdmFyaWFibGVW
YWx1ZXMuYXBwZW5kKENTU1ZhbHVlTGlzdDo6Y3JlYXRlRnJvbVBhcnNlclZhbHVlTGlzdCh2YWx1
ZUxpc3QpKTsKICAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjphZGRWYXJpYWJsZURlY2xhcmF0aW9uQmxvY2soY29u
c3QgQ1NTUGFyc2VyU3RyaW5nJiBuYW1lKQorYm9vbCBDU1NQYXJzZXI6OmFkZFZhcmlhYmxlRGVj
bGFyYXRpb25CbG9jayhjb25zdCBDU1NQYXJzZXJTdHJpbmcmKQogewogLy8gRklYTUU6IERpc2Fi
bGluZyBkZWNsYXJhdGlvbnMgYXMgdmFyaWFibGUgdmFsdWVzIGZvciBub3cgc2luY2UgdGhleSBu
byBsb25nZXIgaGF2ZSBhIGNvbW1vbiBiYXNlIGNsYXNzIHdpdGggQ1NTVmFsdWVzLgotI2lmIEVO
QUJMRShDU1NfVkFSSUFCTEVTKSAmJiAwCisjaWYgMAogICAgIG1fdmFyaWFibGVOYW1lcy5hcHBl
bmQoU3RyaW5nKG5hbWUpKTsKICAgICBtX3ZhcmlhYmxlVmFsdWVzLmFwcGVuZChDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKDAsIG1fcGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJz
ZWRQcm9wZXJ0aWVzKSk7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgorICAgIHJldHVybiB0cnVlOwogfQog
CisjZW5kaWYKKwogdm9pZCBDU1NQYXJzZXI6OmNsZWFyVmFyaWFibGVzKCkKIHsKICAgICBtX3Zh
cmlhYmxlTmFtZXMuY2xlYXIoKTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1J1bGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29y
ZS9jc3MvQ1NTUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwogICAgIHZvaWQgc2V0Q3Nz
VGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYp
IHsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQpCklu
ZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwNiw3ICsxNjA2
LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIHJldHVy
biBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NT
U3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIGNvbnN0
IFN0cmluZyYgcHNldWRvU3R5bGUsIGJvb2wgYXV0aG9yT25seSkKK1Bhc3NSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1l
bnQqLCBjb25zdCBTdHJpbmcmLCBib29sKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KICAgICByZXR1cm4gMDsKQEAgLTI0MjQsNyArMjQyNCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6U2VsZWN0b3JDaGVja2VyOjoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3Mo
Q1NTU2VsZWN0b3IqIHNlbCwgUmVuZGVyU3R5bGU6OlBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBj
b25zdAorYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xs
YmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqIHNlbCwgUmVuZGVyU3R5bGU6OlBzZXVkb0lkJikg
Y29uc3QKIHsKICAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhciA9IFJlbmRlclNjcm9sbGJh
cjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCk7CiAgICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0g
UmVuZGVyU2Nyb2xsYmFyOjpwYXJ0Rm9yU3R5bGVSZXNvbHZlKCk7CkBAIC0yNTEyLDcgKzI1MTIs
NyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZFZhcmlhYmxlcyhDU1NWCiAgICAgfQogfQog
Ci1DU1NWYWx1ZSogQ1NTU3R5bGVTZWxlY3Rvcjo6cmVzb2x2ZVZhcmlhYmxlRGVwZW5kZW50VmFs
dWUoQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSogdmFsKQorQ1NTVmFsdWUqIENTU1N0eWxlU2Vs
ZWN0b3I6OnJlc29sdmVWYXJpYWJsZURlcGVuZGVudFZhbHVlKENTU1ZhcmlhYmxlRGVwZW5kZW50
VmFsdWUqKQogewogICAgIHJldHVybiAwOwogfQpAQCAtNTYwMSwxNCArNTYwMSwxNCBAQCBmbG9h
dCBDU1NTdHlsZVNlbGVjdG9yOjpmb250U2l6ZUZvcktleXdvCiAgICAgcmV0dXJuIG1heChmb250
U2l6ZUZhY3RvcnNba2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWluTG9n
aWNhbFNpemUpOwogfQogCi1mbG9hdCBDU1NTdHlsZVNlbGVjdG9yOjpsYXJnZXJGb250U2l6ZShm
bG9hdCBzaXplLCBib29sIHF1aXJrc01vZGUpIGNvbnN0CitmbG9hdCBDU1NTdHlsZVNlbGVjdG9y
OjpsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAogewogICAgIC8vIEZJWE1F
OiBGaWd1cmUgb3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0
byB4eHgtbGFyZ2UpIGFuZCBzY2FsZSB1cCB0bwogICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2ZWwu
ICAKICAgICByZXR1cm4gc2l6ZSAqIDEuMmY7CiB9CiAKLWZsb2F0IENTU1N0eWxlU2VsZWN0b3I6
OnNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sIHF1aXJrc01vZGUpIGNvbnN0CitmbG9h
dCBDU1NTdHlsZVNlbGVjdG9yOjpzbWFsbGVyRm9udFNpemUoZmxvYXQgc2l6ZSwgYm9vbCkgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGVyZSB3ZSBmYWxsIGluIHRoZSBzaXpl
IHJhbmdlcyAoeHgtc21hbGwgdG8geHh4LWxhcmdlKSBhbmQgc2NhbGUgZG93biB0bwogICAgIC8v
IHRoZSBuZXh0IHNpemUgbGV2ZWwuIApJbmRleDogV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVzRGVj
bGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlc0RlY2xh
cmF0aW9uLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZXNE
ZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBDU1NWYWx1
ZUxpc3QqIENTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uOjpnCiAgICAgcmV0dXJuIDA7CiB9CiAKLUNT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbjo6Z2V0UGFy
c2VkVmFyaWFibGVEZWNsYXJhdGlvbkJsb2NrKGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lKQor
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIENTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uOjpnZXRQ
YXJzZWRWYXJpYWJsZURlY2xhcmF0aW9uQmxvY2soY29uc3QgU3RyaW5nJikKIHsKIC8vIEZJWE1F
OiBEaXNhYmxpbmcgZGVjbGFyYXRpb25zIGFzIHZhcmlhYmxlIHZhbHVlcyBmb3Igbm93IHNpbmNl
IHRoZXkgbm8gbG9uZ2VyIGhhdmUgYSBjb21tb24gYmFzZSBjbGFzcyB3aXRoIENTU1ZhbHVlcy4K
ICNpZiAwCkluZGV4OiBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFtZXM7CiAK
IGVudW0gTWVkaWFGZWF0dXJlUHJlZml4IHsgTWluUHJlZml4LCBNYXhQcmVmaXgsIE5vUHJlZml4
IH07CiAKLXR5cGVkZWYgYm9vbCAoKkV2YWxGdW5jKShDU1NWYWx1ZSosIFJlbmRlclN0eWxlKiwg
RnJhbWUqLCAgTWVkaWFGZWF0dXJlUHJlZml4KTsKK3R5cGVkZWYgYm9vbCAoKkV2YWxGdW5jKShD
U1NWYWx1ZSosIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXgpOwogdHlw
ZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBFdmFsRnVuYz4gRnVuY3Rpb25NYXA7CiBz
dGF0aWMgRnVuY3Rpb25NYXAqIGdGdW5jdGlvbk1hcDsKIApAQCAtNjMsNyArNjMsNyBAQCBzdGF0
aWMgRnVuY3Rpb25NYXAqIGdGdW5jdGlvbk1hcDsKICAqIHNjYW46IFRoZSAic2NhbiIgbWVkaWEg
ZmVhdHVyZSBkZXNjcmliZXMgdGhlIHNjYW5uaW5nIHByb2Nlc3Mgb2YKICAqIHR2IG91dHB1dCBk
ZXZpY2VzLiBJdCdzIHVua25vd24gaG93IHRvIHJldHJpZXZlIHRoaXMgaW5mb3JtYXRpb24gZnJv
bQogICogdGhlIHBsYXRmb3JtCi0gKiByZXNvbHV0aW9uLCBtaW4tcmVzb2x1dGlvbiwgIG1heC1y
ZXNvbHV0aW9uOiBjc3MgcGFyc2VyIGRvZXNuJ3Qgc2VlbSB0bworICogcmVzb2x1dGlvbiwgbWlu
LXJlc29sdXRpb24sIG1heC1yZXNvbHV0aW9uOiBjc3MgcGFyc2VyIGRvZXNuJ3Qgc2VlbSB0bwog
ICogc3VwcG9ydCBDU1NfRElNRU5TSU9OCiAgKi8KIApAQCAtMjA3LDcgKzIwNyw3IEBAIHN0YXRp
YyBib29sIG51bWJlclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXN0YXRpYyBib29sIGNvbG9yTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQor
c3RhdGljIGJvb2wgY29sb3JNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVy
U3R5bGUqLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICBpbnQg
Yml0c1BlckNvbXBvbmVudCA9IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KGZyYW1lLT5wYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCkpOwogICAgIGZsb2F0IG51bWJlcjsKQEAgLTIxNyw3ICsyMTcs
NyBAQCBzdGF0aWMgYm9vbCBjb2xvck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsCiAgICAgcmV0dXJu
IGJpdHNQZXJDb21wb25lbnQgIT0gMDsKIH0KIAotc3RhdGljIGJvb2wgbW9ub2Nocm9tZU1lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBm
cmFtZSwgIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIG1vbm9jaHJvbWVNZWRp
YUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSog
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICBpZiAoIXNjcmVlbklzTW9ub2No
cm9tZShmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKSkgewogICAgICAgICBpZiAo
dmFsdWUpIHsKQEAgLTIzMCw3ICsyMzAsNyBAQCBzdGF0aWMgYm9vbCBtb25vY2hyb21lTWVkaWFG
ZWF0dXJlRXZhbChDCiAgICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5
bGUsIGZyYW1lLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIGRldmljZV9hc3BlY3RfcmF0aW9NZWRp
YUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSog
ZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBkZXZpY2VfYXNwZWN0
X3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgaWYgKHZhbHVlKSB7CiAg
ICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1l
KCktPnZpZXcoKSk7CkBAIC0yNDYsNyArMjQ2LDcgQEAgc3RhdGljIGJvb2wgZGV2aWNlX2FzcGVj
dF9yYXRpb01lZGlhRmVhdAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBkZXZp
Y2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlICp2YWx1ZSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBi
b29sIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUgKnZhbHVlLCBS
ZW5kZXJTdHlsZSosIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAg
IGlmICh2YWx1ZSkKICAgICAgICAgcmV0dXJuIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYg
Y29tcGFyZVZhbHVlKGZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5zY2FsZUZhY3RvcigpLCBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKS0+Z2V0RmxvYXRWYWx1ZSgpLCBvcCk7
CkBAIC0yNTQsNyArMjU0LDcgQEAgc3RhdGljIGJvb2wgZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFG
ZWF0dQogICAgIHJldHVybiBmcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+c2NhbGVGYWN0b3IoKSAh
PSAwOwogfQogCi1zdGF0aWMgYm9vbCBncmlkTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4
IG9wKQorc3RhdGljIGJvb2wgZ3JpZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBS
ZW5kZXJTdHlsZSosIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAgIC8vIGlm
IG91dHB1dCBkZXZpY2UgaXMgYml0bWFwLCBncmlkOiAwID09IHRydWUKICAgICAvLyBhc3N1bWUg
d2UgaGF2ZSBiaXRtYXAgZGV2aWNlCkBAIC0yNjQsNyArMjY0LDcgQEAgc3RhdGljIGJvb2wgZ3Jp
ZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGlj
IGJvb2wgZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0
YXRpYyBib29sIGRldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkK
IHsKICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgRmxvYXRSZWN0IHNnID0gc2NyZWVuUmVjdChm
cmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKQEAgLTI3NSw3ICsyNzUsNyBAQCBz
dGF0aWMgYm9vbCBkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBib29sIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVhdHVyZVBy
ZWZpeCBvcCkKK3N0YXRpYyBib29sIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4IG9wKQogewogICAgIGlmICh2YWx1ZSkgewogICAgICAgICBGbG9hdFJlY3Qgc2cgPSBz
Y3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOwpAQCAtMjg2LDcg
KzI4Niw3IEBAIHN0YXRpYyBib29sIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0
dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1
ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXggb3ApCiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICAK
QEAgLTI5Niw3ICsyOTYsNyBAQCBzdGF0aWMgYm9vbCBoZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENT
U1ZhCiAgICAgcmV0dXJuIHZpZXctPmxheW91dEhlaWdodCgpICE9IDA7CiB9CiAKLXN0YXRpYyBi
b29sIHdpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wg
d2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICBGcmFtZVZpZXcq
IHZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIApAQCAtMzA4LDgyICszMDgsODIgQEAgc3RhdGlj
IGJvb2wgd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbAogCiAvLyByZXN0IG9mIHRoZSBmdW5j
dGlvbnMgYXJlIHRyYW1wb2xpbmVzIHdoaWNoIHNldCB0aGUgcHJlZml4IGFjY29yZGluZyB0byB0
aGUgbWVkaWEgZmVhdHVyZSBleHByZXNzaW9uIHVzZWQKIAotc3RhdGljIGJvb2wgbWluX2NvbG9y
TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJh
bWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4IC8qb3AqLykKK3N0YXRpYyBib29sIG1pbl9j
b2xvck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIHJldHVybiBjb2xvck1l
ZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3Rh
dGljIGJvb2wgbWF4X2NvbG9yTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4IC8qb3AqLykK
K3N0YXRpYyBib29sIG1heF9jb2xvck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewog
ICAgIHJldHVybiBjb2xvck1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWF4
UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX21vbm9jaHJvbWVNZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBNZWRp
YUZlYXR1cmVQcmVmaXggLypvcCovKQorc3RhdGljIGJvb2wgbWluX21vbm9jaHJvbWVNZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAgICByZXR1cm4gbW9ub2Nocm9tZU1lZGlhRmVh
dHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJv
b2wgbWF4X21vbm9jaHJvbWVNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggLypvcCovKQor
c3RhdGljIGJvb2wgbWF4X21vbm9jaHJvbWVNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1
ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkK
IHsKICAgICByZXR1cm4gbW9ub2Nocm9tZU1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBm
cmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2RldmljZV9hc3BlY3RfcmF0
aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBG
cmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggLypvcCovKQorc3RhdGljIGJvb2wgbWlu
X2RldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAg
ICByZXR1cm4gZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxl
LCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2RldmljZV9hc3BlY3Rf
cmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggLypvcCovKQorc3RhdGljIGJvb2wg
bWF4X2RldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsK
ICAgICByZXR1cm4gZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0
eWxlLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2RldmljZV9waXhl
bF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVhdHVyZVByZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9v
bCBtaW5fZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7
CiAgICAgcmV0dXJuIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0
eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2RldmljZV9waXhl
bF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVhdHVyZVByZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9v
bCBtYXhfZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7
CiAgICAgcmV0dXJuIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0
eWxlLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2hlaWdodE1lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBm
cmFtZSwgIE1lZGlhRmVhdHVyZVByZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9vbCBtaW5faGVpZ2h0
TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgcmV0dXJuIGhlaWdodE1lZGlh
RmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGlj
IGJvb2wgbWF4X2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVhdHVyZVByZWZpeCAvKm9wKi8pCitz
dGF0aWMgYm9vbCBtYXhfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAg
ICAgcmV0dXJuIGhlaWdodE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWF4
UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0
dXJlUHJlZml4IC8qb3AqLykKK3N0YXRpYyBib29sIG1pbl93aWR0aE1lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4KQogewogICAgIHJldHVybiB3aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUs
IHN0eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X3dpZHRoTWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUq
IGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJlZml4IC8qb3AqLykKK3N0YXRpYyBib29sIG1heF93aWR0
aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIHJldHVybiB3aWR0aE1lZGlh
RmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGlj
IGJvb2wgbWluX2RldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggLypv
cCovKQorc3RhdGljIGJvb2wgbWluX2RldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCkKIHsKICAgICByZXR1cm4gZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwodmFs
dWUsIHN0eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2Rldmlj
ZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQcmVmaXggLypvcCovKQorc3RhdGljIGJv
b2wgbWF4X2RldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAg
ICByZXR1cm4gZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFt
ZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2RldmljZV93aWR0aE1lZGlhRmVh
dHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFt
ZSwgIE1lZGlhRmVhdHVyZVByZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9vbCBtaW5fZGV2aWNlX3dp
ZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgcmV0dXJuIGRldmljZV93
aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKIH0K
IAotc3RhdGljIGJvb2wgbWF4X2RldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVhdHVyZVBy
ZWZpeCAvKm9wKi8pCitzdGF0aWMgYm9vbCBtYXhfZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgcmV0dXJuIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2
YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9t
L0VkaXRpbmdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FZGl0aW5nVGV4dC5j
cHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9kb20vRWRpdGluZ1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIEVkaXRpbmdUZXh0Ojp+RWRpdGluZ1RleHQoKQog
ewogfQogCi1ib29sIEVkaXRpbmdUZXh0OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpz
dHlsZSkKK2Jvb2wgRWRpdGluZ1RleHQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKQog
ewogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysg
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCw3ICs0OTQsNyBA
QCBQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gRWxlbWVudDo6Y3JlYXRlQXR0CiAgICAgcmV0dXJuIEF0
dHJpYnV0ZTo6Y3JlYXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQordm9pZCBFbGVt
ZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCkKIHsKICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKICAgICBpZiAoYXR0ck5h
bWUgPT0gYXJpYV9hY3RpdmVkZXNjZW5kYW50QXR0cikgewpAQCAtNTkwLDcgKzU5MCw3IEBAIHZv
aWQgRWxlbWVudDo6Y3JlYXRlQXR0cmlidXRlTWFwKCkgY29uc3QKICAgICBuYW1lZEF0dHJNYXAg
PSBOYW1lZEF0dHJNYXA6OmNyZWF0ZShjb25zdF9jYXN0PEVsZW1lbnQqPih0aGlzKSk7CiB9CiAK
LWJvb2wgRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAorYm9v
bCBFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdAogewogICAgIHJldHVy
biBmYWxzZTsKIH0KQEAgLTg3NSw3ICs4NzUsNyBAQCB2b2lkIEVsZW1lbnQ6OmRpc3BhdGNoQXR0
clJlbW92YWxFdmVudChBCiAjZW5kaWYKIH0KIAotdm9pZCBFbGVtZW50OjpkaXNwYXRjaEF0dHJB
ZGRpdGlvbkV2ZW50KEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgRWxlbWVudDo6ZGlzcGF0Y2hBdHRy
QWRkaXRpb25FdmVudChBdHRyaWJ1dGUqKQogewogICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZv
cmJpZGRlbigpKTsKICNpZiAwCkBAIC0xMDg5LDcgKzEwODksNyBAQCB2b2lkIEVsZW1lbnQ6OmZv
Y3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzCiAgICAgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKHJlc3Rv
cmVQcmV2aW91c1NlbGVjdGlvbik7CiB9CiAKLXZvaWQgRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBl
YXJhbmNlKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKQordm9pZCBFbGVtZW50Ojp1cGRh
dGVGb2N1c0FwcGVhcmFuY2UoYm9vbCAvKnJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbiovKQogewog
ICAgIGlmICh0aGlzID09IHJvb3RFZGl0YWJsZUVsZW1lbnQoKSkgeyAKICAgICAgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDM5NTkzKQor
KysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcg
QEAgcHVibGljOgogICAgIC8vIG5vdCBwYXJ0IG9mIHRoZSBET00KICAgICB2b2lkIHNldEF0dHJp
YnV0ZU1hcChQYXNzUmVmUHRyPE5hbWVkQXR0ck1hcD4pOwogCi0gICAgdmlydHVhbCB2b2lkIGNv
cHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKGNvbnN0IEVsZW1lbnQqIHNvdXJjZSkge30KKyAgICB2
aXJ0dWFsIHZvaWQgY29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMoY29uc3QgRWxlbWVudCogLypz
b3VyY2UqLykgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2
b2lkIGRldGFjaCgpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3Bh
dGNoQXR0clJlbW92YWxFdmVudChBdHRyaWJ1dGUqKTsKICAgICB2b2lkIGRpc3BhdGNoQXR0ckFk
ZGl0aW9uRXZlbnQoQXR0cmlidXRlKik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0
aW9uKGJvb2wgc2VuZFRvQW55RXZlbnQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlB
Y3Rpb24oYm9vbCAvKnNlbmRUb0FueUV2ZW50Ki8pIHsgfQogCiAgICAgdmlydHVhbCBib29sIGlz
VVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7CkluZGV4OiBXZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8v
IEhhbmRsZXJzIHRvIGRvL3VuZG8gYWN0aW9ucyBvbiB0aGUgdGFyZ2V0IG5vZGUgYmVmb3JlIGFu
IGV2ZW50IGlzIGRpc3BhdGNoZWQgdG8gaXQgYW5kIGFmdGVyIHRoZSBldmVudAogICAgICAgICAv
LyBoYXMgYmVlbiBkaXNwYXRjaGVkLiAgVGhlIGRhdGEgcG9pbnRlciBpcyBoYW5kZWQgYmFjayBi
eSB0aGUgcHJlRGlzcGF0Y2ggYW5kIHBhc3NlZCB0byBwb3N0RGlzcGF0Y2guCiAgICAgICAgIHZp
cnR1YWwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqKSB7IHJldHVybiAwOyB9
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqLCB2
b2lkKiBkYXRhRnJvbVByZURpc3BhdGNoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RE
aXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCosIHZvaWQqIC8qZGF0YUZyb21QcmVEaXNwYXRjaCov
KSB7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCB+RXZlbnRUYXJnZXQoKTsK
SW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9kb20vTWVz
c2FnZVBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBNZXNz
YWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdAogICAgIH0gICAgCiB9CiAKLXZvaWQgTWVz
c2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3ZvaWQg
TWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCiB7CiAgICAgRXZlbnRM
aXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRU
eXBlKTsKICAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQpJbmRleDogV2Vi
Q29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJl
dmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgzNyw3ICs4MzcsNyBAQCBOb2RlKiBOb2RlOjp0cmF2ZXJzZVByZXZpb3VzU2libGluZ1Bvc3RP
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTm9kZTo6Y2hlY2tTZXRQcmVmaXgoY29uc3QgQXRv
bWljU3RyaW5nICZfcHJlZml4LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6Y2hlY2tT
ZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
Ly8gUGVyZm9ybSBlcnJvciBjaGVja2luZyBhcyByZXF1aXJlZCBieSBzcGVjIGZvciBzZXR0aW5n
IE5vZGUucHJlZml4LiBVc2VkIGJ5CiAgICAgLy8gRWxlbWVudDo6c2V0UHJlZml4KCkgYW5kIEF0
dHI6OnNldFByZWZpeCgpCkBAIC04NjcsMTkgKzg2NywxNyBAQCB2b2lkIE5vZGU6OmNoZWNrU2V0
UHJlZml4KGNvbnN0IEF0b21pY1N0CiAgICAgfSovCiB9CiAKLWJvb2wgTm9kZTo6Y2FuUmVwbGFj
ZUNoaWxkKE5vZGUqIG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCkKK2Jvb2wgTm9kZTo6Y2FuUmVw
bGFjZUNoaWxkKE5vZGUqIG5ld0NoaWxkLCBOb2RlKikKIHsKICAgICBpZiAobmV3Q2hpbGQtPm5v
ZGVUeXBlKCkgIT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkgewogICAgICAgICBpZiAoIWNoaWxk
VHlwZUFsbG93ZWQobmV3Q2hpbGQtPm5vZGVUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICBmb3IgKE5vZGUg
Km4gPSBuZXdDaGlsZC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICAgICAgaWYgKCFjaGlsZFR5cGVBbGxvd2VkKG4tPm5vZGVUeXBlKCkpKSAKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTEyMzEsNyArMTIyOSw3IEBAIGJvb2wgTm9kZTo6cmVuZGVyZXJJ
c05lZWRlZChSZW5kZXJTdHlsZSAKICAgICByZXR1cm4gKGRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpID09IHRoaXMpIHx8IChzdHlsZS0+ZGlzcGxheSgpICE9IE5PTkUpOwogfQogCi1SZW5k
ZXJPYmplY3QgKk5vZGU6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKQorUmVuZGVyT2JqZWN0KiBOb2RlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSosIFJlbmRlclN0eWxlKikKIHsKICAgICBBU1NFUlQoZmFsc2UpOwogICAgIHJldHVybiAw
OwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05v
ZGUuaAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1NiwxNCArNDU2LDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMg
YXJlIGNhbGxlZCB3aGVuZXZlciB5b3UgYXJlIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgZnJv
bSBhIHRyZWUuICBUaGF0IHRyZWUgbWF5IGJlIHRoZSBtYWluCiAgICAgLy8gZG9jdW1lbnQgdHJl
ZSwgb3IgaXQgY291bGQgYmUgYW5vdGhlciBkaXNjb25uZWN0ZWQgdHJlZS4gIE92ZXJyaWRlIHRo
ZXNlIGZ1bmN0aW9ucyB0byBkbyBhbnkgd29yayB0aGF0IGRlcGVuZHMKICAgICAvLyBvbiBjb25u
ZWN0ZWRuZXNzIHRvIHNvbWUgYW5jZXN0b3IgKGUuZy4sIGFuIGFuY2VzdG9yIDxmb3JtPiBmb3Ig
ZXhhbXBsZSkuCi0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCAvKmRlZXAqLykgeyB9CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZWRGcm9tVHJlZShib29sIC8qZGVlcCovKSB7IH0KIAogICAgIC8qKgog
ICAgICAqIE5vdGlmaWVzIHRoZSBub2RlIHRoYXQgaXQncyBsaXN0IG9mIGNoaWxkcmVuIGhhdmUg
Y2hhbmdlZCAoZWl0aGVyIGJ5IGFkZGluZyBvciByZW1vdmluZyBjaGlsZCBub2RlcyksIG9yIGEg
Y2hpbGQKICAgICAgKiBub2RlIHRoYXQgaXMgb2YgdGhlIHR5cGUgQ0RBVEFfU0VDVElPTl9OT0RF
LCBURVhUX05PREUgb3IgQ09NTUVOVF9OT0RFIGhhcyBjaGFuZ2VkIGl0cyB2YWx1ZS4KICAgICAg
Ki8KLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2Vy
ID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwg
aW50IGNoaWxkQ291bnREZWx0YSA9IDApIHt9OworICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNo
YW5nZWQoYm9vbCAvKmNoYW5nZWRCeVBhcnNlciovID0gZmFsc2UsIE5vZGUqIC8qYmVmb3JlQ2hh
bmdlKi8gPSAwLCBOb2RlKiAvKmFmdGVyQ2hhbmdlKi8gPSAwLCBpbnQgLypjaGlsZENvdW50RGVs
dGEqLyA9IDApIHsgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRG
b3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRp
b24uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzQ0LDcgKzc0NCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpsZWFkaW5n
V2hpdGVzcGFjZVBvc2kKIH0KIAogLy8gVGhpcyBhc3N1bWVzIHRoYXQgaXQgc3RhcnRzIGluIGVk
aXRhYmxlIGNvbnRlbnQuCi1Qb3NpdGlvbiBQb3NpdGlvbjo6dHJhaWxpbmdXaGl0ZXNwYWNlUG9z
aXRpb24oRUFmZmluaXR5IGFmZmluaXR5LCBib29sIGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0
ZXNwYWNlKSBjb25zdAorUG9zaXRpb24gUG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0
aW9uKEVBZmZpbml0eSwgYm9vbCBjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSkgY29u
c3QKIHsKICAgICBBU1NFUlQoaXNFZGl0YWJsZVBvc2l0aW9uKCp0aGlzKSk7CiAgICAgaWYgKGlz
TnVsbCgpKQpJbmRleDogV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywx
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0eXBlZGVmIEhhc2hTZXQ8UXVhbGlmaWVkTmFtZTo6
UXVhbGlmaWVkTmFtZUltcGwqLCBRdWFsaWZpZWROYW1lSGFzaD4gUU5hbWVTZXQ7CiAKIHN0cnVj
dCBRTmFtZUNvbXBvbmVudHNUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyYgY29tcG9uZW50cykgeyAKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyYgY29tcG9uZW50cykK
KyAgICB7CiAgICAgICAgIHJldHVybiBoYXNoQ29tcG9uZW50cyhjb21wb25lbnRzKTsgCiAgICAg
fQotICAgIHN0YXRpYyBib29sIGVxdWFsKFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBs
KiBuYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyYgYykgeworICAgIHN0YXRpYyBi
b29sIGVxdWFsKFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsKiBuYW1lLCBjb25zdCBR
dWFsaWZpZWROYW1lQ29tcG9uZW50cyYgYykKKyAgICB7CiAgICAgICAgIHJldHVybiBjLm1fcHJl
Zml4ID09IG5hbWUtPm1fcHJlZml4LmltcGwoKSAmJiBjLm1fbG9jYWxOYW1lID09IG5hbWUtPm1f
bG9jYWxOYW1lLmltcGwoKSAmJiBjLm1fbmFtZXNwYWNlID09IG5hbWUtPm1fbmFtZXNwYWNlLmlt
cGwoKTsKICAgICB9Ci0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFF1YWxpZmllZE5hbWU6OlF1
YWxpZmllZE5hbWVJbXBsKiYgbG9jYXRpb24sIGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRz
JiBjb21wb25lbnRzLCB1bnNpZ25lZCBoYXNoKSB7CisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRl
KFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsKiYgbG9jYXRpb24sIGNvbnN0IFF1YWxp
ZmllZE5hbWVDb21wb25lbnRzJiBjb21wb25lbnRzLCB1bnNpZ25lZCkKKyAgICB7CiAgICAgICAg
IGxvY2F0aW9uID0gUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGw6OmNyZWF0ZShjb21w
b25lbnRzLm1fcHJlZml4LCBjb21wb25lbnRzLm1fbG9jYWxOYW1lLCBjb21wb25lbnRzLm1fbmFt
ZXNwYWNlKS5yZWxlYXNlUmVmKCk7CiAgICAgfQogfTsKSW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAko
cmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIFN0eWxlU2hlZXQqIFN0eWxlRWxlbWVudDo6c2hlZXQo
RWxlbWVudCoKICAgICByZXR1cm4gbV9zaGVldC5nZXQoKTsKIH0KIAotdm9pZCBTdHlsZUVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChEb2N1bWVudCos
IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcHJvY2VzcyhlbGVtZW50KTsKIH0KSW5kZXg6IFdl
YkNvcmUvZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1RleHQuY3BwCShy
ZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvZG9tL1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzEsMTIgKzIzMSwxMiBAQCBib29sIFRleHQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlbmRlck9iamVjdCAqVGV4dDo6Y3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCitSZW5kZXJPYmpl
Y3QgKlRleHQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUq
KQogewogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKHBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdJbmxpbmVUZXh0KHRoaXMs
IG1fZGF0YSk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgogICAgIAogICAgIHJldHVy
biBuZXcgKGFyZW5hKSBSZW5kZXJUZXh0KHRoaXMsIG1fZGF0YSk7CiB9CkluZGV4OiBXZWJDb3Jl
L2RvbS9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ub2tlbml6ZXIuaAko
cmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2RvbS9Ub2tlbml6ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTIgKzMxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgVG9r
ZW5pemVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRva2VuaXplcihib29sIHZpZXdTb3VyY2VN
b2RlID0gZmFsc2UpIAotICAgICAgICAgICAgOiBtX3BhcnNlclN0b3BwZWQoZmFsc2UpCi0gICAg
ICAgICAgICAsIG1faW5WaWV3U291cmNlTW9kZSh2aWV3U291cmNlTW9kZSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KICAgICAgICAgdmlydHVhbCB+VG9rZW5pemVyKCkgeyB9CiAKICAgICAgICAg
Ly8gU2NyaXB0IG91dHB1dCBtdXN0IGJlIHByZXBlbmRlZCwgd2hpbGUgbmV3IGRhdGEKQEAgLTUx
LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGludCBleGVj
dXRpbmdTY3JpcHQoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICAgICAgdmlydHVhbCBib29s
IHdhbnRzUmF3RGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCB3cml0ZVJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIHdyaXRlUmF3RGF0YShjb25zdCBjaGFyKiAvKmRh
dGEqLywgaW50IC8qbGVuZ3RoKi8pIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgYm9vbCBp
blZpZXdTb3VyY2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblZpZXdTb3VyY2VNb2RlOyB9CiAg
ICAgICAgIHZvaWQgc2V0SW5WaWV3U291cmNlTW9kZShib29sIG1vZGUpIHsgbV9pblZpZXdTb3Vy
Y2VNb2RlID0gbW9kZTsgfQpAQCAtNjYsNiArNjAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MVG9rZW5pemVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIHByb3RlY3RlZDoKKyAgICAgICAgVG9rZW5pemVyKGJvb2wgdmlld1NvdXJj
ZU1vZGUgPSBmYWxzZSkgCisgICAgICAgICAgICA6IG1fcGFyc2VyU3RvcHBlZChmYWxzZSkKKyAg
ICAgICAgICAgICwgbV9pblZpZXdTb3VyY2VNb2RlKHZpZXdTb3VyY2VNb2RlKQorICAgICAgICB7
CisgICAgICAgIH0KKwogICAgICAgICAvLyBUaGUgdG9rZW5pemVyIGhhcyBidWZmZXJzLCBzbyBw
YXJzaW5nIG1heSBjb250aW51ZSBldmVuIGFmdGVyCiAgICAgICAgIC8vIGl0IHN0b3BzIHJlY2Vp
dmluZyBkYXRhLiBXZSB1c2UgbV9wYXJzZXJTdG9wcGVkIHRvIHN0b3AgdGhlIHRva2VuaXplcgog
ICAgICAgICAvLyBldmVuIHdoZW4gaXQgaGFzIGJ1ZmZlcmVkIGRhdGEuCkluZGV4OiBXZWJDb3Jl
L2RvbS9Xb3JrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlci5jcHAJKHJl
dmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9kb20vV29ya2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgV29ya2VyOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0
b20KICAgICB9ICAgIAogfQogCi12b2lkIFdvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwg
Ym9vbCB1c2VDYXB0dXJlKQordm9pZCBXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJv
b2wpCiB7CiAgICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlz
dGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKICAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJz
LmVuZCgpKQpJbmRleDogV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9kb20vV29ya2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIs
NyBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uCiAgICAgfSAgICAK
IH0KIAotdm9pZCBXb3JrZXJDb250ZXh0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sIHVz
ZUNhcHR1cmUpCit2b2lkIFdvcmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJv
b2wpCiB7CiAgICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlz
dGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKICAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJz
LmVuZCgpKQpJbmRleDogV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAkocmV2aXNpb24g
Mzk1OTMpCisrKyBXZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw3ICsxMzQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29udGV4dC0+
cmVwb3J0RXhjZXB0aW9uKG1fZXJyb3JNZXNzYWdlLCBtX2xpbmVOdW1iZXIsIG1fc291cmNlVVJM
KTsKICAgICB9CiAKLXByaXZhdGU6CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogICAgIGlu
dCBtX2xpbmVOdW1iZXI7CiAgICAgU3RyaW5nIG1fc291cmNlVVJMOwpAQCAtMTU0LDEyICsxNTMs
MTEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1U
YXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQogICAgIHsKICAgICAgICAgbV9tZXNz
YWdpbmdQcm94eS0+d29ya2VyQ29udGV4dERlc3Ryb3llZEludGVybmFsKCk7CiAgICAgfQogCi1w
cml2YXRlOgogICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OwogfTsK
IApAQCAtMTc4LDEyICsxNzYsMTEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQogICAg
IHsKICAgICAgICAgbV9tZXNzYWdpbmdQcm94eS0+cmVwb3J0V29ya2VyVGhyZWFkQWN0aXZpdHlJ
bnRlcm5hbChtX2NvbmZpcm1pbmdNZXNzYWdlLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAg
fQogCi1wcml2YXRlOgogICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5
OwogICAgIGJvb2wgbV9jb25maXJtaW5nTWVzc2FnZTsKICAgICBib29sIG1faGFzUGVuZGluZ0Fj
dGl2aXR5OwpJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHJldmlzaW9uIDM5
NTkzKQorKysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyNyw3ICszMjcsNyBAQCBzdGF0aWMgaW50IGdsb2JhbERlc2NyaXB0b3IgPSAwOwog
c3RhdGljIERvY0xvYWRlciogZ2xvYmFsRG9jTG9hZGVyID0gMDsKIHN0YXRpYyBUaHJlYWRJZGVu
dGlmaWVyIGxpYnhtbExvYWRlclRocmVhZCA9IDA7CiAKLXN0YXRpYyBpbnQgbWF0Y2hGdW5jKGNv
bnN0IGNoYXIqIHVyaSkKK3N0YXRpYyBpbnQgbWF0Y2hGdW5jKGNvbnN0IGNoYXIqKQogewogICAg
IC8vIE9ubHkgbWF0Y2ggbG9hZHMgaW5pdGlhdGVkIGR1ZSB0byB1c2VzIG9mIGxpYnhtbDIgZnJv
bSB3aXRoaW4gWE1MVG9rZW5pemVyIHRvIGF2b2lkCiAgICAgLy8gaW50ZXJmZXJpbmcgd2l0aCBj
bGllbnQgYXBwbGljYXRpb25zIHRoYXQgYWxzbyB1c2UgbGlieG1sMi4gIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzUzCkBAIC00MzAsNyArNDMwLDcgQEAgc3RhdGlj
IGludCByZWFkRnVuYyh2b2lkKiBjb250ZXh0LCBjaGFyKgogICAgIHJldHVybiBkYXRhLT5yZWFk
T3V0Qnl0ZXMoYnVmZmVyLCBsZW4pOwogfQogCi1zdGF0aWMgaW50IHdyaXRlRnVuYyh2b2lkKiBj
b250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4pCitzdGF0aWMgaW50IHdyaXRlRnVu
Yyh2b2lkKiwgY29uc3QgY2hhciosIGludCkKIHsKICAgICAvLyBBbHdheXMganVzdCBkbyAwLWJ5
dGUgd3JpdGVzCiAgICAgcmV0dXJuIDA7CkBAIC05ODUsNyArOTg1LDcgQEAgc3RhdGljIHZvaWQg
c3RhcnRFbGVtZW50TnNIYW5kbGVyKHZvaWQqIAogICAgIGdldFRva2VuaXplcihjbG9zdXJlKS0+
c3RhcnRFbGVtZW50TnMobG9jYWxuYW1lLCBwcmVmaXgsIHVyaSwgbmJfbmFtZXNwYWNlcywgbmFt
ZXNwYWNlcywgbmJfYXR0cmlidXRlcywgbmJfZGVmYXVsdGVkLCBsaWJ4bWxBdHRyaWJ1dGVzKTsK
IH0KIAotc3RhdGljIHZvaWQgZW5kRWxlbWVudE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25z
dCB4bWxDaGFyKiBsb2NhbG5hbWUsIGNvbnN0IHhtbENoYXIqIHByZWZpeCwgY29uc3QgeG1sQ2hh
ciogdXJpKQorc3RhdGljIHZvaWQgZW5kRWxlbWVudE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBj
b25zdCB4bWxDaGFyKiwgY29uc3QgeG1sQ2hhciosIGNvbnN0IHhtbENoYXIqKQogewogICAgIGlm
IChoYWNrQXJvdW5kTGliWE1MRW50aXR5QnVnKGNsb3N1cmUpKQogICAgICAgICByZXR1cm47CkBA
IC0xMTIzLDcgKzExMjMsNyBAQCBzdGF0aWMgdm9pZCBpbnRlcm5hbFN1YnNldEhhbmRsZXIodm9p
ZCogCiAgICAgeG1sU0FYMkludGVybmFsU3Vic2V0KGNsb3N1cmUsIG5hbWUsIGV4dGVybmFsSUQs
IHN5c3RlbUlEKTsKIH0KIAotc3RhdGljIHZvaWQgZXh0ZXJuYWxTdWJzZXRIYW5kbGVyKHZvaWQq
IGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSWQs
IGNvbnN0IHhtbENoYXIqIHN5c3RlbUlkKQorc3RhdGljIHZvaWQgZXh0ZXJuYWxTdWJzZXRIYW5k
bGVyKHZvaWQqIGNsb3N1cmUsIGNvbnN0IHhtbENoYXIqLCBjb25zdCB4bWxDaGFyKiBleHRlcm5h
bElkLCBjb25zdCB4bWxDaGFyKikKIHsKICAgICBTdHJpbmcgZXh0SWQgPSB0b1N0cmluZyhleHRl
cm5hbElkKTsKICAgICBpZiAoKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNp
dGlvbmFsLy9FTiIpCkBAIC0xMTM3LDcgKzExMzcsNyBAQCBzdGF0aWMgdm9pZCBleHRlcm5hbFN1
YnNldEhhbmRsZXIodm9pZCogCiAgICAgICAgIGdldFRva2VuaXplcihjbG9zdXJlKS0+c2V0SXNY
SFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9y
IG5vdC4KIH0KIAotc3RhdGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZUhhbmRsZXIodm9pZCog
Y3R4LCBjb25zdCB4bWxDaGFyKiBjaCwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGlnbm9yYWJsZVdo
aXRlc3BhY2VIYW5kbGVyKHZvaWQqLCBjb25zdCB4bWxDaGFyKiwgaW50KQogewogICAgIC8vIG5v
dGhpbmcgdG8gZG8sIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gd29yayBhcm91bmQgYSBjcmFzaGVyCiAg
ICAgLy8gaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMjU1CkBA
IC0xMzAzLDkgKzEzMDMsOSBAQCBzdHJ1Y3QgQXR0cmlidXRlUGFyc2VTdGF0ZSB7CiAgICAgYm9v
bCBnb3RBdHRyaWJ1dGVzOwogfTsKIAotc3RhdGljIHZvaWQgYXR0cmlidXRlc1N0YXJ0RWxlbWVu
dE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNv
bnN0IHhtbENoYXIqIHhtbFByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgeG1sQ2hhciogeG1sVVJJLCBpbnQgbmJfbmFtZXNwYWNlcywgY29u
c3QgeG1sQ2hhcioqIG5hbWVzcGFjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBuYl9hdHRyaWJ1dGVzLCBpbnQgbmJfZGVmYXVsdGVkLCBjb25zdCB4
bWxDaGFyKiogbGlieG1sQXR0cmlidXRlcykKK3N0YXRpYyB2b2lkIGF0dHJpYnV0ZXNTdGFydEVs
ZW1lbnROc0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1l
LCBjb25zdCB4bWxDaGFyKiAvKnhtbFByZWZpeCovLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyKiAvKnhtbFVSSSovLCBpbnQgLypuYl9u
YW1lc3BhY2VzKi8sIGNvbnN0IHhtbENoYXIqKiAvKm5hbWVzcGFjZXMqLywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5iX2F0dHJpYnV0ZXMsIGludCAv
Km5iX2RlZmF1bHRlZCovLCBjb25zdCB4bWxDaGFyKiogbGlieG1sQXR0cmlidXRlcykKIHsKICAg
ICBpZiAoc3RyY21wKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHhtbExvY2FsTmFtZSks
ICJhdHRycyIpICE9IDApCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZp
c2lvbiAzOTU5MykKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDQwLDcgKzE0NDAsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBo
QWxpZ25lCiAgICAgcmV0dXJuIHBhcmFncmFwaFJhbmdlOwogfQogCi1zdGF0aWMgaW50IGZpbmRG
aXJzdEdyYW1tYXJEZXRhaWxJblJhbmdlKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3Jh
bW1hckRldGFpbHMsIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGludCBiYWRHcmFtbWFy
UGhyYXNlTGVuZ3RoLCBSYW5nZSAqc2VhcmNoUmFuZ2UsIGludCBzdGFydE9mZnNldCwgaW50IGVu
ZE9mZnNldCwgYm9vbCBtYXJrQWxsKQorc3RhdGljIGludCBmaW5kRmlyc3RHcmFtbWFyRGV0YWls
SW5SYW5nZShjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQg
YmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBpbnQgLypiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKi8s
IFJhbmdlICpzZWFyY2hSYW5nZSwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29s
IG1hcmtBbGwpCiB7CiAgICAgLy8gRm91bmQgc29tZSBiYWQgZ3JhbW1hci4gRmluZCB0aGUgZWFy
bGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBzZWFyY2ggcmFuZ2UgKGlmIGFu
eSkuCiAgICAgLy8gT3B0aW9uYWxseSBhZGQgYSBEb2N1bWVudE1hcmtlciBmb3IgZWFjaCBkZXRh
aWwgaW4gdGhlIHJhbmdlLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwNiw3ICszMDYsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlQmFja3dh
cmRCeURlY29tCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVEZWxl
dGVGb3J3YXJkKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVGb3J3YXJkKEZyYW1l
KiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewog
ICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25Db250cm9s
bGVyOjpGT1JXQVJELCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgZmFsc2UsIHRydWUpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtNTQwLDcgKzU0MCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVKdXN0aWZ5
UmlnaHQoRnJhbWUqIGYKICAgICByZXR1cm4gZXhlY3V0ZUFwcGx5UGFyYWdyYXBoU3R5bGUoZnJh
bWUsIHNvdXJjZSwgRWRpdEFjdGlvbkFsaWduUmlnaHQsIENTU1Byb3BlcnR5VGV4dEFsaWduLCAi
cmlnaHQiKTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVjdGlv
bkxlZnRUb1JpZ2h0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNv
dXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVNYWtlVGV4dFdyaXRpbmdE
aXJlY3Rpb25MZWZ0VG9SaWdodChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZUVtYmVk
KTsKQEAgLTU0OSw3ICs1NDksNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTWFrZVRleHRXcml0aW5n
RGlyZWN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1dGVNYWtlVGV4
dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikKK3N0YXRpYyBib29sIGV4ZWN1dGVNYWtl
VGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1Zh
bHVlTm9ybWFsKTsKQEAgLTU1Nyw3ICs1NTcsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTWFrZVRl
eHRXcml0aW5nRGlyZWN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV4ZWN1
dGVNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdChGcmFtZSogZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCitzdGF0aWMgYm9v
bCBleGVjdXRlTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQoRnJhbWUqIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlV
bmljb2RlQmlkaSwgQ1NTVmFsdWVFbWJlZCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMzk1OTUpCisrKyBXZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1MSw3ICsxMzUx
LDcgQEAgUGFzc1JlZlB0cjxUZXh0TWV0cmljcz4gQ2FudmFzUmVuZGVyaW5nQwogICAgIHJldHVy
biBtZXRyaWNzOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJ
bnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGJvb2wgZmlsbCwg
ZmxvYXQgbWF4V2lkdGgsIGJvb2wgdXNlTWF4V2lkdGgpCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZs
b2F0IHksIGJvb2wgZmlsbCwgZmxvYXQgLyptYXhXaWR0aCovLCBib29sIC8qdXNlTWF4V2lkdGgq
LykKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlm
ICghYykKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMzk1OTMp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OSwxMiArOTksMTIgQEAgdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bQogICAgIEhUTUxQbHVnSW5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7CiB9CiAKLWJv
b2wgSFRNTEFwcGxldEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxl
KQorYm9vbCBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSop
CiB7CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29kZUF0dHIpLmlzTnVsbCgpOwogfQogCi1S
ZW5kZXJPYmplY3QqIEhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogSFRNTEFwcGxldEVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqIHN0eWxlKQog
ewogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCw3IEBAIEhUTUxCdXR0b25FbGVtZW50Ojp+SFRNTEJ1dHRvbkVsZW1lbnQoKQogewogfQogCi1S
ZW5kZXJPYmplY3QqIEhUTUxCdXR0b25FbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogSFRNTEJ1dHRvbkVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQog
ewogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJCdXR0b24odGhpcyk7CiB9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvaHRt
bC9IVE1MRW1iZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBA
IGJvb2wgSFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCgKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotUmVuZGVyT2JqZWN0KiBIVE1MRW1iZWRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogSFRN
TEVtYmVkRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJT
dHlsZSopCiB7CiAgICAgaWYgKGlzSW1hZ2VUeXBlKCkpCiAgICAgICAgIHJldHVybiBuZXcgKGFy
ZW5hKSBSZW5kZXJJbWFnZSh0aGlzKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTEZpZWxkU2V0RWxlbWVudDoKICAgICByZXR1cm4gZmllbGRzZXQ7CiB9CiAKLVJlbmRl
ck9iamVjdCogSFRNTEZpZWxkU2V0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEq
IGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCitSZW5kZXJPYmplY3QqIEhUTUxGaWVsZFNldEVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQog
ewogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJGaWVsZHNldCh0aGlzKTsKIH0KSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gMzk1OTMpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MCw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1N1Y2Nlc3NmdWxTdWJt
aXRCdXR0b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
dGl2YXRlZFN1Ym1pdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldEFjdGl2YXRlZFN1Ym1pdChib29sIGZsYWcpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRB
Y3RpdmF0ZWRTdWJtaXQoYm9vbCkgeyB9CiAKICAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkg
Y29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAJKHJldmlzaW9uIDM5NTkz
KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSwxMyArNDEsMTMgQEAgSFRNTEZyYW1lRWxlbWVudDo6SFRNTEZyYW1lRWxlbWVudChjb25z
dAogICAgIEFTU0VSVChoYXNUYWdOYW1lKGZyYW1lVGFnKSk7CiB9CiAKLWJvb2wgSFRNTEZyYW1l
RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCitib29sIEhUTUxG
cmFtZUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKQogewogICAgIC8vIEZv
ciBjb21wYXRpYmlsaXR5LCBmcmFtZXMgcmVuZGVyIGV2ZW4gd2hlbiBkaXNwbGF5OiBub25lIGlz
IHNldC4KICAgICByZXR1cm4gaXNVUkxBbGxvd2VkKG1fVVJMKTsKIH0KIAotUmVuZGVyT2JqZWN0
KiBIVE1MRnJhbWVFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJl
bmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogSFRNTEZyYW1lRWxlbWVudDo6Y3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAgICAgcmV0dXJu
IG5ldyAoYXJlbmEpIFJlbmRlckZyYW1lKHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxPcHRHcm91cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0
R3JvdXBFbGVtZW50LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9w
dEdyb3VwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBIVE1M
U2VsZWN0RWxlbWVudCogSFRNTE9wdEdyb3VwRWxlbWVudDo6CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oc2VsZWN0KTsKIH0KIAotdm9pZCBIVE1MT3B0R3JvdXBF
bGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KQordm9pZCBIVE1M
T3B0R3JvdXBFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKIHsKICAgICBIVE1MU2VsZWN0
RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCk7CiAgICAgLy8gc2VuZCB0byB0
aGUgcGFyZW50IHRvIGJyaW5nIGZvY3VzIHRvIHRoZSBsaXN0IGJveApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1M
T3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lk
IEhUTUxPcHRpb25FbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0CiAgICAgYXBwZW5kQ2hpbGQobmV3
IFRleHQoZG9jdW1lbnQoKSwgdGV4dCksIGVjKTsKIH0KIAotdm9pZCBIVE1MT3B0aW9uRWxlbWVu
dDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCkKK3ZvaWQgSFRNTE9wdGlv
bkVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sKQogewogICAgIEhUTUxTZWxlY3RFbGVtZW50
KiBzZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKTsKICAgICBpZiAoc2VsZWN0KQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MUGFyc2VyLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Nyw3ICs2NjcsNyBAQCBib29sIEhUTUxQYXJzZXI6
OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEhU
TUxQYXJzZXI6OmhlYWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJl
c3VsdCkKK2Jvb2wgSFRNTFBhcnNlcjo6aGVhZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mIHJlc3VsdCkKIHsKICAgICBpZiAoIWhlYWQgfHwgY3VycmVudC0+bG9jYWxOYW1l
KCkgPT0gaHRtbFRhZykgewogICAgICAgICBoZWFkID0gbmV3IEhUTUxIZWFkRWxlbWVudChoZWFk
VGFnLCBkb2N1bWVudCk7CkBAIC02NzcsNyArNjc3LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpoZWFk
Q3JlYXRlRXJyb3JDaGVjayhUbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBIVE1MUGFy
c2VyOjpib2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQp
Citib29sIEhUTUxQYXJzZXI6OmJvZHlDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5v
ZGU+JikKIHsKICAgICAvLyBib2R5IG5vIGxvbmdlciBhbGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFt
ZXNldAogICAgIGlmIChoYXZlRnJhbWVTZXQpCkBAIC02ODcsNyArNjg3LDcgQEAgYm9vbCBIVE1M
UGFyc2VyOjpib2R5Q3JlYXRlRXJyb3JDaGVjayhUbwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIEhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRy
PE5vZGU+JiByZXN1bHQpCitib29sIEhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgcG9wQmxvY2soaGVhZFRhZyk7CiAgICAg
aWYgKGluQm9keSAmJiAhaGF2ZUZyYW1lU2V0ICYmICFoYXZlQ29udGVudCkgewpAQCAtNzMxLDcg
KzczMSw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2sKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSFRNTFBhcnNlcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCitib29sIEhUTUxQYXJzZXI6OnNlbGVj
dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtNzUyLDcgKzc1Miw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6ZHRDcmVhdGVFcnJv
ckNoZWNrKFRva2UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBIVE1MUGFyc2VyOjpuZXN0
ZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wg
SFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+
JikKIHsKICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc2
NSwxOSArNzY1LDE5IEBAIGJvb2wgSFRNTFBhcnNlcjo6bmVzdGVkUENsb3NlckNyZWF0ZUVycm8K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBIVE1MUGFy
c2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYp
CiB7CiAgICAgcmV0dXJuIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKHQtPnRhZ05hbWUpOwogfQog
Ci1ib29sIEhUTUxQYXJzZXI6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJl
ZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBIVE1MUGFyc2VyOjp0YWJsZUNlbGxDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBwb3BCbG9jayh0ZFRhZyk7CiAg
ICAgcG9wQmxvY2sodGhUYWcpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxQYXJz
ZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYg
cmVzdWx0KQorYm9vbCBIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBwb3BCbG9jayh0aGVhZFRhZyk7CiAgICAgcG9w
QmxvY2sodGJvZHlUYWcpOwpAQCAtNzg1LDE5ICs3ODUsMTkgQEAgYm9vbCBIVE1MUGFyc2VyOjp0
YWJsZVNlY3Rpb25DcmVhdGVFcnJvcgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxQ
YXJzZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJl
c3VsdCkKK2Jvb2wgSFRNTFBhcnNlcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBS
ZWZQdHI8Tm9kZT4mKQogewogICAgIHNldFNraXBNb2RlKG5vZW1iZWRUYWcpOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEhUTUxQYXJzZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayhU
b2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCitib29sIEhUTUxQYXJzZXI6Om5vZnJhbWVz
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgc2V0U2tpcE1v
ZGUobm9mcmFtZXNUYWcpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxQYXJzZXI6
Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQp
Citib29sIEhUTUxQYXJzZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0
cjxOb2RlPiYpCiB7CiAgICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7CiAgICAgICAgIFNl
dHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOwpAQCAtODA3LDE0ICs4MDcs
MTQgQEAgYm9vbCBIVE1MUGFyc2VyOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlYwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEhUTUxQYXJzZXI6OnBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wgSFRNTFBhcnNlcjo6cENsb3NlckNy
ZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIGlmIChoYXNQRWxl
bWVudEluU2NvcGUoKSkKICAgICAgICAgcG9wQmxvY2socFRhZyk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgSFRNTFBhcnNlcjo6cENsb3NlclN0cmljdENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBIVE1MUGFyc2VyOjpwQ2xvc2VyU3Ry
aWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgaWYgKGRv
Y3VtZW50LT5pbkNvbXBhdE1vZGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC04MjMsNyAr
ODIzLDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJybwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxQYXJzZXI6Om1hcENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBIVE1MUGFyc2VyOjptYXBDcmVhdGVF
cnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAgbV9jdXJyZW50
TWFwRWxlbWVudCA9IG5ldyBIVE1MTWFwRWxlbWVudChtYXBUYWcsIGRvY3VtZW50KTsKICAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRNYXBFbGVtZW50OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMyw3ICs0MTMsNyBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpzZWxlY3RBbGwoKQogICAgIGxpc3RCb3hPbkNoYW5nZSgpOwogfQogCi1SZW5kZXJP
YmplY3QgKkhUTUxTZWxlY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJl
bmEsIFJlbmRlclN0eWxlICpzdHlsZSkKK1JlbmRlck9iamVjdCogSFRNTFNlbGVjdEVsZW1lbnQ6
OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewogICAg
IGlmICh1c2VzTWVudUxpc3QoKSkKICAgICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlck1l
bnVMaXN0KHRoaXMpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NSw3ICs4OTUsNyBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBsb2NhbGl6ZWRTdHJpbmdzKEpTQ29uCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3Ry
aW5nKGN0eCwganNTdHJpbmdSZWYodXJsKS5nZXQoKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVm
IHBsYXRmb3JtKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIC8qZnVuY3Rpb24qLywgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IC8qYXJndW1lbnRDb3VudCovLCBjb25zdCBKU1Zh
bHVlUmVmW10gLyphcmd1bWVudHNbXSovLCBKU1ZhbHVlUmVmKiAvKmV4Y2VwdGlvbiovKQorc3Rh
dGljIEpTVmFsdWVSZWYgcGxhdGZvcm0oSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgLypm
dW5jdGlvbiovLCBKU09iamVjdFJlZiAvKnRoaXNPYmplY3QqLywgc2l6ZV90IC8qYXJndW1lbnRD
b3VudCovLCBjb25zdCBKU1ZhbHVlUmVmW10gLyphcmd1bWVudHNbXSovLCBKU1ZhbHVlUmVmKiAv
KmV4Y2VwdGlvbiovKQogewogI2lmIFBMQVRGT1JNKE1BQykKICNpZmRlZiBCVUlMRElOR19PTl9U
SUdFUgpAQCAtOTYwLDcgKzk2MCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEF0dGFjaGVkV2lu
ZG93SGVpZ2gKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKIH0KIAotc3Rh
dGljIEpTVmFsdWVSZWYgd3JhcENhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVm
IC8qZnVuY3Rpb24qLywgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3N0YXRpYyBKU1ZhbHVlUmVmIHdyYXBDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVj
dFJlZiAvKmZ1bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiAvKmV4Y2Vw
dGlvbiovKQogewogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVy
cHJldF9jYXN0PEluc3BlY3RvckNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogICAgIGlmICghY29udHJvbGxlcikKQEAgLTE0NzEsNyArMTQ3MSw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6dG9nZ2xlU2VhcmNoRm8KICAgICAgICAgaGlkZUhpZ2hsaWdo
dCgpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncykK
K3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSB8
fCAhbV9zZWFyY2hpbmdGb3JOb2RlKQogICAgICAgICByZXR1cm47CkBAIC0yNDMxLDcgKzI0MzEs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJCiAgICAgICAgIGFk
ZEFuZFVwZGF0ZVNjcmlwdFJlc291cmNlKHJlc291cmNlLmdldCgpKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3aWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OndpbGxTZW5kUmVxdWVzdChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZWRpcmVjdFJlc3BvbnNlKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yNDk0LDcgKzI0OTQsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJl
Y2VpdmVDb250CiAgICAgICAgIHVwZGF0ZVNjcmlwdFJlc291cmNlKHJlc291cmNlLCByZXNvdXJj
ZS0+bGVuZ3RoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRGaW5pc2hMb2Fk
aW5nKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjUxNiw3ICsyNTE2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRGaW5pc2hMb2FkaQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIC8qZXJyb3IqLykKK3ZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIC8qZXJyb3IqLykKIHsKICAgICBpZiAoIWVu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg4OSw5ICsyODg5LDEwIEBAIGJvb2wgSW5z
cGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlRXhjZXB0aW8KIH0KIAogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQorCiAvLyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciBmdW5jdGlvbnMKIAot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlk
UGFyc2VTb3VyY2UoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQogewogICAg
IEpTVmFsdWVSZWYgc291cmNlSURWYWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKG1fc2NyaXB0Q29u
dGV4dCwgc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSk7CiAgICAgSlNWYWx1ZVJlZiBzb3VyY2VV
UkxWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwganNTdHJpbmdSZWYo
c291cmNlLnByb3ZpZGVyKCktPnVybCgpKS5nZXQoKSk7CkBAIC0yOTAzLDcgKzI5MDQsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNlCiAgICAgY2FsbEZ1bmN0aW9u
KG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsICJwYXJzZWRTY3JpcHRTb3VyY2UiLCA0
LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZmFpbGVkVG9QYXJzZVNvdXJjZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNZXNzYWdlKQordm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpmYWlsZWRUb1BhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgVVN0cmluZyYgZXJyb3JN
ZXNzYWdlKQogewogICAgIEpTVmFsdWVSZWYgc291cmNlVVJMVmFsdWUgPSBKU1ZhbHVlTWFrZVN0
cmluZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5nUmVmKHNvdXJjZS5wcm92aWRlcigpLT51cmwo
KSkuZ2V0KCkpOwogICAgIEpTVmFsdWVSZWYgc291cmNlVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmlu
ZyhtX3NjcmlwdENvbnRleHQsIGpzU3RyaW5nUmVmKHNvdXJjZS5kYXRhKCkpLmdldCgpKTsKQEAg
LTI5MjEsNiArMjkyMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGF1c2UoKQog
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKICAgICBjYWxsRnVuY3Rpb24obV9zY3JpcHRD
b250ZXh0LCBtX3NjcmlwdE9iamVjdCwgInBhdXNlZFNjcmlwdCIsIDAsIDAsIGV4Y2VwdGlvbik7
CiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2lu
c3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyAr
NTQsNyBAQCBzdGF0aWMgUHJvZmlsZU1hcCYgcHJvZmlsZUNhY2hlKCkKIAogc3RhdGljIEpTQ2xh
c3NSZWYgUHJvZmlsZUNsYXNzKCk7CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGdldFRpdGxlQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNWYWx1ZVJlZiBn
ZXRUaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9m
Q2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBQcm9maWxlQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBnZXRUaXRsZUNhbGxiYWNrKEpTQ29uCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5n
KGN0eCwgT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShwcm9maWxlLT50aXRsZSgpKS5nZXQoKSk7CiB9
CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGdldEhlYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldEhlYWRDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJl
ZiopCiB7CiAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGN0eCwgdGhpc09iamVjdCwg
UHJvZmlsZUNsYXNzKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4
KTsKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0SGVhZENhbGxiYWNrKEpT
Q29udAogICAgIHJldHVybiB0b1JlZih0b0pTKHRvSlMoY3R4KSwgcHJvZmlsZS0+aGVhZCgpKSk7
CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGdldEhlYXZ5UHJvZmlsZUNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorc3RhdGljIEpTVmFsdWVSZWYgZ2V0SGVhdnlQcm9m
aWxlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNT
dHJpbmdSZWYsIEpTVmFsdWVSZWYqKQogewogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFz
cyhjdHgsIHRoaXNPYmplY3QsIFByb2ZpbGVDbGFzcygpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGN0eCk7CkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IGdldEhlYXZ5UHJvZmlsZUNhbGxiYWMKICAgICByZXR1cm4gdG9SZWYodG9KUyh0b0pTKGN0eCks
IHByb2ZpbGUtPmhlYXZ5UHJvZmlsZSgpKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGdldFRy
ZWVQcm9maWxlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0
aWMgSlNWYWx1ZVJlZiBnZXRUcmVlUHJvZmlsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKICAgICBp
ZiAoIUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBQcm9maWxlQ2xhc3Mo
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwpAQCAtOTAsNyAr
OTAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRUcmVlUHJvZmlsZUNhbGxiYWNrCiAgICAgcmV0
dXJuIHRvUmVmKHRvSlModG9KUyhjdHgpLCBwcm9maWxlLT50cmVlUHJvZmlsZSgpKSk7CiB9CiAK
LXN0YXRpYyBKU1ZhbHVlUmVmIGdldFVuaXF1ZUlkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRVbmlxdWVJZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1Zh
bHVlUmVmKikKIHsKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2Jq
ZWN0LCBQcm9maWxlQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjdHgpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGV4Y2x1ZGUoSlND
b250ZXh0UmVmIGMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKIH0KIAot
c3RhdGljIEpTVmFsdWVSZWYgcmVzdG9yZUFsbChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
ZiAvKmZ1bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiAvKmV4Y2VwdGlv
biovKQorc3RhdGljIEpTVmFsdWVSZWYgcmVzdG9yZUFsbChKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiAvKmZ1bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCAvKmFy
Z3VtZW50Q291bnQqLywgY29uc3QgSlNWYWx1ZVJlZltdIC8qYXJndW1lbnRzKi8sIEpTVmFsdWVS
ZWYqIC8qZXhjZXB0aW9uKi8pCiB7CiAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGN0
eCwgdGhpc09iamVjdCwgUHJvZmlsZUNsYXNzKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY3R4KTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9m
aWxlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFBy
b2ZpbGVOb2RlLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZh
U2NyaXB0UHJvZmlsZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHN0
YXRpYyBQcm9maWxlTm9kZU1hcCYgcHJvZmlsZU5vZGVDYWNoZSgKICAgICByZXR1cm4gc3RhdGlj
UHJvZmlsZU5vZGVzOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBnZXRGdW5jdGlvbk5hbWUoSlND
b250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRGdW5j
dGlvbk5hbWUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJp
bmdSZWYsIEpTVmFsdWVSZWYqKQogewogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhj
dHgsIHRoaXNPYmplY3QsIFByb2ZpbGVOb2RlQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjdHgpOwpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBnZXRGdW5jdGlvbk5hbWUoSlNDb250CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGN0
eCwgZnVuY3Rpb25OYW1lU3RyaW5nLmdldCgpKTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgZ2V0
VVJMKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorc3RhdGljIEpTVmFsdWVSZWYg
Z2V0VVJMKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5n
UmVmLCBKU1ZhbHVlUmVmKikKIHsKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4
LCB0aGlzT2JqZWN0LCBQcm9maWxlTm9kZUNsYXNzKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
Z2V0VVJMKEpTQ29udGV4dFJlZiBjdAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjdHgs
IHVybFN0cmluZy5nZXQoKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGdldExpbmVOdW1iZXIo
SlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRM
aW5lTnVtYmVyKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3Ry
aW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9mQ2xhc3Mo
Y3R4LCB0aGlzT2JqZWN0LCBQcm9maWxlTm9kZUNsYXNzKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgZ2V0TGluZU51bWJlcihKU0NvbnRleAogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihj
dHgsIHByb2ZpbGVOb2RlLT5saW5lTnVtYmVyKCkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBn
ZXRUb3RhbFRpbWUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNT
dHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNW
YWx1ZVJlZiBnZXRUb3RhbFRpbWUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQogewogICAgIEpTQzo6SlNMb2NrIGxvY2so
ZmFsc2UpOwogCkBAIC05MSw3ICs5MSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFRvdGFsVGlt
ZShKU0NvbnRleHQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCBwcm9maWxlTm9k
ZS0+dG90YWxUaW1lKCkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBnZXRTZWxmVGltZShKU0Nv
bnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFNlbGZU
aW1lKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVm
LCBKU1ZhbHVlUmVmKikKIHsKICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKIApAQCAtMTAy
LDcgKzEwMiw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFNlbGZUaW1lKEpTQ29udGV4dFIKICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCBwcm9maWxlTm9kZS0+c2VsZlRpbWUoKSk7
CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGdldFRvdGFsUGVyY2VudChKU0NvbnRleHRSZWYgY3R4
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFRvdGFsUGVyY2VudChKU0Nv
bnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1
ZVJlZiopCiB7CiAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAKQEAgLTExMyw3ICsxMTMs
NyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRUb3RhbFBlcmNlbnQoSlNDb250CiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlTnVtYmVyKGN0eCwgcHJvZmlsZU5vZGUtPnRvdGFsUGVyY2VudCgpKTsKIH0K
IAotc3RhdGljIEpTVmFsdWVSZWYgZ2V0U2VsZlBlcmNlbnQoSlNDb250ZXh0UmVmIGN0eCwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRTZWxmUGVyY2VudChKU0NvbnRleHRS
ZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiop
CiB7CiAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAKQEAgLTEyNCw3ICsxMjQsNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBnZXRTZWxmUGVyY2VudChKU0NvbnRlCiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlTnVtYmVyKGN0eCwgcHJvZmlsZU5vZGUtPnNlbGZQZXJjZW50KCkpOwogfQogCi1zdGF0
aWMgSlNWYWx1ZVJlZiBnZXROdW1iZXJPZkNhbGxzKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQorc3RhdGljIEpTVmFsdWVSZWYgZ2V0TnVtYmVyT2ZDYWxscyhKU0NvbnRleHRSZWYg
Y3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopCiB7
CiAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBnZXROdW1iZXJPZkNhbGxzKEpTQ29uCiAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlTnVtYmVyKGN0eCwgcHJvZmlsZU5vZGUtPm51bWJlck9mQ2FsbHMoKSk7CiB9CiAKLXN0YXRp
YyBKU1ZhbHVlUmVmIGdldENoaWxkcmVuKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQorc3RhdGljIEpTVmFsdWVSZWYgZ2V0Q2hpbGRyZW4oSlNDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKIApAQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIGdldENoaWxkcmVuKEpTQ29udGV4dFIKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBnZXRWaXNpYmxlKEpTQ29udGV4dFJlZiBjdHgsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQorc3RhdGljIEpTVmFsdWVSZWYgZ2V0VmlzaWJsZShKU0NvbnRleHRSZWYgY3R4
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopCiB7CiAg
ICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZEZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCShy
ZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIENhY2hlZEZvbnQ6On5DYWNoZWRGb250KCkKICNlbmRp
ZgogfQogCi12b2lkIENhY2hlZEZvbnQ6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCit2b2lk
IENhY2hlZEZvbnQ6OmxvYWQoRG9jTG9hZGVyKikKIHsKICAgICAvLyBEb24ndCBsb2FkIHRoZSBm
aWxlIHlldC4gIFdhaXQgZm9yIGFuIGFjY2VzcyBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgbG9hZC4K
ICAgICBtX2xvYWRpbmcgPSB0cnVlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9u
IDM5NTkzKQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDE2ICs5MiwxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzaXph
YmxlKGJvb2wpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoY29u
c3QgU3RyaW5nJiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYpIHsgfQogCiAgICAgdmlydHVhbCBi
b29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiwgRnJhbWUqKSB7IHJl
dHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3dTb29uKCkgeyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiwgY29uc3QgU3RyaW5n
JikgeyB9CiAgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiwgY29u
c3QgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNj
cmlwdFByb21wdChGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBk
ZWZhdWx0VmFsdWUsIFN0cmluZyYgcmVzdWx0KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmKSB7IH0KQEAgLTExMCwxNiArMTEw
LDE2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRUb0RpcnR5
UmVnaW9uKGNvbnN0IEludFJlY3QmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQmFja2lu
Z1N0b3JlKGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCYWNraW5n
U3RvcmUoaW50LCBpbnQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lk
IHJlcGFpbnQoY29uc3QgSW50UmVjdCYsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRp
YXRlID0gZmFsc2UsIGJvb2wgcmVwYWludENvbnRlbnRPbmx5ID0gZmFsc2UpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJl
Y3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCByZXBhaW50KGNvbnN0IEludFJlY3QmLCBib29sLCBib29sLCBib29sKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgSW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29u
c3QgSW50UG9pbnQmIHApIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgICB2aXJ0dWFsIEludFJlY3Qg
d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcikgY29uc3QgeyByZXR1cm4gcjsgfQogICAg
IHZpcnR1YWwgUGxhdGZvcm1XaWRnZXQgcGxhdGZvcm1XaW5kb3coKSBjb25zdCB7IHJldHVybiAw
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQp
IHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3RyaW5nJikgeyB9CiAK
QEAgLTE1OSwyNiArMTU5LDI2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkb3dubG9h
ZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyB9Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVk
aXJlY3RSZXNwb25zZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9h
ZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShE
b2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50
TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVu
Z3RoUmVjZWl2ZWQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRp
bmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9Ci0gICAgdmlydHVh
bCBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGlu
dCBsZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGFzc2lnbklkZW50
aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIERvY3VtZW50TG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JikgeyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRD
YW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9u
ZywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywg
aW50KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNv
dXJjZUVycm9yJikgeyB9CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291cmNl
RnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCkgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9h
ZCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVj
dChjb25zdCBLVVJMJiwgZG91YmxlIGludGVydmFsLCBkb3VibGUgZmlyZURhdGUpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoY29uc3QgS1VS
TCYsIGRvdWJsZSwgZG91YmxlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDaGFu
Z2VMb2NhdGlvbldpdGhpblBhZ2UoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxs
Q2xvc2UoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYg
dGl0bGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25z
dCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25z
dCBSZXNvdXJjZUVycm9yJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExv
YWQoY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQpAQCAtMTkwLDggKzE5MCw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIEZyYW1lKiBkaXNwYXRjaENyZWF0ZVBhZ2UoKSB7IHJldHVybiAwOyB9CiAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoU2hvdygpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3Qg
U3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5
RnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGlj
eUZ1bmN0aW9uLCBjb25zdCBTdHJpbmcmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJh
bWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJikgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFt
ZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2Fu
Y2VsUG9saWN5Q2hlY2soKSB7IH0KIApAQCAtMjMxLDkgKzIzMSw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkRmFsbEJhY2soY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBj
YW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUo
Y29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBV
UkxTY2hlbWUpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisgICAgdmlydHVhbCBib29sIGNhblNob3dN
SU1FVHlwZShjb25zdCBTdHJpbmcmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlZE1JTUVU
eXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuICIiOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkQ29tcGxldGVkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHJlc3RvcmVWaWV3U3RhdGUoKSB7IH0KQEAgLTI0NCw3ICsyNDQsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKSB7IH0KIAogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgc3Vi
c3RpdHV0ZURhdGEpIHsgcmV0dXJuIERvY3VtZW50TG9hZGVyOjpjcmVhdGUocmVxdWVzdCwgc3Vi
c3RpdHV0ZURhdGEpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYg
dGl0bGUsIGNvbnN0IEtVUkwmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgS1VSTCYpIHsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcgdXNlckFnZW50
KGNvbnN0IEtVUkwmKSB7IHJldHVybiAiIjsgfQogCkBAIC0yNTcsMjIgKzI1NywyMSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNhdmVWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qKSB7
IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJF
bGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVm
ZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5I
ZWlnaHQpIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFdpZGdldCogY3JlYXRlUGx1Z2luKGNv
bnN0IEludFNpemUmLEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpIHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RnJhbWU+IGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBi
b29sLCBpbnQsIGludCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgV2lkZ2V0KiBjcmVhdGVQ
bHVnaW4oY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpIHsg
cmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIFdpZGdldCogY3JlYXRlSmF2YUFwcGxldFdpZGdldChj
b25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgeyByZXR1cm4gMDsgfQogCi0gICAgdmlydHVhbCBP
YmplY3RDb250ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpIHsgcmV0dXJuIE9iamVjdENvbnRlbnRUeXBlKCk7IH0KKyAgICB2
aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmKSB7IHJldHVybiBPYmplY3RDb250ZW50VHlwZSgpOyB9CiAgICAgdmlydHVh
bCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCopIHt9Ci0gICAg
dmlydHVhbCB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSB7fQotICAgIHZpcnR1YWwgdm9pZCBk
aWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkgY29uc3Qge30KKyAgICB2aXJ0dWFsIHZvaWQgcmVk
aXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbmRvd09i
amVjdENsZWFyZWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0TmF2aWdh
dGlvbigpIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlm
aWNhdGlvbihib29sIGxpc3Rlbikge30KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29u
Tm90aWZpY2F0aW9uKGJvb2wpIHsgfQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwg
TlNDYWNoZWRVUkxSZXNwb25zZSogd2lsbENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKSBj
b25zdCB7IHJldHVybiByZXNwb25zZTsgfQorICAgIHZpcnR1YWwgTlNDYWNoZWRVUkxSZXNwb25z
ZSogd2lsbENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBOU0Nh
Y2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkgY29uc3QgeyByZXR1cm4gcmVzcG9uc2U7IH0KICNl
bmRpZgogCiB9OwpAQCAtMzAwLDcgKzI5OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSW5zZXJ0Tm9kZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgLy8gIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUq
LCBSYW5nZSogcmVwbGFjaW5nUmFuZ2UsIFdlYlZpZXdJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiwg
UmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2Uq
IHRvUmFuZ2UsIEVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSosIFJh
bmdlKiwgRUFmZmluaXR5LCBib29sKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBi
b29sIHNob3VsZEFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFJhbmdlKikgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUo
UmFuZ2UqLCBSYW5nZSopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0zNDcsMTQgKzM0NiwxNCBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVu
dChjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0
cmluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3Qg
VUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3Bl
bGxpbmdMZW5ndGgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhj
b25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCogYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIGludCosIGludCop
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhcios
IGludCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50KikgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBj
b25zdCBHcmFtbWFyRGV0YWlsJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykgeyB9CisgICAgdmlydHVhbCB2b2lkIHNob3dTcGVs
bGluZ1VJKGJvb2wpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29u
c3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCkgeyB9CiAKIAogfTsKQEAg
LTM2Nyw3ICszNjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQbGF0Zm9ybU1lbnVEZXNjcmlw
dGlvbiBnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhDb250ZXh0TWVudSopIHsgcmV0dXJu
IDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVJdGVtKiwgY29uc3QgQ29udGV4dE1lbnUqKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkb3du
bG9hZFVSTChjb25zdCBLVVJMJiB1cmwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZFVS
TChjb25zdCBLVVJMJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVRvQ2xpcGJvYXJk
KGNvbnN0IEhpdFRlc3RSZXN1bHQmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoV2l0aEdv
b2dsZShjb25zdCBGcmFtZSopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsb29rVXBJbkRpY3Rpb25h
cnkoRnJhbWUqKSB7IH0KQEAgLTM4Nyw3ICszODYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBE
cmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEqKSB7IHJldHVy
biBEcmFnRGVzdGluYXRpb25BY3Rpb25Ob25lOyB9CiAgICAgdmlydHVhbCBEcmFnU291cmNlQWN0
aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSB7IHJldHVy
biBEcmFnU291cmNlQWN0aW9uTm9uZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoRHJh
Z0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwg
RnJhbWUqLCBib29sKSB7IH0KLSAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2VGb3JMaW5rKEtVUkwmLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBGcmFtZSopIHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEtVUkwm
LCBjb25zdCBTdHJpbmcmLCBGcmFtZSopIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKSB7IH0KIH07CiAKQEAgLTQxMSwxMSArNDEwLDExIEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSopIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3Rl
ZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIHsgfQogCi0gICAgdmlydHVhbCB2b2lk
IHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgSW5zcGVjdG9yQ29udHJvbGxlcjo6
U2V0dGluZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmLCBJbnNwZWN0b3JDb250cm9sbGVy
OjpTZXR0aW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZVNldHRpbmcoY29uc3QgU3RyaW5nJikgeyB9CiB9OwogCiB9CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysr
IFdlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgRlRQRGlyZWN0b3J5VG9rZW5pemVyOjpjcmVhdGVCYXNp
Y0QKICAgICBib2R5RWxlbWVudC0+YXBwZW5kQ2hpbGQobV90YWJsZUVsZW1lbnQsIGVjKTsKIH0K
IAotYm9vbCBGVFBEaXJlY3RvcnlUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmlu
ZyYgcywgYm9vbCBhcHBlbmREYXRhKQorYm9vbCBGVFBEaXJlY3RvcnlUb2tlbml6ZXI6OndyaXRl
KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgcywgYm9vbCAvKmFwcGVuZERhdGEqLykKIHsgICAgCiAg
ICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgdGhlIHRhYmxlIGVsZW1lbnQgdG8gYXBwZW5kIHRvIGJ5
IGxvYWRpbmcgdGhlIHRlbXBsYXRlIHNldCBpbiB0aGUgcHJlZiwgb3IKICAgICAvLyBjcmVhdGlu
ZyBhIHZlcnkgYmFzaWMgZG9jdW1lbnQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdGFibGUKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODg3LDcgKzM4ODcsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjYWxsQ29udGludWVMb2FkQWZ0ZXJOCiAgICAgbG9hZGVyLT5jb250aW51
ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3kocmVxdWVzdCwgZm9ybVN0YXRlLCBzaG91bGRDb250
aW51ZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlv
blBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPiBmb3JtU3RhdGUsIGJvb2wgc2hvdWxkQ29udGludWUpCit2b2lkIEZyYW1lTG9hZGVyOjpj
b250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgYm9vbCBzaG91bGRDb250aW51ZSkKIHsK
ICAgICAvLyBJZiB3ZSBsb2FkZWQgYW4gYWx0ZXJuYXRlIHBhZ2UgdG8gcmVwbGFjZSBhbiB1bnJl
YWNoYWJsZVVSTCwgd2UnbGwgZ2V0IGluIGhlcmUgd2l0aCBhCiAgICAgLy8gbmlsIHBvbGljeURh
dGFTb3VyY2UgYmVjYXVzZSBsb2FkaW5nIHRoZSBhbHRlcm5hdGUgcGFnZSB3aWxsIGhhdmUgcGFz
c2VkCkBAIC00ODA2LDcgKzQ4MDYsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzZXRNYWluRG9jdW1l
bnRFcnJvcihECiAgICAgbV9jbGllbnQtPnNldE1haW5Eb2N1bWVudEVycm9yKGxvYWRlciwgZXJy
b3IpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjptYWluUmVjZWl2ZWRDb21wbGV0ZUVycm9yKERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBG
cmFtZUxvYWRlcjo6bWFpblJlY2VpdmVkQ29tcGxldGVFcnJvcihEb2N1bWVudExvYWRlciogbG9h
ZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKIHsKICAgICBsb2FkZXItPnNldFByaW1hcnlMb2Fk
Q29tcGxldGUodHJ1ZSk7CiAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJj
ZShhY3RpdmVEb2N1bWVudExvYWRlcigpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ltYWdlRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MSwxMyArOTEsMTMgQEAgcHJpdmF0ZToKIAogLy8gLS0tLS0tLS0K
IAotYm9vbCBJbWFnZVRva2VuaXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzLCBi
b29sIGFwcGVuZERhdGEpCitib29sIEltYWdlVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50
ZWRTdHJpbmcmLCBib29sKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBJbWFnZVRva2VuaXplcjo6d3JpdGVSYXdEYXRhKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW4pCitib29sIEltYWdlVG9rZW5pemVyOjp3cml0ZVJhd0RhdGEoY29u
c3QgY2hhciosIGludCkKIHsKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBtX2RvYy0+
Y2FjaGVkSW1hZ2UoKTsKICAgICBjYWNoZWRJbWFnZS0+ZGF0YShtX2RvYy0+ZnJhbWUoKS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJjZURhdGEoKSwgZmFsc2UpOwpAQCAt
MzQxLDcgKzM0MSw3IEBAIGJvb2wgSW1hZ2VEb2N1bWVudDo6c2hvdWxkU2hyaW5rVG9GaXQoKSAK
IAogLy8gLS0tLS0tLS0KIAotdm9pZCBJbWFnZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2
ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQordm9pZCBJbWFnZUV2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9vbCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQpCiAgICAgICAgIG1fZG9jLT53aW5kb3dTaXpl
Q2hhbmdlZCgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMzk1OTMpCisr
KyBXZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3
ICsxMzQsNyBAQCB2b2lkIEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudElnbm9yCiAgICAg
dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0KIAotdm9pZCBJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNo
ZWQoQ2FjaGVkUmVzb3VyY2UgKmltYWdlKQordm9pZCBJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNo
ZWQoQ2FjaGVkUmVzb3VyY2UqKQogewogICAgIEFTU0VSVChtX2ZhaWxlZExvYWRVUkwuaXNFbXB0
eSgpKTsKICAgICBtX2ltYWdlQ29tcGxldGUgPSB0cnVlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
TWFpblJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NYWlu
UmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvbG9hZGVyL01h
aW5SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCB2
b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6Y2FsbENvbnRpbnVlQWZ0CiAgICAgc3RhdGljX2Nhc3Q8
TWFpblJlc291cmNlTG9hZGVyKj4oYXJndW1lbnQpLT5jb250aW51ZUFmdGVyTmF2aWdhdGlvblBv
bGljeShyZXF1ZXN0LCBzaG91bGRDb250aW51ZSk7CiB9CiAKLXZvaWQgTWFpblJlc291cmNlTG9h
ZGVyOjpjb250aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGJvb2wgc2hvdWxkQ29udGludWUpCit2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6
Y29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9v
bCBzaG91bGRDb250aW51ZSkKIHsKICAgICBpZiAoIXNob3VsZENvbnRpbnVlKQogICAgICAgICBz
dG9wTG9hZGluZ0ZvclBvbGljeUNoYW5nZSgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvTWVkaWFE
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTWVkaWFEb2N1bWVudC5j
cHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9sb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgY2xhc3MgTWVkaWFUb2tlbml6ZXIgOiBw
dWJsaWMgVG9rZW5pemVyIAogcHVibGljOgogICAgIE1lZGlhVG9rZW5pemVyKERvY3VtZW50KiBk
b2MpIDogbV9kb2MoZG9jKSwgbV9tZWRpYUVsZW1lbnQoMCkge30KICAgICAgICAgCitwcml2YXRl
OgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sIGFw
cGVuZERhdGEpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wUGFyc2luZygpOwogICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2goKTsKQEAgLTYyLDEyICs2MywxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIHdyaXRlUmF3RGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKTsKICAgICAgICAgCiAg
ICAgdm9pZCBjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpOwotcHJpdmF0ZToKKwogICAgIERvY3Vt
ZW50KiBtX2RvYzsKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtX21lZGlhRWxlbWVudDsKIH07CiAK
LWJvb2wgTWVkaWFUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgcywgYm9v
bCBhcHBlbmREYXRhKQorYm9vbCBNZWRpYVRva2VuaXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGVk
U3RyaW5nJiwgYm9vbCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xMDMsNyArMTA0LDcgQEAgdm9pZCBNZWRpYVRva2VuaXplcjo6Y3JlYXRlRG9j
dW1lbnRTdHJ1YwogICAgIGZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+
bWFpblJlc291cmNlTG9hZGVyKCktPnNldFNob3VsZEJ1ZmZlckRhdGEoZmFsc2UpOwogfQogICAg
IAotYm9vbCBNZWRpYVRva2VuaXplcjo6d3JpdGVSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW4pCitib29sIE1lZGlhVG9rZW5pemVyOjp3cml0ZVJhd0RhdGEoY29uc3QgY2hhciosIGlu
dCkKIHsKICAgICBBU1NFUlQoIW1fbWVkaWFFbGVtZW50KTsKICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysr
IFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NiArNDgsNyBAQCBjbGFzcyBQbHVnaW5Ub2tlbml6ZXIgOiBwdWJsaWMgVG9rZW5pemVyCiBwdWJs
aWM6CiAgICAgUGx1Z2luVG9rZW5pemVyKERvY3VtZW50KiBkb2MpIDogbV9kb2MoZG9jKSwgbV9l
bWJlZEVsZW1lbnQoMCkge30KICAgICAgICAgCitwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB3
cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sIGFwcGVuZERhdGEpOwogICAgIHZpcnR1
YWwgdm9pZCBzdG9wUGFyc2luZygpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKQEAgLTU3
LDEyICs1OCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHdyaXRlUmF3RGF0YShjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuKTsKICAgICAgICAgCiAgICAgdm9pZCBjcmVhdGVEb2N1bWVu
dFN0cnVjdHVyZSgpOwotcHJpdmF0ZToKKwogICAgIERvY3VtZW50KiBtX2RvYzsKICAgICBIVE1M
RW1iZWRFbGVtZW50KiBtX2VtYmVkRWxlbWVudDsKIH07CiAgICAgCi1ib29sIFBsdWdpblRva2Vu
aXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzLCBib29sIGFwcGVuZERhdGEpCiti
b29sIFBsdWdpblRva2VuaXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCkK
IHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC05NCw3
ICs5NSw3IEBAIHZvaWQgUGx1Z2luVG9rZW5pemVyOjpjcmVhdGVEb2N1bWVudFN0cnUKICAgICBi
b2R5LT5hcHBlbmRDaGlsZChlbWJlZEVsZW1lbnQsIGVjKTsgICAgCiB9CiAgICAgCi1ib29sIFBs
dWdpblRva2VuaXplcjo6d3JpdGVSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiti
b29sIFBsdWdpblRva2VuaXplcjo6d3JpdGVSYXdEYXRhKGNvbnN0IGNoYXIqLCBpbnQpCiB7CiAg
ICAgQVNTRVJUKCFtX2VtYmVkRWxlbWVudCk7CiAgICAgaWYgKG1fZW1iZWRFbGVtZW50KQpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcs
NyBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzCiAgICAgbV9yZXF1
ZXN0ID0gcmVxdWVzdDsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEodW5z
aWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNU
b0JlU2VudCkKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcg
bG9uZywgdW5zaWduZWQgbG9uZyBsb25nKQogewogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9sb2Fk
ZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTUgKzQy
LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdWJyZXNvdXJjZUxvYWRlckNsaWVudCgpIHsg
fSAKIAogICAgIC8vIHJlcXVlc3QgbWF5IGJlIG1vZGlmaWVkCi0gICAgdmlydHVhbCB2b2lkIHdp
bGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRl
c1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLykgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0
ZXNUb0JlU2VudCovKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
U3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhcios
IGludCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VM
b2FkZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlcios
IGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBib29sJiBzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBib29sJiAv
KnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKi8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTdWJyZXNvdXJjZUxv
YWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvVGV4dERvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0RG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvbG9hZGVyL1RleHREb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgVGV4dFRva2VuaXplcjo6VGV4dFRva2VuaXplcihI
VE1MVmlld1NvdQogICAgIG1fZGVzdCA9IG1fYnVmZmVyOwogfSAgICAKIAotYm9vbCBUZXh0VG9r
ZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHMsIGJvb2wgYXBwZW5kRGF0YSkK
K2Jvb2wgVGV4dFRva2VuaXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzLCBib29s
KQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjksNyArMTI5LDcgQEAgdW5zaWduZWQgQXBwbGljYXRpb25DYWNoZTo6bnVtRHluYW1pY0VudAog
ICAgIHJldHVybiAwOwogfQogICAgIAotU3RyaW5nIEFwcGxpY2F0aW9uQ2FjaGU6OmR5bmFtaWNF
bnRyeSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK1N0cmluZyBBcHBsaWNhdGlvbkNhY2hlOjpkeW5h
bWljRW50cnkodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudAogICAg
IHJldHVybiBTdHJpbmcoKTsKQEAgLTEzNywxNSArMTM3LDE0IEBAIFN0cmluZyBBcHBsaWNhdGlv
bkNhY2hlOjpkeW5hbWljRW50cnkodW4KICAgICAKIGJvb2wgQXBwbGljYXRpb25DYWNoZTo6YWRk
RHluYW1pY0VudHJ5KGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIGlmICghZXF1YWxJZ25vcmlu
Z0Nhc2UobV9ncm91cC0+bWFuaWZlc3RVUkwoKS5wcm90b2NvbCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgS1VSTCh1cmwpLnByb3RvY29sKCkpKQorICAgIGlmICghZXF1YWxJZ25vcmlu
Z0Nhc2UobV9ncm91cC0+bWFuaWZlc3RVUkwoKS5wcm90b2NvbCgpLCBLVVJMKHVybCkucHJvdG9j
b2woKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKLXZvaWQgQXBwbGljYXRpb25DYWNoZTo6cmVtb3Zl
RHluYW1pY0VudHJ5KGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBBcHBsaWNhdGlvbkNhY2hlOjpy
ZW1vdmVEeW5hbWljRW50cnkoY29uc3QgU3RyaW5nJikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3Jv
dXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYs
NyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6On5BcHBsaWNhdGlvbkNhY2hlCiAgICAgY2FjaGVT
dG9yYWdlKCkuY2FjaGVHcm91cERlc3Ryb3llZCh0aGlzKTsKIH0KICAgICAKLUFwcGxpY2F0aW9u
Q2FjaGUqIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2FjaGVGb3JNYWluUmVxdWVzdChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCitBcHBsaWNh
dGlvbkNhY2hlKiBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNhY2hlRm9yTWFpblJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVudExvYWRlciopCiB7CiAgICAgaWYg
KCFBcHBsaWNhdGlvbkNhY2hlOjpyZXF1ZXN0SXNIVFRQT3JIVFRQU0dldChyZXF1ZXN0KSkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC05MCw3ICs5MCw3IEBAIEFwcGxpY2F0aW9uQ2FjaGUqIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cDoKICAgICByZXR1cm4gMDsKIH0KICAgICAKLUFwcGxpY2F0aW9uQ2Fj
aGUqIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK0Fw
cGxpY2F0aW9uQ2FjaGUqIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFsbGJhY2tDYWNoZUZvck1h
aW5SZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgRG9jdW1lbnRMb2FkZXIq
KQogewogICAgIGlmICghQXBwbGljYXRpb25DYWNoZTo6cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQo
cmVxdWVzdCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpkaWRSZWNlaXZlUmUKICAgICBtX2N1cnJlbnRSZXNvdXJjZSA9
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgcmVzcG9uc2UsIHR5cGUpOwog
fQogCi12b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJl
Y2VpdmVkKQordm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVEYXRhKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCkKIHsK
ICAgICBpZiAoaGFuZGxlID09IG1fbWFuaWZlc3RIYW5kbGUpIHsKICAgICAgICAgZGlkUmVjZWl2
ZU1hbmlmZXN0RGF0YShkYXRhLCBsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50
TGlzdGVuCiAgICAgfSAgICAKIH0KIAotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVy
KiBldmVudExpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit2b2lkIERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2
ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCiB7CiAgICAgRXZlbnRMaXN0ZW5lcnNN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKICAg
ICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZUNsaWVudC5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
bG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDgg
KzQxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkljb25EYXRhYmFzZUNsaWVudCgpIHsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtSW1wb3J0KCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlbW92ZUFsbEljb25zKCkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkQWRkSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRBZGRJY29uRm9yUGFnZVVSTChjb25zdCBT
dHJpbmcmIC8qcGFnZVVSTCovKSB7IH0KIH07CiAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlIAor
CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBJY29uTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNl
TG9hZAogICAgIH0KIH0KIAotdm9pZCBJY29uTG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQordm9pZCBJY29uTG9hZGVyOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpCiB7CiAgICAgLy8gV2UgZG9uJ3QgZXZlciB3YW50IHRvIHBy
b21wdCBmb3IgYXV0aGVudGljYXRpb24ganVzdCBmb3IgYSBzaXRlIGljb24sIHNvCiAgICAgLy8g
aW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGNhbmNlbCB0aGUgcmVzb3VyY2UgbG9hZApJbmRleDog
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
bG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcg
QEAgSWNvblJlY29yZDo6fkljb25SZWNvcmQoKQogICAgIExPRyhJY29uRGF0YWJhc2UsICJEZXN0
cm95aW5nIEljb25SZWNvcmQgZm9yIGljb24gdXJsICVzIiwgbV9pY29uVVJMLmFzY2lpKCkuZGF0
YSgpKTsKIH0KIAotSW1hZ2UqIEljb25SZWNvcmQ6OmltYWdlKGNvbnN0IEludFNpemUmIHNpemUp
CitJbWFnZSogSWNvblJlY29yZDo6aW1hZ2UoY29uc3QgSW50U2l6ZSYpCiB7CiAgICAgLy8gRklY
TUUgcmRhcjovLzQ2ODAzNzcgLSBGb3Igc2l6ZSByaWdodCBub3csIHdlIGFyZSByZXR1cm5pbmcg
b3VyIG9uZSBhbmQgb25seSBpbWFnZSBhbmQgdGhlIEJyaWRnZQogICAgIC8vIGlzIHJlc2l6aW5n
IGl0IGluIHBsYWNlLiAgV2UgbmVlZCB0byBhY3R1YWxseSBzdG9yZSBhbGwgdGhlIG9yaWdpbmFs
IHJlcHJlc2VudGF0aW9ucyBoZXJlIGFuZCByZXR1cm4gYSBuYXRpdmUKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL21hYy9SZXNvdXJjZUxvYWRlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9tYWMvUmVzb3VyY2VMb2FkZXJNYWMubW0JKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29y
ZS9sb2FkZXIvbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTlNDYWNoZWRVUkxSZXNwb25zZSog
UmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKQorTlNDYWNoZWRVUkxSZXNwb25zZSogUmVz
b3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgTlNDYWNoZWRV
UkxSZXNwb25zZSogcmVzcG9uc2UpCiB7CiAgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCktPmNsaWVu
dCgpLT53aWxsQ2FjaGVSZXNwb25zZShkb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVyKCksIHJl
c3BvbnNlKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlz
aW9uIDM5NTkzKQorKysgV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpz
ZXRTZWxlY3RlZFRleAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgQWNjZXNzaWJp
bGl0eU9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJh
bmdlKQordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShjb25z
dCBQbGFpblRleHRSYW5nZSYpCiB7CiB9CiAKQEAgLTI3MiwxMSArMjcyLDExIEBAIEtVUkwgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6dXJsKCkgY29uc3QKICAgICByZXR1cm4gS1VSTCgpOwogfQogCi12
b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNldEZvY3VzZWQoYm9vbCBvbikKK3ZvaWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6c2V0Rm9jdXNlZChib29sKQogewogfQogCi12b2lkIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmKQogewogfQogCkBAIC0zMjcsMTcgKzMy
NywxNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0CiAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiB9CiAKLVZpc2libGVQb3NpdGlvblJhbmdlIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCBs
aW5lQ291bnQpIGNvbnN0CitWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CitW
aXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5k
ZXgoaW50KSBjb25zdAogewogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIH0KICAgICAK
LWludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvcykgY29uc3QKK2ludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRl
eEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdAogewogICAg
IHJldHVybiAwOwogfQpAQCAtNjAwLDcgKzYwMCw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpzdHJpbmdGb3JWaXMKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHRWZWN0b3Ip
OwogfQogCi1JbnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kc0ZvclZpc2libGVQb3Np
dGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiB2aXNpYmxlUG9zaXRpb25SYW5n
ZSkgY29uc3QKK0ludFJlY3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRzRm9yVmlzaWJsZVBv
c2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdAogewogICAgIHJl
dHVybiBJbnRSZWN0KCk7CiB9CkBAIC02MzYsNyArNjM2LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpzZXRTZWxlY3RlZFZpcwogewogfQogCi1WaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJp
bGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAorVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3Np
dGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3QKIHsKICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CiB9CkBAIC03OTgsNyArNzk4LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnByZQogfQogCiAvLyBOT1RFOiBDb25zaWRlciBwcm92aWRpbmcgdGhp
cyB1dGlsaXR5IG1ldGhvZCBhcyBBWCBBUEkKLVZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCh1bnNpZ25lZCBpbmRleFZhbHVlLCBib29s
IGxhc3RJbmRleE9LKSBjb25zdAorVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnZpc2libGVQb3NpdGlvbkZvckluZGV4KHVuc2lnbmVkLCBib29sKSBjb25zdAogewogICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIH0KQEAgLTg0OSwxNCArODQ5LDE0IEBAIFBsYWluVGV4
dFJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBsYWkKIH0KIAogLy8gTk9URTogQ29uc2lkZXIg
cHJvdmlkaW5nIHRoaXMgdXRpbGl0eSBtZXRob2QgYXMgQVggQVBJCi1pbnQgQWNjZXNzaWJpbGl0
eU9iamVjdDo6aW5kZXgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKK2lu
dCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRleChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25z
dAogewogICAgIHJldHVybiAtMTsKIH0KIAogLy8gR2l2ZW4gYSBsaW5lIG51bWJlciwgdGhlIHJh
bmdlIG9mIGNoYXJhY3RlcnMgb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWNjZXNz
aWJpbGl0eQogLy8gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGxpbmUgbnVtYmVyLgotUGxhaW5U
ZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9BWFJhbmdlRm9yTGluZSh1bnNpZ25lZCBs
aW5lTnVtYmVyKSBjb25zdAorUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9B
WFJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3QKIHsKICAgICByZXR1cm4gUGxhaW5UZXh0UmFu
Z2UoKTsKIH0KQEAgLTg3OSw3ICs4NzksNyBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojpkb0FYCiAvLyBUaGUgY29tcG9zZWQgY2hhcmFjdGVyIHJhbmdlIGluIHRoZSB0ZXh0
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRoYXQKIC8vIGlzIHNw
ZWNpZmllZCBieSB0aGUgZ2l2ZW4gaW5kZXggdmFsdWUuIFRoaXMgcGFyYW1ldGVyaXplZCBhdHRy
aWJ1dGUgcmV0dXJucyB0aGUgY29tcGxldGUKIC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMgKGluY2x1
ZGluZyBzdXJyb2dhdGUgcGFpcnMgb2YgbXVsdGktYnl0ZSBnbHlwaHMpIGF0IHRoZSBnaXZlbiBp
bmRleC4KLVBsYWluVGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhSYW5nZUZvcklu
ZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAorUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eU9i
amVjdDo6ZG9BWFJhbmdlRm9ySW5kZXgodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBs
YWluVGV4dFJhbmdlKCk7CiB9CkBAIC04OTQsNyArODk0LDcgQEAgUGxhaW5UZXh0UmFuZ2UgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6ZG9BWAogCiAvLyBBIHN1YnN0cmluZyBvZiB0aGUgdGV4dCBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0aGF0IGlzCiAvLyBzcGVjaWZp
ZWQgYnkgdGhlIGdpdmVuIGNoYXJhY3RlciByYW5nZS4KLVN0cmluZyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojpkb0FYU3RyaW5nRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBjb25z
dAorU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhTdHJpbmdGb3JSYW5nZShjb25zdCBQ
bGFpblRleHRSYW5nZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpAQCAtOTAy
LDcgKzkwMiw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb0FYU3RyaW5nRm8KIC8v
IFRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
YWNjZXNzaWJpbGl0eSBvYmplY3QgdGhhdCBpcwogLy8gc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBy
YW5nZS4gVGhpcyBpcyB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIGEgc2lnaHRlZCB1c2VyIHdvdWxk
IHNlZQogLy8gb24gdGhlIGRpc3BsYXkgc2NyZWVuLCBpbiBwaXhlbHMuCi1JbnRSZWN0IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYg
cmFuZ2UpIGNvbnN0CitJbnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhCb3VuZHNGb3JS
YW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEludFJlY3Qo
KTsKIH0KQEAgLTkyNiw3ICs5MjYsNyBAQCBGcmFtZVZpZXcqIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OmRvY3VtZW50CiAgICAgcmV0dXJuIG9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKIH0gICAg
CiAKLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQWNjZXNzaWJp
bGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9BY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJ
bnRQb2ludCYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
Q2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDM2LDggKzQzNiw4IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjplbmFibGVTdWRkZW5UZXJtaW5hdGkK
IH0KIAogYm9vbCBDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXplLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxiYXJDb250cm9sU3RhdGUsIFNj
cm9sbGJhclBhcnQsIGJvb2wgdmVydGljYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgdmFsdWUsIGZsb2F0IHByb3BvcnRpb24sIFNjcm9sbGJhckNvbnRy
b2xQYXJ0TWFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3Jv
bGxiYXJDb250cm9sU3RhdGUsIFNjcm9sbGJhclBhcnQsIGJvb2wsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBTY3JvbGxiYXJDb250cm9sUGFy
dE1hc2spCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlz
aW9uIDM5NTkzKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzMCw3ICs1MzAsNyBAQCBTdHJpbmcgRE9NV2luZG93Ojpwcm9tcHQoY29uc3QgU3RyaW5n
JiBtCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1ib29sIERPTVdpbmRvdzo6ZmluZChjb25z
dCBTdHJpbmcmIHN0cmluZywgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGJhY2t3YXJkcywgYm9v
bCB3cmFwLCBib29sIHdob2xlV29yZCwgYm9vbCBzZWFyY2hJbkZyYW1lcywgYm9vbCBzaG93RGlh
bG9nKSBjb25zdAorYm9vbCBET01XaW5kb3c6OmZpbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJv
b2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBiYWNrd2FyZHMsIGJvb2wgd3JhcCwgYm9vbCAvKndob2xl
V29yZCovLCBib29sIC8qc2VhcmNoSW5GcmFtZXMqLywgYm9vbCAvKnNob3dEaWFsb2cqLykgY29u
c3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTE5LDcgKzE1MTksNyBAQCB2b2lkIEV2ZW50
SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdlCiAgICAgfQogfQogCi1ib29sIEV2ZW50SGFu
ZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBO
b2RlKiB0YXJnZXROb2RlLCBib29sIGNhbmNlbGFibGUsIGludCBjbGlja0NvdW50LCBjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIGJvb2wgc2V0VW5kZXIpCitib29sIEV2ZW50
SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBOb2RlKiB0YXJnZXROb2RlLCBib29sIC8qY2FuY2VsYWJsZSovLCBpbnQgY2xpY2tDb3VudCwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBib29sIHNldFVuZGVyKQogewog
ICAgIHVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKHRhcmdldE5vZGUsIG1vdXNlRXZlbnQsIHNl
dFVuZGVyKTsKIApJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcGFnZS9G
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODUsNyArMTI4NSw3IEBAIHZvaWQgRnJhbWU6
OnJldmVhbENhcmV0KGNvbnN0IFJlbmRlckxheWUKICAgICB9CiB9CiAKLXZvaWQgRnJhbWU6OmFk
anVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRC
b3R0b20sIGZsb2F0IGJvdHRvbUxpbWl0KQordm9pZCBGcmFtZTo6YWRqdXN0UGFnZUhlaWdodChm
bG9hdCogbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0IG9sZEJvdHRvbSwgZmxvYXQgLypi
b3R0b21MaW1pdCovKQogewogICAgIFJlbmRlclZpZXcqIHJvb3QgPSBjb250ZW50UmVuZGVyZXIo
KTsKICAgICBpZiAocm9vdCkgewpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkJhc2UuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE3ICs2MywxNyBAQCBzdGF0aWMg
aW5saW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuCiAgICAgcmV0dXJuIGJlemllci5zb2x2
ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYmxl
bmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGludCBmcm9tLCBpbnQgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25C
YXNlKiwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQogeyAgCiAgICAgcmV0dXJu
IGludChmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
ZG91YmxlIGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBkb3VibGUgZnJvbSwg
ZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1
bmMoY29uc3QgQW5pbWF0aW9uQmFzZSosIGRvdWJsZSBmcm9tLCBkb3VibGUgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsgIAogICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzczsK
IH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSog
YW5pbSwgZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxp
bmUgZmxvYXQgYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqLCBmbG9hdCBmcm9tLCBmbG9h
dCB0bywgZG91YmxlIHByb2dyZXNzKQogeyAgCiAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwogfQpAQCAtODYsNyArODYsNyBA
QCBzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBBbmltCiAgICAgICAgICAgICAg
ICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLmFscGhhKCksIHRvLmFscGhhKCksIHByb2dyZXNzKSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNl
KiBhbmltLCBjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3N0YXRpYyBpbmxpbmUgTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNl
KiwgY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CiB7ICAKICAgICByZXR1cm4gdG8uYmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOwogfQpJbmRleDogV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw4ICsxMjIsOCBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxl
LCBkb3VibGUgb2Zmc2V0LCBjb25zdCBUaW1pbmdGdW5jdGlvbiopIGNvbnN0OwogCi0gICAgdmly
dHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmlt
YXRlZFN0eWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRp
b24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogLypjdXJyZW50U3R5bGUqLywg
CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiAvKnRhcmdldFN0eWxlKi8sIFJlZlB0cjxSZW5k
ZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRGaXJlRXZlbnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMTQwLDcgKzE0MCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICAvLyBEb2VzIHRoaXMgYW5pbWF0aW9uL3RyYW5zaXRpb24gaW52b2x2
ZSB0aGUgZ2l2ZW4gcHJvcGVydHk/Ci0gICAgdmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShp
bnQgcHJvcGVydHkpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGFm
ZmVjdHNQcm9wZXJ0eShpbnQgLypwcm9wZXJ0eSovKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5n
Tm93KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzUnVubmluZ05vdykKQEAgLTE2MCwxMSAr
MTYwLDExIEBAIHByb3RlY3RlZDoKICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFu
aW1hdGlvbigpIHsgcmV0dXJuIG1fY29tcEFuaW07IH0KIAogICAgIC8vIFRoZXNlIGFyZSBjYWxs
ZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyB0aW1lciBmaXJlcyBzbyBzdWJjbGFzc2VzIGNhbiBk
byBhbnkgZXh0cmEgd29yawotICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJs
ZSBlbGFwc2VkVGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9u
KGRvdWJsZSBlbGFwc2VkVGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5k
KGRvdWJsZSBlbGFwc2VkVGltZSkgeyB9Ci0gICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9u
KGRvdWJsZSBiZWdpblRpbWUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGVu
ZEFuaW1hdGlvbihib29sIHJlc2V0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25T
dGFydChkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25Bbmlt
YXRpb25JdGVyYXRpb24oZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9CisgICAgdmlydHVhbCB2
b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQorICAgIHZpcnR1
YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgLypiZWdpblRpbWUqLykgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgLypyZXNldCovKSB7IH0K
IAogICAgIHZvaWQgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKIApAQCAtMTc3LDcgKzE3
Nyw2IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgdm9pZCBzZXRDaGFuZ2VkKE5vZGUq
KTsKIAotcHJvdGVjdGVkOgogICAgIEFuaW1TdGF0ZSBtX2FuaW1TdGF0ZTsKIAogICAgIGJvb2wg
bV9pc0FuaW1hdGluZzsgICAgICAgLy8gdHJhbnNpdGlvbi9hbmltYXRpb24gcmVxdWlyZXMgY29u
dGludWFsIHRpbWVyIGZpcmluZwpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw3
ICsyMTYsNyBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRFdmVuCiAgICAg
c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU+KiB0aW1lcikKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFu
aW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+KikKIHsK
ICAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNhbGwgc2V0Q2hhbmdl
ZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFuZCB0aGVuIGRvIGFu
IGltbWVkaWF0ZQogICAgIC8vIHVwZGF0ZVJlbmRlcmluZy4gIEl0IHdpbGwgdGhlbiBjYWxsIGJh
Y2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUyLDcgKzM1Miw3IEBAIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IENvbXBvc2l0
ZUEKICAgICByZXR1cm4gcmV0dmFsOwogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZh
dGU6OmNsZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3Zv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucyhS
ZW5kZXJPYmplY3QqKQogewogICAgIGlmIChpc1N1c3BlbmRlZCgpKQogICAgICAgICByZXR1cm47
CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAko
cmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCArNjAsNyBAQCBib29sIEltcGxpY2l0QW5p
bWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudCgp
LT5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOwogfQogCi12b2lkIEltcGxpY2l0QW5p
bWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5kZXJT
dHlsZT4mIGFuaW1hdGVkU3R5bGUpCit2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENv
bXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQogewog
ICAgIC8vIElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBt
ZWFucyB3ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1hdGlvbi4KICAgICAv
LyBTbyBqdXN0IHJldHVybi4gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGFsbCBjbGVhbmVkIHVwLgpJ
bmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHJl
dmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDcgQEAgS2V5ZnJhbWVBbmltYXRpb246
On5LZXlmcmFtZUFuaW1hdGlvbigpCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRp
b25TdGF0ZUlucHV0RW5kQW5pbWF0aW9uLCAtMSk7CiB9CiAKLXZvaWQgS2V5ZnJhbWVBbmltYXRp
b246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBS
ZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQordm9pZCBLZXlmcmFtZUFuaW1hdGlv
bjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRlclN0
eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBGaXJlIHRoZSBzdGFydCB0aW1lb3V0IGlm
IG5lZWRlZAogICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9BcmVuYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9BcmVu
YS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkwLDggKzkwLDcgQEAgc3RhdGljIGludCBDZWlsaW5nTG9nMih1bnNp
Z25lZCBpbnQgaSkgewogICAgIHJldHVybiBsb2cyOwogfQogCi12b2lkIEluaXRBcmVuYVBvb2wo
QXJlbmFQb29sICpwb29sLCBjb25zdCBjaGFyICpuYW1lLCAKLSAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKQordm9pZCBJbml0QXJlbmFQb29s
KEFyZW5hUG9vbCogcG9vbCwgY29uc3QgY2hhciosIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGFs
aWduKQogewogICAgICBpZiAoYWxpZ24gPT0gMCkKICAgICAgICAgIGFsaWduID0gQVJFTkFfREVG
QVVMVF9BTElHTjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgJKHJldmlzaW9uIDM5
NTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFNjcm9sbGJhclRoZW1lIHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZSgpIHt9OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50KFNj
cm9sbGJhciosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhciosIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIC8qZGFtYWdlUmVjdCovKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhciosIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIE5vUGFydDsgfQogICAgIAogICAgIHZpcnR1
YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJT
Y3JvbGxiYXIpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCShyZXZpc2lvbiAzOTU5
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTGVuZ3RoQm94IFRoZW1lOjpjb250
cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gm
IHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6Y29u
dHJvbEJvcmRlcihDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0KSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAg
ICBjYXNlIFB1c2hCdXR0b25QYXJ0OgpAQCAtNDIsNyArNDIsNyBAQCBMZW5ndGhCb3ggVGhlbWU6
OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhCiAgICAgfQogfQogCi1MZW5ndGhCb3ggVGhlbWU6OmNv
bnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhC
b3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6
Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0
aEJveCYgem9vbWVkQm94LCBmbG9hdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAg
ICAgICAgY2FzZSBNZW51bGlzdFBhcnQ6CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCShyZXZpc2lvbiAzOTU5MykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTMgKzgx
LDEzIEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2RzIHVzZWQgdG8gYWRqdXN0IHRoZSBSZW5kZXJT
dHlsZXMgb2YgY29udHJvbHMuCiAgICAgCiAgICAgLy8gVGhlIGZvbnQgZGVzY3JpcHRpb24gcmVz
dWx0IHNob3VsZCBoYXZlIGEgem9vbWVkIGZvbnQgc2l6ZS4KLSAgICB2aXJ0dWFsIEZvbnREZXNj
cmlwdGlvbiBjb250cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQg
em9vbUZhY3RvcikgY29uc3QgeyByZXR1cm4gZm9udC5mb250RGVzY3JpcHRpb24oKTsgfQorICAg
IHZpcnR1YWwgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBG
b250JiBmb250LCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gZm9udC5mb250
RGVzY3JpcHRpb24oKTsgfQogICAgIAogICAgIC8vIFRoZSBzaXplIGhlcmUgaXMgaW4gem9vbWVk
IGNvb3JkaW5hdGVzIGFscmVhZHkuICBJZiBhIG5ldyBzaXplIGlzIHJldHVybmVkLCBpdCBhbHNv
IG5lZWRzIHRvIGJlIGluIHpvb21lZCBjb29yZGluYXRlcy4KLSAgICB2aXJ0dWFsIExlbmd0aFNp
emUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhTaXpl
JiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCB7IHJldHVybiB6b29tZWRTaXpl
OyB9CisgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25z
dCBGb250JiwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgLyp6b29tRmFjdG9y
Ki8pIGNvbnN0IHsgcmV0dXJuIHpvb21lZFNpemU7IH0KICAgICAKICAgICAvLyBSZXR1cm5zIHRo
ZSBtaW5pbXVtIHNpemUgZm9yIGEgY29udHJvbCBpbiB6b29tZWQgY29vcmRpbmF0ZXMuICAKLSAg
ICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25z
dCBGb250JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QgeyByZXR1cm4gTGVuZ3RoU2l6ZShMZW5n
dGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsgfQorICAgIHZpcnR1YWwgTGVuZ3RoU2l6
ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCAvKnpv
b21GYWN0b3IqLykgY29uc3QgeyByZXR1cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBM
ZW5ndGgoMCwgRml4ZWQpKTsgfQogICAgIAogICAgIC8vIEFsbG93cyB0aGUgdGhlbWUgdG8gbW9k
aWZ5IHRoZSBleGlzdGluZyBwYWRkaW5nL2JvcmRlci4KICAgICB2aXJ0dWFsIExlbmd0aEJveCBj
b250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYg
em9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKQEAgLTk2LDE0ICs5NiwxNCBAQCBw
dWJsaWM6CiAgICAgLy8gV2hldGhlciBvciBub3Qgd2hpdGVzcGFjZTogcHJlIHNob3VsZCBiZSBm
b3JjZWQgb24gYWx3YXlzLgogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sUmVxdWlyZXNQcmVXaGl0
ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgLy8gTWV0
aG9kIGZvciBwYWludGluZyBhIGNvbnRyb2wuICBUaGUgcmVjdCBpcyBpbiB6b29tZWQgY29vcmRp
bmF0ZXMuCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVz
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29t
RmFjdG9yLCBTY3JvbGxWaWV3KikgY29uc3QgeyB9OworICAgIC8vIE1ldGhvZCBmb3IgcGFpbnRp
bmcgYSBjb250cm9sLiBUaGUgcmVjdCBpcyBpbiB6b29tZWQgY29vcmRpbmF0ZXMuCisgICAgdmly
dHVhbCB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JiAvKnpvb21lZFJlY3QqLywgZmxvYXQgLyp6b29tRmFjdG9yKi8s
IFNjcm9sbFZpZXcqKSBjb25zdCB7IH0KIAogICAgIC8vIFNvbWUgY29udHJvbHMgbWF5IHNwaWxs
IG91dCBvZiB0aGVpciBjb250YWluZXJzIChlLmcuLCB0aGUgY2hlY2sgb24gYW4gT1MgWCBjaGVj
a2JveCkuICBXaGVuIHRoZXNlIGNvbnRyb2xzIHJlcGFpbnQsCiAgICAgLy8gdGhlIHRoZW1lIG5l
ZWRzIHRvIGNvbW11bmljYXRlIHRoaXMgaW5mbGF0ZWQgcmVjdCB0byB0aGUgZW5naW5lIHNvIHRo
YXQgaXQgY2FuIGludmFsaWRhdGUgdGhlIHdob2xlIGNvbnRyb2wuCiAgICAgLy8gVGhlIHJlY3Qg
cGFzc2VkIGluIGlzIGluIHpvb21lZCBjb29yZGluYXRlcywgc28gdGhlIGluZmxhdGlvbiBzaG91
bGQgdGFrZSB0aGF0IGludG8gYWNjb3VudCBhbmQgbWFrZSBzdXJlIHRoZSBpbmZsYXRpb24KICAg
ICAvLyBhbW91bnQgaXMgYWxzbyBzY2FsZWQgYnkgdGhlIHpvb21GYWN0b3IuCi0gICAgdmlydHVh
bCB2b2lkIGluZmxhdGVDb250cm9sUGFpbnRSZWN0KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVz
LCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgaW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQsIENvbnRyb2xT
dGF0ZXMsIEludFJlY3QmIC8qem9vbWVkUmVjdCovLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29u
c3QgeyB9CiAgICAgCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2UsIGZyb20gUmVu
ZGVyVGhlbWU6OmFkanVzdERlZmF1bHRTdHlsZVNoZWV0KCksIHRvIGxldCBlYWNoIHBsYXRmb3Jt
IGFkanVzdAogICAgIC8vIHRoZSBkZWZhdWx0IENTUyBydWxlcyBpbiBodG1sNC5jc3MuCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnJlc2V0QW5pbWF0
aW9uKCkKICAgICBkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeSh0cnVlKTsKIH0KIAotdm9p
ZCBCaXRtYXBJbWFnZTo6YWR2YW5jZUFuaW1hdGlvbihUaW1lcjxCaXRtYXBJbWFnZT4qIHRpbWVy
KQordm9pZCBCaXRtYXBJbWFnZTo6YWR2YW5jZUFuaW1hdGlvbihUaW1lcjxCaXRtYXBJbWFnZT4q
KQogewogICAgIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbihmYWxzZSk7CiAgICAgLy8gQXQgdGhp
cyBwb2ludCB0aGUgaW1hZ2UgcmVnaW9uIGhhcyBiZWVuIG1hcmtlZCBkaXJ0eSwgYW5kIGlmIGl0
J3MKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHJl
dmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksOCArMjY5LDcgQEAgdm9pZCBGb250OjpkcmF3U2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleAogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBnbHlw
aEJ1ZmZlciwgcnVuLCBzdGFydFBvaW50KTsKIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7ICAgCiAgICAg
Ly8gRHJhdyBlYWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyB0aGF0IHVzZSB0aGUgc2FtZSBm
b250IGRhdGEuCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhCdWZm
ZXIuZm9udERhdGFBdCgwKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRlZEltYWdlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQog
CiAgICAgLy8gQXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNvbnRlbnQgaGFzIG5vIGRlY29kZWQgZGF0
YSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVk
RGF0YShib29sIGRlc3Ryb3lBbGwgPSB0cnVlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eURlY29kZWREYXRhKGJvb2wgLypkZXN0cm95QWxsKi8gPSB0cnVlKSB7IH0KICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiBwcm90ZWN0ZWQ6
CkBAIC02MSw3ICs2MSw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCk7CiAgICAgCi1wcm90ZWN0ZWQ6CiAgICAgR2VuZXJhdGVkSW1hZ2Uo
UGFzc1JlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAg
ICAgICAgOiBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCiAgICAgICAgICwgbV9zaXplKHNpemUpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEw
Niw3IEBAIHB1YmxpYzoKICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CiAKICAgICBib29sIHNldERh
dGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsK
LSAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgLyphbGxEYXRh
UmVjZWl2ZWQqLykgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKICAgICB2aXJ0dWFsIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9IC8vIG51bGwgc3Ry
aW5nIGlmIHVua25vd24KIApAQCAtMTU5LDcgKzE1OSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIGJvb2wgbWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIENvbG9yIHNvbGlkQ29sb3IoKSBjb25zdCB7IHJldHVybiBDb2xvcigpOyB9
CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5pbWF0aW9uKGJvb2wgY2F0Y2hVcElmTmVj
ZXNzYXJ5ID0gdHJ1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5pbWF0aW9uKGJvb2wg
LypjYXRjaFVwSWZOZWNlc3NhcnkqLyA9IHRydWUpIHsgfQogICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9y
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw3IEBAIEltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UoKQogICAgIGNsZWFy
KHRydWUpOwogfQogCi12b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNp
emVfdCBjbGVhckJlZm9yZUZyYW1lKQordm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0
cm95QWxsLCBzaXplX3QpCiB7CiAgICAgaWYgKGRlc3Ryb3lBbGwpIHsKICAgICAgICAgaWYgKG1f
ZGVjb2RlcikgewpAQCAtMjMxLDcgKzIzMSw3IEBAIGZsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1
cmF0aW9uQXRJbmRleCgKICAgICByZXR1cm4gZHVyYXRpb247CiB9CiAKLWJvb2wgSW1hZ2VTb3Vy
Y2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK2Jvb2wgSW1hZ2VTb3VyY2U6
OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkKIHsKICAgICAvLyBNaWdodCBiZSBpbnRlcmVz
dGluZyB0byBkbyB0aGlzIG9wdGltaXphdGlvbiBvbiBNYWMgc29tZSBkYXksIGJ1dCBmb3Igbm93
IHdlJ3JlIGp1c3QgdXNpbmcgdGhpcwogICAgIC8vIGZvciB0aGUgQ2Fpcm8gc291cmNlLCBzaW5j
ZSBpdCB1c2VzIG91ciBkZWNvZGVycywgYW5kIG91ciBkZWNvZGVycyBjYW4gYW5zd2VyIHRoaXMg
cXVlc3Rpb24uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuaAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUERGRG9jdW1lbnRJbWFnZSk7CiAgICAgICAgIH0KLSAgICAgICAgflBERkRvY3Vt
ZW50SW1hZ2UoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgflBERkRvY3VtZW50
SW1hZ2UoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4o
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTUwLDEyICs1MiwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgLy8gRklYTUU6IFBERiBJbWFnZXMgYXJlIHVuZGVycmVwb3J0
aW5nIGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCiAgICAgICAgIC8vIHRvIHBydW5l
IGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9IHRydWUp
IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgLypkZXN0
cm95QWxsKi8gPSB0cnVlKSB7IH0KICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0OwogCi0gICAgcHJpdmF0ZToKICAgICAgICAgUERGRG9jdW1lbnRJbWFnZSgpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOwog
ICAgICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWNBVFNV
SS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFj
QVRTVUkubW0JKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udE1hY0FUU1VJLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsOCArMTU0LDcgQEAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZUFUU1VTdHlsZShjb25zdCBTaQogICAgIGZvbnREYXRhLT5tX0FU
U1VTdHlsZUluaXRpYWxpemVkID0gdHJ1ZTsKIH0KIAotc3RhdGljIE9TU3RhdHVzIG92ZXJyaWRl
TGF5b3V0T3BlcmF0aW9uKEFUU1VMYXlvdXRPcGVyYXRpb25TZWxlY3RvciBpQ3VycmVudE9wZXJh
dGlvbiwgQVRTVUxpbmVSZWYgaUxpbmVSZWYsIFVSZWZDb24gaVJlZkNvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppT3BlcmF0aW9uQ2FsbGJhY2tQYXJh
bWV0ZXJQdHIsIEFUU1VMYXlvdXRPcGVyYXRpb25DYWxsYmFja1N0YXR1cyAqb0NhbGxiYWNrU3Rh
dHVzKQorc3RhdGljIE9TU3RhdHVzIG92ZXJyaWRlTGF5b3V0T3BlcmF0aW9uKEFUU1VMYXlvdXRP
cGVyYXRpb25TZWxlY3RvciwgQVRTVUxpbmVSZWYgaUxpbmVSZWYsIFVSZWZDb24gaVJlZkNvbiwg
dm9pZCosIEFUU1VMYXlvdXRPcGVyYXRpb25DYWxsYmFja1N0YXR1cyogb0NhbGxiYWNrU3RhdHVz
KQogewogICAgIEFUU1VMYXlvdXRQYXJhbWV0ZXJzKiBwYXJhbXMgPSByZWludGVycHJldF9jYXN0
PEFUU1VMYXlvdXRQYXJhbWV0ZXJzKj4oaVJlZkNvbik7CiAgICAgT1NTdGF0dXMgc3RhdHVzOwpA
QCAtNTkyLDcgKzU5MSw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b24KICAgICAgICAgICAgTUlOKEZpeGVkVG9GbG9hdChmaXJzdEdseXBoQm91bmRzLnVwcGVyTGVm
dC54KSwgRml4ZWRUb0Zsb2F0KGZpcnN0R2x5cGhCb3VuZHMubG93ZXJMZWZ0LngpKTsKIH0KIAot
aW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK2ludCBGb250Ojpv
ZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IHgs
IGJvb2wgLyppbmNsdWRlUGFydGlhbEdseXBocyovKSBjb25zdAogewogICAgIE93bkFycmF5UHRy
PFVDaGFyPiBjaGFyYWN0ZXJzV2l0aE92ZXJyaWRlOwogICAgIFRleHRSdW4gYWRqdXN0ZWRSdW4g
PSBjb3B5UnVuRm9yRGlyZWN0aW9uYWxPdmVycmlkZUlmTmVjZXNzYXJ5KHJ1biwgY2hhcmFjdGVy
c1dpdGhPdmVycmlkZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAko
cmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWRlbnRpdHlUcmFuc2Zv
cm1PcGVyYXRpb24oKSk7CiAgICAgfQogICAgICAgICAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBPcGVy
YXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBJREVOVElUWTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykg
Y29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0gSURFTlRJVFk7IH0KQEAgLTQ1
LDE3ICs0NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpc1NhbWVUeXBlKG8pOwogICAg
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
Y29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgYXBw
bHkoQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9y
bU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
KiwgZG91YmxlLCBib29sID0gZmFsc2UpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpczsKICAg
ICB9CiAKLXByaXZhdGU6CiAgICAgSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24oKQogICAgIHsK
ICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oCShyZXZpc2lvbiAzOTU5
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKGEsIGIs
IGMsIGQsIGUsIGYpKTsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzSWRl
bnRpdHkoKSBjb25zdCB7IHJldHVybiBtX2EgPT0gMSAmJiBtX2IgPT0gMCAmJiBtX2MgPT0gMCAm
JiBtX2QgPT0gMSAmJiBtX2UgPT0gMCAmJiBtX2YgPT0gMDsgfQogICAgIHZpcnR1YWwgT3BlcmF0
aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gTUFUUklYOyB9CiAgICAg
dmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25z
dCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBNQVRSSVg7IH0KQEAgLTQ5LDcgKzUw
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9hID09IG0tPm1fYSAmJiBtX2IgPT0gbS0+
bV9iICYmIG1fYyA9PSBtLT5tX2MgJiYgbV9kID09IG0tPm1fZCAmJiBtX2UgPT0gbS0+bV9lICYm
IG1fZiA9PSBtLT5tX2Y7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGFwcGx5KEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3Qg
SW50U2l6ZSYpIGNvbnN0CiAgICAgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1f
YSwgbV9iLCBtX2MsIG1fZCwgbV9lLCBtX2YpOwogICAgICAgICB0cmFuc2Zvcm0gPSBtYXRyaXgg
KiB0cmFuc2Zvcm07CkBAIC01OCw3ICs1OSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
biogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsK
ICAgICAKLXByaXZhdGU6CiAgICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhLCBk
b3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpCiAgICAgICAg
IDogbV9hKGEpCiAgICAgICAgICwgbV9iKGIpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2FuZ2xlID09IHItPm1fYW5nbGU7
CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAorICAgIHZpcnR1YWwgYm9v
bCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgLypib3Jk
ZXJCb3hTaXplKi8pIGNvbnN0CiAgICAgewogICAgICAgICB0cmFuc2Zvcm0ucm90YXRlKG1fYW5n
bGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24uaAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24oc3gsIHN5LCB0eXBlKSk7CiAgICAgfQogCitwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV94ID09IDEgJiYgIG1feSA9PSAx
OyB9CiAgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIG8uZ2V0T3BlcmF0aW9uVHlwZSgpID09
IG1fdHlwZTsgfQpAQCAtNDgsNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3gg
PT0gcy0+bV94ICYmIG1feSA9PSBzLT5tX3k7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGFw
cGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hT
aXplKSBjb25zdAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CiAgICAgewogICAgICAgICB0cmFuc2Zvcm0uc2Nh
bGUobV94LCBtX3kpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01Niw3ICs1Nyw2IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKIAotcHJpdmF0ZToKICAgICBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbihkb3VibGUgc3gsIGRvdWJsZSBzeSwgT3BlcmF0aW9uVHlwZSB0eXBlKQogICAgICAg
ICA6IG1feChzeCkKICAgICAgICAgLCBtX3koc3kpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0
aW9uLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2tld1RyYW5zZm9y
bU9wZXJhdGlvbihhbmdsZVgsIGFuZ2xlWSwgdHlwZSkpOwogICAgIH0KIAorcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGVYID09IDAg
JiYgbV9hbmdsZVkgPT0gMDsgfQogICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRp
b25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2Ft
ZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9w
ZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KQEAgLTQ4LDcgKzQ5LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9hbmdsZVggPT0gcy0+bV9hbmdsZVggJiYgbV9hbmdsZVkgPT0gcy0+bV9h
bmdsZVk7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAorICAgIHZpcnR1
YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYp
IGNvbnN0CiAgICAgewogICAgICAgICB0cmFuc2Zvcm0uc2tldyhtX2FuZ2xlWCwgbV9hbmdsZVkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01Niw3ICs1Nyw2IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0
eSA9IGZhbHNlKTsKICAgICAKLXByaXZhdGU6CiAgICAgU2tld1RyYW5zZm9ybU9wZXJhdGlvbihk
b3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZLCBPcGVyYXRpb25UeXBlIHR5cGUpCiAgICAgICAg
IDogbV9hbmdsZVgoYW5nbGVYKQogICAgICAgICAsIG1fYW5nbGVZKGFuZ2xlWSkKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3Bl
cmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9n
cmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgPSAwOwogCiAgICAgdmlydHVhbCBP
cGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTIyLDcgKzEyMiw3IEBAIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoU3RyaW5nKiB0aXRs
ZSkgY28KICAgICByZXR1cm4gbV9wYXN0ZWJvYXJkSGVscGVyLT51cmxGcm9tUGFzdGVib2FyZChb
bV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0sIHRpdGxlKTsKIH0KIAotUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChEb2N1bWVudCog
ZG9jKSBjb25zdAorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFn
bWVudChEb2N1bWVudCopIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmRIZWxwZXIt
PmZyYWdtZW50RnJvbVBhc3RlYm9hcmQoW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3Rl
Ym9hcmRdKSBfZG9jdW1lbnRGcmFnbWVudF07CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5oCShyZXZpc2lv
biAzOTU5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAKIHBy
b3RlY3RlZDoKICAgICAvLyBUaGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Ugc3ViY2xhc3MgbWF5
ICJzaGFkb3ciIHRoaXMgbWV0aG9kIHRvIGNvbXBhcmUgcGxhdGZvcm0gc3BlY2lmaWMgZmllbGRz
Ci0gICAgc3RhdGljIGJvb2wgcGxhdGZvcm1Db21wYXJlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlQmFzZSYgYSwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlJiBiKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1Db21wYXJlKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlQmFzZSYsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFz
ZSYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgbV9pc051bGw7CiAgICAgUHJvdGVjdGlv
blNwYWNlIG1fcHJvdGVjdGlvblNwYWNlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlRXJyb3JCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlRXJyb3JCYXNlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcg
KzcwLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGxhdGZvcm1MYXp5SW5pdCgpIHt9CiAKICAg
ICAvLyBUaGUgUmVzb3VyY2VFcnJvciBzdWJjbGFzcyBtYXkgInNoYWRvdyIgdGhpcyBtZXRob2Qg
dG8gY29tcGFyZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWVsZHMKLSAgICBzdGF0aWMgYm9vbCBwbGF0
Zm9ybUNvbXBhcmUoY29uc3QgUmVzb3VyY2VFcnJvciYgYSwgY29uc3QgUmVzb3VyY2VFcnJvciYg
YikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHN0YXRpYyBib29sIHBsYXRmb3JtQ29tcGFyZShjb25z
dCBSZXNvdXJjZUVycm9yJiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIFN0cmluZyBtX2RvbWFpbjsKICAgICBpbnQgbV9lcnJvckNvZGU7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTEgKzYzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCB+UmVzb3VyY2VIYW5kbGVDbGllbnQoKSB7IH0KIAogICAgICAg
ICAvLyByZXF1ZXN0IG1heSBiZSBtb2RpZmllZAotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNl
bmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRTZW5kRGF0YShSZXNvdXJjZUhhbmRsZSosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQs
IHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pIHsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBs
b25nIGxvbmcgLypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1Rv
QmVTZW50Ki8pIHsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBp
bnQsIGludCBsZW5ndGhSZWNlaXZlZCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCAvKmxlbmd0aFJl
Y2VpdmVkKi8pIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNv
dXJjZUhhbmRsZSopIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHdh
c0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSB7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGxhdGZvcm1MYXp5
SW5pdCgpIHsgfQogCiAgICAgLy8gVGhlIFJlc291cmNlUmVzcG9uc2Ugc3ViY2xhc3MgbWF5ICJz
aGFkb3ciIHRoaXMgbWV0aG9kIHRvIGNvbXBhcmUgcGxhdGZvcm0gc3BlY2lmaWMgZmllbGRzCi0g
ICAgc3RhdGljIGJvb2wgcGxhdGZvcm1Db21wYXJlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGEs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGIpIHsgcmV0dXJuIHRydWU7IH0KKyAgICBzdGF0aWMg
Ym9vbCBwbGF0Zm9ybUNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBLVVJMIG1fdXJsOwogICAgIFN0
cmluZyBtX21pbWVUeXBlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0ROU0NG
TmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZO
ZXQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9E
TlNDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2
b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0
cmVhbU1hYy5tbQkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcg
QEAgc3RhdGljIHZvaWQgZm9ybUZpbmFsaXplKENGUmVhZFN0cmVhbVJlZgogICAgIGRlbGV0ZSBm
b3JtOwogfQogCi1zdGF0aWMgQm9vbGVhbiBmb3JtT3BlbihDRlJlYWRTdHJlYW1SZWYgc3RyZWFt
LCBDRlN0cmVhbUVycm9yKiBlcnJvciwgQm9vbGVhbiogb3BlbkNvbXBsZXRlLCB2b2lkKiBjb250
ZXh0KQorc3RhdGljIEJvb2xlYW4gZm9ybU9wZW4oQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0cmVhbUVy
cm9yKiBlcnJvciwgQm9vbGVhbiogb3BlbkNvbXBsZXRlLCB2b2lkKiBjb250ZXh0KQogewogICAg
IEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0gPSBzdGF0aWNfY2FzdDxGb3JtU3RyZWFtRmllbGRzKj4o
Y29udGV4dCk7CiAKQEAgLTI3OSwxNCArMjc5LDE0IEBAIHN0YXRpYyBCb29sZWFuIGZvcm1DYW5S
ZWFkKENGUmVhZFN0cmVhbVIKICAgICByZXR1cm4gQ0ZSZWFkU3RyZWFtSGFzQnl0ZXNBdmFpbGFi
bGUoZm9ybS0+Y3VycmVudFN0cmVhbSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZvcm1DbG9zZShDRlJl
YWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250ZXh0KQorc3RhdGljIHZvaWQgZm9ybUNsb3Nl
KENGUmVhZFN0cmVhbVJlZiwgdm9pZCogY29udGV4dCkKIHsKICAgICBGb3JtU3RyZWFtRmllbGRz
KiBmb3JtID0gc3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZpZWxkcyo+KGNvbnRleHQpOwogCiAgICAg
Y2xvc2VDdXJyZW50U3RyZWFtKGZvcm0pOwogfQogCi1zdGF0aWMgdm9pZCBmb3JtU2NoZWR1bGUo
Q0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZSdW5Mb29wUmVmIHJ1bkxvb3AsIENGU3RyaW5nUmVm
IHJ1bkxvb3BNb2RlLCB2b2lkKiBjb250ZXh0KQorc3RhdGljIHZvaWQgZm9ybVNjaGVkdWxlKENG
UmVhZFN0cmVhbVJlZiwgQ0ZSdW5Mb29wUmVmIHJ1bkxvb3AsIENGU3RyaW5nUmVmIHJ1bkxvb3BN
b2RlLCB2b2lkKiBjb250ZXh0KQogewogICAgIEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0gPSBzdGF0
aWNfY2FzdDxGb3JtU3RyZWFtRmllbGRzKj4oY29udGV4dCk7CiAKQEAgLTI5NSw3ICsyOTUsNyBA
QCBzdGF0aWMgdm9pZCBmb3JtU2NoZWR1bGUoQ0ZSZWFkU3RyZWFtUmVmCiAgICAgZm9ybS0+c2No
ZWR1bGVkUnVuTG9vcFBhaXJzLmFkZChTY2hlZHVsZVBhaXI6OmNyZWF0ZShydW5Mb29wLCBydW5M
b29wTW9kZSkpOwogfQogCi1zdGF0aWMgdm9pZCBmb3JtVW5zY2hlZHVsZShDRlJlYWRTdHJlYW1S
ZWYgc3RyZWFtLCBDRlJ1bkxvb3BSZWYgcnVuTG9vcCwgQ0ZTdHJpbmdSZWYgcnVuTG9vcE1vZGUs
IHZvaWQqIGNvbnRleHQpCitzdGF0aWMgdm9pZCBmb3JtVW5zY2hlZHVsZShDRlJlYWRTdHJlYW1S
ZWYsIENGUnVuTG9vcFJlZiBydW5Mb29wLCBDRlN0cmluZ1JlZiBydW5Mb29wTW9kZSwgdm9pZCog
Y29udGV4dCkKIHsKICAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3JtID0gc3RhdGljX2Nhc3Q8Rm9y
bVN0cmVhbUZpZWxkcyo+KGNvbnRleHQpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL05ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL05ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL05ldHdvcmtTdGF0ZU5v
dGlmaWVyTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIE5ldHdv
cmtTdGF0ZU5vdGlmaWVyOjp1cGRhdGVTdGF0ZSgpCiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtT
dGF0ZU5vdGlmaWVyOjpkeW5hbWljU3RvcmVDYWxsYmFjayhTQ0R5bmFtaWNTdG9yZVJlZiBzdG9y
ZSwgQ0ZBcnJheVJlZiBjaGFuZ2VkS2V5cywgdm9pZCAqaW5mbykgCit2b2lkIE5ldHdvcmtTdGF0
ZU5vdGlmaWVyOjpkeW5hbWljU3RvcmVDYWxsYmFjayhTQ0R5bmFtaWNTdG9yZVJlZiwgQ0ZBcnJh
eVJlZiwgdm9pZCogaW5mbykgCiB7CiAgICAgTmV0d29ya1N0YXRlTm90aWZpZXIqIG5vdGlmaWVy
ID0gc3RhdGljX2Nhc3Q8TmV0d29ya1N0YXRlTm90aWZpZXIqPihpbmZvKTsKICAgICAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAkocmV2aXNpb24gMzk1OTMp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgVGV4dENvZGVjVVRGMTY6OnJlZ2lzdGVyQ29kZWNz
KFRleHQKICAgICByZWdpc3RyYXIoIlVURi0xNkJFIiwgbmV3U3RyZWFtaW5nVGV4dERlY29kZXJV
VEYxNkJFLCAwKTsKIH0KIAotU3RyaW5nIFRleHRDb2RlY1VURjE2OjpkZWNvZGUoY29uc3QgY2hh
ciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNh
d0Vycm9yKQorU3RyaW5nIFRleHRDb2RlY1VURjE2OjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMs
IHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wmKQogewogICAgIGlmICghbGVuZ3RoKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC04OSwxOCArODksMTkgQEAgU3RyaW5nIFRleHRD
b2RlY1VURjE2OjpkZWNvZGUoY29uc3QgY2hhcgogICAgICAgICBudW1DaGFycyAtPSAxOwogICAg
IH0KIAotICAgIGlmIChtX2xpdHRsZUVuZGlhbikKKyAgICBpZiAobV9saXR0bGVFbmRpYW4pIHsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1DaGFyczsgKytpKSB7CiAgICAgICAg
ICAgICBVQ2hhciBjID0gcFswXSB8IChwWzFdIDw8IDgpOwogICAgICAgICAgICAgcCArPSAyOwog
ICAgICAgICAgICAgKnErKyA9IGM7CiAgICAgICAgIH0KLSAgICBlbHNlCisgICAgfSBlbHNlIHsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1DaGFyczsgKytpKSB7CiAgICAgICAg
ICAgICBVQ2hhciBjID0gKHBbMF0gPDwgOCkgfCBwWzFdOwogICAgICAgICAgICAgcCArPSAyOwog
ICAgICAgICAgICAgKnErKyA9IGM7CiAgICAgICAgIH0KKyAgICB9CiAKICAgICBpZiAobnVtQnl0
ZXMgJiAxKSB7CiAgICAgICAgIEFTU0VSVCghbV9oYXZlQnVmZmVyZWRCeXRlKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw3ICs3OSw3IEBAIEZpeGVkVGFibGVMYXlvdXQ6OkZpeGVkVGFibGVMYXlvdXQoUmVuZGUKIHsK
IH0KIAotaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGludCB0YWJsZVdpZHRo
KQoraW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGludCkKIHsKICAgICBpbnQg
dXNlZFdpZHRoID0gMDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lvbiAz
OTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzOSw3ICsyMzksNyBAQCBib29sIElubGluZUJveDo6Y2FuQWNjb21tb2RhdGVFbGxpcHNp
cyhiCiAgICAgcmV0dXJuICEoYm94UmVjdC5pbnRlcnNlY3RzKGVsbGlwc2lzUmVjdCkpOwogfQog
Ci1pbnQgSW5saW5lQm94OjpwbGFjZUVsbGlwc2lzQm94KGJvb2wgbHRyLCBpbnQgYmxvY2tFZGdl
LCBpbnQgZWxsaXBzaXNXaWR0aCwgYm9vbCYpCitpbnQgSW5saW5lQm94OjpwbGFjZUVsbGlwc2lz
Qm94KGJvb2wsIGludCwgaW50LCBib29sJikKIHsKICAgICAvLyBVc2UgLTEgdG8gbWVhbiAid2Ug
ZGlkbid0IHNldCB0aGUgcG9zaXRpb24uIgogICAgIHJldHVybiAtMTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsOCArMTI0LDggQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiB0b3BQb3NpdGlvbiwgaW50JiBi
b3R0b21Qb3NpdGlvbiwgaW50JiBzZWxlY3Rpb25Ub3AsIGludCYgc2VsZWN0aW9uQm90dG9tKTsK
ICAgICB2b2lkIHNocmlua0JveGVzV2l0aE5vVGV4dENoaWxkcmVuKGludCB0b3BQb3NpdGlvbiwg
aW50IGJvdHRvbVBvc2l0aW9uKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmVydGljYWxP
dmVyZmxvd1Bvc2l0aW9ucyhpbnQgdG9wLCBpbnQgYm90dG9tKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnMoaW50IHRvcCwgaW50IGJvdHRvbSkgeyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFZlcnRpY2FsT3ZlcmZsb3dQb3NpdGlvbnMoaW50IC8qdG9w
Ki8sIGludCAvKmJvdHRvbSovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmVydGljYWxTZWxl
Y3Rpb25Qb3NpdGlvbnMoaW50IC8qdG9wKi8sIGludCAvKmJvdHRvbSovKSB7IH0KICAgICBpbnQg
bWF4SG9yaXpvbnRhbFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9tYXhIb3Jpem9u
dGFsVmlzdWFsT3ZlcmZsb3c7IH0KIAogICAgIHZvaWQgcmVtb3ZlQ2hpbGQoSW5saW5lQm94KiBj
aGlsZCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVSdW5Cb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVSdW5Cb3guaAkocmV2aXNpb24gMzk1OTMpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVSdW5Cb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
OCArNDEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZXh0TGluZUJveChJbmxpbmVSdW5Cb3gq
IG4pIHsgbV9uZXh0TGluZSA9IG47IH0KICAgICB2b2lkIHNldFByZXZpb3VzTGluZUJveChJbmxp
bmVSdW5Cb3gqIHApIHsgbV9wcmV2TGluZSA9IHA7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dEJveERlY29yYXRpb25zKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBib29sIHBhaW50ZWRDaGlsZHJlbiA9IGZhbHNl
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGludCAvKnR4Ki8sIGludCAvKnR5Ki8pIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwYWludFRleHREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCAvKnR4
Ki8sIGludCAvKnR5Ki8sIGJvb2wgLypwYWludGVkQ2hpbGRyZW4qLyA9IGZhbHNlKSB7IH0KICAg
ICAKIHByb3RlY3RlZDoKICAgICBJbmxpbmVSdW5Cb3gqIG1fcHJldkxpbmU7ICAvLyBUaGUgcHJl
dmlvdXMgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAg
Ym9vbCBJbmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiAgICAgcmV0dXJuIG9iamVj
dCgpLT5pc0JSKCkgfHwgKG9iamVjdCgpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBs
ZW4oKSA9PSAxICYmICgqdGV4dE9iamVjdCgpLT50ZXh0KCkpW3N0YXJ0KCldID09ICdcbicpOwog
fQogCi1ib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBp
bnQgdHkpCitib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
KQogewogICAgIGlmIChpc0xpbmVCcmVhaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00
OTMsNyArNDkzLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbgog
ICAgIGVQb3MgPSBtaW4oZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7CiB9CiAKLXZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBp
bnQgdHgsIGludCB0eSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250KiBmKQordm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGlu
dCB0eCwgaW50IHR5LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQqKQogewogICAgIC8v
IFNlZSBpZiB3ZSBoYXZlIGEgc2VsZWN0aW9uIHRvIHBhaW50IGF0IGFsbC4KICAgICBpbnQgc1Bv
cywgZVBvczsKQEAgLTUyMSw3ICs1MjEsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2Vs
ZWN0aW9uKEdyYXBoCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCi12b2lkIElubGluZVRl
eHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCogZiwgaW50
IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0
aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQqLCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3Mp
CiB7CiAgICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAgaW50IHNQb3MgPSBtYXgoc3RhcnRQ
b3MgLSBvZmZzZXQsIDApOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgaW50IFJlbmRlckJSOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlycwog
ICAgIHJldHVybiBSZW5kZXJUZXh0OjpiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgaXNSb290
TGluZUJveCk7CiB9CiAKLWludCBSZW5kZXJCUjo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwg
Ym9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdAoraW50IFJlbmRlckJSOjpsaW5lSGVpZ2h0KGJvb2wg
Zmlyc3RMaW5lLCBib29sIC8qaXNSb290TGluZUJveCovKSBjb25zdAogewogICAgIGlmIChmaXJz
dFRleHRCb3goKSAmJiAhZmlyc3RUZXh0Qm94KCktPmlzVGV4dCgpKQogICAgICAgICByZXR1cm4g
MDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIw
LDcgKzIxMjAsNyBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpmaWxsVmVydGljYWxTZWxlY3RpCiB9
CiAKIEludFJlY3QgUmVuZGVyQmxvY2s6OmZpbGxMZWZ0U2VsZWN0aW9uR2FwKFJlbmRlck9iamVj
dCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCBoZWlnaHQsIFJlbmRlckJsb2NrKiBy
b290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
YmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwgY29uc3QgUGFpbnRJbmZvKiBwYWlu
dEluZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxv
Y2tYLCBpbnQgLypibG9ja1kqLywgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyogcGFp
bnRJbmZvKQogewogICAgIGludCB0b3AgPSB5UG9zICsgdHk7CiAgICAgaW50IGxlZnQgPSBibG9j
a1ggKyBtYXgobGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIHlQb3MpLCBsZWZ0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgeVBvcyArIGhlaWdodCkpOwpAQCAtMjEzNiw3ICsyMTM2LDcg
QEAgSW50UmVjdCBSZW5kZXJCbG9jazo6ZmlsbExlZnRTZWxlY3Rpb25HYQogfQogCiBJbnRSZWN0
IFJlbmRlckJsb2NrOjpmaWxsUmlnaHRTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0KiBzZWxPYmos
IGludCB4UG9zLCBpbnQgeVBvcywgaW50IGhlaWdodCwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tYLCBp
bnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrWCwgaW50
IC8qYmxvY2tZKi8sIGludCB0eCwgaW50IHR5LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykK
IHsKICAgICBpbnQgbGVmdCA9IG1heCh4UG9zICsgdHgsIGJsb2NrWCArIG1heChsZWZ0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgeVBvcyksIGxlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2Nr
LCB5UG9zICsgaGVpZ2h0KSkpOwogICAgIGludCB0b3AgPSB5UG9zICsgdHk7CkBAIC0zMDg5LDcg
KzMwODksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRWaXN1YWxPdmVyZmxvdyhjb25zCiAgICAg
bV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCByLmJvdHRvbSgpKTsKIH0K
IAotYm9vbCBSZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHkpCitib29sIFJlbmRl
ckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQsIGludCwgaW50LCBpbnQpCiB7CiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAz
OTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJvcmRlckZpdEFk
anVzdChpbnQmIHgsIGludCYgdykgY29uc3Q7IC8vIFNocmluayB0aGUgYm94IGluIHdoaWNoIHRo
ZSBib3JkZXIgcGFpbnRzIGlmIGJvcmRlci1maXQgaXMgc2V0LgogCiAgICAgLy8gQ2FsbGVkIHRv
IGxheSBvdXQgdGhlIGxlZ2VuZCBmb3IgYSBmaWVsZHNldC4KLSAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogbGF5b3V0TGVnZW5kKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikgeyByZXR1cm4gMDsgfTsK
KyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogbGF5b3V0TGVnZW5kKGJvb2wgLypyZWxheW91dENo
aWxkcmVuKi8pIHsgcmV0dXJuIDA7IH0KIAogICAgIC8vIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0
aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpcyBpbiBiaWRpLmNwcAogICAgIHN0cnVjdCBGbG9hdFdp
dGhSZWN0IHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMzk1OTMpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzM1
LDcgKzI3MzUsNyBAQCBJbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5lCiAg
ICAgcmV0dXJuIHJlY3Q7CiB9CiAKLWludCBSZW5kZXJCb3g6Omxvd2VzdFBvc2l0aW9uKGJvb2wg
aW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0CitpbnQgUmVu
ZGVyQm94Ojpsb3dlc3RQb3NpdGlvbihib29sIC8qaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IqLywg
Ym9vbCBpbmNsdWRlU2VsZikgY29uc3QKIHsKICAgICBpZiAoIWluY2x1ZGVTZWxmIHx8ICFtX3dp
ZHRoKQogICAgICAgICByZXR1cm4gMDsKQEAgLTI3NDUsNyArMjc0NSw3IEBAIGludCBSZW5kZXJC
b3g6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jbHUKICAgICByZXR1cm4gYm90dG9tOwogfQogCi1p
bnQgUmVuZGVyQm94OjpyaWdodG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVy
aW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdAoraW50IFJlbmRlckJveDo6cmlnaHRtb3N0UG9z
aXRpb24oYm9vbCAvKmluY2x1ZGVPdmVyZmxvd0ludGVyaW9yKi8sIGJvb2wgaW5jbHVkZVNlbGYp
IGNvbnN0CiB7CiAgICAgaWYgKCFpbmNsdWRlU2VsZiB8fCAhbV9oZWlnaHQpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjc1NSw3ICsyNzU1LDcgQEAgaW50IFJlbmRlckJveDo6cmlnaHRtb3N0UG9z
aXRpb24oYm9vbCBpbgogICAgIHJldHVybiByaWdodDsKIH0KIAotaW50IFJlbmRlckJveDo6bGVm
dG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVT
ZWxmKSBjb25zdAoraW50IFJlbmRlckJveDo6bGVmdG1vc3RQb3NpdGlvbihib29sIC8qaW5jbHVk
ZU92ZXJmbG93SW50ZXJpb3IqLywgYm9vbCBpbmNsdWRlU2VsZikgY29uc3QKIHsKICAgICBpZiAo
IWluY2x1ZGVTZWxmIHx8ICFtX2hlaWdodCkKICAgICAgICAgcmV0dXJuIG1fd2lkdGg7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAg
ICAgaW50IGNhbGNDb250ZW50Qm94V2lkdGgoaW50IHdpZHRoKSBjb25zdDsKICAgICBpbnQgY2Fs
Y0NvbnRlbnRCb3hIZWlnaHQoaW50IGhlaWdodCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
Ym9yZGVyRml0QWRqdXN0KGludCYgeCwgaW50JiB3KSBjb25zdCB7fTsgLy8gU2hyaW5rIHRoZSBi
b3ggaW4gd2hpY2ggdGhlIGJvcmRlciBwYWludHMgaWYgYm9yZGVyLWZpdCBpcyBzZXQuCisgICAg
dmlydHVhbCB2b2lkIGJvcmRlckZpdEFkanVzdChpbnQmIC8qeCovLCBpbnQmIC8qdyovKSBjb25z
dCB7IH0gLy8gU2hyaW5rIHRoZSBib3ggaW4gd2hpY2ggdGhlIGJvcmRlciBwYWludHMgaWYgYm9y
ZGVyLWZpdCBpcyBzZXQuCiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBub3cgcHVibGljIHNvIHRo
YXQgY2VudGVyZWQgb2JqZWN0cyBsaWtlIHRhYmxlcyB0aGF0IGFyZQogICAgIC8vIHNoaWZ0ZWQg
cmlnaHQgYnkgbGVmdC1hbGlnbmVkIGZsb2F0cyBjYW4gcmVjb21wdXRlIHRoZWlyIGxlZnQgYW5k
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDM5NTkz
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjc5LDcgKzY3OSw3IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjphZGRMaW5lQm94UmVj
dHMoVmUKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQ29udGFpbmVyOjpjb2xsZWN0QWJzb2x1dGVM
aW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKK3ZvaWQgUmVuZGVyQ29udGFpbmVy
Ojpjb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIC8qdXNlU2VsZWN0aW9uSGVpZ2h0Ki8p
CiB7CiAgICAgaWYgKCFtX2ZpcnN0Q2hpbGQgJiYgKGlzSW5saW5lKCkgfHwgaXNBbm9ueW1vdXNC
bG9jaygpKSkgewogICAgICAgICBhYnNvbHV0ZVF1YWRzKHF1YWRzKTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3cuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNyArMzEwLDcgQEAgdm9pZCBSZW5k
ZXJGbG93OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaAogICAgIH0KIH0KIAotaW50IFJlbmRlckZs
b3c6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QK
K2ludCBSZW5kZXJGbG93OjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIC8qaXNSb290
TGluZUJveCovKSBjb25zdAogewogICAgIGlmIChmaXJzdExpbmUpIHsKICAgICAgICAgUmVuZGVy
U3R5bGUqIHMgPSBzdHlsZShmaXJzdExpbmUpOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgUmVu
ZGVyRmxvdzo6ZGlydHlMaW5lQm94ZXMoYm9vbCBmdWwKICAgICB9CiB9CiAKLUlubGluZUJveCog
UmVuZGVyRmxvdzo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29s
IGlzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQorSW5saW5lQm94KiBSZW5kZXJGbG93Ojpj
cmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VIb2xkZXJCb3gsIGJvb2wgaXNSb290TGluZUJv
eCwgYm9vbCAvKmlzT25seVJ1biovKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
MSw3ICs2NjEsNyBAQCBpbnQgUmVuZGVyRnJhbWVTZXQ6OmhpdFRlc3RTcGxpdChjb25zdCBHCiAg
ICAgcmV0dXJuIG5vU3BsaXQ7CiB9CiAKLWJvb2wgUmVuZGVyRnJhbWVTZXQ6OmlzQ2hpbGRBbGxv
d2VkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wg
UmVuZGVyRnJhbWVTZXQ6OmlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRl
clN0eWxlKikgY29uc3QKIHsKICAgICByZXR1cm4gY2hpbGQtPmlzRnJhbWUoKSB8fCBjaGlsZC0+
aXNGcmFtZVNldCgpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBib29sIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcjo6
c2hvdWxkSW1hCiAKIEhhc2hNYXA8UmVuZGVySW1hZ2UqLCBSZW5kZXJJbWFnZVNjYWxlRGF0YSo+
KiBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI6OmdJbWFnZXMgPSAwOwogCi12b2lkIFJlbmRlcklt
YWdlOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlckltYWdlPiogdGlt
ZXIpCit2b2lkIFJlbmRlckltYWdlOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVy
PFJlbmRlckltYWdlPiopCiB7CiAgICAgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyOjpoaWdoUXVh
bGl0eVJlcGFpbnRUaW1lckZpcmVkKHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZvaWQgaGlnaFF1
YWxpdHlSZXBhaW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJJbWFnZT4qKTsKIAogcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgSW1hZ2UqIGltYWdlKGludCB3ID0gMCwgaW50IGggPSAwKSB7IHJldHVy
biBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKSA6IG51bGxJbWFnZSgpOyB9
CisgICAgdmlydHVhbCBJbWFnZSogaW1hZ2UoaW50IC8qdyovID0gMCwgaW50IC8qaCovID0gMCkg
eyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCkgOiBudWxsSW1h
Z2UoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRJbWFnZSAmJiBtX2NhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCk7IH0KICAgICB2
aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT51c2VzSW1hZ2VDb250YWluZXJTaXplKCkgOiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkgY29uc3QgeyBpZiAobV9jYWNoZWRJbWFnZSkgbV9jYWNoZWRJbWFnZS0+c2V0SW1h
Z2VDb250YWluZXJTaXplKHNpemUpOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQ2Miw3ICsyNDYyLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hv
dWxkQmVPdmVyZmxvd09ubHkoKQogICAgICAgICAgICAhaXNUcmFuc3BhcmVudCgpOwogfQogCi12
b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoUmVuZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChSZW5k
ZXJTdHlsZTo6RGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIGJvb2wgaXNPdmVyZmxv
d09ubHkgPSBzaG91bGRCZU92ZXJmbG93T25seSgpOwogICAgIGlmIChpc092ZXJmbG93T25seSAh
PSBtX2lzT3ZlcmZsb3dPbmx5KSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6
Y2FsY0hlaWdodCgpCiAgICAgfQogfQogCi1pbnQgUmVuZGVyTGlzdEJveDo6YmFzZWxpbmVQb3Np
dGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK2ludCBSZW5kZXJMaXN0Qm94
OjpiYXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhlaWdo
dCgpICsgbWFyZ2luVG9wKCkgKyBtYXJnaW5Cb3R0b20oKSAtIGJhc2VsaW5lQWRqdXN0bWVudDsK
IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzk1OTMpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NTMsNyArNjUzLDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnNjcm9sbChTY3JvbGxEaXJlY3Rpbwog
ICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAKLWJvb2wgUmVuZGVyT2JqZWN0OjpjYW5CZVByb2dy
YW1hdGljYWxseVNjcm9sbGVkKGJvb2wgc2Nyb2xsVG9BbmNob3IpIGNvbnN0Citib29sIFJlbmRl
ck9iamVjdDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZChib29sKSBjb25zdAogewogICAg
IGlmICghbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcwMiw3ICsxNzAyLDcg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50Qm94U2hhZG93KEdyYXBoaQogICAgIH0KIH0KIAot
dm9pZCBSZW5kZXJPYmplY3Q6OmFkZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIHVzZVNlbGVjdGlvbkhl
aWdodCkKK3ZvaWQgUmVuZGVyT2JqZWN0OjphZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBib29sKQogewogfQogCkBAIC0xNzUxLDcgKzE3NTEsNyBA
QCBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JvCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OmNvbGxlY3RBYnNvbHV0ZUxpbmVCb3hRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQordm9pZCBSZW5kZXJPYmplY3Q6
OmNvbGxlY3RBYnNvbHV0ZUxpbmVCb3hRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgYm9vbCkKIHsKIH0KIApAQCAtMTk5OCwxMSArMTk5OCwxMSBAQCBib29sIFJl
bmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlck9iamVjdDo6cmVwYWludER1cmluZ0xheW91dElmTW92ZWQoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50RHVyaW5nTGF5b3V0SWZNb3Zl
ZChjb25zdCBJbnRSZWN0JikKIHsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRPdmVy
aGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpCit2b2lkIFJlbmRlck9iamVj
dDo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKGJvb2wpCiB7CiB9CiAKQEAgLTIwNjYsNyArMjA2
Niw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW4KICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChSZW5kZXJP
YmplY3QqIGNoaWxkKQordm9pZCBSZW5kZXJPYmplY3Q6OmRpcnR5TGluZXNGcm9tQ2hhbmdlZENo
aWxkKFJlbmRlck9iamVjdCopCiB7CiB9CiAKQEAgLTIzNzksNyArMjM3OSw3IEBAIHZvaWQgUmVu
ZGVyT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoUmVuZGUKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
T2JqZWN0OjpzdHlsZURpZENoYW5nZShSZW5kZXJTdHlsZTo6RGlmZiBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpCit2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoUmVu
ZGVyU3R5bGU6OkRpZmYgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIHNldEhhc0Jv
eERlY29yYXRpb25zKG1fc3R5bGUtPmhhc0JvcmRlcigpIHx8IG1fc3R5bGUtPmhhc0JhY2tncm91
bmQoKSB8fCBtX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCkgfHwgbV9zdHlsZS0+Ym94U2hhZG93KCkp
OwogCkBAIC0yNDgxLDcgKzI0ODEsNyBAQCBJbnRTaXplIFJlbmRlck9iamVjdDo6b2Zmc2V0RnJv
bUNvbnRhaW5lCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotSW50UmVjdCBSZW5kZXJPYmplY3Q6
OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGlu
dCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorSW50UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2Fy
ZXRSZWN0KElubGluZUJveCosIGludCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAg
ICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxp
bmUgPSAwOwpAQCAtMjY3Niw3ICsyNjc2LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFyZW5hRGVs
ZXRlKFJlbmRlckFyZQogICAgIGFyZW5hLT5mcmVlKCooc2l6ZV90KiliYXNlLCBiYXNlKTsKIH0K
IAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyhp
bnQgeCwgaW50IHkpCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0Ojpwb3NpdGlvbkZvckNv
b3JkaW5hdGVzKGludCwgaW50KQogewogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVu
dCgpLCBjYXJldE1pbk9mZnNldCgpLCBET1dOU1RSRUFNKTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODMsMTEgKzQ4MywxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwYWludEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwg
aW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYmVnaW4gPSB0cnVlLCBib29s
IGVuZCA9IHRydWUpOwogCiAgICAgLy8gUmVuZGVyQm94IGltcGxlbWVudHMgdGhpcy4KLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0
eSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBpbnQgdHgsIGlu
dCB0eSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZv
JiwgaW50IC8qdHgqLywgaW50IC8qdHkqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWFz
ayhQYWludEluZm8mLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYs
IGNvbnN0IEZpbGxMYXllciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGNsaXB5LCBpbnQgY2xpcGgsIGludCB0eCwgaW50IHR5LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lRmxv
d0JveCogYm94ID0gMCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKSB7
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgLypjbGlwWSov
LCBpbnQgLypjbGlwSCovLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovLCBpbnQgLyp3aWR0aCovLCBp
bnQgLypoZWlnaHQqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bmxpbmVGbG93Qm94KiA9IDAsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zl
cikgeyB9CiAKICAgICAKICAgICAvKgpAQCAtODg1LDggKzg4NSw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGludCBwcmV2aW91c09mZnNldChpbnQgY3VycmVudCkgY29uc3Q7CiAgICAgdmlydHVh
bCBpbnQgbmV4dE9mZnNldChpbnQgY3VycmVudCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCogPSAwKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciBkYXRhLCBjb25zdCBJ
bnRSZWN0KiA9IDApIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZElt
YWdlKiwgY29uc3QgSW50UmVjdCogPSAwKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2Vk
KFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSAwKSB7IH0KICAgICB2aXJ0dWFsIGJv
b2wgd2lsbFJlbmRlckltYWdlKENhY2hlZEltYWdlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Vs
ZWN0aW9uU3RhcnRFbmQoaW50JiBzcG9zLCBpbnQmIGVwb3MpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUGF0aC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMiArMjAwLDEyIEBAIGJvb2wg
UmVuZGVyUGF0aDo6cmVxdWlyZXNMYXllcigpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQg
UmVuZGVyUGF0aDo6bGluZUhlaWdodChib29sIGIsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QK
K2ludCBSZW5kZXJQYXRoOjpsaW5lSGVpZ2h0KGJvb2wsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHJlbGF0aXZlQkJveCh0cnVlKS5oZWlnaHQoKTsKIH0KIAotaW50IFJlbmRlclBhdGg6OmJh
c2VsaW5lUG9zaXRpb24oYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0CitpbnQgUmVu
ZGVyUGF0aDo6YmFzZWxpbmVQb3NpdGlvbihib29sLCBib29sKSBjb25zdAogewogICAgIHJldHVy
biByZWxhdGl2ZUJCb3godHJ1ZSkuaGVpZ2h0KCk7CiB9CkBAIC0yNjksMTIgKzI2OSwxMiBAQCB2
b2lkIFJlbmRlclBhdGg6OmFic29sdXRlUmVjdHMoVmVjdG9yPEluCiAgICAgcmVjdHMuYXBwZW5k
KGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKIH0KIAotdm9pZCBSZW5kZXJQYXRoOjph
YnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKK3Zv
aWQgUmVuZGVyUGF0aDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJv
b2wpCiB7CiAgICAgcXVhZHMuYXBwZW5kKGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsK
IH0KIAotYm9vbCBSZW5kZXJQYXRoOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50LCBpbnQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyUGF0aDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwg
aW50IF95LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIC8v
IFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0
IHRoZW4uCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCkBAIC00
MTcsNyArNDE3LDcgQEAgc3RhdGljIHZvaWQgZHJhd1N0YXJ0QW5kTWlkTWFya2Vycyh2b2lkKgog
ICAgIGRhdGEuZWxlbWVudEluZGV4Kys7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJQYXRoOjpkcmF3
TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBQYXRoJiBwYXRoKSBjb25zdAorRmxvYXRSZWN0IFJlbmRlclBhdGg6OmRy
YXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBQYXRoJiBwYXRoKSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2MgPSBkb2N1
bWVudCgpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lv
biAzOTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ1LDcgKzM0NSw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmFkanVzdE92
ZXJmbG93Rm9yQm8KICAgICB9CiB9CiAKLWludCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dIZWln
aHQoYm9vbCBpbmNsdWRlSW50ZXJpb3IpIGNvbnN0CitpbnQgUmVuZGVyUmVwbGFjZWQ6Om92ZXJm
bG93SGVpZ2h0KGJvb2wpIGNvbnN0CiB7CiAgICAgaWYgKG1faGFzT3ZlcmZsb3cpIHsKICAgICAg
ICAgSW50UmVjdCAqciA9ICZnT3ZlcmZsb3dSZWN0TWFwLT5maW5kKHRoaXMpLT5zZWNvbmQ7CkBA
IC0zNTUsNyArMzU1LDcgQEAgaW50IFJlbmRlclJlcGxhY2VkOjpvdmVyZmxvd0hlaWdodChib29s
IAogICAgIHJldHVybiBoZWlnaHQoKTsKIH0KIAotaW50IFJlbmRlclJlcGxhY2VkOjpvdmVyZmxv
d1dpZHRoKGJvb2wgaW5jbHVkZUludGVyaW9yKSBjb25zdAoraW50IFJlbmRlclJlcGxhY2VkOjpv
dmVyZmxvd1dpZHRoKGJvb2wpIGNvbnN0CiB7CiAgICAgaWYgKG1faGFzT3ZlcmZsb3cpIHsKICAg
ICAgICAgSW50UmVjdCAqciA9ICZnT3ZlcmZsb3dSZWN0TWFwLT5maW5kKHRoaXMpLT5zZWNvbmQ7
CkBAIC0zNjUsNyArMzY1LDcgQEAgaW50IFJlbmRlclJlcGxhY2VkOjpvdmVyZmxvd1dpZHRoKGJv
b2wgaQogICAgIHJldHVybiB3aWR0aCgpOwogfQogCi1pbnQgUmVuZGVyUmVwbGFjZWQ6Om92ZXJm
bG93TGVmdChib29sIGluY2x1ZGVJbnRlcmlvcikgY29uc3QKK2ludCBSZW5kZXJSZXBsYWNlZDo6
b3ZlcmZsb3dMZWZ0KGJvb2wpIGNvbnN0CiB7CiAgICAgaWYgKG1faGFzT3ZlcmZsb3cpCiAgICAg
ICAgIHJldHVybiBnT3ZlcmZsb3dSZWN0TWFwLT5nZXQodGhpcykueCgpOwpAQCAtMzczLDcgKzM3
Myw3IEBAIGludCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dMZWZ0KGJvb2wgaW4KICAgICByZXR1
cm4gMDsKIH0KIAotaW50IFJlbmRlclJlcGxhY2VkOjpvdmVyZmxvd1RvcChib29sIGluY2x1ZGVJ
bnRlcmlvcikgY29uc3QKK2ludCBSZW5kZXJSZXBsYWNlZDo6b3ZlcmZsb3dUb3AoYm9vbCkgY29u
c3QKIHsKICAgICBpZiAobV9oYXNPdmVyZmxvdykKICAgICAgICAgcmV0dXJuIGdPdmVyZmxvd1Jl
Y3RNYXAtPmdldCh0aGlzKS55KCk7CkBAIC0zODEsNyArMzgxLDcgQEAgaW50IFJlbmRlclJlcGxh
Y2VkOjpvdmVyZmxvd1RvcChib29sIGluYwogICAgIHJldHVybiAwOwogfQogCi1JbnRSZWN0IFJl
bmRlclJlcGxhY2VkOjpvdmVyZmxvd1JlY3QoYm9vbCBpbmNsdWRlSW50ZXJpb3IpIGNvbnN0CitJ
bnRSZWN0IFJlbmRlclJlcGxhY2VkOjpvdmVyZmxvd1JlY3QoYm9vbCkgY29uc3QKIHsKICAgICBp
ZiAobV9oYXNPdmVyZmxvdykKICAgICAgICAgcmV0dXJuIGdPdmVyZmxvd1JlY3RNYXAtPmZpbmQo
dGhpcyktPnNlY29uZDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBtaW5pbXVt
UmVwbGFjZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFJlcGxhY2VkKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKSB7IH0K
IAogICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRyaW5zaWNTaXplKCkgY29uc3Q7CiAKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMzk1OTMpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDksMTIgKzIwOSwxMiBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6cmVxdWlyZXNM
YXllcigpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgUmVuZGVyU1ZHQ29udGFpbmVyOjps
aW5lSGVpZ2h0KGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdAoraW50IFJlbmRlclNW
R0NvbnRhaW5lcjo6bGluZUhlaWdodChib29sLCBib29sKSBjb25zdAogewogICAgIHJldHVybiBo
ZWlnaHQoKSArIG1hcmdpblRvcCgpICsgbWFyZ2luQm90dG9tKCk7CiB9CiAKLWludCBSZW5kZXJT
VkdDb250YWluZXI6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3gp
IGNvbnN0CitpbnQgUmVuZGVyU1ZHQ29udGFpbmVyOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wsIGJv
b2wpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhlaWdodCgpICsgbWFyZ2luVG9wKCkgKyBtYXJnaW5C
b3R0b20oKTsKIH0KQEAgLTI5OSw3ICsyOTksNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6
YXBwbHlDb250ZW50VHJhCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0obG9j
YWxUcmFuc2Zvcm0oKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphcHBseUFkZGl0
aW9uYWxUcmFuc2Zvcm1zKFBhaW50SW5mbyYgcGFpbnRJbmZvKQordm9pZCBSZW5kZXJTVkdDb250
YWluZXI6OmFwcGx5QWRkaXRpb25hbFRyYW5zZm9ybXMoUGFpbnRJbmZvJikKIHsKICAgICAvLyBu
by1vcAogfQpAQCAtMzIyLDcgKzMyMiw3IEBAIGJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpzZWxm
V2lsbFBhaW50KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQ29udGFp
bmVyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KQordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQsIGludCkKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSB8fCAhZHJhd3NDb250ZW50cygpKQogICAgICAgICByZXR1cm47CkBAIC0zODMsNyArMzgzLDcg
QEAgSW50UmVjdCBSZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlQ2xpcAogICAgIHJldHVybiBl
bmNsb3NpbmdJbnRSZWN0KHJlcGFpbnRSZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJTVkdDb250YWlu
ZXI6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBp
bnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0
cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50LCBpbnQpCiB7CiAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KG1fYWJzb2x1dGVCb3VuZHMpOwogfQpAQCAt
MzkzLDcgKzM5Myw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphYnNvbHV0ZVJlY3RzKFYK
ICAgICByZWN0cy5hcHBlbmQoYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpOwogfQogCi12
b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYg
cXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWJzb2x1dGVR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wpCiB7CiAgICAgcXVhZHMuYXBwZW5k
KGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMzk1OTMpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwxMiArNDQsMTIgQEAgYm9vbCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6
OnJlcXVpcmVzTAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50IFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lcjo6bGluZUhlaWdodChib29sIGIsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK2lu
dCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmxpbmVIZWlnaHQoYm9vbCwgYm9vbCkgY29uc3QK
IHsKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6YmFz
ZWxpbmVQb3NpdGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK2ludCBSZW5k
ZXJTVkdIaWRkZW5Db250YWluZXI6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCkgY29uc3QK
IHsKICAgICByZXR1cm4gMDsKIH0KQEAgLTgxLDEyICs4MSwxMiBAQCBJbnRSZWN0IFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lcjo6YWJzb2x1CiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KIAotdm9p
ZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgaW50LCBpbnQsIGJvb2wpCit2b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQsIGludCwgYm9vbCkKIHsKICAgICAv
LyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFrZSB1cCBzcGFjZSBvciBwYWludAogfQogCi12b2lk
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFk
PiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit2b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wpCiB7CiAgICAgLy8gVGhpcyBz
dWJ0cmVlIGRvZXMgbm90IHRha2UgdXAgc3BhY2Ugb3IgcGFpbnQKIH0KQEAgLTEwMSwxMiArMTAx
LDEyIEBAIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIKICAgICByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKCk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQs
IGludCwgSGl0VGVzdEFjdGlvbikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUZsb2F0UmVj
dCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OnJlbGF0aXZlQkJveChib29sIGluY2x1ZGVTdHJv
a2UpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpyZWxhdGl2ZUJC
b3goYm9vbCkgY29uc3QKIHsKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5
Myw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQogCi1ib29sIFJlbmRlclNWR0ltYWdlOjpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBpbnQgX3gsIGludCBfeSwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKK2Jvb2wgUmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50LCBpbnQsIEhpdFRl
c3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZv
cmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQtdGVzdCB0aGVuLgogICAgIGlmIChoaXRUZXN0
QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQpAQCAtMjU4LDcgKzI1OCw3IEBAIEludFJlY3Qg
UmVuZGVyU1ZHSW1hZ2U6OmFic29sdXRlQ2xpcHBlZE8KICAgICByZXR1cm4gbV9hYnNvbHV0ZUJv
dW5kczsKIH0KIAotdm9pZCBSZW5kZXJTVkdJbWFnZTo6YWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJT
VkdJbWFnZTo6YWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQsIGludCwgaW50KQogewogICAgIC8vIHRoaXMgaXMgY2FsbGVkIGZyb20gcGFpbnQoKSBhZnRl
ciB0aGUgbG9jYWxUcmFuc2Zvcm0gaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkCiAgICAgSW50UmVj
dCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVsYXRpdmVCQm94KCkpOwpAQCAtMjcw
LDcgKzI3MCw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFic29sdXRlUmVjdHMoVmVjdG8KICAg
ICByZWN0cy5hcHBlbmQoYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpOwogfQogCi12b2lk
IFJlbmRlclNWR0ltYWdlOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywg
Ym9vbCB0b3BMZXZlbCkKK3ZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKQogewogICAgIHF1YWRzLmFwcGVuZChGbG9hdFJlY3Qo
YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3
ICs1OCw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6YWJzb2x1dGVSZWN0cygKICAgICBy
ZWN0cy5hcHBlbmQoY29tcHV0ZUFic29sdXRlUmVjdEZvclJhbmdlKDAsIHRleHRMZW5ndGgoKSkp
OwogfQogCi12b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZs
b2F0UXVhZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQordm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0
OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCkKIHsKICAgICBx
dWFkcy5hcHBlbmQoRmxvYXRSZWN0KGNvbXB1dGVBYnNvbHV0ZVJlY3RGb3JSYW5nZSgwLCB0ZXh0
TGVuZ3RoKCkpKSk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkocmV2
aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsMTIgKzUzLDEyIEBAIFJlbmRlclNWR1Jvb3Q6On5SZW5kZXJTVkdS
b290KCkKIHsKIH0KIAotaW50IFJlbmRlclNWR1Jvb3Q6OmxpbmVIZWlnaHQoYm9vbCBiLCBib29s
IGlzUm9vdExpbmVCb3gpIGNvbnN0CitpbnQgUmVuZGVyU1ZHUm9vdDo6bGluZUhlaWdodChib29s
LCBib29sKSBjb25zdAogewogICAgIHJldHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpICsgbWFy
Z2luQm90dG9tKCk7CiB9CiAKLWludCBSZW5kZXJTVkdSb290OjpiYXNlbGluZVBvc2l0aW9uKGJv
b2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdAoraW50IFJlbmRlclNWR1Jvb3Q6OmJhc2Vs
aW5lUG9zaXRpb24oYm9vbCwgYm9vbCkgY29uc3QKIHsKICAgICByZXR1cm4gaGVpZ2h0KCkgKyBt
YXJnaW5Ub3AoKSArIG1hcmdpbkJvdHRvbSgpOwogfQpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQg
UmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3IKICAgICAgICAgY3VycmVudC0+YWJz
b2x1dGVSZWN0cyhyZWN0cywgMCwgMCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUm9vdDo6YWJzb2x1
dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit2b2lkIFJl
bmRlclNWR1Jvb3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29s
KQogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJy
ZW50ICE9IDA7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQogICAgICAgICBjdXJy
ZW50LT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1RTcGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
U3Bhbi5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
VFNwYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgUmVuZGVyU1ZH
VFNwYW46OmFic29sdXRlUmVjdHMoVmVjdG8KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVFNw
YW46OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHRvcExldmVs
KQordm9pZCBSZW5kZXJTVkdUU3Bhbjo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYg
cXVhZHMsIGJvb2wpCiB7CiAgICAgSW5saW5lUnVuQm94KiBmaXJzdEJveCA9IGZpcnN0TGluZUJv
eCgpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICBz
ZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKLUlubGluZUJveCogUmVuZGVyU1ZHVGV4dDo6Y3Jl
YXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9vdExpbmVCb3gs
IGJvb2wgaXNPbmx5UnVuKQorSW5saW5lQm94KiBSZW5kZXJTVkdUZXh0OjpjcmVhdGVJbmxpbmVC
b3goYm9vbCwgYm9vbCwgYm9vbCkKIHsKICAgICBBU1NFUlQoIWlzSW5saW5lRmxvdygpKTsKICAg
ICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdSb290SW5s
aW5lQm94KHRoaXMpOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJz
b2x1dGVSZWN0cyhWZWN0b3IKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1
dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit2b2lkIFJl
bmRlclNWR1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29s
KQogewogICAgIFJlbmRlclNWR1Jvb3QqIHJvb3QgPSBmaW5kU1ZHUm9vdE9iamVjdChwYXJlbnQo
KSk7CiAgICAgaWYgKCFyb290KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4
dFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQ
YXRoLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBSZW5kZXJT
VkdUZXh0UGF0aDo6YWJzb2x1dGVSZWN0cyhWZQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJTVkdU
ZXh0UGF0aDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdG9w
TGV2ZWwpCit2b2lkIFJlbmRlclNWR1RleHRQYXRoOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9h
dFF1YWQ+JiBxdWFkcywgYm9vbCkKIHsKICAgICBJbmxpbmVSdW5Cb3gqIGZpcnN0Qm94ID0gZmly
c3RMaW5lQm94KCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgUmVuZGVyU2xpZGVyOjp+UmVuZGVyU2xpZGVyKCkK
ICAgICAgICAgbV90aHVtYi0+ZGV0YWNoKCk7CiB9CiAKLWludCBSZW5kZXJTbGlkZXI6OmJhc2Vs
aW5lUG9zaXRpb24oYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0CitpbnQgUmVuZGVy
U2xpZGVyOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGhlaWdodCgpICsgbWFyZ2luVG9wKCk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDb2wuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBJbnRSZWN0IFJlbmRl
clRhYmxlQ29sOjphYnNvbHV0ZUNsaXBwZWRPCiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KIAot
dm9pZCBSZW5kZXJUYWJsZUNvbDo6aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciBpbWFnZSwg
Y29uc3QgSW50UmVjdCopCit2b2lkIFJlbmRlclRhYmxlQ29sOjppbWFnZUNoYW5nZWQoV3JhcHBl
ZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KikKIHsKICAgICAvLyBGSVhNRTogUmVwYWludCBvbmx5
IHRoZSByZWN0IHRoZSBpbWFnZSBwYWludHMgaW4uCiAgICAgcmVwYWludCgpOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsy
MTAsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjpwYWludChQYWludEluZm8mIHBhCiAgICAgfQog
fQogCi12b2lkIFJlbmRlclRhYmxlUm93OjppbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyIGlt
YWdlLCBjb25zdCBJbnRSZWN0KikKK3ZvaWQgUmVuZGVyVGFibGVSb3c6OmltYWdlQ2hhbmdlZChX
cmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqKQogewogICAgIC8vIEZJWE1FOiBFeGFtaW5l
IGNlbGxzIGFuZCByZXBhaW50IG9ubHkgdGhlIHJlY3QgdGhlIGltYWdlIHBhaW50cyBpbi4KICAg
ICByZXBhaW50KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHJldmlzaW9u
IDM5NTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTcgKzM1LDE4IEBAIGNsYXNzIFJlbmRlclRhYmxlUm93IDogcHVibGljIFJl
bmRlckNvbnQKIHB1YmxpYzoKICAgICBSZW5kZXJUYWJsZVJvdyhOb2RlKik7CiAKKyAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJUYWJsZVNlY3Rpb24qPihwYXJlbnQoKSk7IH0KKyAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVudCgpLT5wYXJlbnQo
KSk7IH0KKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlclRhYmxlUm93IChhbm9ueW1vdXMp
IiA6ICJSZW5kZXJUYWJsZVJvdyI7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlUm93KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKIAot
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KHBhcmVudCgpKTsgfQotICAgIFJlbmRlclRhYmxlKiB0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlKj4ocGFyZW50KCkt
PnBhcmVudCgpKTsgfQotCiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCog
Y2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKLSAgICB2aXJ0dWFsIGludCBs
aW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoYm9vbCwgYm9vbCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihJbmxpbmVCb3gq
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCBJbnRSZWN0IGFi
c29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwpAQCAtNTcsNyArNTgsNiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2
aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCog
PSAwKTsKIAotcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoUmVu
ZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CiAKIH07CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDM5NTkz
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTczLDcgKzk3Myw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQ
YWludEluZm8KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjppbWFnZUNoYW5n
ZWQoV3JhcHBlZEltYWdlUHRyIGltYWdlLCBjb25zdCBJbnRSZWN0KikKK3ZvaWQgUmVuZGVyVGFi
bGVTZWN0aW9uOjppbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KikK
IHsKICAgICAvLyBGSVhNRTogRXhhbWluZSBjZWxscyBhbmQgcmVwYWludCBvbmx5IHRoZSByZWN0
IHRoZSBpbWFnZSBwYWludHMgaW4uCiAgICAgcmVwYWludCgpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKIAotICAgIHZpcnR1YWwgaW50IGxp
bmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uKElubGluZUJveCopIHsg
fQotCiAgICAgdmlydHVhbCBpbnQgZ2V0QmFzZWxpbmVPZkZpcnN0TGluZUJveCgpIGNvbnN0Owog
CiAgICAgdm9pZCBhZGRDZWxsKFJlbmRlclRhYmxlQ2VsbCosIFJlbmRlck9iamVjdCogcm93KTsK
QEAgLTEyNiw2ICsxMjMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50
IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgaW50
IGxpbmVIZWlnaHQoYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
dm9pZCBwb3NpdGlvbihJbmxpbmVCb3gqKSB7IH0KKwogICAgIGJvb2wgZW5zdXJlUm93cyhpbnQp
OwogICAgIHZvaWQgY2xlYXJHcmlkKCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjphZGRMaW5l
Qm94UmVjdHMoVmVjdG9yPAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKK3ZvaWQgUmVuZGVy
VGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wpCiB7CiAg
ICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBi
b3gtPm5leHRUZXh0Qm94KCkpCiAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UmVjdChib3gtPnhQb3MoKSwgYm94LT55UG9zKCksIGJveC0+d2lkdGgoKSwgYm94
LT5oZWlnaHQoKSkpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDM5NTkz
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NiwxMSArNTYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbmxpbmVUZXh0Qm94KiBjcmVhdGVJ
bmxpbmVUZXh0Qm94KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpcnR5TGluZUJveGVzKGJvb2wgZnVs
bExheW91dCwgYm9vbCBpc1Jvb3RJbmxpbmVCb3ggPSBmYWxzZSk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQotCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZl
bCA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJl
Y3Q+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5U
X01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CiAKQEAgLTE0NCw2ICsxMzks
MTAgQEAgcHJpdmF0ZToKICAgICAvLyBjYWxsZXJzIHdpdGggYSBSZW5kZXJPYmplY3QqIGNhbiBj
b250aW51ZSB0byB1c2UgbGVuZ3RoKCkuCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiB0ZXh0TGVuZ3RoKCk7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQsIGludCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGlu
dCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIGZhbHNlOyB9CisKICAgICB2b2lkIGRlbGV0ZVRleHRCb3hlcygpOwogICAgIGJvb2wg
Y29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0
OwogICAgIGludCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50IHN0YXJ0LCBpbnQgbGVu
LCBpbnQgeFBvcykgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjU1LDcgKzY1NSw3IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVt
SXMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjppdGVtU3R5bGUodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorUG9wdXBN
ZW51U3R5bGUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtU3R5bGUodW5zaWduZWQp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVTdHlsZSgpOwogfQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Miw3ICs1OTIsOCBAQCBib29sIFJlbmRl
clRoZW1lOjppc0RlZmF1bHQoY29uc3QgUmVuZGVyCiB9CiAKICNpZiAhVVNFKE5FV19USEVNRSkK
LXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKKwordm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBBIHN1bW1hcnkgb2YgdGhl
IHJ1bGVzIGZvciBjaGVja2JveCBkZXNpZ25lZCB0byBtYXRjaCBXaW5JRToKICAgICAvLyB3aWR0
aC9oZWlnaHQgLSBob25vcmVkIChXaW5JRSBhY3R1YWxseSBzY2FsZXMgaXRzIGNvbnRyb2wgZm9y
IHNtYWxsIHdpZHRocywgYnV0IGxldHMgaXQgb3ZlcmZsb3cgZm9yIHNtYWxsIGhlaWdodHMuKQpA
QCAtNjA5LDcgKzYxMCw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUo
Q1MKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RSYWRpb1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAogewogICAgIC8vIEEgc3VtbWFyeSBvZiB0aGUgcnVsZXMgZm9yIGNoZWNrYm94IGRlc2lnbmVk
IHRvIG1hdGNoIFdpbklFOgogICAgIC8vIHdpZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFj
dHVhbGx5IHNjYWxlcyBpdHMgY29udHJvbCBmb3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBv
dmVyZmxvdyBmb3Igc21hbGwgaGVpZ2h0cy4pCkBAIC02MjYsMzkgKzYyNyw0MCBAQCB2b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKENTU1N0CiAgICAgc3R5bGUtPnNldEJveFNoYWRv
dygwKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIE1vc3QgcGxhdGZv
cm1zIHdpbGwgY29tcGxldGVseSBob25vciBhbGwgQ1NTLCBhbmQgc28gd2UgaGF2ZSBubyBuZWVk
IHRvIGFkanVzdCB0aGUgc3R5bGUKICAgICAvLyBhdCBhbGwgYnkgZGVmYXVsdC4gIFdlIHdpbGwg
c3RpbGwgYWxsb3cgdGhlIHRoZW1lIGEgY3JhY2sgYXQgc2V0dGluZyB1cCBhIGRlc2lyZWQgdmVy
dGljYWwgc2l6ZS4KICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKIH0KKwogI2VuZGlmCiAKLXZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4
dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEFyZWFTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uSW5uZXJTdHls
ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0
b25Jbm5lclN0eWxlKFJlbmRlclN0eWxlKikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIApA
QCAtNjY2LDIzICs2NjgsMjMgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJT
aXplKAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAogewogfQogCi12b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAogewogfQogCi12b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAog
ewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0CiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lv
biAzOTU5MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZy
b21Gb250KFJlbgogICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgp
LCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xT
aXplKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29u
dHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250
RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5T
Q29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1
ZSk7CkBAIC02NDYsNyArNjQ2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZp
ZWxkU3R5bAogewogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNh
dG9yKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50Q2Fwc0xv
Y2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRl
eHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03NDcsNyAr
NzQ3LDcgQEAgY29uc3QgaW50IHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQgPSA4OwogY29uc3QgaW50
IHN0eWxlZFBvcHVwUGFkZGluZ1RvcCA9IDE7CiBjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5n
Qm90dG9tID0gMjsKIAotc3RhdGljIHZvaWQgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBp
bmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCitzdGF0aWMgdm9p
ZCBUb3BHcmFkaWVudEludGVycG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENH
RmxvYXQqIG91dERhdGEpCiB7CiAgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDEuMGYsIDEu
MGYsIDEuMGYsIDAuNGYgfTsKICAgICBzdGF0aWMgZmxvYXQgbGlnaHRbNF0gPSB7IDEuMGYsIDEu
MGYsIDEuMGYsIDAuMTVmIH07CkBAIC03NTcsNyArNzU3LDcgQEAgc3RhdGljIHZvaWQgVG9wR3Jh
ZGllbnRJbnRlcnBvbGF0ZSh2b2lkKgogICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAq
IGRhcmtbaV0gKyBhICogbGlnaHRbaV07CiB9CiAKLXN0YXRpYyB2b2lkIEJvdHRvbUdyYWRpZW50
SW50ZXJwb2xhdGUodm9pZCogaW5mbywgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBv
dXREYXRhKQorc3RhdGljIHZvaWQgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29u
c3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQogewogICAgIHN0YXRpYyBmbG9h
dCBkYXJrWzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAwLjBmIH07CiAgICAgc3RhdGljIGZsb2F0
IGxpZ2h0WzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAwLjNmIH07CkBAIC03NjcsNyArNzY3LDcg
QEAgc3RhdGljIHZvaWQgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSh2bwogICAgICAgICBvdXRE
YXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICogbGlnaHRbaV07CiB9CiAKLXN0YXRp
YyB2b2lkIE1haW5HcmFkaWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENHRmxvYXQq
IGluRGF0YSwgQ0dGbG9hdCogb3V0RGF0YSkKK3N0YXRpYyB2b2lkIE1haW5HcmFkaWVudEludGVy
cG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCiB7
CiAgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuMTVmIH07
CiAgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAwLjBmIH07
CkBAIC03NzcsNyArNzc3LDcgQEAgc3RhdGljIHZvaWQgTWFpbkdyYWRpZW50SW50ZXJwb2xhdGUo
dm9pZAogICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICogbGln
aHRbaV07CiB9CiAKLXN0YXRpYyB2b2lkIFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBp
bmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCitzdGF0aWMgdm9p
ZCBUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUodm9pZCosIGNvbnN0IENHRmxvYXQqIGluRGF0YSwg
Q0dGbG9hdCogb3V0RGF0YSkKIHsKICAgICBzdGF0aWMgZmxvYXQgZGFya1s0XSA9IHsgMC4wZiwg
MC4wZiwgMC4wZiwgMC42NzhmIH07CiAgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAwLjBm
LCAwLjBmLCAwLjBmLCAwLjEzZiB9OwpAQCAtOTg2LDcgKzk4Niw3IEBAIGludCBSZW5kZXJUaGVt
ZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmcKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBmbG9hdCBmb250U2Nh
bGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKIApAQCAtMTAyNyw3ICsxMDI3
LDcgQEAgaW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKAogY29uc3QgaW50
IHRyYWNrV2lkdGggPSA1OwogY29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKIAotdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KDApOwogfQpAQCAtMTA3MSw3ICsxMDcxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
bGlkZXJUcmFjayhSZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQpA
QCAtMTE5Myw3ICsxMTkzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVs
ZChSZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2Vh
cmNoQ2VsbFN0YXRlKFJlbmRlck9iamVjdCogbywgY29uc3QgSW50UmVjdCYgcikKK3ZvaWQgUmVu
ZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IElu
dFJlY3QmKQogewogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2go
KTsKIApAQCAtMTIyMCw3ICsxMjIwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNo
RmllbGRTaXplKAogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRTaXplcygp
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
IHsKICAgICAvLyBPdmVycmlkZSBib3JkZXIuCiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CkBA
IC0xMjg5LDcgKzEyODksNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6Y2FuY2Vs
QnV0CiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9
IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBjYW5jZWxCdXR0b25TaXplcygpKTsKICAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKQEAgLTEzMDQsNyArMTMw
NCw3IEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnUKIH0KIAogY29u
c3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rvciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0g
c2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4
ZWQpKTsKQEAgLTEzMTIsMTIgKzEzMTIsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2VhcmNoRmllbGREZQogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBJbnRT
aXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkp
OwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwpAQCAt
MTMyNSw3ICsxMzI1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRS
ZQogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiti
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmIHIpCiB7CiAgICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpOwogICAgIHNldFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CkBAIC0x
MzQ0LDcgKzEzNDQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVz
CiB9CiAKIGNvbnN0IGludCByZXN1bHRzQXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
SW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXpl
cygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJlc3VsdHNB
cnJvd1dpZHRoLCBGaXhlZCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlz
aW9uIDM5NTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCiAgICAg
c2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCi1GbG9hdFBvaW50IFJlbmRlclZpZXc6OmxvY2Fs
VG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJh
bnNmb3JtcykgY29uc3QKK0Zsb2F0UG9pbnQgUmVuZGVyVmlldzo6bG9jYWxUb0Fic29sdXRlKEZs
b2F0UG9pbnQgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCkgY29uc3QKIHsKICAgICBpZiAo
Zml4ZWQgJiYgbV9mcmFtZVZpZXcpCiAgICAgICAgIGxvY2FsUG9pbnQgKz0gbV9mcmFtZVZpZXct
PnNjcm9sbE9mZnNldCgpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIEZsb2F0UG9pbnQgUmVuZGVyVmll
dzo6bG9jYWxUb0Fic29sdXRlKEYKICAgICByZXR1cm4gbG9jYWxQb2ludDsKIH0KIAotRmxvYXRQ
b2ludCBSZW5kZXJWaWV3OjphYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludCBjb250YWluZXJQb2lu
dCwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zKSBjb25zdAorRmxvYXRQb2ludCBSZW5k
ZXJWaWV3OjphYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludCBjb250YWluZXJQb2ludCwgYm9vbCBm
aXhlZCwgYm9vbCkgY29uc3QKIHsKICAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpCiAgICAg
ICAgIGNvbnRhaW5lclBvaW50IC09IG1fZnJhbWVWaWV3LT5zY3JvbGxPZmZzZXQoKTsKQEAgLTE3
NCw3ICsxNzQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmVuZGVyZXJPYnNjdXJlc0JhY2tnCiAg
ICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFICYmIG9iamVjdC0+c3R5bGUoKS0+b3BhY2l0eSgpID09IDEgJiYgIW9iamVjdC0+c3R5bGUo
KS0+aGFzVHJhbnNmb3JtKCk7CiB9CiAgICAgCi12b2lkIFJlbmRlclZpZXc6OnBhaW50Qm94RGVj
b3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5k
ZXJWaWV3OjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGlu
dCkKIHsKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgYXJlIGVuY2xvc2VkIGJ5IGEgbGF5ZXIg
dGhhdCByZXF1aXJlcyBjb21wbGV4IHBhaW50aW5nIHJ1bGVzLiAgSWYgc28sIHdlIGNhbm5vdCBi
bGl0CiAgICAgLy8gd2hlbiBzY3JvbGxpbmcsIGFuZCB3ZSBuZWVkIHRvIHVzZSBzbG93IHJlcGFp
bnRzLiAgRXhhbXBsZXMgb2YgbGF5ZXJzIHRoYXQgcmVxdWlyZSB0aGlzIGFyZSB0cmFuc3BhcmVu
dCBsYXllcnMsCkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjphYnNvbHV0ZVJl
Y3RzKFZlY3RvcjxJbgogICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgbV9sYXllci0+
d2lkdGgoKSwgbV9sYXllci0+aGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJWaWV3OjphYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKK3ZvaWQg
UmVuZGVyVmlldzo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wp
CiB7CiAgICAgcXVhZHMuYXBwZW5kKEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyLT53aWR0aCgpLCBt
X2xheWVyLT5oZWlnaHQoKSkpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5l
Rmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxv
d0JveC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5l
Rmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICszMiwxOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKIAotdm9pZCBTVkdJbmxpbmVG
bG93Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkKK3ZvaWQgU1ZHSW5saW5lRmxvd0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBpbnQsIGludCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotaW50
IFNWR0lubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVm
dFBvc2l0aW9uLCBpbnQmIHJpZ2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpCitp
bnQgU1ZHSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxseShpbnQsIGludCYsIGlu
dCYsIGJvb2wmKQogewogICAgIC8vIG5vLW9wCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgU1ZH
SW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm94ZXMoaW50JiBoZWlnaHRPZkJsb2NrKQor
dm9pZCBTVkdJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3hlcyhpbnQmKQogewogICAg
IC8vIG5vLW9wCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAko
cmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODAsMTAgKzgwLDggQEAgZmxvYXQgU1ZHSW5saW5lVGV4dEJv
eDo6Y2FsY3VsYXRlR2x5cGhXaQogICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLmZsb2F0V2lkdGgo
c3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dE9iamVjdCgpLT50ZXh0KCktPmNoYXJhY3Rl
cnMoKSArIG9mZnNldCwgMSwgc3R5bGUsIHRoaXMsIDApLCBleHRyYUNoYXJzQXZhaWxhYmxlLCBj
aGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwogfQogCi1mbG9hdCBTVkdJbmxpbmVUZXh0Qm94Ojpj
YWxjdWxhdGVHbHlwaEhlaWdodChSZW5kZXJTdHlsZSogc3R5bGUsIGludCBvZmZzZXQsIGludCBl
eHRyYUNoYXJzQXZhaWxhYmxlKSBjb25zdAorZmxvYXQgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3Vs
YXRlR2x5cGhIZWlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQsIGludCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQoc3R5bGUpOwotCiAgICAgLy8gVGhpcyBpcyBqdXN0IGEgZ3Vlc3MsIGFuZCB0aGUg
b25seSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gY2VudHJhbGl6ZSB0aGlzIGhhY2su
CiAgICAgLy8gSW4gcmVhbC1saWZlIHRvcC10b3AtYm90dG9tIHNjcmlwdHMgdGhpcyB3b24ndCBi
ZSBlbm91Z2gsIEkgZmVhci4KICAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5hc2NlbnQoKSArIHN0
eWxlLT5mb250KCkuZGVzY2VudCgpOwpAQCAtMjc5LDIxICsyNzcsMjEgQEAgYm9vbCBTVkdJbmxp
bmVUZXh0Qm94OjpzdmdDaGFyYWN0ZXJIaXRzUAogICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQg
U1ZHSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgU1ZHSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRp
b24oaW50LCBib29sKSBjb25zdAogewogICAgIC8vIFNWRyBkb2Vzbid0IHVzZSB0aGUgb2Zmc2V0
IDwtPiBwb3NpdGlvbiBzZWxlY3Rpb24gc3lzdGVtLiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9y
T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CitpbnQgU1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25G
b3JPZmZzZXQoaW50KSBjb25zdAogewogICAgIC8vIFNWRyBkb2Vzbid0IHVzZSB0aGUgb2Zmc2V0
IDwtPiBwb3NpdGlvbiBzZWxlY3Rpb24gc3lzdGVtLiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBTVkdJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50
IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBBU1NFUlQoIWlzTGluZUJyZWFrKCkp
OwogCkBAIC00MzYsNyArNDM0LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludENoYXJh
Y3RlcnMoUgogICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKGN0bS5pbnZlcnNl
KCkpOwogfQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKGludCBib3hT
dGFydE9mZnNldCwgY29uc3QgU1ZHQ2hhciYgc3ZnQ2hhciwgY29uc3QgVUNoYXIqIGNoYXJzLCBp
bnQgbGVuZ3RoLCBHcmFwaGljc0NvbnRleHQqIHAsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
Rm9udCogZikKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oaW50IGJveFN0
YXJ0T2Zmc2V0LCBjb25zdCBTVkdDaGFyJiBzdmdDaGFyLCBjb25zdCBVQ2hhciosIGludCBsZW5n
dGgsIEdyYXBoaWNzQ29udGV4dCogcCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250KiBm
KQogewogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
Tm9uZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmls
bExheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVy
LmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw4ICsxMjAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IEVGaWxsUmVwZWF0IGluaXRpYWxGaWxsUmVwZWF0KEVGaWxsTGF5ZXJUeXBlKSB7IHJldHVybiBS
ZXBlYXRGaWxsOyB9CiAgICAgc3RhdGljIENvbXBvc2l0ZU9wZXJhdG9yIGluaXRpYWxGaWxsQ29t
cG9zaXRlKEVGaWxsTGF5ZXJUeXBlKSB7IHJldHVybiBDb21wb3NpdGVTb3VyY2VPdmVyOyB9CiAg
ICAgc3RhdGljIExlbmd0aFNpemUgaW5pdGlhbEZpbGxTaXplKEVGaWxsTGF5ZXJUeXBlKSB7IHJl
dHVybiBMZW5ndGhTaXplKCk7IH0KLSAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxGaWxsWFBvc2l0
aW9uKEVGaWxsTGF5ZXJUeXBlIHR5cGUpIHsgcmV0dXJuIExlbmd0aCgwLjAsIFBlcmNlbnQpOyB9
Ci0gICAgc3RhdGljIExlbmd0aCBpbml0aWFsRmlsbFlQb3NpdGlvbihFRmlsbExheWVyVHlwZSB0
eXBlKSB7IHJldHVybiBMZW5ndGgoMC4wLCBQZXJjZW50KTsgfQorICAgIHN0YXRpYyBMZW5ndGgg
aW5pdGlhbEZpbGxYUG9zaXRpb24oRUZpbGxMYXllclR5cGUpIHsgcmV0dXJuIExlbmd0aCgwLjAs
IFBlcmNlbnQpOyB9CisgICAgc3RhdGljIExlbmd0aCBpbml0aWFsRmlsbFlQb3NpdGlvbihFRmls
bExheWVyVHlwZSkgeyByZXR1cm4gTGVuZ3RoKDAuMCwgUGVyY2VudCk7IH0KICAgICBzdGF0aWMg
U3R5bGVJbWFnZSogaW5pdGlhbEZpbGxJbWFnZShFRmlsbExheWVyVHlwZSkgeyByZXR1cm4gMDsg
fQogCiBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNo
ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVDYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9p
ZCBTdHlsZUNhY2hlZEltYWdlOjpyZW1vdmVDbGllbnQoUmVuZAogICAgIHJldHVybiBtX2ltYWdl
LT5yZW1vdmVDbGllbnQocmVuZGVyZXIpOwogfQogCi1JbWFnZSogU3R5bGVDYWNoZWRJbWFnZTo6
aW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CitJbWFn
ZSogU3R5bGVDYWNoZWRJbWFnZTo6aW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1hZ2UtPmltYWdlKCk7CiB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1
ZSgpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5kZXIoZmxvYXQgbXVsdGlwbGllcikg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5kZXIoZmxvYXQg
LyptdWx0aXBsaWVyKi8pIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNMb2FkZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGVycm9y
T2NjdXJyZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgSW50U2l6ZSBp
bWFnZVNpemUoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQgbXVsdGlwbGllcikgY29uc3QgPSAw
OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHJldmlzaW9uIDM5
NTkzKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3LDYxICs2Nyw2MSBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVt
cFRhYmxlKGNvCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9
CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93QWx0ZXJUYWJsZShjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCitpbnQgRGF0YWJhc2VBdXRo
b3JpemVyOjphbGxvd0FsdGVyVGFibGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUpCiB7CiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKICAgICBy
ZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAotaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGNvbnN0IFN0
cmluZyYgdGFibGVOYW1lKQoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlSW5kZXgoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CiAgICAgbV9sYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUo
dGFibGVOYW1lKTsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcEluZGV4
KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK2ludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBJbmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHRhYmxlTmFtZSkKIHsKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFi
bGVOYW1lKTsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcEluZGV4KGNvbnN0IFN0
cmluZyYgaW5kZXhOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK2ludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmRyb3BJbmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSkKIHsKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAot
aW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBJbmRleChjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpk
cm9wVGVtcEluZGV4KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewog
ICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCi1pbnQgRGF0
YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUs
IGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRl
VHJpZ2dlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKICAgICBt
X2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwogICAgIHJldHVybiBkZW55QmFzZWRP
blRhYmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVh
dGVUZW1wVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBUcmlnZ2VyKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewogICAgIHJldHVybiBkZW55QmFz
ZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpk
cm9wVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxl
TmFtZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUcmlnZ2VyKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogewogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxl
TmFtZSh0YWJsZU5hbWUpOwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRy
aWdnZXIoY29uc3QgU3RyaW5nJiB0cmlnZ2VyTmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUp
CitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRyaWdnZXIoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVO
YW1lKHRhYmxlTmFtZSk7CiB9CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKQoraW50
IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVlRhYmxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpCiB7CiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKICAgICBy
ZXR1cm4gbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdzsKIH0K
IAotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxl
TmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKQoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6
ZHJvcFZUYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQogewogICAgIHJldHVybiBt
X3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93OwogfQpAQCAtMTM4
LDcgKzEzOCw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93SW5zZXJ0KGNvbnMKICAg
ICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAotaW50IERhdGFi
YXNlQXV0aG9yaXplcjo6YWxsb3dVcGRhdGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0
IFN0cmluZyYgY29sdW1uTmFtZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93VXBkYXRl
KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmKQogewogICAgIG1fbGFzdEFj
dGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVO
YW1lKHRhYmxlTmFtZSk7CkBAIC0xNDksNyArMTQ5LDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXpl
cjo6YWxsb3dUcmFuc2FjdGlvbgogICAgIHJldHVybiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1
dGhEZW55IDogU1FMQXV0aEFsbG93OwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxv
d1JlYWQoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgY29sdW1uTmFtZSkK
K2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93UmVhZChjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFi
bGVOYW1lKTsKIH0KQEAgLTE1OSwyMiArMTU5LDIyIEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6
OmFsbG93QW5hbHl6ZShjb24KICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVO
YW1lKTsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dQcmFnbWEoY29uc3QgU3Ry
aW5nJiBwcmFnbWFOYW1lLCBjb25zdCBTdHJpbmcmIGZpcnN0QXJndW1lbnQpCitpbnQgRGF0YWJh
c2VBdXRob3JpemVyOjphbGxvd1ByYWdtYShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQog
ewogICAgIHJldHVybiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFs
bG93OwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd0F0dGFjaChjb25zdCBTdHJp
bmcmIGZpbGVuYW1lKQoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dBdHRhY2goY29uc3Qg
U3RyaW5nJikKIHsKICAgICByZXR1cm4gbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6
IFNRTEF1dGhBbGxvdzsKIH0KIAotaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dEZXRhY2go
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxv
d0RldGFjaChjb25zdCBTdHJpbmcmKQogewogICAgIHJldHVybiBtX3NlY3VyaXR5RW5hYmxlZCA/
IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93OwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVy
OjphbGxvd0Z1bmN0aW9uKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lKQoraW50IERhdGFiYXNl
QXV0aG9yaXplcjo6YWxsb3dGdW5jdGlvbihjb25zdCBTdHJpbmcmKQogewogICAgIC8vIEZJWE1F
OiBBcmUgdGhlcmUgYW55IG9mIHRoZXNlIHdlIG5lZWQgdG8gcHJldmVudD8gIE9uZSBtaWdodCBn
dWVzcyBjdXJyZW50X2RhdGUsIGN1cnJlbnRfdGltZSwgY3VycmVudF90aW1lc3RhbXAgYmVjYXVz
ZQogICAgIC8vIHRoZXkgd291bGQgdmlvbGF0ZSB0aGUgInNhbmRib3ggZW52aXJvbm1lbnQiIHBh
cnQgb2YgNC4xMS4zLCBidXQgc2NyaXB0cyBjYW4gZ2VuZXJhdGUgdGhlIGxvY2FsIGNsaWVudCBz
aWRlIGluZm9ybWF0aW9uIHZpYQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
aAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgaW50IGRy
b3BUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKTsKICAgICBpbnQgZHJvcFRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUs
IGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKIAotICAgIGludCBjcmVhdGVWaWV3KGNvbnN0IFN0
cmluZyYgdmlld05hbWUpIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQotICAgIGludCBjcmVhdGVU
ZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0K
LSAgICBpbnQgZHJvcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkgeyByZXR1cm4gU1FMQXV0
aEFsbG93OyB9Ci0gICAgaW50IGRyb3BUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKSB7
IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KKyAgICBpbnQgY3JlYXRlVmlldyhjb25zdCBTdHJpbmcm
IC8qdmlld05hbWUqLykgeyByZXR1cm4gU1FMQXV0aEFsbG93OyB9CisgICAgaW50IGNyZWF0ZVRl
bXBWaWV3KGNvbnN0IFN0cmluZyYgLyp2aWV3TmFtZSovKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7
IH0KKyAgICBpbnQgZHJvcFZpZXcoY29uc3QgU3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJu
IFNRTEF1dGhBbGxvdzsgfQorICAgIGludCBkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5nJiAvKnZp
ZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQogCiAgICAgaW50IGNyZWF0ZVZUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKTsKICAg
ICBpbnQgZHJvcFZUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBt
b2R1bGVOYW1lKTsKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIGludCBhbGxvd1NlbGVj
dCgpIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQogICAgIGludCBhbGxvd1JlYWQoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgY29sdW1uTmFtZSk7CiAKLSAgICBpbnQgYWxs
b3dSZWluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7
IH0KKyAgICBpbnQgYWxsb3dSZWluZGV4KGNvbnN0IFN0cmluZyYgLyppbmRleE5hbWUqLykgeyBy
ZXR1cm4gU1FMQXV0aEFsbG93OyB9CiAgICAgaW50IGFsbG93QW5hbHl6ZShjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSk7CiAgICAgaW50IGFsbG93RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlv
bk5hbWUpOwogICAgIGludCBhbGxvd1ByYWdtYShjb25zdCBTdHJpbmcmIHByYWdtYU5hbWUsIGNv
bnN0IFN0cmluZyYgZmlyc3RBcmd1bWVudCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAJ
KHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBTdHJpbmcgU3RvcmFnZUFyZWE6OmludGVybmFs
R2V0SXRlbShjb25zCiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOwogfQog
Ci12b2lkIFN0b3JhZ2VBcmVhOjppbnRlcm5hbFNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCit2b2lk
IFN0b3JhZ2VBcmVhOjppbnRlcm5hbFNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJU
KCF2YWx1ZS5pc051bGwoKSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiAz
OTU5MykKKysrIFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTYsNyArOTYsNyBAQCB2b2lkIFNWR0FFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvCiAg
ICAgfQogfQogCi1SZW5kZXJPYmplY3QqIFNWR0FFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogU1ZHQUVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQog
ewogICAgIGlmIChzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGFyZW50KCkpLT5pc1RleHRDb250
ZW50KCkpCiAgICAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdJbmxpbmUodGhpcyk7
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysg
V2ViQ29yZS9zdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNyBAQCBTVkdBbHRHbHlwaEVsZW1lbnQ6On5TVkdBbHRHbHlwaEVsZW1lbnQoCiB7CiB9
CiAKLXZvaWQgU1ZHQWx0R2x5cGhFbGVtZW50OjpzZXRHbHlwaFJlZihjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBTVkdBbHRHbHlwaEVsZW1lbnQ6OnNl
dEdseXBoUmVmKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogfQpAQCAtNTIsNyArNTIsNyBAQCBj
b25zdCBBdG9taWNTdHJpbmcmIFNWR0FsdEdseXBoRWxlbWVudDo6CiAgICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShTVkdOYW1lczo6Z2x5cGhSZWZBdHRyKTsKIH0KIAotdm9pZCBTVkdBbHRHbHlwaEVs
ZW1lbnQ6OnNldEZvcm1hdChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBTVkdBbHRHbHlwaEVsZW1lbnQ6OnNldEZvcm1hdChjb25zdCBBdG9taWNTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUjsKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgYm9vbCBTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6Y2FsY3VsYXRlRgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRh
Z2UsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqKQordm9pZCBTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNp
Z25lZCwgU1ZHU01JTEVsZW1lbnQqKQogewogICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdl
dEVsZW1lbnQoKTsKICAgICBpZiAoIXRhcmdldCkKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBTVkdBbmlt
YXRpb25FbGVtZW50OjpiZWdpbkVsZW1lbnQoRQogICAgIHJldHVybiBiZWdpbkVsZW1lbnRBdCgw
LCBlYyk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YmVnaW5FbGVtZW50QXQoZmxv
YXQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
YmVnaW5FbGVtZW50QXQoZmxvYXQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBhZGRC
ZWdpblRpbWUoZWxhcHNlZCgpICsgb2Zmc2V0KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3MCw3
ICsxNzAsNyBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZEVsZW1lbnQoRXhjCiAgICAg
cmV0dXJuIGVuZEVsZW1lbnRBdCgwLCBlYyk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6ZW5kRWxlbWVudEF0KGZsb2F0IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmVuZEVsZW1lbnRBdChmbG9hdCBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmKQogewogICAgIGlmIChvZmZzZXQgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3Ry
aW5nKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMo
Y29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKSA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRh
Z2UsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpID0gMDsK
LSAgICAgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZy
b21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpIHsgcmV0dXJuIC0xLmY7IH0KKyAgICAg
ICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIC8qZnJvbVN0
cmluZyovLCBjb25zdCBTdHJpbmcmIC8qdG9TdHJpbmcqLykgeyByZXR1cm4gLTEuZjsgfQogICAg
ICAgICB2aXJ0dWFsIFBhdGggYW5pbWF0aW9uUGF0aCgpIGNvbnN0IHsgcmV0dXJuIFBhdGgoKTsg
fQogICAgICAgICAKICAgICAgICAgdm9pZCBjdXJyZW50VmFsdWVzRm9yVmFsdWVzQW5pbWF0aW9u
KGZsb2F0IHBlcmNlbnQsIGZsb2F0JiBlZmZlY3RpdmVQZXJjZW50LCBTdHJpbmcmIGZyb20sIFN0
cmluZyYgdG8pIGNvbnN0OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQ29sb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0NvbG9yLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJD
b3JlL3N2Zy9TVkdDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEyICs4OCwxMiBAQCBD
b2xvciBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoCiAgICAgcmV0dXJuIENvbG9y
KCk7CiB9CiAKLXZvaWQgU1ZHQ29sb3I6OnNldFJHQkNvbG9ySUNDQ29sb3IoY29uc3QgU3RyaW5n
JiAvKiByZ2JDb2xvciAqLywgY29uc3QgU3RyaW5nJiAvKiBpY2NDb2xvciAqLywgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIFNWR0NvbG9yOjpzZXRSR0JDb2xvcklDQ0NvbG9yKGNvbnN0IFN0cmlu
ZyYgLyogcmdiQ29sb3IgKi8sIGNvbnN0IFN0cmluZyYgLyogaWNjQ29sb3IgKi8sIEV4Y2VwdGlv
bkNvZGUmKQogewogICAgIC8vIFRPRE86IGltcGxlbWVudCBtZSEKIH0KIAotdm9pZCBTVkdDb2xv
cjo6c2V0Q29sb3IodW5zaWduZWQgc2hvcnQgY29sb3JUeXBlLCBjb25zdCBTdHJpbmcmIC8qIHJn
YkNvbG9yICovICwgY29uc3QgU3RyaW5nJiAvKiBpY2NDb2xvciAqLywgRXhjZXB0aW9uQ29kZSYg
ZWMpCit2b2lkIFNWR0NvbG9yOjpzZXRDb2xvcih1bnNpZ25lZCBzaG9ydCBjb2xvclR5cGUsIGNv
bnN0IFN0cmluZyYgLyogcmdiQ29sb3IgKi8gLCBjb25zdCBTdHJpbmcmIC8qIGljY0NvbG9yICov
LCBFeGNlcHRpb25Db2RlJikKIHsKICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgbWUhCiAgICAgbV9j
b2xvclR5cGUgPSBjb2xvclR5cGU7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDcgKzU4Miw3IEBA
IEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW4KICAgICAgICAgICAgICAg
ICAgICAgIHBvaW50LnkoKSwgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMs
IHJ1biwgMCwgZnJvbSwgdG8sIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSksIGhlaWdodCk7CiB9
CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3Qg
VGV4dFJ1biYsIGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QK
K2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgVGV4
dFJ1biYsIGludCwgYm9vbCkgY29uc3QKIHsKICAgICAvLyBUT0RPOiBGaXggdGV4dCBzZWxlY3Rp
b24gd2hlbiBIVE1MIHRleHQgaXMgZHJhd24gdXNpbmcgYSBTVkcgRm9udAogICAgIC8vIFdlIG5l
ZWQgdG8gaW50ZWdyYXRlIHRoZSBTVkcgdGV4dCBzZWxlY3Rpb24gY29kZSBpbiB0aGUgb2Zmc2V0
Rm9yUG9zaXRpb24oKSBmcmFtZXdvcmsuCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb3JlaWduT2Jq
ZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvcmVpZ25P
YmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQg
U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnN2Z0F0dHJpYnUKICAgICAgICAgcmVuZGVyZXIoKS0+
c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAKLVJlbmRlck9iamVjdCogU1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUq
IHN0eWxlKQorUmVuZGVyT2JqZWN0KiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6Y3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAgICAgcmV0dXJuIG5l
dyAoYXJlbmEpIFJlbmRlckZvcmVpZ25PYmplY3QodGhpcyk7CiB9CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ltYWdl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIGJvb2wgU1ZHSW1hZ2VF
bGVtZW50OjpoYXNSZWxhdGl2ZVZhbHVlcygKICAgICAgICAgICAgIHkoKS5pc1JlbGF0aXZlKCkg
fHwgaGVpZ2h0KCkuaXNSZWxhdGl2ZSgpKTsKIH0KIAotUmVuZGVyT2JqZWN0KiBTVkdJbWFnZUVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0
eWxlKQorUmVuZGVyT2JqZWN0KiBTVkdJbWFnZUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewogICAgIHJldHVybiBuZXcgKGFyZW5hKSBS
ZW5kZXJTVkdJbWFnZSh0aGlzKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODMsNyArMTgzLDcgQEAgU1ZHUmVzb3VyY2UqIFNWR01hcmtlckVsZW1l
bnQ6OmNhbnZhc1JlcwogICAgIHJldHVybiBtX21hcmtlci5nZXQoKTsKIH0KIAotUmVuZGVyT2Jq
ZWN0KiBTVkdNYXJrZXJFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEs
IFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogU1ZHTWFya2VyRWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAgICAgUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXIqIG1hcmtlckNvbnRhaW5lciA9IG5ldyAoYXJlbmEpIFJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKHRoaXMpOwogICAgIG1hcmtlckNvbnRhaW5lci0+c2V0
RHJhd3NDb250ZW50cyhmYWxzZSk7IC8vIE1hcmtlciBjb250ZW50cyB3aWxsIGJlIGV4cGxpY2l0
bHkgZHJhd24uCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDM5
NTkzKQorKysgV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAzLDggKzIwMyw3IEBAIGJvb2wgcG9pbnRzTGlzdEZyb21TVkdEYXRhKFNWR1BvaW50
TGlzdCoKICAgICAgKiBzdmcgcGF0aCBkYXRhIGNvbW1hbmRzIGFuZCBwYXJhbWV0ZXJzLiBJbiB0
aGUgc2Vjb25kIG1vZGUsIGl0IHdpbGwgY29udmVydCBhbGwKICAgICAgKiByZWxhdGl2ZSBjb29y
ZGluYXRlcyB0byBhYnNvbHV0ZSBvbmVzLCBhbmQgY29udmVydCBhbGwgY3VydmVzIHRvIGN1Ymlj
IGJlemllcnMuCiAgICAgICovCi0gICAgY2xhc3MgU1ZHUGF0aFBhcnNlcgotICAgIHsKKyAgICBj
bGFzcyBTVkdQYXRoUGFyc2VyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflNWR1Bh
dGhQYXJzZXIoKSB7IH0KICAgICAgICAgYm9vbCBwYXJzZVNWRyhjb25zdCBTdHJpbmcmIGQsIGJv
b2wgcHJvY2VzcyA9IGZhbHNlKTsKQEAgLTIxMiwxNCArMjExLDE1IEBAIGJvb2wgcG9pbnRzTGlz
dEZyb21TVkdEYXRhKFNWR1BvaW50TGlzdCoKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzdmdNb3ZlVG8oZG91YmxlIHgxLCBkb3VibGUgeTEsIGJvb2wgY2xvc2VkLCBib29s
IGFicyA9IHRydWUpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0xpbmVUbyhkb3VibGUg
eDEsIGRvdWJsZSB5MSwgYm9vbCBhYnMgPSB0cnVlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBzdmdMaW5lVG9Ib3Jpem9udGFsKGRvdWJsZSB4LCBib29sIGFicyA9IHRydWUpIHt9Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzdmdMaW5lVG9WZXJ0aWNhbChkb3VibGUgeSwgYm9vbCBhYnMgPSB0
cnVlKSB7fQorICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnTGluZVRvSG9yaXpvbnRhbChkb3VibGUs
IGJvb2wgLyphYnMqLyA9IHRydWUpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnTGluZVRv
VmVydGljYWwoZG91YmxlIC8qeSovLCBib29sIC8qYWJzKi8gPSB0cnVlKSB7IH0KICAgICAgICAg
dmlydHVhbCB2b2lkIHN2Z0N1cnZlVG9DdWJpYyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91Ymxl
IHgyLCBkb3VibGUgeTIsIGRvdWJsZSB4LCBkb3VibGUgeSwgYm9vbCBhYnMgPSB0cnVlKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdmdDdXJ2ZVRvQ3ViaWNTbW9vdGgoZG91YmxlIHgsIGRv
dWJsZSB5LCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgYm9vbCBhYnMgPSB0cnVlKSB7fQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3ZnQ3VydmVUb1F1YWRyYXRpYyhkb3VibGUgeCwgZG91YmxlIHksIGRv
dWJsZSB4MSwgZG91YmxlIHkxLCBib29sIGFicyA9IHRydWUpIHt9Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzdmdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGRvdWJsZSB4LCBkb3VibGUgeSwgYm9vbCBh
YnMgPSB0cnVlKSB7fQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXJjVG8oZG91YmxlIHgsIGRv
dWJsZSB5LCBkb3VibGUgcjEsIGRvdWJsZSByMiwgZG91YmxlIGFuZ2xlLCBib29sIGxhcmdlQXJj
RmxhZywgYm9vbCBzd2VlcEZsYWcsIGJvb2wgYWJzID0gdHJ1ZSkge30KKyAgICAgICAgdmlydHVh
bCB2b2lkIHN2Z0N1cnZlVG9DdWJpY1Ntb290aChkb3VibGUgLyp4Ki8sIGRvdWJsZSAvKnkqLywg
ZG91YmxlIC8qeDIqLywgZG91YmxlIC8qeTIqLywgYm9vbCAvKmFicyovID0gdHJ1ZSkgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdmdDdXJ2ZVRvUXVhZHJhdGljKGRvdWJsZSAvKngqLywgZG91
YmxlIC8qeSovLCBkb3VibGUgLyp4MSovLCBkb3VibGUgLyp5MSovLCBib29sIC8qYWJzKi8gPSB0
cnVlKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0N1cnZlVG9RdWFkcmF0aWNTbW9vdGgo
ZG91YmxlIC8qeCovLCBkb3VibGUgLyp5Ki8sIGJvb2wgLyphYnMqLyA9IHRydWUpIHsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXJjVG8oZG91YmxlIC8qeCovLCBkb3VibGUgLyp5Ki8sIGRv
dWJsZSAvKnIxKi8sIGRvdWJsZSAvKnIyKi8sIGRvdWJsZSAvKmFuZ2xlKi8sIGJvb2wgLypsYXJn
ZUFyY0ZsYWcqLywgYm9vbCAvKnN3ZWVwRmxhZyovLCBib29sIC8qYWJzKi8gPSB0cnVlKSB7IH0K
ICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0Nsb3NlUGF0aCgpID0gMDsKKwogICAgIHByaXZhdGU6
CiAgICAgICAgIHZvaWQgY2FsY3VsYXRlQXJjKGJvb2wgcmVsYXRpdmUsIGRvdWJsZSYgY3VyeCwg
ZG91YmxlJiBjdXJ5LCBkb3VibGUgYW5nbGUsIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHIx
LCBkb3VibGUgcjIsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZyk7CiAgICAgfTsK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgdW5z
aWduZWQgbG9uZyBTVkdTVkdFbGVtZW50OjpzdXNwZW5kUmVkcgogICAgIHJldHVybiAwOwogfQog
Ci12b2lkIFNWR1NWR0VsZW1lbnQ6OnVuc3VzcGVuZFJlZHJhdyh1bnNpZ25lZCBsb25nIC8qIHN1
c3BlbmRfaGFuZGxlX2lkICovLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgU1ZHU1ZHRWxlbWVu
dDo6dW5zdXNwZW5kUmVkcmF3KHVuc2lnbmVkIGxvbmcgLyogc3VzcGVuZF9oYW5kbGVfaWQgKi8s
IEV4Y2VwdGlvbkNvZGUmKQogewogICAgIC8vIGlmIHN1c3BlbmRfaGFuZGxlX2lkIGlzIG5vdCBm
b3VuZCwgdGhyb3cgZXhjZXB0aW9uCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSAoc2VlIGJ1
ZyAxMTI3NSkKQEAgLTMwOCwxOSArMzA4LDE5IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6Zm9yY2VS
ZWRyYXcoKQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUgKHNlZSBidWcgMTEyNzUpCiB9CiAK
LU5vZGVMaXN0KiBTVkdTVkdFbGVtZW50OjpnZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgU1ZHRWxlbWVudCopCitOb2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6Z2V0SW50
ZXJzZWN0aW9uTGlzdChjb25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50KikKIHsKICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjc0KQogICAgIHJldHVybiAwOwogfQogCi1O
b2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6Z2V0RW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIFNWR0VsZW1lbnQqKQorTm9kZUxpc3QqIFNWR1NWR0VsZW1lbnQ6OmdldEVuY2xvc3Vy
ZUxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCopCiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NCkKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBTVkdT
VkdFbGVtZW50OjpjaGVja0ludGVyc2VjdGlvbihTVkdFbGVtZW50KiBlbGVtZW50LCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCitib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNrSW50ZXJzZWN0aW9uKFNW
R0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gVE9ETyA6IHRha2Ug
aW50byBhY2NvdW50IHBvaW50ZXItZXZlbnRzPwogICAgIC8vIEZJWE1FOiBXaHkgaXMgZWxlbWVu
dCBpZ25vcmVkPz8KQEAgLTMyOCw3ICszMjgsNyBAQCBib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNr
SW50ZXJzZWN0aW9uKFNWCiAgICAgcmV0dXJuIHJlY3QuaW50ZXJzZWN0cyhnZXRCQm94KCkpOwog
fQogCi1ib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNrRW5jbG9zdXJlKFNWR0VsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tFbmNs
b3N1cmUoU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICAvLyBUT0RP
IDogdGFrZSBpbnRvIGFjY291bnQgcG9pbnRlci1ldmVudHM/CiAgICAgLy8gRklYTUU6IFdoeSBp
cyBlbGVtZW50IGlnbm9yZWQ/PwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBzdHJ1Y3QgU1ZHSW5saW5l
VGV4dEJveFF1ZXJ5V2Fsa2VyIHsKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBjaHVua1BvcnRp
b25DYWxsYmFjayhTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZzZXQsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY2h1bmtDdG0sCisgICAgdm9pZCBjaHVua1BvcnRpb25DYWxs
YmFjayhTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgc3RhcnRPZmZzZXQsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0
b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yJiBzdGFydCwgY29uc3QgVmVjdG9yPFNWR0NoYXI+OjppdGVy
YXRvciYgZW5kKQogICAgIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+
dGV4dE9iamVjdCgpLT5zdHlsZSgpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBBZmZpbmVUcmFuc2Zvcm0qIFNWR1RleHRFbGVtZW50Ojpz
dXBwbGVtCiAgICAgcmV0dXJuIG1fc3VwcGxlbWVudGFsVHJhbnNmb3JtLmdldCgpOwogfQogCi1S
ZW5kZXJPYmplY3QqIFNWR1RleHRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSog
YXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogU1ZHVGV4dEVsZW1lbnQ6
OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewogICAg
IHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdUZXh0KHRoaXMpOwogfQpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdUZXh0UGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvc3ZnL1NW
R1RleHRQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9p
ZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cgogICAgIH0KIH0KIAotUmVuZGVy
T2JqZWN0KiBTVkdUZXh0UGF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBh
cmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxlKQorUmVuZGVyT2JqZWN0KiBTVkdUZXh0UGF0aEVsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewog
ICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdUZXh0UGF0aCh0aGlzKTsKIH0KSW5kZXg6
IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24gMzk1OTMp
CisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZXZlbnRCYXNlLT5y
ZW1vdmVFdmVudExpc3RlbmVyKG1fY29uZGl0aW9uLT5tX25hbWUsIHRoaXMsIGZhbHNlKTsKICAg
ICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50LCBib29sIGlz
V2luZG93RXZlbnQpIAorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCogZXZlbnQs
IGJvb2wpIAogICAgIHsKICAgICAgICAgbV9hbmltYXRpb24tPmhhbmRsZUNvbmRpdGlvbkV2ZW50
KGV2ZW50LCBtX2NvbmRpdGlvbik7CiAgICAgfQpAQCAtODc2LDcgKzg3Niw3IEBAIHZvaWQgU1ZH
U01JTEVsZW1lbnQ6Om5vdGlmeURlcGVuZGVudHNJbnQKICAgICBsb29wQnJlYWtlci5yZW1vdmUo
dGhpcyk7CiB9CiAgICAgCi12b2lkIFNWR1NNSUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZVRpbWVz
RnJvbVN5bmNiYXNlKFNWR1NNSUxFbGVtZW50KiBzeW5jYmFzZSwgTmV3T3JFeGlzdGluZ0ludGVy
dmFsIG5ld09yRXhpc3RpbmcpCit2b2lkIFNWR1NNSUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZVRp
bWVzRnJvbVN5bmNiYXNlKFNWR1NNSUxFbGVtZW50KiBzeW5jYmFzZSwgTmV3T3JFeGlzdGluZ0lu
dGVydmFsKQogewogICAgIC8vIEZJWE1FOiBUbyBiZSByZWFsbHkgY29ycmVjdCwgdGhpcyBzaG91
bGQgaGFuZGxlIHVwZGF0aW5nIGV4aXNpbmcgaW50ZXJ2YWwgYnkgY2hhbmdpbmcgCiAgICAgLy8g
dGhlIGFzc29jaWF0ZWQgdGltZXMgaW5zdGVhZCBvZiBjcmVhdGluZyBuZXcgb25lcy4KQEAgLTkx
MSw3ICs5MTEsNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpyZW1vdmVUaW1lRGVwZW5kZW50CiAg
ICAgbV90aW1lRGVwZW5kZW50cy5yZW1vdmUoYW5pbWF0aW9uKTsKIH0KICAgICAKLXZvaWQgU1ZH
U01JTEVsZW1lbnQ6OmhhbmRsZUNvbmRpdGlvbkV2ZW50KEV2ZW50KiBldmVudCwgQ29uZGl0aW9u
KiBjb25kaXRpb24pCit2b2lkIFNWR1NNSUxFbGVtZW50OjpoYW5kbGVDb25kaXRpb25FdmVudChF
dmVudCosIENvbmRpdGlvbiogY29uZGl0aW9uKQogewogICAgIGlmIChjb25kaXRpb24tPm1fYmVn
aW5PckVuZCA9PSBCZWdpbikKICAgICAgICAgYWRkQmVnaW5UaW1lKGVsYXBzZWQoKSArIGNvbmRp
dGlvbi0+bV9vZmZzZXQpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDE4ICs1OSwxOCBAQCBwdWJsaWM6CiAKICAgICBTVkdJbWFnZSogaW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CiAgICAgCitwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBjaHJvbWVEZXN0cm95ZWQoKQogICAgIHsKICAgICAgICAgbV9pbWFnZSA9IDA7CiAgICAg
fQogCi0gICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoY29uc3QgSW50UmVjdCYgciwgYm9vbCBjb250
ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUsIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQorICAg
IHZpcnR1YWwgdm9pZCByZXBhaW50KGNvbnN0IEludFJlY3QmIHIsIGJvb2wsIGJvb2wsIGJvb2wp
CiAgICAgewogICAgICAgICBpZiAobV9pbWFnZSAmJiBtX2ltYWdlLT5pbWFnZU9ic2VydmVyKCkp
CiAgICAgICAgICAgICBtX2ltYWdlLT5pbWFnZU9ic2VydmVyKCktPmNoYW5nZWRJblJlY3QobV9p
bWFnZSwgcik7CiAgICAgfQogCi1wcml2YXRlOgogICAgIFNWR0ltYWdlKiBtX2ltYWdlOwogfTsK
IApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNWR0ltYWdlKG9ic2VydmVyKSk7CiAgICAgICAgIH0KLSAgICAgICAgflNWR0lt
YWdlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIH5TVkdJbWFnZSgpOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKICAg
ICAgICAgdmlydHVhbCBib29sIHVzZXNDb250YWluZXJTaXplKCkgY29uc3Q7CkBAIC02MCwxMiAr
NjIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIEZJWE1FOiBTVkdJbWFn
ZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCiAg
ICAgICAgIC8vIHRvIHBydW5lIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVt
ZW50ZWQgeWV0LgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wg
ZGVzdHJveUFsbCA9IHRydWUpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29k
ZWREYXRhKGJvb2wpIHsgfQogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgZnJh
bWVBdEluZGV4KHNpemVfdCkgeyByZXR1cm4gMDsgfQogICAgICAgICAKLXByaXZhdGU6CiAgICAg
ICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0b1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24g
Mzk1OTMpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6cmVuZGVyUGF0aCgKICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgpOwogfQog
Ci12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyYXBoaWNzQ29udGV4dCom
IGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUg
dHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6dGVhcmRvd24oR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29u
c3QKIHsKICNpZiBQTEFURk9STShDRykKICAgICAvLyByZW5kZXJQYXRoKCkgaXMgbm90IHVzZWQg
d2hlbiBwYWludGluZyB0ZXh0LCBzbyB3ZSBwYWludCB0aGUgZ3JhZGllbnQgZHVyaW5nIHRlYXJk
b3duKCkKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cu
Y3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50
U2VydmVyQ2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgU1ZHUGFp
bnRTZXJ2ZXI6OmRyYXcoR3JhcGhpY3NDb250ZXgKICAgICB0ZWFyZG93bihjb250ZXh0LCBwYXRo
LCB0eXBlKTsKIH0KIAotdm9pZCBTVkdQYWludFNlcnZlcjo6dGVhcmRvd24oR3JhcGhpY3NDb250
ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSwgYm9vbCBpc1Bh
aW50aW5nVGV4dCkgY29uc3QKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnRlYXJkb3duKEdyYXBoaWNz
Q29udGV4dComLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wp
IGNvbnN0CiB7CiAgICAgLy8gbm8tb3AKIH0KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJl
dmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTU0LDcgKzExNTQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNz
U3luY0xvYWRSZXN1CiAgICAgICAgIGVjID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb246Ok5FVFdP
UktfRVJSOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGYWlsKFN1YnJlc291cmNlTG9h
ZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBYTUxIdHRwUmVx
dWVzdDo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKQogewogICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGluIGFuIGVycm9yIHN0YXRlLCBmb3Ig
aW5zdGFuY2Ugd2UgY2FsbGVkIGFib3J0KCksIGJhaWwgb3V0IGVhcmx5LgogICAgIGlmIChtX2Vy
cm9yKQpAQCAtMTIwNCw3ICsxMjA0LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNo
TG9hZGluZyhTdQogICAgICAgICBkcm9wUHJvdGVjdGlvbigpOwogfQogCi12b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nUHJlZmxpZ2h0KFN1YnJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIpCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nUHJlZmxpZ2h0KFN1YnJl
c291cmNlTG9hZGVyKikKIHsKICAgICBBU1NFUlQobV9pblByZWZsaWdodCk7CiAgICAgQVNTRVJU
KCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKQEAgLTEyMTcsNyArMTIxNyw3IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmdQcmUKICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZp
dHkodGhpcyk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OndpbGxTZW5kUmVxdWVzdChTdWJy
ZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OndpbGxTZW5k
UmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUg
Zml4ZWQgdG8gZm9sbG93IHRoZSByZWRpcmVjdCBjb3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3MtZG9t
YWluIHJlcXVlc3RzLgogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0
eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpKSB7CkluZGV4OiBXZWJDb3JlL3ht
bC9YUGF0aEdyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIu
eQkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB1c2luZyBuYW1lc3BhY2UgWFBhdGg7CiAlewogCiBp
bnQgeHBhdGh5eWxleChZWVNUWVBFKiB5eWx2YWwpIHsgcmV0dXJuIFBhcnNlcjo6Y3VycmVudCgp
LT5sZXgoeXlsdmFsKTsgfQotdm9pZCB4cGF0aHl5ZXJyb3IoY29uc3QgY2hhciogc3RyKSB7IH0K
K3ZvaWQgeHBhdGh5eWVycm9yKGNvbnN0IGNoYXIqKSB7IH0KICAgICAKICV9CiAKSW5kZXg6IFdl
YkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hT
TFN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUveG1sL1hTTFN0eWxl
U2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgRG9jTG9hZGVyKiBY
U0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQogICAgIHJldHVybiBtX293bmVyRG9jdW1lbnQtPmRv
Y0xvYWRlcigpOwogfQogCi1ib29sIFhTTFN0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBib29sIHN0cmljdCkKK2Jvb2wgWFNMU3R5bGVTaGVldDo6cGFyc2VTdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wpCiB7CiAgICAgLy8gUGFyc2UgaW4gYSBzaW5n
bGUgY2h1bmsgaW50byBhbiB4bWxEb2NQdHIKICAgICBjb25zdCBVQ2hhciBCT00gPSAweEZFRkY7
CkluZGV4OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBTT0ZU
X0xJTksobGlieHNsdCwgeHNsdE5leHRJbXBvcnQsIHhzbHRTCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRh
LCBjb25zdCBjaGFyKiBtc2csIC4uLikKK3ZvaWQgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9y
RnVuYyh2b2lkKiwgY29uc3QgY2hhciosIC4uLikKIHsKICAgICAvLyBJdCB3b3VsZCBiZSBuaWNl
IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgZXJyb3IgbWVzc2FnZS4KIH0KQEAgLTEwNyw3ICsx
MDcsNyBAQCB2b2lkIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKHZvaWQqCiBzdGF0aWMg
WFNMVFByb2Nlc3NvciogZ2xvYmFsUHJvY2Vzc29yID0gMDsKIHN0YXRpYyBEb2NMb2FkZXIqIGds
b2JhbERvY0xvYWRlciA9IDA7CiBzdGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3Qg
eG1sQ2hhciogdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sRGlj
dFB0ciBkaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sRGljdFB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY3R4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhzbHRMb2FkVHlwZSB0eXBlKQpAQCAtNDM2LDIxICs0
MzYsMjEgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBYU0xUUHJvY2VzcwogICAgIHJl
dHVybiBjcmVhdGVGcmFnbWVudEZyb21Tb3VyY2UocmVzdWx0U3RyaW5nLCByZXN1bHRNSU1FVHlw
ZSwgc291cmNlTm9kZSwgb3V0cHV0RG9jKTsKIH0KIAotdm9pZCBYU0xUUHJvY2Vzc29yOjpzZXRQ
YXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxO
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBYU0xUUHJvY2Vzc29yOjpzZXRQYXJhbWV0
ZXIoY29uc3QgU3RyaW5nJiAvKm5hbWVzcGFjZVVSSSovLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyBGSVhNRTogbmFtZXNwYWNlIHN1cHBv
cnQ/CiAgICAgLy8gc2hvdWxkIG1ha2UgYSBRdWFsaWZpZWROYW1lIGhlcmUgYnV0IHdlJ2QgaGF2
ZSB0byBleHBvc2UgdGhlIGltcGwKICAgICBtX3BhcmFtZXRlcnMuc2V0KGxvY2FsTmFtZSwgdmFs
dWUpOwogfQogCi1TdHJpbmcgWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKGNvbnN0IFN0cmlu
ZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3QKK1N0cmluZyBY
U0xUUHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiAvKm5hbWVzcGFjZVVSSSov
LCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogbmFtZXNw
YWNlIHN1cHBvcnQ/CiAgICAgLy8gc2hvdWxkIG1ha2UgYSBRdWFsaWZpZWROYW1lIGhlcmUgYnV0
IHdlJ2QgaGF2ZSB0byBleHBvc2UgdGhlIGltcGwKICAgICByZXR1cm4gbV9wYXJhbWV0ZXJzLmdl
dChsb2NhbE5hbWUpOwogfQogCi12b2lkIFhTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihj
b25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCit2b2lk
IFhTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIC8qbmFtZXNwYWNl
VVJJKi8sIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKQogewogICAgIC8vIEZJWE1FOiBuYW1lc3Bh
Y2Ugc3VwcG9ydD8KICAgICBtX3BhcmFtZXRlcnMucmVtb3ZlKGxvY2FsTmFtZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26434</attachid>
            <date>2009-01-05 09:17:26 -0800</date>
            <delta_ts>2009-01-12 00:16:58 -0800</delta_ts>
            <desc>other parts of this, work in progress</desc>
            <filename>UnusedPatch2.txt</filename>
            <type>text/plain</type>
            <size>76231</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDM5NTc3KQor
KysgV2ViQ29yZS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw3ICsyMCw3IEBAIExJTktFUl9ESVNQTEFZU19NQU5HTEVEX05BTUVTID0gWUVTOwogUFJF
QklORElORyA9IE5POwogVkFMSURfQVJDSFMgPSBpMzg2IHBwYyB4ODZfNjQgcHBjNjQ7CiBXQVJO
SU5HX0NGTEFHUyA9ICQoV0FSTklOR19DRkxBR1NfJChDVVJSRU5UX0FSQ0gpKTsKLVdBUk5JTkdf
Q0ZMQUdTX0JBU0UgPSAtV2FsbCAtVyAtV2Nhc3QtYWxpZ24gLVdjaGFyLXN1YnNjcmlwdHMgLVdm
b3JtYXQtc2VjdXJpdHkgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdwb2ludGVyLWFyaXRo
IC1Xd3JpdGUtc3RyaW5ncyAtV25vLWZvcm1hdC15MmsgLVduby11bnVzZWQtcGFyYW1ldGVyIC1X
dW5kZWY7CitXQVJOSU5HX0NGTEFHU19CQVNFID0gLVdhbGwgLVcgLVdjYXN0LWFsaWduIC1XY2hh
ci1zdWJzY3JpcHRzIC1XZm9ybWF0LXNlY3VyaXR5IC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRl
IC1XcG9pbnRlci1hcml0aCAtV3dyaXRlLXN0cmluZ3MgLVduby1mb3JtYXQteTJrIC1XdW5kZWY7
CiBXQVJOSU5HX0NGTEFHU18gPSAkKFdBUk5JTkdfQ0ZMQUdTX0JBU0UpIC1Xc2hvcnRlbi02NC10
by0zMjsKIFdBUk5JTkdfQ0ZMQUdTX2kzODYgPSAkKFdBUk5JTkdfQ0ZMQUdTX0JBU0UpIC1Xc2hv
cnRlbi02NC10by0zMjsKIFdBUk5JTkdfQ0ZMQUdTX3BwYyA9ICQoV0FSTklOR19DRkxBR1NfQkFT
RSkgLVdzaG9ydGVuLTY0LXRvLTMyOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmNwcAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NiwxNyArMzc2LDI0IEBAIEpTVmFs
dWUqIGpzRE9NV2luZG93QmFzZUltYWdlKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNJbWFnZUNvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRv
d0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKSk7CiB9CiAKKyNpZiAhRU5BQkxFKENI
QU5ORUxfTUVTU0FHSU5HKQorCitKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VNZXNzYWdlQ2hhbm5l
bChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKK3sK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworI2Vsc2UKKwogSlNWYWx1ZSoganNET01X
aW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewotI2lmIEVOQUJMRShDSEFOTkVMX01FU1NB
R0lORykKICAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KGFzT2JqZWN0KHNs
b3Quc2xvdEJhc2UoKSkpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNNZXNzYWdlQ2hh
bm5lbENvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09i
amVjdChzbG90LnNsb3RCYXNlKCkpKSk7Ci0jZWxzZQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotI2VuZGlmCiB9CiAKKyNlbmRpZgorCiBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VPcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qo
c2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL29iamMvRE9NT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9ET01PYmplY3QubW0JKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTU9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2lt
cG9ydCAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW1wb3J0ICJTdHlsZVNoZWV0LmgiCiAj
aW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9VbnVzZWRQYXJhbS5oPgogCiBAaW1wbGVtZW50YXRpb24gRE9NT2JqZWN0CiAKQEAgLTU4LDYg
KzU5LDcgQEAKIAogLSAoaWQpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lCiB7CisgICAgVU5V
U0VEX1BBUkFNKHpvbmUpOwogICAgIHJldHVybiBbc2VsZiByZXRhaW5dOwogfQogCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDM5NTc3KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtNTg1LDYgKzU4NSw4IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVj
U3RhdGUKIAogKyAoaWQpYWxsb2NXaXRoWm9uZTooTlNab25lICopem9uZQogeworICAgIFVOVVNF
RF9QQVJBTSh6b25lKTsKKwogICAgIHN0YXRpYyBXZWJVbmRlZmluZWQgKnNoYXJlZFVuZGVmaW5l
ZCA9IDA7CiAgICAgaWYgKCFzaGFyZWRVbmRlZmluZWQpCiAgICAgICAgIHNoYXJlZFVuZGVmaW5l
ZCA9IFtzdXBlciBhbGxvY1dpdGhab25lOk5VTExdOwpAQCAtNTk4LDE1ICs2MDAsMjAgQEAgc3Rh
dGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0ZQogCiAtIChpZClpbml0V2l0aENv
ZGVyOihOU0NvZGVyICopY29kZXIKIHsKKyAgICBVTlVTRURfUEFSQU0oY29kZXIpOworCiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZW5jb2RlV2l0aENvZGVyOihOU0NvZGVyICopZW5j
b2RlcgorLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgogeworICAgIFVO
VVNFRF9QQVJBTShjb2Rlcik7CiB9CiAKIC0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9u
ZQogeworICAgIFVOVVNFRF9QQVJBTSh6b25lKTsKKwogICAgIHJldHVybiBzZWxmOwogfQogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlz
aW9uIDM5NTc3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkod29ya2luZyBjb3B5KQpAQCAtOTYzLDcgKzk2MywxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNz
TmFtZShQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlw
ZT4gaW1wbCwgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpXG4iKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgaW1wbCwgc2hlbGwp
XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NO
YW1lfTo6JGNsYXNzTmFtZShQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBQYXNzUmVm
UHRyPCRpbXBsVHlwZT4gaW1wbCIgLiAoJG5lZWRzU1ZHQ29udGV4dCA/ICIsIFNWR0VsZW1lbnQq
IGNvbnRleHQiIDogIiIpIC4gIilcbiIpOworICAgICAgICBteSAkY29udGV4dEFyZyA9ICIiOwor
ICAgICAgICBpZiAoJG5lZWRzU1ZHQ29udGV4dCkgeworICAgICAgICAgICAgaWYgKCRoYXNQYXJl
bnQgJiYgISRwYXJlbnROZWVkc1NWR0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAkY29udGV4
dEFyZyA9ICIsIFNWR0VsZW1lbnQqIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgJGNvbnRleHRBcmcgPSAiLCBTVkdFbGVtZW50KiBjb250ZXh0IjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6
JGNsYXNzTmFtZShQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRp
bXBsVHlwZT4gaW1wbCRjb250ZXh0QXJnKVxuIik7CiAgICAgICAgIGlmICgkaGFzUGFyZW50KSB7
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUo
c3RydWN0dXJlLCBpbXBsIiAuICgkcGFyZW50TmVlZHNTVkdDb250ZXh0ID8gIiwgY29udGV4dCIg
OiAiIikgLiAiKVxuIik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDkxLDYgKzEwOTksNyBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlbmVyVHlwZSA9ICJKU1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lciI7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKGV4ZWMpO1xuIik7CiAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAg
PSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihh
c09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJHtsaXN0ZW5lclR5cGV9KiBsaXN0ZW5l
ciA9IHN0YXRpY19jYXN0PCR7bGlzdGVuZXJUeXBlfSo+KGltcC0+JGltcGxHZXR0ZXJGdW5jdGlv
bk5hbWUoKSkpIHtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgaWYgKEpTT2JqZWN0KiBsaXN0ZW5lck9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9i
aigpKVxuIik7CkBAIC0xMTAwLDggKzExMDksMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUg
PX4gL0NvbnN0cnVjdG9yJC8pIHsKICAgICAgICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9y
VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PnR5cGUpOwogICAgICAgICAgICAgICAgICAgICAkY29uc3RydWN0b3JUeXBlID1+IHMvQ29uc3Ry
dWN0b3IkLy87CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVO
VVNFRF9QQVJBTShzbG90KTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICI6OmdldENvbnN0cnVj
dG9yKGV4ZWMpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNpZiAoIUB7JGF0dHJpYnV0ZS0+
Z2V0dGVyRXhjZXB0aW9uc30pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgVU5VU0VEX1BBUkFNKGV4ZWMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICgkcG9kVHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgJHBvZFR5cGUgaW1wKCpzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xv
dC5zbG90QmFzZSgpKSktPmltcGwoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgkcG9kVHlwZSBlcSAiZmxvYXQiKSB7ICMgU3BlY2lhbCBjYXNlIGZvciBKU1NWR051bWJlcgpA
QCAtMTI5OSw2ICsxMzEwLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlKiAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncylcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShhcmdzKTtcbiIpOwog
CiAgICAgICAgICAgICAkaW1wbEtKU0luY2x1ZGV7IkVycm9yLmgifSA9IDE7CiAKQEAgLTE0MjYs
NyArMTQzOCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0pIHsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbkpTVmFsdWUqICR7Y2xhc3NOYW1lfTo6aW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuSlNWYWx1ZSogJHtjbGFzc05hbWV9OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2Jq
ZWN0KHNsb3Quc2xvdEJhc2UoKSkpO1xuIik7CiAgICAgICAgIGlmIChJbmRleEdldHRlclJldHVy
bnNTdHJpbmdzKCRpbXBsQ2xhc3NOYW1lKSkgewpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzk1
NzcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOTAs
NyArNDE5MCw3IEBAIERhdGFiYXNlVGhyZWFkKiBEb2N1bWVudDo6ZGF0YWJhc2VUaHJlYWQKICAg
ICBpZiAoIW1fZGF0YWJhc2VUaHJlYWQgJiYgIW1faGFzT3BlbkRhdGFiYXNlcykgewogICAgICAg
ICAvLyBDcmVhdGUgdGhlIGRhdGFiYXNlIHRocmVhZCBvbiBmaXJzdCByZXF1ZXN0IC0gYnV0IG5v
dCBpZiBhdCBsZWFzdCBvbmUgZGF0YWJhc2Ugd2FzIGFscmVhZHkgb3BlbmVkLAogICAgICAgICAv
LyBiZWNhdXNlIGluIHRoYXQgY2FzZSB3ZSBhbHJlYWR5IGhhZCBhIGRhdGFiYXNlIHRocmVhZCBh
bmQgdGVybWluYXRlZCBpdCBhbmQgc2hvdWxkIG5vdCBjcmVhdGUgYW5vdGhlci4KLSAgICAgICAg
bV9kYXRhYmFzZVRocmVhZCA9IERhdGFiYXNlVGhyZWFkOjpjcmVhdGUodGhpcyk7CisgICAgICAg
IG1fZGF0YWJhc2VUaHJlYWQgPSBEYXRhYmFzZVRocmVhZDo6Y3JlYXRlKCk7CiAgICAgICAgIGlm
ICghbV9kYXRhYmFzZVRocmVhZC0+c3RhcnQoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VUaHJl
YWQgPSAwOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIGlubGluZSBF
bGVtZW50UmFyZURhdGEqIEVsZW1lbnQ6OmVuc3VyZVIKICAgICAKIE5vZGVSYXJlRGF0YSogRWxl
bWVudDo6Y3JlYXRlUmFyZURhdGEoKQogewotICAgIHJldHVybiBuZXcgRWxlbWVudFJhcmVEYXRh
KHRoaXMpOworICAgIHJldHVybiBuZXcgRWxlbWVudFJhcmVEYXRhOwogfQogICAgIAogUGFzc1Jl
ZlB0cjxOb2RlPiBFbGVtZW50OjpjbG9uZU5vZGUoYm9vbCBkZWVwKQpAQCAtNjU5LDcgKzY1OSw3
IEBAIHZvaWQgRWxlbWVudDo6ZGV0YWNoKCkKIHsKICAgICBjYW5jZWxGb2N1c0FwcGVhcmFuY2VV
cGRhdGUoKTsKICAgICBpZiAoaGFzUmFyZURhdGEoKSkKLSAgICAgICAgcmFyZURhdGEoKS0+cmVz
ZXRDb21wdXRlZFN0eWxlKHRoaXMpOworICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVk
U3R5bGUoKTsKICAgICBDb250YWluZXJOb2RlOjpkZXRhY2goKTsKIH0KIApAQCAtNjc3LDcgKzY3
Nyw3IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2gKIAogICAgIGlm
ICgoY2hhbmdlID4gTm9DaGFuZ2UgfHwgY2hhbmdlZCgpKSkgewogICAgICAgICBpZiAoaGFzUmFy
ZURhdGEoKSkKLSAgICAgICAgICAgIHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSh0aGlz
KTsKKyAgICAgICAgICAgIHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSgpOwogICAgIH0K
ICAgICBpZiAoaGFzUGFyZW50U3R5bGUgJiYgKGNoYW5nZSA+PSBJbmhlcml0IHx8IGNoYW5nZWQo
KSkpIHsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IGRvY3VtZW50KCkt
PnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMpOwpJbmRleDogV2ViQ29yZS9k
b20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudFJh
cmVEYXRhLmgJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBFbGVtZW50UmFyZURhdGEgOiBwdWJsaWMgTm9kZVJhcmVEYXRhIHsKIHB1YmxpYzoK
LSAgICBFbGVtZW50UmFyZURhdGEoRWxlbWVudCopOworICAgIEVsZW1lbnRSYXJlRGF0YSgpOwog
Ci0gICAgdm9pZCByZXNldENvbXB1dGVkU3R5bGUoRWxlbWVudCopOworICAgIHZvaWQgcmVzZXRD
b21wdXRlZFN0eWxlKCk7CiAKICAgICB1c2luZyBOb2RlUmFyZURhdGE6Om5lZWRzRm9jdXNBcHBl
YXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoOwogICAgIHVzaW5nIE5vZGVSYXJlRGF0YTo6c2V0
TmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7CkBAIC00NiwxMiArNDYs
MTIgQEAgaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaQogICAgIHJldHVy
biBJbnRTaXplKElOVF9NQVgsIElOVF9NQVgpOwogfQogCi1pbmxpbmUgRWxlbWVudFJhcmVEYXRh
OjpFbGVtZW50UmFyZURhdGEoRWxlbWVudCogZSkKK2lubGluZSBFbGVtZW50UmFyZURhdGE6OkVs
ZW1lbnRSYXJlRGF0YSgpCiAgICAgOiBtX21pbmltdW1TaXplRm9yUmVzaXppbmcoZGVmYXVsdE1p
bmltdW1TaXplRm9yUmVzaXppbmcoKSkKIHsKIH0KIAotaW5saW5lIHZvaWQgRWxlbWVudFJhcmVE
YXRhOjpyZXNldENvbXB1dGVkU3R5bGUoRWxlbWVudCogZWxlbWVudCkKK2lubGluZSB2b2lkIEVs
ZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxlKCkKIHsKICAgICBtX2NvbXB1dGVkU3R5
bGUuY2xlYXIoKTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAkocmV2aXNpb24gMzk1
NzcpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzAsMTAgKzI3MCwxMCBAQCBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hFdmVudChQ
YXNzCiAgICAgZXZ0LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVs
ZXModGhpcykpOwogCiAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IGRvY3VtZW50KCktPnZp
ZXcoKTsKLSAgICByZXR1cm4gZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMp
OworICAgIHJldHVybiBkaXNwYXRjaEdlbmVyaWNFdmVudChldnQucmVsZWFzZSgpKTsKIH0KIAot
Ym9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IHBycEV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgRXZlbnRUYXJnZXROb2RlOjpk
aXNwYXRjaEdlbmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKIHsKICAgICBS
ZWZQdHI8RXZlbnQ+IGV2ZW50KHBycEV2ZW50KTsKIApAQCAtNDM1LDggKzQzNSw3IEBAIHZvaWQg
RXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFdpbmRvd0V2ZW4KICAgICAgICAgaWYgKG93bmVyRWxl
bWVudCkgewogICAgICAgICAgICAgUmVmUHRyPEV2ZW50PiBvd25lckV2ZW50ID0gRXZlbnQ6OmNy
ZWF0ZShldmVudFR5cGUsIGZhbHNlLCBjYW5jZWxhYmxlQXJnKTsKICAgICAgICAgICAgIG93bmVy
RXZlbnQtPnNldFRhcmdldChvd25lckVsZW1lbnQpOwotICAgICAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgICAgICAgICBvd25lckVsZW1lbnQtPmRpc3BhdGNoR2VuZXJpY0V2ZW50
KG93bmVyRXZlbnQucmVsZWFzZSgpLCBlYyk7CisgICAgICAgICAgICBvd25lckVsZW1lbnQtPmRp
c3BhdGNoR2VuZXJpY0V2ZW50KG93bmVyRXZlbnQucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAg
IH0KIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmZXZlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwg
Y29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZSk7CiAgICAgYm9vbCBkaXNwYXRj
aFdlYktpdEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CiAgICAgYm9vbCBk
aXNwYXRjaFdlYktpdFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSk7Ci0gICAg
Ym9vbCBkaXNwYXRjaEdlbmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIGJvb2wgZGlzcGF0Y2hHZW5lcmljRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwog
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiwgYm9vbCB1c2VDYXB0
dXJlKTsKIApJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNTQsNiArNTUsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsK
KyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworI2Vu
ZGlmCisKICAgICAgICAgQVNTRVJUKCFtX3BvcnQtPmFjdGl2ZSgpKTsKICAgICAgICAgQVNTRVJU
KGNvbnRleHQgPT0gbV9wb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogCkluZGV4OiBX
ZWJDb3JlL2RvbS9Xb3JrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlci5j
cHAJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9kb20vV29ya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIldvcmtlclRhc2suaCIKICNpbmNsdWRl
ICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExNiw2ICsx
MTcsMTAgQEAgYm9vbCBXb3JrZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAKIHZvaWQg
V29ya2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7CisjaWYg
QVNTRVJUX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKHJlc291cmNlKTsKKyNlbmRpZgorCiAg
ICAgQVNTRVJUKHJlc291cmNlID09IG1fY2FjaGVkU2NyaXB0LmdldCgpKTsKICAgICBpZiAobV9j
YWNoZWRTY3JpcHQtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50
KCk7CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1hNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9k
b20vWE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDYgKzMwMywxMCBAQCB2
b2lkIFhNTFRva2VuaXplcjo6aW5zZXJ0RXJyb3JNZXNzYWdlQmxvCiAKIHZvaWQgWE1MVG9rZW5p
emVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogZmluaXNoZWRPYmopCiB7CisjaWYg
QVNTRVJUX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGZpbmlzaGVkT2JqKTsKKyNlbmRpZgor
CiAgICAgQVNTRVJUKG1fcGVuZGluZ1NjcmlwdCA9PSBmaW5pc2hlZE9iaik7CiAgICAgQVNTRVJU
KG1fcGVuZGluZ1NjcmlwdC0+YWNjZXNzQ291bnQoKSA+IDApOwogICAgICAgICAKSW5kZXg6IFdl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vbWFrZV9u
YW1lcy5wbAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTcsMTQgKzIxNywxNyBAQCBzdWIgcHJpbnRDb25zdHJ1Y3RvcnMK
ICAgICBmb3IgbXkgJG5hbWUgKHNvcnQga2V5cyAldGFncykgewogICAgICAgICBteSAkdWNOYW1l
ID0gJHRhZ3N7JG5hbWV9eydpbnRlcmZhY2VOYW1lJ307CiAKLSAgICAgICAgcHJpbnQgRiAic3Rh
dGljIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4gJHtuYW1lfUNv
bnN0cnVjdG9yKERvY3VtZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKVxuIjsKLSAgICAg
ICAgcHJpbnQgRiAie1xuIjsKICAgICAgICAgaWYgKCR0YWdzeyRuYW1lfXsnY29uc3RydWN0b3JO
ZWVkc0NyZWF0ZWRCeVBhcnNlcid9KSB7Ci0gICAgICAgICAgICBwcmludCBGICIgICAgcmV0dXJu
IG5ldyAke3VjTmFtZX0oJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXM6OiR7bmFtZX1UYWcs
IGRvYywgY3JlYXRlZEJ5UGFyc2VyKTtcbiI7CisgICAgICAgICAgICBwcmludCBGICJzdGF0aWMg
UGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiAke25hbWV9Q29uc3Ry
dWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcilcbiI7CisgICAg
ICAgICAgICBwcmludCBGICJ7XG4iOworICAgICAgICAgICAgcHJpbnQgRiAiICAgIHJldHVybiBu
ZXcgJHt1Y05hbWV9KCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5hbWVzOjoke25hbWV9VGFnLCBk
b2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKTtcbiI7CisgICAgICAgICAgICBwcmludCBGICJ9XG5c
biI7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludCBGICIgICAgcmV0dXJuIG5l
dyAke3VjTmFtZX0oJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXM6OiR7bmFtZX1UYWcsIGRv
Yyk7XG4iOworICAgICAgICAgICAgcHJpbnQgRiAic3RhdGljIFBhc3NSZWZQdHI8JHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudD4gJHtuYW1lfUNvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1
bWVudCwgYm9vbClcbiI7CisgICAgICAgICAgICBwcmludCBGICJ7XG4iOworICAgICAgICAgICAg
cHJpbnQgRiAiICAgIHJldHVybiBuZXcgJHt1Y05hbWV9KCRwYXJhbWV0ZXJzeyduYW1lc3BhY2Un
fU5hbWVzOjoke25hbWV9VGFnLCBkb2N1bWVudCk7XG4iOworICAgICAgICAgICAgcHJpbnQgRiAi
fVxuXG4iOwogICAgICAgICB9Ci0gICAgICAgIHByaW50IEYgIn1cblxuIjsKICAgICB9CiAgICAg
cHJpbnQgRiAiI2VuZGlmXG4iIGlmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ307CiB9
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM5NTc3
KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwNiwxNiArMTAwNiw2IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNT
U1N0eWxlKEMKICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKIH0K
IAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQmxvY2tTdHlsZShDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiAqc3R5bGUsIGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29uc3QgUG9zaXRp
b24gJmVuZCkKLXsKLSAgICBBU1NFUlQoc3RhcnQuaXNOb3ROdWxsKCkpOwotICAgIEFTU0VSVChl
bmQuaXNOb3ROdWxsKCkpOwotICAgIEFTU0VSVChzdGFydC5ub2RlKCktPmluRG9jdW1lbnQoKSk7
Ci0gICAgQVNTRVJUKGVuZC5ub2RlKCktPmluRG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKFJhbmdl
Ojpjb21wYXJlQm91bmRhcnlQb2ludHMoc3RhcnQsIGVuZCkgPD0gMCk7Ci0gICAgCi19Ci0KIHN0
YXRpYyBib29sIGhhc1RleHREZWNvcmF0aW9uUHJvcGVydHkoTm9kZSAqbm9kZSkKIHsKICAgICBp
ZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKQEAgLTExMTUsNyArMTEwNSw3IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmFwcGx5VGV4dERlY29yYXQKICAgICB9CiB9CiAKLXZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoTm9kZSAq
bm9kZSwgY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kLCBib29sIGZv
cmNlKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxl
QXJvdW5kTm9kZShOb2RlKiBub2RlLCBib29sIGZvcmNlKQogewogICAgIE5vZGUgKmhpZ2hlc3RB
bmNlc3RvciA9IGhpZ2hlc3RBbmNlc3RvcldpdGhUZXh0RGVjb3JhdGlvbihub2RlKTsKICAgICAK
QEAgLTExNTIsMTMgKzExNDIsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25U
ZXh0RGVjbwogICAgIC8vIHN0eWxlcyAoY2F1c2VkIGJ5IHN0eWxlc2hlZXRzKSBhbmQgZXhwbGlj
aXRseSBuZWdhdGUgdGV4dAogICAgIC8vIGRlY29yYXRpb24gd2hpbGUgcHVzaGluZyBkb3duLgog
Ci0gICAgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZShzdGFydC5ub2RlKCks
IHN0YXJ0LCBlbmQsIGZhbHNlKTsKKyAgICBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91
bmROb2RlKHN0YXJ0Lm5vZGUoKSwgZmFsc2UpOwogICAgIHVwZGF0ZUxheW91dCgpOwotICAgIHB1
c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoc3RhcnQubm9kZSgpLCBzdGFydCwg
ZW5kLCB0cnVlKTsKKyAgICBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlKHN0
YXJ0Lm5vZGUoKSwgdHJ1ZSk7CiAKLSAgICBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91
bmROb2RlKGVuZC5ub2RlKCksIHN0YXJ0LCBlbmQsIGZhbHNlKTsKKyAgICBwdXNoRG93blRleHRE
ZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlKGVuZC5ub2RlKCksIGZhbHNlKTsKICAgICB1cGRhdGVM
YXlvdXQoKTsKLSAgICBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlKGVuZC5u
b2RlKCksIHN0YXJ0LCBlbmQsIHRydWUpOworICAgIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHls
ZUFyb3VuZE5vZGUoZW5kLm5vZGUoKSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWF4UmFuZ2VP
ZmZzZXQoTm9kZSAqbikKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCShyZXZp
c2lvbiAzOTU3NykKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NywxNCArNjcsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUhU
TUxGb250U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwog
ICAgIHZvaWQgcmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiosIEhUTUxFbGVtZW50Kik7CiAgICAgdm9pZCByZW1vdmVDU1NTdHlsZShDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVCbG9j
a1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICB2b2lkIHJlbW92ZUlubGluZVN0eWxlKFBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQs
IGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIGJvb2wgbm9kZUZ1bGx5U2VsZWN0ZWQoTm9kZSos
IGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3Q7CiAgICAg
Ym9vbCBub2RlRnVsbHlVbnNlbGVjdGVkKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGV4dHJhY3RUZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUqKTsKICAgICBQYXNz
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBleHRyYWN0QW5kTmVnYXRlVGV4dERl
Y29yYXRpb25TdHlsZShOb2RlKik7CiAgICAgdm9pZCBhcHBseVRleHREZWNvcmF0aW9uU3R5bGUo
Tm9kZSosIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSk7Ci0gICAgdm9pZCBwdXNo
RG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIGJvb2wgZm9yY2UpOworICAgIHZvaWQgcHVzaERv
d25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZShOb2RlKiwgYm9vbCBmb3JjZSk7CiAgICAg
dm9pZCBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBdEJvdW5kYXJpZXMoY29uc3QgUG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICAKICAgICAvLyBzdHlsZS1hcHBs
aWNhdGlvbiBoZWxwZXJzCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk5LDcgKzQ5OSw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ28KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSkK
IHsKLSAgICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZShjb2xvciwgMSkpOworICAg
IHNldEZpbGxTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlKGNvbG9yLCBhbHBoYSkpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZl
bCwgZmxvYXQgYWxwaGEpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkocmV2
aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY5LDExICsxNjksMTEgQEAgTm9kZSogSFRNTEZvcm1Db2xsZWN0aW9u
OjpuYW1lZEl0ZW0oY29ucwogICAgIC8vIHRoYXQgYXJlIGFsbG93ZWQgYSBuYW1lIGF0dHJpYnV0
ZS4KICAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7CiAgICAgbV9pZHNEb25lID0gZmFsc2U7Ci0g
ICAgaW5mbygpLT5jdXJyZW50ID0gZ2V0TmFtZWRJdGVtKGlkQXR0ciwgbmFtZSwgdHJ1ZSk7Cisg
ICAgaW5mbygpLT5jdXJyZW50ID0gZ2V0TmFtZWRJdGVtKGlkQXR0ciwgbmFtZSwgY2FzZVNlbnNp
dGl2ZSk7CiAgICAgaWYgKGluZm8oKS0+Y3VycmVudCkKICAgICAgICAgcmV0dXJuIGluZm8oKS0+
Y3VycmVudDsKICAgICBtX2lkc0RvbmUgPSB0cnVlOwotICAgIGluZm8oKS0+Y3VycmVudCA9IGdl
dE5hbWVkSXRlbShuYW1lQXR0ciwgbmFtZSwgdHJ1ZSk7CisgICAgaW5mbygpLT5jdXJyZW50ID0g
Z2V0TmFtZWRJdGVtKG5hbWVBdHRyLCBuYW1lLCBjYXNlU2Vuc2l0aXZlKTsKICAgICByZXR1cm4g
aW5mbygpLT5jdXJyZW50OwogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lv
biAzOTU3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0YWdNYXRjaChjb25zdCBj
aGFyKiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgVG9rZW46OmFkZEF0dHJp
YnV0ZShEb2N1bWVudCogZG9jLCBBdG9taWNTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVZhbHVlLCBib29sIHZpZXdTb3VyY2VNb2RlKQoraW5saW5lIHZvaWQg
VG9rZW46OmFkZEF0dHJpYnV0ZShBdG9taWNTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVZhbHVlLCBib29sIHZpZXdTb3VyY2VNb2RlKQogewogICAgIGlmICgh
YXR0ck5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVCghYXR0ck5hbWUuY29udGFpbnMo
Jy8nKSk7CkBAIC0xMzA5LDcgKzEzMDksNyBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9r
ZW5pemVyOjpwYXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4u
YWRkVmlld1NvdXJjZUNoYXIoY3VyY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBzcmMu
YWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRBdHRyaWJ1dGUobV9kb2Ms
IG1fYXR0ck5hbWUsIGVtcHR5QXRvbSwgaW5WaWV3U291cmNlTW9kZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0dHJpYnV0ZShtX2F0dHJOYW1lLCBlbXB0
eUF0b20sIGluVmlld1NvdXJjZU1vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rl
c3QgPSBtX2J1ZmZlcjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRl
KFNlYXJjaEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0SXNTbGFzaCA9
IGZhbHNlOwpAQCAtMTM2Myw3ICsxMzYzLDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRv
a2VuaXplcjo6cGFycwogICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJp
YnV0ZVZhbHVlKG1fYnVmZmVyICsgMSwgbV9kZXN0IC0gbV9idWZmZXIgLSAxKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlVmFsdWUuY29udGFpbnMoJy8nKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2F0dHJOYW1lID0gYXR0cmlidXRlVmFsdWU7IC8vIEp1
c3QgbWFrZSB0aGUgbmFtZS92YWx1ZSBtYXRjaC4gKEZJWE1FOiBJcyB0aGlzIHNvbWUgV2luSUUg
cXVpcms/KQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkQXR0cmli
dXRlKG1fZG9jLCBtX2F0dHJOYW1lLCBhdHRyaWJ1dGVWYWx1ZSwgaW5WaWV3U291cmNlTW9kZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0dHJpYnV0ZSht
X2F0dHJOYW1lLCBhdHRyaWJ1dGVWYWx1ZSwgaW5WaWV3U291cmNlTW9kZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoJ3gnKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJjaEF0dHJpYnV0ZSk7CkBA
IC0xMzg5LDcgKzEzODksNyBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpw
YXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZp
ZXdTb3VyY2VDaGFyKCd4Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlu
Vmlld1NvdXJjZU1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRU
b2tlbi5hZGRWaWV3U291cmNlQ2hhcigndicpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50VG9rZW4uYWRkQXR0cmlidXRlKG1fZG9jLCBtX2F0dHJOYW1lLCBhdHRyaWJ1dGVWYWx1
ZSwgaW5WaWV3U291cmNlTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dFRva2VuLmFkZEF0dHJpYnV0ZShtX2F0dHJOYW1lLCBhdHRyaWJ1dGVWYWx1ZSwgaW5WaWV3U291
cmNlTW9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVzdCA9IG1fYnVmZmVyOwog
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0VGFnU3RhdGUoU2VhcmNoQXR0cmlidXRl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7CkBAIC0xNDE5LDcg
KzE0MTksNyBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpwYXJzCiAgICAg
ICAgICAgICAgICAgICAgIC8vICcvJyBkb2VzIG5vdCBkZWxpbWl0IGluIElFIQogICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNBU0NJSVNwYWNlKGN1cmNoYXIpIHx8IGN1cmNoYXIgPT0gJz4nKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlVmFsdWUobV9i
dWZmZXIgKyAxLCBtX2Rlc3QgLSBtX2J1ZmZlciAtIDEpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50VG9rZW4uYWRkQXR0cmlidXRlKG1fZG9jLCBtX2F0dHJOYW1lLCBhdHRyaWJ1
dGVWYWx1ZSwgaW5WaWV3U291cmNlTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudFRva2VuLmFkZEF0dHJpYnV0ZShtX2F0dHJOYW1lLCBhdHRyaWJ1dGVWYWx1ZSwgaW5W
aWV3U291cmNlTW9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZpZXdTb3Vy
Y2VNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRk
Vmlld1NvdXJjZUNoYXIoJ3YnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVzdCA9IG1f
YnVmZmVyOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5oCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MVG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAg
c3RydWN0IFRva2VuIHsKICAgICB7IH0KICAgICB+VG9rZW4oKSB7IH0KIAotICAgIHZvaWQgYWRk
QXR0cmlidXRlKERvY3VtZW50KiwgQXRvbWljU3RyaW5nJiBhdHRyTmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2LCBib29sIHZpZXdTb3VyY2VNb2RlKTsKKyAgICB2b2lkIGFkZEF0dHJpYnV0ZShB
dG9taWNTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHYsIGJvb2wgdmlld1Nv
dXJjZU1vZGUpOwogCiAgICAgYm9vbCBpc09wZW5UYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgZnVs
bE5hbWUpIGNvbnN0IHsgcmV0dXJuIGJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09
IHRhZ05hbWU7IH0KICAgICBib29sIGlzQ2xvc2VUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgZnVs
bE5hbWUpIGNvbnN0IHsgcmV0dXJuICFiZWdpblRhZyAmJiBmdWxsTmFtZS5sb2NhbE5hbWUoKSA9
PSB0YWdOYW1lOyB9CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1Nl
cnZlci5jcHAJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlw
dERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczLDkgKzM3MywxNiBAQCB2b2lk
IEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwCiAgICAgc2V0SmF2YVNjcmlwdFBh
dXNlZChmcmFtZS0+dmlldygpLCBwYXVzZWQpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQorCit2
b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZChGcmFtZVZpZXcq
LCBib29sKQoreworfQorCisjZWxzZQorCiB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
SmF2YVNjcmlwdFBhdXNlZChGcmFtZVZpZXcqIHZpZXcsIGJvb2wgcGF1c2VkKQogewotI2lmICFQ
TEFURk9STShNQUMpCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKQEAgLTM4OSw5
ICszOTYsMTAgQEAgdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFTY3JpcAogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRn
ZXQpLT5zZXRKYXZhU2NyaXB0UGF1c2VkKHBhdXNlZCk7CiAgICAgfQotI2VuZGlmCiB9CiAKKyNl
bmRpZgorCiB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChQYWdlKiBw
YWdlKQogewogICAgIGlmIChtX3BhdXNlZCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2aXNpb24gMzk1NzcpCisrKyBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMzEsNiArMjMyLDkgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZpbmlzaGVkTG9hZAogCiB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6ZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZShEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogeworI2lmIEFTU0VSVF9ESVNBQkxFRAorICAgIFVOVVNFRF9QQVJBTShsb2FkZXIpOwor
I2VuZGlmCiAgICAgQVNTRVJUKG1fY2FjaGVDYW5kaWRhdGVzLmNvbnRhaW5zKGxvYWRlcikgfHwg
bV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxvYWRlcikpOwogCiAgICAgLy8g
Tm90ZSB0aGF0IGNhY2hlVXBkYXRlRmFpbGVkKCkgY2FuIGNhdXNlIHRoZSBjYWNoZSBncm91cCB0
byBiZSBkZWxldGVkLgpJbmRleDogV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCShyZXZpc2lv
biAzOTU3NykKKysrIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIu
aCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IApAQCAtMTAzLDYgKzEwNCwxMCBAQCB2b2lkIEljb25Mb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZShTdWJyCiAKIHZvaWQgSWNvbkxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgY2hhciosIGludCBzaXplKQogeworI2lmIExPR19ESVNBQkxFRAor
ICAgIFVOVVNFRF9QQVJBTShsb2FkZXIpOworICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyNlbmRp
ZgogICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSgpIC0g
TG9hZGVyICVwLCBudW1iZXIgb2YgYnl0ZXMgJWkiLCBsb2FkZXIsIHNpemUpOwogfQogCkluZGV4
OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDcgKzM0Niw3IEBAIFN0b3JhZ2UqIERPTVdpbmRv
dzo6bG9jYWxTdG9yYWdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBMb2NhbFN0
b3JhZ2UqIGxvY2FsU3RvcmFnZSA9IHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdlKCk7Ci0gICAg
UmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGxvY2FsU3RvcmFnZSA/IGxvY2FsU3Rv
cmFnZS0+c3RvcmFnZUFyZWEobV9mcmFtZSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpIDog
MDsgCisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGxvY2FsU3RvcmFnZSA/
IGxvY2FsU3RvcmFnZS0+c3RvcmFnZUFyZWEoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpIDog
MDsgCiAgICAgaWYgKHN0b3JhZ2VBcmVhKQogICAgICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0b3Jh
Z2U6OmNyZWF0ZShtX2ZyYW1lLCBzdG9yYWdlQXJlYS5yZWxlYXNlKCkpOwogCkluZGV4OiBXZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTEyNiw3ICsxMjcsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBkb2N1CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmRyYWdJc01v
dmUoU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uLCBEcmFnRGF0YSogZHJhZ0RhdGEpIAor
Ym9vbCBEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxl
Y3Rpb24sIERyYWdEYXRhKikgCiB7CiAgICAgcmV0dXJuIG1fZG9jdW1lbnQgPT0gbV9kcmFnSW5p
dGlhdG9yCiAgICAgICAgICYmIHNlbGVjdGlvbi0+aXNDb250ZW50RWRpdGFibGUoKQpAQCAtMzI0
LDkgKzMyNSwxNCBAQCBzdGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChGcmFtCiAK
IGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEsIERy
YWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrKQogeworI2lmIEFTU0VSVF9ESVNBQkxFRAor
ICAgIFVOVVNFRF9QQVJBTShhY3Rpb25NYXNrKTsKKyNlbmRpZgorCiAgICAgQVNTRVJUKGRyYWdE
YXRhKTsKLSAgICBBU1NFUlQoIW1faXNIYW5kbGluZ0RyYWcpOwogICAgIEFTU0VSVChhY3Rpb25N
YXNrICYgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCk7CisKKyAgICBBU1NFUlQoIW1faXNIYW5k
bGluZ0RyYWcpOwogICAgIAogICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyLm1tCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNvcmUvcGFnZS9tYWMvQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxNyw3ICs0MTcsNyBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFNwZWxsaW5nCiAgICAgfQogfQogCi1zdGF0aWMg
dm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEhlYWRpbmdMZXZlbChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvYmplY3QsIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIE5TUmFuZ2UgcmFuZ2UpCitzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0
cmluZ1NldEhlYWRpbmdMZXZlbChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5n
LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBOU1JhbmdlIHJhbmdlKQogewogICAgIGludCBwYXJl
bnRIZWFkaW5nTGV2ZWwgPSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoZWFkaW5nTGV2ZWwo
cmVuZGVyZXItPnBhcmVudCgpLT5lbGVtZW50KCkpOwogICAgIApAQCAtNDcxLDcgKzQ3MSw3IEBA
IHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxlbWVudCgKICAgICAgICAgW2F0dHJT
dHJpbmcgcmVtb3ZlQXR0cmlidXRlOmF0dHJpYnV0ZSByYW5nZTpyYW5nZV07CiB9CiAKLXN0YXRp
YyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoQWNjZXNzaWJpbGl0eU9iamVjdCog
b2JqZWN0LCBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOb2RlKiBub2Rl
LCBpbnQgb2Zmc2V0LCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5ndGgpCitzdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcq
IGF0dHJTdHJpbmcsIE5vZGUqIG5vZGUsIGludCBvZmZzZXQsIGNvbnN0IFVDaGFyKiBjaGFycywg
aW50IGxlbmd0aCkKIHsKICAgICAvLyBza2lwIGludmlzaWJsZSB0ZXh0CiAgICAgaWYgKCFub2Rl
LT5yZW5kZXJlcigpKQpAQCAtNDkzLDcgKzQ5Myw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRl
ZFN0cmluZ0FwcGVuZFRleHQKICAgICAKICAgICAvLyBzZXQgbmV3IGF0dHJpYnV0ZXMKICAgICBB
WEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKGF0dHJTdHJpbmcsIG5vZGUtPnJlbmRlcmVyKCksIGF0
dHJTdHJpbmdSYW5nZSk7Ci0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwob2Jq
ZWN0LCBhdHRyU3RyaW5nLCBub2RlLT5yZW5kZXJlcigpLCBhdHRyU3RyaW5nUmFuZ2UpOworICAg
IEFYQXR0cmlidXRlU3RyaW5nU2V0SGVhZGluZ0xldmVsKGF0dHJTdHJpbmcsIG5vZGUtPnJlbmRl
cmVyKCksIGF0dHJTdHJpbmdSYW5nZSk7CiAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1
b3RlTGV2ZWwoYXR0clN0cmluZywgbm9kZS0+cmVuZGVyZXIoKSwgYXR0clN0cmluZ1JhbmdlKTsK
ICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEVsZW1lbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmls
aXR5TGlua1RleHRBdHRyaWJ1dGUsIEFYTGlua0VsZW1lbnRGb3JOb2RlKG5vZGUpLCBhdHRyU3Ry
aW5nUmFuZ2UpOwogICAgIApAQCAtNTQzLDcgKzU0Myw3IEBAIHN0YXRpYyBOU1N0cmluZyogbnNT
dHJpbmdGb3JSZXBsYWNlZE5vZGUKIAogICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMg
dGV4dHVhbCBub2RlLCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFj
aG1lbnRzIiBpbiBBWCkKICAgICAgICAgaWYgKGl0Lmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAg
ICAgIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQobV9vYmplY3QsIGF0dHJTdHJpbmcsIG5v
ZGUsIG9mZnNldCwgaXQuY2hhcmFjdGVycygpLCBpdC5sZW5ndGgoKSk7CisgICAgICAgICAgICBB
WEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsIG5vZGUsIG9mZnNldCwgaXQu
Y2hhcmFjdGVycygpLCBpdC5sZW5ndGgoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBOb2RlKiByZXBsYWNlZE5vZGUgPSBub2RlLT5jaGlsZE5vZGUob2Zmc2V0KTsKICAgICAgICAg
ICAgIE5TU3RyaW5nICphdHRhY2htZW50U3RyaW5nID0gbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUo
cmVwbGFjZWROb2RlKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvV2ViRGFzaGJvYXJkUmVnaW9u
Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJEYXNoYm9hcmRSZWdpb24ubQko
cmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL1dlYkRhc2hib2FyZFJlZ2lvbi5t
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMSArMjIsMTYgQEAKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCiAgKi8KLSNpbmNsdWRlICJjb25maWcuaCIKKworI2ltcG9ydCAiY29uZmln
LmgiCiAjaW1wb3J0ICJXZWJEYXNoYm9hcmRSZWdpb24uaCIKIAorI2ltcG9ydCA8d3RmL1VudXNl
ZFBhcmFtLmg+CisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisKIEBpbXBsZW1lbnRh
dGlvbiBXZWJEYXNoYm9hcmRSZWdpb24KKwogLSBpbml0V2l0aFJlY3Q6KE5TUmVjdClyIGNsaXA6
KE5TUmVjdCljIHR5cGU6KFdlYkRhc2hib2FyZFJlZ2lvblR5cGUpdAogewogICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CkBAIC0zOCw2ICs0Myw4IEBACiAKIC0gKGlkKWNvcHlXaXRoWm9uZTooTlNa
b25lICopem9uZQogeworICAgIFVOVVNFRF9QQVJBTSh6b25lKTsKKwogICAgIHJldHVybiBbc2Vs
ZiByZXRhaW5dOwogfQogCkBAIC03NCw0ICs4MSw1IEBACiB9CiAKIEBlbmQKKwogI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk3LDE3ICs1OTcsMjUgQEAgYm9vbCBLVVJMOjpoYXNS
ZWYoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYWdtZW50RW5kICE9IG1fcXVlcnlFbmQ7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRQcm90b2NvbElzR29vZChjb25zdCBjaGFyKiBwcm90
b2NvbCkKKyNpZmRlZiBOREVCVUcKKworc3RhdGljIGlubGluZSB2b2lkIGFzc2VydFByb3RvY29s
SXNHb29kKGNvbnN0IGNoYXIqKQoreworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBhc3NlcnRQ
cm90b2NvbElzR29vZChjb25zdCBjaGFyKiBwcm90b2NvbCkKIHsKLSNpZm5kZWYgTkRFQlVHCiAg
ICAgY29uc3QgY2hhciogcCA9IHByb3RvY29sOwogICAgIHdoaWxlICgqcCkgewogICAgICAgICBB
U1NFUlQoKnAgPiAnICcgJiYgKnAgPCAweDdGICYmICEoKnAgPj0gJ0EnICYmICpwIDw9ICdaJykp
OwogICAgICAgICArK3A7CiAgICAgfQotI2VuZGlmCiB9CiAKKyNlbmRpZgorCiBib29sIEtVUkw6
OnByb3RvY29sSXMoY29uc3QgY2hhciogcHJvdG9jb2wpIGNvbnN0CiB7CiAgICAgLy8gRG8gdGhl
IGNvbXBhcmlzb24gd2l0aG91dCBtYWtpbmcgYSBuZXcgc3RyaW5nIG9iamVjdC4KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
VGltZXIuY3BwCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGltZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTUgKzEzMSwyOCBAQCBwdWJsaWM6CiAKICAgICBpbnQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKLSAgICB2b2lkIGNoZWNrQ29uc2lz
dGVuY3koaW50IG9mZnNldCA9IDApIGNvbnN0IHsKLSAgICAgICAgQVNTRVJUKG1faW5kZXggKyBv
ZmZzZXQgPj0gMCk7Ci0gICAgICAgIEFTU0VSVChtX2luZGV4ICsgb2Zmc2V0IDw9ICh0aW1lckhl
YXAgPyBzdGF0aWNfY2FzdDxpbnQ+KHRpbWVySGVhcC0+c2l6ZSgpKSA6IDApKTsKLSAgICB9Cisg
ICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KGludCBvZmZzZXQgPSAwKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBpbnQgbV9pbmRleDsKIH07CiAKKyNpZiBBU1NFUlRfRElTQUJMRUQKKworaW5saW5l
IHZvaWQgVGltZXJIZWFwSXRlcmF0b3I6OmNoZWNrQ29uc2lzdGVuY3koaW50KSBjb25zdAorewor
fQorCisjZWxzZQorCit2b2lkIFRpbWVySGVhcEl0ZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KGlu
dCBvZmZzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5kZXggKyBvZmZzZXQgPj0gMCk7Cisg
ICAgQVNTRVJUKG1faW5kZXggKyBvZmZzZXQgPD0gKHRpbWVySGVhcCA/IHN0YXRpY19jYXN0PGlu
dD4odGltZXJIZWFwLT5zaXplKCkpIDogMCkpOworfQorCisjZW5kaWYKKwogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShUaW1lckhlYXBJdGVyYXRvciBhLCBUaW1lckhlYXBJdGVyYXRvciBiKSB7IHJl
dHVybiBhLmluZGV4KCkgPT0gYi5pbmRleCgpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFRp
bWVySGVhcEl0ZXJhdG9yIGEsIFRpbWVySGVhcEl0ZXJhdG9yIGIpIHsgcmV0dXJuIGEuaW5kZXgo
KSAhPSBiLmluZGV4KCk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yPChUaW1lckhlYXBJdGVyYXRv
ciBhLCBUaW1lckhlYXBJdGVyYXRvciBiKSB7IHJldHVybiBhLmluZGV4KCkgPCBiLmluZGV4KCk7
IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHJldmlzaW9u
IDM5NTc3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxNCArMzAsMTYgQEAKICNkZWZpbmUgR2x5cGhCdWZmZXJfaAogCiAj
aW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSA8QXBwbGlj
YXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZWxpZiBQTEFURk9STShDQUlS
TykKLSNpbmNsdWRlIDxjYWlyby5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaWYgUExBVEZPUk0oQ0FJUk8pCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEyNSw2ICsxMjcsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsKICNlbHNlCisgICAgICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7CiAgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKICNlbmRp
ZgogICAgIH0KQEAgLTEzMiw2ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoR2x5cGgg
Z2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0aCwgY29uc3QgRmxv
YXRTaXplKiBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9u
dCk7CisKICNpZiBQTEFURk9STShDQUlSTykKICAgICAgICAgY2Fpcm9fZ2x5cGhfdCBjYWlyb0ds
eXBoOwogICAgICAgICBjYWlyb0dseXBoLmluZGV4ID0gZ2x5cGg7CkBAIC0xNTIsNiArMTU2LDgg
QEAgcHVibGljOgogICAgICAgICAgICAgbV9vZmZzZXRzLmFwcGVuZCgqb2Zmc2V0KTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbV9vZmZzZXRzLmFwcGVuZChGbG9hdFNpemUoKSk7CisjZWxz
ZQorICAgICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICNlbmRpZgogICAgIH0KICAgICAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3Bw
CShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVk
Rm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNiArNDUsMjcgQEAgY29uc3QgU2lt
cGxlRm9udERhdGEqIFNlZ21lbnRlZEZvbnREYXRhOgogICAgIHJldHVybiBtX3Jhbmdlc1swXS5m
b250RGF0YSgpOwogfQogCi1ib29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Citib29sIFNlZ21l
bnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiB7CiAgICAg
VmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQo
KTsKICAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5mcm9t
KCkgPD0gY2hhcmFjdGVyc1swXSAmJiBpdC0+dG8oKSA+PSBjaGFyYWN0ZXJzWzBdKQorICAgICAg
ICBpZiAoYyA+PSBpdC0+ZnJvbSgpICYmIGMgPD0gaXQtPnRvKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFNlZ21lbnRlZEZv
bnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgpIGNvbnN0Cit7CisgICAgVUNoYXIzMiBjOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyApIHsKKyAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVuZ3RoLCBjKQor
ICAgICAgICBpZiAoIWNvbnRhaW5zQ2hhcmFjdGVyKGMpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBTZWdtZW50ZWRGb250RGF0
YTo6aXNDdXN0b21Gb250KCkgY29uc3QKIHsKICAgICAvLyBBbGwgc2VnbWVudGVkIGZvbnRzIGFy
ZSBjdXN0b20gZm9udHMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRl
ZEZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdt
ZW50ZWRGb250RGF0YS5oCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTUsMTEgQEAg
Y2xhc3MgU2VnbWVudGVkRm9udERhdGEgOiBwdWJsaWMgRm9udERhdAogcHVibGljOgogICAgIHZp
cnR1YWwgflNlZ21lbnRlZEZvbnREYXRhKCk7CiAKKyAgICB2b2lkIGFwcGVuZFJhbmdlKGNvbnN0
IEZvbnREYXRhUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2VzLmFwcGVuZChyYW5nZSk7IH0KKyAgICB1
bnNpZ25lZCBudW1SYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX3Jhbmdlcy5zaXplKCk7IH0KKyAg
ICBjb25zdCBGb250RGF0YVJhbmdlJiByYW5nZUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IG1fcmFuZ2VzW2ldOyB9CisKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgpIGNvbnN0Owog
CkBAIC02MiwxMSArNjcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1NlZ21lbnRlZCgpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBlbmRSYW5nZShjb25zdCBGb250RGF0YVJhbmdlJiByYW5nZSkgeyBtX3Jhbmdlcy5hcHBl
bmQocmFuZ2UpOyB9Ci0gICAgdW5zaWduZWQgbnVtUmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9y
YW5nZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgRm9udERhdGFSYW5nZSYgcmFuZ2VBdCh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBtX3Jhbmdlc1tpXTsgfQorICAgIGJvb2wgY29udGFpbnNDaGFy
YWN0ZXIoVUNoYXIzMikgY29uc3Q7CiAKLXByaXZhdGU6CiAgICAgVmVjdG9yPEZvbnREYXRhUmFu
Z2UsIDE+IG1fcmFuZ2VzOwogfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHJldmlzaW9uIDM5
NTc3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxNCBAQAogI2ltcG9ydCAiTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisj
aW1wb3J0ICJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9y
dCAiS1VSTC5oIgotI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5o
IgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCA8UVRLaXQvUVRL
aXQuaD4KICNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvVW51c2Vk
UGFyYW0uaD4KIAogI2lmIERSQVdfRlJBTUVfUkFURQogI2ltcG9ydCAiRm9udC5oIgpAQCAtMjM5
LDcgKzI0MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVE1vdmllKGMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om1fcXRN
b3ZpZS5nZXQoKV07CiB9CiAKLXN0YXRpYyB2b2lkIG1haW5UaHJlYWRTZXROZWVkc0Rpc3BsYXko
aWQgc2VsZiwgU0VMIF9jbWQpCitzdGF0aWMgdm9pZCBtYWluVGhyZWFkU2V0TmVlZHNEaXNwbGF5
KGlkIHNlbGYsIFNFTCkKIHsKICAgICBpZCBtb3ZpZVZpZXcgPSBbc2VsZiBzdXBlcnZpZXddOwog
ICAgIEFTU0VSVCghbW92aWVWaWV3IHx8IFttb3ZpZVZpZXcgaXNLaW5kT2ZDbGFzczpbUVRNb3Zp
ZVZpZXcgY2xhc3NdXSk7CkBAIC05NzEsNiArOTcyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmRpc2FibGVVbnN1cHBvcgogCiAtICh2b2lkKWxvYWRTdGF0ZUNoYW5nZWQ6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCiB7CisgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7
CiAgICAgaWYgKG1fZGVsYXlDYWxsYmFja3MpCiAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rv
cjpfY21kIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07CiAgICAgZWxzZQpAQCAtOTc5LDYg
Kzk4MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkaXNhYmxlVW5zdXBwb3IKIAogLSAo
dm9pZClyYXRlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKKyAgICBV
TlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsKICAgICBpZiAobV9kZWxheUNhbGxiYWNrcykKICAg
ICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxh
eTowXTsKICAgICBlbHNlCkBAIC05ODcsNiArOTkwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmRpc2FibGVVbnN1cHBvcgogCiAtICh2b2lkKXNpemVDaGFuZ2VkOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgogeworICAgIFVOVVNFRF9QQVJBTShub3RpZmljYXRpb24pOwogICAg
IGlmIChtX2RlbGF5Q2FsbGJhY2tzKQogICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6X2Nt
ZCB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBdOwogICAgIGVsc2UKQEAgLTk5NSw2ICs5OTks
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlzYWJsZVVuc3VwcG9yCiAKIC0gKHZvaWQp
dGltZUNoYW5nZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CisgICAgVU5VU0VE
X1BBUkFNKG5vdGlmaWNhdGlvbik7CiAgICAgaWYgKG1fZGVsYXlDYWxsYmFja3MpCiAgICAgICAg
IFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpfY21kIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07
CiAgICAgZWxzZQpAQCAtMTAwMyw2ICsxMDA4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmRpc2FibGVVbnN1cHBvcgogCiAtICh2b2lkKWRpZEVuZDooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KIHsKKyAgICBVTlVTRURfUEFSQU0obm90aWZpY2F0aW9uKTsKICAgICBpZiAobV9k
ZWxheUNhbGxiYWNrcykKICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9i
amVjdDpuaWwgYWZ0ZXJEZWxheTowXTsKICAgICBlbHNlCkBAIC0xMDExLDYgKzEwMTcsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlzYWJsZVVuc3VwcG9yCiAKIC0gKHZvaWQpbmV3SW1h
Z2VBdmFpbGFibGU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CisgICAgVU5VU0VE
X1BBUkFNKG5vdGlmaWNhdGlvbik7CiAgICAgW3NlbGYgcmVwYWludF07CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0JKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOSAr
MzMsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0KLQotSW50U2l6ZSBkcmFnSW1hZ2VT
aXplKERyYWdJbWFnZVJlZiBpbWFnZSkKK0ludFNpemUgZHJhZ0ltYWdlU2l6ZShSZXRhaW5QdHI8
TlNJbWFnZT4gaW1hZ2UpCiB7CiAgICAgcmV0dXJuIChJbnRTaXplKVtpbWFnZS5nZXQoKSBzaXpl
XTsKIH0KIAotdm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlKQordm9pZCBk
ZWxldGVEcmFnSW1hZ2UoUmV0YWluUHRyPE5TSW1hZ2U+KQogewotICAgIC8vRHJhZ0ltYWdlUmVm
IGlzIGEgUmV0YWluUHRyLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgZGVsZXRlIGl0
CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZs
b2F0U2l6ZSBzY2FsZSkKK1JldGFpblB0cjxOU0ltYWdlPiBzY2FsZURyYWdJbWFnZShSZXRhaW5Q
dHI8TlNJbWFnZT4gaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkKIHsKICAgICBOU1NpemUgb3JpZ2lu
YWxTaXplID0gW2ltYWdlLmdldCgpIHNpemVdOwogICAgIE5TU2l6ZSBuZXdTaXplID0gTlNNYWtl
U2l6ZSgob3JpZ2luYWxTaXplLndpZHRoICogc2NhbGUud2lkdGgoKSksIChvcmlnaW5hbFNpemUu
aGVpZ2h0ICogc2NhbGUuaGVpZ2h0KCkpKTsKQEAgLTU2LDcgKzUzLDcgQEAgRHJhZ0ltYWdlUmVm
IHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZgogICAgIHJldHVybiBpbWFnZTsKIH0KICAgICAK
LURyYWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oRHJhZ0ltYWdlUmVmIGlt
YWdlLCBmbG9hdCBkZWx0YSkKK1JldGFpblB0cjxOU0ltYWdlPiBkaXNzb2x2ZURyYWdJbWFnZVRv
RnJhY3Rpb24oUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBmbG9hdCBkZWx0YSkKIHsKICAgICBS
ZXRhaW5QdHI8TlNJbWFnZT4gZGlzc29sdmVkSW1hZ2UoQWRvcHROUywgW1tOU0ltYWdlIGFsbG9j
XSBpbml0V2l0aFNpemU6W2ltYWdlLmdldCgpIHNpemVdXSk7CiAgICAgCkBAIC03NiwxNCArNzMs
MTQgQEAgRHJhZ0ltYWdlUmVmIGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbgogICAgIHJldHVy
biBpbWFnZTsKIH0KICAgICAgICAgCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUlt
YWdlKEltYWdlKiBpbWFnZSkKK1JldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VGcm9t
SW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAgIERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UoQWRvcHRO
UywgW2ltYWdlLT5nZXROU0ltYWdlKCkgY29weV0pOworICAgIFJldGFpblB0cjxOU0ltYWdlPiBk
cmFnSW1hZ2UoQWRvcHROUywgW2ltYWdlLT5nZXROU0ltYWdlKCkgY29weV0pOwogICAgIFtkcmFn
SW1hZ2UuZ2V0KCkgc2V0U2l6ZTooTlNTaXplKShpbWFnZS0+c2l6ZSgpKV07CiAgICAgcmV0dXJu
IGRyYWdJbWFnZTsKIH0KICAgICAKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9y
Q2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdlKQorUmV0YWluUHRyPE5TSW1hZ2U+IGNyZWF0
ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSogaW1hZ2UpCiB7CiAgICAg
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSA9IGltYWdlLT5yZXNwb25zZSgpLnN1Z2dlc3RlZEZpbGVu
YW1lKCk7CiAgICAgTlNTdHJpbmcgKmV4dGVuc2lvbiA9IG5pbDsKQEAgLTkxLDExICs4OCwxMiBA
QCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlCiAgICAgCiAgICAgaWYg
KGRvdEluZGV4ID4gMCAmJiBkb3RJbmRleCA8IChpbnQpKGZpbGVuYW1lLmxlbmd0aCgpIC0gMSkp
IC8vIHJlcXVpcmUgdGhhdCBhIC4gZXhpc3RzIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5k
IGJlZm9yZSB0aGUgbGFzdAogICAgICAgICBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmco
ZG90SW5kZXggKyAxKTsKLSAgICBlbHNlCi0gICAgICAgIC8vSXQgbWlnaHQgYmUgd29ydGggZG9p
bmcgYSBmdXJ0aGVyIGxvb2sgdXAgdG8gcHVsbCB0aGUgZXh0ZW5zaW9uIGZyb20gdGhlIG1pbWV0
eXBlCisgICAgZWxzZSB7CisgICAgICAgIC8vIEl0IG1pZ2h0IGJlIHdvcnRoIGRvaW5nIGEgZnVy
dGhlciBsb29rdXAgdG8gcHVsbCB0aGUgZXh0ZW5zaW9uIGZyb20gdGhlIE1JTUUgdHlwZS4KICAg
ICAgICAgZXh0ZW5zaW9uID0gQCIiOworICAgIH0KICAgICAKLSAgICByZXR1cm4gRHJhZ0ltYWdl
UmVmKFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBpY29uRm9yRmlsZVR5cGU6ZXh0ZW5z
aW9uXSk7CisgICAgcmV0dXJuIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBpY29uRm9y
RmlsZVR5cGU6ZXh0ZW5zaW9uXTsKICAgICAgCiB9CiAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQs
OSArMzQsOSBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhckNs
aWVudC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgotCiAjaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogLy8gRklYTUU6IFRoZXJl
IGFyZSByZXBhaW50aW5nIHByb2JsZW1zIGR1ZSB0byBBcXVhIHNjcm9sbCBiYXIgYnV0dG9ucycg
dmlzdWFsIG92ZXJmbG93LgogCkBAIC01OCw4ICs1OCwxMCBAQCBzdGF0aWMgSGFzaFNldDxTY3Jv
bGxiYXIqPiogZ1Njcm9sbGJhcnM7CiAKIEBpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQcmVmc09i
c2VydmVyCiAKLSsgKHZvaWQpYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24q
KXRoZU5vdGlmaWNhdGlvbgorKyAodm9pZClhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOihOU05vdGlm
aWNhdGlvbiopbm90aWZpY2F0aW9uCiB7CisgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7
CisKICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KFNjcm9sbGJhclRoZW1lOjpu
YXRpdmVUaGVtZSgpKS0+cHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAgICAgaWYgKCFnU2Nyb2xsYmFy
cykKICAgICAgICAgcmV0dXJuOwpAQCAtNzAsOCArNzIsMTAgQEAgc3RhdGljIEhhc2hTZXQ8U2Ny
b2xsYmFyKj4qIGdTY3JvbGxiYXJzOwogICAgIH0KIH0KIAotKyAodm9pZCliZWhhdmlvclByZWZz
Q2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXRoZU5vdGlmaWNhdGlvbgorKyAodm9pZCliZWhhdmlv
clByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbgogeworICAgIFVOVVNF
RF9QQVJBTShub3RpZmljYXRpb24pOworCiAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVN
YWMqPihTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKSktPnByZWZlcmVuY2VzQ2hhbmdlZCgp
OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9TaGFyZWRUaW1lck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9TaGFyZWRUaW1lck1hYy5tbQkocmV2aXNp
b24gMzk1NzcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9TaGFyZWRUaW1lck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0
ICJTaGFyZWRUaW1lci5oIgogCi0jaW5jbHVkZSA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW1wb3J0IDx3dGYvVW51c2VkUGFyYW0uaD4KIAogQGNsYXNzIFdlYkNvcmVQb3dlck5vdGlmaWVy
OwogCkBAIC02MCw2ICs2MCw4IEBAIHN0YXRpYyB2b2lkIHRpbWVyRmlyZWQoQ0ZSdW5Mb29wVGlt
ZXJSZWYKIAogLSAodm9pZClkaWRXYWtlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgog
eworICAgIFVOVVNFRF9QQVJBTShub3RpZmljYXRpb24pOworCiAgICAgaWYgKFdlYkNvcmU6OnNo
YXJlZFRpbWVyKSB7CiAgICAgICAgIFdlYkNvcmU6OnN0b3BTaGFyZWRUaW1lcigpOwogICAgICAg
ICBXZWJDb3JlOjp0aW1lckZpcmVkKDAsIDApOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViQ29yZUtleUdlbmVyYXRvci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkNvcmVLZXlHZW5lcmF0b3IubQkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlS2V5R2VuZXJhdG9yLm0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbXBvcnQgIldlYkNvcmVLZXlHZW5lcmF0b3IuaCIKIAogI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBzdGF0aWMgV2ViQ29y
ZUtleUdlbmVyYXRvciAqc2hhcmVkR2VuZXJhdG9yOwogCkBAIC01Miw2ICs1MywxMCBAQCBzdGF0
aWMgV2ViQ29yZUtleUdlbmVyYXRvciAqc2hhcmVkR2VuZXJhCiAKIC0gKE5TU3RyaW5nICopc2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nV2l0aFN0cmVuZ3RoSW5kZXg6KHVuc2lnbmVk
KWluZGV4IGNoYWxsZW5nZTooTlNTdHJpbmcgKiljaGFsbGVuZ2UgcGFnZVVSTDooTlNVUkwgKilw
YWdlVVJMCiB7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oY2hh
bGxlbmdlKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZVVSTCk7CisKICAgICByZXR1cm4gbmlsOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJGb250Q2FjaGUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViRm9udENhY2hlLm1tCShyZXZpc2lvbiAzOTU3
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkZvbnRDYWNoZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsNyBAQCB0eXBlZGVmIGludCBOU0ludGVnZXI7CiAgICAgfCBOU1NtYWxs
Q2Fwc0ZvbnRNYXNrIFwKICkKIAotc3RhdGljIEJPT0wgYWNjZXB0YWJsZUNob2ljZShOU0ZvbnRU
cmFpdE1hc2sgZGVzaXJlZFRyYWl0cywgaW50IGRlc2lyZWRXZWlnaHQsIE5TRm9udFRyYWl0TWFz
ayBjYW5kaWRhdGVUcmFpdHMsIGludCBjYW5kaWRhdGVXZWlnaHQpCitzdGF0aWMgQk9PTCBhY2Nl
cHRhYmxlQ2hvaWNlKE5TRm9udFRyYWl0TWFzayBkZXNpcmVkVHJhaXRzLCBOU0ZvbnRUcmFpdE1h
c2sgY2FuZGlkYXRlVHJhaXRzKQogewogICAgIGRlc2lyZWRUcmFpdHMgJj0gflNZTlRIRVNJWkVE
X0ZPTlRfVFJBSVRTOwogICAgIHJldHVybiAoY2FuZGlkYXRlVHJhaXRzICYgZGVzaXJlZFRyYWl0
cykgPT0gZGVzaXJlZFRyYWl0czsKQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIEJPT0wgYmV0dGVy
Q2hvaWNlKE5TRm9udFRyYWl0TWFzawogICAgIE5TRm9udFRyYWl0TWFzayBjaG9zZW5UcmFpdHMs
IGludCBjaG9zZW5XZWlnaHQsCiAgICAgTlNGb250VHJhaXRNYXNrIGNhbmRpZGF0ZVRyYWl0cywg
aW50IGNhbmRpZGF0ZVdlaWdodCkKIHsKLSAgICBpZiAoIWFjY2VwdGFibGVDaG9pY2UoZGVzaXJl
ZFRyYWl0cywgZGVzaXJlZFdlaWdodCwgY2FuZGlkYXRlVHJhaXRzLCBjYW5kaWRhdGVXZWlnaHQp
KQorICAgIGlmICghYWNjZXB0YWJsZUNob2ljZShkZXNpcmVkVHJhaXRzLCBjYW5kaWRhdGVUcmFp
dHMpKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICAvLyBBIGxpc3Qgb2YgdGhlIHRyYWl0cyB3
ZSBjYXJlIGFib3V0LgpAQCAtMjMwLDcgKzIzMCw3IEBAIHN0YXRpYyBpbmxpbmUgRm9udFRyYWl0
c01hc2sgdG9UcmFpdHNNYXMKIAogICAgICAgICBCT09MIG5ld1dpbm5lcjsKICAgICAgICAgaWYg
KCFjaG9zZUZvbnQpCi0gICAgICAgICAgICBuZXdXaW5uZXIgPSBhY2NlcHRhYmxlQ2hvaWNlKGRl
c2lyZWRUcmFpdHMsIGRlc2lyZWRXZWlnaHQsIGZvbnRUcmFpdHMsIGZvbnRXZWlnaHQpOworICAg
ICAgICAgICAgbmV3V2lubmVyID0gYWNjZXB0YWJsZUNob2ljZShkZXNpcmVkVHJhaXRzLCBmb250
VHJhaXRzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbmV3V2lubmVyID0gYmV0dGVyQ2hv
aWNlKGRlc2lyZWRUcmFpdHMsIGRlc2lyZWRXZWlnaHQsIGNob3NlblRyYWl0cywgY2hvc2VuV2Vp
Z2h0LCBmb250VHJhaXRzLCBmb250V2VpZ2h0KTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2lkZ2V0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdl
dE1hYy5tbQkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAKICNpbXBvcnQgIlNjcm9sbFZp
ZXcuaCIKICNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcuaCIKICNpbXBvcnQgIldlYkNvcmVWaWV3
LmgiCi0KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9VbnVzZWRQYXJh
bS5oPgogCiBAaW50ZXJmYWNlIE5TV2luZG93IChXZWJXaW5kb3dEZXRhaWxzKQogLSAoQk9PTClf
bmVlZHNUb1Jlc2V0RHJhZ01hcmdpbnM7CkBAIC0yNTQsNiArMjU0LDEwIEBAIHZvaWQgV2lkZ2V0
OjpyZW1vdmVGcm9tU3VwZXJ2aWV3KCkKIAogdm9pZCBXaWRnZXQ6OmJlZm9yZU1vdXNlRG93bihO
U1ZpZXcgKnZpZXcsIFdpZGdldCogd2lkZ2V0KQogeworI2lmIEFTU0VSVF9ESVNBQkxFRAorICAg
IFVOVVNFRF9QQVJBTSh2aWV3KTsKKyNlbmRpZgorCiAgICAgaWYgKHdpZGdldCkgewogICAgICAg
ICBBU1NFUlQodmlldyA9PSB3aWRnZXQtPmdldE91dGVyVmlldygpKTsKICAgICAgICAgQVNTRVJU
KCF3aWRnZXQtPm1fZGF0YS0+bXVzdFN0YXlJbldpbmRvdyk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDM5
NTc3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCAiU2hhcmVkQnVmZmVy
LmgiCiAjaW1wb3J0ICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgorI2ltcG9ydCA8d3RmL1VudXNlZFBhcmFtLmg+CiAKICNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgogdHlwZWRlZiBpbnQgTlNJbnRlZ2VyOwpAQCAtMzg2LDYgKzM4NywxMCBA
QCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljCiAKIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7CisjaWYgQVNTRVJUX0RJU0FCTEVECisgICAg
VU5VU0VEX1BBUkFNKGNoYWxsZW5nZSk7CisjZW5kaWYKKwogICAgIEFTU0VSVChkLT5tX2N1cnJl
bnRNYWNDaGFsbGVuZ2UpOwogICAgIEFTU0VSVCghZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlLmlz
TnVsbCgpKTsKICAgICBBU1NFUlQoZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlID09IGNoYWxsZW5n
ZSk7CkBAIC00NTEsOCArNDU2LDEwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2Fu
Y2VsbGF0aW8KICAgICBtX2hhbmRsZSA9IDA7CiB9CiAKLS0gKE5TVVJMUmVxdWVzdCAqKWNvbm5l
Y3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbiB3aWxsU2VuZFJlcXVlc3Q6KE5TVVJMUmVxdWVz
dCAqKW5ld1JlcXVlc3QgcmVkaXJlY3RSZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlZGlyZWN0
UmVzcG9uc2UKKy0gKE5TVVJMUmVxdWVzdCAqKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAq
KWNvbm5lY3Rpb24gd2lsbFNlbmRSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKiluZXdSZXF1ZXN0IHJl
ZGlyZWN0UmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZWRpcmVjdFJlc3BvbnNlCiB7CisgICAg
VU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworCiAgICAgLy8gdGhlIHdpbGxTZW5kUmVxdWVzdCBj
YWxsIG1heSBjYW5jZWwgdGhpcyBsb2FkLCBpbiB3aGljaCBjYXNlIHNlbGYgY291bGQgYmUgZGVh
bGxvY2F0ZWQKICAgICBSZXRhaW5QdHI8V2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZT4g
cHJvdGVjdChzZWxmKTsKIApAQCAtNDg4LDYgKzQ5NSw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6
OnJlY2VpdmVkQ2FuY2VsbGF0aW8KIAogLSAoQk9PTCljb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2U6KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24KIHsKKyAgICBVTlVTRURf
UEFSQU0oY29ubmVjdGlvbik7CisKICAgICBpZiAoIW1faGFuZGxlKQogICAgICAgICByZXR1cm4g
Tk87CiAKQEAgLTQ5NSw4ICs1MDQsMTAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRD
YW5jZWxsYXRpbwogICAgIHJldHVybiBtX2hhbmRsZS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoKTsKIH0KIAotLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb24gZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlICopY2hhbGxlbmdlCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNv
bm5lY3Rpb24gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlCiB7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rp
b24pOworCiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgaWYgKFtjaGFsbGVuZ2UgcHJl
dmlvdXNGYWlsdXJlQ291bnRdID09IDApIHsKICAgICAgICAgTlNTdHJpbmcgKnVzZXIgPSBbbV91
cmwgdXNlcl07CkBAIC01MTksMjQgKzUzMCwzMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNl
aXZlZENhbmNlbGxhdGlvCiAgICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShjb3JlKGNoYWxsZW5nZSkpOwogfQogCi0tICh2b2lkKWNvbm5lY3Rpb246KE5TVVJM
Q29ubmVjdGlvbiAqKWNvbiBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQorLSAodm9pZCljb25uZWN0aW9uOihO
U1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlCiB7CisgICAgVU5V
U0VEX1BBUkFNKGNvbm5lY3Rpb24pOworCiAgICAgaWYgKCFtX2hhbmRsZSkKICAgICAgICAgcmV0
dXJuOwogICAgIENhbGxiYWNrR3VhcmQgZ3VhcmQ7CiAgICAgbV9oYW5kbGUtPmRpZENhbmNlbEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvcmUoY2hhbGxlbmdlKSk7CiB9CiAKLS0gKHZvaWQpY29u
bmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29uIGRpZFJlY2VpdmVSZXNwb25zZTooTlNVUkxS
ZXNwb25zZSAqKXIKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVj
dGlvbiBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCiB7CisgICAgVU5VU0VE
X1BBUkFNKGNvbm5lY3Rpb24pOworCiAgICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNs
aWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgQ2FsbGJhY2tHdWFyZCBndWFyZDsKICAgICBt
X2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZShtX2hhbmRsZSwgcik7CiB9CiAK
LS0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29uIGRpZFJlY2VpdmVEYXRh
OihOU0RhdGEgKilkYXRhIGxlbmd0aFJlY2VpdmVkOihsb25nIGxvbmcpbGVuZ3RoUmVjZWl2ZWQK
Ky0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNl
aXZlRGF0YTooTlNEYXRhICopZGF0YSBsZW5ndGhSZWNlaXZlZDoobG9uZyBsb25nKWxlbmd0aFJl
Y2VpdmVkCiB7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworCiAgICAgaWYgKCFtX2hh
bmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRklY
TUU6IElmIHdlIGdldCBtb3JlIHRoYW4gMkIgYnl0ZXMgaW4gYSBzaW5nbGUgY2h1bmssIHRoaXMg
Y29kZSB3b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcuCkBAIC01NDYsOCArNTYzLDEwIEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW8KICAgICBtX2hhbmRsZS0+Y2xpZW50
KCktPmRpZFJlY2VpdmVEYXRhKG1faGFuZGxlLCAoY29uc3QgY2hhciopW2RhdGEgYnl0ZXNdLCBb
ZGF0YSBsZW5ndGhdLCBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aFJlY2VpdmVkKSk7CiB9CiAKLS0g
KHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29uIHdpbGxTdG9wQnVmZmVyaW5n
RGF0YTooTlNEYXRhICopZGF0YQorLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24g
Kiljb25uZWN0aW9uIHdpbGxTdG9wQnVmZmVyaW5nRGF0YTooTlNEYXRhICopZGF0YQogeworICAg
IFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKwogICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFu
ZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB3ZSBnZXQg
YSByZXNvdXJjZSB3aXRoIG1vcmUgdGhhbiAyQiBieXRlcywgdGhpcyBjb2RlIHdvbid0IGRvIHRo
ZSByaWdodCB0aGluZy4KQEAgLTU1OSwxNCArNTc4LDE5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6
OnJlY2VpdmVkQ2FuY2VsbGF0aW8KIAogLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rp
b24gKiljb25uZWN0aW9uIGRpZFNlbmRCb2R5RGF0YTooTlNJbnRlZ2VyKWJ5dGVzV3JpdHRlbiB0
b3RhbEJ5dGVzV3JpdHRlbjooTlNJbnRlZ2VyKXRvdGFsQnl0ZXNXcml0dGVuIHRvdGFsQnl0ZXNF
eHBlY3RlZFRvV3JpdGU6KE5TSW50ZWdlcil0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShieXRlc1dyaXR0
ZW4pOworCiAgICAgaWYgKCFtX2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQogICAgICAg
ICByZXR1cm47CiAgICAgQ2FsbGJhY2tHdWFyZCBndWFyZDsKICAgICBtX2hhbmRsZS0+Y2xpZW50
KCktPmRpZFNlbmREYXRhKG1faGFuZGxlLCB0b3RhbEJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc0V4
cGVjdGVkVG9Xcml0ZSk7CiB9CiAKLS0gKHZvaWQpY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6
KE5TVVJMQ29ubmVjdGlvbiAqKWNvbgorLSAodm9pZCljb25uZWN0aW9uRGlkRmluaXNoTG9hZGlu
ZzooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbgogeworICAgIFVOVVNFRF9QQVJBTShjb25u
ZWN0aW9uKTsKKwogICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIENhbGxiYWNrR3VhcmQgZ3VhcmQ7CkBAIC01NzcsOCArNjAxLDEw
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW8KICAgICBtX2hhbmRs
ZS0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcobV9oYW5kbGUpOwogfQogCi0tICh2b2lkKWNv
bm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbiBkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9y
ICopZXJyb3IKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlv
biBkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKIHsKKyAgICBVTlVTRURfUEFSQU0o
Y29ubmVjdGlvbik7CisKICAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hhbmRsZS0+Y2xpZW50KCkp
CiAgICAgICAgIHJldHVybjsKICAgICBDYWxsYmFja0d1YXJkIGd1YXJkOwpAQCAtNjAyLDYgKzYy
OCw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW8KIAogLSAoTlND
YWNoZWRVUkxSZXNwb25zZSAqKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rp
b24gd2lsbENhY2hlUmVzcG9uc2U6KE5TQ2FjaGVkVVJMUmVzcG9uc2UgKiljYWNoZWRSZXNwb25z
ZQogeworICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKKwogI2lmZGVmIEJVSUxESU5HX09O
X1RJR0VSCiAgICAgLy8gT24gVGlnZXIgQ0ZVUkxDb25uZWN0aW9uIGNhbiBzb21ldGltZXMgY2Fs
bCB0aGUgY29ubmVjdGlvbjp3aWxsQ2FjaGVSZXNwb25zZTogZGVsZWdhdGUgbWV0aG9kIG9uCiAg
ICAgLy8gYSBzZWNvbmRhcnkgdGhyZWFkIGluc3RlYWQgb2YgdGhlIG1haW4gdGhyZWFkLiBJZiB0
aGlzIGhhcHBlbnMgcGVyZm9ybSB0aGUgd29yayBvbiB0aGUgbWFpbiB0aHJlYWQuCkBAIC02OTQs
NiArNzIyLDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogCiAt
IChOU1VSTFJlcXVlc3QgKiljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9u
IHdpbGxTZW5kUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopbmV3UmVxdWVzdCByZWRpcmVjdFJlc3Bv
bnNlOihOU1VSTFJlc3BvbnNlICopcmVkaXJlY3RSZXNwb25zZQogeworICAgIFVOVVNFRF9QQVJB
TShjb25uZWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0ocmVkaXJlY3RSZXNwb25zZSk7CisKICAg
ICBOU1VSTCAqY29weSA9IFtbbmV3UmVxdWVzdCBVUkxdIGNvcHldOwogICAgIFttX3VybCByZWxl
YXNlXTsKICAgICBtX3VybCA9IGNvcHk7CkBAIC03MDMsNiArNzM0LDggQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogCiAtICh2b2lkKWNvbm5lY3Rpb246KE5TVVJM
Q29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlCiB7CisgICAgVU5VU0VE
X1BBUkFNKGNvbm5lY3Rpb24pOworCiAgICAgaWYgKFtjaGFsbGVuZ2UgcHJldmlvdXNGYWlsdXJl
Q291bnRdID09IDApIHsKICAgICAgICAgTlNTdHJpbmcgKnVzZXIgPSBbbV91cmwgdXNlcl07CiAg
ICAgICAgIE5TU3RyaW5nICpwYXNzd29yZCA9IFttX3VybCBwYXNzd29yZF07CkBAIC03MjIsNiAr
NzU1LDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogCiAtICh2
b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkUmVjZWl2ZVJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UKIHsKKyAgICBVTlVTRURfUEFSQU0oY29u
bmVjdGlvbik7CisKICAgICBOU1VSTFJlc3BvbnNlICpyID0gW3Jlc3BvbnNlIGNvcHldOwogICAg
IAogICAgIFttX3Jlc3BvbnNlIHJlbGVhc2VdOwpAQCAtNzMwLDYgKzc2NSw4IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW8KIAogLSAodm9pZCljb25uZWN0aW9uOihO
U1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVEYXRhOihOU0RhdGEgKilkYXRh
CiB7CisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworCiAgICAgaWYgKCFtX2RhdGEpCiAg
ICAgICAgIG1fZGF0YSA9IFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdF07CiAgICAgCkBAIC03
MzgsMTEgKzc3NSwxNSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlv
CiAKIC0gKHZvaWQpY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6KE5TVVJMQ29ubmVjdGlvbiAq
KWNvbm5lY3Rpb24KIHsKKyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisKICAgICBtX2lz
RG9uZSA9IFlFUzsKIH0KIAogLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKilj
b25uZWN0aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgogeworICAgIFVOVVNF
RF9QQVJBTShjb25uZWN0aW9uKTsKKwogICAgIEFTU0VSVCghbV9lcnJvcik7CiAgICAgCiAgICAg
bV9lcnJvciA9IFtlcnJvciByZXRhaW5dOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9G
aWxlU3lzdGVtUE9TSVguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcG9zaXgv
RmlsZVN5c3RlbVBPU0lYLmNwcAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxMSArMTU4
LDkgQEAgU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVy
biBkaXJuYW1lKGZzUmVwLm11dGFibGVEYXRhKCkpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBsaXN0
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCi17Ci0g
ICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBlbnRyaWVzOwotfQorLy8gT0sgdG8gbm90IGltcGxlbWVudCBsaXN0RGlyZWN0b3J5IGF0
IHRoZSBtb21lbnQsIGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgZm9yIHBsdWctaW5zLCBhbmQKKy8v
IGFsbCBwbGF0Zm9ybXMgdGhhdCB1c2UgdGhlIHNoYXJlZCBwbHVnLWluIGltcGxlbWVudGF0aW9u
IGhhdmUgaW1wbGVtZW50YXRpb25zLiBXZSdkIG5lZWQKKy8vIHRvIGltcGxlbWVudCBpdCBpZiB3
ZSB3YW50ZWQgdG8gdXNlIFBsdWdpbkRhdGFiYXNlLmNwcCBvbiB0aGUgTWFjLiBCZXR0ZXIgdG8g
bm90IGltcGxlbWVudAorLy8gYXQgYWxsIGFuZCBnZXQgYSBsaW5rIGVycm9yIGluIGNhc2UgdGhp
cyBhcmlzZXMuCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9SZWd1bGFyRXhwcmVzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1JlZ3VsYXJFeHByZXNzaW9uLmNwcAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvUmVndWxhckV4cHJlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODQsOSArMTg0LDggQEAgaW50IFJlZ3VsYXJFeHByZXNzaW9uOjpzZWFyY2hSZXYoY29uc3Qg
UwogICAgIHJldHVybiBsYXN0UG9zOwogfQogCi1pbnQgUmVndWxhckV4cHJlc3Npb246OnBvcyhp
bnQgbikKK2ludCBSZWd1bGFyRXhwcmVzc2lvbjo6cG9zKCkKIHsKLSAgICBBU1NFUlQobiA9PSAw
KTsKICAgICByZXR1cm4gZC0+bGFzdE1hdGNoUG9zOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvUmVndWxhckV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvUmVndWxhckV4cHJlc3Npb24uaAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvUmVndWxhckV4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAgICAgaW50IHNlYXJjaChjb25zdCBTdHJpbmcmLCBpbnQgc3Rh
cnRGcm9tID0gMCkgY29uc3Q7CiAgICAgaW50IHNlYXJjaFJldihjb25zdCBTdHJpbmcmKSBjb25z
dDsKIAotICAgIGludCBwb3MoaW50IG4gPSAwKTsKKyAgICBpbnQgcG9zKCk7CiAgICAgaW50IG1h
dGNoZWRMZW5ndGgoKSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9tYWMvU2hhcGVBcmFiaWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvbWFjL1NoYXBlQXJhYmljLmMJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L21hYy9TaGFwZUFyYWJpYy5jCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsOCArMzQ3LDcg
QEAgaXNUYXNoa2VlbENoYXIoVUNoYXIgY2gpIHsKICAqLwogc3RhdGljIGludDMyX3QKIHNoYXBl
VW5pY29kZShVQ2hhciAqZGVzdCwgaW50MzJfdCBzb3VyY2VMZW5ndGgsCi0gICAgICAgICAgICAg
aW50MzJfdCBkZXN0U2l6ZSx1aW50MzJfdCBvcHRpb25zLAotICAgICAgICAgICAgIFVFcnJvckNv
ZGUgKnBFcnJvckNvZGUsCisgICAgICAgICAgICAgaW50MzJfdCBkZXN0U2l6ZSwKICAgICAgICAg
ICAgICBpbnQgdGFzaGtlZWxGbGFnKSB7CiAKICAgICBpbnQzMl90ICAgICAgICAgIGksIGllbmQ7
CkBAIC01MjgsMTEgKzUyNywxMSBAQCBpbnQzMl90IHNoYXBlQXJhYmljKGNvbnN0IFVDaGFyICpz
b3VyY2UsCiAgICAgICAgIHN3aXRjaChvcHRpb25zJlVfU0hBUEVfTEVUVEVSU19NQVNLKSB7CiAg
ICAgICAgIGNhc2UgVV9TSEFQRV9MRVRURVJTX1NIQVBFIDoKICAgICAgICAgICAgIC8qIENhbGwg
dGhlIHNoYXBpbmcgZnVuY3Rpb24gd2l0aCB0YXNoa2VlbCBmbGFnID09IDEgKi8KLSAgICAgICAg
ICAgIGRlc3RMZW5ndGggPSBzaGFwZVVuaWNvZGUoZGVzdCxzb3VyY2VMZW5ndGgsZGVzdENhcGFj
aXR5LG9wdGlvbnMscEVycm9yQ29kZSwxKTsKKyAgICAgICAgICAgIGRlc3RMZW5ndGggPSBzaGFw
ZVVuaWNvZGUoZGVzdCxzb3VyY2VMZW5ndGgsZGVzdENhcGFjaXR5LDEpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgVV9TSEFQRV9MRVRURVJTX1NIQVBFX1RBU0hLRUVMX0lTT0xB
VEVEIDoKICAgICAgICAgICAgIC8qIENhbGwgdGhlIHNoYXBpbmcgZnVuY3Rpb24gd2l0aCB0YXNo
a2VlbCBmbGFnID09IDAgKi8KLSAgICAgICAgICAgIGRlc3RMZW5ndGggPSBzaGFwZVVuaWNvZGUo
ZGVzdCxzb3VyY2VMZW5ndGgsZGVzdENhcGFjaXR5LG9wdGlvbnMscEVycm9yQ29kZSwwKTsKKyAg
ICAgICAgICAgIGRlc3RMZW5ndGggPSBzaGFwZVVuaWNvZGUoZGVzdCxzb3VyY2VMZW5ndGgsZGVz
dENhcGFjaXR5LDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVV9TSEFQRV9M
RVRURVJTX1VOU0hBUEUgOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMzk1NzcpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RG
OwpAQCAtNTA4LDYgKzUwOSw5IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6c3R5bGVEaWRDaGFu
Z2UoUmUKIAogSW5saW5lQm94KiBSZW5kZXJMaXN0TWFya2VyOjpjcmVhdGVJbmxpbmVCb3goYm9v
bCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sKQogeworI2lmIEFTU0VSVF9ESVNBQkxFRAorICAg
IFVOVVNFRF9QQVJBTShpc1Jvb3RMaW5lQm94KTsKKyNlbmRpZgogICAgIEFTU0VSVCghaXNSb290
TGluZUJveCk7CiAgICAgTGlzdE1hcmtlckJveCogYm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBM
aXN0TWFya2VyQm94KHRoaXMpOwogICAgIG1faW5saW5lQm94V3JhcHBlciA9IGJveDsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3
IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgogCiAjaWYgRU5BQkxFKFdNTCkKICNpbmNsdWRlICJXTUxOYW1lcy5oIgpAQCAtMjg1Niw2ICsy
ODU3LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUxlZnRvdmVyQW5vbnltbwogCiBJbmxp
bmVCb3gqIFJlbmRlck9iamVjdDo6Y3JlYXRlSW5saW5lQm94KGJvb2wsIGJvb2wgaXNSb290TGlu
ZUJveCwgYm9vbCkKIHsKKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICBVTlVTRURfUEFSQU0oaXNS
b290TGluZUJveCk7CisjZW5kaWYKICAgICBBU1NFUlQoIWlzUm9vdExpbmVCb3gpOwogICAgIHJl
dHVybiBuZXcgKHJlbmRlckFyZW5hKCkpIElubGluZUJveCh0aGlzKTsKIH0KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclBhdGguY3BwCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxNSArNjcsOSBAQCBwcml2YXRl
OgogfTsKIAogLy8gUmVuZGVyUGF0aAotUmVuZGVyUGF0aDo6UmVuZGVyUGF0aChSZW5kZXJTdHls
ZSogc3R5bGUsIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQorUmVuZGVyUGF0
aDo6UmVuZGVyUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKICAgICA6
IFJlbmRlck9iamVjdChub2RlKQogewotICAgIEFTU0VSVChzdHlsZSAhPSAwKTsKLSAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUo
KSk7Ci19Ci0KLVJlbmRlclBhdGg6On5SZW5kZXJQYXRoKCkKLXsKIH0KIAogQWZmaW5lVHJhbnNm
b3JtIFJlbmRlclBhdGg6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQYXRoLmgJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNSArMzUsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIFBhdGg7CiBjbGFzcyBSZW5kZXJTVkdDb250
YWluZXI7CiBjbGFzcyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDsKIAotY2xhc3MgUmVu
ZGVyUGF0aCA6IHB1YmxpYyBSZW5kZXJPYmplY3QKLXsKK2NsYXNzIFJlbmRlclBhdGggOiBwdWJs
aWMgUmVuZGVyT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBSZW5kZXJQYXRoKFJlbmRlclN0eWxlKiwg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJQYXRo
KCk7CisgICAgUmVuZGVyUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOwogCiAg
ICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tl
CiAgICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNG
aWxsID0gdHJ1ZSkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZS5j
cHAJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNW
R0lubGluZS5oIgogCiAjaW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBAIC0zNSw5ICsz
NiwxNCBAQCBSZW5kZXJTVkdJbmxpbmU6OlJlbmRlclNWR0lubGluZShOb2RlKiBuCiB7CiB9CiAK
LUlubGluZUJveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxh
Y2VIb2xkZXJCb3gsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4pCitJbmxpbmVC
b3gqIFJlbmRlclNWR0lubGluZTo6Y3JlYXRlSW5saW5lQm94KGJvb2wgbWFrZVBsYWNlaG9sZGVy
Qm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wpCiB7Ci0gICAgQVNTRVJUKCEoIWlzUm9vdExp
bmVCb3ggJiYgKGlzUmVwbGFjZWQoKSB8fCBtYWtlUGxhY2VIb2xkZXJCb3gpKSk7CisjaWYgQVNT
RVJUX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGlzUm9vdExpbmVCb3gpOworICAgIFVOVVNF
RF9QQVJBTShtYWtlUGxhY2Vob2xkZXJCb3gpOworI2VuZGlmCisKKyAgICBBU1NFUlQoISghaXNS
b290TGluZUJveCAmJiAoaXNSZXBsYWNlZCgpIHx8IG1ha2VQbGFjZWhvbGRlckJveCkpKTsKICAg
ICBBU1NFUlQoaXNJbmxpbmVGbG93KCkpOwogCiAgICAgSW5saW5lRmxvd0JveCogZmxvd0JveCA9
IG5ldyAocmVuZGVyQXJlbmEoKSkgU1ZHSW5saW5lRmxvd0JveCh0aGlzKTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAzOTU3NykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzEsOCArMTMxLDkgQEAgSW5saW5lVGV4dEJveCogUmVuZGVyU1ZHSW5saW5lVGV4dDo6
Y3JlYQogCiBJbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KElubGlu
ZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lKQogewotICAgIC8vIFNWRyBkb2Vzbid0IGhhdmUgYW55IGVkaXRhYmxlIGNvbnRlbnQgd2hl
cmUgYSBjYXJldCByZWN0IHdvdWxkIGJlIG5lZWRlZAotICAgIHJldHVybiBJbnRSZWN0KCk7Cisg
ICAgLy8gU1ZHIGRvZXNuJ3QgaGF2ZSBhbnkgZWRpdGFibGUgY29udGVudCB3aGVyZSBhIGNhcmV0
IHJlY3Qgd291bGQgYmUgbmVlZGVkLgorICAgIC8vIEZJWE1FOiBUaGF0J3Mgbm90IHN1ZmZpY2ll
bnQuIFRoZSBsb2NhbENhcmV0UmVjdCBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgZm9yIHNlbGVjdGlv
bi4KKyAgICByZXR1cm4gUmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNh
cmV0T2Zmc2V0LCBleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwogfQogCiBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkp
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGlu
ZXMuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CisjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwpA
QCAtMTAwNSw3ICsxMDA2LDEyIEBAIElubGluZVRleHRCb3gqIFJlbmRlclRleHQ6OmNyZWF0ZUlu
bGluZVQKIAogSW5saW5lQm94KiBSZW5kZXJUZXh0OjpjcmVhdGVJbmxpbmVCb3goYm9vbCwgYm9v
bCBpc1Jvb3RMaW5lQm94LCBib29sKQogeworI2lmIEFTU0VSVF9ESVNBQkxFRAorICAgIFVOVVNF
RF9QQVJBTShpc1Jvb3RMaW5lQm94KTsKKyNlbmRpZgorCiAgICAgQVNTRVJUKCFpc1Jvb3RMaW5l
Qm94KTsKKwogICAgIElubGluZVRleHRCb3gqIHRleHRCb3ggPSBjcmVhdGVJbmxpbmVUZXh0Qm94
KCk7CiAgICAgaWYgKCFtX2ZpcnN0VGV4dEJveCkKICAgICAgICAgbV9maXJzdFRleHRCb3ggPSBt
X2xhc3RUZXh0Qm94ID0gdGV4dEJveDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0IDxDb2NvYS9Db2Nv
YS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2ltcG9ydCA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW1wb3J0IDxtYXRoLmg+CiAKICNp
ZmRlZiBCVUlMRElOR19PTl9USUdFUgpAQCAtNzUsNyArNzYsOCBAQCB1c2luZyBzdGQ6Om1pbjsK
IAogLSAodm9pZClzeXN0ZW1Db2xvcnNEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCiB7Ci0gICAgQVNTRVJUKFtbbm90aWZpY2F0aW9uIG5hbWVdIGlzRXF1YWxUb1N0cmlu
ZzpOU1N5c3RlbUNvbG9yc0RpZENoYW5nZU5vdGlmaWNhdGlvbl0pOworICAgIFVOVVNFRF9QQVJB
TShub3RpZmljYXRpb24pOworCiAgICAgX3RoZW1lLT5wbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgp
OwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNp
b24gMzk1NzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0
U3RyZWFtJiB0cywgCiAgICAgICAgIHRzIDw8ICIgICI7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50
Qm9yZGVyU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
RUJvcmRlclN0eWxlIGJvcmRlclN0eWxlKQorc3RhdGljIHZvaWQgcHJpbnRCb3JkZXJTdHlsZShU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlKQogewogICAgIHN3
aXRjaCAoYm9yZGVyU3R5bGUpIHsKICAgICAgICAgY2FzZSBCTk9ORToKQEAgLTIxNiw3ICsyMTYs
NyBAQCBzdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtCiAgICAgICAgICAg
ICAgICAgICAgIHRzIDw8ICIgbm9uZSI7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIHRzIDw8ICIgKCIgPDwgby5ib3JkZXJUb3AoKSA8PCAicHggIjsKLSAgICAg
ICAgICAgICAgICAgICAgcHJpbnRCb3JkZXJTdHlsZSh0cywgbywgby5zdHlsZSgpLT5ib3JkZXJU
b3BTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRCb3JkZXJTdHlsZSh0cywgby5z
dHlsZSgpLT5ib3JkZXJUb3BTdHlsZSgpKTsKICAgICAgICAgICAgICAgICAgICAgQ29sb3IgY29s
ID0gby5zdHlsZSgpLT5ib3JkZXJUb3BDb2xvcigpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IWNvbC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCkt
PmNvbG9yKCk7CkBAIC0yMzAsNyArMjMwLDcgQEAgc3RhdGljIFRleHRTdHJlYW0gJm9wZXJhdG9y
PDwoVGV4dFN0cmVhbQogICAgICAgICAgICAgICAgICAgICB0cyA8PCAiIG5vbmUiOwogICAgICAg
ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICB0cyA8PCAiICgiIDw8IG8uYm9y
ZGVyUmlnaHQoKSA8PCAicHggIjsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRCb3JkZXJTdHls
ZSh0cywgbywgby5zdHlsZSgpLT5ib3JkZXJSaWdodFN0eWxlKCkpOworICAgICAgICAgICAgICAg
ICAgICBwcmludEJvcmRlclN0eWxlKHRzLCBvLnN0eWxlKCktPmJvcmRlclJpZ2h0U3R5bGUoKSk7
CiAgICAgICAgICAgICAgICAgICAgIENvbG9yIGNvbCA9IG8uc3R5bGUoKS0+Ym9yZGVyUmlnaHRD
b2xvcigpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCktPmNvbG9yKCk7CkBAIC0yNDQsNyArMjQ0
LDcgQEAgc3RhdGljIFRleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgICAgICAg
ICAgICAgICAgICB0cyA8PCAiIG5vbmUiOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICB0cyA8PCAiICgiIDw8IG8uYm9yZGVyQm90dG9tKCkgPDwgInB4ICI7Ci0g
ICAgICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMsIG8sIG8uc3R5bGUoKS0+Ym9y
ZGVyQm90dG9tU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUo
dHMsIG8uc3R5bGUoKS0+Ym9yZGVyQm90dG9tU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgICAg
IENvbG9yIGNvbCA9IG8uc3R5bGUoKS0+Ym9yZGVyQm90dG9tQ29sb3IoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjb2wuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29s
ID0gby5zdHlsZSgpLT5jb2xvcigpOwpAQCAtMjU4LDcgKzI1OCw3IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICAgICAgICAgICAgICAgICAgdHMgPDwgIiBu
b25lIjsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgdHMgPDwg
IiAoIiA8PCBvLmJvcmRlckxlZnQoKSA8PCAicHggIjsKLSAgICAgICAgICAgICAgICAgICAgcHJp
bnRCb3JkZXJTdHlsZSh0cywgbywgby5zdHlsZSgpLT5ib3JkZXJMZWZ0U3R5bGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMsIG8uc3R5bGUoKS0+Ym9yZGVyTGVm
dFN0eWxlKCkpOwogICAgICAgICAgICAgICAgICAgICBDb2xvciBjb2wgPSBvLnN0eWxlKCktPmJv
cmRlckxlZnRDb2xvcigpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCktPmNvbG9yKCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkocmV2aXNpb24gMzk1NzcpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTEgKzM1LDE3IEBACiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VNYXNrZXIuaCIKICNpbmNs
dWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9p
ZCBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94
LCBTVkdSZXNvdXJjZUZpbHRlciomIGZpbHRlciwgU1ZHUmVzb3VyY2VGaWx0ZXIqIHJvb3RGaWx0
ZXIpCi17ICAgIAoreworI2lmICFFTkFCTEUoU1ZHX0ZJTFRFUlMpCisgICAgVU5VU0VEX1BBUkFN
KGZpbHRlcik7CisgICAgVU5VU0VEX1BBUkFNKHJvb3RGaWx0ZXIpOworI2VuZGlmCisKICAgICBT
VkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG9iamVjdC0+
ZWxlbWVudCgpKTsKICAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVu
dCgpICYmIHN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpOwogICAgIEFTU0VSVChvYmplY3QpOwpAQCAt
MTA0LDYgKzExMCwxMiBAQCB2b2lkIHByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2Jq
CiAKIHZvaWQgZmluaXNoUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiBib3VuZGlu
Z0JveCwgU1ZHUmVzb3VyY2VGaWx0ZXIqJiBmaWx0ZXIsIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRD
b250ZXh0KQogeworI2lmICFFTkFCTEUoU1ZHX0ZJTFRFUlMpCisgICAgVU5VU0VEX1BBUkFNKGJv
dW5kaW5nQm94KTsKKyAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKKyAgICBVTlVTRURfUEFSQU0o
c2F2ZWRDb250ZXh0KTsKKyNlbmRpZgorCiAgICAgQVNTRVJUKG9iamVjdCk7CiAKICAgICBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRocmVhZC5jcHAJKHJldmlzaW9uIDM5NTc3KQorKysgV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogCkBAIC0zNSw3ICszNiw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKERvY3VtZW50KiBk
b2N1bWVudCkKK0RhdGFiYXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCgpCiAgICAgOiBtX3RocmVh
ZElEKDApCiB7CiAgICAgbV9zZWxmUmVmID0gdGhpczsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRo
cmVhZC5oCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVh
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIsOSBAQCBjbGFzcyBEYXRhYmFzZTsKIGNs
YXNzIERhdGFiYXNlVGFzazsKIGNsYXNzIERvY3VtZW50OwogCi1jbGFzcyBEYXRhYmFzZVRocmVh
ZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlVGhyZWFkPgoteworY2xhc3MgRGF0
YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxEYXRhYmFzZVRocmVhZD4gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBjcmVhdGUoRG9j
dW1lbnQqIGRvYykgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlVGhyZWFkKGRvYykpOyB9
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVRocmVhZCk7IH0KICAgICB+RGF0YWJhc2VUaHJlYWQoKTsK
IAogICAgIGJvb2wgc3RhcnQoKTsKQEAgLTU3LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQg
dW5zY2hlZHVsZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqKTsKIAogcHJpdmF0ZToKLSAgICBEYXRh
YmFzZVRocmVhZChEb2N1bWVudCopOworICAgIERhdGFiYXNlVGhyZWFkKCk7CiAKICAgICBzdGF0
aWMgdm9pZCogZGF0YWJhc2VUaHJlYWRTdGFydCh2b2lkKik7CiAgICAgdm9pZCogZGF0YWJhc2VU
aHJlYWQoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCShyZXZpc2lvbiAzOTU3NykK
KysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw3ICs3OSw3IEBAIExvY2FsU3RvcmFnZTo6fkxvY2FsU3RvcmFnZSgpCiAgICAgbG9jYWxTdG9y
YWdlTWFwKCkucmVtb3ZlKG1fcGF0aCk7CiB9CiAKLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExv
Y2FsU3RvcmFnZTo6c3RvcmFnZUFyZWEoRnJhbWUqIHNvdXJjZUZyYW1lLCBTZWN1cml0eU9yaWdp
biogb3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlOjpzdG9yYWdl
QXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgJKHJldmlzaW9uIDM5NTc3KQorKysgV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2U+IGxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpOwogCi0gICAgICAgIFBh
c3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKEZyYW1lKiBzb3VyY2VGcmFtZSwgU2Vj
dXJpdHlPcmlnaW4qKTsKKyAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFy
ZWEoU2VjdXJpdHlPcmlnaW4qKTsKIAogICAgICAgICBib29sIHNjaGVkdWxlSW1wb3J0KFBhc3NS
ZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwogICAgICAgICB2b2lkIHNjaGVkdWxlU3luYyhQYXNz
UmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAz
OTU3NykKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTEsOCArMjExLDcgQEAgdm9pZCBTVkdFbGVtZW50OjpzZW5kU1ZHTG9hZEV2ZW50SWZQb3NzaQog
ICAgICAgICBpZiAoaGFzTG9hZExpc3RlbmVyKGN1cnJlbnRUYXJnZXQuZ2V0KCkpKSB7CiAgICAg
ICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
bG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgZXZlbnQtPnNldFRhcmdldChj
dXJyZW50VGFyZ2V0KTsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZCA9IDA7Ci0g
ICAgICAgICAgICBjdXJyZW50VGFyZ2V0LT5kaXNwYXRjaEdlbmVyaWNFdmVudChldmVudC5yZWxl
YXNlKCksIGlnbm9yZWQpOworICAgICAgICAgICAgY3VycmVudFRhcmdldC0+ZGlzcGF0Y2hHZW5l
cmljRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgICAgICBjdXJyZW50VGFy
Z2V0ID0gKHBhcmVudCAmJiBwYXJlbnQtPmlzU1ZHRWxlbWVudCgpKSA/IHN0YXRpY19wb2ludGVy
X2Nhc3Q8U1ZHRWxlbWVudD4ocGFyZW50KSA6IDA7CiAgICAgfQpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudEluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAzOTU3NykKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1l
bnRJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBib29sIFNW
R0VsZW1lbnRJbnN0YW5jZTo6ZGlzcGF0Y2hFdmVudChQCiAgICAgZXZ0LT5zZXRUYXJnZXQodGhp
cyk7CiAKICAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
dmlldygpOwotICAgIHJldHVybiBlbGVtZW50LT5kaXNwYXRjaEdlbmVyaWNFdmVudChldnQucmVs
ZWFzZSgpLCBlYyk7CisgICAgcmV0dXJuIGVsZW1lbnQtPmRpc3BhdGNoR2VuZXJpY0V2ZW50KGV2
dC5yZWxlYXNlKCkpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9u
YWJvcnQoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGguaAkocmV2aXNpb24gMzk1NzcpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGggOiBwdWJs
aWMgU1ZHUGF0aFNlZyB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHgyLCBmbG9hdCB5MikKLSAgICAgICAg
OiBTVkdQYXRoU2VnKCksIG1feCh4KSwgbV95KHkpLCBtX3gyKHgyKSwgbV95Mih5KSB7fQorICAg
ICAgICA6IFNWR1BhdGhTZWcoKSwgbV94KHgpLCBtX3koeSksIG1feDIoeDIpLCBtX3kyKHkyKSB7
fQogCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gcGF0
aFNlZ1R5cGVBc0xldHRlcigpICsgU3RyaW5nOjpmb3JtYXQoIiAlLjZsZyAlLjZsZyAlLjZsZyAl
LjZsZyIsIG1feDIsIG1feTIsIG1feCwgbV95KTsgfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzOTU3NykKKysrIFdl
YkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA3LDEwICsxMDcsMTAgQEAgRmxvYXRSZWN0IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OgogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRCQm94KHRoaXMpOwogfQog
Ci1SZW5kZXJPYmplY3QqIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVj
dCogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewogICAgIC8vIEJ5IGRlZmF1bHQsIGFueSBzdWJj
bGFzcyBpcyBleHBlY3RlZCB0byBkbyBwYXRoLWJhc2VkIGRyYXdpbmcKLSAgICByZXR1cm4gbmV3
IChhcmVuYSkgUmVuZGVyUGF0aChzdHlsZSwgdGhpcyk7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlclBhdGgodGhpcyk7CiB9CiAKIFBhdGggU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OnRvQ2xpcFBhdGgoKSBjb25zdApJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9u
IDM5NTc3KQorKysgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4NCw3ICsyODQsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpj
cmVhCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZShjb25zdCBTdHJp
bmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgTm9kZSogc291
cmNlTm9kZSwgRG9jdW1lbnQqIG91dHB1dERvYykKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJj
ZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgRG9jdW1lbnQqIG91dHB1dERv
YykKIHsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBuZXcgRG9jdW1l
bnRGcmFnbWVudChvdXRwdXREb2MpOwogICAgIApAQCAtNDMzLDI0ICs0MzMsMjQgQEAgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBYU0xUUHJvY2VzcwogICAgIAogICAgIGlmICghdHJhbnNm
b3JtVG9TdHJpbmcoc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVz
dWx0RW5jb2RpbmcpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY3JlYXRlRnJhZ21l
bnRGcm9tU291cmNlKHJlc3VsdFN0cmluZywgcmVzdWx0TUlNRVR5cGUsIHNvdXJjZU5vZGUsIG91
dHB1dERvYyk7CisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZShyZXN1bHRTdHJp
bmcsIHJlc3VsdE1JTUVUeXBlLCBvdXRwdXREb2MpOwogfQogCi12b2lkIFhTTFRQcm9jZXNzb3I6
OnNldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBs
b2NhbE5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIFhTTFRQcm9jZXNzb3I6OnNldFBh
cmFtZXRlcihjb25zdCBTdHJpbmcmIC8qbmFtZXNwYWNlVVJJKi8sIGNvbnN0IFN0cmluZyYgbG9j
YWxOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIC8vIEZJWE1FOiBuYW1lc3BhY2Ug
c3VwcG9ydD8KICAgICAvLyBzaG91bGQgbWFrZSBhIFF1YWxpZmllZE5hbWUgaGVyZSBidXQgd2Un
ZCBoYXZlIHRvIGV4cG9zZSB0aGUgaW1wbAogICAgIG1fcGFyYW1ldGVycy5zZXQobG9jYWxOYW1l
LCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBYU0xUUHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIoY29uc3Qg
U3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdAorU3Ry
aW5nIFhTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIC8qbmFtZXNwYWNl
VVJJKi8sIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBu
YW1lc3BhY2Ugc3VwcG9ydD8KICAgICAvLyBzaG91bGQgbWFrZSBhIFF1YWxpZmllZE5hbWUgaGVy
ZSBidXQgd2UnZCBoYXZlIHRvIGV4cG9zZSB0aGUgaW1wbAogICAgIHJldHVybiBtX3BhcmFtZXRl
cnMuZ2V0KGxvY2FsTmFtZSk7CiB9CiAKLXZvaWQgWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1l
dGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkK
K3ZvaWQgWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgLypuYW1l
c3BhY2VVUkkqLywgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCiB7CiAgICAgLy8gRklYTUU6IG5h
bWVzcGFjZSBzdXBwb3J0PwogICAgIG1fcGFyYW1ldGVycy5yZW1vdmUobG9jYWxOYW1lKTsKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkZldGNoZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2ljb24vSWNvbkZldGNoZXIuY3BwCShyZXZpc2lvbiAzOTU4NCkKKysrIFdl
YkNvcmUvbG9hZGVyL2ljb24vSWNvbkZldGNoZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODks
MTAgKzE4OSw4IEBAIHZvaWQgSWNvbkZldGNoZXI6OmxvYWRGYWlsZWQoKQogICAgIG1fY2xpZW50
LT5maW5pc2hlZEZldGNoaW5nSWNvbigwKTsKIH0gICAgCiAgICAgCi12b2lkIEljb25GZXRjaGVy
OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIEljb25GZXRjaGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
LSAgICBBU1NFUlQobV9oYW5kbGUgPT0gaGFuZGxlKTsKLSAgICAKICAgICBpbnQgc3RhdHVzQ29k
ZSA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDA7CiAgICAgaWYgKHN0YXR1c0NvZGUg
PT0gNCB8fCBzdGF0dXNDb2RlID09IDUpIHsKICAgICAgICAgbG9hZEZhaWxlZCgpOwpAQCAtMjAw
LDE3ICsxOTgsMTMgQEAgdm9pZCBJY29uRmV0Y2hlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlcwog
ICAgIH0gICAgCiB9CiAgICAgCi12b2lkIEljb25GZXRjaGVyOjpkaWRSZWNlaXZlRGF0YShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgbGVu
Z3RoUmVjZWl2ZWQpCi17Ci0gICAgQVNTRVJUKG1faGFuZGxlID09IGhhbmRsZSk7Ci0gICAgCit2
b2lkIEljb25GZXRjaGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgsIGludCkKK3sgICAgCiAgICAgbV9lbnRyaWVzW21fY3VycmVu
dEVudHJ5XS5idWZmZXIoKS0+YXBwZW5kKGRhdGEsIGxlbmd0aCk7CiB9CiAKLXZvaWQgSWNvbkZl
dGNoZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKK3ZvaWQgSWNv
bkZldGNoZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKQogewotICAgIEFTU0VS
VChtX2hhbmRsZSA9PSBoYW5kbGUpOwotICAgIAogICAgIGlmIChtX2N1cnJlbnRFbnRyeSA9PSBt
X2VudHJpZXMuc2l6ZSgpIC0gMSkgewogICAgICAgICAvLyBXZSBmaW5pc2hlZCBsb2FkaW5nLCBj
cmVhdGUgdGhlIGljb24KICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gaWNvbkRhdGEgPSBj
cmVhdGVJY29uKCk7CkBAIC0yMjUsMTAgKzIxOSw4IEBAIHZvaWQgSWNvbkZldGNoZXI6OmRpZEZp
bmlzaExvYWRpbmcoUmVzb3UKICAgICBsb2FkRW50cnkoKTsKIH0KICAgICAKLXZvaWQgSWNvbkZl
dGNoZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VFcnJv
ciYpCit2b2lkIEljb25GZXRjaGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVz
b3VyY2VFcnJvciYpCiB7Ci0gICAgQVNTRVJUKG1faGFuZGxlID09IGhhbmRsZSk7Ci0gICAgCiAg
ICAgbG9hZEZhaWxlZCgpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26435</attachid>
            <date>2009-01-05 10:29:42 -0800</date>
            <delta_ts>2009-01-11 11:26:24 -0800</delta_ts>
            <desc>more work in progress</desc>
            <filename>UnusedPatch3.txt</filename>
            <type>text/plain</type>
            <size>12205</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24g
Mzk2MDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDYgQEAgc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNUb0xvY2FsZVRpbQogc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1Rv
VVRDU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiAKIH0KIApAQCAtMTA5LDggKzEwOCwx
MiBAQCBzdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1ZhbHVlT2YoRXhlCiAKIG5hbWVzcGFj
ZSBKU0MgewogCitlbnVtIExvY2FsZURhdGVUaW1lRm9ybWF0IHsgTG9jYWxlRGF0ZUFuZFRpbWUs
IExvY2FsZURhdGUsIExvY2FsZVRpbWUgfTsKKyAKICNpZiBQTEFURk9STShNQUMpCiAKKy8vIEZJ
WE1FOiBXaHkgbm90IHVzZSB0aGlzIG9uIFdpbmRvd3Mgd2hlbiBDb3JlRm91bmRhdGlvbiBpcyBh
dmFpbGFibGU/CisKIHN0YXRpYyBDRkRhdGVGb3JtYXR0ZXJTdHlsZSBzdHlsZUZyb21BcmdTdHJp
bmcoY29uc3QgVVN0cmluZyYgc3RyaW5nLCBDRkRhdGVGb3JtYXR0ZXJTdHlsZSBkZWZhdWx0U3R5
bGUpCiB7CiAgICAgaWYgKHN0cmluZyA9PSAic2hvcnQiKQpAQCAtMTI0LDEwICsxMjcsMTAgQEAg
c3RhdGljIENGRGF0ZUZvcm1hdHRlclN0eWxlIHN0eWxlRnJvbUFyZwogICAgIHJldHVybiBkZWZh
dWx0U3R5bGU7CiB9CiAKLXN0YXRpYyBVU3RyaW5nIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXRl
KiBleGVjLCBkb3VibGUgdGltZSwgYm9vbCBpbmNsdWRlRGF0ZSwgYm9vbCBpbmNsdWRlVGltZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhl
Y1N0YXRlKiBleGVjLCBEYXRlSW5zdGFuY2UqLCBkb3VibGUgdGltZUluTWlsbGlzZWNvbmRzLCBM
b2NhbGVEYXRlVGltZUZvcm1hdCBmb3JtYXQsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
Q0ZEYXRlRm9ybWF0dGVyU3R5bGUgZGF0ZVN0eWxlID0gKGluY2x1ZGVEYXRlID8ga0NGRGF0ZUZv
cm1hdHRlckxvbmdTdHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKLSAgICBDRkRhdGVG
b3JtYXR0ZXJTdHlsZSB0aW1lU3R5bGUgPSAoaW5jbHVkZVRpbWUgPyBrQ0ZEYXRlRm9ybWF0dGVy
TG9uZ1N0eWxlIDoga0NGRGF0ZUZvcm1hdHRlck5vU3R5bGUpOworICAgIENGRGF0ZUZvcm1hdHRl
clN0eWxlIGRhdGVTdHlsZSA9IChmb3JtYXQgIT0gTG9jYWxlVGltZSA/IGtDRkRhdGVGb3JtYXR0
ZXJMb25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7CisgICAgQ0ZEYXRlRm9ybWF0
dGVyU3R5bGUgdGltZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVEYXRlID8ga0NGRGF0ZUZvcm1h
dHRlckxvbmdTdHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKIAogICAgIGJvb2wgdXNl
Q3VzdG9tRm9ybWF0ID0gZmFsc2U7CiAgICAgVVN0cmluZyBjdXN0b21Gb3JtYXRTdHJpbmc7CkBA
IC0xMzYsMTIgKzEzOSwxMiBAQCBzdGF0aWMgVVN0cmluZyBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNT
dGF0CiAgICAgaWYgKGFyZzBTdHJpbmcgPT0gImN1c3RvbSIgJiYgIWFyZ3MuYXQoZXhlYywgMSkt
PmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgdXNlQ3VzdG9tRm9ybWF0ID0gdHJ1ZTsKICAgICAg
ICAgY3VzdG9tRm9ybWF0U3RyaW5nID0gYXJncy5hdChleGVjLCAxKS0+dG9TdHJpbmcoZXhlYyk7
Ci0gICAgfSBlbHNlIGlmIChpbmNsdWRlRGF0ZSAmJiBpbmNsdWRlVGltZSAmJiAhYXJncy5hdChl
eGVjLCAxKS0+aXNVbmRlZmluZWQoKSkgeworICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IExvY2Fs
ZURhdGVBbmRUaW1lICYmICFhcmdzLmF0KGV4ZWMsIDEpLT5pc1VuZGVmaW5lZCgpKSB7CiAgICAg
ICAgIGRhdGVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcwU3RyaW5nLCBkYXRlU3R5bGUp
OwogICAgICAgICB0aW1lU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJncy5hdChleGVjLCAx
KS0+dG9TdHJpbmcoZXhlYyksIHRpbWVTdHlsZSk7Ci0gICAgfSBlbHNlIGlmIChpbmNsdWRlRGF0
ZSAmJiAhYXJncy5hdChleGVjLCAwKS0+aXNVbmRlZmluZWQoKSkKKyAgICB9IGVsc2UgaWYgKGZv
cm1hdCAhPSBMb2NhbGVUaW1lICYmICFhcmdzLmF0KGV4ZWMsIDApLT5pc1VuZGVmaW5lZCgpKQog
ICAgICAgICBkYXRlU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZywgZGF0ZVN0
eWxlKTsKLSAgICBlbHNlIGlmIChpbmNsdWRlVGltZSAmJiAhYXJncy5hdChleGVjLCAwKS0+aXNV
bmRlZmluZWQoKSkKKyAgICBlbHNlIGlmIChmb3JtYXQgIT0gTG9jYWxlRGF0ZSAmJiAhYXJncy5h
dChleGVjLCAwKS0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgdGltZVN0eWxlID0gc3R5bGVGcm9t
QXJnU3RyaW5nKGFyZzBTdHJpbmcsIHRpbWVTdHlsZSk7CiAKICAgICBDRkxvY2FsZVJlZiBsb2Nh
bGUgPSBDRkxvY2FsZUNvcHlDdXJyZW50KCk7CkBAIC0xNTQsNyArMTU3LDcgQEAgc3RhdGljIFVT
dHJpbmcgZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogICAgICAgICBDRlJlbGVhc2UoY3VzdG9t
Rm9ybWF0Q0ZTdHJpbmcpOwogICAgIH0KIAotICAgIENGU3RyaW5nUmVmIHN0cmluZyA9IENGRGF0
ZUZvcm1hdHRlckNyZWF0ZVN0cmluZ1dpdGhBYnNvbHV0ZVRpbWUoMCwgZm9ybWF0dGVyLCB0aW1l
IC0ga0NGQWJzb2x1dGVUaW1lSW50ZXJ2YWxTaW5jZTE5NzApOworICAgIENGU3RyaW5nUmVmIHN0
cmluZyA9IENGRGF0ZUZvcm1hdHRlckNyZWF0ZVN0cmluZ1dpdGhBYnNvbHV0ZVRpbWUoMCwgZm9y
bWF0dGVyLCBmbG9vcih0aW1lSW5NaWxsaXNlY29uZHMgLyBtc1BlclNlY29uZCkgLSBrQ0ZBYnNv
bHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MCk7CiAKICAgICBDRlJlbGVhc2UoZm9ybWF0dGVyKTsK
IApAQCAtMTY2LDIwICsxNjksMTggQEAgc3RhdGljIFVTdHJpbmcgZm9ybWF0TG9jYWxlRGF0ZShF
eGVjU3RhdAogICAgIEFTU0VSVChsZW5ndGggPD0gYnVmZmVyTGVuZ3RoKTsKICAgICBpZiAobGVu
Z3RoID4gYnVmZmVyTGVuZ3RoKQogICAgICAgICBsZW5ndGggPSBidWZmZXJMZW5ndGg7Ci0gICAg
Q0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmluZywgQ0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgcmVp
bnRlcnByZXRfY2FzdDxVbmlDaGFyICo+KGJ1ZmZlcikpOworICAgIENGU3RyaW5nR2V0Q2hhcmFj
dGVycyhzdHJpbmcsIENGUmFuZ2VNYWtlKDAsIGxlbmd0aCksIGJ1ZmZlcik7CiAKICAgICBDRlJl
bGVhc2Uoc3RyaW5nKTsKIAotICAgIHJldHVybiBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAg
ICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgp
KTsKIH0KIAotI2Vsc2UKKyNlbHNlIC8vICFQTEFURk9STShNQUMpCiAKLWVudW0gTG9jYWxlRGF0
ZVRpbWVGb3JtYXQgeyBMb2NhbGVEYXRlQW5kVGltZSwgTG9jYWxlRGF0ZSwgTG9jYWxlVGltZSB9
OwotIAotc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEdyZWdvcmlhbkRhdGVUaW1lJiBnZHQsIGNvbnN0IExvY2FsZURhdGVUaW1lRm9ybWF0IGZv
cm1hdCkKK3N0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSYgZ2R0LCBMb2NhbGVEYXRlVGltZUZvcm1hdCBmb3JtYXQp
CiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZvcm1hdFN0cmluZ3NbXSA9IHsiJSNjIiwgIiUj
eCIsICIlWCJ9OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBmb3JtYXRTdHJpbmdzW10g
PSB7ICIlI2MiLCAiJSN4IiwgIiVYIiB9OwogIAogICAgIC8vIE9mZnNldCB5ZWFyIGlmIG5lZWRl
ZAogICAgIHN0cnVjdCB0bSBsb2NhbFRNID0gZ2R0OwpAQCAtMjExLDcgKzIxMiwxNSBAQCBzdGF0
aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCB0aW1lYnVmZmVyKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKFdJ
Tl9PUykKK3N0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXRlKiBleGVjLCBE
YXRlSW5zdGFuY2UqIGRhdGVPYmplY3QsIGRvdWJsZSB0aW1lSW5NaWxsaXNlY29uZHMsIExvY2Fs
ZURhdGVUaW1lRm9ybWF0IGZvcm1hdCwgY29uc3QgQXJnTGlzdCYpCit7CisgICAgR3JlZ29yaWFu
RGF0ZVRpbWUgZ3JlZ29yaWFuRGF0ZVRpbWU7CisgICAgY29uc3QgYm9vbCBub3RVVEMgPSBmYWxz
ZTsKKyAgICBkYXRlT2JqZWN0LT5tc1RvR3JlZ29yaWFuRGF0ZVRpbWUodGltZUluTWlsbGlzZWNv
bmRzLCBub3RVVEMsIGdyZWdvcmlhbkRhdGVUaW1lKTsKKyAgICByZXR1cm4gZm9ybWF0TG9jYWxl
RGF0ZShleGVjLCBncmVnb3JpYW5EYXRlVGltZSwgZm9ybWF0KTsKK30KKworI2VuZGlmIC8vICFQ
TEFURk9STShNQUMpCiAKIC8vIENvbnZlcnRzIGEgbGlzdCBvZiBhcmd1bWVudHMgc2VudCB0byBh
IERhdGUgbWVtYmVyIGZ1bmN0aW9uIGludG8gbWlsbGlzZWNvbmRzLCB1cGRhdGluZwogLy8gbXMg
KHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMpIGFuZCB0IChyZXByZXNlbnRpbmcgdGhlIHJlc3Qg
b2YgdGhlIGRhdGUgc3RydWN0dXJlKSBhcHByb3ByaWF0ZWx5LgpAQCAtMjk1LDcgKzMwNCw2IEBA
IHN0YXRpYyBib29sIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncygKIGNvbnN0IENsYXNzSW5m
byBEYXRlUHJvdG90eXBlOjppbmZvID0geyJEYXRlIiwgJkRhdGVJbnN0YW5jZTo6aW5mbywgMCwg
RXhlY1N0YXRlOjpkYXRlVGFibGV9OwogCiAvKiBTb3VyY2UgZm9yIERhdGVQcm90b3R5cGUubHV0
LmgKLSAgIEZJWE1FOiBXZSBjb3VsZCB1c2UgdGVtcGxhdGVzIHRvIHNpbXBsaWZ5IHRoZSBVVEMg
dmFyaWFudHMuCiBAYmVnaW4gZGF0ZVRhYmxlCiAgIHRvU3RyaW5nICAgICAgICAgICAgICBkYXRl
UHJvdG9GdW5jVG9TdHJpbmcgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAogICB0b1VUQ1N0cmluZyAgICAgICAgICAgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKQEAgLTMwNCw3ICszMTIsNyBAQCBjb25z
dCBDbGFzc0luZm8gRGF0ZVByb3RvdHlwZTo6aW5mbyA9IHsiCiAgIHRvTG9jYWxlU3RyaW5nICAg
ICAgICBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gICAgICAgMAogICB0b0xvY2FsZURhdGVTdHJpbmcgICAgZGF0ZVByb3RvRnVuY1RvTG9jYWxl
RGF0ZVN0cmluZyAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKICAgdG9Mb2NhbGVUaW1l
U3RyaW5nICAgIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcgICAgICBEb250RW51bXxG
dW5jdGlvbiAgICAgICAwCi0gIHZhbHVlT2YgICAgICAgICAgICAgICBkYXRlUHJvdG9GdW5jVmFs
dWVPZiAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICB2YWx1ZU9m
ICAgICAgICAgICAgICAgZGF0ZVByb3RvRnVuY0dldFRpbWUgICAgICAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uICAgICAgIDAKICAgZ2V0VGltZSAgICAgICAgICAgICAgIGRhdGVQcm90b0Z1
bmNHZXRUaW1lICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCiAgIGdl
dEZ1bGxZZWFyICAgICAgICAgICBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIgICAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gICAgICAgMAogICBnZXRVVENGdWxsWWVhciAgICAgICAgZGF0ZVBy
b3RvRnVuY0dldFVUQ0Z1bGxZZWFyICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAK
QEAgLTM0Myw2ICszNTEsNyBAQCBjb25zdCBDbGFzc0luZm8gRGF0ZVByb3RvdHlwZTo6aW5mbyA9
IHsiCiAgIGdldFllYXIgICAgICAgICAgICAgICBkYXRlUHJvdG9GdW5jR2V0WWVhciAgICAgICAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAogQGVuZAogKi8KKwogLy8gRUNNQSAx
NS45LjQKIAogRGF0ZVByb3RvdHlwZTo6RGF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCkBAIC00MzcsMTggKzQ0Niw3IEBAIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGUKICAgICBpZiAoaXNuYW4obWlsbGkp
KQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJJbnZhbGlkIERhdGUi
KTsKIAotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8g
bXNQZXJTZWNvbmQpOwotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0
TG9jYWxlRGF0ZShleGVjLCBzZWNzLCB0cnVlLCB0cnVlLCBhcmdzKSk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShhcmdzKTsKLQotICAgIGNvbnN0IGJvb2wgdXRjID0gZmFsc2U7Ci0KLSAgICBH
cmVnb3JpYW5EYXRlVGltZSB0OwotICAgIHRoaXNEYXRlT2JqLT5tc1RvR3JlZ29yaWFuRGF0ZVRp
bWUobWlsbGksIHV0YywgdCk7Ci0gICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUoZXhlYywgdCwg
TG9jYWxlRGF0ZUFuZFRpbWUpOwotI2VuZGlmCisgICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUo
ZXhlYywgdGhpc0RhdGVPYmosIG1pbGxpLCBMb2NhbGVEYXRlQW5kVGltZSwgYXJncyk7CiB9CiAK
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKQEAg
LTQ2MSwxOCArNDU5LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmlu
ZwogICAgIGlmIChpc25hbihtaWxsaSkpCiAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgIkludmFsaWQgRGF0ZSIpOwogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGRvdWJs
ZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7Ci0gICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhleGVjLCBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHNlY3MsIHRydWUsIGZhbHNl
LCBhcmdzKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKLQotICAgIGNvbnN0IGJv
b2wgdXRjID0gZmFsc2U7Ci0KLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIHRoaXNEYXRl
T2JqLT5tc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7Ci0gICAgcmV0dXJuIGZv
cm1hdExvY2FsZURhdGUoZXhlYywgdCwgTG9jYWxlRGF0ZSk7Ci0jZW5kaWYKKyAgICByZXR1cm4g
Zm9ybWF0TG9jYWxlRGF0ZShleGVjLCB0aGlzRGF0ZU9iaiwgbWlsbGksIExvY2FsZURhdGUsIGFy
Z3MpOwogfQogCiBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCkBAIC00ODUsMzEgKzQ3Miw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2Fs
ZVRpbWVTdHJpbmcKICAgICBpZiAoaXNuYW4obWlsbGkpKQogICAgICAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsICJJbnZhbGlkIERhdGUiKTsKIAotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwotICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0TG9jYWxlRGF0ZShleGVjLCBzZWNzLCBm
YWxzZSwgdHJ1ZSwgYXJncykpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXJncyk7Ci0KLSAg
ICBjb25zdCBib29sIHV0YyA9IGZhbHNlOwotCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAg
ICB0aGlzRGF0ZU9iai0+bXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOwotICAg
IHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHQsIExvY2FsZVRpbWUpOwotI2VuZGlmCi19
Ci0KLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQotewotICAgIGlmICghdGhp
c1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLQotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVP
YmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKLSAgICBkb3VibGUgbWlsbGkgPSB0aGlz
RGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKLSAgICBpZiAoaXNuYW4obWlsbGkpKQotICAgICAg
ICByZXR1cm4ganNOYU4oZXhlYyk7Ci0KLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbWlsbGkp
OworICAgIHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCBtaWxsaSwg
TG9jYWxlVGltZSwgYXJncyk7CiB9CiAKIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuY3BwCShyZXZp
c2lvbiAzOTYwMCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDcgQEAgVVN0cmluZyBKU05vdEFuT2JqZWN0Ojp0
b1N0cmluZyhFeGVjU3RhdAogCiBKU09iamVjdCogSlNOb3RBbk9iamVjdDo6dG9PYmplY3QoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICBBU1NF
UlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgZXhlYy0+ZXhjZXB0aW9uKCkgPT0gbV9leGNlcHRp
b24pOworICAgIEFTU0VSVF9VTlVTRUQoZXhlYywgZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgZXhl
Yy0+ZXhjZXB0aW9uKCkgPT0gbV9leGNlcHRpb24pOwogICAgIHJldHVybiBtX2V4Y2VwdGlvbjsK
IH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkocmV2aXNpb24gMzk2MDApCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDEyICs0NCwxMyBAQCBpbmxpbmUgUmVnRXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRhKiBnbG9iCiAg
ICAgLCBtX2NvbnN0cnVjdGlvbkVycm9yKDApCiAgICAgLCBtX251bVN1YnBhdHRlcm5zKDApCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOwogI2lmIEVOQUJMRShXUkVDKQogICAgIG1f
d3JlY0Z1bmN0aW9uID0gR2VuZXJhdG9yOjpjb21waWxlUmVnRXhwKGdsb2JhbERhdGEsIHBhdHRl
cm4sICZtX251bVN1YnBhdHRlcm5zLCAmbV9jb25zdHJ1Y3Rpb25FcnJvciwgbV9leGVjdXRhYmxl
UG9vbCk7CiAgICAgaWYgKG1fd3JlY0Z1bmN0aW9uIHx8IG1fY29uc3RydWN0aW9uRXJyb3IpCiAg
ICAgICAgIHJldHVybjsKICAgICAvLyBGYWxsIHRocm91Z2ggdG8gbm9uLVdSRUMgY2FzZS4KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbERhdGEpOwogI2VuZGlmCiAgICAgbV9yZWdFeHAg
PSBqc1JlZ0V4cENvbXBpbGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHBhdHRlcm4u
ZGF0YSgpKSwgcGF0dGVybi5zaXplKCksCiAgICAgICAgIEpTUmVnRXhwRG9Ob3RJZ25vcmVDYXNl
LCBKU1JlZ0V4cFNpbmdsZUxpbmUsICZtX251bVN1YnBhdHRlcm5zLCAmbV9jb25zdHJ1Y3Rpb25F
cnJvcik7CkBAIC02OCw4ICs2OSw2IEBAIGlubGluZSBSZWdFeHA6OlJlZ0V4cChKU0dsb2JhbERh
dGEqIGdsb2IKICAgICAsIG1fY29uc3RydWN0aW9uRXJyb3IoMCkKICAgICAsIG1fbnVtU3VicGF0
dGVybnMoMCkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7Ci0KICAgICAvLyBOT1RF
OiBUaGUgZ2xvYmFsIGZsYWcgaXMgaGFuZGxlZCBvbiBhIGNhc2UtYnktY2FzZSBiYXNpcyBieSBm
dW5jdGlvbnMgbGlrZQogICAgIC8vIFN0cmluZzo6bWF0Y2ggYW5kIFJlZ0V4cE9iamVjdDo6bWF0
Y2guCiAgICAgaWYgKGZsYWdzLmZpbmQoJ2cnKSAhPSAtMSkKQEAgLTkzLDYgKzkyLDggQEAgaW5s
aW5lIFJlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSogZ2xvYgogICAgIGlmIChtX3dyZWNGdW5j
dGlvbiB8fCBtX2NvbnN0cnVjdGlvbkVycm9yKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRmFs
bCB0aHJvdWdoIHRvIG5vbi1XUkVDIGNhc2UuCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxEYXRhKTsKICNlbmRpZgogICAgIG1fcmVnRXhwID0ganNSZWdFeHBDb21waWxlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihwYXR0ZXJuLmRhdGEoKSksIHBhdHRlcm4uc2l6ZSgpLAog
ICAgICAgICBpZ25vcmVDYXNlT3B0aW9uLCBtdWx0aWxpbmVPcHRpb24sICZtX251bVN1YnBhdHRl
cm5zLCAmbV9jb25zdHJ1Y3Rpb25FcnJvcik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvVENT
eXN0ZW1BbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1RDU3lzdGVt
QWxsb2MuY3BwCShyZXZpc2lvbiAzOTYwMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9UQ1N5c3Rl
bUFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgzLDggKzM4Myw2IEBAIHZvaWQqIFRDTWFs
bG9jX1N5c3RlbUFsbG9jKHNpemVfdCBzaXplLCAKIAogdm9pZCBUQ01hbGxvY19TeXN0ZW1SZWxl
YXNlKHZvaWQqIHN0YXJ0LCBzaXplX3QgbGVuZ3RoKQogewotICBVTlVTRURfUEFSQU0oc3RhcnQp
OwotICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKICNpZiBIQVZFKE1BRFZfRE9OVE5FRUQpCiAgIGlm
IChGTEFHU19tYWxsb2NfZGV2bWVtX3N0YXJ0KSB7CiAgICAgLy8gSXQncyBub3Qgc2FmZSB0byB1
c2UgTUFEVl9ET05UTkVFRCBpZiB3ZSd2ZSBiZWVuIG1hcHBpbmcKQEAgLTQyNiwxMiArNDI0LDE1
IEBAIHZvaWQgVENNYWxsb2NfU3lzdGVtUmVsZWFzZSh2b2lkKiBzdGFydCwKICAgQVNTRVJUX1VO
VVNFRChuZXdBZGRyZXNzLCBuZXdBZGRyZXNzID09IHN0YXJ0IHx8IG5ld0FkZHJlc3MgPT0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oTUFQX0ZBSUxFRCkpOwogICByZXR1cm47CiAjZW5kaWYKKwor
I2lmICFIQVZFKE1BRFZfRE9OVE5FRUQpICYmICFIQVZFKE1NQVApCisgIFVOVVNFRF9QQVJBTShz
dGFydCk7CisgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworI2VuZGlmCiB9CiAKICNpZiBIQVZFKFZJ
UlRVQUxBTExPQykKLXZvaWQgVENNYWxsb2NfU3lzdGVtQ29tbWl0KHZvaWQqIHN0YXJ0LCBzaXpl
X3QgbGVuZ3RoKQordm9pZCBUQ01hbGxvY19TeXN0ZW1Db21taXQodm9pZCosIHNpemVfdCkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhcnQpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwogfQog
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26608</attachid>
            <date>2009-01-11 11:25:06 -0800</date>
            <delta_ts>2009-01-11 12:27:32 -0800</delta_ts>
            <desc>step 2 -- covers ObjC files</desc>
            <filename>ObjCUnusedPatch.txt</filename>
            <type>text/plain</type>
            <size>22891</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTc5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDktMDEtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
MzEwMjogdHVybiBvbiB1bnVzZWQgcGFyYW1ldGVyIHdhcm5pbmdzIGluIFdlYkNvcmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAyCisKKyAgICAg
ICAgU2Vjb25kIHN0ZXA6IEZpeCBzaW1wbGUgT2JqZWN0aXZlLUMgY2FzZXMgd2hlcmUgd2UgbmVl
ZCB0byB1c2UgVU5VU0VEX1BBUkFNLgorICAgICAgICBUaGF0J3MgYmVjYXVzZSB5b3UgY2FuJ3Qg
b21pdCBhbiBhcmd1bWVudCBuYW1lIGluIE9iamVjdGl2ZS1DIG1ldGhvZHMuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9vYmpjL0RPTU9iamVjdC5tbToKKyAgICAgICAgKC1bRE9NT2JqZWN0IGNvcHlX
aXRoWm9uZTpdKTogVXNlIFVOVVNFRF9QQVJBTS4gQWxzbyByZW5hbWUgYXJndW1lbnQgdG8gaW5j
bHVkZQorICAgICAgICB0aGUgd29yZCAidW51c2VkIiBzbyB3ZSBkb24ndCBqdXN0IHN0YXJ0IHVz
aW5nIGl0IHdpdGhvdXQgcmVtb3ZpbmcgdGhlIG1hY3JvLgorICAgICAgICAqIGJpbmRpbmdzL29i
amMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAgICAgICAoK1tXZWJVbmRlZmluZWQgYWxsb2NXaXRo
Wm9uZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlVuZGVmaW5lZCBpbml0V2l0aENvZGVyOl0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViVW5kZWZpbmVkIGVuY29kZVdpdGhDb2RlcjpdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYlVuZGVmaW5lZCBjb3B5V2l0aFpvbmU6XSk6IERpdHRvLgorICAg
ICAgICAqIHBhZ2UvbWFjL1dlYkRhc2hib2FyZFJlZ2lvbi5tOgorICAgICAgICAoLVtXZWJEYXNo
Ym9hcmRSZWdpb24gY29weVdpdGhab25lOl0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW06CisgICAgICAgIChXZWJDb3Jl
OjptYWluVGhyZWFkU2V0TmVlZHNEaXNwbGF5KTogT21pdCBhcmd1bWVudCBuYW1lLgorICAgICAg
ICAoLVtXZWJDb3JlTW92aWVPYnNlcnZlciBsb2FkU3RhdGVDaGFuZ2VkOl0pOiBVc2UgVU5VU0VE
X1BBUkFNIGFzIGFib3ZlLgorICAgICAgICAoLVtXZWJDb3JlTW92aWVPYnNlcnZlciByYXRlQ2hh
bmdlZDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVNb3ZpZU9ic2VydmVyIHNpemVDaGFu
Z2VkOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViQ29yZU1vdmllT2JzZXJ2ZXIgdGltZUNoYW5n
ZWQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJDb3JlTW92aWVPYnNlcnZlciBkaWRFbmQ6XSk6
IERpdHRvLgorICAgICAgICAoLVtXZWJDb3JlTW92aWVPYnNlcnZlciBuZXdJbWFnZUF2YWlsYWJs
ZTpdKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1t
OgorICAgICAgICAoK1tTY3JvbGxiYXJQcmVmc09ic2VydmVyIGFwcGVhcmFuY2VQcmVmc0NoYW5n
ZWQ6XSk6IERpdHRvLgorICAgICAgICAoK1tTY3JvbGxiYXJQcmVmc09ic2VydmVyIGJlaGF2aW9y
UHJlZnNDaGFuZ2VkOl0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2hhcmVkVGlt
ZXJNYWMubW06CisgICAgICAgICgtW1dlYkNvcmVQb3dlck5vdGlmaWVyIGRpZFdha2U6XSk6IERp
dHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlS2V5R2VuZXJhdG9yLm06CisgICAg
ICAgICgtW1dlYkNvcmVLZXlHZW5lcmF0b3Igc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3Ry
aW5nV2l0aFN0cmVuZ3RoSW5kZXg6Y2hhbGxlbmdlOnBhZ2VVUkw6XSk6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tOgorICAgICAgICAo
LVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246d2lsbFNlbmRSZXF1
ZXN0OnJlZGlyZWN0UmVzcG9uc2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJDb3JlUmVzb3Vy
Y2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTpd
KTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgY29u
bmVjdGlvbjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkQ2Fu
Y2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJDb3Jl
UmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZVJlc3BvbnNlOl0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBjb25u
ZWN0aW9uOmRpZFJlY2VpdmVEYXRhOmxlbmd0aFJlY2VpdmVkOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBjb25uZWN0aW9uOndpbGxTdG9wQnVm
ZmVyaW5nRGF0YTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFz
RGVsZWdhdGUgY29ubmVjdGlvbjpkaWRTZW5kQm9keURhdGE6dG90YWxCeXRlc1dyaXR0ZW46dG90
YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVSZXNv
dXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6XSk6IERpdHRv
LgorICAgICAgICAoLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246
ZGlkRmFpbFdpdGhFcnJvcjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhh
bmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvbjp3aWxsQ2FjaGVSZXNwb25zZTpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBjb25uZWN0aW9uOndpbGxTZW5kUmVx
dWVzdDpyZWRpcmVjdFJlc3BvbnNlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIGNvbm5lY3Rp
b246ZGlkUmVjZWl2ZVJlc3BvbnNlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZURhdGE6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6
XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgY29ubmVjdGlv
bjpkaWRGYWlsV2l0aEVycm9yOl0pOiBEaXR0by4KKwogMjAwOS0wMS0xMSAgWmFsYW4gQnVqdGFz
ICA8emJ1anRhc0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3Nr
dXJ5YWtvdi4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01PYmplY3QubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTU9iamVjdC5tbQkocmV2aXNpb24gMzk3
OTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBACiAjaW1wb3J0ICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNp
bXBvcnQgIlN0eWxlU2hlZXQuaCIKICNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1VudXNlZFBhcmFtLmg+CiAKIEBpbXBsZW1lbnRhdGlv
biBET01PYmplY3QKIApAQCAtNTYsOCArNTcsOSBAQAogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0K
IAotLSAoaWQpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lCistIChpZCljb3B5V2l0aFpvbmU6
KE5TWm9uZSAqKXVudXNlZFpvbmUKIHsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkWm9uZSk7CiAg
ICAgcmV0dXJuIFtzZWxmIHJldGFpbl07CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMzk3OTcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsOCArNTgzLDEw
IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKIAogQGltcGxlbWVu
dGF0aW9uIFdlYlVuZGVmaW5lZAogCi0rIChpZClhbGxvY1dpdGhab25lOihOU1pvbmUgKil6b25l
CisrIChpZClhbGxvY1dpdGhab25lOihOU1pvbmUgKil1bnVzZWRab25lCiB7CisgICAgVU5VU0VE
X1BBUkFNKHVudXNlZFpvbmUpOworCiAgICAgc3RhdGljIFdlYlVuZGVmaW5lZCAqc2hhcmVkVW5k
ZWZpbmVkID0gMDsKICAgICBpZiAoIXNoYXJlZFVuZGVmaW5lZCkKICAgICAgICAgc2hhcmVkVW5k
ZWZpbmVkID0gW3N1cGVyIGFsbG9jV2l0aFpvbmU6TlVMTF07CkBAIC01OTYsMTcgKzU5OCwyMiBA
QCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIEAi
dW5kZWZpbmVkIjsKIH0KIAotLSAoaWQpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWNvZGVyCist
IChpZClpbml0V2l0aENvZGVyOihOU0NvZGVyICopdW51c2VkQ29kZXIKIHsKKyAgICBVTlVTRURf
UEFSQU0odW51c2VkQ29kZXIpOworCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZW5j
b2RlV2l0aENvZGVyOihOU0NvZGVyICopZW5jb2RlcgorLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6
KE5TQ29kZXIgKil1bnVzZWRDb2RlcgogeworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWRDb2Rlcik7
CiB9CiAKLS0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZQorLSAoaWQpY29weVdpdGha
b25lOihOU1pvbmUgKil1bnVzZWRab25lCiB7CisgICAgVU5VU0VEX1BBUkFNKHVudXNlZFpvbmUp
OworCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvV2ViRGFz
aGJvYXJkUmVnaW9uLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJEYXNoYm9h
cmRSZWdpb24ubQkocmV2aXNpb24gMzk3OTcpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL1dlYkRhc2hi
b2FyZFJlZ2lvbi5tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyLDExICsyMiwxNiBAQAogICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkRhc2hib2FyZFJlZ2lvbi5oIgogCisjaW1w
b3J0IDx3dGYvVW51c2VkUGFyYW0uaD4KKwogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkK
KwogQGltcGxlbWVudGF0aW9uIFdlYkRhc2hib2FyZFJlZ2lvbgorCiAtIGluaXRXaXRoUmVjdDoo
TlNSZWN0KXIgY2xpcDooTlNSZWN0KWMgdHlwZTooV2ViRGFzaGJvYXJkUmVnaW9uVHlwZSl0CiB7
CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKQEAgLTM2LDggKzQxLDEwIEBACiAgICAgcmV0dXJu
IHNlbGY7CiB9CiAKLS0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZQorLSAoaWQpY29w
eVdpdGhab25lOihOU1pvbmUgKil1bnVzZWRab25lCiB7CisgICAgVU5VU0VEX1BBUkFNKHVudXNl
ZFpvbmUpOworCiAgICAgcmV0dXJuIFtzZWxmIHJldGFpbl07CiB9CiAKQEAgLTc0LDQgKzgxLDUg
QEAKIH0KIAogQGVuZAorCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiAz
OTc5NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTQgQEAKICNpbXBvcnQgIk1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgor
I2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBv
cnQgIktVUkwuaCIKLSNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcu
aCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgPFFUS2l0L1FU
S2l0Lmg+CiAjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL1VudXNl
ZFBhcmFtLmg+CiAKICNpZiBEUkFXX0ZSQU1FX1JBVEUKICNpbXBvcnQgIkZvbnQuaCIKQEAgLTIz
OSw3ICsyNDAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRNb3ZpZShjCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDptX3F0
TW92aWUuZ2V0KCldOwogfQogCi1zdGF0aWMgdm9pZCBtYWluVGhyZWFkU2V0TmVlZHNEaXNwbGF5
KGlkIHNlbGYsIFNFTCBfY21kKQorc3RhdGljIHZvaWQgbWFpblRocmVhZFNldE5lZWRzRGlzcGxh
eShpZCBzZWxmLCBTRUwpCiB7CiAgICAgaWQgbW92aWVWaWV3ID0gW3NlbGYgc3VwZXJ2aWV3XTsK
ICAgICBBU1NFUlQoIW1vdmllVmlldyB8fCBbbW92aWVWaWV3IGlzS2luZE9mQ2xhc3M6W1FUTW92
aWVWaWV3IGNsYXNzXV0pOwpAQCAtOTY5LDQ4ICs5NzAsNTQgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmRpc2FibGVVbnN1cHBvcgogICAgICAgICBtX2NhbGxiYWNrLT5yZXBhaW50KCk7CiB9
CiAKLS0gKHZvaWQpbG9hZFN0YXRlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KKy0gKHZvaWQpbG9hZFN0YXRlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKil1bnVzZWROb3Rp
ZmljYXRpb24KIHsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKICAgICBp
ZiAobV9kZWxheUNhbGxiYWNrcykKICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOl9jbWQg
d2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTowXTsKICAgICBlbHNlCiAgICAgICAgIG1fY2FsbGJh
Y2stPmxvYWRTdGF0ZUNoYW5nZWQoKTsKIH0KIAotLSAodm9pZClyYXRlQ2hhbmdlZDooTlNOb3Rp
ZmljYXRpb24gKilub3RpZmljYXRpb24KKy0gKHZvaWQpcmF0ZUNoYW5nZWQ6KE5TTm90aWZpY2F0
aW9uICopdW51c2VkTm90aWZpY2F0aW9uCiB7CisgICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlm
aWNhdGlvbik7CiAgICAgaWYgKG1fZGVsYXlDYWxsYmFja3MpCiAgICAgICAgIFtzZWxmIHBlcmZv
cm1TZWxlY3RvcjpfY21kIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07CiAgICAgZWxzZQog
ICAgICAgICBtX2NhbGxiYWNrLT5yYXRlQ2hhbmdlZCgpOwogfQogCi0tICh2b2lkKXNpemVDaGFu
Z2VkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClzaXplQ2hhbmdlZDoo
TlNOb3RpZmljYXRpb24gKil1bnVzZWROb3RpZmljYXRpb24KIHsKKyAgICBVTlVTRURfUEFSQU0o
dW51c2VkTm90aWZpY2F0aW9uKTsKICAgICBpZiAobV9kZWxheUNhbGxiYWNrcykKICAgICAgICAg
W3NlbGYgcGVyZm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTowXTsK
ICAgICBlbHNlCiAgICAgICAgIG1fY2FsbGJhY2stPnNpemVDaGFuZ2VkKCk7CiB9CiAKLS0gKHZv
aWQpdGltZUNoYW5nZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCistICh2b2lkKXRp
bWVDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKXVudXNlZE5vdGlmaWNhdGlvbgogeworICAgIFVO
VVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwogICAgIGlmIChtX2RlbGF5Q2FsbGJhY2tz
KQogICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6X2NtZCB3aXRoT2JqZWN0Om5pbCBhZnRl
ckRlbGF5OjBdOwogICAgIGVsc2UKICAgICAgICAgbV9jYWxsYmFjay0+dGltZUNoYW5nZWQoKTsK
IH0KIAotLSAodm9pZClkaWRFbmQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCistICh2
b2lkKWRpZEVuZDooTlNOb3RpZmljYXRpb24gKil1bnVzZWROb3RpZmljYXRpb24KIHsKKyAgICBV
TlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKICAgICBpZiAobV9kZWxheUNhbGxiYWNr
cykKICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9iamVjdDpuaWwgYWZ0
ZXJEZWxheTowXTsKICAgICBlbHNlCiAgICAgICAgIG1fY2FsbGJhY2stPmRpZEVuZCgpOwogfQog
Ci0tICh2b2lkKW5ld0ltYWdlQXZhaWxhYmxlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgorLSAodm9pZCluZXdJbWFnZUF2YWlsYWJsZTooTlNOb3RpZmljYXRpb24gKil1bnVzZWROb3Rp
ZmljYXRpb24KIHsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKICAgICBb
c2VsZiByZXBhaW50XTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
VGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFy
VGhlbWVNYWMubW0JKHJldmlzaW9uIDM5Nzk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAKICNpbmNs
dWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQogI2luY2x1ZGUg
PENhcmJvbi9DYXJib24uaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIC8vIEZJWE1FOiBUaGVyZSBhcmUgcmVwYWludGluZyBw
cm9ibGVtcyBkdWUgdG8gQXF1YSBzY3JvbGwgYmFyIGJ1dHRvbnMnIHZpc3VhbCBvdmVyZmxvdy4K
IApAQCAtNTgsOCArNTgsMTAgQEAgc3RhdGljIEhhc2hTZXQ8U2Nyb2xsYmFyKj4qIGdTY3JvbGxi
YXJzOwogCiBAaW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcgogCi0rICh2b2lk
KWFwcGVhcmFuY2VQcmVmc0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil0aGVOb3RpZmljYXRpb24K
KysgKHZvaWQpYXBwZWFyYW5jZVByZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXVudXNlZE5v
dGlmaWNhdGlvbgogeworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOworCiAg
ICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPihTY3JvbGxiYXJUaGVtZTo6bmF0aXZl
VGhlbWUoKSktPnByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIGlmICghZ1Njcm9sbGJhcnMpCiAg
ICAgICAgIHJldHVybjsKQEAgLTcwLDggKzcyLDEwIEBAIHN0YXRpYyBIYXNoU2V0PFNjcm9sbGJh
cio+KiBnU2Nyb2xsYmFyczsKICAgICB9CiB9CiAKLSsgKHZvaWQpYmVoYXZpb3JQcmVmc0NoYW5n
ZWQ6KE5TTm90aWZpY2F0aW9uKil0aGVOb3RpZmljYXRpb24KKysgKHZvaWQpYmVoYXZpb3JQcmVm
c0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil1bnVzZWROb3RpZmljYXRpb24KIHsKKyAgICBVTlVT
RURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKKwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGJh
clRoZW1lTWFjKj4oU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5wcmVmZXJlbmNlc0No
YW5nZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2hhcmVkVGltZXJNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2hhcmVkVGltZXJNYWMubW0J
KHJldmlzaW9uIDM5Nzk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2hhcmVkVGltZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjYsOCBAQAogI2ltcG9ydCAiY29uZmlnLmgi
CiAjaW1wb3J0ICJTaGFyZWRUaW1lci5oIgogCi0jaW5jbHVkZSA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW1wb3J0IDx3dGYvVW51c2VkUGFyYW0uaD4KIAogQGNsYXNzIFdlYkNvcmVQb3dl
ck5vdGlmaWVyOwogCkBAIC01OCw4ICs1OCwxMCBAQCBzdGF0aWMgdm9pZCB0aW1lckZpcmVkKENG
UnVuTG9vcFRpbWVyUmVmCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZGlkV2FrZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KKy0gKHZvaWQpZGlkV2FrZTooTlNOb3RpZmlj
YXRpb24gKil1bnVzZWROb3RpZmljYXRpb24KIHsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkTm90
aWZpY2F0aW9uKTsKKwogICAgIGlmIChXZWJDb3JlOjpzaGFyZWRUaW1lcikgewogICAgICAgICBX
ZWJDb3JlOjpzdG9wU2hhcmVkVGltZXIoKTsKICAgICAgICAgV2ViQ29yZTo6dGltZXJGaXJlZCgw
LCAwKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVLZXlHZW5lcmF0b3IubQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlS2V5R2VuZXJhdG9yLm0J
KHJldmlzaW9uIDM5Nzk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZUtleUdlbmVy
YXRvci5tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIldlYkNv
cmVLZXlHZW5lcmF0b3IuaCIKIAogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBzdGF0aWMgV2ViQ29yZUtleUdlbmVyYXRvciAqc2hhcmVk
R2VuZXJhdG9yOwogCkBAIC01MCw4ICs1MSwxMiBAQCBzdGF0aWMgV2ViQ29yZUtleUdlbmVyYXRv
ciAqc2hhcmVkR2VuZXJhCiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoTlNTdHJpbmcgKilzaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmdXaXRoU3RyZW5ndGhJbmRleDoodW5zaWduZWQp
aW5kZXggY2hhbGxlbmdlOihOU1N0cmluZyAqKWNoYWxsZW5nZSBwYWdlVVJMOihOU1VSTCAqKXBh
Z2VVUkwKKy0gKE5TU3RyaW5nICopc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nV2l0
aFN0cmVuZ3RoSW5kZXg6KHVuc2lnbmVkKXVudXNlZEluZGV4IGNoYWxsZW5nZTooTlNTdHJpbmcg
Kil1bnVzZWRDaGFsbGVuZ2UgcGFnZVVSTDooTlNVUkwgKil1bnVzZWRQYWdlVVJMCiB7CisgICAg
VU5VU0VEX1BBUkFNKHVudXNlZEluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkQ2hhbGxl
bmdlKTsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkUGFnZVVSTCk7CisKICAgICByZXR1cm4gbmls
OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxl
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3Vy
Y2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDM5Nzk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNCw3ICsyNCw2IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJS
ZXNvdXJjZUhhbmRsZS5oIgogI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogCiAj
aW1wb3J0ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgpAQCAtNDEsNiArNDAsNyBAQAogI2lt
cG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2lt
cG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCA8d3RmL1VudXNlZFBhcmFt
Lmg+CiAKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogdHlwZWRlZiBpbnQgTlNJbnRlZ2VyOwpA
QCAtNjQsNiArNjQsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIEBlbmQKIAogI2lmbmRl
ZiBCVUlMRElOR19PTl9USUdFUgorCiBAaW50ZXJmYWNlIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ciA6IE5TT2JqZWN0IHsKICAgICBOU1VSTCAqbV91cmw7CiAgICAgTlNVUkxSZXNwb25zZSAqbV9y
ZXNwb25zZTsKQEAgLTc1LDYgKzc2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBAZW5k
CiAKIHN0YXRpYyBOU1N0cmluZyAqV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUg
PSBAIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlIjsKKwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEzNSw2ICsxMzcsNyBAQCBib29sIFJlc291cmNlSGFuZGxl
OjpzdGFydChGcmFtZSogZnJhbWUpCiAjaWZuZGVmIE5ERUJVRwogICAgIGlzSW5pdGlhbGl6aW5n
Q29ubmVjdGlvbiA9IFlFUzsKICNlbmRpZgorCiAgICAgaWQgZGVsZWdhdGU7CiAgICAgCiAgICAg
aWYgKGQtPm1fbWlnaHREb3dubG9hZEZyb21IYW5kbGUpIHsKQEAgLTQ1MSw4ICs0NTQsMTAgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogICAgIG1faGFuZGxlID0g
MDsKIH0KIAotLSAoTlNVUkxSZXF1ZXN0ICopY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICop
Y29uIHdpbGxTZW5kUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopbmV3UmVxdWVzdCByZWRpcmVjdFJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVkaXJlY3RSZXNwb25zZQorLSAoTlNVUkxSZXF1ZXN0
ICopY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopdW51c2VkQ29ubmVjdGlvbiB3aWxsU2Vu
ZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKW5ld1JlcXVlc3QgcmVkaXJlY3RSZXNwb25zZTooTlNV
UkxSZXNwb25zZSAqKXJlZGlyZWN0UmVzcG9uc2UKIHsKKyAgICBVTlVTRURfUEFSQU0odW51c2Vk
Q29ubmVjdGlvbik7CisKICAgICAvLyB0aGUgd2lsbFNlbmRSZXF1ZXN0IGNhbGwgbWF5IGNhbmNl
bCB0aGlzIGxvYWQsIGluIHdoaWNoIGNhc2Ugc2VsZiBjb3VsZCBiZSBkZWFsbG9jYXRlZAogICAg
IFJldGFpblB0cjxXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlPiBwcm90ZWN0KHNlbGYp
OwogCkBAIC00ODYsOCArNDkxLDEwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2Fu
Y2VsbGF0aW8KICAgICByZXR1cm4gcmVxdWVzdC5uc1VSTFJlcXVlc3QoKTsKIH0KIAotLSAoQk9P
TCljb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6KE5TVVJMQ29ubmVjdGlvbiAq
KWNvbm5lY3Rpb24KKy0gKEJPT0wpY29ubmVjdGlvblNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
OihOU1VSTENvbm5lY3Rpb24gKil1bnVzZWRDb25uZWN0aW9uCiB7CisgICAgVU5VU0VEX1BBUkFN
KHVudXNlZENvbm5lY3Rpb24pOworCiAgICAgaWYgKCFtX2hhbmRsZSkKICAgICAgICAgcmV0dXJu
IE5POwogCkBAIC00OTUsOCArNTAyLDEwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVk
Q2FuY2VsbGF0aW8KICAgICByZXR1cm4gbV9oYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlKCk7CiB9CiAKLS0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29uIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSAqKWNoYWxsZW5nZQorLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKil1
bnVzZWRDb25uZWN0aW9uIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQogeworICAgIFVOVVNFRF9QQVJBTSh1
bnVzZWRDb25uZWN0aW9uKTsKKwogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIGlmIChb
Y2hhbGxlbmdlIHByZXZpb3VzRmFpbHVyZUNvdW50XSA9PSAwKSB7CiAgICAgICAgIE5TU3RyaW5n
ICp1c2VyID0gW21fdXJsIHVzZXJdOwpAQCAtNTE5LDI0ICs1MjgsMzAgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogICAgIG1faGFuZGxlLT5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoY29yZShjaGFsbGVuZ2UpKTsKIH0KIAotLSAodm9pZCljb25u
ZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb24gZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFs
bGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UKKy0gKHZvaWQp
Y29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopdW51c2VkQ29ubmVjdGlvbiBkaWRDYW5jZWxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNo
YWxsZW5nZQogeworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWRDb25uZWN0aW9uKTsKKwogICAgIGlm
ICghbV9oYW5kbGUpCiAgICAgICAgIHJldHVybjsKICAgICBDYWxsYmFja0d1YXJkIGd1YXJkOwog
ICAgIG1faGFuZGxlLT5kaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb3JlKGNoYWxs
ZW5nZSkpOwogfQogCi0tICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbiBk
aWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCistICh2b2lkKWNvbm5lY3Rpb246
KE5TVVJMQ29ubmVjdGlvbiAqKXVudXNlZENvbm5lY3Rpb24gZGlkUmVjZWl2ZVJlc3BvbnNlOihO
U1VSTFJlc3BvbnNlICopcgogeworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWRDb25uZWN0aW9uKTsK
KwogICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIENhbGxiYWNrR3VhcmQgZ3VhcmQ7CiAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5k
aWRSZWNlaXZlUmVzcG9uc2UobV9oYW5kbGUsIHIpOwogfQogCi0tICh2b2lkKWNvbm5lY3Rpb246
KE5TVVJMQ29ubmVjdGlvbiAqKWNvbiBkaWRSZWNlaXZlRGF0YTooTlNEYXRhICopZGF0YSBsZW5n
dGhSZWNlaXZlZDoobG9uZyBsb25nKWxlbmd0aFJlY2VpdmVkCistICh2b2lkKWNvbm5lY3Rpb246
KE5TVVJMQ29ubmVjdGlvbiAqKXVudXNlZENvbm5lY3Rpb24gZGlkUmVjZWl2ZURhdGE6KE5TRGF0
YSAqKWRhdGEgbGVuZ3RoUmVjZWl2ZWQ6KGxvbmcgbG9uZylsZW5ndGhSZWNlaXZlZAogeworICAg
IFVOVVNFRF9QQVJBTSh1bnVzZWRDb25uZWN0aW9uKTsKKwogICAgIGlmICghbV9oYW5kbGUgfHwg
IW1faGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB3
ZSBnZXQgbW9yZSB0aGFuIDJCIGJ5dGVzIGluIGEgc2luZ2xlIGNodW5rLCB0aGlzIGNvZGUgd29u
J3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgpAQCAtNTQ2LDggKzU2MSwxMCBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvCiAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRS
ZWNlaXZlRGF0YShtX2hhbmRsZSwgKGNvbnN0IGNoYXIqKVtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVu
Z3RoXSwgc3RhdGljX2Nhc3Q8aW50PihsZW5ndGhSZWNlaXZlZCkpOwogfQogCi0tICh2b2lkKWNv
bm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbiB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGE6KE5T
RGF0YSAqKWRhdGEKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopdW51c2Vk
Q29ubmVjdGlvbiB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGE6KE5TRGF0YSAqKWRhdGEKIHsKKyAgICBV
TlVTRURfUEFSQU0odW51c2VkQ29ubmVjdGlvbik7CisKICAgICBpZiAoIW1faGFuZGxlIHx8ICFt
X2hhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogSWYgd2Ug
Z2V0IGEgcmVzb3VyY2Ugd2l0aCBtb3JlIHRoYW4gMkIgYnl0ZXMsIHRoaXMgY29kZSB3b24ndCBk
byB0aGUgcmlnaHQgdGhpbmcuCkBAIC01NTcsMTYgKzU3NCwyMSBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvCiAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT53aWxsU3Rv
cEJ1ZmZlcmluZ0RhdGEobV9oYW5kbGUsIChjb25zdCBjaGFyKilbZGF0YSBieXRlc10sIHN0YXRp
Y19jYXN0PGludD4oW2RhdGEgbGVuZ3RoXSkpOwogfQogCi0tICh2b2lkKWNvbm5lY3Rpb246KE5T
VVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkU2VuZEJvZHlEYXRhOihOU0ludGVnZXIpYnl0
ZXNXcml0dGVuIHRvdGFsQnl0ZXNXcml0dGVuOihOU0ludGVnZXIpdG90YWxCeXRlc1dyaXR0ZW4g
dG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZTooTlNJbnRlZ2VyKXRvdGFsQnl0ZXNFeHBlY3RlZFRv
V3JpdGUKKy0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopdW51c2VkQ29ubmVj
dGlvbiBkaWRTZW5kQm9keURhdGE6KE5TSW50ZWdlcil1bnVzZWRCeXRlc1dyaXR0ZW4gdG90YWxC
eXRlc1dyaXR0ZW46KE5TSW50ZWdlcil0b3RhbEJ5dGVzV3JpdHRlbiB0b3RhbEJ5dGVzRXhwZWN0
ZWRUb1dyaXRlOihOU0ludGVnZXIpdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZQogeworICAgIFVO
VVNFRF9QQVJBTSh1bnVzZWRDb25uZWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkQnl0
ZXNXcml0dGVuKTsKKwogICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIENhbGxiYWNrR3VhcmQgZ3VhcmQ7CiAgICAgbV9oYW5kbGUt
PmNsaWVudCgpLT5kaWRTZW5kRGF0YShtX2hhbmRsZSwgdG90YWxCeXRlc1dyaXR0ZW4sIHRvdGFs
Qnl0ZXNFeHBlY3RlZFRvV3JpdGUpOwogfQogCi0tICh2b2lkKWNvbm5lY3Rpb25EaWRGaW5pc2hM
b2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKiljb24KKy0gKHZvaWQpY29ubmVjdGlvbkRpZEZpbmlz
aExvYWRpbmc6KE5TVVJMQ29ubmVjdGlvbiAqKXVudXNlZENvbm5lY3Rpb24KIHsKKyAgICBVTlVT
RURfUEFSQU0odW51c2VkQ29ubmVjdGlvbik7CisKICAgICBpZiAoIW1faGFuZGxlIHx8ICFtX2hh
bmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBDYWxsYmFja0d1YXJkIGd1YXJk
OwpAQCAtNTc3LDggKzU5OSwxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNl
bGxhdGlvCiAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxl
KTsKIH0KIAotLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb24gZGlkRmFp
bFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCistICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29u
bmVjdGlvbiAqKXVudXNlZENvbm5lY3Rpb24gZGlkRmFpbFdpdGhFcnJvcjooTlNFcnJvciAqKWVy
cm9yCiB7CisgICAgVU5VU0VEX1BBUkFNKHVudXNlZENvbm5lY3Rpb24pOworCiAgICAgaWYgKCFt
X2hhbmRsZSB8fCAhbV9oYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgQ2Fs
bGJhY2tHdWFyZCBndWFyZDsKQEAgLTYwMCw4ICs2MjQsMTAgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogfQogI2VuZGlmCiAKLS0gKE5TQ2FjaGVkVVJMUmVzcG9u
c2UgKiljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIHdpbGxDYWNoZVJl
c3BvbnNlOihOU0NhY2hlZFVSTFJlc3BvbnNlICopY2FjaGVkUmVzcG9uc2UKKy0gKE5TQ2FjaGVk
VVJMUmVzcG9uc2UgKiljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKil1bnVzZWRDb25uZWN0
aW9uIHdpbGxDYWNoZVJlc3BvbnNlOihOU0NhY2hlZFVSTFJlc3BvbnNlICopY2FjaGVkUmVzcG9u
c2UKIHsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkQ29ubmVjdGlvbik7CisKICNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgogICAgIC8vIE9uIFRpZ2VyIENGVVJMQ29ubmVjdGlvbiBjYW4gc29tZXRp
bWVzIGNhbGwgdGhlIGNvbm5lY3Rpb246d2lsbENhY2hlUmVzcG9uc2U6IGRlbGVnYXRlIG1ldGhv
ZCBvbgogICAgIC8vIGEgc2Vjb25kYXJ5IHRocmVhZCBpbnN0ZWFkIG9mIHRoZSBtYWluIHRocmVh
ZC4gSWYgdGhpcyBoYXBwZW5zIHBlcmZvcm0gdGhlIHdvcmsgb24gdGhlIG1haW4gdGhyZWFkLgpA
QCAtNjI5LDYgKzY1NSw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0
aW8KICAgICBpZiAoaXNJbml0aWFsaXppbmdDb25uZWN0aW9uKQogICAgICAgICBMT0dfRVJST1Io
ImNvbm5lY3Rpb246d2lsbENhY2hlUmVzcG9uc2U6IHdhcyBjYWxsZWQgaW5zaWRlIG9mIFtOU1VS
TENvbm5lY3Rpb24gaW5pdFdpdGhSZXF1ZXN0OmRlbGVnYXRlOl0gKDQwNjc2MjUpIik7CiAjZW5k
aWYKKwogICAgIGlmICghbV9oYW5kbGUgfHwgIW1faGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIApAQCAtNjc1LDYgKzcwMiw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJl
Y2VpdmVkQ2FuY2VsbGF0aW8KIEBlbmQKIAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorCiBA
aW1wbGVtZW50YXRpb24gV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyCiAKIC0gKEJPT0wpX2lzRG9u
ZQpAQCAtNjkyLDggKzcyMCwxMSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNl
bGxhdGlvCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCi0tIChOU1VSTFJlcXVlc3QgKiljb25u
ZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIHdpbGxTZW5kUmVxdWVzdDooTlNV
UkxSZXF1ZXN0ICopbmV3UmVxdWVzdCByZWRpcmVjdFJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICop
cmVkaXJlY3RSZXNwb25zZQorLSAoTlNVUkxSZXF1ZXN0ICopY29ubmVjdGlvbjooTlNVUkxDb25u
ZWN0aW9uICopdW51c2VkQ29ubmVjdGlvbiB3aWxsU2VuZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAq
KW5ld1JlcXVlc3QgcmVkaXJlY3RSZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXVudXNlZFJlZGly
ZWN0UmVzcG9uc2UKIHsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkQ29ubmVjdGlvbik7CisgICAg
VU5VU0VEX1BBUkFNKHVudXNlZFJlZGlyZWN0UmVzcG9uc2UpOworCiAgICAgTlNVUkwgKmNvcHkg
PSBbW25ld1JlcXVlc3QgVVJMXSBjb3B5XTsKICAgICBbbV91cmwgcmVsZWFzZV07CiAgICAgbV91
cmwgPSBjb3B5OwpAQCAtNzAxLDggKzczMiwxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNl
aXZlZENhbmNlbGxhdGlvCiAgICAgcmV0dXJuIG5ld1JlcXVlc3Q7CiB9CiAKLS0gKHZvaWQpY29u
bmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UK
Ky0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopdW51c2VkQ29ubmVjdGlvbiBk
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgKiljaGFsbGVuZ2UKIHsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkQ29ubmVjdGlvbik7
CisKICAgICBpZiAoW2NoYWxsZW5nZSBwcmV2aW91c0ZhaWx1cmVDb3VudF0gPT0gMCkgewogICAg
ICAgICBOU1N0cmluZyAqdXNlciA9IFttX3VybCB1c2VyXTsKICAgICAgICAgTlNTdHJpbmcgKnBh
c3N3b3JkID0gW21fdXJsIHBhc3N3b3JkXTsKQEAgLTcyMCwyOSArNzUzLDM3IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW8KICAgICBbW2NoYWxsZW5nZSBzZW5kZXJd
IGNvbnRpbnVlV2l0aG91dENyZWRlbnRpYWxGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFs
bGVuZ2VdOwogfQogCi0tICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5l
Y3Rpb24gZGlkUmVjZWl2ZVJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UKKy0gKHZv
aWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopdW51c2VkQ29ubmVjdGlvbiBkaWRSZWNl
aXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZQogeworICAgIFVOVVNFRF9QQVJB
TSh1bnVzZWRDb25uZWN0aW9uKTsKKwogICAgIE5TVVJMUmVzcG9uc2UgKnIgPSBbcmVzcG9uc2Ug
Y29weV07CiAgICAgCiAgICAgW21fcmVzcG9uc2UgcmVsZWFzZV07CiAgICAgbV9yZXNwb25zZSA9
IHI7CiB9CiAKLS0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlv
biBkaWRSZWNlaXZlRGF0YTooTlNEYXRhICopZGF0YQorLSAodm9pZCljb25uZWN0aW9uOihOU1VS
TENvbm5lY3Rpb24gKil1bnVzZWRDb25uZWN0aW9uIGRpZFJlY2VpdmVEYXRhOihOU0RhdGEgKilk
YXRhCiB7CisgICAgVU5VU0VEX1BBUkFNKHVudXNlZENvbm5lY3Rpb24pOworCiAgICAgaWYgKCFt
X2RhdGEpCiAgICAgICAgIG1fZGF0YSA9IFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdF07CiAg
ICAgCiAgICAgW21fZGF0YSBhcHBlbmREYXRhOmRhdGFdOwogfQogCi0tICh2b2lkKWNvbm5lY3Rp
b25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCistICh2b2lk
KWNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKil1bnVzZWRDb25u
ZWN0aW9uCiB7CisgICAgVU5VU0VEX1BBUkFNKHVudXNlZENvbm5lY3Rpb24pOworCiAgICAgbV9p
c0RvbmUgPSBZRVM7CiB9CiAKLS0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICop
Y29ubmVjdGlvbiBkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKKy0gKHZvaWQpY29u
bmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopdW51c2VkQ29ubmVjdGlvbiBkaWRGYWlsV2l0aEVy
cm9yOihOU0Vycm9yICopZXJyb3IKIHsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkQ29ubmVjdGlv
bik7CisKICAgICBBU1NFUlQoIW1fZXJyb3IpOwogICAgIAogICAgIG1fZXJyb3IgPSBbZXJyb3Ig
cmV0YWluXTsKQEAgLTc4OCw0ICs4MjksNSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZl
ZENhbmNlbGxhdGlvCiB9CiAKIEBlbmQKKwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26613</attachid>
            <date>2009-01-11 12:27:32 -0800</date>
            <delta_ts>2009-01-11 14:01:48 -0800</delta_ts>
            <desc>step 3 -- covers mostly arguments used only in assertions</desc>
            <filename>UnusedAssertArgsPatch.txt</filename>
            <type>text/plain</type>
            <size>12744</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTgwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDktMDEtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
MzEwMjogdHVybiBvbiB1bnVzZWQgcGFyYW1ldGVyIHdhcm5pbmdzIGluIFdlYkNvcmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAyCisKKyAgICAg
ICAgVGhpcmQgc3RlcDogRGVhbCB3aXRoIGNhc2VzIG9mIGFyZ3VtZW50cyB1c2VkIG9ubHkgaW4g
YXNzZXJ0aW9ucy4KKworICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlUG9ydENsb3NlRXZlbnRUYXNrOjpwZXJmb3JtVGFzayk6IFVzZSBBU1NF
UlRfVU5VU0VELgorICAgICAgICAqIGRvbS9Xb3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyOjpub3RpZnlGaW5pc2hlZCk6IERpdHRvLgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZCk6
IERpdHRvLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWlsZWRMb2Fk
aW5nTWFpblJlc291cmNlKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKTogRGl0dG8uCisgICAgICAgICogbG9hZGVy
L2ljb24vSWNvbkxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uTG9hZGVyOjpkaWRS
ZWNlaXZlRGF0YSk6IFNpbmNlIGxvYWRlciBhbmQgc2l6ZSBhcmUgb25seQorICAgICAgICB1c2Vk
IHdoZW4gbG9nZ2luZywgdXNlIFVOVVNFRF9QQVJBTSB3aGVuIGxvZ2dpbmcgaXMgZGlzYWJsZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldpZGdldDo6YmVmb3JlTW91c2VEb3duKTogVXNlIEFTU0VSVF9VTlVTRUQuCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOiBV
c2UgdGhlCisgICAgICAgIGFyZ3VtZW50IHNpbmNlIGl0J3MgcHJvYmFibHkgYSB0aW55IGJpdCBt
b3JlIGVmZmljaWVudCBhbmQgZ2V0cyByaWQKKyAgICAgICAgb2YgdGhlIHVudXNlZCBhcmd1bWVu
dCB3YXJuaW5nLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmNyZWF0ZUlubGluZUJveCk6IFVzZSBB
U1NFUlRfVU5VU0VELgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVJbmxpbmVCb3gpOiBEaXR0by4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0lubGluZTo6Y3JlYXRlSW5saW5lQm94KTogVXNlIFVOVVNFRF9QQVJBTS4KKyAg
ICAgICAgSSBjb3VsZG4ndCB1c2UgQVNTRVJUX1VOVVNFRCBiZWNhdXNlIGl0J3MgYSBzaW5nbGUg
YXNzZXJ0aW9uLCBidXQgaXQncworICAgICAgICB0aGUgb25seSB1c2UgZm9yIHR3byBkaWZmZXJl
bnQgYXJndW1lbnRzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNyZWF0ZUlubGluZUJveCk6IFVzZSBBU1NFUlRfVU5V
U0VELgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKC1b
V2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXIgc3lzdGVtQ29sb3JzRGlkQ2hh
bmdlOl0pOiBEaXR0by4KKwogMjAwOS0wMS0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUv
ZG9tL01lc3NhZ2VQb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdlUG9y
dC5jcHAJKHJldmlzaW9uIDM5ODA1KQorKysgV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MiwxMCArNTIsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJU
KG1fcG9ydCk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHVudXNlZENvbnRleHQpCiAgICAgeworICAgICAgICBBU1NF
UlRfVU5VU0VEKHVudXNlZENvbnRleHQsIHVudXNlZENvbnRleHQgPT0gbV9wb3J0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOwogICAgICAgICBBU1NFUlQoIW1fcG9ydC0+YWN0aXZlKCkpOwot
ICAgICAgICBBU1NFUlQoY29udGV4dCA9PSBtX3BvcnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CiAKICAgICAgICAgLy8gQ2xvc2luZyBtYXkgZGVzdHJveSB0aGUgcG9ydCwgZGlzcGF0Y2gg
YW55IHJlbWFpbmluZyBtZXNzYWdlcyBub3cuCiAgICAgICAgIGlmIChtX3BvcnQtPnF1ZXVlSXNP
cGVuKCkpCkluZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1dvcmtlci5jcHAJKHJldmlzaW9uIDM5ODA1KQorKysgV2ViQ29yZS9kb20vV29ya2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDkgKzExNCwxMCBAQCBib29sIFdvcmtlcjo6aGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICByZXR1cm4gbV9tZXNzYWdpbmdQcm94eS0+d29y
a2VyVGhyZWFkSGFzUGVuZGluZ0FjdGl2aXR5KCkgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5k
aW5nQWN0aXZpdHkoKTsKIH0KIAotdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSkKK3ZvaWQgV29ya2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNv
dXJjZSogdW51c2VkUmVzb3VyY2UpCiB7Ci0gICAgQVNTRVJUKHJlc291cmNlID09IG1fY2FjaGVk
U2NyaXB0LmdldCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHVudXNlZFJlc291cmNlLCB1bnVzZWRS
ZXNvdXJjZSA9PSBtX2NhY2hlZFNjcmlwdCk7CisKICAgICBpZiAobV9jYWNoZWRTY3JpcHQtPmVy
cm9yT2NjdXJyZWQoKSkKICAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgZWxzZSB7
CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1hNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDM5ODA1KQorKysgV2ViQ29yZS9kb20v
WE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDkgKzMwMSw5IEBAIHZvaWQg
WE1MVG9rZW5pemVyOjppbnNlcnRFcnJvck1lc3NhZ2VCbG8KICAgICBkb2MtPnVwZGF0ZVJlbmRl
cmluZygpOwogfQogCi12b2lkIFhNTFRva2VuaXplcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UqIGZpbmlzaGVkT2JqKQordm9pZCBYTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKENh
Y2hlZFJlc291cmNlKiB1bnVzZWRSZXNvdXJjZSkKIHsKLSAgICBBU1NFUlQobV9wZW5kaW5nU2Ny
aXB0ID09IGZpbmlzaGVkT2JqKTsKKyAgICBBU1NFUlRfVU5VU0VEKHVudXNlZFJlc291cmNlLCB1
bnVzZWRSZXNvdXJjZSA9PSBtX3BlbmRpbmdTY3JpcHQpOwogICAgIEFTU0VSVChtX3BlbmRpbmdT
Y3JpcHQtPmFjY2Vzc0NvdW50KCkgPiAwKTsKICAgICAgICAgCiAgICAgU2NyaXB0U291cmNlQ29k
ZSBzb3VyY2VDb2RlKG1fcGVuZGluZ1NjcmlwdC5nZXQoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDM5
ODA1KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDkgKzIyOSw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpmaW5pc2hlZExvYWQKICAgICBjaGVja0lmTG9hZElzQ29tcGxldGUoKTsKIH0KIAot
dm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UoRG9j
dW1lbnRMb2FkZXIqIGxvYWRlcikKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWlsZWRM
b2FkaW5nTWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKiB1bnVzZWRMb2FkZXIpCiB7Ci0gICAg
QVNTRVJUKG1fY2FjaGVDYW5kaWRhdGVzLmNvbnRhaW5zKGxvYWRlcikgfHwgbV9hc3NvY2lhdGVk
RG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxvYWRlcikpOworICAgIEFTU0VSVF9VTlVTRUQodW51
c2VkTG9hZGVyLCBtX2NhY2hlQ2FuZGlkYXRlcy5jb250YWlucyh1bnVzZWRMb2FkZXIpIHx8IG1f
YXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5jb250YWlucyh1bnVzZWRMb2FkZXIpKTsKIAogICAg
IC8vIE5vdGUgdGhhdCBjYWNoZVVwZGF0ZUZhaWxlZCgpIGNhbiBjYXVzZSB0aGUgY2FjaGUgZ3Jv
dXAgdG8gYmUgZGVsZXRlZC4KICAgICBjYWNoZVVwZGF0ZUZhaWxlZCgpOwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAko
cmV2aXNpb24gMzk4MDUpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw4ICszMTQsOCBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlCiAgICAgc2V0RGF0YWJhc2VWZXJzaW9u
LmJlZ2luKCk7CiAKICAgICBjaGFyIHVzZXJWZXJzaW9uU1FMWzMyXTsKLSAgICBpbnQgbnVtQnl0
ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBS
QUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKLSAgICBBU1NFUlRfVU5VU0VE
KG51bUJ5dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkpID49IG51
bUJ5dGVzKTsKKyAgICBpbnQgdW51c2VkTnVtQnl0ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNR
TCwgc2l6ZW9mKHVzZXJWZXJzaW9uU1FMKSwgIlBSQUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hl
bWFWZXJzaW9uKTsKKyAgICBBU1NFUlRfVU5VU0VEKHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZih1c2VyVmVyc2lvblNRTCkpID49IHVudXNlZE51bUJ5dGVzKTsKIAogICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXNlclZlcnNpb25TUUwpOwog
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25Mb2FkZXIuY3BwCShyZXZpc2lvbiAzOTgwNSkKKysrIFdlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtMTAxLDkgKzEwMiwxMyBAQCB2b2lk
IEljb25Mb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyCiAgICAgfQogfQogCi12b2lkIElj
b25Mb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0
IGNoYXIqLCBpbnQgc2l6ZSkKK3ZvaWQgSWNvbkxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoU3VicmVz
b3VyY2VMb2FkZXIqIHVudXNlZExvYWRlciwgY29uc3QgY2hhciosIGludCB1bnVzZWRTaXplKQog
ewotICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSgpIC0g
TG9hZGVyICVwLCBudW1iZXIgb2YgYnl0ZXMgJWkiLCBsb2FkZXIsIHNpemUpOworI2lmIExPR19E
SVNBQkxFRAorICAgIFVOVVNFRF9QQVJBTSh1bnVzZWRMb2FkZXIpOworICAgIFVOVVNFRF9QQVJB
TSh1bnVzZWRTaXplKTsKKyNlbmRpZgorICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uTG9hZGVy
OjpkaWRSZWNlaXZlRGF0YSgpIC0gTG9hZGVyICVwLCBudW1iZXIgb2YgYnl0ZXMgJWkiLCB1bnVz
ZWRMb2FkZXIsIHVudXNlZFNpemUpOwogfQogCiB2b2lkIEljb25Mb2FkZXI6OmRpZEZhaWwoU3Vi
cmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHJldmlzaW9uIDM5ODA1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2
IEBACiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCiAjaW1wb3J0ICJXZWJDb3JlRnJhbWVWaWV3Lmgi
CiAjaW1wb3J0ICJXZWJDb3JlVmlldy5oIgotCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAK
IEBpbnRlcmZhY2UgTlNXaW5kb3cgKFdlYldpbmRvd0RldGFpbHMpCkBAIC0yNTIsMTAgKzI1MSwx
MCBAQCB2b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVN1cGVydmlldygpCiAgICAgfQogfQogCi12b2lk
IFdpZGdldDo6YmVmb3JlTW91c2VEb3duKE5TVmlldyAqdmlldywgV2lkZ2V0KiB3aWRnZXQpCit2
b2lkIFdpZGdldDo6YmVmb3JlTW91c2VEb3duKE5TVmlldyAqdW51c2VkVmlldywgV2lkZ2V0KiB3
aWRnZXQpCiB7CiAgICAgaWYgKHdpZGdldCkgewotICAgICAgICBBU1NFUlQodmlldyA9PSB3aWRn
ZXQtPmdldE91dGVyVmlldygpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh1bnVzZWRWaWV3LCB1
bnVzZWRWaWV3ID09IHdpZGdldC0+Z2V0T3V0ZXJWaWV3KCkpOwogICAgICAgICBBU1NFUlQoIXdp
ZGdldC0+bV9kYXRhLT5tdXN0U3RheUluV2luZG93KTsKICAgICAgICAgd2lkZ2V0LT5tX2RhdGEt
Pm11c3RTdGF5SW5XaW5kb3cgPSB0cnVlOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkocmV2aXNpb24gMzk4MDYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlk
Q2FuY2VsQXV0aGVudGljYQogICAgIEFTU0VSVChkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UgPT0g
Y2hhbGxlbmdlKTsKIAogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPmRpZENh
bmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGQtPm1fY3VycmVudFdlYkNoYWxsZW5n
ZSk7CisgICAgICAgIGNsaWVudCgpLT5kaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh0
aGlzLCBjaGFsbGVuZ2UpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRl
bnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgY29uc3QgQ3Jl
ZGVudGlhbCYgY3JlZGVudGlhbCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCShyZXZpc2lvbiAzOTgwNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsOSArNTA2LDkgQEAgdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjpzdHlsZURpZENoYW5nZShSZQogICAgIH0KIH0KIAotSW5saW5lQm94KiBSZW5k
ZXJMaXN0TWFya2VyOjpjcmVhdGVJbmxpbmVCb3goYm9vbCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBi
b29sKQorSW5saW5lQm94KiBSZW5kZXJMaXN0TWFya2VyOjpjcmVhdGVJbmxpbmVCb3goYm9vbCwg
Ym9vbCB1bnVzZWRJc1Jvb3RMaW5lQm94LCBib29sKQogewotICAgIEFTU0VSVCghaXNSb290TGlu
ZUJveCk7CisgICAgQVNTRVJUX1VOVVNFRCh1bnVzZWRJc1Jvb3RMaW5lQm94LCAhdW51c2VkSXNS
b290TGluZUJveCk7CiAgICAgTGlzdE1hcmtlckJveCogYm94ID0gbmV3IChyZW5kZXJBcmVuYSgp
KSBMaXN0TWFya2VyQm94KHRoaXMpOwogICAgIG1faW5saW5lQm94V3JhcHBlciA9IGJveDsKICAg
ICByZXR1cm4gYm94OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biAzOTgwNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4NTQsOSArMjg1NCw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVMZWZ0
b3ZlckFub255bW8KIHsKIH0KIAotSW5saW5lQm94KiBSZW5kZXJPYmplY3Q6OmNyZWF0ZUlubGlu
ZUJveChib29sLCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wpCitJbmxpbmVCb3gqIFJlbmRlck9i
amVjdDo6Y3JlYXRlSW5saW5lQm94KGJvb2wsIGJvb2wgdW51c2VkSXNSb290TGluZUJveCwgYm9v
bCkKIHsKLSAgICBBU1NFUlQoIWlzUm9vdExpbmVCb3gpOworICAgIEFTU0VSVF9VTlVTRUQodW51
c2VkSXNSb290TGluZUJveCwgIXVudXNlZElzUm9vdExpbmVCb3gpOwogICAgIHJldHVybiBuZXcg
KHJlbmRlckFyZW5hKCkpIElubGluZUJveCh0aGlzKTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCShyZXZpc2lvbiAzOTgwNSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCiAgKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+
Ci0gKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogCiAj
aW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBAIC0zNSw5ICszNiwxNSBAQCBSZW5kZXJT
VkdJbmxpbmU6OlJlbmRlclNWR0lubGluZShOb2RlKiBuCiB7CiB9CiAKLUlubGluZUJveCogUmVu
ZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VIb2xkZXJCb3gsIGJv
b2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW4pCitJbmxpbmVCb3gqIFJlbmRlclNWR0lu
bGluZTo6Y3JlYXRlSW5saW5lQm94KGJvb2wgdW51c2VkTWFrZVBsYWNlSG9sZGVyQm94LCBib29s
IHVudXNlZElzUm9vdExpbmVCb3gsIGJvb2wgaXNPbmx5UnVuKQogewotICAgIEFTU0VSVCghKCFp
c1Jvb3RMaW5lQm94ICYmIChpc1JlcGxhY2VkKCkgfHwgbWFrZVBsYWNlSG9sZGVyQm94KSkpOwor
I2lmIEFTU0VSVF9ESVNBQkxFRAorICAgIFVOVVNFRF9QQVJBTSh1bnVzZWRJc1Jvb3RMaW5lQm94
KTsKKyAgICBVTlVTRURfUEFSQU0odW51c2VkTWFrZVBsYWNlSG9sZGVyQm94KTsKKyNlbmRpZgor
CisgICAgQVNTRVJUKCEoIXVudXNlZElzUm9vdExpbmVCb3ggJiYgKGlzUmVwbGFjZWQoKSB8fCB1
bnVzZWRNYWtlUGxhY2VIb2xkZXJCb3gpKSk7CisKICAgICBBU1NFUlQoaXNJbmxpbmVGbG93KCkp
OwogCiAgICAgSW5saW5lRmxvd0JveCogZmxvd0JveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgU1ZH
SW5saW5lRmxvd0JveCh0aGlzKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZp
c2lvbiAzOTgwNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAzLDkgKzEwMDMsMTAgQEAgSW5saW5lVGV4dEJveCogUmVuZGVyVGV4dDo6
Y3JlYXRlSW5saW5lVAogICAgIHJldHVybiBuZXcgKHJlbmRlckFyZW5hKCkpIElubGluZVRleHRC
b3godGhpcyk7CiB9CiAKLUlubGluZUJveCogUmVuZGVyVGV4dDo6Y3JlYXRlSW5saW5lQm94KGJv
b2wsIGJvb2wgaXNSb290TGluZUJveCwgYm9vbCkKK0lubGluZUJveCogUmVuZGVyVGV4dDo6Y3Jl
YXRlSW5saW5lQm94KGJvb2wsIGJvb2wgdW51c2VkSXNSb290TGluZUJveCwgYm9vbCkKIHsKLSAg
ICBBU1NFUlQoIWlzUm9vdExpbmVCb3gpOworICAgIEFTU0VSVF9VTlVTRUQodW51c2VkSXNSb290
TGluZUJveCwgIXVudXNlZElzUm9vdExpbmVCb3gpOworCiAgICAgSW5saW5lVGV4dEJveCogdGV4
dEJveCA9IGNyZWF0ZUlubGluZVRleHRCb3goKTsKICAgICBpZiAoIW1fZmlyc3RUZXh0Qm94KQog
ICAgICAgICBtX2ZpcnN0VGV4dEJveCA9IG1fbGFzdFRleHRCb3ggPSB0ZXh0Qm94OwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDM5ODA1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTc0LDkgKzc0
LDkgQEAgdXNpbmcgc3RkOjptaW47CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpc3lz
dGVtQ29sb3JzRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9p
ZClzeXN0ZW1Db2xvcnNEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopdW51c2VkTm90aWZpY2F0
aW9uCiB7Ci0gICAgQVNTRVJUKFtbbm90aWZpY2F0aW9uIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpO
U1N5c3RlbUNvbG9yc0RpZENoYW5nZU5vdGlmaWNhdGlvbl0pOworICAgIEFTU0VSVF9VTlVTRUQo
dW51c2VkTm90aWZpY2F0aW9uLCBbW3VudXNlZE5vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFsVG9T
dHJpbmc6TlNTeXN0ZW1Db2xvcnNEaWRDaGFuZ2VOb3RpZmljYXRpb25dKTsKICAgICBfdGhlbWUt
PnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26620</attachid>
            <date>2009-01-11 18:23:39 -0800</date>
            <delta_ts>2009-01-12 00:16:58 -0800</delta_ts>
            <desc>step 4 -- removes unused arguments that were unnecessary</desc>
            <filename>RemoveArgsPatch.txt</filename>
            <type>text/plain</type>
            <size>71501</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTg4IEBACisyMDA5LTAxLTExICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjMxMDI6IHR1cm4gb24gdW51c2VkIHBhcmFtZXRlciB3YXJuaW5ncyBpbiBXZWJDb3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwMgorCisgICAg
ICAgIEZvdXJ0aCBzdGVwOiBSZW1vdmUgYXJndW1lbnRzIGVudGlyZWx5IGluIHRoZSBtYW55IGNh
c2VzIHdoZXJlIHRoZXkgYXJlIG5vdAorICAgICAgICBuZWVkZWQgYXQgYWxsLiBUaGlzIHN0ZXAg
aXMgYSBsaXR0bGUgbGVzcyBtZWNoYW5pY2FsIHRoYW4gdGhlIGVhcmxpZXIgb25lcy4KKworICAg
ICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01J
bXBsZW1lbnRhdGlvbjo6aXNYTUxNSU1FVHlwZSk6IFBhc3MgVGV4dENhc2VTZW5zaXRpdmUgd2hl
biBjcmVhdGluZworICAgICAgICB0aGUgcmVndWxhciBleHByZXNzaW9uLCBzaW5jZSB3ZSBhbHJl
YWR5IHNwZWNpZnkgYS16QS1aIGluIG91ciBleHByZXNzaW9uLgorCisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkYXRhYmFzZVRocmVhZCk6
IERvbid0IHBhc3MgaW4gdGhlIGRvY3VtZW50IHdoZW4gY3JlYXRpbmcKKyAgICAgICAgYSBEYXRh
YmFzZVRocmVhZC4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmNyZWF0ZVJhcmVEYXRhKTogRG9uJ3QgcGFzcyB0aGUgZWxlbWVudCB3aGVu
IGNyZWF0aW5nIGFuCisgICAgICAgIEVsZW1lbnRSYXJlRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmRldGFjaCk6IERvbid0IHBhc3MgdGhlIGVsZW1lbnQgd2hlbiBjYWxsaW5nIHJl
c2V0Q29tcHV0ZWRTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlY2FsY1N0eWxl
KTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vRWxlbWVudFJhcmVEYXRhLmg6IFJlbW92ZSB0aGUg
dW51c2VkIEVsZW1lbnQqIGZyb20gdGhlIGNvbnN0cnVjdG9yIGFuZAorICAgICAgICB0aGUgcmVz
ZXRDb21wdXRlZFN0eWxlIGZ1bmN0aW9uLgorCisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Tm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoRXZlbnQp
OiBEb24ndCBwYXNzIGVjIHRvIGRpc3BhdGNoR2VuZXJpY0V2ZW50LgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEdlbmVyaWNFdmVudCk6IFJlbW92ZSB0aGUgdW51
c2VkIGVjIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpkaXNw
YXRjaFdpbmRvd0V2ZW50KTogRG9uJ3QgcGFzcyBlYyB0byBkaXNwYXRjaEdlbmVyaWNFdmVudC4K
KyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXROb2RlLmg6IFJlbW92ZSB0aGUgRXhjZXB0aW9uQ29k
ZSYgYXJndW1lbnQgZm9ybSBkaXNhcHRjaEdlbmVyaWNFdmVudC4KKworICAgICAgICAqIGVkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOiBSZW1vdmUgdGhlIGVtcHR5IHJlbW92ZUJsb2NrU3R5
bGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERv
d25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZSk6IFJlbW92ZSB0aGUgdW51c2VkCisgICAg
ICAgIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OnB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUF0Qm91bmRhcmllcyk6IERvbid0
IHBhc3Mgc3RhcnQKKyAgICAgICAgYW5kIGVuZCB0byBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5
bGVBcm91bmROb2RlLgorCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOiBS
ZW1vdmUgdGhlIGVtcHR5IHJlbW92ZUJsb2NrU3R5bGUgZnVuY3Rpb24uIFJlbW92ZWQgdGhlCisg
ICAgICAgIHVudXNlZCBzdGFydCBhbmQgZW5kIGFyZ3VtZW50cyBmcm9tIHB1c2hEb3duVGV4dERl
Y29yYXRpb25TdHlsZUFyb3VuZE5vZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mIHVudXNlZCBSZWd1bGFyRXhwcmVzc2lvbi5oIGhlYWRl
ci4KKworICAgICAgICAqIGh0bWwvSFRNTFRva2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUb2tlbjo6YWRkQXR0cmlidXRlKTogUmVtb3ZlZCB1bnVzZWQgRG9jdW1lbnQqIGFyZ3VtZW50
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6cGFyc2VUYWcpOiBEb24ndCBwYXNz
IGRvY3VtZW50IHRvIGFkZEF0dHJpYnV0ZS4KKworICAgICAgICAqIGh0bWwvSFRNTFRva2VuaXpl
ci5oOiBSZW1vdmVkIHVudXNlZCBEb2N1bWVudCogYXJndW1lbnQgdG8gdG8gYWRkQXR0cmlidXRl
LgorCisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9N
V2luZG93Ojpsb2NhbFN0b3JhZ2UpOiBEb24ndCBwYXNzIHRoZSBmcmFtZSB0byBzdG9yYWdlQXJl
YS4KKworICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdJc01vdmUpOiBSZW1vdmVkIHVudXNlZCBEcmFnRGF0YSBh
cmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZyk6
IENhbGwgY29uY2x1ZGVFZGl0RHJhZyByYXRoZXIgdGhhbgorICAgICAgICBjb25jbHVkZURyYWcu
CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKTogRG9u
J3QgcGFzcyBkcmFnRGF0YSB0byBkcmFnSXNNb3ZlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Nv
bnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBSZW5hbWVkIHRvIG1ha2UgaXQgY2xlYXIgdGhp
cworICAgICAgICBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGVkaXQgZHJhZ3MuIFJlbW92ZWQg
dGhlIGFjdGlvbiBtYXNrIGFyZ3VtZW50LiBBbHNvCisgICAgICAgIGNoYW5nZWQgZHJhZ0lzTW92
ZSBjYWxsIHNpdGVzIHRvIG5vdCBwYXNzIGRyYWdEYXRhLgorCisgICAgICAgICogcGFnZS9EcmFn
Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzIGFuZCB0d2Vha2VkIGNvbW1l
bnQgZm9ybWF0LgorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVSZWdFeHBGb3JMYWJlbHMpOiBQYXNzIFRleHRDYXNlU2Vuc2l0aXZlIGFuZCBUZXh0
Q2FzZUluc2Vuc2l0aXZlCisgICAgICAgIHdoZW4gY3JlYXRpbmcgcmVndWxhciBleHByZXNzaW9u
cyBmb3IgY2xhcml0eS4gQ2FsbCBtYXRjaCBpbnN0ZWFkIG9mIHNlYXJjaCwKKyAgICAgICAgc2lu
Y2UgYm90aCBkbyB0aGUgc2FtZSB0aGluZyBleGNlcHQgZm9yIHdpdGggbmVnYXRpdmUgc3RhcnQg
b2Zmc2V0cywgYW5kIG5vbmUKKyAgICAgICAgdXNlZCBoZXJlIGFyZSBuZWdhdGl2ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjptYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KTogRGl0dG8uCisK
KyAgICAgICAgKiBwYWdlL1BhZ2UuaDogTW92ZWQgVGV4dENhc2VTZW5zaXRpdml0eSBmcm9tIGhl
cmUgdG8gU3RyaW5nSW1wbC5oIGluIHBsYXRmb3JtLgorCisgICAgICAgICogcGFnZS9tYWMvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1Nl
dEhlYWRpbmdMZXZlbCk6IFJlbW92ZWQgdW51c2VkIG9iamVjdCBhcmd1bWVudC4KKyAgICAgICAg
KEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQpOiBEaXR0by4KKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFu
Z2U6XSk6IERpdHRvLgorCisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpyZWdFeHBGb3JMYWJlbHMpOiBQYXNzIFRleHRDYXNlU2Vuc2l0aXZlIGFuZCBU
ZXh0Q2FzZUluc2Vuc2l0aXZlCisgICAgICAgIHdoZW4gY3JlYXRpbmcgcmVndWxhciBleHByZXNz
aW9ucyBmb3IgY2xhcml0eS4gQ2FsbCBtYXRjaCBpbnN0ZWFkIG9mIHNlYXJjaCwKKyAgICAgICAg
c2luY2UgYm90aCBkbyB0aGUgc2FtZSB0aGluZyBleGNlcHQgZm9yIHdpdGggbmVnYXRpdmUgc3Rh
cnQgb2Zmc2V0cywgYW5kIG5vbmUKKyAgICAgICAgdXNlZCBoZXJlIGFyZSBuZWdhdGl2ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjptYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KTogRGl0dG8u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXIpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJh
Y3RlcnMpOiBVcGRhdGVkIHRvIGNoZWNrIGFsbCBjaGFyYWN0ZXJzCisgICAgICAgIGluc3RlYWQg
b2YganVzdCB0aGUgZmlyc3Qgb25lLCB1c2luZyBjb250YWluc0NoYXJhY3Rlci4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmg6IE1hZGUgbW9yZSBtZW1i
ZXJzIHByaXZhdGUuCisgICAgICAgIEFkZGVkIGNvbnRhaW5zQ2hhcmFjdGVyIGZ1bmN0aW9uIG1l
bWJlci4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpkcmFnSW1hZ2VTaXplKTogQ2hhbmdlZCB0byB1c2UgUmV0YWluUHRyPE5TSW1h
Z2U+IGRpcmVjdGx5IGluc3RlYWQgb2YKKyAgICAgICAgRHJhZ0ltYWdlUmVmIGZvciBjbGFyaXR5
LCBzaW5jZSB0aGlzIGlzIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUuCisgICAgICAgIChXZWJDb3Jl
OjpkZWxldGVEcmFnSW1hZ2UpOiBEaXR0by4gQWxzbyByZW1vdmUgYXJndW1lbnQgbmFtZSB0byBn
ZXQgcmlkIG9mIHVudXNlZAorICAgICAgICB2YXJpYWJsZSB3YXJuaW5nLgorICAgICAgICAoV2Vi
Q29yZTo6c2NhbGVEcmFnSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRpc3NvbHZl
RHJhZ0ltYWdlVG9GcmFjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJh
Z0ltYWdlRnJvbUltYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1h
Z2VJY29uRm9yQ2FjaGVkSW1hZ2UpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9X
ZWJGb250Q2FjaGUubW06CisgICAgICAgIChhY2NlcHRhYmxlQ2hvaWNlKTogUmVtb3ZlZCB0aGUg
dW51c2VkIHdlaWdodC1yZWxhdGVkIGFyZ3VtZW50cy4KKyAgICAgICAgKGJldHRlckNob2ljZSk6
IERpdHRvLgorICAgICAgICAoK1tXZWJGb250Q2FjaGUgaW50ZXJuYWxGb250V2l0aEZhbWlseTp0
cmFpdHM6d2VpZ2h0OnNpemU6XSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vcG9zaXgv
RmlsZVN5c3RlbVBPU0lYLmNwcDogUmVtb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgbGlzdERp
cmVjdG9yeQorICAgICAgICBiZWNhdXNlIHdlJ2QgcmF0aGVyIGdldCBhIGxpbmsgZXJyb3IgcmF0
aGVyIHRoYW4gYSBydW50aW1lIGVycm9yIGlmIHdlIHVzZSBpdAorICAgICAgICBmb3IgYW55dGhp
bmcsIGFuZCByaWdodCBub3cgaXQncyBub3QgdXNlZC4KKworICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvUmVndWxhckV4cHJlc3Npb24uY3BwOiBSZW1vdmVkIHVudXNlZCBwcml2YXRlIGRhdGEsCisg
ICAgICAgIGluY2x1ZGluZyBwYXR0ZXJuLCBsYXN0TWF0Y2hTdHJpbmcsIGxhc3RNYXRjaE9mZnNl
dHMsIGxhc3RNYXRjaENvdW50LAorICAgICAgICBhbmQgbGFzdE1hdGNoUG9zLiBNYWRlIHRoZSBS
ZWd1bGFyRXhwcmVzc2lvbjo6UHJpdmF0ZTo6cmVnZXggYmUgcHJpdmF0ZQorICAgICAgICBhbmQg
dXNlIGFuIGFjY2Vzc29yIGZ1bmN0aW9uIHRvIGdldCBhdCBpdC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlZ3VsYXJFeHByZXNzaW9uOjpSZWd1bGFyRXhwcmVzc2lvbik6IFJlbW92ZWQgdGhlIGNvbnN0
IGNoYXIqIHZlcnNpb24KKyAgICAgICAgb2YgdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2UgaXQncyBu
b3QgYW55IG1vcmUgZWZmaWNpZW50LiBDaGFuZ2VkIHRoZSBib29sZWFuCisgICAgICAgIGNvbnN0
cnVjdG9yIGFyZ3VtZW50IHRvIHVzZSBUZXh0Q2FzZVNlbnNpdGl2aXR5IGluc3RlYWQgdG8gbWFr
ZSBpdCBsZXNzIGxpa2VseQorICAgICAgICB3ZSdsbCB1c2UgaXQgd3JvbmcuCisgICAgICAgIChX
ZWJDb3JlOjpSZWd1bGFyRXhwcmVzc2lvbjo6b3BlcmF0b3I9KTogU2luY2UgdGhlIG9ubHkgbWVt
YmVyIGlzIGEgc2luZ2xlIFJlZlB0ciwKKyAgICAgICAganVzdCB1c2UgcGxhaW4gb2xkIGFzc2ln
bm1lbnQgb24gaXQuIFRoZSBvbmx5IHJlYXNvbiB3ZSBkbyB0aGlzIGluc3RlYWQgb2YgdXNpbmcK
KyAgICAgICAgdGhlIGNvbXBpbGVyIGdlbmVyYXRlZCBhc3NpZ25tZW50IG9wZXJhdG9yIGlzIHRo
YXQgd2Ugd2FudCB0aGUgUHJpdmF0ZSBzdHJ1Y3R1cmUKKyAgICAgICAgdG8gYmUgaW50ZXJuYWwg
dG8gdGhlIC5jcHAgZmlsZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ3VsYXJFeHByZXNzaW9uOjpt
YXRjaCk6IEFkZGVkIGEgbnVsbCBjaGVjayBzbyB3ZSB3b24ndCBjcmFzaCBpZgorICAgICAgICB3
ZSBmYWlsIHRvIGNvbXBpbGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4gUmVtb3ZlZCB0aGUgY29k
ZSB0byBoYW5kbGUgbXVsdGlwbGUKKyAgICAgICAgbWF0Y2ggc3RyaW5ncywgc2luY2UgdGhhdCB3
YXMgdW51c2VkLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9SZWd1bGFyRXhwcmVzc2lvbi5o
OiBDaGFuZ2VkIHRoZSBjYXNlIHNlbnNpdGl2aXR5IGFyZ3VtZW50IHRvIHVzZQorICAgICAgICBU
ZXh0Q2FzZVNlbnNpdGl2aXR5IGFuZCBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUuIFJlbW92ZWQg
dGhlIGRlZmF1bHQgY29uc3RydWN0b3IsCisgICAgICAgIGFuZCB0aGUgcGF0dGVybiwgbWF0Y2gs
IGFuZCBwb3MgZnVuY3Rpb25zLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBs
Lmg6IE1vdmVkIHRoZSBUZXh0Q2FzZVNlbnNpdGl2aXR5IGVudW0gaGVyZSBmcm9tCisgICAgICAg
IFBhZ2UuaCwgYmVjYXVzZSB3ZSBzaG91bGQgZXZlbnR1YWxseSB1c2UgaXQgaW4gYWxsIHRoZSBw
bGFjZXMgd2hlcmUgd2UgaGF2ZQorICAgICAgICBhbiBhcmd1bWVudCB0byBjb250cm9sIGNhc2Ug
c2Vuc2l0aXZpdHksIHN0YXJ0aW5nIHdpdGggdGhlIGZ1bmN0aW9ucyBpbiB0aGlzCisgICAgICAg
IGNsYXNzLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvU2hhcGVBcmFiaWMuYzoKKyAg
ICAgICAgKHNoYXBlVW5pY29kZSk6IFJlbW92ZWQgdGhlIHVudXNlZCBvcHRpb25zIGFuZCBwRXJy
b3JDb2RlIGFyZ3VtZW50cy4gRXZlbiB0aG91Z2gKKyAgICAgICAgdGhpcyBpcyBjb2RlIGJvcnJv
d2VkIGZyb20gSUNVLCB0aGlzIHNlZW1zIGxpa2UgYSBzaW1wbGUgc2FmZSBjaGFuZ2UgdG8gbWFr
ZS4KKyAgICAgICAgKHNoYXBlQXJhYmljKTogRG9uJ3QgcGFzcyBvcHRpb25zIG9yIHBFcnJvckNv
ZGUgaW4gdG8gc2hhcGVVbmljb2RlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6UmVuZGVyUGF0aCk6IFJlbW92ZWQg
dGhlIHVudXNlZCBzdHlsZSBhcmd1bWVudC4KKyAgICAgICAgQWxzbyByZW1vdmVkIHRoZSB0eXBl
IGNoZWNrLiBUaGUgYXJndW1lbnQgYWxyZWFkeSBoYXMgdGhlIGNvcnJlY3QgdHlwZSwKKyAgICAg
ICAgc28gaXQncyBub3QgaGVscGZ1bCB0byB1cGNhc3QgaXQgYW5kIHRoZW4gY2hlY2sgaXRzIHR5
cGUgYWdhaW4sIHVubGVzcworICAgICAgICB3ZSBoYXZlIHNvbWUgcmVhc29uIHRvIGJlbGlldmUg
dGhlIHR5cGUgaXMgbm90IHJlbGlhYmxlLiBBbmQgd2UgZG9uJ3QuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUGF0aC5oOiBSZW1vdmVkIHRoZSBSZW5kZXJTdHlsZSogYXJndW1lbnQgdG8g
dGhlCisgICAgICAgIGNvbnN0cnVjdG9yLiBBbHNvIHJlbW92ZWQgdGhlIGV4cGxpY2l0IGRlY2xh
cmF0aW9uIG9mIHRoZSBkZXN0cnVjdG9yLgorICAgICAgICBJdCdzIG5vdCBoZWxwZnVsIG9yIG5l
ZWRlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogVXBk
YXRlZCB0aGUgY29tbWVudCBoZXJlIHRvCisgICAgICAgIG1ha2UgaXQgY2xlYXIgdGhhdCBqdXN0
IHJldHVybmluZyBhbiBlbXB0eSByZWN0IGlzIG5vdCBhIGdvb2QgaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIFJlbW92ZWQgdGhlIGFyZ3VtZW50IG5hbWVzIHRvIGdldCByaWQgb2YgdGhlIHdhcm5p
bmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwcmludEJvcmRlclN0eWxlKTogUmVtb3ZlZCB0aGUgdW51c2VkIFJlbmRlck9i
amVjdCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBVcGRhdGVkIGZv
ciB0aGUgY2hhbmdlIHRvIHByaW50Qm9yZGVyU3R5bGUgZnVuY3Rpb24uCisKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhy
ZWFkOjpEYXRhYmFzZVRocmVhZCk6IFJlbW92ZWQgdGhlIHVudXNlZCBkb2N1bWVudCBhcmd1bWVu
dC4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmg6IERpdHRvLgorCisgICAgICAg
ICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9y
YWdlOjpzdG9yYWdlQXJlYSk6IFJlbW92ZWQgdGhlIHVudXNlZCBGcmFtZSogYXJndW1lbnQuCisg
ICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaDogRGl0dG8uCisKKyAgICAgICAgKiBzdmcv
U1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpzZW5kU1ZHTG9h
ZEV2ZW50SWZQb3NzaWJsZSk6IERvbid0IHBhc3MgYW4gZXhjZXB0aW9uCisgICAgICAgIGNvZGUg
bG9jYXRpb24gdG8gZGlzcGF0Y2hHZW5lcmljRXZlbnQuCisgICAgICAgICogc3ZnL1NWR0VsZW1l
bnRJbnN0YW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OmRp
c3BhdGNoRXZlbnQpOiBEaXR0by4KKworICAgICAgICAqIHN2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiB1bnVzZWQgUmVndWxhckV4cHJlc3Np
b24uaC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcik6IERvbid0IHBhc3Mgc3R5bGUgaW4gdG8KKyAgICAgICAgdGhlIFJlbmRl
clBhdGggY29uc3RydWN0b3IuCisKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6
IFJlbW92ZWQgaW5jbHVkZSBvZiB1bnVzZWQgUmVndWxhckV4cHJlc3Npb24uaC4KKworICAgICAg
ICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdt
ZW50RnJvbVNvdXJjZSk6IFJlbW92ZWQgdW51c2VkIHNvdXJjZU5vZGUgYXJndW1lbnQuCisgICAg
ICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0ZyYWdtZW50KTogRG9uJ3Qg
cGFzcyBzb3VyY2VOb2RlIHRvIGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZS4KKwogMjAwOS0wMS0x
MSAgQWRhbSBUcmVhdCAgPGFkYW0udHJlYXRAdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAko
cmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4Nyw4ICsyODcsOCBAQCBib29sIERPTUltcGxlbWVudGF0aW9uOjpp
c1hNTE1JTUVUeXBlKGNvCiB7CiAgICAgaWYgKG1pbWVUeXBlID09ICJ0ZXh0L3htbCIgfHwgbWlt
ZVR5cGUgPT0gImFwcGxpY2F0aW9uL3htbCIgfHwgbWltZVR5cGUgPT0gInRleHQveHNsIikKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHZhbGlkQ2hhcnMgPSAi
WzAtOWEtekEtWl9cXC0rfiEkXFxee318LiUnYCMmKl0iOyAvLyBwZXIgUkZDczogMzAyMywgMjA0
NQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVndWxhckV4cHJlc3Npb24sIHhtbFR5cGVSZWdF
eHAsIChTdHJpbmcoIl4iKSArIHZhbGlkQ2hhcnMgKyAiKy8iICsgdmFsaWRDaGFycyArICIrXFwr
eG1sJCIpKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgdmFsaWRDaGFycyA9ICJbMC05
YS16QS1aX1xcLSt+ISRcXF57fXwuJSdgIyYqXSI7IC8vIHBlciBSRkNzOiAzMDIzLCAyMDQ1Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWd1bGFyRXhwcmVzc2lvbiwgeG1sVHlwZVJlZ0V4cCwg
KFN0cmluZygiXiIpICsgdmFsaWRDaGFycyArICIrLyIgKyB2YWxpZENoYXJzICsgIitcXCt4bWwk
IiwgVGV4dENhc2VTZW5zaXRpdmUpKTsKICAgICByZXR1cm4geG1sVHlwZVJlZ0V4cC5tYXRjaCht
aW1lVHlwZSkgPiAtMTsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzk4MTIpCisrKyBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDYgQEAK
ICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJQcm9ncmVzc0V2
ZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJS
ZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgpAQCAtNDIwMCw3ICs0MTk5
LDcgQEAgRGF0YWJhc2VUaHJlYWQqIERvY3VtZW50OjpkYXRhYmFzZVRocmVhZAogICAgIGlmICgh
bV9kYXRhYmFzZVRocmVhZCAmJiAhbV9oYXNPcGVuRGF0YWJhc2VzKSB7CiAgICAgICAgIC8vIENy
ZWF0ZSB0aGUgZGF0YWJhc2UgdGhyZWFkIG9uIGZpcnN0IHJlcXVlc3QgLSBidXQgbm90IGlmIGF0
IGxlYXN0IG9uZSBkYXRhYmFzZSB3YXMgYWxyZWFkeSBvcGVuZWQsCiAgICAgICAgIC8vIGJlY2F1
c2UgaW4gdGhhdCBjYXNlIHdlIGFscmVhZHkgaGFkIGEgZGF0YWJhc2UgdGhyZWFkIGFuZCB0ZXJt
aW5hdGVkIGl0IGFuZCBzaG91bGQgbm90IGNyZWF0ZSBhbm90aGVyLgotICAgICAgICBtX2RhdGFi
YXNlVGhyZWFkID0gRGF0YWJhc2VUaHJlYWQ6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgbV9kYXRh
YmFzZVRocmVhZCA9IERhdGFiYXNlVGhyZWFkOjpjcmVhdGUoKTsKICAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlVGhyZWFkLT5zdGFydCgpKQogICAgICAgICAgICAgbV9kYXRhYmFzZVRocmVhZCA9IDA7
CiAgICAgfQpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDM5ODEyKQorKysgV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiAgKiAgICAgICAgICAgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNyBEYXZp
ZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03OCw3ICs3OCw3IEBAIGlubGlu
ZSBFbGVtZW50UmFyZURhdGEqIEVsZW1lbnQ6OmVuc3VyZVIKICAgICAKIE5vZGVSYXJlRGF0YSog
RWxlbWVudDo6Y3JlYXRlUmFyZURhdGEoKQogewotICAgIHJldHVybiBuZXcgRWxlbWVudFJhcmVE
YXRhKHRoaXMpOworICAgIHJldHVybiBuZXcgRWxlbWVudFJhcmVEYXRhOwogfQogICAgIAogUGFz
c1JlZlB0cjxOb2RlPiBFbGVtZW50OjpjbG9uZU5vZGUoYm9vbCBkZWVwKQpAQCAtNjU5LDcgKzY1
OSw3IEBAIHZvaWQgRWxlbWVudDo6ZGV0YWNoKCkKIHsKICAgICBjYW5jZWxGb2N1c0FwcGVhcmFu
Y2VVcGRhdGUoKTsKICAgICBpZiAoaGFzUmFyZURhdGEoKSkKLSAgICAgICAgcmFyZURhdGEoKS0+
cmVzZXRDb21wdXRlZFN0eWxlKHRoaXMpOworICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1
dGVkU3R5bGUoKTsKICAgICBDb250YWluZXJOb2RlOjpkZXRhY2goKTsKIH0KIApAQCAtNjc3LDcg
KzY3Nyw3IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2gKIAogICAg
IGlmICgoY2hhbmdlID4gTm9DaGFuZ2UgfHwgY2hhbmdlZCgpKSkgewogICAgICAgICBpZiAoaGFz
UmFyZURhdGEoKSkKLSAgICAgICAgICAgIHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSh0
aGlzKTsKKyAgICAgICAgICAgIHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSgpOwogICAg
IH0KICAgICBpZiAoaGFzUGFyZW50U3R5bGUgJiYgKGNoYW5nZSA+PSBJbmhlcml0IHx8IGNoYW5n
ZWQoKSkpIHsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IGRvY3VtZW50
KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMpOwpJbmRleDogV2ViQ29y
ZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVu
dFJhcmVEYXRhLmgJKHJldmlzaW9uIDM5ODEyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudFJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACi0vKioKLSAqCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA4IERhdmlkIFNtaXRoIDxjYXRmaXNoLm1hbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpA
QCAtMzAsOSArMjksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVsZW1lbnRSYXJl
RGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGEgewogcHVibGljOgotICAgIEVsZW1lbnRSYXJlRGF0
YShFbGVtZW50Kik7CisgICAgRWxlbWVudFJhcmVEYXRhKCk7CiAKLSAgICB2b2lkIHJlc2V0Q29t
cHV0ZWRTdHlsZShFbGVtZW50Kik7CisgICAgdm9pZCByZXNldENvbXB1dGVkU3R5bGUoKTsKIAog
ICAgIHVzaW5nIE5vZGVSYXJlRGF0YTo6bmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0
ZXJBdHRhY2g7CiAgICAgdXNpbmcgTm9kZVJhcmVEYXRhOjpzZXROZWVkc0ZvY3VzQXBwZWFyYW5j
ZVVwZGF0ZVNvb25BZnRlckF0dGFjaDsKQEAgLTQ2LDEyICs0NSwxMiBAQCBpbmxpbmUgSW50U2l6
ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpCiAgICAgcmV0dXJuIEludFNpemUoSU5UX01BWCwg
SU5UX01BWCk7CiB9CiAKLWlubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YShF
bGVtZW50KiBlKQoraW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKCkKICAg
ICA6IG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemlu
ZygpKQogewogfQogCi1pbmxpbmUgdm9pZCBFbGVtZW50UmFyZURhdGE6OnJlc2V0Q29tcHV0ZWRT
dHlsZShFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjpyZXNl
dENvbXB1dGVkU3R5bGUoKQogewogICAgIG1fY29tcHV0ZWRTdHlsZS5jbGVhcigpOwogfQpJbmRl
eDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCwxMCArMjcwLDEwIEBA
IGJvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEV2ZW50KFBhc3MKICAgICBldnQtPnNldFRh
cmdldChldmVudFRhcmdldFJlc3BlY3RpbmdTVkdUYXJnZXRSdWxlcyh0aGlzKSk7CiAKICAgICBS
ZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpOwotICAgIHJldHVybiBk
aXNwYXRjaEdlbmVyaWNFdmVudChldnQucmVsZWFzZSgpLCBlYyk7CisgICAgcmV0dXJuIGRpc3Bh
dGNoR2VuZXJpY0V2ZW50KGV2dC5yZWxlYXNlKCkpOwogfQogCi1ib29sIEV2ZW50VGFyZ2V0Tm9k
ZTo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogewogICAgIFJlZlB0cjxFdmVudD4gZXZlbnQo
cHJwRXZlbnQpOwogCkBAIC00MzUsOCArNDM1LDcgQEAgdm9pZCBFdmVudFRhcmdldE5vZGU6OmRp
c3BhdGNoV2luZG93RXZlbgogICAgICAgICBpZiAob3duZXJFbGVtZW50KSB7CiAgICAgICAgICAg
ICBSZWZQdHI8RXZlbnQ+IG93bmVyRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFs
c2UsIGNhbmNlbGFibGVBcmcpOwogICAgICAgICAgICAgb3duZXJFdmVudC0+c2V0VGFyZ2V0KG93
bmVyRWxlbWVudCk7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAg
ICAgIG93bmVyRWxlbWVudC0+ZGlzcGF0Y2hHZW5lcmljRXZlbnQob3duZXJFdmVudC5yZWxlYXNl
KCksIGVjKTsKKyAgICAgICAgICAgIG93bmVyRWxlbWVudC0+ZGlzcGF0Y2hHZW5lcmljRXZlbnQo
b3duZXJFdmVudC5yZWxlYXNlKCkpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXROb2RlLmgJKHJldmlzaW9uIDM5ODEyKQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZvaWQg
ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1Zh
bHVlLCBGcmFtZSogc291cmNlKTsKICAgICBib29sIGRpc3BhdGNoV2ViS2l0QW5pbWF0aW9uRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKTsKICAgICBib29sIGRpc3BhdGNoV2ViS2l0VHJhbnNp
dGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKTsKLSAgICBib29sIGRpc3BhdGNoR2VuZXJp
Y0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBkaXNw
YXRjaEdlbmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqLCBib29sIHVzZUNhcHR1cmUpOwogCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM5ODEyKQorKysgV2ViQ29y
ZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMDA2LDE2ICsxMDA2LDYgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6cmVtb3ZlQ1NTU3R5bGUoQwogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuKGVsZW0pOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVCbG9ja1N0eWxl
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSwgY29uc3QgUG9zaXRpb24gJnN0YXJ0
LCBjb25zdCBQb3NpdGlvbiAmZW5kKQotewotICAgIEFTU0VSVChzdGFydC5pc05vdE51bGwoKSk7
Ci0gICAgQVNTRVJUKGVuZC5pc05vdE51bGwoKSk7Ci0gICAgQVNTRVJUKHN0YXJ0Lm5vZGUoKS0+
aW5Eb2N1bWVudCgpKTsKLSAgICBBU1NFUlQoZW5kLm5vZGUoKS0+aW5Eb2N1bWVudCgpKTsKLSAg
ICBBU1NFUlQoUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzdGFydCwgZW5kKSA8PSAwKTsK
LSAgICAKLX0KLQogc3RhdGljIGJvb2wgaGFzVGV4dERlY29yYXRpb25Qcm9wZXJ0eShOb2RlICpu
b2RlKQogewogICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQpAQCAtMTExNSw3ICsxMTA1
LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlUZXh0RGVjb3JhdAogICAgIH0KIH0K
IAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJv
dW5kTm9kZShOb2RlICpub2RlLCBjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9u
ICZlbmQsIGJvb2wgZm9yY2UpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93blRleHRE
ZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlKE5vZGUqIG5vZGUsIGJvb2wgZm9yY2UpCiB7CiAgICAg
Tm9kZSAqaGlnaGVzdEFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9yV2l0aFRleHREZWNvcmF0aW9u
KG5vZGUpOwogICAgIApAQCAtMTE1MiwxMyArMTE0MiwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpwdXNoRG93blRleHREZWNvCiAgICAgLy8gc3R5bGVzIChjYXVzZWQgYnkgc3R5bGVzaGVl
dHMpIGFuZCBleHBsaWNpdGx5IG5lZ2F0ZSB0ZXh0CiAgICAgLy8gZGVjb3JhdGlvbiB3aGlsZSBw
dXNoaW5nIGRvd24uCiAKLSAgICBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmROb2Rl
KHN0YXJ0Lm5vZGUoKSwgc3RhcnQsIGVuZCwgZmFsc2UpOworICAgIHB1c2hEb3duVGV4dERlY29y
YXRpb25TdHlsZUFyb3VuZE5vZGUoc3RhcnQubm9kZSgpLCBmYWxzZSk7CiAgICAgdXBkYXRlTGF5
b3V0KCk7Ci0gICAgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZShzdGFydC5u
b2RlKCksIHN0YXJ0LCBlbmQsIHRydWUpOworICAgIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHls
ZUFyb3VuZE5vZGUoc3RhcnQubm9kZSgpLCB0cnVlKTsKIAotICAgIHB1c2hEb3duVGV4dERlY29y
YXRpb25TdHlsZUFyb3VuZE5vZGUoZW5kLm5vZGUoKSwgc3RhcnQsIGVuZCwgZmFsc2UpOworICAg
IHB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoZW5kLm5vZGUoKSwgZmFsc2Up
OwogICAgIHVwZGF0ZUxheW91dCgpOwotICAgIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFy
b3VuZE5vZGUoZW5kLm5vZGUoKSwgc3RhcnQsIGVuZCwgdHJ1ZSk7CisgICAgcHVzaERvd25UZXh0
RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZShlbmQubm9kZSgpLCB0cnVlKTsKIH0KIAogc3RhdGlj
IGludCBtYXhSYW5nZU9mZnNldChOb2RlICpuKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmgJKHJldmlzaW9uIDM5ODEyKQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDE0ICs2
NywxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50Kik7CiAgICAgdm9pZCByZW1vdmVIVE1MQmlk
aUVtYmVkZGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQq
KTsKICAgICB2b2lkIHJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwg
SFRNTEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUJsb2NrU3R5bGUoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
OwogICAgIHZvaWQgcmVtb3ZlSW5saW5lU3R5bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4sIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7
CiAgICAgYm9vbCBub2RlRnVsbHlTZWxlY3RlZChOb2RlKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBjb25zdDsKICAgICBib29sIG5vZGVGdWxseVVuc2VsZWN0
ZWQoTm9kZSosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29u
c3Q7CiAgICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZXh0cmFjdFRl
eHREZWNvcmF0aW9uU3R5bGUoTm9kZSopOwogICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGV4dHJhY3RBbmROZWdhdGVUZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUqKTsK
ICAgICB2b2lkIGFwcGx5VGV4dERlY29yYXRpb25TdHlsZShOb2RlKiwgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24gKnN0eWxlKTsKLSAgICB2b2lkIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHls
ZUFyb3VuZE5vZGUoTm9kZSosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCwgYm9vbCBmb3JjZSk7CisgICAgdm9pZCBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVB
cm91bmROb2RlKE5vZGUqLCBib29sIGZvcmNlKTsKICAgICB2b2lkIHB1c2hEb3duVGV4dERlY29y
YXRpb25TdHlsZUF0Qm91bmRhcmllcyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQpOwogICAgIAogICAgIC8vIHN0eWxlLWFwcGxpY2F0aW9uIGhlbHBlcnMKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5j
bHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5o
IgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMzk4MTIpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNyArNSw3
IEBACiAgICAgICAgICAgICAgIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
ICAgICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQog
ICAgICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkK
IAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTEzMyw3ICsxMzMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGFnTWF0
Y2goY29uc3QgY2hhciogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIFRva2Vu
OjphZGRBdHRyaWJ1dGUoRG9jdW1lbnQqIGRvYywgQXRvbWljU3RyaW5nJiBhdHRyTmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSwgYm9vbCB2aWV3U291cmNlTW9kZSkKK2lu
bGluZSB2b2lkIFRva2VuOjphZGRBdHRyaWJ1dGUoQXRvbWljU3RyaW5nJiBhdHRyTmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSwgYm9vbCB2aWV3U291cmNlTW9kZSkKIHsK
ICAgICBpZiAoIWF0dHJOYW1lLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQoIWF0dHJOYW1l
LmNvbnRhaW5zKCcvJykpOwpAQCAtMTMwOSw3ICsxMzA5LDcgQEAgSFRNTFRva2VuaXplcjo6U3Rh
dGUgSFRNTFRva2VuaXplcjo6cGFycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFRva2VuLmFkZFZpZXdTb3VyY2VDaGFyKGN1cmNoYXIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50VG9rZW4uYWRkQXR0cmli
dXRlKG1fZG9jLCBtX2F0dHJOYW1lLCBlbXB0eUF0b20sIGluVmlld1NvdXJjZU1vZGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRBdHRyaWJ1dGUobV9hdHRy
TmFtZSwgZW1wdHlBdG9tLCBpblZpZXdTb3VyY2VNb2RlKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9kZXN0ID0gbV9idWZmZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
ZXRUYWdTdGF0ZShTZWFyY2hBdHRyaWJ1dGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dElzU2xhc2ggPSBmYWxzZTsKQEAgLTEzNjMsNyArMTM2Myw3IEBAIEhUTUxUb2tlbml6ZXI6OlN0
YXRlIEhUTUxUb2tlbml6ZXI6OnBhcnMKICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY1N0
cmluZyBhdHRyaWJ1dGVWYWx1ZShtX2J1ZmZlciArIDEsIG1fZGVzdCAtIG1fYnVmZmVyIC0gMSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKCcv
JykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hdHRyTmFtZSA9IGF0dHJpYnV0ZVZh
bHVlOyAvLyBKdXN0IG1ha2UgdGhlIG5hbWUvdmFsdWUgbWF0Y2guIChGSVhNRTogSXMgdGhpcyBz
b21lIFdpbklFIHF1aXJrPykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2Vu
LmFkZEF0dHJpYnV0ZShtX2RvYywgbV9hdHRyTmFtZSwgYXR0cmlidXRlVmFsdWUsIGluVmlld1Nv
dXJjZU1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRB
dHRyaWJ1dGUobV9hdHRyTmFtZSwgYXR0cmlidXRlVmFsdWUsIGluVmlld1NvdXJjZU1vZGUoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZFZpZXdTb3VyY2VDaGFyKCd4
Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRUYWdTdGF0ZShTZWFyY2hBdHRy
aWJ1dGUpOwpAQCAtMTM4OSw3ICsxMzg5LDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRv
a2VuaXplcjo6cGFycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRU
b2tlbi5hZGRWaWV3U291cmNlQ2hhcigneCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50VG9rZW4uYWRkVmlld1NvdXJjZUNoYXIoJ3YnKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0dHJpYnV0ZShtX2RvYywgbV9hdHRyTmFtZSwgYXR0
cmlidXRlVmFsdWUsIGluVmlld1NvdXJjZU1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRUb2tlbi5hZGRBdHRyaWJ1dGUobV9hdHRyTmFtZSwgYXR0cmlidXRlVmFsdWUs
IGluVmlld1NvdXJjZU1vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rlc3QgPSBt
X2J1ZmZlcjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldFRhZ1N0YXRlKFNlYXJj
aEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwpA
QCAtMTQxOSw3ICsxNDE5LDcgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6
cGFycwogICAgICAgICAgICAgICAgICAgICAvLyAnLycgZG9lcyBub3QgZGVsaW1pdCBpbiBJRSEK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlTcGFjZShjdXJjaGFyKSB8fCBjdXJjaGFy
ID09ICc+JykgewogICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0
ZVZhbHVlKG1fYnVmZmVyICsgMSwgbV9kZXN0IC0gbV9idWZmZXIgLSAxKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFkZEF0dHJpYnV0ZShtX2RvYywgbV9hdHRyTmFt
ZSwgYXR0cmlidXRlVmFsdWUsIGluVmlld1NvdXJjZU1vZGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRUb2tlbi5hZGRBdHRyaWJ1dGUobV9hdHRyTmFtZSwgYXR0cmlidXRl
VmFsdWUsIGluVmlld1NvdXJjZU1vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aW5WaWV3U291cmNlTW9kZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dFRva2VuLmFkZFZpZXdTb3VyY2VDaGFyKCd2Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2Rlc3QgPSBtX2J1ZmZlcjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMzk4MTIp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcg
KzMsNyBAQAogICAgICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUub3Jn
KQogICAgICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcp
CiAgICAgICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQot
ICAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjMsNyArNjMsNyBAQCBzdHJ1Y3QgVG9rZW4gewogICAg
IHsgfQogICAgIH5Ub2tlbigpIHsgfQogCi0gICAgdm9pZCBhZGRBdHRyaWJ1dGUoRG9jdW1lbnQq
LCBBdG9taWNTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHYsIGJvb2wgdmll
d1NvdXJjZU1vZGUpOworICAgIHZvaWQgYWRkQXR0cmlidXRlKEF0b21pY1N0cmluZyYgYXR0ck5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdiwgYm9vbCB2aWV3U291cmNlTW9kZSk7CiAKICAgICBi
b29sIGlzT3BlblRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1
cm4gYmVnaW5UYWcgJiYgZnVsbE5hbWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZTsgfQogICAgIGJv
b2wgaXNDbG9zZVRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1
cm4gIWJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0KSW5kZXg6
IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNyArMzQ2LDcgQEAgU3RvcmFnZSogRE9NV2luZG93
Ojpsb2NhbFN0b3JhZ2UoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIExvY2FsU3Rv
cmFnZSogbG9jYWxTdG9yYWdlID0gcGFnZS0+Z3JvdXAoKS5sb2NhbFN0b3JhZ2UoKTsKLSAgICBS
ZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gbG9jYWxTdG9yYWdlID8gbG9jYWxTdG9y
YWdlLT5zdG9yYWdlQXJlYShtX2ZyYW1lLCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkgOiAw
OyAKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gbG9jYWxTdG9yYWdlID8g
bG9jYWxTdG9yYWdlLT5zdG9yYWdlQXJlYShkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkgOiAw
OyAKICAgICBpZiAoc3RvcmFnZUFyZWEpCiAgICAgICAgIG1fbG9jYWxTdG9yYWdlID0gU3RvcmFn
ZTo6Y3JlYXRlKG1fZnJhbWUsIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKSk7CiAKSW5kZXg6IFdlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjYsMTEgKzEyNiw5IEBAIHN0YXRpYyBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3UKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBE
cmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24s
IERyYWdEYXRhKiBkcmFnRGF0YSkgCitib29sIERyYWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKFNl
bGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbikKIHsKLSAgICByZXR1cm4gbV9kb2N1bWVudCA9
PSBtX2RyYWdJbml0aWF0b3IKLSAgICAgICAgJiYgc2VsZWN0aW9uLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpCi0gICAgICAgICYmICFpc0NvcHlLZXlEb3duKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQg
PT0gbV9kcmFnSW5pdGlhdG9yICYmIHNlbGVjdGlvbi0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAh
aXNDb3B5S2V5RG93bigpOwogfQogCiB2b2lkIERyYWdDb250cm9sbGVyOjpjYW5jZWxEcmFnKCkK
QEAgLTE5MSw3ICsxODksNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZyhEcmFn
RGF0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAgICAgCi0gICAgaWYgKChtX2RyYWdE
ZXN0aW5hdGlvbkFjdGlvbiAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQpICYmIGNvbmNsdWRl
RHJhZyhkcmFnRGF0YSwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb24pKSB7CisgICAgaWYgKChtX2Ry
YWdEZXN0aW5hdGlvbkFjdGlvbiAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQpICYmIGNvbmNs
dWRlRWRpdERyYWcoZHJhZ0RhdGEpKSB7CiAgICAgICAgIG1fZG9jdW1lbnQgPSAwOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yODgsNyArMjg2LDcgQEAgRHJhZ09wZXJhdGlvbiBE
cmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1lbgogICAgICAgICAgICAgbV9wYWdlLT5kcmFnQ2FyZXRD
b250cm9sbGVyKCktPnNldFNlbGVjdGlvbihkcmFnQ2FyZXQpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICByZXR1cm4gZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5zZWxlY3Rpb24oKSwgZHJh
Z0RhdGEpID8gRHJhZ09wZXJhdGlvbk1vdmUgOiBEcmFnT3BlcmF0aW9uQ29weTsKKyAgICAgICAg
cmV0dXJuIGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpID8gRHJhZ09wZXJhdGlv
bk1vdmUgOiBEcmFnT3BlcmF0aW9uQ29weTsKICAgICB9IAogICAgIAogICAgIG1fcGFnZS0+ZHJh
Z0NhcmV0Q29udHJvbGxlcigpLT5jbGVhcigpOwpAQCAtMzIyLDExICszMjAsMTAgQEAgc3RhdGlj
IGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbQogICAgIHJldHVybiAhZnJhbWUtPnNl
bGVjdGlvbigpLT5pc05vbmUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRh
YmxlKCk7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRHJhZyhEcmFnRGF0YSog
ZHJhZ0RhdGEsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrKQorYm9vbCBEcmFnQ29u
dHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEpCiB7CiAgICAgQVNT
RVJUKGRyYWdEYXRhKTsKICAgICBBU1NFUlQoIW1faXNIYW5kbGluZ0RyYWcpOwotICAgIEFTU0VS
VChhY3Rpb25NYXNrICYgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCk7CiAgICAgCiAgICAgaWYg
KCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTQsNyArMzkxLDcgQEAg
Ym9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVEcmFnKERyYWdEYQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgRG9jTG9hZGVyKiBsb2FkZXIgPSByYW5nZS0+b3duZXJEb2N1bWVudCgpLT5k
b2NMb2FkZXIoKTsKICAgICBsb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXModHJ1ZSk7Ci0g
ICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCksIGRyYWdEYXRhKSB8fCBk
cmFnQ2FyZXQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeyAKKyAgICBpZiAoZHJhZ0lzTW92
ZShpbm5lckZyYW1lLT5zZWxlY3Rpb24oKSkgfHwgZHJhZ0NhcmV0LmlzQ29udGVudFJpY2hseUVk
aXRhYmxlKCkpIHsgCiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKICAgICAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudEZy
b21EcmFnRGF0YShkcmFnRGF0YSwgcmFuZ2UsIHRydWUsIGNob3NlUGxhaW5UZXh0KTsKICAgICAg
ICAgaWYgKCFmcmFnbWVudCB8fCAhaW5uZXJGcmFtZS0+ZWRpdG9yKCktPnNob3VsZEluc2VydEZy
YWdtZW50KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uRHJvcHBlZCkpIHsKQEAg
LTQwMyw3ICs0MDAsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZURyYWcoRHJhZ0Rh
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybURyYWdE
ZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7Ci0g
ICAgICAgIGlmIChkcmFnSXNNb3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSkp
IHsKKyAgICAgICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpKSB7CiAg
ICAgICAgICAgICBib29sIHNtYXJ0TW92ZSA9IGlubmVyRnJhbWUtPnNlbGVjdGlvbkdyYW51bGFy
aXR5KCkgPT0gV29yZEdyYW51bGFyaXR5IAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBp
bm5lckZyYW1lLT5lZGl0b3IoKS0+c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIGRyYWdEYXRhLT5jYW5TbWFydFJlcGxhY2UoKTsKQEAgLTcw
MSw3ICs2OTgsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUqIHNyCiAg
ICAgICAgIGRlbGV0ZURyYWdJbWFnZShkcmFnSW1hZ2UpOwogICAgIHJldHVybiBzdGFydGVkRHJh
ZzsKIH0KLSAgICAKKwogdm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9JbWFnZURyYWcoRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgSW50UG9pbnQmIGRyYWdPcmlnaW4sIGNvbnN0IEludFJlY3QmIHJlY3Qs
IENsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIEludFBvaW50JiBkcmFnSW1hZ2VP
ZmZzZXQpCiB7CiAgICAgSW50UG9pbnQgbW91c2VEb3duUG9pbnQgPSBkcmFnT3JpZ2luOwpJbmRl
eDogV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmgJKHJldmlzaW9uIDM5ODEyKQorKysgV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAi
RHJhZ0FjdGlvbnMuaCIKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRQb2lu
dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQxLDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSW1hZ2U7CisgICAgY2xh
c3MgSW50UmVjdDsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFBhZ2U7CiAgICAgY2xhc3Mg
UGxhdGZvcm1Nb3VzZUV2ZW50OwpAQCAtNTgsOCArNTgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIERyYWdPcGVyYXRpb24gZHJhZ1VwZGF0ZWQoRHJhZ0RhdGEqKTsKICAgICAgICAg
Ym9vbCBwZXJmb3JtRHJhZyhEcmFnRGF0YSopOwogICAgICAgICAKLSAgICAgICAgLy9GSVhNRTog
SXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJlbW92ZSBhIG51bWJlciBvZiB0aGVzZSBhY2Nlc3Nv
cnMgb25jZSBhbGwKLSAgICAgICAgLy9kcmFnIGxvZ2ljIGlzIGluIFdlYkNvcmUKKyAgICAgICAg
Ly8gRklYTUU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZW1vdmUgYSBudW1iZXIgb2YgdGhl
c2UgYWNjZXNzb3JzIG9uY2UgYWxsCisgICAgICAgIC8vIGRyYWcgbG9naWMgaXMgaW4gV2ViQ29y
ZS4KICAgICAgICAgdm9pZCBzZXREaWRJbml0aWF0ZURyYWcoYm9vbCBpbml0aWF0ZWQpIHsgbV9k
aWRJbml0aWF0ZURyYWcgPSBpbml0aWF0ZWQ7IH0gCiAgICAgICAgIGJvb2wgZGlkSW5pdGlhdGVE
cmFnKCkgY29uc3QgeyByZXR1cm4gbV9kaWRJbml0aWF0ZURyYWc7IH0KICAgICAgICAgdm9pZCBz
ZXRJc0hhbmRsaW5nRHJhZyhib29sIGhhbmRsaW5nKSB7IG1faXNIYW5kbGluZ0RyYWcgPSBoYW5k
bGluZzsgfQpAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgc2V0RHJhZ09mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KSB7IG1fZHJhZ09mZnNldCA9
IG9mZnNldDsgfQogICAgICAgICBjb25zdCBJbnRQb2ludCYgZHJhZ09mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhZ09mZnNldDsgfQogICAgICAgICBEcmFnU291cmNlQWN0aW9uIGRyYWdTb3Vy
Y2VBY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RyYWdTb3VyY2VBY3Rpb247IH0KLSAgICAgICAg
CisKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVu
dDsgfQogICAgICAgICBEcmFnRGVzdGluYXRpb25BY3Rpb24gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kcmFnRGVzdGluYXRpb25BY3Rpb247IH0KICAgICAgICAgRHJh
Z1NvdXJjZUFjdGlvbiBkZWxlZ2F0ZURyYWdTb3VyY2VBY3Rpb24oY29uc3QgSW50UG9pbnQmIHBh
Z2VQb2ludCk7CkBAIC05MSwxNiArOTEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IERyYWdJY29uUmlnaHRJbnNldDsKICAgICAgICAgc3RhdGljIGNv
bnN0IGludCBEcmFnSWNvbkJvdHRvbUluc2V0OyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdCBEcmFnSW1hZ2VBbHBoYTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2Fu
UHJvY2Vzc0RyYWcoRHJhZ0RhdGEqKTsKLSAgICAgICAgYm9vbCBjb25jbHVkZURyYWcoRHJhZ0Rh
dGEqLCBEcmFnRGVzdGluYXRpb25BY3Rpb24pOworICAgICAgICBib29sIGNvbmNsdWRlRWRpdERy
YWcoRHJhZ0RhdGEqKTsKICAgICAgICAgRHJhZ09wZXJhdGlvbiBkcmFnRW50ZXJlZE9yVXBkYXRl
ZChEcmFnRGF0YSopOwogICAgICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbkZvckxvYWQoRHJh
Z0RhdGEqKTsKICAgICAgICAgRHJhZ09wZXJhdGlvbiB0cnlEb2N1bWVudERyYWcoRHJhZ0RhdGEq
LCBEcmFnRGVzdGluYXRpb25BY3Rpb24pOwogICAgICAgICBEcmFnT3BlcmF0aW9uIHRyeURIVE1M
RHJhZyhEcmFnRGF0YSopOwogICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24oRHJh
Z0RhdGEqKTsKICAgICAgICAgdm9pZCBjYW5jZWxEcmFnKCk7Ci0gICAgICAgIGJvb2wgZHJhZ0lz
TW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiwgRHJhZ0RhdGEqKTsKKyAgICAgICAgYm9vbCBkcmFn
SXNNb3ZlKFNlbGVjdGlvbkNvbnRyb2xsZXIqKTsKICAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3du
KCk7CiAKICAgICAgICAgSW50UmVjdCBzZWxlY3Rpb25EcmFnZ2luZ1JlY3QoRnJhbWUqKTsKQEAg
LTEwOCwxNCArMTA5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkb0lt
YWdlRHJhZyhFbGVtZW50KiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiwgQ2xpcGJv
YXJkKiwgRnJhbWUqLCBJbnRQb2ludCYpOwogICAgICAgICB2b2lkIGRvU3lzdGVtRHJhZyhEcmFn
SW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqLCBG
cmFtZSosIGJvb2wgZm9yTGluayk7CiAgICAgICAgIHZvaWQgY2xlYW51cEFmdGVyU3lzdGVtRHJh
ZygpOworCiAgICAgICAgIFBhZ2UqIG1fcGFnZTsKICAgICAgICAgRHJhZ0NsaWVudCogbV9jbGll
bnQ7CiAgICAgICAgIAotICAgICAgICAvL1RoZSBEb2N1bWVudCB0aGUgbW91c2Ugd2FzIGxhc3Qg
ZHJhZ2dlZCBvdmVyCi0gICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgICAgICAKLSAg
ICAgICAgLy9UaGUgRG9jdW1lbnQgKGlmIGFueSkgdGhhdCBpbml0aWF0ZWQgdGhlIGRyYWcKLSAg
ICAgICAgRG9jdW1lbnQqIG1fZHJhZ0luaXRpYXRvcjsKKyAgICAgICAgRG9jdW1lbnQqIG1fZG9j
dW1lbnQ7IC8vIFRoZSBkb2N1bWVudCB0aGUgbW91c2Ugd2FzIGxhc3QgZHJhZ2dlZCBvdmVyLgor
ICAgICAgICBEb2N1bWVudCogbV9kcmFnSW5pdGlhdG9yOyAvLyBUaGUgRG9jdW1lbnQgKGlmIGFu
eSkgdGhhdCBpbml0aWF0ZWQgdGhlIGRyYWcuCiAgICAgICAgIAogICAgICAgICBEcmFnRGVzdGlu
YXRpb25BY3Rpb24gbV9kcmFnRGVzdGluYXRpb25BY3Rpb247CiAgICAgICAgIERyYWdTb3VyY2VB
Y3Rpb24gbV9kcmFnU291cmNlQWN0aW9uOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzOTgxMikKKysr
IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMyw3ICszMzMsNyBA
QCBzdGF0aWMgUmVndWxhckV4cHJlc3Npb24qIGNyZWF0ZVJlZ0V4cEZvCiAgICAgLy8gUkVWSUVX
LSB2ZXJzaW9uIG9mIHRoaXMgY2FsbCBpbiBGcmFtZU1hYy5tbSBjYWNoZXMgYmFzZWQgb24gdGhl
IE5TQXJyYXkgcHRycyBiZWluZwogICAgIC8vIHRoZSBzYW1lIGFjcm9zcyBjYWxscy4gIFdlIGNh
bid0IGRvIHRoYXQuCiAKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZ3VsYXJFeHByZXNzaW9u
LCB3b3JkUmVnRXhwLCAoIlxcdyIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZ3VsYXJF
eHByZXNzaW9uLCB3b3JkUmVnRXhwLCAoIlxcdyIsIFRleHRDYXNlU2Vuc2l0aXZlKSk7CiAgICAg
U3RyaW5nIHBhdHRlcm4oIigiKTsKICAgICB1bnNpZ25lZCBpbnQgbnVtTGFiZWxzID0gbGFiZWxz
LnNpemUoKTsKICAgICB1bnNpZ25lZCBpbnQgaTsKQEAgLTM0Myw4ICszNDMsOCBAQCBzdGF0aWMg
UmVndWxhckV4cHJlc3Npb24qIGNyZWF0ZVJlZ0V4cEZvCiAgICAgICAgIGJvb2wgc3RhcnRzV2l0
aFdvcmRDaGFyID0gZmFsc2U7CiAgICAgICAgIGJvb2wgZW5kc1dpdGhXb3JkQ2hhciA9IGZhbHNl
OwogICAgICAgICBpZiAobGFiZWwubGVuZ3RoKCkgIT0gMCkgewotICAgICAgICAgICAgc3RhcnRz
V2l0aFdvcmRDaGFyID0gd29yZFJlZ0V4cC5zZWFyY2gobGFiZWwuc3Vic3RyaW5nKDAsIDEpKSA+
PSAwOwotICAgICAgICAgICAgZW5kc1dpdGhXb3JkQ2hhciA9IHdvcmRSZWdFeHAuc2VhcmNoKGxh
YmVsLnN1YnN0cmluZyhsYWJlbC5sZW5ndGgoKSAtIDEsIDEpKSA+PSAwOworICAgICAgICAgICAg
c3RhcnRzV2l0aFdvcmRDaGFyID0gd29yZFJlZ0V4cC5tYXRjaChsYWJlbC5zdWJzdHJpbmcoMCwg
MSkpID49IDA7CisgICAgICAgICAgICBlbmRzV2l0aFdvcmRDaGFyID0gd29yZFJlZ0V4cC5tYXRj
aChsYWJlbC5zdWJzdHJpbmcobGFiZWwubGVuZ3RoKCkgLSAxLCAxKSkgPj0gMDsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKGkgIT0gMCkKQEAgLTM2MSw3ICszNjEsNyBAQCBzdGF0
aWMgUmVndWxhckV4cHJlc3Npb24qIGNyZWF0ZVJlZ0V4cEZvCiAgICAgICAgIH0KICAgICB9CiAg
ICAgcGF0dGVybi5hcHBlbmQoIikiKTsKLSAgICByZXR1cm4gbmV3IFJlZ3VsYXJFeHByZXNzaW9u
KHBhdHRlcm4sIGZhbHNlKTsKKyAgICByZXR1cm4gbmV3IFJlZ3VsYXJFeHByZXNzaW9uKHBhdHRl
cm4sIFRleHRDYXNlSW5zZW5zaXRpdmUpOwogfQogCiBTdHJpbmcgRnJhbWU6OnNlYXJjaEZvckxh
YmVsc0Fib3ZlQ2VsbChSZWd1bGFyRXhwcmVzc2lvbiogcmVnRXhwLCBIVE1MVGFibGVDZWxsRWxl
bWVudCogY2VsbCkKQEAgLTQ1Myw3ICs0NTMsNyBAQCBTdHJpbmcgRnJhbWU6Om1hdGNoTGFiZWxz
QWdhaW5zdEVsZW1lbnQoCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIC8vIE1ha2Ug
bnVtYmVycyBhbmQgXydzIGluIGZpZWxkIG5hbWVzIGJlaGF2ZSBsaWtlIHdvcmQgYm91bmRhcmll
cywgZS5nLiwgImFkZHJlc3MyIgotICAgIHJlcGxhY2UobmFtZSwgUmVndWxhckV4cHJlc3Npb24o
IlxcZCIpLCAiICIpOworICAgIHJlcGxhY2UobmFtZSwgUmVndWxhckV4cHJlc3Npb24oIlxcZCIs
IFRleHRDYXNlU2Vuc2l0aXZlKSwgIiAiKTsKICAgICBuYW1lLnJlcGxhY2UoJ18nLCAnICcpOwog
ICAgIAogICAgIE93blB0cjxSZWd1bGFyRXhwcmVzc2lvbj4gcmVnRXhwKGNyZWF0ZVJlZ0V4cEZv
ckxhYmVscyhsYWJlbHMpKTsKQEAgLTQ2NCw3ICs0NjQsNyBAQCBTdHJpbmcgRnJhbWU6Om1hdGNo
TGFiZWxzQWdhaW5zdEVsZW1lbnQoCiAgICAgaW50IGJlc3RMZW5ndGggPSAtMTsKICAgICBpbnQg
c3RhcnQgPSAwOwogICAgIGRvIHsKLSAgICAgICAgcG9zID0gcmVnRXhwLT5zZWFyY2gobmFtZSwg
c3RhcnQpOworICAgICAgICBwb3MgPSByZWdFeHAtPm1hdGNoKG5hbWUsIHN0YXJ0KTsKICAgICAg
ICAgaWYgKHBvcyAhPSAtMSkgewogICAgICAgICAgICAgbGVuZ3RoID0gcmVnRXhwLT5tYXRjaGVk
TGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobGVuZ3RoID49IGJlc3RMZW5ndGgpIHsKSW5kZXg6
IFdlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuaAko
cmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBXTUxQYWdlU3Rh
dGU7CiAjZW5kaWYKIAotICAgIGVudW0gVGV4dENhc2VTZW5zaXRpdml0eSB7IFRleHRDYXNlU2Vu
c2l0aXZlLCBUZXh0Q2FzZUluc2Vuc2l0aXZlIH07CiAgICAgZW51bSBGaW5kRGlyZWN0aW9uIHsg
RmluZERpcmVjdGlvbkZvcndhcmQsIEZpbmREaXJlY3Rpb25CYWNrd2FyZCB9OwogCiAgICAgY2xh
c3MgUGFnZSA6IE5vbmNvcHlhYmxlIHsKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL3Bh
Z2UvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MTcsNyArNDE3LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGluZwog
ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwo
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBh
dHRyU3RyaW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBOU1JhbmdlIHJhbmdlKQorc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwoTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTlNSYW5nZSByYW5n
ZSkKIHsKICAgICBpbnQgcGFyZW50SGVhZGluZ0xldmVsID0gQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6aGVhZGluZ0xldmVsKHJlbmRlcmVyLT5wYXJlbnQoKS0+ZWxlbWVudCgpKTsKICAgICAK
QEAgLTQ3MSw3ICs0NzEsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEVsZW1l
bnQoCiAgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTphdHRyaWJ1dGUgcmFuZ2U6
cmFuZ2VdOwogfQogCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywgTm9kZSogbm9kZSwgaW50IG9mZnNldCwgY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQg
bGVuZ3RoKQorc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBj
b25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5ndGgpCiB7CiAgICAgLy8gc2tpcCBpbnZpc2libGUg
dGV4dAogICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKQEAgLTQ5Myw3ICs0OTMsNyBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0CiAgICAgCiAgICAgLy8gc2V0IG5l
dyBhdHRyaWJ1dGVzCiAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShhdHRyU3RyaW5nLCBu
b2RlLT5yZW5kZXJlcigpLCBhdHRyU3RyaW5nUmFuZ2UpOwotICAgIEFYQXR0cmlidXRlU3RyaW5n
U2V0SGVhZGluZ0xldmVsKG9iamVjdCwgYXR0clN0cmluZywgbm9kZS0+cmVuZGVyZXIoKSwgYXR0
clN0cmluZ1JhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEhlYWRpbmdMZXZlbChhdHRy
U3RyaW5nLCBub2RlLT5yZW5kZXJlcigpLCBhdHRyU3RyaW5nUmFuZ2UpOwogICAgIEFYQXR0cmli
dXRlU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKGF0dHJTdHJpbmcsIG5vZGUtPnJlbmRlcmVyKCks
IGF0dHJTdHJpbmdSYW5nZSk7CiAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRFbGVtZW50KGF0dHJT
dHJpbmcsIE5TQWNjZXNzaWJpbGl0eUxpbmtUZXh0QXR0cmlidXRlLCBBWExpbmtFbGVtZW50Rm9y
Tm9kZShub2RlKSwgYXR0clN0cmluZ1JhbmdlKTsKICAgICAKQEAgLTU0Myw3ICs1NDMsNyBAQCBz
dGF0aWMgTlNTdHJpbmcqIG5zU3RyaW5nRm9yUmVwbGFjZWROb2RlCiAKICAgICAgICAgLy8gbm9u
LXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwgbm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFj
ZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIgaW4gQVgpCiAgICAgICAgIGlmIChpdC5sZW5ndGgo
KSAhPSAwKSB7Ci0gICAgICAgICAgICBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KG1fb2Jq
ZWN0LCBhdHRyU3RyaW5nLCBub2RlLCBvZmZzZXQsIGl0LmNoYXJhY3RlcnMoKSwgaXQubGVuZ3Ro
KCkpOworICAgICAgICAgICAgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChhdHRyU3RyaW5n
LCBub2RlLCBvZmZzZXQsIGl0LmNoYXJhY3RlcnMoKSwgaXQubGVuZ3RoKCkpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgTm9kZSogcmVwbGFjZWROb2RlID0gbm9kZS0+Y2hpbGROb2Rl
KG9mZnNldCk7CiAgICAgICAgICAgICBOU1N0cmluZyAqYXR0YWNobWVudFN0cmluZyA9IG5zU3Ry
aW5nRm9yUmVwbGFjZWROb2RlKHJlcGxhY2VkTm9kZSk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFj
L0ZyYW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0J
KHJldmlzaW9uIDM5ODEyKQorKysgV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBSZWd1bGFyRXhwcmVzc2lvbiogcmVnRXhwRm9yTGFi
ZWxzKE5TQXJyCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZWdFeHBDYWNoZVNpemUg
PSA0OwogICAgIHN0YXRpYyBOU011dGFibGVBcnJheSogcmVnRXhwTGFiZWxzID0gbmlsOwogICAg
IERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPFJlZ3VsYXJFeHByZXNzaW9uKj4sIHJlZ0V4cHMs
ICgpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZ3VsYXJFeHByZXNzaW9uLCB3b3JkUmVn
RXhwLCAoIlxcdyIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZ3VsYXJFeHByZXNzaW9u
LCB3b3JkUmVnRXhwLCAoIlxcdyIsIFRleHRDYXNlU2Vuc2l0aXZlKSk7CiAKICAgICBSZWd1bGFy
RXhwcmVzc2lvbiogcmVzdWx0OwogICAgIGlmICghcmVnRXhwTGFiZWxzKQpAQCAtMTA4LDggKzEw
OCw4IEBAIFJlZ3VsYXJFeHByZXNzaW9uKiByZWdFeHBGb3JMYWJlbHMoTlNBcnIKICAgICAgICAg
ICAgIGJvb2wgc3RhcnRzV2l0aFdvcmRDaGFyID0gZmFsc2U7CiAgICAgICAgICAgICBib29sIGVu
ZHNXaXRoV29yZENoYXIgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChsYWJlbC5sZW5ndGgoKSAh
PSAwKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRzV2l0aFdvcmRDaGFyID0gd29yZFJlZ0V4cC5z
ZWFyY2gobGFiZWwuc3Vic3RyaW5nKDAsIDEpKSA+PSAwOwotICAgICAgICAgICAgICAgIGVuZHNX
aXRoV29yZENoYXIgPSB3b3JkUmVnRXhwLnNlYXJjaChsYWJlbC5zdWJzdHJpbmcobGFiZWwubGVu
Z3RoKCkgLSAxLCAxKSkgPj0gMDsKKyAgICAgICAgICAgICAgICBzdGFydHNXaXRoV29yZENoYXIg
PSB3b3JkUmVnRXhwLm1hdGNoKGxhYmVsLnN1YnN0cmluZygwLCAxKSkgPj0gMDsKKyAgICAgICAg
ICAgICAgICBlbmRzV2l0aFdvcmRDaGFyID0gd29yZFJlZ0V4cC5tYXRjaChsYWJlbC5zdWJzdHJp
bmcobGFiZWwubGVuZ3RoKCkgLSAxLCAxKSkgPj0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGkgIT0gMCkKQEAgLTEyNCw3ICsxMjQsNyBAQCBSZWd1bGFy
RXhwcmVzc2lvbiogcmVnRXhwRm9yTGFiZWxzKE5TQXJyCiAgICAgICAgICAgICAgICAgcGF0dGVy
bi5hcHBlbmQoIlxcYiIpOwogICAgICAgICB9CiAgICAgICAgIHBhdHRlcm4uYXBwZW5kKCIpIik7
Ci0gICAgICAgIHJlc3VsdCA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvbihwYXR0ZXJuLCBmYWxzZSk7
CisgICAgICAgIHJlc3VsdCA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvbihwYXR0ZXJuLCBUZXh0Q2Fz
ZUluc2Vuc2l0aXZlKTsKICAgICB9CiAKICAgICAvLyBhZGQgcmVnZXhwIHRvIHRoZSBjYWNoZSwg
bWFraW5nIHN1cmUgaXQgaXMgYXQgdGhlIGZyb250IGZvciBMUlUgb3JkZXJpbmcKQEAgLTI0MSw3
ICsyNDEsNyBAQCBOU1N0cmluZyogRnJhbWU6Om1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBNYWtlIG51bWJlcnMgYW5kIF8ncyBpbiBmaWVsZCBu
YW1lcyBiZWhhdmUgbGlrZSB3b3JkIGJvdW5kYXJpZXMsIGUuZy4sICJhZGRyZXNzMiIKLSAgICBy
ZXBsYWNlKG5hbWUsIFJlZ3VsYXJFeHByZXNzaW9uKCJcXGQiKSwgIiAiKTsKKyAgICByZXBsYWNl
KG5hbWUsIFJlZ3VsYXJFeHByZXNzaW9uKCJcXGQiLCBUZXh0Q2FzZVNlbnNpdGl2ZSksICIgIik7
CiAgICAgbmFtZS5yZXBsYWNlKCdfJywgJyAnKTsKIAogICAgIFJlZ3VsYXJFeHByZXNzaW9uKiBy
ZWdFeHAgPSByZWdFeHBGb3JMYWJlbHMobGFiZWxzKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCBOU1N0
cmluZyogRnJhbWU6Om1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lCiAgICAgaW50IGJlc3RMZW5ndGgg
PSAtMTsKICAgICBpbnQgc3RhcnQgPSAwOwogICAgIGRvIHsKLSAgICAgICAgcG9zID0gcmVnRXhw
LT5zZWFyY2gobmFtZSwgc3RhcnQpOworICAgICAgICBwb3MgPSByZWdFeHAtPm1hdGNoKG5hbWUs
IHN0YXJ0KTsKICAgICAgICAgaWYgKHBvcyAhPSAtMSkgewogICAgICAgICAgICAgbGVuZ3RoID0g
cmVnRXhwLT5tYXRjaGVkTGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobGVuZ3RoID49IGJlc3RM
ZW5ndGgpIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVk
Rm9udERhdGEuY3BwCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2VnbWVudGVkRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSwxNiArNDUsMjcgQEAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIFNlZ21lbnRlZEZvbnREYXRhOgogICAgIHJldHVybiBtX3Jh
bmdlc1swXS5mb250RGF0YSgpOwogfQogCi1ib29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWlu
c0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Citi
b29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0
CiB7CiAgICAgVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jh
bmdlcy5lbmQoKTsKICAgICBmb3IgKFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KGl0LT5mcm9tKCkgPD0gY2hhcmFjdGVyc1swXSAmJiBpdC0+dG8oKSA+PSBjaGFyYWN0ZXJzWzBd
KQorICAgICAgICBpZiAoYyA+PSBpdC0+ZnJvbSgpICYmIGMgPD0gaXQtPnRvKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFNl
Z21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgVUNoYXIzMiBjOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyApIHsKKyAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVu
Z3RoLCBjKQorICAgICAgICBpZiAoIWNvbnRhaW5zQ2hhcmFjdGVyKGMpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBTZWdtZW50
ZWRGb250RGF0YTo6aXNDdXN0b21Gb250KCkgY29uc3QKIHsKICAgICAvLyBBbGwgc2VnbWVudGVk
IGZvbnRzIGFyZSBjdXN0b20gZm9udHMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NlZ21lbnRlZEZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TZWdtZW50ZWRGb250RGF0YS5oCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiAr
NTUsMTEgQEAgY2xhc3MgU2VnbWVudGVkRm9udERhdGEgOiBwdWJsaWMgRm9udERhdAogcHVibGlj
OgogICAgIHZpcnR1YWwgflNlZ21lbnRlZEZvbnREYXRhKCk7CiAKKyAgICB2b2lkIGFwcGVuZFJh
bmdlKGNvbnN0IEZvbnREYXRhUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2VzLmFwcGVuZChyYW5nZSk7
IH0KKyAgICB1bnNpZ25lZCBudW1SYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX3Jhbmdlcy5zaXpl
KCk7IH0KKyAgICBjb25zdCBGb250RGF0YVJhbmdlJiByYW5nZUF0KHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIG1fcmFuZ2VzW2ldOyB9CisKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgp
IGNvbnN0OwogCkBAIC02MiwxMSArNjcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
TG9hZGluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1NlZ21lbnRlZCgpIGNvbnN0Owog
Ci0gICAgdm9pZCBhcHBlbmRSYW5nZShjb25zdCBGb250RGF0YVJhbmdlJiByYW5nZSkgeyBtX3Jh
bmdlcy5hcHBlbmQocmFuZ2UpOyB9Ci0gICAgdW5zaWduZWQgbnVtUmFuZ2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYW5nZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgRm9udERhdGFSYW5nZSYgcmFuZ2VB
dCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX3Jhbmdlc1tpXTsgfQorICAgIGJvb2wgY29u
dGFpbnNDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CiAKLXByaXZhdGU6CiAgICAgVmVjdG9yPEZv
bnREYXRhUmFuZ2UsIDE+IG1fcmFuZ2VzOwogfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvRHJhZ0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0Ry
YWdJbWFnZU1hYy5tbQkocmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9E
cmFnSW1hZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwzMCArMjIsMjkgQEAKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KKwogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1w
b3J0ICJEcmFnSW1hZ2UuaCIKIAogI2ltcG9ydCAiQ2FjaGVkSW1hZ2UuaCIKICNpbXBvcnQgIklt
YWdlLmgiCiAjaW1wb3J0ICJLVVJMLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybVN0cmluZy5oIgogI2lt
cG9ydCAiUmVzb3VyY2VSZXNwb25zZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotCi1J
bnRTaXplIGRyYWdJbWFnZVNpemUoRHJhZ0ltYWdlUmVmIGltYWdlKQorSW50U2l6ZSBkcmFnSW1h
Z2VTaXplKFJldGFpblB0cjxOU0ltYWdlPiBpbWFnZSkKIHsKICAgICByZXR1cm4gKEludFNpemUp
W2ltYWdlLmdldCgpIHNpemVdOwogfQogCi12b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VS
ZWYgaW1hZ2UpCit2b2lkIGRlbGV0ZURyYWdJbWFnZShSZXRhaW5QdHI8TlNJbWFnZT4pCiB7Ci0g
ICAgLy9EcmFnSW1hZ2VSZWYgaXMgYSBSZXRhaW5QdHIsIHNvIHdlIGRvbid0IG5lZWQgdG8gZXhw
bGljaXRseSBkZWxldGUgaXQKKyAgICAvLyBTaW5jZSB0aGlzIGlzIGEgUmV0YWluUHRyLCB0aGVy
ZSdzIG5vdGhpbmcgYWRkaXRpb25hbCB3ZSBuZWVkIHRvIGRvIHRvCisgICAgLy8gZGVsZXRlIGl0
LiBJdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gaXQgZmFsbHMgb3V0IG9mIHNjb3BlLgogfQogCi1E
cmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUg
c2NhbGUpCitSZXRhaW5QdHI8TlNJbWFnZT4gc2NhbGVEcmFnSW1hZ2UoUmV0YWluUHRyPE5TSW1h
Z2U+IGltYWdlLCBGbG9hdFNpemUgc2NhbGUpCiB7CiAgICAgTlNTaXplIG9yaWdpbmFsU2l6ZSA9
IFtpbWFnZS5nZXQoKSBzaXplXTsKICAgICBOU1NpemUgbmV3U2l6ZSA9IE5TTWFrZVNpemUoKG9y
aWdpbmFsU2l6ZS53aWR0aCAqIHNjYWxlLndpZHRoKCkpLCAob3JpZ2luYWxTaXplLmhlaWdodCAq
IHNjYWxlLmhlaWdodCgpKSk7CkBAIC01Niw3ICs1NSw3IEBAIERyYWdJbWFnZVJlZiBzY2FsZURy
YWdJbWFnZShEcmFnSW1hZ2VSZWYKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAgICAgCi1EcmFnSW1h
Z2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxv
YXQgZGVsdGEpCitSZXRhaW5QdHI8TlNJbWFnZT4gZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9u
KFJldGFpblB0cjxOU0ltYWdlPiBpbWFnZSwgZmxvYXQgZGVsdGEpCiB7CiAgICAgUmV0YWluUHRy
PE5TSW1hZ2U+IGRpc3NvbHZlZEltYWdlKEFkb3B0TlMsIFtbTlNJbWFnZSBhbGxvY10gaW5pdFdp
dGhTaXplOltpbWFnZS5nZXQoKSBzaXplXV0pOwogICAgIApAQCAtNzYsMTQgKzc1LDE0IEBAIERy
YWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24KICAgICByZXR1cm4gaW1hZ2U7
CiB9CiAgICAgICAgIAotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFn
ZSogaW1hZ2UpCitSZXRhaW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKElt
YWdlKiBpbWFnZSkKIHsKLSAgICBEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlKEFkb3B0TlMsIFtpbWFn
ZS0+Z2V0TlNJbWFnZSgpIGNvcHldKTsKKyAgICBSZXRhaW5QdHI8TlNJbWFnZT4gZHJhZ0ltYWdl
KEFkb3B0TlMsIFtpbWFnZS0+Z2V0TlNJbWFnZSgpIGNvcHldKTsKICAgICBbZHJhZ0ltYWdlLmdl
dCgpIHNldFNpemU6KE5TU2l6ZSkoaW1hZ2UtPnNpemUoKSldOwogICAgIHJldHVybiBkcmFnSW1h
Z2U7CiB9CiAgICAgCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZElt
YWdlKENhY2hlZEltYWdlKiBpbWFnZSkKK1JldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1h
Z2VJY29uRm9yQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdlKQogewogICAgIGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUgPSBpbWFnZS0+cmVzcG9uc2UoKS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwog
ICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBuaWw7CkBAIC05MSwxMiArOTAsMTIgQEAgRHJhZ0lt
YWdlUmVmIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZQogICAgIAogICAgIGlmIChkb3RJbmRl
eCA+IDAgJiYgZG90SW5kZXggPCAoaW50KShmaWxlbmFtZS5sZW5ndGgoKSAtIDEpKSAvLyByZXF1
aXJlIHRoYXQgYSAuIGV4aXN0cyBhZnRlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBiZWZvcmUg
dGhlIGxhc3QKICAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGRvdEluZGV4
ICsgMSk7Ci0gICAgZWxzZQotICAgICAgICAvL0l0IG1pZ2h0IGJlIHdvcnRoIGRvaW5nIGEgZnVy
dGhlciBsb29rIHVwIHRvIHB1bGwgdGhlIGV4dGVuc2lvbiBmcm9tIHRoZSBtaW1ldHlwZQorICAg
IGVsc2UgeworICAgICAgICAvLyBJdCBtaWdodCBiZSB3b3J0aCBkb2luZyBhIGZ1cnRoZXIgbG9v
a3VwIHRvIHB1bGwgdGhlIGV4dGVuc2lvbiBmcm9tIHRoZSBNSU1FIHR5cGUuCiAgICAgICAgIGV4
dGVuc2lvbiA9IEAiIjsKKyAgICB9CiAgICAgCi0gICAgcmV0dXJuIERyYWdJbWFnZVJlZihbW05T
V29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gaWNvbkZvckZpbGVUeXBlOmV4dGVuc2lvbl0pOwot
ICAgICAKKyAgICByZXR1cm4gW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIGljb25Gb3JG
aWxlVHlwZTpleHRlbnNpb25dOwogfQogICAgIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViRm9udENhY2hlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkZvbnRDYWNoZS5tbQkocmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJGb250Q2FjaGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmljaG9sYXMgU2hhbmtz
IDx3ZWJraXRAbmlja3NoYW5rcy5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yOCw5ICsyOCw5
IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGb250VHJhaXRzTWFzay5o
IgogI2ltcG9ydCAiV2ViRm9udENhY2hlLmgiCiAKKyNpbXBvcnQgIkZvbnRUcmFpdHNNYXNrLmgi
CiAjaW1wb3J0IDxtYXRoLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNTEsNyAr
NTEsNyBAQCB0eXBlZGVmIGludCBOU0ludGVnZXI7CiAgICAgfCBOU1NtYWxsQ2Fwc0ZvbnRNYXNr
IFwKICkKIAotc3RhdGljIEJPT0wgYWNjZXB0YWJsZUNob2ljZShOU0ZvbnRUcmFpdE1hc2sgZGVz
aXJlZFRyYWl0cywgaW50IGRlc2lyZWRXZWlnaHQsIE5TRm9udFRyYWl0TWFzayBjYW5kaWRhdGVU
cmFpdHMsIGludCBjYW5kaWRhdGVXZWlnaHQpCitzdGF0aWMgQk9PTCBhY2NlcHRhYmxlQ2hvaWNl
KE5TRm9udFRyYWl0TWFzayBkZXNpcmVkVHJhaXRzLCBOU0ZvbnRUcmFpdE1hc2sgY2FuZGlkYXRl
VHJhaXRzKQogewogICAgIGRlc2lyZWRUcmFpdHMgJj0gflNZTlRIRVNJWkVEX0ZPTlRfVFJBSVRT
OwogICAgIHJldHVybiAoY2FuZGlkYXRlVHJhaXRzICYgZGVzaXJlZFRyYWl0cykgPT0gZGVzaXJl
ZFRyYWl0czsKQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIEJPT0wgYmV0dGVyQ2hvaWNlKE5TRm9u
dFRyYWl0TWFzawogICAgIE5TRm9udFRyYWl0TWFzayBjaG9zZW5UcmFpdHMsIGludCBjaG9zZW5X
ZWlnaHQsCiAgICAgTlNGb250VHJhaXRNYXNrIGNhbmRpZGF0ZVRyYWl0cywgaW50IGNhbmRpZGF0
ZVdlaWdodCkKIHsKLSAgICBpZiAoIWFjY2VwdGFibGVDaG9pY2UoZGVzaXJlZFRyYWl0cywgZGVz
aXJlZFdlaWdodCwgY2FuZGlkYXRlVHJhaXRzLCBjYW5kaWRhdGVXZWlnaHQpKQorICAgIGlmICgh
YWNjZXB0YWJsZUNob2ljZShkZXNpcmVkVHJhaXRzLCBjYW5kaWRhdGVUcmFpdHMpKQogICAgICAg
ICByZXR1cm4gTk87CiAKICAgICAvLyBBIGxpc3Qgb2YgdGhlIHRyYWl0cyB3ZSBjYXJlIGFib3V0
LgpAQCAtMjMwLDcgKzIzMCw3IEBAIHN0YXRpYyBpbmxpbmUgRm9udFRyYWl0c01hc2sgdG9UcmFp
dHNNYXMKIAogICAgICAgICBCT09MIG5ld1dpbm5lcjsKICAgICAgICAgaWYgKCFjaG9zZUZvbnQp
Ci0gICAgICAgICAgICBuZXdXaW5uZXIgPSBhY2NlcHRhYmxlQ2hvaWNlKGRlc2lyZWRUcmFpdHMs
IGRlc2lyZWRXZWlnaHQsIGZvbnRUcmFpdHMsIGZvbnRXZWlnaHQpOworICAgICAgICAgICAgbmV3
V2lubmVyID0gYWNjZXB0YWJsZUNob2ljZShkZXNpcmVkVHJhaXRzLCBmb250VHJhaXRzKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbmV3V2lubmVyID0gYmV0dGVyQ2hvaWNlKGRlc2lyZWRU
cmFpdHMsIGRlc2lyZWRXZWlnaHQsIGNob3NlblRyYWl0cywgY2hvc2VuV2VpZ2h0LCBmb250VHJh
aXRzLCBmb250V2VpZ2h0KTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lz
dGVtUE9TSVguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcAkocmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Bvc2l4
L0ZpbGVTeXN0ZW1QT1NJWC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxMSArMTU4LDEwIEBA
IFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gZGly
bmFtZShmc1JlcC5tdXRhYmxlRGF0YSgpKTsKIH0KIAotVmVjdG9yPFN0cmluZz4gbGlzdERpcmVj
dG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQotewotICAgIFZl
Y3RvcjxTdHJpbmc+IGVudHJpZXM7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZW50cmllczsKLX0KKy8vIE9LIHRvIG5vdCBpbXBsZW1lbnQgbGlzdERpcmVjdG9yeSBhdCB0aGUg
bW9tZW50LCBiZWNhdXNlIGl0J3Mgb25seSB1c2VkIGZvciBwbHVnLWlucywgYW5kCisvLyBhbGwg
cGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBzaGFyZWQgcGx1Zy1pbiBpbXBsZW1lbnRhdGlvbiBoYXZl
IGltcGxlbWVudGF0aW9ucy4gV2UnZCBuZWVkCisvLyB0byBpbXBsZW1lbnQgaXQgaWYgd2Ugd2Fu
dGVkIHRvIHVzZSBQbHVnaW5EYXRhYmFzZS5jcHAgb24gdGhlIE1hYy4gQmV0dGVyIHRvIG5vdCBp
bXBsZW1lbnQKKy8vIGF0IGFsbCBhbmQgZ2V0IGEgbGluayBlcnJvciBpbiBjYXNlIHRoaXMgYXJp
c2VzLCByYXRoZXIgdGhhbiBoYXZpbmcgYSBzdHViIGhlcmUsIGJlY2F1c2UKKy8vIHdpdGggYSBz
dHViIHlvdSBsZWFybiBhYm91dCB0aGUgcHJvYmxlbSBhdCBydW50aW1lIGluc3RlYWQgb2YgbGlu
ayB0aW1lLgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvUmVndWxhckV4cHJlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9SZWd1bGFyRXhwcmVzc2lvbi5jcHAJKHJldmlzaW9uIDM5ODEyKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1JlZ3VsYXJFeHByZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEgTHRkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsODUgKzI3LDU4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKIAotI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8cGNyZS9wY3JlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY29uc3Qgc2l6ZV90IG1heFN1YnN0cmluZ3MgPSAxMDsKLWNvbnN0IHNpemVfdCBtYXhP
ZmZzZXRzID0gMyAqIG1heFN1YnN0cmluZ3M7Ci0KIGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uOjpQ
cml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8UHJpdmF0ZT4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFByaXZhdGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcml2
YXRlKTsgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByaXZhdGU+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIHBhdHRlcm4sIGJvb2wgY2FzZVNlbnNpdGl2ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBy
aXZhdGUocGF0dGVybiwgY2FzZVNlbnNpdGl2ZSkpOyB9Ci0KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQcml2YXRlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBUZXh0Q2FzZVNlbnNpdGl2
aXR5KTsKICAgICB+UHJpdmF0ZSgpOwogCi0gICAgdm9pZCBjb21waWxlKGJvb2wgY2FzZVNlbnNp
dGl2ZSk7CisgICAgSlNSZWdFeHAqIHJlZ2V4cCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnZXhwOyB9
CisgICAgaW50IGxhc3RNYXRjaExlbmd0aDsgICAgCiAKLSAgICBTdHJpbmcgcGF0dGVybjsKLSAg
ICBKU1JlZ0V4cCogcmVnZXg7Ci0KLSAgICBTdHJpbmcgbGFzdE1hdGNoU3RyaW5nOwotICAgIGlu
dCBsYXN0TWF0Y2hPZmZzZXRzW21heE9mZnNldHNdOwotICAgIGludCBsYXN0TWF0Y2hDb3VudDsK
LSAgICBpbnQgbGFzdE1hdGNoUG9zOwotICAgIGludCBsYXN0TWF0Y2hMZW5ndGg7Ci0gICAgCiBw
cml2YXRlOgotICAgIFByaXZhdGUoKTsKLSAgICBQcml2YXRlKGNvbnN0IFN0cmluZyYgcGF0dGVy
biwgYm9vbCBjYXNlU2Vuc2l0aXZlKTsKLX07Ci0KLVJlZ3VsYXJFeHByZXNzaW9uOjpQcml2YXRl
OjpQcml2YXRlKCkKLSAgICA6IHBhdHRlcm4oIiIpCi17Ci0gICAgY29tcGlsZSh0cnVlKTsKLX0K
KyAgICBQcml2YXRlKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgVGV4dENhc2VTZW5zaXRpdml0eSk7
CisgICAgc3RhdGljIEpTUmVnRXhwKiBjb21waWxlKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgVGV4
dENhc2VTZW5zaXRpdml0eSk7CiAKLVJlZ3VsYXJFeHByZXNzaW9uOjpQcml2YXRlOjpQcml2YXRl
KGNvbnN0IFN0cmluZyYgcCwgYm9vbCBjYXNlU2Vuc2l0aXZlKQotICAgIDogcGF0dGVybihwKQot
ICAgICwgbGFzdE1hdGNoUG9zKC0xKQotICAgICwgbGFzdE1hdGNoTGVuZ3RoKC0xKQotewotICAg
IGNvbXBpbGUoY2FzZVNlbnNpdGl2ZSk7Ci19CisgICAgSlNSZWdFeHAqIG1fcmVnZXhwOworfTsK
IAotdm9pZCBSZWd1bGFyRXhwcmVzc2lvbjo6UHJpdmF0ZTo6Y29tcGlsZShib29sIGNhc2VTZW5z
aXRpdmUpCitpbmxpbmUgSlNSZWdFeHAqIFJlZ3VsYXJFeHByZXNzaW9uOjpQcml2YXRlOjpjb21w
aWxlKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgVGV4dENhc2VTZW5zaXRpdml0eSBjYXNlU2Vuc2l0
aXZpdHkpCiB7CiAgICAgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlOwotICAgIHJlZ2V4ID0ganNS
ZWdFeHBDb21waWxlKHBhdHRlcm4uY2hhcmFjdGVycygpLCBwYXR0ZXJuLmxlbmd0aCgpLAotICAg
ICAgICBjYXNlU2Vuc2l0aXZlID8gSlNSZWdFeHBEb05vdElnbm9yZUNhc2UgOiBKU1JlZ0V4cEln
bm9yZUNhc2UsIEpTUmVnRXhwU2luZ2xlTGluZSwKKyAgICBKU1JlZ0V4cCogcmVnZXhwID0ganNS
ZWdFeHBDb21waWxlKHBhdHRlcm4uY2hhcmFjdGVycygpLCBwYXR0ZXJuLmxlbmd0aCgpLAorICAg
ICAgICBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VTZW5zaXRpdmUgPyBKU1JlZ0V4cERvTm90
SWdub3JlQ2FzZSA6IEpTUmVnRXhwSWdub3JlQ2FzZSwgSlNSZWdFeHBTaW5nbGVMaW5lLAogICAg
ICAgICAwLCAmZXJyb3JNZXNzYWdlKTsKLSAgICBpZiAoIXJlZ2V4KQorICAgIGlmICghcmVnZXhw
KQogICAgICAgICBMT0dfRVJST1IoIlJlZ3VsYXJFeHByZXNzaW9uOiBwY3JlX2NvbXBpbGUgZmFp
bGVkIHdpdGggJyVzJyIsIGVycm9yTWVzc2FnZSk7CisgICAgcmV0dXJuIHJlZ2V4cDsKIH0KIAot
UmVndWxhckV4cHJlc3Npb246OlByaXZhdGU6On5Qcml2YXRlKCkKK2lubGluZSBSZWd1bGFyRXhw
cmVzc2lvbjo6UHJpdmF0ZTo6UHJpdmF0ZShjb25zdCBTdHJpbmcmIHBhdHRlcm4sIFRleHRDYXNl
U2Vuc2l0aXZpdHkgY2FzZVNlbnNpdGl2aXR5KQorICAgIDogbGFzdE1hdGNoTGVuZ3RoKC0xKQor
ICAgICwgbV9yZWdleHAoY29tcGlsZShwYXR0ZXJuLCBjYXNlU2Vuc2l0aXZpdHkpKQogewotICAg
IGpzUmVnRXhwRnJlZShyZWdleCk7CiB9CiAKLQotUmVndWxhckV4cHJlc3Npb246OlJlZ3VsYXJF
eHByZXNzaW9uKCkKLSAgICA6IGQoUHJpdmF0ZTo6Y3JlYXRlKCkpCitpbmxpbmUgUGFzc1JlZlB0
cjxSZWd1bGFyRXhwcmVzc2lvbjo6UHJpdmF0ZT4gUmVndWxhckV4cHJlc3Npb246OlByaXZhdGU6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdHRlcm4sIFRleHRDYXNlU2Vuc2l0aXZpdHkgY2FzZVNl
bnNpdGl2aXR5KQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJpdmF0ZShwYXR0ZXJuLCBj
YXNlU2Vuc2l0aXZpdHkpKTsKIH0KIAotUmVndWxhckV4cHJlc3Npb246OlJlZ3VsYXJFeHByZXNz
aW9uKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgYm9vbCBjYXNlU2Vuc2l0aXZlKQotICAgIDogZChQ
cml2YXRlOjpjcmVhdGUocGF0dGVybiwgY2FzZVNlbnNpdGl2ZSkpCitSZWd1bGFyRXhwcmVzc2lv
bjo6UHJpdmF0ZTo6flByaXZhdGUoKQogeworICAgIGpzUmVnRXhwRnJlZShtX3JlZ2V4cCk7CiB9
CiAKLVJlZ3VsYXJFeHByZXNzaW9uOjpSZWd1bGFyRXhwcmVzc2lvbihjb25zdCBjaGFyKiBwYXR0
ZXJuKQotICAgIDogZChQcml2YXRlOjpjcmVhdGUocGF0dGVybiwgdHJ1ZSkpCitSZWd1bGFyRXhw
cmVzc2lvbjo6UmVndWxhckV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBUZXh0Q2Fz
ZVNlbnNpdGl2aXR5IGNhc2VTZW5zaXRpdml0eSkKKyAgICA6IGQoUHJpdmF0ZTo6Y3JlYXRlKHBh
dHRlcm4sIGNhc2VTZW5zaXRpdml0eSkpCiB7CiB9CiAKLQogUmVndWxhckV4cHJlc3Npb246OlJl
Z3VsYXJFeHByZXNzaW9uKGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJiByZSkKICAgICA6IGQocmUu
ZCkKIHsKQEAgLTExNyw1MiArOTAsNDEgQEAgUmVndWxhckV4cHJlc3Npb246On5SZWd1bGFyRXhw
cmVzc2lvbigpCiAKIFJlZ3VsYXJFeHByZXNzaW9uJiBSZWd1bGFyRXhwcmVzc2lvbjo6b3BlcmF0
b3I9KGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJiByZSkKIHsKLSAgICBSZWd1bGFyRXhwcmVzc2lv
biB0bXAocmUpOwotICAgIHRtcC5kLnN3YXAoZCk7CisgICAgZCA9IHJlLmQ7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCi1TdHJpbmcgUmVndWxhckV4cHJlc3Npb246OnBhdHRlcm4oKSBjb25zdAot
ewotICAgIHJldHVybiBkLT5wYXR0ZXJuOwotfQotCiBpbnQgUmVndWxhckV4cHJlc3Npb246Om1h
dGNoKGNvbnN0IFN0cmluZyYgc3RyLCBpbnQgc3RhcnRGcm9tLCBpbnQqIG1hdGNoTGVuZ3RoKSBj
b25zdAogeworICAgIGlmICghZC0+cmVnZXhwKCkpCisgICAgICAgIHJldHVybiAtMTsKKwogICAg
IGlmIChzdHIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGQtPmxhc3RNYXRj
aFN0cmluZyA9IHN0cjsKICAgICAvLyBGaXJzdCAyIG9mZnNldHMgYXJlIHN0YXJ0IGFuZCBlbmQg
b2Zmc2V0czsgM3JkIGVudHJ5IGlzIHVzZWQgaW50ZXJuYWxseSBieSBwY3JlCi0gICAgZC0+bGFz
dE1hdGNoQ291bnQgPSBqc1JlZ0V4cEV4ZWN1dGUoZC0+cmVnZXgsIGQtPmxhc3RNYXRjaFN0cmlu
Zy5jaGFyYWN0ZXJzKCksCi0gICAgICAgIGQtPmxhc3RNYXRjaFN0cmluZy5sZW5ndGgoKSwgc3Rh
cnRGcm9tLCBkLT5sYXN0TWF0Y2hPZmZzZXRzLCBtYXhPZmZzZXRzKTsKLSAgICBpZiAoZC0+bGFz
dE1hdGNoQ291bnQgPCAwKSB7Ci0gICAgICAgIGlmIChkLT5sYXN0TWF0Y2hDb3VudCAhPSBKU1Jl
Z0V4cEVycm9yTm9NYXRjaCkKLSAgICAgICAgICAgIExPR19FUlJPUigiUmVndWxhckV4cHJlc3Np
b246IHBjcmVfZXhlYygpIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsIGQtPmxhc3RNYXRjaENvdW50
KTsKLSAgICAgICAgZC0+bGFzdE1hdGNoUG9zID0gLTE7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBtYXhPZmZzZXRzID0gMzsKKyAgICBpbnQgb2Zmc2V0c1ttYXhPZmZzZXRzXTsKKyAgICBpbnQg
cmVzdWx0ID0ganNSZWdFeHBFeGVjdXRlKGQtPnJlZ2V4cCgpLCBzdHIuY2hhcmFjdGVycygpLCBz
dHIubGVuZ3RoKCksIHN0YXJ0RnJvbSwgb2Zmc2V0cywgbWF4T2Zmc2V0cyk7CisgICAgaWYgKHJl
c3VsdCA8IDApIHsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBKU1JlZ0V4cEVycm9yTm9NYXRjaCkK
KyAgICAgICAgICAgIExPR19FUlJPUigiUmVndWxhckV4cHJlc3Npb246IHBjcmVfZXhlYygpIGZh
aWxlZCB3aXRoIHJlc3VsdCAlZCIsIHJlc3VsdCk7CiAgICAgICAgIGQtPmxhc3RNYXRjaExlbmd0
aCA9IC0xOwotICAgICAgICBkLT5sYXN0TWF0Y2hTdHJpbmcgPSBTdHJpbmcoKTsKICAgICAgICAg
cmV0dXJuIC0xOwogICAgIH0KLSAgICAKKwogICAgIC8vIDEgbWVhbnMgMSBtYXRjaDsgMCBtZWFu
cyBtb3JlIHRoYW4gb25lIG1hdGNoLiBGaXJzdCBtYXRjaCBpcyByZWNvcmRlZCBpbiBvZmZzZXRz
LgotICAgIGQtPmxhc3RNYXRjaFBvcyA9IGQtPmxhc3RNYXRjaE9mZnNldHNbMF07Ci0gICAgZC0+
bGFzdE1hdGNoTGVuZ3RoID0gZC0+bGFzdE1hdGNoT2Zmc2V0c1sxXSAtIGQtPmxhc3RNYXRjaE9m
ZnNldHNbMF07CisgICAgZC0+bGFzdE1hdGNoTGVuZ3RoID0gb2Zmc2V0c1sxXSAtIG9mZnNldHNb
MF07CiAgICAgaWYgKG1hdGNoTGVuZ3RoKQogICAgICAgICAqbWF0Y2hMZW5ndGggPSBkLT5sYXN0
TWF0Y2hMZW5ndGg7Ci0gICAgcmV0dXJuIGQtPmxhc3RNYXRjaFBvczsKLX0KLQotaW50IFJlZ3Vs
YXJFeHByZXNzaW9uOjpzZWFyY2goY29uc3QgU3RyaW5nJiBzdHIsIGludCBzdGFydEZyb20pIGNv
bnN0Ci17Ci0gICAgaWYgKHN0YXJ0RnJvbSA8IDApCi0gICAgICAgIHN0YXJ0RnJvbSA9IHN0ci5s
ZW5ndGgoKSAtIHN0YXJ0RnJvbTsKLSAgICByZXR1cm4gbWF0Y2goc3RyLCBzdGFydEZyb20sIDAp
OworICAgIHJldHVybiBvZmZzZXRzWzBdOwogfQogCiBpbnQgUmVndWxhckV4cHJlc3Npb246OnNl
YXJjaFJldihjb25zdCBTdHJpbmcmIHN0cikgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogVG90YWwg
aGFjayBmb3Igbm93LiBTZWFyY2ggZm9yd2FyZCwgcmV0dXJuIHRoZSBsYXN0LCBncmVlZHkgbWF0
Y2gKKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBmYXN0ZXIgaWYgaXQgYWN0dWFsbHkgc2Vh
cmNoZWQgYmFja3dhcmRzLgorICAgIC8vIEluc3RlYWQsIGl0IGp1c3Qgc2VhcmNoZXMgZm9yd2Fy
ZHMsIG11bHRpcGxlIHRpbWVzIHVudGlsIGl0IGZpbmRzIHRoZSBsYXN0IG1hdGNoLgorCiAgICAg
aW50IHN0YXJ0ID0gMDsKICAgICBpbnQgcG9zOwogICAgIGludCBsYXN0UG9zID0gLTE7CkBAIC0x
NzksMTcgKzE0MSwxMCBAQCBpbnQgUmVndWxhckV4cHJlc3Npb246OnNlYXJjaFJldihjb25zdCBT
CiAgICAgICAgICAgICBzdGFydCA9IHBvcyArIDE7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChw
b3MgIT0gLTEpOwotICAgIGQtPmxhc3RNYXRjaFBvcyA9IGxhc3RQb3M7CiAgICAgZC0+bGFzdE1h
dGNoTGVuZ3RoID0gbGFzdE1hdGNoTGVuZ3RoOwogICAgIHJldHVybiBsYXN0UG9zOwogfQogCi1p
bnQgUmVndWxhckV4cHJlc3Npb246OnBvcyhpbnQgbikKLXsKLSAgICBBU1NFUlQobiA9PSAwKTsK
LSAgICByZXR1cm4gZC0+bGFzdE1hdGNoUG9zOwotfQotCiBpbnQgUmVndWxhckV4cHJlc3Npb246
Om1hdGNoZWRMZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBkLT5sYXN0TWF0Y2hMZW5ndGg7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUmVndWxhckV4cHJlc3Npb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUmVndWxhckV4cHJlc3Npb24uaAkocmV2aXNp
b24gMzk4MTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUmVndWxhckV4cHJlc3Npb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjkgKzI2LDIxIEBACiAjaWZuZGVmIFJlZ3Vs
YXJFeHByZXNzaW9uX2gKICNkZWZpbmUgUmVndWxhckV4cHJlc3Npb25faAogCi0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgU3RyaW5nOwotCiBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvbiB7CiBw
dWJsaWM6Ci0gICAgUmVndWxhckV4cHJlc3Npb24oKTsKLSAgICBSZWd1bGFyRXhwcmVzc2lvbihj
b25zdCBTdHJpbmcmLCBib29sIGNhc2VTZW5zaXRpdmUgPSBmYWxzZSk7Ci0gICAgUmVndWxhckV4
cHJlc3Npb24oY29uc3QgY2hhciopOworICAgIFJlZ3VsYXJFeHByZXNzaW9uKGNvbnN0IFN0cmlu
ZyYsIFRleHRDYXNlU2Vuc2l0aXZpdHkpOwogICAgIH5SZWd1bGFyRXhwcmVzc2lvbigpOwogCiAg
ICAgUmVndWxhckV4cHJlc3Npb24oY29uc3QgUmVndWxhckV4cHJlc3Npb24mKTsKICAgICBSZWd1
bGFyRXhwcmVzc2lvbiYgb3BlcmF0b3I9KGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJik7CiAKLSAg
ICBTdHJpbmcgcGF0dGVybigpIGNvbnN0OwogICAgIGludCBtYXRjaChjb25zdCBTdHJpbmcmLCBp
bnQgc3RhcnRGcm9tID0gMCwgaW50KiBtYXRjaExlbmd0aCA9IDApIGNvbnN0OwotCi0gICAgaW50
IHNlYXJjaChjb25zdCBTdHJpbmcmLCBpbnQgc3RhcnRGcm9tID0gMCkgY29uc3Q7CiAgICAgaW50
IHNlYXJjaFJldihjb25zdCBTdHJpbmcmKSBjb25zdDsKIAotICAgIGludCBwb3MoaW50IG4gPSAw
KTsKICAgICBpbnQgbWF0Y2hlZExlbmd0aCgpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDggQEAg
c3RydWN0IEhhc2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKIHN0cnVjdCBTdHJpbmdIYXNoOwog
c3RydWN0IFVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKIAorZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5
IHsgVGV4dENhc2VTZW5zaXRpdmUsIFRleHRDYXNlSW5zZW5zaXRpdmUgfTsKKwogdHlwZWRlZiBi
b29sICgqQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0cikoVUNoYXIpOwogCiBjbGFzcyBTdHJpbmdJ
bXBsIDogcHVibGljIFJlZkNvdW50ZWQ8U3RyaW5nSW1wbD4gewpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L21hYy9TaGFwZUFyYWJpYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvU2hhcGVBcmFiaWMuYwkocmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvbWFjL1NoYXBlQXJhYmljLmMJKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw4ICsz
NDcsNyBAQCBpc1Rhc2hrZWVsQ2hhcihVQ2hhciBjaCkgewogICovCiBzdGF0aWMgaW50MzJfdAog
c2hhcGVVbmljb2RlKFVDaGFyICpkZXN0LCBpbnQzMl90IHNvdXJjZUxlbmd0aCwKLSAgICAgICAg
ICAgICBpbnQzMl90IGRlc3RTaXplLHVpbnQzMl90IG9wdGlvbnMsCi0gICAgICAgICAgICAgVUVy
cm9yQ29kZSAqcEVycm9yQ29kZSwKKyAgICAgICAgICAgICBpbnQzMl90IGRlc3RTaXplLAogICAg
ICAgICAgICAgIGludCB0YXNoa2VlbEZsYWcpIHsKIAogICAgIGludDMyX3QgICAgICAgICAgaSwg
aWVuZDsKQEAgLTUyOCwxMSArNTI3LDExIEBAIGludDMyX3Qgc2hhcGVBcmFiaWMoY29uc3QgVUNo
YXIgKnNvdXJjZSwKICAgICAgICAgc3dpdGNoKG9wdGlvbnMmVV9TSEFQRV9MRVRURVJTX01BU0sp
IHsKICAgICAgICAgY2FzZSBVX1NIQVBFX0xFVFRFUlNfU0hBUEUgOgogICAgICAgICAgICAgLyog
Q2FsbCB0aGUgc2hhcGluZyBmdW5jdGlvbiB3aXRoIHRhc2hrZWVsIGZsYWcgPT0gMSAqLwotICAg
ICAgICAgICAgZGVzdExlbmd0aCA9IHNoYXBlVW5pY29kZShkZXN0LHNvdXJjZUxlbmd0aCxkZXN0
Q2FwYWNpdHksb3B0aW9ucyxwRXJyb3JDb2RlLDEpOworICAgICAgICAgICAgZGVzdExlbmd0aCA9
IHNoYXBlVW5pY29kZShkZXN0LHNvdXJjZUxlbmd0aCxkZXN0Q2FwYWNpdHksMSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBVX1NIQVBFX0xFVFRFUlNfU0hBUEVfVEFTSEtFRUxf
SVNPTEFURUQgOgogICAgICAgICAgICAgLyogQ2FsbCB0aGUgc2hhcGluZyBmdW5jdGlvbiB3aXRo
IHRhc2hrZWVsIGZsYWcgPT0gMCAqLwotICAgICAgICAgICAgZGVzdExlbmd0aCA9IHNoYXBlVW5p
Y29kZShkZXN0LHNvdXJjZUxlbmd0aCxkZXN0Q2FwYWNpdHksb3B0aW9ucyxwRXJyb3JDb2RlLDAp
OworICAgICAgICAgICAgZGVzdExlbmd0aCA9IHNoYXBlVW5pY29kZShkZXN0LHNvdXJjZUxlbmd0
aCxkZXN0Q2FwYWNpdHksMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVX1NI
QVBFX0xFVFRFUlNfVU5TSEFQRSA6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxNSArNjcs
OSBAQCBwcml2YXRlOgogfTsKIAogLy8gUmVuZGVyUGF0aAotUmVuZGVyUGF0aDo6UmVuZGVyUGF0
aChSZW5kZXJTdHlsZSogc3R5bGUsIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2Rl
KQorUmVuZGVyUGF0aDo6UmVuZGVyUGF0aChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCog
bm9kZSkKICAgICA6IFJlbmRlck9iamVjdChub2RlKQogewotICAgIEFTU0VSVChzdHlsZSAhPSAw
KTsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5pc1N0eWxlZFRy
YW5zZm9ybWFibGUoKSk7Ci19Ci0KLVJlbmRlclBhdGg6On5SZW5kZXJQYXRoKCkKLXsKIH0KIAog
VHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyUGF0aDo6bG9jYWxUcmFuc2Zvcm0oKSBjb25zdApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclBhdGguaAkocmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1ICszNSwxMiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgUGF0aDsKIGNs
YXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKIGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OwogCi1jbGFzcyBSZW5kZXJQYXRoIDogcHVibGljIFJlbmRlck9iamVjdAoteworY2xhc3Mg
UmVuZGVyUGF0aCA6IHB1YmxpYyBSZW5kZXJPYmplY3QgewogcHVibGljOgotICAgIFJlbmRlclBh
dGgoUmVuZGVyU3R5bGUqLCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOwotICAgIHZp
cnR1YWwgflJlbmRlclBhdGgoKTsKKyAgICBSZW5kZXJQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50Kik7CiAKICAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZp
bGwgYW5kIHRoZSBzdHJva2UKICAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjks
OSArMTI5LDEwIEBAIElubGluZVRleHRCb3gqIFJlbmRlclNWR0lubGluZVRleHQ6OmNyZWEKICAg
ICByZXR1cm4gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdJbmxpbmVUZXh0Qm94KHRoaXMpOwogfQog
Ci1JbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCog
aW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQor
SW50UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBp
bnQsIGludCopCiB7Ci0gICAgLy8gU1ZHIGRvZXNuJ3QgaGF2ZSBhbnkgZWRpdGFibGUgY29udGVu
dCB3aGVyZSBhIGNhcmV0IHJlY3Qgd291bGQgYmUgbmVlZGVkCisgICAgLy8gU1ZHIGRvZXNuJ3Qg
aGF2ZSBhbnkgZWRpdGFibGUgY29udGVudCB3aGVyZSBhIGNhcmV0IHJlY3Qgd291bGQgYmUgbmVl
ZGVkLgorICAgIC8vIEZJWE1FOiBUaGF0J3Mgbm90IHN1ZmZpY2llbnQuIFRoZSBsb2NhbENhcmV0
UmVjdCBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgZm9yIHNlbGVjdGlvbi4KICAgICByZXR1cm4gSW50
UmVjdCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAko
cmV2aXNpb24gMzk4MTIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgdm9pZCB3cml0ZUluZGVu
dChUZXh0U3RyZWFtJiB0cywgCiAgICAgICAgIHRzIDw8ICIgICI7CiB9CiAKLXN0YXRpYyB2b2lk
IHByaW50Qm9yZGVyU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlKQorc3RhdGljIHZvaWQgcHJpbnRCb3JkZXJT
dHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlKQogewog
ICAgIHN3aXRjaCAoYm9yZGVyU3R5bGUpIHsKICAgICAgICAgY2FzZSBCTk9ORToKQEAgLTIxNiw3
ICsyMTYsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtCiAgICAg
ICAgICAgICAgICAgICAgIHRzIDw8ICIgbm9uZSI7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRzIDw8ICIgKCIgPDwgby5ib3JkZXJUb3AoKSA8PCAicHggIjsK
LSAgICAgICAgICAgICAgICAgICAgcHJpbnRCb3JkZXJTdHlsZSh0cywgbywgby5zdHlsZSgpLT5i
b3JkZXJUb3BTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRCb3JkZXJTdHlsZSh0
cywgby5zdHlsZSgpLT5ib3JkZXJUb3BTdHlsZSgpKTsKICAgICAgICAgICAgICAgICAgICAgQ29s
b3IgY29sID0gby5zdHlsZSgpLT5ib3JkZXJUb3BDb2xvcigpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNvbC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0
eWxlKCktPmNvbG9yKCk7CkBAIC0yMzAsNyArMjMwLDcgQEAgc3RhdGljIFRleHRTdHJlYW0gJm9w
ZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgICAgICAgICAgICAgICAgICB0cyA8PCAiIG5vbmUiOwog
ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICB0cyA8PCAiICgiIDw8
IG8uYm9yZGVyUmlnaHQoKSA8PCAicHggIjsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRCb3Jk
ZXJTdHlsZSh0cywgbywgby5zdHlsZSgpLT5ib3JkZXJSaWdodFN0eWxlKCkpOworICAgICAgICAg
ICAgICAgICAgICBwcmludEJvcmRlclN0eWxlKHRzLCBvLnN0eWxlKCktPmJvcmRlclJpZ2h0U3R5
bGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIENvbG9yIGNvbCA9IG8uc3R5bGUoKS0+Ym9yZGVy
UmlnaHRDb2xvcigpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCktPmNvbG9yKCk7CkBAIC0yNDQs
NyArMjQ0LDcgQEAgc3RhdGljIFRleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAg
ICAgICAgICAgICAgICAgICB0cyA8PCAiIG5vbmUiOwogICAgICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICB0cyA8PCAiICgiIDw8IG8uYm9yZGVyQm90dG9tKCkgPDwgInB4
ICI7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMsIG8sIG8uc3R5bGUo
KS0+Ym9yZGVyQm90dG9tU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHByaW50Qm9yZGVy
U3R5bGUodHMsIG8uc3R5bGUoKS0+Ym9yZGVyQm90dG9tU3R5bGUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIENvbG9yIGNvbCA9IG8uc3R5bGUoKS0+Ym9yZGVyQm90dG9tQ29sb3IoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjb2wuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29sID0gby5zdHlsZSgpLT5jb2xvcigpOwpAQCAtMjU4LDcgKzI1OCw3IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICAgICAgICAgICAgICAgICAgdHMg
PDwgIiBub25lIjsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
dHMgPDwgIiAoIiA8PCBvLmJvcmRlckxlZnQoKSA8PCAicHggIjsKLSAgICAgICAgICAgICAgICAg
ICAgcHJpbnRCb3JkZXJTdHlsZSh0cywgbywgby5zdHlsZSgpLT5ib3JkZXJMZWZ0U3R5bGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMsIG8uc3R5bGUoKS0+Ym9y
ZGVyTGVmdFN0eWxlKCkpOwogICAgICAgICAgICAgICAgICAgICBDb2xvciBjb2wgPSBvLnN0eWxl
KCktPmJvcmRlckxlZnRDb2xvcigpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCktPmNvbG9yKCk7
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAJKHJldmlzaW9uIDM5ODEyKQorKysg
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NiArMjUsNyBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogCkBAIC0zNSw3ICsz
Niw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNl
VGhyZWFkKERvY3VtZW50KiBkb2N1bWVudCkKK0RhdGFiYXNlVGhyZWFkOjpEYXRhYmFzZVRocmVh
ZCgpCiAgICAgOiBtX3RocmVhZElEKDApCiB7CiAgICAgbV9zZWxmUmVmID0gdGhpczsKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVRocmVhZC5oCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIsOSBAQCBj
bGFzcyBEYXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlVGFzazsKIGNsYXNzIERvY3VtZW50OwogCi1j
bGFzcyBEYXRhYmFzZVRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlVGhy
ZWFkPgoteworY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxE
YXRhYmFzZVRocmVhZD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNl
VGhyZWFkPiBjcmVhdGUoRG9jdW1lbnQqIGRvYykgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFi
YXNlVGhyZWFkKGRvYykpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZVRocmVhZCk7IH0KICAgICB+
RGF0YWJhc2VUaHJlYWQoKTsKIAogICAgIGJvb2wgc3RhcnQoKTsKQEAgLTU3LDcgKzU2LDcgQEAg
cHVibGljOgogICAgIHZvaWQgdW5zY2hlZHVsZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqKTsKIAog
cHJpdmF0ZToKLSAgICBEYXRhYmFzZVRocmVhZChEb2N1bWVudCopOworICAgIERhdGFiYXNlVGhy
ZWFkKCk7CiAKICAgICBzdGF0aWMgdm9pZCogZGF0YWJhc2VUaHJlYWRTdGFydCh2b2lkKik7CiAg
ICAgdm9pZCogZGF0YWJhc2VUaHJlYWQoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3Bw
CShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIExvY2FsU3RvcmFnZTo6fkxvY2FsU3RvcmFn
ZSgpCiAgICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0aCk7CiB9CiAKLVBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6c3RvcmFnZUFyZWEoRnJhbWUqIHNvdXJjZUZy
YW1lLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9j
YWxTdG9yYWdlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgJKHJldmlz
aW9uIDM5ODEyKQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBh
dGgpOwogCi0gICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKEZyYW1l
KiBzb3VyY2VGcmFtZSwgU2VjdXJpdHlPcmlnaW4qKTsKKyAgICAgICAgUGFzc1JlZlB0cjxTdG9y
YWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKIAogICAgICAgICBib29sIHNj
aGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwogICAgICAgICB2b2lk
IHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTEsOCArMjExLDcgQEAgdm9pZCBTVkdFbGVtZW50OjpzZW5kU1ZH
TG9hZEV2ZW50SWZQb3NzaQogICAgICAgICBpZiAoaGFzTG9hZExpc3RlbmVyKGN1cnJlbnRUYXJn
ZXQuZ2V0KCkpKSB7CiAgICAgICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAg
ZXZlbnQtPnNldFRhcmdldChjdXJyZW50VGFyZ2V0KTsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgaWdub3JlZCA9IDA7Ci0gICAgICAgICAgICBjdXJyZW50VGFyZ2V0LT5kaXNwYXRjaEdlbmVy
aWNFdmVudChldmVudC5yZWxlYXNlKCksIGlnbm9yZWQpOworICAgICAgICAgICAgY3VycmVudFRh
cmdldC0+ZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKICAgICAgICAgfQog
ICAgICAgICBjdXJyZW50VGFyZ2V0ID0gKHBhcmVudCAmJiBwYXJlbnQtPmlzU1ZHRWxlbWVudCgp
KSA/IHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHRWxlbWVudD4ocGFyZW50KSA6IDA7CiAgICAgfQpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAzOTgxMikKKysrIFdl
YkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3
ICsxNjksNyBAQCBib29sIFNWR0VsZW1lbnRJbnN0YW5jZTo6ZGlzcGF0Y2hFdmVudChQCiAgICAg
ZXZ0LT5zZXRUYXJnZXQodGhpcyk7CiAKICAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+dmlldygpOwotICAgIHJldHVybiBlbGVtZW50LT5kaXNwYXRjaEdl
bmVyaWNFdmVudChldnQucmVsZWFzZSgpLCBlYyk7CisgICAgcmV0dXJuIGVsZW1lbnQtPmRpc3Bh
dGNoR2VuZXJpY0V2ZW50KGV2dC5yZWxlYXNlKCkpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdF
bGVtZW50SW5zdGFuY2U6Om9uYWJvcnQoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMzk4MTIpCisrKyBXZWJD
b3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC5oIgogCiAjaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTEwNywxMCArMTA2LDEwIEBAIEZsb2F0
UmVjdCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDoKICAgICByZXR1cm4gU1ZHVHJhbnNm
b3JtYWJsZTo6Z2V0QkJveCh0aGlzKTsKIH0KIAotUmVuZGVyT2JqZWN0KiBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5k
ZXJTdHlsZSogc3R5bGUpCitSZW5kZXJPYmplY3QqIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIHsK
ICAgICAvLyBCeSBkZWZhdWx0LCBhbnkgc3ViY2xhc3MgaXMgZXhwZWN0ZWQgdG8gZG8gcGF0aC1i
YXNlZCBkcmF3aW5nCi0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclBhdGgoc3R5bGUsIHRo
aXMpOworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJQYXRoKHRoaXMpOwogfQogCiBQYXRo
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojp0b0NsaXBQYXRoKCkgY29uc3QKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCShyZXZpc2lvbiAzOTgxMikKKysrIFdlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybWFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAK
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgotI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdTdHls
ZWRFbGVtZW50LmgiCkluZGV4OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMzk4MTIpCisr
KyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcg
KzI4NCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OmNyZWEKICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNl
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBE
b2N1bWVudCogb3V0cHV0RG9jKQorc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBEb2N1bWVudCogb3V0cHV0RG9jKQogewogICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50
KG91dHB1dERvYyk7CiAgICAgCkBAIC00MzMsNyArNDMzLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBYU0xUUHJvY2VzcwogICAgIAogICAgIGlmICghdHJhbnNmb3JtVG9TdHJpbmco
c291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2Rpbmcp
KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNl
KHJlc3VsdFN0cmluZywgcmVzdWx0TUlNRVR5cGUsIHNvdXJjZU5vZGUsIG91dHB1dERvYyk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZShyZXN1bHRTdHJpbmcsIHJlc3VsdE1J
TUVUeXBlLCBvdXRwdXREb2MpOwogfQogCiB2b2lkIFhTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRl
cihjb25zdCBTdHJpbmcmIC8qbmFtZXNwYWNlVVJJKi8sIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26626</attachid>
            <date>2009-01-12 00:16:58 -0800</date>
            <delta_ts>2009-01-13 14:23:02 -0800</delta_ts>
            <desc>patch</desc>
            <filename>WebCoreUnusedPatch.txt</filename>
            <type>text/plain</type>
            <size>24151</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTgxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMDktMDEtMTIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
MzEwMjogdHVybiBvbiB1bnVzZWQgcGFyYW1ldGVyIHdhcm5pbmdzIGluIFdlYkNvcmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAyCisKKyAgICAg
ICAgTGFzdCBzdGVwOiBUdXJuIG9uIHRoZSB3YXJuaW5nIGFuZCBmaXggdGhlIGxhc3QgZmV3IGlu
c3RhbmNlcy4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc6IFJlbW92
ZWQgLVduby11bnVzZWQtcGFyYW1ldGVyIGZyb20KKyAgICAgICAgV0FSTklOR19DRkxBR1NfQkFT
RSwgc28gdGhlIHVudXNlZCBwYXJhbWV0ZXIgd2FybmluZyB3aWxsIGZpcmUuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoanNET01XaW5kb3dC
YXNlTWVzc2FnZUNoYW5uZWwpOiBTZXBhcmF0ZSB0aGUgdmVyc2lvbiBmb3IgdXNlIHdoZW4KKyAg
ICAgICAgQ0hBTk5FTF9NRVNTQUdJTkcgaXMgdHVybmVkIG9mZiwgc28gd2UgY2FuIG9taXQgdGhl
IGFyZ3VtZW50IG5hbWVzLgorICAgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gbm90IGV2ZW4g
aGF2ZSB0aGlzIHByb3BlcnR5IGluIHRoYXQgY2FzZSwKKyAgICAgICAgcmF0aGVyIHRoYW4gaGF2
aW5nIHRoZSBmdW5jdGlvbiByZXR1cm4gdW5kZWZpbmVkLCBidXQgSSBkb24ndCBrbm93CisgICAg
ICAgIGhvdyB0byBkbyB0aGF0IHdpdGggdGhlIGJpbmRpbmdzIHNjcmlwdC4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOiBMZWF2ZSBvdXQgYXJndW1lbnQg
bmFtZXMgaW4KKyAgICAgICAgZnVuY3Rpb25zIHdoZXJlIHRoZXkncmUgbm90IHVzZWQgKHRoZSBT
VkcgY29udGV4dCwgYW5kIHRoZSBwcm9wZXJ0eQorICAgICAgICBuYW1lIGluIHRoZSBpbmRleCBn
ZXR0ZXIpLiBVc2UgVU5VU0VEX1BBUkFNIHdoZXJlIGFyZ3VtZW50cyBhcmUKKyAgICAgICAgc29t
ZXRpbWVzIG5vdCB1c2VkLgorCisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6UnVudGltZU9iamVjdEltcDo6cHV0KTogVXNlIFVOVVNFRF9QQVJBTSBm
b3Igbm9uLVFULgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YW5pbWF0aW9uTWVkaWFGZWF0dXJlRXZhbCk6IE9taXQgYXJndW1lbnQg
bmFtZXMgZm9yIHN0eWxlIGFuZCBmcmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zaXRpb25N
ZWRpYUZlYXR1cmVFdmFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1fMmRN
ZWRpYUZlYXR1cmVFdmFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1fM2RN
ZWRpYUZlYXR1cmVFdmFsKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDog
TGVhdmUgb3V0IHRoZSBjcmVhdGVkQnlQYXJzZXIgcHJvcGVydHkgbmFtZSBpbgorICAgICAgICBj
YXNlcyB3aGVyZSBpdCdzIG5vdCB1c2VkLgorCisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3Jp
cHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OnNldEphdmFTY3JpcHRQYXVzZWQpOiBTZXBhcmF0ZSB0aGUKKyAgICAgICAgdmVyc2lvbiBm
b3IgdGhlIE1hYyBwbGF0Zm9ybSBzbyB3ZSBjYW4gb21pdCB0aGUgYXJndW1lbnQgbmFtZXMuCisK
KyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0
eUNocm9tZUNsaWVudDo6Y29udGVudHNTaXplQ2hhbmdlZCk6IFJlbW92ZWQgYXJndW1lbnQgbmFt
ZS4KKworICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZFVzZVBsdWdpbkRvY3VtZW50KTogQ29tbWVu
dGVkIG91dAorICAgICAgICBhcmd1bWVudCBuYW1lLgorCisgICAgICAgICogbG9hZGVyL2ljb24v
SWNvbkZldGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkZldGNoZXI6OmRpZFJlY2Vp
dmVSZXNwb25zZSk6IFVzZSBBU1NFUlRfVU5VU0VELgorICAgICAgICAoV2ViQ29yZTo6SWNvbkZl
dGNoZXI6OmRpZFJlY2VpdmVEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJY29uRmV0
Y2hlcjo6ZGlkRmluaXNoTG9hZGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SWNvbkZl
dGNoZXI6OmRpZEZhaWwpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YXNzZXJ0UHJvdG9jb2xJc0dvb2QpOiBTZXBhcmF0ZSBvdXQgdGhl
IE5ERUJVRyB2ZXJzaW9uIHNvCisgICAgICAgIHdlIGNhbiBvbWl0IHRoZSBhcmd1bWVudCBuYW1l
cy4KKworICAgICAgICAqIHBsYXRmb3JtL1RpbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRp
bWVySGVhcEl0ZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KTogVXNlIEFTU0VSVF9VTlVTRUQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhCdWZmZXI6Om9mZnNldEF0KTogVXNlIFVOVVNFRF9QQVJBTSBpbiB0aGUgbm9u
LVdJTiBjYXNlLgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OmFkZCk6IFVzZSBVTlVT
RURfUEFSQU0gaW4gdGhlIG5vbi1DQUlSTyBjYXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6Y2xlYXIpOiBSZW1vdmVkIGFyZ3VtZW50IG5hbWUuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
U1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlVG9SZW5kZXJT
VkdDb250ZW50KTogVXNlIFVOVVNFRF9QQVJBTSB3aGVuIFNWR19GSUxURVJTCisgICAgICAgIGlz
IG5vdCBlbmFibGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCk6
IERpdHRvLgorCiAyMDA5LTAxLTExICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29yZS9Db25maWd1
cmF0aW9ucy9CYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ29uZmlndXJhdGlv
bnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMzk4MTcpCisrKyBXZWJDb3JlL0NvbmZpZ3VyYXRp
b25zL0Jhc2UueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAgTElOS0VS
X0RJU1BMQVlTX01BTkdMRURfTkFNRVMgPSBZRVM7CiBQUkVCSU5ESU5HID0gTk87CiBWQUxJRF9B
UkNIUyA9IGkzODYgcHBjIHg4Nl82NCBwcGM2NDsKIFdBUk5JTkdfQ0ZMQUdTID0gJChXQVJOSU5H
X0NGTEFHU18kKENVUlJFTlRfQVJDSCkpOwotV0FSTklOR19DRkxBR1NfQkFTRSA9IC1XYWxsIC1X
IC1XY2FzdC1hbGlnbiAtV2NoYXItc3Vic2NyaXB0cyAtV2Zvcm1hdC1zZWN1cml0eSAtV21pc3Np
bmctZm9ybWF0LWF0dHJpYnV0ZSAtV3BvaW50ZXItYXJpdGggLVd3cml0ZS1zdHJpbmdzIC1Xbm8t
Zm9ybWF0LXkyayAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVd1bmRlZjsKK1dBUk5JTkdfQ0ZMQUdT
X0JBU0UgPSAtV2FsbCAtVyAtV2Nhc3QtYWxpZ24gLVdjaGFyLXN1YnNjcmlwdHMgLVdmb3JtYXQt
c2VjdXJpdHkgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdwb2ludGVyLWFyaXRoIC1Xd3Jp
dGUtc3RyaW5ncyAtV25vLWZvcm1hdC15MmsgLVd1bmRlZjsKIFdBUk5JTkdfQ0ZMQUdTXyA9ICQo
V0FSTklOR19DRkxBR1NfQkFTRSkgLVdzaG9ydGVuLTY0LXRvLTMyOwogV0FSTklOR19DRkxBR1Nf
aTM4NiA9ICQoV0FSTklOR19DRkxBR1NfQkFTRSkgLVdzaG9ydGVuLTY0LXRvLTMyOwogV0FSTklO
R19DRkxBR1NfcHBjID0gJChXQVJOSU5HX0NGTEFHU19CQVNFKSAtV3Nob3J0ZW4tNjQtdG8tMzI7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAz
OTgxNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzc2LDE3ICszNzYsMjQgQEAgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VJ
bWFnZShFeGVjU3RhdAogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3Ry
dWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KGFzT2JqZWN0KHNsb3Qu
c2xvdEJhc2UoKSkpKTsKIH0KIAorI2lmICFFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcpCisKK0pT
VmFsdWVQdHIganNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCit7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Cit9CisKKyNlbHNlCisKIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlTWVzc2FnZUNo
YW5uZWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQogewotI2lmIEVOQUJMRShDSEFOTkVMX01FU1NBR0lORykKICAgICBpZiAoIXN0
YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5h
bGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yPihl
eGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNl
KCkpKSk7Ci0jZWxzZQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotI2VuZGlmCiB9CiAKKyNl
bmRpZgorCiBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZU9wdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYg
KCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkp
KS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMzk4MTcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMs
NyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMu
Y29tPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtp
dC5vcmc+CiAjIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJr
aXQub3JnPgotIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAKICMgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTYz
LDcgKzk2MywxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbCwgSlNET01XaW5kb3dTaGVs
bCogc2hlbGwpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50
Q2xhc3NOYW1lKHN0cnVjdHVyZSwgaW1wbCwgc2hlbGwpXG4iKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbCIgLiAo
JG5lZWRzU1ZHQ29udGV4dCA/ICIsIFNWR0VsZW1lbnQqIGNvbnRleHQiIDogIiIpIC4gIilcbiIp
OworICAgICAgICBteSAkY29udGV4dEFyZyA9ICIiOworICAgICAgICBpZiAoJG5lZWRzU1ZHQ29u
dGV4dCkgeworICAgICAgICAgICAgaWYgKCRoYXNQYXJlbnQgJiYgISRwYXJlbnROZWVkc1NWR0Nv
bnRleHQpIHsKKyAgICAgICAgICAgICAgICAkY29udGV4dEFyZyA9ICIsIFNWR0VsZW1lbnQqIjsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJGNvbnRleHRBcmcgPSAiLCBT
VkdFbGVtZW50KiBjb250ZXh0IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbCRjb250ZXh0QXJn
KVxuIik7CiAgICAgICAgIGlmICgkaGFzUGFyZW50KSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3RydWN0dXJlLCBpbXBsIiAuICgkcGFy
ZW50TmVlZHNTVkdDb250ZXh0ID8gIiwgY29udGV4dCIgOiAiIikgLiAiKVxuIik7CiAgICAgICAg
IH0gZWxzZSB7CkBAIC0xMDkxLDYgKzEwOTksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
JGxpc3RlbmVyVHlwZSA9ICJKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciI7CiAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
VU5VU0VEX1BBUkFNKGV4ZWMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNz
TmFtZSo+KHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkp
KS0+aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoJHtsaXN0ZW5lclR5cGV9KiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PCR7bGlzdGVu
ZXJUeXBlfSo+KGltcC0+JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoKSkpIHtcbiIpOwogICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKEpTT2JqZWN0KiBs
aXN0ZW5lck9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9iaigpKVxuIik7CkBAIC0xMTAwLDggKzEx
MDksMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICB9IGVs
c2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8pIHsKICAg
ICAgICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5T
dHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwogICAgICAgICAgICAgICAg
ICAgICAkY29uc3RydWN0b3JUeXBlID1+IHMvQ29uc3RydWN0b3IkLy87CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzbG90KTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4g
JGNvbnN0cnVjdG9yVHlwZSAuICI6OmdldENvbnN0cnVjdG9yKGV4ZWMpO1xuIik7CiAgICAgICAg
ICAgICAgICAgfSBlbHNpZiAoIUB7JGF0dHJpYnV0ZS0+Z2V0dGVyRXhjZXB0aW9uc30pIHsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKGV4
ZWMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkcG9kVHlwZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHBvZFR5cGUgaW1wKCpzdGF0
aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmltcGwoKSk7
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcG9kVHlwZSBlcSAiZmxvYXQiKSB7
ICMgU3BlY2lhbCBjYXNlIGZvciBKU1NWR051bWJlcgpAQCAtMTI5OSw2ICsxMzEwLDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJKU1ZhbHVlUHRyICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpXG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBVTlVTRURfUEFSQU0oYXJncyk7XG4iKTsKIAogICAgICAgICAgICAgJGltcGxL
SlNJbmNsdWRleyJFcnJvci5oIn0gPSAxOwogCkBAIC0xNDI2LDcgKzE0MzgsNyBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJIYXNJbmRleEdldHRlciJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiXG5KU1ZhbHVlUHRyICR7Y2xhc3NOYW1lfTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuSlNWYWx1ZVB0ciAke2Ns
YXNzTmFtZX06OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0q
IHRoaXNPYmogPSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKSk7XG4iKTsKICAgICAgICAgaWYgKEluZGV4R2V0dGVyUmV0dXJuc1N0cmluZ3MoJGltcGxD
bGFzc05hbWUpKSB7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCShyZXZpc2lvbiAz
OTgxNykKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTkxLDYgKzE5MSw4IEBAIHZvaWQgUnVudGltZU9iamVjdEltcDo6cHV0KEV4ZWNTdGF0
ZSogZXgKICNpZiBQTEFURk9STShRVCkKICAgICBlbHNlIGlmIChpbnN0YW5jZS0+Z2V0QmluZGlu
Z0xhbmd1YWdlKCkgPT0gSW5zdGFuY2U6OlF0TGFuZ3VhZ2UpCiAgICAgICAgIEpTT2JqZWN0Ojpw
dXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzbG90KTsKICNlbmRpZgogCiAgICAgaW5zdGFuY2UtPmVuZCgpOwpJbmRleDogV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDM5ODE3KQorKysgV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw3ICszODgsNyBA
QCBzdGF0aWMgYm9vbCBtYXhfZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlCiAgICAgcmV0dXJuIGRl
dmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWF4UHJlZml4
KTsKIH0KIAotc3RhdGljIGJvb2wgYW5pbWF0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSog
dmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCAgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQorc3RhdGljIGJvb2wgYW5pbWF0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSog
dmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAg
ICAgaWYgKHZhbHVlKSB7CiAgICAgICAgIGZsb2F0IG51bWJlcjsKQEAgLTM5Nyw3ICszOTcsNyBA
QCBzdGF0aWMgYm9vbCBhbmltYXRpb25NZWRpYUZlYXR1cmVFdmFsKENTCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBib29sIHRyYW5zaXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBNZWRpYUZlYXR1cmVQ
cmVmaXggb3ApCitzdGF0aWMgYm9vbCB0cmFuc2l0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1
ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7
CiAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgIGZsb2F0IG51bWJlcjsKQEAgLTQwNiw3ICs0MDYs
NyBAQCBzdGF0aWMgYm9vbCB0cmFuc2l0aW9uTWVkaWFGZWF0dXJlRXZhbChDCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHRyYW5zZm9ybV8yZE1lZGlhRmVhdHVyZUV2YWwoQ1NT
VmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgIE1lZGlhRmVh
dHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHRyYW5zZm9ybV8yZE1lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4
IG9wKQogewogICAgIGlmICh2YWx1ZSkgewogICAgICAgICBmbG9hdCBudW1iZXI7CkBAIC00MTUs
NyArNDE1LDcgQEAgc3RhdGljIGJvb2wgdHJhbnNmb3JtXzJkTWVkaWFGZWF0dXJlRXZhbAogICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCB0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1cmVF
dmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsICBN
ZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCB0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1
cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSosIE1lZGlhRmVhdHVy
ZVByZWZpeCBvcCkKIHsKICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgZmxvYXQgbnVtYmVyOwpJ
bmRleDogV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9tYWtlX25hbWVzLnBsCShyZXZpc2lvbiAzOTgxNykKKysrIFdlYkNvcmUvZG9tL21ha2VfbmFt
ZXMucGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL3BlcmwgLXcK
IAotIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMjMsMTQgKzIyMywxNyBAQCBzdWIgcHJpbnRDb25zdHJ1Y3RvcnMKICAgICBmb3IgbXkgJG5h
bWUgKHNvcnQga2V5cyAldGFncykgewogICAgICAgICBteSAkdWNOYW1lID0gJHRhZ3N7JG5hbWV9
eydpbnRlcmZhY2VOYW1lJ307CiAKLSAgICAgICAgcHJpbnQgRiAic3RhdGljIFBhc3NSZWZQdHI8
JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4gJHtuYW1lfUNvbnN0cnVjdG9yKERvY3Vt
ZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKVxuIjsKLSAgICAgICAgcHJpbnQgRiAie1xu
IjsKICAgICAgICAgaWYgKCR0YWdzeyRuYW1lfXsnY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBh
cnNlcid9KSB7Ci0gICAgICAgICAgICBwcmludCBGICIgICAgcmV0dXJuIG5ldyAke3VjTmFtZX0o
JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXM6OiR7bmFtZX1UYWcsIGRvYywgY3JlYXRlZEJ5
UGFyc2VyKTtcbiI7CisgICAgICAgICAgICBwcmludCBGICJzdGF0aWMgUGFzc1JlZlB0cjwkcGFy
YW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiAke25hbWV9Q29uc3RydWN0b3IoRG9jdW1lbnQq
IGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcilcbiI7CisgICAgICAgICAgICBwcmludCBG
ICJ7XG4iOworICAgICAgICAgICAgcHJpbnQgRiAiICAgIHJldHVybiBuZXcgJHt1Y05hbWV9KCRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5hbWVzOjoke25hbWV9VGFnLCBkb2N1bWVudCwgY3JlYXRl
ZEJ5UGFyc2VyKTtcbiI7CisgICAgICAgICAgICBwcmludCBGICJ9XG5cbiI7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBwcmludCBGICIgICAgcmV0dXJuIG5ldyAke3VjTmFtZX0oJHBh
cmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXM6OiR7bmFtZX1UYWcsIGRvYyk7XG4iOworICAgICAg
ICAgICAgcHJpbnQgRiAic3RhdGljIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9
RWxlbWVudD4gJHtuYW1lfUNvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbClcbiI7
CisgICAgICAgICAgICBwcmludCBGICJ7XG4iOworICAgICAgICAgICAgcHJpbnQgRiAiICAgIHJl
dHVybiBuZXcgJHt1Y05hbWV9KCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5hbWVzOjoke25hbWV9
VGFnLCBkb2N1bWVudCk7XG4iOworICAgICAgICAgICAgcHJpbnQgRiAifVxuXG4iOwogICAgICAg
ICB9Ci0gICAgICAgIHByaW50IEYgIn1cblxuIjsKICAgICB9CiAgICAgcHJpbnQgRiAiI2VuZGlm
XG4iIGlmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ307CiB9CkluZGV4OiBXZWJDb3Jl
L2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDM5ODE3KQor
KysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzczLDkgKzM3MywxNiBAQCB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
SmF2YVNjcmlwCiAgICAgc2V0SmF2YVNjcmlwdFBhdXNlZChmcmFtZS0+dmlldygpLCBwYXVzZWQp
OwogfQogCisjaWYgUExBVEZPUk0oTUFDKQorCit2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0SmF2YVNjcmlwdFBhdXNlZChGcmFtZVZpZXcqLCBib29sKQoreworfQorCisjZWxzZQorCiB2
b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZChGcmFtZVZpZXcq
IHZpZXcsIGJvb2wgcGF1c2VkKQogewotI2lmICFQTEFURk9STShNQUMpCiAgICAgaWYgKCF2aWV3
KQogICAgICAgICByZXR1cm47CiAKQEAgLTM4OSw5ICszOTYsMTAgQEAgdm9pZCBKYXZhU2NyaXB0
RGVidWdTZXJ2ZXI6OnNldEphdmFTY3JpcAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQpLT5zZXRKYXZhU2NyaXB0UGF1c2VkKHBh
dXNlZCk7CiAgICAgfQotI2VuZGlmCiB9CiAKKyNlbmRpZgorCiB2b2lkIEphdmFTY3JpcHREZWJ1
Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChQYWdlKiBwYWdlKQogewogICAgIGlmIChtX3BhdXNlZCkK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAzOTgxNykKKysrIFdlYkNvcmUvbG9h
ZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgSW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQm
IHApIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93VG9TY3Jl
ZW4oY29uc3QgSW50UmVjdCYgcikgY29uc3QgeyByZXR1cm4gcjsgfQogICAgIHZpcnR1YWwgUGxh
dGZvcm1XaWRnZXQgcGxhdGZvcm1XaW5kb3coKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXplJiBzKSBj
b25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChGcmFtZSosIGNv
bnN0IEludFNpemUmKSBjb25zdCB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVP
dmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQpIHsgfQogCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDM5ODE3KQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBOU0NhY2hlZFVSTFJlc3Bv
bnNlKiB3aWxsQ2FjaGVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgTlNDYWNoZWRVUkxSZXNwb25zZSopIGNvbnN0ID0gMDsKICNlbmRpZgogCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VQbHVnaW5Eb2N1bWVudChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkVXNlUGx1Z2luRG9jdW1lbnQoY29uc3QgU3RyaW5nJiAvKm1pbWVUeXBlKi8pIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHN0YXRpYyB2b2lkIHRy
YW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoRnJhbWUqLCBjb25zdCBJbnRTaXplJiwgY29u
c3QgQ29sb3ImLCBib29sLCBjb25zdCBJbnRTaXplICYsIGJvb2wsCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9pY29uL0ljb25GZXRjaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25GZXRjaGVyLmNwcAkocmV2aXNpb24gMzk4MTcpCisrKyBXZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25GZXRjaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDEyIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSWNvbkZldGNoZXIuaCIKIAotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MSGVhZEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTE2NCw3ICsxNjAsNyBAQCB2b2lkIEljb25GZXRjaGVyOjpjYW5jZWwoKQogICAgIGlm
IChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogfQotICAgIAorCiBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gSWNvbkZldGNoZXI6OmNyZWF0ZUljb24oKQogewogICAgIEFT
U0VSVCghbV9lbnRyaWVzLmlzRW1wdHkoKSk7CkBAIC0xNzIsOCArMTY4LDcgQEAgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IEljb25GZXRjaGVyOjpjcgogICAgIC8vIEZvciBub3csIGp1c3QgcmV0
dXJuIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCBlbnRyeS4KICAgICByZXR1cm4gbV9lbnRyaWVzLmZp
cnN0KCkuYnVmZmVyKCk7CiB9Ci0gICAgCi0gICAgCisKIHZvaWQgSWNvbkZldGNoZXI6OmxvYWRF
bnRyeSgpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudEVudHJ5IDwgbV9lbnRyaWVzLnNpemUoKSk7
CkBAIC0xOTEsNyArMTg2LDcgQEAgdm9pZCBJY29uRmV0Y2hlcjo6bG9hZEZhaWxlZCgpCiAgICAg
CiB2b2lkIEljb25GZXRjaGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgQVNTRVJUKG1f
aGFuZGxlID09IGhhbmRsZSk7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIG1faGFuZGxlID09
IGhhbmRsZSk7CiAgICAgCiAgICAgaW50IHN0YXR1c0NvZGUgPSByZXNwb25zZS5odHRwU3RhdHVz
Q29kZSgpIC8gMTAwOwogICAgIGlmIChzdGF0dXNDb2RlID09IDQgfHwgc3RhdHVzQ29kZSA9PSA1
KSB7CkBAIC0yMDAsMTYgKzE5NSwxNiBAQCB2b2lkIEljb25GZXRjaGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UoUmVzCiAgICAgfSAgICAKIH0KICAgICAKLXZvaWQgSWNvbkZldGNoZXI6OmRpZFJlY2Vp
dmVEYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgsIGludCBsZW5ndGhSZWNlaXZlZCkKK3ZvaWQgSWNvbkZldGNoZXI6OmRpZFJlY2VpdmVEYXRh
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGlu
dCkKIHsKLSAgICBBU1NFUlQobV9oYW5kbGUgPT0gaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VE
KGhhbmRsZSwgbV9oYW5kbGUgPT0gaGFuZGxlKTsKICAgICAKICAgICBtX2VudHJpZXNbbV9jdXJy
ZW50RW50cnldLmJ1ZmZlcigpLT5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKIH0KIAogdm9pZCBJY29u
RmV0Y2hlcjo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogewotICAg
IEFTU0VSVChtX2hhbmRsZSA9PSBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBt
X2hhbmRsZSA9PSBoYW5kbGUpOwogICAgIAogICAgIGlmIChtX2N1cnJlbnRFbnRyeSA9PSBtX2Vu
dHJpZXMuc2l6ZSgpIC0gMSkgewogICAgICAgICAvLyBXZSBmaW5pc2hlZCBsb2FkaW5nLCBjcmVh
dGUgdGhlIGljb24KQEAgLTIyNywxMCArMjIyLDkgQEAgdm9pZCBJY29uRmV0Y2hlcjo6ZGlkRmlu
aXNoTG9hZGluZyhSZXNvdQogICAgIAogdm9pZCBJY29uRmV0Y2hlcjo6ZGlkRmFpbChSZXNvdXJj
ZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZUVycm9yJikKIHsKLSAgICBBU1NFUlQobV9o
YW5kbGUgPT0gaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgbV9oYW5kbGUgPT0g
aGFuZGxlKTsKICAgICAKICAgICBsb2FkRmFpbGVkKCk7CiB9CiAKLSAgICAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gMzk4MTcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTcsMTcgKzU5NywyNSBAQCBi
b29sIEtVUkw6Omhhc1JlZigpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhZ21lbnRFbmQgIT0gbV9x
dWVyeUVuZDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFzc2VydFByb3RvY29sSXNHb29kKGNv
bnN0IGNoYXIqIHByb3RvY29sKQorI2lmZGVmIE5ERUJVRworCitzdGF0aWMgaW5saW5lIHZvaWQg
YXNzZXJ0UHJvdG9jb2xJc0dvb2QoY29uc3QgY2hhciopCit7Cit9CisKKyNlbHNlCisKK3N0YXRp
YyB2b2lkIGFzc2VydFByb3RvY29sSXNHb29kKGNvbnN0IGNoYXIqIHByb3RvY29sKQogewotI2lm
bmRlZiBOREVCVUcKICAgICBjb25zdCBjaGFyKiBwID0gcHJvdG9jb2w7CiAgICAgd2hpbGUgKCpw
KSB7CiAgICAgICAgIEFTU0VSVCgqcCA+ICcgJyAmJiAqcCA8IDB4N0YgJiYgISgqcCA+PSAnQScg
JiYgKnAgPD0gJ1onKSk7CiAgICAgICAgICsrcDsKICAgICB9Ci0jZW5kaWYKIH0KIAorI2VuZGlm
CisKIGJvb2wgS1VSTDo6cHJvdG9jb2xJcyhjb25zdCBjaGFyKiBwcm90b2NvbCkgY29uc3QKIHsK
ICAgICAvLyBEbyB0aGUgY29tcGFyaXNvbiB3aXRob3V0IG1ha2luZyBhIG5ldyBzdHJpbmcgb2Jq
ZWN0LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9UaW1lci5jcHAJKHJldmlzaW9uIDM5ODE3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9UaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgcHVibGljOgog
CiAgICAgVGltZXJCYXNlKiB0aW1lcigpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXI7IH0KIAotICAg
IHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0IHsKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVu
Y3koKSBjb25zdAorICAgIHsKICAgICAgICAgQVNTRVJUKG1faW5kZXggPj0gMCk7CiAgICAgICAg
IEFTU0VSVChtX2luZGV4IDwgKHRpbWVySGVhcCA/IHN0YXRpY19jYXN0PGludD4odGltZXJIZWFw
LT5zaXplKCkpIDogMCkpOwogICAgIH0KQEAgLTEzMSw5ICsxMzIsMTAgQEAgcHVibGljOgogCiAg
ICAgaW50IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogCi0gICAgdm9pZCBjaGVj
a0NvbnNpc3RlbmN5KGludCBvZmZzZXQgPSAwKSBjb25zdCB7Ci0gICAgICAgIEFTU0VSVChtX2lu
ZGV4ICsgb2Zmc2V0ID49IDApOwotICAgICAgICBBU1NFUlQobV9pbmRleCArIG9mZnNldCA8PSAo
dGltZXJIZWFwID8gc3RhdGljX2Nhc3Q8aW50Pih0aW1lckhlYXAtPnNpemUoKSkgOiAwKSk7Cisg
ICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KGludCBvZmZzZXQgPSAwKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChvZmZzZXQsIG1faW5kZXggKyBvZmZzZXQgPj0gMCk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQob2Zmc2V0LCBtX2luZGV4ICsgb2Zmc2V0IDw9ICh0aW1lckhlYXAg
PyBzdGF0aWNfY2FzdDxpbnQ+KHRpbWVySGVhcC0+c2l6ZSgpKSA6IDApKTsKICAgICB9CiAKIHBy
aXZhdGU6CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCShyZXZp
c2lvbiAzOTgxNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxNCArMzAsMTYgQEAKICNkZWZpbmUgR2x5cGhC
dWZmZXJfaAogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5j
bHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZWxpZiBQ
TEFURk9STShDQUlSTykKLSNpbmNsdWRlIDxjYWlyby5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaWYgUExBVEZPUk0oQ0FJUk8pCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEyNSw2ICsxMjcsNyBAQCBwdWJsaWM6
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsKICNl
bHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CiAgICAgICAgIHJldHVybiBGbG9hdFNp
emUoKTsKICNlbmRpZgogICAgIH0KQEAgLTEzMiw2ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0
aCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgbV9mb250RGF0
YS5hcHBlbmQoZm9udCk7CisKICNpZiBQTEFURk9STShDQUlSTykKICAgICAgICAgY2Fpcm9fZ2x5
cGhfdCBjYWlyb0dseXBoOwogICAgICAgICBjYWlyb0dseXBoLmluZGV4ID0gZ2x5cGg7CkBAIC0x
NTIsNiArMTU2LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9vZmZzZXRzLmFwcGVuZCgqb2Zm
c2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9vZmZzZXRzLmFwcGVuZChGbG9hdFNp
emUoKSk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICNlbmRpZgogICAg
IH0KICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNv
dXJjZUNHLmNwcAkocmV2aXNpb24gMzk4MTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIElt
YWdlU291cmNlOjp+SW1hZ2VTb3VyY2UoKQogICAgIGNsZWFyKHRydWUpOwogfQogCi12b2lkIElt
YWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2ws
IHNpemVfdCwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKICAg
ICAvLyBXZSBhbHdheXMgZGVzdHJveSB0aGUgZGVjb2RlciwgYmVjYXVzZSB0aGVyZSBpcyBubyBB
UEkgdG8gZ2V0IGl0IHRvCiAgICAgLy8gc2VsZWN0aXZlbHkgcmVsZWFzZSBzb21lIG9mIHRoZSBm
cmFtZXMgaXQncyBob2xkaW5nLCBhbmQgaWYgd2UgZG9uJ3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHSW5saW5lLmNwcAkocmV2aXNpb24gMzk4MTcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIFJl
bmRlclNWR0lubGluZTo6UmVuZGVyU1ZHSW5saW5lKE5vZGUqIG4KIHsKIH0KIAotSW5saW5lQm94
KiBSZW5kZXJTVkdJbmxpbmU6OmNyZWF0ZUlubGluZUJveChib29sIHVudXNlZE1ha2VQbGFjZUhv
bGRlckJveCwgYm9vbCB1bnVzZWRJc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1bikKK0lubGlu
ZUJveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVCb3goYm9vbCB1bnVzZWRNYWtlUGxh
Y2VIb2xkZXJCb3gsIGJvb2wgdW51c2VkSXNSb290TGluZUJveCwgYm9vbCkKIHsKICNpZiBBU1NF
UlRfRElTQUJMRUQKICAgICBVTlVTRURfUEFSQU0odW51c2VkSXNSb290TGluZUJveCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkocmV2aXNpb24gMzk4MTcpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTEgKzM1LDE3IEBACiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VNYXNrZXIuaCIKICNpbmNs
dWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9p
ZCBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94
LCBTVkdSZXNvdXJjZUZpbHRlciomIGZpbHRlciwgU1ZHUmVzb3VyY2VGaWx0ZXIqIHJvb3RGaWx0
ZXIpCi17ICAgIAoreworI2lmICFFTkFCTEUoU1ZHX0ZJTFRFUlMpCisgICAgVU5VU0VEX1BBUkFN
KGZpbHRlcik7CisgICAgVU5VU0VEX1BBUkFNKHJvb3RGaWx0ZXIpOworI2VuZGlmCisKICAgICBT
VkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG9iamVjdC0+
ZWxlbWVudCgpKTsKICAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVu
dCgpICYmIHN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpOwogICAgIEFTU0VSVChvYmplY3QpOwpAQCAt
MTA0LDYgKzExMCwxMiBAQCB2b2lkIHByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2Jq
CiAKIHZvaWQgZmluaXNoUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiBib3VuZGlu
Z0JveCwgU1ZHUmVzb3VyY2VGaWx0ZXIqJiBmaWx0ZXIsIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRD
b250ZXh0KQogeworI2lmICFFTkFCTEUoU1ZHX0ZJTFRFUlMpCisgICAgVU5VU0VEX1BBUkFNKGJv
dW5kaW5nQm94KTsKKyAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKKyAgICBVTlVTRURfUEFSQU0o
c2F2ZWRDb250ZXh0KTsKKyNlbmRpZgorCiAgICAgQVNTRVJUKG9iamVjdCk7CiAKICAgICBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Cg==
</data>
<flag name="review"
          id="12664"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>