<?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>107420</bug_id>
          
          <creation_ts>2013-01-20 23:17:04 -0800</creation_ts>
          <short_desc>Remove getOwnPropertyDescriptor</short_desc>
          <delta_ts>2021-05-15 11:10:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>120093</dup_id>
          
          <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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>abarth</cc>
    
    <cc>ashvayka</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mkwst+watchlist</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>811842</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-20 23:17:04 -0800</bug_when>
    <thetext>This is practically redundant with getOwnPropertySlot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811881</commentid>
    <comment_count>1</comment_count>
      <attachid>183721</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-20 23:56:51 -0800</bug_when>
    <thetext>Created attachment 183721
i love the smell of napalm in the morning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811882</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-20 23:59:33 -0800</bug_when>
    <thetext>Attachment 183721 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackObject...&quot; exit_code: 1
Source/JavaScriptCore/runtime/PropertySlot.cpp:43:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/PropertySlot.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/PropertySlot.h:37:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/PropertySlot.h:38:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/PropertySlot.h:39:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/PropertySlot.h:40:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/PropertySlot.h:41:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 7 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811886</commentid>
    <comment_count>3</comment_count>
      <attachid>183723</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-21 00:07:19 -0800</bug_when>
    <thetext>Created attachment 183723
delete delete delete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811888</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-21 00:10:41 -0800</bug_when>
    <thetext>Fixed the namespace indent &amp; the miss indent in the .cpp.
Largely retained the formatting of the enum; this is the existing formatting, and changing it makes it less readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811891</commentid>
    <comment_count>5</comment_count>
      <attachid>183724</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-21 00:14:20 -0800</bug_when>
    <thetext>Created attachment 183724
revert change to enum values

Tried to make enum values more sane in my last patch; forgot this will require matching script changes too – reverting for now, we can deal with this later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811912</commentid>
    <comment_count>6</comment_count>
      <attachid>183724</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-21 00:50:40 -0800</bug_when>
    <thetext>Comment on attachment 183724
revert change to enum values

Attachment 183724 did not pass win-ews (win):
Output: http://queues.webkit.org/results/15964903</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811961</commentid>
    <comment_count>7</comment_count>
      <attachid>183724</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-21 02:18:07 -0800</bug_when>
    <thetext>Comment on attachment 183724
revert change to enum values

Attachment 183724 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15969928

New failing tests:
http/tests/security/cross-frame-access-history-get.html
http/tests/security/cross-frame-access-getOwnPropertyDescriptor.html
http/tests/security/cross-frame-access-object-prototype.html
http/tests/security/xss-DENIED-defineProperty.html
http/tests/history/cross-origin-replace-history-object-child.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811992</commentid>
    <comment_count>8</comment_count>
      <attachid>183724</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-21 03:16:51 -0800</bug_when>
    <thetext>Comment on attachment 183724
revert change to enum values

Attachment 183724 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16011250

New failing tests:
http/tests/security/cross-frame-access-object-prototype.html
http/tests/history/cross-origin-replace-history-object-child.html
http/tests/security/xss-DENIED-defineProperty.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812028</commentid>
    <comment_count>9</comment_count>
      <attachid>183724</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-21 04:17:07 -0800</bug_when>
    <thetext>Comment on attachment 183724
revert change to enum values

Attachment 183724 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16035009

New failing tests:
http/tests/security/cross-frame-access-object-prototype.html
http/tests/history/cross-origin-replace-history-object-child.html
http/tests/security/xss-DENIED-defineProperty.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812850</commentid>
    <comment_count>10</comment_count>
      <attachid>183945</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-22 02:49:21 -0800</bug_when>
    <thetext>Created attachment 183945
Add more slot/descriptor divergence to location &amp; history</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812862</commentid>
    <comment_count>11</comment_count>
      <attachid>183952</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-22 03:15:56 -0800</bug_when>
    <thetext>Created attachment 183952
Kicking another ews run!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812885</commentid>
    <comment_count>12</comment_count>
      <attachid>183952</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 03:49:54 -0800</bug_when>
    <thetext>Comment on attachment 183952
Kicking another ews run!

Attachment 183952 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16040525</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812945</commentid>
    <comment_count>13</comment_count>
      <attachid>183952</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 05:11:50 -0800</bug_when>
    <thetext>Comment on attachment 183952
Kicking another ews run!

Attachment 183952 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16041562

New failing tests:
http/tests/security/cross-frame-access-history-get.html
http/tests/security/cross-frame-access-object-prototype.html
http/tests/security/xss-DENIED-defineProperty.html
http/tests/history/cross-origin-replace-history-object-child.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812987</commentid>
    <comment_count>14</comment_count>
      <attachid>183952</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 06:04:50 -0800</bug_when>
    <thetext>Comment on attachment 183952
Kicking another ews run!

Attachment 183952 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16045562

New failing tests:
http/tests/security/cross-frame-access-history-get.html
http/tests/security/cross-frame-access-object-prototype.html
http/tests/security/xss-DENIED-defineProperty.html
http/tests/history/cross-origin-replace-history-object-child.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813689</commentid>
    <comment_count>15</comment_count>
      <attachid>183952</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 19:31:44 -0800</bug_when>
    <thetext>Comment on attachment 183952
Kicking another ews run!

Attachment 183952 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16038898

New failing tests:
http/tests/security/cross-frame-access-object-prototype.html
http/tests/history/cross-origin-replace-history-object-child.html
http/tests/security/xss-DENIED-defineProperty.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871335</commentid>
    <comment_count>16</comment_count>
      <attachid>183952</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-04-08 18:09:54 -0700</bug_when>
    <thetext>Comment on attachment 183952
Kicking another ews run!

Clearing flag for now. Can put up another patch for review if you return to this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760429</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-05-15 11:10:03 -0700</bug_when>
    <thetext>getOwnPropertyDescriptor() trap was removed in r154373.

*** This bug has been marked as a duplicate of bug 120093 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183721</attachid>
            <date>2013-01-20 23:56:51 -0800</date>
            <delta_ts>2013-01-21 00:07:19 -0800</delta_ts>
            <desc>i love the smell of napalm in the morning</desc>
            <filename>107420.patch</filename>
            <type>text/plain</type>
            <size>193236</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQwMzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNCBA
QAorMjAxMy0wMS0yMCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGdldE93blByb3BlcnR5RGVzY3JpcHRvcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwcmFjdGljYWxseSBy
ZWR1bmRhbnQgd2l0aCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisKKyAgICAgICAgVGhlIGJ1bGsgb2Yg
Y2hhbmdlcyBoZXJlIGFyZSB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcgorICAgICAgICBtZWNoYW5pc20uIEEgbmV3IGZyZWUtZnVuY3Rpb24gaW1wbGVtZW50
YXRpb24gb2YgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGlzCisgICAgICAgIGFkZGVkIHRvIFBy
b3BlcnR5RGVzY3JpcHRvci5oLCBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBnZXRPd25Qcm9wZXJ0
eVNsb3QuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzLCBQcm9wZXJ0eVNsb3Qg
aXMgbm93IHBhc3NlZCB0aGUgYXR0cmlidXRlcywgYW5kCisgICAgICAgIHJlZmVyZW5jZXMgdGhl
IEdldHRlclNldHRlciBvYmplY3QgZm9yIGFjY2Vzc29ycywgcmF0aGVyIHRoYW4gdGhlIGdldHRl
ci4gQW4KKyAgICAgICAgYWRkaXRpb25hbCBmaWVsZCBpbmRpY2F0aW5nIGdldE93blByb3BlcnR5
RGVzY3JpcHRvciB1c2FnZSBpcyBhbHNvIGFkZGVkIHRvCisgICAgICAgIHN1cHBvcnQgZXhpc3Rp
bmcgZnVuY3Rpb25hbGxpdHkgZm9yIHRoZSBET01XaW5kb3cgb2JqZWN0LgorCisgICAgICAgIElu
IG9yZGVyIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlIHNpemUgb2YgUHJvcGVydHlTbG90LCB0aGUg
aW1wbGVtZW50YXRpb24gaGFzCisgICAgICAgIGJlZW4gcmVmYWN0b3JlZC4gUHJldmlvdXNseSB0
aGUgQ2FjaGVQcm9wZXJ0eVR5cGUgd2FzIG9ubHkgc2V0IGZvciBjYWNoZWFibGUKKyAgICAgICAg
cHJvcGVydGllcy4gTm93IGNhY2hlYWJpbGl0eSBpcyBzcGxpdCBvdXQgaW50byBhIHNlcGFyYXRl
IGZpZWxkLCBhbmQgdGhlIHR5cGUKKyAgICAgICAgaXMgYWxzbyByZWNvcmRlZC4gVGhpcyBtZWFu
cyB3ZSBjYW4gYWx3YXlzIHVzZSB0aGUgdHlwZSBmaWVsZCB0byBkZXRlcm1pbmUKKyAgICAgICAg
dGhlIHZhbHVlLCByYXRoZXIgdGhhbiBvdmVybG9hZGluZyB0aGUgbWVhbmluZyBvZiB0aGUgZ2V0
VmFsdWUgZmllbGQuIFRoaXMsCisgICAgICAgIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIg
ZmllbGRzIGFyZSBtb3ZlZCBpbnRvIGFuIGV4aXN0aW5nIChidXQgc3BhcmVzbHkKKyAgICAgICAg
dXNlZCkgdW5pb24uCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAg
ICAoSlNDYWxsYmFja09iamVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaDoKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5qczoKKyAgICAgICAgKiBKU0NUeXBl
ZEFycmF5U3R1YnMuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVi
dWdnZXJBY3RpdmF0aW9uLmg6CisgICAgICAgIChEZWJ1Z2dlckFjdGl2YXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50
cy5oOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuaDoKKyAgICAgICAgKEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmg6CisgICAgICAgIChBcnJheVByb3RvdHlwZSk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChCb29sZWFuUHJvdG90eXBlKToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6CisgICAgICAg
IChEYXRlQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5oOgorICAg
ICAgICAoRGF0ZVByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoK
KyAgICAgICAgKEVycm9yUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQpOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0FjdGl2
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgICogcnVudGltZS9K
U0NlbGwuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTTm90QW5PYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAoSlNPTk9iamVjdCk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3BlcnR5SXNF
bnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNQcm94eS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5o
OgorICAgICAgICAoSlNQcm94eSk6CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZUludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRT
dHJpbmdQcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZUdldCk6CisgICAgICAgICogcnVudGltZS9M
b29rdXAuY3BwOgorICAgICAgICAoSlNDOjpzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAg
ICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6Z2V0U3RhdGljUHJvcGVydHlT
bG90KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmdldFN0YXRpY1ZhbHVlU2xvdCk6
CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChNYXRoT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL05hbWVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL05hbWVQcm90b3R5cGUuaDoKKyAgICAgICAgKE5hbWVQcm90b3R5cGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmg6CisgICAgICAgIChOdW1iZXJDb25z
dHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAo
TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JTZWFs
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUpOgorICAgICAgICAoSlND
OjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3Ry
dWN0b3JJc0Zyb3plbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgor
ICAgICAgICAoT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaDoKKyAgICAgICAgKE9iamVjdFByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9Q
cm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3I6
OmVxdWFsVG8pOgorICAgICAgICAoSlNDOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKFByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmZ1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpjYWNoZWRQcm9wZXJ0eVR5cGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6Omlz
Q2FjaGVhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90Ojppc0NhY2hlYWJsZVZhbHVl
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhCYXNlKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VmFsdWVXaXRoQXR0cmlidXRlcyk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpzZXRDYWNoZWFibGVDdXN0b20pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNl
dEN1c3RvbUluZGV4KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRBY2Nlc3NvclNs
b3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldENhY2hlYWJsZUFjY2Vzc29yU2xv
dCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VW5kZWZpbmVkKToKKyAgICAgICAg
KFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y2xlYXJPZmZzZXQp
OgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmN1c3RvbUdldHRlcik6CisgICAgICAgIChK
U0M6OlByb3BlcnR5U2xvdDo6YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6d3JpdGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmVudW1lcmFibGUpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmNvbmZpZ3VyYWJsZSk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5U2xvdDo6aXNBY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6
Z2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRJbkdldE93blBy
b3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6aW5HZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
Lmg6CisgICAgICAgIChSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKFJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKFJlZ0V4cFByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmpl
Y3QuaDoKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5oOgorICAgICAgICAoU3RyaW5nUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpnZXQpOgorCiAyMDEzLTAxLTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5j
b20+CiAKICAgICAgICAgV2VhayBHQyBtYXBzIHNob3VsZCBiZSBlYXNpZXIgdG8gdXNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCShyZXZpc2lvbiAx
NDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAgcHVibGljOiBcCiAgICAgfVwKIFwKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtc
Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3ImKTtcCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0Nl
bGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlND
OjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1wKICAgICBzdGF0aWMgdm9pZCBwdXRC
eUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7XApAQCAtMTA2LDMxICsxMDUsMTggQEAgYm9vbCBKUyMj
bmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdAogICAgIHVuc2lnbmVkIGluZGV4ID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTtcCiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9y
YWdlTGVuZ3RoKSB7XAogICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KTtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChl
eGVjLCBpbmRleCkpO1wKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRoaXNP
YmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTtcCiAgICAgICAgIHJl
dHVybiB0cnVlO1wKICAgICB9XAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
Y2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTtcCiB9XAogXAotYm9vbCBKUyMjbmFtZSMj
QXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcilcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxl
bmd0aCkge1wKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCk7XAotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0QnlJ
bmRleChleGVjLCBpbmRleCksIERvbnREZWxldGUpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAot
ICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XAotfVwKLVwKIGJvb2wgSlMjI25hbWUj
I0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcCiB7XAog
ICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkq
PihjZWxsKTtcCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19p
bmZvKTtcCiAgICAgaWYgKHByb3BlcnR5TmFtZSA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0
aCkge1wKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMs
IHByb3BlcnR5TmFtZSkpO1wKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRo
aXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSk7XAog
ICAgICAgICByZXR1cm4gdHJ1ZTtcCiAgICAgfVwKICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7XApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzUsNyArMTc1LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRp
YyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTQwMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVJlZiA9IE9w
YXF1ZUpTU3RyaW5nOjpjcmVhdGUobmFtZSk7CiAgICAgICAgICAgICAgICAgQVBJQ2FsbGJhY2tT
aGltIGNhbGxiYWNrU2hpbShleGVjKTsKICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcGVydHko
Y3R4LCB0aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNhbGxiYWNrR2V0dGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgY2FsbGJhY2tHZXR0ZXIsIERv
bnRFbnVtKTsgLy8gV2UgZG9uJ3Qga25vdyB0aGUgYXR0cmlidXRlcywgc28gZ3Vlc3MuCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoSlNPYmplY3RHZXRQcm9wZXJ0eUNhbGxiYWNrIGdldFByb3BlcnR5ID0g
anNDbGFzcy0+Z2V0UHJvcGVydHkpIHsKQEAgLTE1MSwyOCArMTUxLDMwIEBAIGJvb2wgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5k
ZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0b0pTKGV4ZWMsIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyh0b0pTKGV4ZWMsIHZhbHVlKSwgRG9udEVudW0pOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3Rh
dGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3MtPnN0YXRpY1ZhbHVlcyhleGVj
KSkgewotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNWYWx1ZXMtPmNvbnRhaW5zKG5hbWUpKSB7
CisgICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjppdGVyYXRv
ciBlbnRyeSA9IHN0YXRpY1ZhbHVlcy0+ZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAo
ZW50cnkgIT0gc3RhdGljVmFsdWVzLT5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0U3RhdGljVmFsdWUoZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWVXaXRoQXR0cmlidXRlcyh2YWx1ZSwgZW50cnktPnZhbHVlLT5hdHRyaWJ1dGVzKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5j
dGlvbnMgPSBqc0NsYXNzLT5zdGF0aWNGdW5jdGlvbnMoZXhlYykpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhdGljRnVuY3Rpb25zLT5jb250YWlucyhuYW1lKSkgewotICAgICAgICAgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7Cisg
ICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjppdGVyYXRv
ciBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+ZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZW50cnkgIT0gc3RhdGljRnVuY3Rpb25zLT5lbmQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0aWNGdW5jdGlvbkdldHRlciwgZW50cnkt
PnZhbHVlLT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjEzLDI2ICsyMTUsNiBAQCBKU1Zh
bHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVmYXVsCiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBQYXJlbnQ+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpT
Q2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9i
amVjdCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1ldGhv
ZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgd2Ugc2hvdWxkIHJldHVybiBhbiBhY2Nl
c3MgZGVzY3JpcHRvciwgYnV0IHJldHVybmluZyBhIHZhbHVlIGRlc2NyaXB0b3IgaXMgYmV0dGVy
IHRoYW4gbm90aGluZy4KLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhl
YywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0VmFsdWUodmFsdWUpOwotICAgICAgICAvLyBXZSBkb24n
dCBrbm93IHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGNvbmZpZ3VyYWJsZSwgYnV0IGFzc3VtZSBp
dCBpcy4KLSAgICAgICAgZGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7Ci0gICAgICAg
IC8vIFdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgZW51bWVyYWJsZSAod2Ug
Y291bGQgY2FsbCBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgdG8gZmluZCBvdXQpLCBidXQgYXNzdW1l
IGl0IGlzbid0LgotICAgICAgICBkZXNjcmlwdG9yLnNldEVudW1lcmFibGUoZmFsc2UpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUGFyZW50OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIHZvaWQgSlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Qq
PihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
anMJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjIzLDIzICsyMjMsMjMgQEAgdmFyIGJhc2VE
dXBEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blBybwogc2hvdWxkQmUoJ3R5cGVvZiBiYXNlRHVw
RGVzY3JpcHRvcicsICJvYmplY3QiKTsKIHNob3VsZEJlKCdiYXNlRHVwRGVzY3JpcHRvci52YWx1
ZScsIGRlcml2ZWQuYmFzZUR1cCk7CiBzaG91bGRCZSgnYmFzZUR1cERlc2NyaXB0b3IuY29uZmln
dXJhYmxlJywgdHJ1ZSk7Ci1zaG91bGRCZSgnYmFzZUR1cERlc2NyaXB0b3IuZW51bWVyYWJsZScs
IGZhbHNlKTsKK3Nob3VsZEJlKCdiYXNlRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgdHJ1ZSk7
CiB2YXIgYmFzZU9ubHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihkZXJpdmVkLCAiYmFzZU9ubHkiKTsKIHNob3VsZEJlKCd0eXBlb2YgYmFzZU9ubHlEZXNjcmlw
dG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Jhc2VPbmx5RGVzY3JpcHRvci52YWx1ZScsIGRl
cml2ZWQuYmFzZU9ubHkpOwogc2hvdWxkQmUoJ2Jhc2VPbmx5RGVzY3JpcHRvci5jb25maWd1cmFi
bGUnLCB0cnVlKTsKLXNob3VsZEJlKCdiYXNlT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZh
bHNlKTsKK3Nob3VsZEJlKCdiYXNlT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwog
c2hvdWxkQmUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVyaXZlZCwgInByb3Rv
T25seSIpJywgdW5kZWZpbmVkKTsKIHZhciBwcm90b0R1cERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlcml2ZWQsICJwcm90b0R1cCIpOwogc2hvdWxkQmUoJ3R5
cGVvZiBwcm90b0R1cERlc2NyaXB0b3InLCAib2JqZWN0Iik7CiBzaG91bGRCZSgncHJvdG9EdXBE
ZXNjcmlwdG9yLnZhbHVlJywgZGVyaXZlZC5wcm90b0R1cCk7CiBzaG91bGRCZSgncHJvdG9EdXBE
ZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZScsIHRydWUpOwotc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3Jp
cHRvci5lbnVtZXJhYmxlJywgZmFsc2UpOworc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5l
bnVtZXJhYmxlJywgdHJ1ZSk7CiB2YXIgZGVyaXZlZE9ubHlEZXNjcmlwdG9yID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJpdmVkLCAiZGVyaXZlZE9ubHkiKTsKIHNob3VsZEJl
KCd0eXBlb2YgZGVyaXZlZE9ubHlEZXNjcmlwdG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Rl
cml2ZWRPbmx5RGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQuZGVyaXZlZE9ubHkpOwogc2hvdWxk
QmUoJ2Rlcml2ZWRPbmx5RGVzY3JpcHRvci5jb25maWd1cmFibGUnLCB0cnVlKTsKLXNob3VsZEJl
KCdkZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdk
ZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwogCiBzaG91bGRCZSgidW5k
ZWZpbmVkIGluc3RhbmNlb2YgTXlPYmplY3QiLCBmYWxzZSk7CiBFdmlsRXhjZXB0aW9uT2JqZWN0
Lmhhc0luc3RhbmNlID0gZnVuY3Rpb24gZigpIHsgcmV0dXJuIGYoKTsgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24u
Y3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTIgKzk1LDYgQEAg
dm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246OmdldE93blByb3BlcnR5TgogICAgIHRoaXNPYmplY3Qt
Pm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1i
b29sIERlYnVnZ2VyQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIERlYnVnZ2VyQWN0aXZhdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlckFjdGl2YXRpb24qPihvYmplY3QpOwotICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24tPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIGJvb2wgRGVidWdnZXJBY3RpdmF0aW9uOjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBz
aG91bGRUaHJvdykKIHsKICAgICBEZWJ1Z2dlckFjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RGVidWdnZXJBY3RpdmF0aW9uKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBKU19F
WFBPUlREQVRBIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGUKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4o
Y2VsbCk7CiAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVu
dChpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgc2xvdC5zZXRW
YWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVlLCBOb25lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0xMjgsMTggKzEyOCwxOCBAQCBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsCiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAg
ICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVudChpKSkgewog
ICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNs
b3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMo
dmFsdWUsIE5vbmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlz
T2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVt
YmVyKHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRzKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWVX
aXRoQXR0cmlidXRlcyhqc051bWJlcih0aGlzT2JqZWN0LT5tX251bUFyZ3VtZW50cyksIERvbnRF
bnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlICYmIExJS0VMWSghdGhpc09iamVjdC0+
bV9vdmVycm9kZUNhbGxlZSkpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX2lzU3RyaWN0
TW9kZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5tX2NhbGxlZS5n
ZXQoKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModGhpc09iamVj
dC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5l
Y2Vzc2FyeShleGVjKTsKQEAgLTE1MSwzNSArMTUxLDYgQEAgYm9vbCBBcmd1bWVudHM6OmdldE93
blByb3BlcnR5U2xvdChKU0NlbAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgQXJn
dW1lbnRzOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCi17Ci0gICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3Vt
ZW50cyo+KG9iamVjdCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVudChpKSkg
ewotICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgTm9uZSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkg
ewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+
bV9udW1Bcmd1bWVudHMpLCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxs
ZWUgJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSkgewotICAgICAgICBp
ZiAoIXRoaXNPYmplY3QtPm1faXNTdHJpY3RNb2RlKSB7Ci0gICAgICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHRoaXNPYmplY3QtPmNy
ZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShleGVjKTsKLSAgICB9Ci0KLSAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIgJiYgdGhpc09iamVj
dC0+bV9pc1N0cmljdE1vZGUpCi0gICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVD
YWxsZXJJZk5lY2Vzc2FyeShleGVjKTsKLSAgICAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOwotfQotCiB2b2lkIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8QXJndW1lbnRzKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTks
NiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSw2IEBAIGJv
b2wgQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG8KICAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25TbG90PEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlD
b25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlDb25zdHJ1Y3Rvcio+KGNlbGwpLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEFycmF5Q29uc3RydWN0b3I6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsK
LSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEludGVybmFsRnVuY3Rpb24+
KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJy
YXlDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmso
RXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBAQCBwcml2YXRlOgogICAgIEFycmF5Q29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0KICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENv
bnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MCwxMSArMTQwLDYgQEAgYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KAog
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNBcnJheT4oZXhlYywgRXhlY1N0YXRl
OjphcnJheVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlQcm90b3R5cGUqPihjZWxs
KSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQot
ewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNBcnJheT4oZXhlYywg
RXhlY1N0YXRlOjphcnJheVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlQcm90b3R5
cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogLy8gSGVscGVyIGZ1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBBcnJheVByb3RvdHlw
ZSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAgICAg
ICAgIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
blByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSAr
NjgsNiBAQCBib29sIEJvb2xlYW5Qcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvCiAgICAgcmV0
dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCb29sZWFuT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6
OmJvb2xlYW5Qcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEJvb2xlYW5Qcm90b3R5cGUqPihj
ZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBCb29sZWFuUHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxCb29sZWFuT2Jq
ZWN0PihleGVjLCBFeGVjU3RhdGU6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0
PEJvb2xlYW5Qcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwot
fQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xl
YW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDAy
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICBCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwotCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5
Miw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAKICAgICB0eXBlZGVmIGJvb2wgKCpEZWZpbmVP
d25Qcm9wZXJ0eUZ1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCk7CiAgICAgRGVmaW5lT3duUHJvcGVydHlGdW5j
dGlvblB0ciBkZWZpbmVPd25Qcm9wZXJ0eTsKLQotICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blBy
b3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogfTsKIAogI2RlZmluZSBD
UkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xMzcsNyArMTM0LDYgQEAgc3RydWN0
IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0VmlydHVhbCwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAotICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3Rv
cmFnZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwx
MSArOTEsNiBAQCBib29sIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAg
cmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVj
U3RhdGU6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZUNvbnN0cnVjdG9y
Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgRGF0ZUNvbnN0cnVjdG9y
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxJbnRlcm5h
bEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBq
c0Nhc3Q8RGF0ZUNvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKLX0KLQogLy8gRUNNQSAxNS45LjMKIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2Vs
bCosIENhbGxEYXRhJik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0KLSAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICB9OwogCiAg
ICAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBBcmdMaXN0Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMCwx
MSArNTIwLDYgQEAgYm9vbCBEYXRlUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSgogICAg
IHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6
ZGF0ZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZVByb3RvdHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCi1ib29sIERhdGVQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4g
Z2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OmRh
dGVUYWJsZShleGVjKSwganNDYXN0PERhdGVQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyBGdW5jdGlvbnMKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkocmV2aXNp
b24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDExICs2Niw2IEBAIGJvb2wgRXJyb3JQcm90b3R5cGU6OmdldE93blByb3BlcnR5
U2xvdCgKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEVycm9ySW5zdGFuY2U+KGV4
ZWMsIEV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEVycm9yUHJv
dG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgRXJyb3JQcm90
b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEVy
cm9ySW5zdGFuY2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZShleGVjKSwg
anNDYXN0PEVycm9yUHJvdG90eXBlKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQS0yNjIgNS4xLCAxNS4xMS40LjQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAko
cmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2
Niw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQKICAgICBpZiAo
aXNUb3JuT2ZmKCkgJiYgIWlzVmFsaWQoZW50cnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBzbG90LnNldFZhbHVlKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwor
ICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0xNDksNyArMTQ5LDcgQEAgYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xv
dChKUwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3Vt
ZW50cykgewogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBm
b3IgdGhlIGFyZ3VtZW50cyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4K
ICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1Rvcm5PZmYoKSkgewotICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+Z2V0QXJndW1lbnRzR2V0dGVyKCkp
OworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+Z2V0
QXJndW1lbnRzR2V0dGVyKCksIERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTU3LDggKzE1Nyw5IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlMKICAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQo
cHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSlNW
YWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgdW5zaWdu
ZWQgYXR0cmlidXRlcyA9IE5vbmU7CisgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0
LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVz
KSkgeworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE2OSwyNiArMTcwLDYgQEAg
Ym9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdChKUwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBKU0FjdGl2YXRpb24qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKLQotICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewotICAgICAgICAv
LyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgdGhlIGFyZ3VtZW50cyBv
YmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICAgICAgaWYgKCF0aGlz
T2JqZWN0LT5pc1Rvcm5PZmYoKSkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgICAgICAgICBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udEVudW0pOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGhpc09i
amVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBKU0Fj
dGl2YXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihjZWxs
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5o
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fj
dGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwyNCArMTgwLDEzIEBA
IGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoKIHsKICAgICBKU0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRW
YWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgICAgICBzbG90LnNldFZh
bHVlV2l0aEF0dHJpYnV0ZXMoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCB0aGlzT2Jq
ZWN0LT5pc0xlbmd0aFdyaXRhYmxlKCkgPyBEb250RGVsZXRlIHwgRG9udEVudW0gOiBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAg
IEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7Ci0gICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSks
IHRoaXNPYmplY3QtPmlzTGVuZ3RoV3JpdGFibGUoKSA/IERvbnREZWxldGUgfCBEb250RW51bSA6
IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gRUNN
QSAxNS40LjUuMQogdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNiBAQCBwdWJsaWM6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dF
eGNlcHRpb24pOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgIHN0YXRpYyBKU19FWFBPUlREQVRB
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsMTAg
KzIyMSw0IEBAIGJvb2wgSlNDZWxsOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCoKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYp
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw2IEBAIHByb3RlY3RlZDoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXN0b21IYXNJbnN0YW5jZShKU09iamVj
dCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FT
U0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEs
OCBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU0NlCiAgICAgICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSkgewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2Jq
ZWN0LT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtOworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKTsKICAgICAgICAg
aWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICBwcm90b3R5cGUtPnB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgdGhpc09iamVjdCwgRG9udEVudW0pOwpAQCAtMjMwLDcgKzIzMSw3IEBAIGJvb2wgSlNG
dW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgICAgIEFTU0VSVChpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KSwgb2Zmc2V0KTsKKyAgICAg
ICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5nZXREaXJlY3Qob2Zmc2V0KSwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKICAgICB9CiAKICAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKQEAg
LTI0MywxNyArMjQ0LDE3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpT
Q2UKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
LSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgYXJndW1lbnRzR2V0
dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgYXJndW1l
bnRzR2V0dGVyLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlz
T2JqZWN0LCBsZW5ndGhHZXR0ZXIpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0
aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRl
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkgewotICAgICAgICBzbG90LnNldENhY2hlYWJs
ZUN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFi
bGVDdXN0b20odGhpc09iamVjdCwgbmFtZUdldHRlciwgUmVhZE9ubHkgfCBEb250RW51bSB8IERv
bnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI2Nyw2NiArMjY4
LDEzIEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2xv
dC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgY2FsbGVyR2V0dGVyKTsKKyAgICAgICAg
c2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgY2FsbGVyR2V0dGVyLCBSZWFkT25s
eSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAg
SlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKLSAg
ICBpZiAodGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwotICAgIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAg
ICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1
dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFz
ZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMp
LCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnByZXRlcigpLT5yZXRy
aWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5IHwgRG9u
dEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAot
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewot
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+anNF
eGVjdXRhYmxlKCktPnBhcmFtZXRlckNvdW50KCkpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9u
dERlbGV0ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKSB7Ci0gICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+bmFtZVZhbHVl
KCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY2FsbGVyKSB7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNT
dHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNhbGxlckZy
b21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVs
ZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5j
dGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKQEAgLTQwNiwx
OSArMzU0LDIyIEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmoKICAg
ICAgICAgdGhpc09iamVjdC0+bV9pbmhlcml0b3JJRFdhdGNocG9pbnQubm90aWZ5V3JpdGUoKTsK
ICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQotCiAgICAgYm9v
bCB2YWx1ZUNoZWNrOwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cykgewogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCkt
PmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQot
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAg
ICAgICAvLyBHZXQgdGhlIHByb3BlcnR5IHRvIGZvcmNlIHJlaWZpY2F0aW9uLgorICAgICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gZ2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cisg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGhhc1Byb3BlcnR5LCBoYXNQcm9wZXJ0eSk7CiAgICAg
ICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAg
ICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUoZXhlYywgZGVz
Y3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zy
b21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKICAgICAgICAgaWYgKHRoaXNPYmpl
Y3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgaWYgKCFC
YXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
QWNjZXNzb3IpOworICAgICAgICAgICAgLy8gR2V0IHRoZSBwcm9wZXJ0eSB0byBmb3JjZSByZWlm
aWNhdGlvbi4KKyAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAgICAgICAgYm9v
bCBoYXNQcm9wZXJ0eSA9IGdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChoYXNQcm9wZXJ0eSwg
aGFzUHJvcGVydHkpOwogICAgICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7
CiAgICAgICAgIH0KICAgICAgICAgdmFsdWVDaGVjayA9ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwg
c2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+
cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmplY3QpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0MDI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTY1LDcgKzE2NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJ1Y3R1
cmUqIGNhY2hlSW5oZXJpdG9ySUQoRXhlY1N0YXRlKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0g
RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwMjk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NjAsMTQgKzU2MCw2IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCgKICAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQodGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAg
IEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2Jq
ZWN0KTsKLSAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEJhc2U+KGV4ZWMsIEV4
ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBzeW1ib2xU
YWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpjbGVhclJhcmVEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICBqc0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+bV9yYXJlRGF0YS5jbGVhcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICAgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eUZvcldy
aXRlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDEyICs1OSw2IEBAIGJvb2wgSlNOb3RBbk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNOb3RBbk9iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5o
YWRFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEpTTm90QW5PYmpl
Y3Q6OnB1dChKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSAsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRF
eGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFu
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNO
b3RBbk9iamVjdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEpTT2JqZWN0IG1ldGhvZHMKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MDUsMTEgKzYwNSw2IEBAIGJvb2wgSlNPTk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UK
ICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBFeGVjU3Rh
dGU6Ompzb25UYWJsZShleGVjKSwganNDYXN0PEpTT05PYmplY3QqPihjZWxsKSwgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU09OT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdl
dFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpqc29u
VGFibGUoZXhlYyksIGpzQ2FzdDxKU09OT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKLX0KLQogY2xhc3MgV2Fsa2VyIHsKIHB1YmxpYzoKICAgICBXYWxrZXIoRXhl
Y1N0YXRlKiBleGVjLCBIYW5kbGU8SlNPYmplY3Q+IGZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlw
ZSwgQ2FsbERhdGEgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNPTk9iamVjdChKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLQogICAgIH07
CiAKICAgICBTdHJpbmcgSlNPTlN0cmluZ2lmeShFeGVjU3RhdGUqLCBKU1ZhbHVlLCB1bnNpZ25l
ZCBpbmRlbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyArMjg1LDcgQEAgYm9vbCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgICAgICAKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBpZiAo
dmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVlLCBOb25lKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjk5LDcgKzI5OSw3IEBAIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICAgICAgCiAgICAgICAgIGRv
dWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICBp
ZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWVXaXRoQXR0cmlidXRlcyhKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSks
IE5vbmUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0zMTQsNyArMzE0LDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eAogICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAg
ICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIE5vbmUpOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdl
dCgpKSB7CkBAIC0xNDIwLDEwICsxNDIwLDEwIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJ
bnN0YW5jZShFeGVjU3QKIAogYm9vbCBKU09iamVjdDo6cHJvcGVydHlJc0VudW1lcmFibGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0g
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgaWYgKCFjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihj
b25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cikpCisgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgaWYgKCFjb25zdF9jYXN0PEpTT2JqZWN0
Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCk7CisgICAgcmV0dXJu
IHNsb3QuZW51bWVyYWJsZSgpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNwZWNp
ZmljVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0Nl
bGwqJiBzcGVjaWZpY1ZhbHVlKSBjb25zdApAQCAtMTYzMCwxNSArMTYzMCwxMyBAQCBib29sIEpT
T2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3Bl
cnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorTkVWRVJfSU5MSU5FIHZvaWQg
SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7Ci0gICAgaWYgKEpTT2Jq
ZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0dGVyKGdldERpcmVjdChvZmZzZXQpKS0+
Z2V0dGVyKCkpIHsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCi0g
ICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUdldHRlclNsb3QodGhpcywgZ2V0dGVyRnVuY3Rp
b24sIG9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xv
dChnZXR0ZXJGdW5jdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVk
KCk7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihnZXRE
aXJlY3Qob2Zmc2V0KSk7CisgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQWNjZXNzb3JTbG90KHRoaXMsIGdldHRlclNldHRlciwg
b2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3Quc2V0QWNjZXNzb3JT
bG90KGdldHRlclNldHRlciwgYXR0cmlidXRlcyk7CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dElu
ZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJ
bk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IG9sZERlc2NyaXB0b3IpCkBAIC0yMzYzLDgwICsyMzYxLDExIEBAIEJ1dHRlcmZseSogSlNPYmpl
Y3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIG9sZFNpemUsIG5ld1NpemUpOwog
fQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7
Ci0gICAgSlNDZWxsKiBjZWxsID0gMDsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmpl
Y3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIGNlbGwpOwotICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0KG9mZnNldCksIGF0
dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWdu
ZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgPT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgc3dpdGNoIChv
YmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBjYXNlIEFMTF9JTlQzMl9JTkRF
WElOR19UWVBFUzoKLSAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0g
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKLSAgICAg
ICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIDApOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElO
R19UWVBFUzogewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iamVjdC0+bV9idXR0
ZXJmbHk7Ci0gICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihK
U1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSksIDApOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxl
bmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaSA8IHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+
bV9zcGFyc2VNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICAgICAgaWYgKGl0ID09IG1hcC0+bm90
Rm91bmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpdC0+
dmFsdWUuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBpZiAob2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQorICAgICAg
ICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlmICghcHJvdG90eXBl
LmlzT2JqZWN0KCkpCkBAIC0yNTE5LDcgKzI0NDgsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVP
d25Ob25JbmRleFByb3BlcnR5CiAgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0
eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
Y3VycmVudDsKLSAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CisgICAgaWYgKCFnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewog
ICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUgcHJldmVudGVkIQogICAgICAgICBpZiAo
IWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDE3ICs3NCw2IEBAIHN0cnVjdCBIYXNoVGFibGU7CiBKU19FWFBPUlRfUFJJ
VkFURSBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7
CiBleHRlcm4gSlNfRVhQT1JUREFUQSBjb25zdCBjaGFyKiBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3I7CiAKLS8vIEVDTUEgMjYyLTMgOC42LjEKLS8vIFByb3BlcnR5IGF0dHJp
YnV0ZXMKLWVudW0gQXR0cmlidXRlIHsKLSAgICBOb25lICAgICAgICAgPSAwLAotICAgIFJlYWRP
bmx5ICAgICA9IDEgPDwgMSwgIC8vIHByb3BlcnR5IGNhbiBiZSBvbmx5IHJlYWQsIG5vdCB3cml0
dGVuCi0gICAgRG9udEVudW0gICAgID0gMSA8PCAyLCAgLy8gcHJvcGVydHkgZG9lc24ndCBhcHBl
YXIgaW4gKGZvciAuLiBpbiAuLikKLSAgICBEb250RGVsZXRlICAgPSAxIDw8IDMsICAvLyBwcm9w
ZXJ0eSBjYW4ndCBiZSBkZWxldGVkCi0gICAgRnVuY3Rpb24gICAgID0gMSA8PCA0LCAgLy8gcHJv
cGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBieSBzdGF0aWMgaGFzaHRhYmxlcwotICAg
IEFjY2Vzc29yICAgICA9IDEgPDwgNSwgIC8vIHByb3BlcnR5IGlzIGEgZ2V0dGVyL3NldHRlcgot
fTsKLQogQ09NUElMRV9BU1NFUlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIE5vbmVf
aXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CiBDT01QSUxFX0FTU0VSVChSZWFkT25s
eSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRPbmx5X2lzX2JlbG93X0ZpcnN0SW50ZXJu
YWxBdHRyaWJ1dGUpOwogQ09NUElMRV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0
cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKQEAgLTEz
OCw3ICsxMjcsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKIAogICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIApAQCAt
NDkzLDE2ICs0ODEsMTYgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0UHJvcGVydHlTcGVjaWZpY1Zh
bHVlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNGdW5jdGlvbikg
Y29uc3Q7CiAKICAgICAvLyBUaGlzIGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBwcm9w
ZXJ0eSBtYXAuCi0gICAgSlNWYWx1ZSBnZXREaXJlY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAorICAgIEpTVmFsdWUgZ2V0RGlyZWN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQqIGF0dHJpYnV0ZXMgPSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERh
dGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNl
dCwgc3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4gb2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQgPyBnZXREaXJlY3Qob2Zmc2V0KSA6IEpTVmFsdWUoKTsKICAgICB9
CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorICAgIFByb3BlcnR5T2Zmc2V0IGdl
dERpcmVjdE9mZnNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkKiBhdHRyaWJ1dGVzID0gMCkKICAgICB7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlO
YW1lKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChn
bG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBjaGVja09mZnNl
dChvZmZzZXQsIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgcmV0dXJu
IG9mZnNldDsKICAgICB9CkBAIC05MjEsNyArOTA5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHB1
dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlNDZWxsKik7CiAKICAgICBib29sIGlubGlu
ZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQ
cm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0LCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5
SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIApAQCAt
MTEzOCwxMyArMTEyNiwxNCBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6cHJvdG90eXBlKCkg
Y29uCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXMgPSBOb25lOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKTsKICAgICBp
ZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGdldERpcmVjdChvZmZzZXQpOwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRl
clNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQotICAgICAgICAg
ICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOworICAgICAgICAgICAgZmls
bEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIHZhbHVlLCBvZmZzZXQpOworICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCh0aGlzLCB2YWx1ZSwgb2Zm
c2V0LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMTQwMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDEyICs3Myw2IEBAIGJvb2wgSlNQcm94eTo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCgKICAgICByZXR1cm4gdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNQcm94eTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpTUHJv
eHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRo
aXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
Ci19Ci0KIHZvaWQgSlNQcm94eTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lv
biAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRE
aXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBA
IHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpTU2MKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE92ZXJyaWRlIGN1c3RvbSBhY2Nlc3NvciBiZWhhdmlvdXIgdGhhdCB0aGUg
RE9NIGludHJvZHVjZXMgZm9yIHNvbWUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50
IGhhbmRsZXJzIGRlY2xhcmVkIG9uIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghcmVxdWlyZXNEeW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQmFzZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuVmFsdWVzKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFJldHVyblZhbHVlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghcHV0VG9CYXNlT3BlcmF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDY1
LDE0ICs0NjUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQUxXQVlTX0lOTElORSBib29sIEpT
U3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIobV9sZW5ndGgpKTsKKyAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWVXaXRoQXR0cmlidXRlcyhqc051bWJlcihtX2xlbmd0aCksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgICAg
IGlmIChpIDwgbV9sZW5ndGgpIHsKICAgICAgICAgICAgIEFTU0VSVChpICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7IC8vIE5vIG5lZWQgZm9yIGFuIGV4cGxpY2l0IGNoZWNrLCB0aGUgYWJv
dmUgdGVzdCB3b3VsZCBhbHdheXMgZmFpbCEKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0
SW5kZXgoZXhlYywgaSkpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVz
KGdldEluZGV4KGV4ZWMsIGkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtNDgyLDcgKzQ4Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiAgICAgewogICAgICAgICBpZiAocHJvcGVydHlOYW1lIDwgbV9sZW5ndGgpIHsKLSAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7Cisg
ICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMoZ2V0SW5kZXgoZXhlYywgcHJv
cGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzgsMjIgKzc4LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRl
ci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1
ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+Ci1p
bmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKLSAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQotewotICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJv
bFRhYmxlKCk7Ci0gICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5m
aW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgIGlmIChpdGVyID09IHN5bWJvbFRh
YmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6
RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwotICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwot
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKLSAgICAgICAgb2JqZWN0LT5yZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVs
ZXRlKTsKKyAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMob2JqZWN0LT5yZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVs
ZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA4LDcgKzkzLDcgQEAgaW5saW5lIGJv
b2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJs
ZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051
bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhvYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8
IERvbnREZWxldGUpOwogICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xvb2t1cC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgYm9vbCBz
ZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogewogICAgIEFTU0VSVCh0aGlzT2Jq
LT5nbG9iYWxPYmplY3QoKSk7CiAgICAgQVNTRVJUKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5j
dGlvbik7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gdGhpc09iai0+Z2V0RGlyZWN0T2Zm
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXMoKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsICZhdHRyaWJ1dGVzKTsKIAogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAg
ICAgICAgIC8vIElmIGEgcHJvcGVydHkgaXMgZXZlciBkZWxldGVkIGZyb20gYW4gb2JqZWN0IHdp
dGggYSBzdGF0aWMgdGFibGUsIHRoZW4gd2UgcmVpZnkKQEAgLTg2LDcgKzg3LDcgQEAgYm9vbCBz
ZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICB9CiAKLSAgICBzbG90LnNldFZhbHVlKHRoaXNPYmosIHRo
aXNPYmotPmdldERpcmVjdChvZmZzZXQpLCBvZmZzZXQpOworICAgIHNsb3Quc2V0VmFsdWVXaXRo
UHJvcGVydHlPZmZzZXQodGhpc09iaiwgdGhpc09iai0+Z2V0RGlyZWN0KG9mZnNldCksIG9mZnNl
dCwgYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDI4ICsy
NTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkg
JiBGdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChl
eGVjLCBlbnRyeSwgdGhpc09iaiwgcHJvcGVydHlOYW1lLCBzbG90KTsKIAotICAgICAgICBzbG90
LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1w
LCBjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIGJvb2wgZ2V0U3RhdGljUHJvcGVydHlEZXNj
cmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgVGhpc0ltcCog
dGhpc09iaiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQotICAgIHsKLSAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxl
LT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFlbnRy
eSkgLy8gbm90IGZvdW5kLCBmb3J3YXJkIHRvIHBhcmVudAotICAgICAgICAgICAgcmV0dXJuIFBh
cmVudEltcDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7Ci0gCi0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAg
ICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICBib29s
IHByZXNlbnQgPSBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChleGVjLCBlbnRyeSwgdGhpc09iaiwg
cHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAgIGlmIChwcmVzZW50KQotICAgICAgICAg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgcmV0dXJuIHByZXNl
bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+
cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOworICAg
ICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0
ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMjk1LDI4ICsyNzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAgICAgCiAgICAg
LyoqCi0gICAgICogU2ltcGxpZmllZCB2ZXJzaW9uIG9mIGdldFN0YXRpY1Byb3BlcnR5RGVzY3Jp
cHRvciBpbiBjYXNlIHRoZXJlIGFyZSBvbmx5IGZ1bmN0aW9ucy4KLSAgICAgKiBVc2luZyB0aGlz
IGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIGFsbG93cyAndGhpcycgdG8g
YXZvaWQgaW1wbGVtZW50aW5nCi0gICAgICogYSBkdW1teSBnZXRWYWx1ZVByb3BlcnR5LgotICAg
ICAqLwotICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIGJvb2wgZ2V0
U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFRhYmxl
KiB0YWJsZSwgSlNPYmplY3QqIHRoaXNPYmosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLSAgICB7Ci0gICAgICAgIGlmIChQYXJlbnRJ
bXA6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdGF0aWNfY2FzdDxQYXJlbnRJbXAqPih0aGlz
T2JqKSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAKLSAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxl
LT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoIWVudHJ5KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgICAgIGJvb2wgcHJlc2VudCA9IHNldFVwU3RhdGljRnVuY3Rpb25TbG90KGV4ZWMsIGVu
dHJ5LCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICBpZiAocHJlc2VudCkK
LSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMs
IHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICByZXR1cm4gcHJl
c2VudDsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0
U3RhdGljUHJvcGVydHlTbG90IGluIGNhc2UgdGhlcmUgYXJlIG5vIGZ1bmN0aW9ucywgb25seSAi
dmFsdWVzIi4KICAgICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlT
bG90IHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVuY0ltcCBjbGFzcy4KICAgICAgKi8KQEAgLTMz
MCwyNiArMjg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQVNTRVJUKCEoZW50cnkt
PmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSk7CiAKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVD
dXN0b20odGhpc09iaiwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0
U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIGluIGNhc2UgdGhlcmUgYXJlIG5vIGZ1bmN0aW9ucywg
b25seSAidmFsdWVzIi4KLSAgICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgZ2V0U3RhdGljUHJv
cGVydHlEZXNjcmlwdG9yIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVuY0ltcCBjbGFzcy4KLSAg
ICAgKi8KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgotICAg
IGlubGluZSBib29sIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEhhc2hUYWJsZSogdGFibGUsIFRoaXNJbXAqIHRoaXNPYmosIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLSAgICB7Ci0gICAgICAg
IGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZW50cnkpIC8vIG5vdCBmb3VuZCwgZm9yd2FyZCB0
byBwYXJlbnQKLSAgICAgICAgICAgIHJldHVybiBQYXJlbnRJbXA6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcih0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSk7Ci0g
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2Jq
LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJv
cGVydHlHZXR0ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9i
amVjdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTEgKzEwOSw2IEBAIGJv
b2wgTWF0aE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om1hdGhUYWJsZShleGVj
KSwganNDYXN0PE1hdGhPYmplY3QqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
Ym9vbCBNYXRoT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVz
Y3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRlOjptYXRoVGFibGUoZXhlYyksIGpzQ2Fz
dDxNYXRoT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNBYnMoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAg
ICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFt
ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmFtZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Mywx
MSArNjMsNiBAQCBib29sIE5hbWVQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKCiAgICAg
cmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCYXNlPihleGVjLCBFeGVjU3RhdGU6OnByaXZh
dGVOYW1lUHJvdG90eXBlVGFibGUoZXhlYyksIGpzQ2FzdDxOYW1lUHJvdG90eXBlKj4oY2VsbCks
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgTmFtZVByb3RvdHlwZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewot
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8QmFzZT4oZXhlYywgRXhlY1N0
YXRlOjpwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8TmFtZVByb3RvdHlw
ZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZU5hbWVQcm90b0Z1bmNU
b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYW1lUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmFtZVByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDYgQEAgYm9vbCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0T3du
UHJvcGVydHlTbAogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8TnVtYmVyQ29uc3RydWN0
b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6bnVtYmVyQ29uc3RydWN0b3JU
YWJsZShleGVjKSwganNDYXN0PE51bWJlckNvbnN0cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKLWJvb2wgTnVtYmVyQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1
cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPE51bWJlckNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1
bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6Om51bWJlckNvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpz
Q2FzdDxOdW1iZXJDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7Ci19Ci0KIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGxvb2t1cFB1dDxOdW1iZXJDb25zdHJ1Y3Rvciwg
SW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRXhlY1N0YXRlOjpu
dW1iZXJDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8TnVtYmVyQ29uc3RydWN0b3IqPihj
ZWxsKSwgc2xvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgICAgICBKU1ZhbHVlIGdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTEgKzg4LDYgQEAgYm9vbCBOdW1iZXJQcm90b3R5cGU6OmdldE93blByb3BlcnR5
U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8TnVtYmVyT2JqZWN0PihleGVj
LCBFeGVjU3RhdGU6Om51bWJlclByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8TnVtYmVyUHJv
dG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgTnVtYmVyUHJv
dG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxO
dW1iZXJPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6bnVtYmVyUHJvdG90eXBlVGFibGUoZXhlYyks
IGpzQ2FzdDxOdW1iZXJQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHRv
VGhpc051bWJlcihKU1ZhbHVlIHRoaXNWYWx1ZSwgZG91YmxlJiB4KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHBy
aXZhdGU6CiAgICAgICAgIE51bWJlclByb3RvdHlwZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsK
ICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDExICs5Nyw2
IEBAIGJvb2wgT2JqZWN0Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2wKICAgICByZXR1cm4g
Z2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om9iamVjdENv
bnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxPYmplY3RDb25zdHJ1Y3Rvcio+KGNlbGwpLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIE9iamVjdENvbnN0cnVjdG9yOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17
Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywg
RXhlY1N0YXRlOjpvYmplY3RDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8T2JqZWN0Q29u
c3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyBF
Q01BIDE1LjIuMgogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdE9iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CkBAIC0xNDksMTIgKzE0NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0CiB7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3RlZCBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEg
dmFsdWUgdGhhdCBpcyBub3QgYW4gb2JqZWN0LiIpKSk7Ci0gICAgU3RyaW5nIHByb3BlcnR5TmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKKwogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBkZXNjcmlwdG9yOwotICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFt
ZSksIGRlc2NyaXB0b3IpKQorICAgIGlmICghZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zODAs
NyArMzc2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAg
IGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVz
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0IGRlc2Mg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBQLgogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAg
ICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgaWYgKCFnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCAqaXRlciwgZGVzYykpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIGlzIHRydWUsIHNl
dCBkZXNjLltbQ29uZmlndXJhYmxlXV0gdG8gZmFsc2UuCiAgICAgICAgIGRlc2Muc2V0Q29uZmln
dXJhYmxlKGZhbHNlKTsKQEAgLTQxNyw3ICs0MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdENvbnN0CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewog
ICAgICAgICAvLyBhLiBMZXQgZGVzYyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIFAuCiAgICAgICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBkZXNjOwotICAgICAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgKml0ZXIsIGRlc2MpKQorICAg
ICAgICBpZiAoIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBk
ZXNjKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvLyBiLiBJZiBJc0RhdGFEZXNj
cmlwdG9yKGRlc2MpIGlzIHRydWUsIHRoZW4KICAgICAgICAgLy8gaS4gSWYgZGVzYy5bW1dyaXRh
YmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tXcml0YWJsZV1dIHRvIGZhbHNlLgpAQCAtNDY0LDEx
ICs0NjAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAg
IFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgp
OwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9w
ZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0
IGRlc2MgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50
ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLgotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVz
YzsKLSAgICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Q7CisgICAgICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBleGVjLCAqaXRlciwgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIGlzIHRydWUsIHRoZW4gcmV0
dXJuIGZhbHNlLgotICAgICAgICBpZiAoZGVzYy5jb25maWd1cmFibGUoKSkKKyAgICAgICAgaWYg
KHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApAQCAtNDk0LDEyICs0OTAsMTIgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIFByb3BlcnR5TmFtZUFycmF5
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVy
dHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBQLgotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAgICAgICAgaWYgKCFv
YmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4
ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIGlm
ICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVj
LCAqaXRlciwgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gYi4gSWYg
SXNEYXRhRGVzY3JpcHRvcihkZXNjKSBpcyB0cnVlIHRoZW4KICAgICAgICAgLy8gaS4gSWYgZGVz
Yy5bW1dyaXRhYmxlXV0gaXMgdHJ1ZSwgcmV0dXJuIGZhbHNlLiBjLiBJZiBkZXNjLltbQ29uZmln
dXJhYmxlXV0gaXMgdHJ1ZSwgdGhlbiByZXR1cm4gZmFsc2UuCi0gICAgICAgIGlmICgoZGVzYy5p
c0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzYy53cml0YWJsZSgpKSB8fCBkZXNjLmNvbmZpZ3VyYWJs
ZSgpKQorICAgICAgICBpZiAoKCFzbG90LmlzQWNjZXNzb3IoKSAmJiBzbG90LndyaXRhYmxlKCkp
IHx8IHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDAyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsMTEgKzgxLDYgQEAgYm9vbCBPYmplY3RQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdAog
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNOb25GaW5hbE9iamVjdD4oZXhlYywg
RXhlY1N0YXRlOjpvYmplY3RQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PE9iamVjdFByb3Rv
dHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIE9iamVjdFByb3Rv
dHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNO
b25GaW5hbE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpvYmplY3RQcm90b3R5cGVUYWJsZShleGVj
KSwganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZp
c2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwcml2YXRlOgogICAgICAgICBPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODgsOCArMTg4LDggQEAgYm9vbCBQcm9wZXJ0eURlc2NyaXB0b3I6OmVxdWFs
VG8oRXhlY1N0YQogICAgICAgICAhb3RoZXIubV9zZXR0ZXIgPT0gbV9zZXR0ZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gKCFtX3ZhbHVlIHx8IHNhbWVWYWx1ZShleGVjLCBv
dGhlci5tX3ZhbHVlLCBtX3ZhbHVlKSkKLSAgICAgICAgJiYgKCFtX2dldHRlciB8fCBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChleGVjLCBvdGhlci5tX2dldHRlciwgbV9nZXR0ZXIpKQotICAgICAgICAm
JiAoIW1fc2V0dGVyIHx8IEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIG90aGVyLm1fc2V0dGVy
LCBtX3NldHRlcikpCisgICAgICAgICYmICghbV9nZXR0ZXIgfHwgc2FtZVZhbHVlKGV4ZWMsIG90
aGVyLm1fZ2V0dGVyLCBtX2dldHRlcikpCisgICAgICAgICYmICghbV9zZXR0ZXIgfHwgc2FtZVZh
bHVlKGV4ZWMsIG90aGVyLm1fc2V0dGVyLCBtX3NldHRlcikpCiAgICAgICAgICYmIGF0dHJpYnV0
ZXNFcXVhbChvdGhlcik7CiB9CiAKQEAgLTIyMyw0ICsyMjMsMzAgQEAgdW5zaWduZWQgUHJvcGVy
dHlEZXNjcmlwdG9yOjphdHRyaWJ1dGVzTwogICAgIHJldHVybiAobV9hdHRyaWJ1dGVzICYgb3Zl
cnJpZGVNYXNrKSB8IChjdXJyZW50QXR0cmlidXRlcyAmIH5vdmVycmlkZU1hc2spOwogfQogCiti
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBzbG90LnNldEluR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKCk7CisgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2xvdC5pc0FjY2Vzc29yKCkpCisgICAgICAgIGRl
c2NyaXB0b3Iuc2V0QWNjZXNzb3JEZXNjcmlwdG9yKHNsb3QuZ2V0dGVyU2V0dGVyKCksIHNsb3Qu
YXR0cmlidXRlcygpKTsKKyAgICBlbHNlCisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QuYXR0cmlidXRlcygpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsK
KyAgICBzbG90LnNldEluR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCk7CisgICAgaWYgKCFvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNs
b3QuaXNBY2Nlc3NvcigpKQorICAgICAgICBkZXNjcmlwdG9yLnNldEFjY2Vzc29yRGVzY3JpcHRv
cihzbG90LmdldHRlclNldHRlcigpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CisgICAgZWxzZQorICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBHZXR0ZXJTZXR0ZXI7CisgICAgY2xhc3MgUHJv
cGVydHlOYW1lOwogCiAgICAgLy8gU2VlIEVTNS4xIDkuMTIKICAgICBib29sIHNhbWVWYWx1ZShF
eGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKQEAgLTQxLDYgKzQyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICAsIG1fc2VlbkF0dHJpYnV0ZXMoMCkKICAgICAgICAgewogICAg
ICAgICB9CisKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB3cml0YWJsZSgpIGNvbnN0
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGVudW1lcmFibGUoKSBjb25zdDsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb25maWd1cmFibGUoKSBjb25zdDsKQEAgLTgz
LDYgKzg1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRl
czsKICAgICAgICAgdW5zaWduZWQgbV9zZWVuQXR0cmlidXRlczsKICAgICB9OworCisgICAgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9w
ZXJ0eVNsb3QuaCIKIAorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKQEAgLTI5LDEzICszMCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogSlNWYWx1ZSBQcm9w
ZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKKyAgICBK
U09iamVjdCogZ2V0dGVyRnVuYyA9IG1fZGF0YS5hY2Nlc3Nvci5nZXR0ZXJTZXR0ZXItPmdldHRl
cigpOworICAgIGlmICghZ2V0dGVyRnVuYykKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKICAgICAvLyBQcmV2ZW50IGdldHRlciBmdW5jdGlvbnMgZnJvbSBvYnNlcnZpbmcgZXhlY3V0
aW9uIGlmIGFuIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpOwogCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBtX2RhdGEuZ2V0dGVyRnVuYy0+bWV0
aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEobV9kYXRhLmdldHRlckZ1bmMsIGNhbGxEYXRhKTsKLSAg
ICByZXR1cm4gY2FsbChleGVjLCBtX2RhdGEuZ2V0dGVyRnVuYywgY2FsbFR5cGUsIGNhbGxEYXRh
LCBtX3RoaXNWYWx1ZS5pc09iamVjdCgpID8gbV90aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
IDogbV90aGlzVmFsdWUsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldHRlckZ1bmMtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlckZ1bmMsIGNh
bGxEYXRhKTsKKyAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUobV9kYXRh
LmFjY2Vzc29yLnRoaXNWYWx1ZSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyRnVuYywg
Y2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUuaXNPYmplY3QoKSA/IHRoaXNWYWx1ZS50b1Ro
aXNPYmplY3QoZXhlYykgOiB0aGlzVmFsdWUsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDM2ICszMCw0NyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIC8vIEVDTUEgMjYyLTMgOC42LjEKKyAgICAvLyBQ
cm9wZXJ0eSBhdHRyaWJ1dGVzCisgICAgZW51bSBBdHRyaWJ1dGUgeworICAgICAgICBOb25lICAg
ICAgICAgPSAwLAorICAgICAgICBSZWFkT25seSAgICAgPSAxIDw8IDEsICAvLyBwcm9wZXJ0eSBj
YW4gYmUgb25seSByZWFkLCBub3Qgd3JpdHRlbgorICAgICAgICBEb250RW51bSAgICAgPSAxIDw8
IDIsICAvLyBwcm9wZXJ0eSBkb2Vzbid0IGFwcGVhciBpbiAoZm9yIC4uIGluIC4uKQorICAgICAg
ICBEb250RGVsZXRlICAgPSAxIDw8IDMsICAvLyBwcm9wZXJ0eSBjYW4ndCBiZSBkZWxldGVkCisg
ICAgICAgIEZ1bmN0aW9uICAgICA9IDEgPDwgNCwgIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24g
LSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKKyAgICAgICAgQWNjZXNzb3IgICAgID0g
MSA8PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVyCisgICAgfTsKKwogICAgIGNs
YXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiAgICAgY2xhc3MgSlNPYmpl
Y3Q7CiAKLSNkZWZpbmUgSlNDX1ZBTFVFX01BUktFUiAwCi0jZGVmaW5lIElOREVYX0dFVFRFUl9N
QVJLRVIgcmVpbnRlcnByZXRfY2FzdDxHZXRWYWx1ZUZ1bmM+KDIpCi0jZGVmaW5lIEdFVFRFUl9G
VU5DVElPTl9NQVJLRVIgcmVpbnRlcnByZXRfY2FzdDxHZXRWYWx1ZUZ1bmM+KDMpCi0KICAgICBj
bGFzcyBQcm9wZXJ0eVNsb3QgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBDYWNoZWRQcm9w
ZXJ0eVR5cGUgewogICAgICAgICAgICAgVW5jYWNoZWFibGUsCiAgICAgICAgICAgICBHZXR0ZXIs
CiAgICAgICAgICAgICBDdXN0b20sCisgICAgICAgICAgICBDdXN0b21JbmRleCwKICAgICAgICAg
ICAgIFZhbHVlCiAgICAgICAgIH07CiAKICAgICAgICAgUHJvcGVydHlTbG90KCkKLSAgICAgICAg
ICAgIDogbV9jYWNoZWRQcm9wZXJ0eVR5cGUoVW5jYWNoZWFibGUpCisgICAgICAgICAgICA6IG1f
cHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQorICAgICAgICAgICAgLCBtX2NhY2hlYWJsZShmYWxz
ZSkKKyAgICAgICAgICAgICwgbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcihmYWxzZSkKICAg
ICAgICAgewogICAgICAgICAgICAgY2xlYXJCYXNlKCk7CiAgICAgICAgICAgICBjbGVhck9mZnNl
dCgpOwotICAgICAgICAgICAgY2xlYXJWYWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgZXhw
bGljaXQgUHJvcGVydHlTbG90KGNvbnN0IEpTVmFsdWUgYmFzZSkKICAgICAgICAgICAgIDogbV9z
bG90QmFzZShiYXNlKQotICAgICAgICAgICAgLCBtX2NhY2hlZFByb3BlcnR5VHlwZShVbmNhY2hl
YWJsZSkKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eVR5cGUoVW5jYWNoZWFibGUpCisgICAgICAg
ICAgICAsIG1fY2FjaGVhYmxlKGZhbHNlKQorICAgICAgICAgICAgLCBtX2luR2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgICAgICBjbGVhck9mZnNldCgp
OwotICAgICAgICAgICAgY2xlYXJWYWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgdHlwZWRl
ZiBKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU1ZhbHVlIHNsb3RCYXNlLCBQ
cm9wZXJ0eU5hbWUpOwpAQCAtNjcsMTE0ICs3OCwxMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgSlNWYWx1ZSBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2dldFZhbHVlID09
IEpTQ19WQUxVRV9NQVJLRVIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAg
ICAgICAgICBpZiAobV9nZXRWYWx1ZSA9PSBJTkRFWF9HRVRURVJfTUFSS0VSKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtX2dldEluZGV4VmFsdWUoZXhlYywgc2xvdEJhc2UoKSwgaW5kZXgoKSk7
Ci0gICAgICAgICAgICBpZiAobV9nZXRWYWx1ZSA9PSBHRVRURVJfRlVOQ1RJT05fTUFSS0VSKQor
ICAgICAgICAgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUobV9kYXRhLnZhbHVlKTsKKyAgICAgICAgICAgIGlmICht
X3Byb3BlcnR5VHlwZSA9PSBDdXN0b21JbmRleCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9k
YXRhLmN1c3RvbUluZGV4LmdldEluZGV4VmFsdWUoZXhlYywgc2xvdEJhc2UoKSwgbV9kYXRhLmN1
c3RvbUluZGV4LmluZGV4KTsKKyAgICAgICAgICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBHZXR0
ZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGV4ZWMpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fZ2V0VmFsdWUoZXhlYywgc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY3VzdG9tLmdldFZhbHVlKGV4ZWMsIHNsb3RCYXNl
KCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGdldFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobV9nZXRWYWx1ZSA9PSBKU0NfVkFMVUVfTUFSS0VSKQotICAgICAg
ICAgICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0g
SU5ERVhfR0VUVEVSX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9nZXRJbmRleFZh
bHVlKGV4ZWMsIG1fc2xvdEJhc2UsIG1fZGF0YS5pbmRleCk7Ci0gICAgICAgICAgICBpZiAobV9n
ZXRWYWx1ZSA9PSBHRVRURVJfRlVOQ1RJT05fTUFSS0VSKQorICAgICAgICAgICAgaWYgKG1fcHJv
cGVydHlUeXBlID09IFZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNv
ZGUobV9kYXRhLnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDdXN0
b21JbmRleCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLmN1c3RvbUluZGV4LmdldElu
ZGV4VmFsdWUoZXhlYywgbV9zbG90QmFzZSwgbV9kYXRhLmN1c3RvbUluZGV4LmluZGV4KTsKKyAg
ICAgICAgICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBHZXR0ZXIpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIG1fZ2V0VmFs
dWUoZXhlYywgc2xvdEJhc2UoKSwgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUp
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY3VzdG9tLmdldFZhbHVlKGV4ZWMsIHNsb3RC
YXNlKCksIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgIH0K
IAotICAgICAgICBDYWNoZWRQcm9wZXJ0eVR5cGUgY2FjaGVkUHJvcGVydHlUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWNoZWRQcm9wZXJ0eVR5cGU7IH0KLSAgICAgICAgYm9vbCBpc0NhY2hlYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUHJvcGVydHlUeXBlICE9IFVuY2FjaGVhYmxlOyB9
Ci0gICAgICAgIGJvb2wgaXNDYWNoZWFibGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVk
UHJvcGVydHlUeXBlID09IFZhbHVlOyB9CisgICAgICAgIENhY2hlZFByb3BlcnR5VHlwZSBjYWNo
ZWRQcm9wZXJ0eVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlYWJsZSA/IG1fcHJvcGVydHlU
eXBlIDogVW5jYWNoZWFibGU7IH0KKyAgICAgICAgYm9vbCBpc0NhY2hlYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVhYmxlOyB9CisgICAgICAgIGJvb2wgaXNDYWNoZWFibGVWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FjaGVhYmxlICYmIG1fcHJvcGVydHlUeXBlID09IFZhbHVlOyB9CiAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChpc0NhY2hlYWJsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBtX29m
ZnNldDsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0VmFsdWUoSlNWYWx1ZSBzbG90QmFz
ZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgdm9pZCBzZXRWYWx1ZVdpdGhCYXNlKEpTVmFsdWUg
c2xvdEJhc2UsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICBjbGVhck9mZnNldCgpOwot
ICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IEpTQ19WQUxVRV9NQVJLRVI7CiAgICAgICAgICAgICBt
X3Nsb3RCYXNlID0gc2xvdEJhc2U7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAg
ICAgICAgICBtX2RhdGEudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICAg
ICAgbV9wcm9wZXJ0eVR5cGUgPSBWYWx1ZTsKKyAgICAgICAgICAgIG1fY2FjaGVhYmxlID0gZmFs
c2U7CisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUgc2xvdEJhc2UsIEpTVmFsdWUg
dmFsdWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICAgICAgdm9pZCBzZXRWYWx1ZVdpdGhQ
cm9wZXJ0eU9mZnNldChKU1ZhbHVlIHNsb3RCYXNlLCBKU1ZhbHVlIHZhbHVlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAg
IEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gSlNDX1ZBTFVFX01BUktF
UjsKICAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAgICAgICAgIG1fdmFs
dWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIG1fZGF0YS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSk7CiAgICAgICAgICAgICBtX29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgIG1fY2Fj
aGVkUHJvcGVydHlUeXBlID0gVmFsdWU7CisgICAgICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IFZh
bHVlOworICAgICAgICAgICAgbV9jYWNoZWFibGUgPSB0cnVlOworICAgICAgICAgICAgbV9hdHRy
aWJ1dGVzID0gYXR0cmlidXRlczsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0VmFsdWUo
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgdm9pZCBzZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKEpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFT
U0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICBjbGVhckJhc2UoKTsKICAgICAgICAgICAgIGNsZWFy
T2Zmc2V0KCk7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gSlNDX1ZBTFVFX01BUktFUjsKLSAg
ICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIG1fZGF0YS52YWx1ZSA9IEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IFZhbHVl
OworICAgICAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fYXR0cmli
dXRlcyA9IGF0dHJpYnV0ZXM7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEN1c3RvbShK
U1ZhbHVlIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCisgICAgICAgIHZvaWQgc2V0
Q3VzdG9tKEpTVmFsdWUgc2xvdEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKICAg
ICAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gZ2V0
VmFsdWU7Ci0gICAgICAgICAgICBtX2dldEluZGV4VmFsdWUgPSAwOworICAgICAgICAgICAgbV9k
YXRhLmN1c3RvbS5nZXRWYWx1ZSA9IGdldFZhbHVlOwogICAgICAgICAgICAgbV9zbG90QmFzZSA9
IHNsb3RCYXNlOworICAgICAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBDdXN0b207CisgICAgICAg
ICAgICBtX2NhY2hlYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0
cmlidXRlczsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRDYWNoZWFibGVD
dXN0b20oSlNWYWx1ZSBzbG90QmFzZSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQorICAgICAgICB2
b2lkIHNldENhY2hlYWJsZUN1c3RvbShKU1ZhbHVlIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0
VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VS
VChzbG90QmFzZSk7CiAgICAgICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOwotICAgICAgICAgICAg
bV9nZXRWYWx1ZSA9IGdldFZhbHVlOwotICAgICAgICAgICAgbV9nZXRJbmRleFZhbHVlID0gMDsK
KyAgICAgICAgICAgIG1fZGF0YS5jdXN0b20uZ2V0VmFsdWUgPSBnZXRWYWx1ZTsKICAgICAgICAg
ICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAgICAgICAgIG1fY2FjaGVkUHJvcGVydHlU
eXBlID0gQ3VzdG9tOworICAgICAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBDdXN0b207CisgICAg
ICAgICAgICBtX2NhY2hlYWJsZSA9IHRydWU7CisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMgPSBh
dHRyaWJ1dGVzOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRDdXN0b21JbmRleChKU1Zh
bHVlIHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCwgR2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5kZXhW
YWx1ZSkKKyAgICAgICAgdm9pZCBzZXRDdXN0b21JbmRleChKU1ZhbHVlIHNsb3RCYXNlLCB1bnNp
Z25lZCBpbmRleCwgR2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5kZXhWYWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKICAgICAg
ICAgICAgIEFTU0VSVChnZXRJbmRleFZhbHVlKTsKLSAgICAgICAgICAgIG1fZ2V0VmFsdWUgPSBJ
TkRFWF9HRVRURVJfTUFSS0VSOwotICAgICAgICAgICAgbV9nZXRJbmRleFZhbHVlID0gZ2V0SW5k
ZXhWYWx1ZTsKKyAgICAgICAgICAgIG1fZGF0YS5jdXN0b21JbmRleC5nZXRJbmRleFZhbHVlID0g
Z2V0SW5kZXhWYWx1ZTsKICAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAg
ICAgICAgIG1fZGF0YS5pbmRleCA9IGluZGV4OworICAgICAgICAgICAgbV9kYXRhLmN1c3RvbUlu
ZGV4LmluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IEN1c3RvbUlu
ZGV4OworICAgICAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fYXR0
cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldEdldHRl
clNsb3QoSlNPYmplY3QqIGdldHRlckZ1bmMpCisgICAgICAgIHZvaWQgc2V0QWNjZXNzb3JTbG90
KEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAgICBtX3RoaXNW
YWx1ZSA9IG1fc2xvdEJhc2U7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gR0VUVEVSX0ZVTkNU
SU9OX01BUktFUjsKLSAgICAgICAgICAgIG1fZGF0YS5nZXR0ZXJGdW5jID0gZ2V0dGVyRnVuYzsK
KyAgICAgICAgICAgIEFTU0VSVChnZXR0ZXJTZXR0ZXIpOworICAgICAgICAgICAgbV9kYXRhLmFj
Y2Vzc29yLnRoaXNWYWx1ZSA9IEpTVmFsdWU6OmVuY29kZShtX3Nsb3RCYXNlKTsKKyAgICAgICAg
ICAgIG1fZGF0YS5hY2Nlc3Nvci5nZXR0ZXJTZXR0ZXIgPSBnZXR0ZXJTZXR0ZXI7CisgICAgICAg
ICAgICBtX3Byb3BlcnR5VHlwZSA9IEdldHRlcjsKKyAgICAgICAgICAgIG1fY2FjaGVhYmxlID0g
ZmFsc2U7CisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogICAgICAgICB9
CiAKLSAgICAgICAgdm9pZCBzZXRDYWNoZWFibGVHZXR0ZXJTbG90KEpTVmFsdWUgc2xvdEJhc2Us
IEpTT2JqZWN0KiBnZXR0ZXJGdW5jLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgICAgIHZv
aWQgc2V0Q2FjaGVhYmxlQWNjZXNzb3JTbG90KEpTVmFsdWUgc2xvdEJhc2UsIEdldHRlclNldHRl
ciogZ2V0dGVyU2V0dGVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChnZXR0ZXJGdW5jKTsKLSAgICAgICAg
ICAgIG1fZ2V0VmFsdWUgPSBHRVRURVJfRlVOQ1RJT05fTUFSS0VSOwotICAgICAgICAgICAgbV90
aGlzVmFsdWUgPSBtX3Nsb3RCYXNlOworICAgICAgICAgICAgQVNTRVJUKGdldHRlclNldHRlcik7
CisgICAgICAgICAgICBtX2RhdGEuYWNjZXNzb3IudGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZW5jb2Rl
KG1fc2xvdEJhc2UpOwogICAgICAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOwotICAgICAg
ICAgICAgbV9kYXRhLmdldHRlckZ1bmMgPSBnZXR0ZXJGdW5jOworICAgICAgICAgICAgbV9kYXRh
LmFjY2Vzc29yLmdldHRlclNldHRlciA9IGdldHRlclNldHRlcjsKICAgICAgICAgICAgIG1fb2Zm
c2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgbV9jYWNoZWRQcm9wZXJ0eVR5cGUgPSBHZXR0ZXI7
CisgICAgICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IEdldHRlcjsKKyAgICAgICAgICAgIG1fY2Fj
aGVhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAg
ICAgICAgIH0KIAogICAgICAgICB2b2lkIHNldFVuZGVmaW5lZCgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgc2V0VmFsdWVXaXRo
QXR0cmlidXRlcyhqc1VuZGVmaW5lZCgpLCBOb25lKTsKICAgICAgICAgfQogCiAgICAgICAgIEpT
VmFsdWUgc2xvdEJhc2UoKSBjb25zdApAQCAtMTk2LDQ1ICsyMjAsNjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgY2xlYXJWYWx1ZSgpCi0gICAg
ICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwot
I2VuZGlmCi0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGNsZWFyT2Zmc2V0KCkKICAgICAgICAg
ewogICAgICAgICAgICAgLy8gQ2xlYXIgb2Zmc2V0IGV2ZW4gaW4gcmVsZWFzZSBidWlsZHMsIGlu
IGNhc2UgdGhpcyBQcm9wZXJ0eVNsb3QgaGFzIGJlZW4gdXNlZCBiZWZvcmUuCiAgICAgICAgICAg
ICAvLyAoRm9yIG90aGVyIGRhdGEgbWVtYmVycywgd2UgZG9uJ3QgbmVlZCB0byBjbGVhciBhbnl0
aGluZyBiZWNhdXNlIHJldXNlIHdvdWxkIG1lYW5pbmdmdWxseSBvdmVyd3JpdGUgdGhlbS4pCiAg
ICAgICAgICAgICBtX29mZnNldCA9IGludmFsaWRPZmZzZXQ7Ci0gICAgICAgICAgICBtX2NhY2hl
ZFByb3BlcnR5VHlwZSA9IFVuY2FjaGVhYmxlOworICAgICAgICAgICAgbV9wcm9wZXJ0eVR5cGUg
PSBVbmNhY2hlYWJsZTsKKyAgICAgICAgICAgIG1fY2FjaGVhYmxlID0gZmFsc2U7CiAgICAgICAg
IH0KIAotICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pbmRl
eDsgfQotCiAgICAgICAgIEdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIoKSBjb25zdAogICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jYWNoZWRQcm9wZXJ0eVR5cGUgPT0gQ3VzdG9tKTsK
LSAgICAgICAgICAgIHJldHVybiBtX2dldFZhbHVlOworICAgICAgICAgICAgQVNTRVJUKG1fY2Fj
aGVhYmxlICYmIG1fcHJvcGVydHlUeXBlID09IEN1c3RvbSk7CisgICAgICAgICAgICByZXR1cm4g
bV9kYXRhLmN1c3RvbS5nZXRWYWx1ZTsKICAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICAgICAgYm9vbCB3
cml0YWJsZSgpIGNvbnN0IHsgcmV0dXJuICEobV9hdHRyaWJ1dGVzICYgUmVhZE9ubHkpOyB9Cisg
ICAgICAgIGJvb2wgZW51bWVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEobV9hdHRyaWJ1dGVzICYg
RG9udEVudW0pOyB9CisgICAgICAgIGJvb2wgY29uZmlndXJhYmxlKCkgY29uc3QgeyByZXR1cm4g
IShtX2F0dHJpYnV0ZXMgJiBEb250RGVsZXRlKTsgfQorCisgICAgICAgIGJvb2wgaXNBY2Nlc3Nv
cigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlUeXBlID09IEdldHRlcjsgfQorICAgICAgICBH
ZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChpc0FjY2Vzc29yKCkpOworICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5hY2Nlc3Nv
ci5nZXR0ZXJTZXR0ZXI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEluR2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKCkgeyBtX2luR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gdHJ1ZTsg
fQorICAgICAgICBib29sIGluR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgfQorCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBmdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqKSBj
b25zdDsKIAotICAgICAgICBHZXRWYWx1ZUZ1bmMgbV9nZXRWYWx1ZTsKLSAgICAgICAgR2V0SW5k
ZXhWYWx1ZUZ1bmMgbV9nZXRJbmRleFZhbHVlOwotICAgICAgICAKICAgICAgICAgSlNWYWx1ZSBt
X3Nsb3RCYXNlOwogICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBKU09iamVjdCogZ2V0dGVy
RnVuYzsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICAgICAgc3RydWN0IHsK
KyAgICAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcjsKKyAgICAgICAgICAg
ICAgICBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWU7CisgICAgICAgICAgICB9IGFjY2Vzc29yOwor
ICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBHZXRWYWx1ZUZ1bmMgZ2V0VmFs
dWU7CisgICAgICAgICAgICB9IGN1c3RvbTsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICAgICAgR2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5kZXhWYWx1ZTsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbmRleDsKKyAgICAgICAgICAgIH0gY3VzdG9tSW5kZXg7CisgICAgICAgICAg
ICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAgfSBtX2RhdGE7CiAKLSAgICAgICAgSlNW
YWx1ZSBtX3ZhbHVlOwotICAgICAgICBKU1ZhbHVlIG1fdGhpc1ZhbHVlOwotCiAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwotICAgICAgICBDYWNoZWRQcm9wZXJ0eVR5cGUgbV9jYWNo
ZWRQcm9wZXJ0eVR5cGU7CisgICAgICAgIENhY2hlZFByb3BlcnR5VHlwZSBtX3Byb3BlcnR5VHlw
ZTsKKyAgICAgICAgdWludDhfdCBtX2F0dHJpYnV0ZXM7CisgICAgICAgIGJvb2wgbV9jYWNoZWFi
bGU7CisgICAgICAgIGJvb2wgbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU4LDExICsxNTgsNiBAQCBib29sIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRP
d25Qcm9wZXJ0eVNsCiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxSZWdFeHBDb25zdHJ1
Y3RvciwgSW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgRXhlY1N0YXRlOjpyZWdFeHBDb25zdHJ1Y3Rv
clRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhwQ29uc3RydWN0b3IqPihjZWxsKSwgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAotYm9vbCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJl
dHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8UmVnRXhwQ29uc3RydWN0b3IsIEludGVybmFs
RnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZShleGVjKSwg
anNDYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKTsKLX0KLQogSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjEoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIGFzUmVn
RXhwQ29uc3RydWN0b3Ioc2xvdEJhc2UpLT5nZXRCYWNrcmVmKGV4ZWMsIDEpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5
LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCwxMyArODQsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJl
Z0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVzQXJyYXkq
PihvYmplY3QpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQcm9wZXJ0aWVzSWZO
ZWNlc3NhcnkoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
Ci0gICAgICAgIH0KLQogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdiwgUHV0UHJv
cGVydHlTbG90JiBzbG90KQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4oY2VsbCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJl
dmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDIyICs5MywxMiBAQCBib29sIFJlZ0V4cE9i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KSB7CiAgICAgICAgIFJlZ0V4cE9iamVjdCog
cmVnRXhwID0gYXNSZWdFeHBPYmplY3QoY2VsbCk7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUocmVn
RXhwLCByZWdFeHAtPmdldExhc3RJbmRleCgpKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhC
YXNlKHJlZ0V4cCwgcmVnRXhwLT5nZXRMYXN0SW5kZXgoKSwgcmVnRXhwLT5tX2xhc3RJbmRleElz
V3JpdGFibGUgPyBEb250RGVsZXRlIHwgRG9udEVudW0gOiBEb250RGVsZXRlIHwgRG9udEVudW0g
fCBSZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZ2V0
U3RhdGljVmFsdWVTbG90PFJlZ0V4cE9iamVjdCwgSlNPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6
cmVnRXhwVGFibGUoZXhlYyksIGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjZWxsKSwgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAotYm9vbCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpIHsKLSAgICAgICAg
UmVnRXhwT2JqZWN0KiByZWdFeHAgPSBhc1JlZ0V4cE9iamVjdChvYmplY3QpOwotICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IocmVnRXhwLT5nZXRMYXN0SW5kZXgoKSwgcmVnRXhwLT5t
X2xhc3RJbmRleElzV3JpdGFibGUgPyBEb250RGVsZXRlIHwgRG9udEVudW0gOiBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBSZWFkT25seSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPFJlZ0V4cE9iamVjdCwgSlNPYmplY3Q+
KGV4ZWMsIEV4ZWNTdGF0ZTo6cmVnRXhwVGFibGUoZXhlYyksIGpzQ2FzdDxSZWdFeHBPYmplY3Qq
PihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiBib29sIFJlZ0V4cE9i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3
ICs3MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGV4ZWMoRXhlY1N0YXRl
KiwgSlNTdHJpbmcqKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICAgICAgc3RhdGlj
IHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAsMTEgKzcwLDYgQEAgYm9vbCBSZWdFeHBQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdAog
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8UmVnRXhwT2JqZWN0PihleGVjLCBFeGVj
U3RhdGU6OnJlZ0V4cFByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhwUHJvdG90eXBl
Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgUmVnRXhwUHJvdG90eXBl
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxSZWdFeHBP
YmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6cmVnRXhwUHJvdG90eXBlVGFibGUoZXhlYyksIGpzQ2Fz
dDxSZWdFeHBQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwot
fQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvRnVuY1Rlc3QoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwx
NyArMTI4LDExIEBAIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYKICAg
ICBBU1NFUlQodmFsdWUpOwogCiAgICAgaWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIo
KSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIHNsb3Quc2V0VmFs
dWVXaXRoQXR0cmlidXRlcyh2YWx1ZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0
ZXIoKTsKLSAgICBpZiAoIWdldHRlcikgewotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7
CisgICAgc2xvdC5zZXRBY2Nlc3NvclNsb3QoYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLCBhdHRyaWJ1
dGVzKTsKIH0KIAogdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NSwxMSArNjUsNiBAQCBib29sIFN0cmluZ0NvbnN0cnVjdG9yOjpnZXRPd25Q
cm9wZXJ0eVNsCiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxJbnRlcm5hbEZ1bmN0
aW9uPihleGVjLCBFeGVjU3RhdGU6OnN0cmluZ0NvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2Fz
dDxTdHJpbmdDb25zdHJ1Y3Rvcio+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1i
b29sIFN0cmluZ0NvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0
aW9uRGVzY3JpcHRvcjxJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OnN0cmluZ0Nv
bnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxTdHJpbmdDb25zdHJ1Y3Rvcio+KG9iamVjdCks
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
c3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVlIHN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKEV4
ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIENhbGxUeXBlIGdl
dENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDE0ICs2MCw2IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUkKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOwogfQog
Ci1ib29sIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFN0cmluZ09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwotICAgIGlmICh0aGlzT2JqZWN0LT5p
bnRlcm5hbFZhbHVlKCktPmdldFN0cmluZ1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsgICAgCi0gICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBTdHJpbmdPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTUzLDExICsxNTMsNiBAQCBib29sIFN0cmluZ1Byb3RvdHlwZTo6Z2V0T3duUHJv
cGVydHlTbG90CiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxTdHJpbmdPYmplY3Q+
KGV4ZWMsIEV4ZWNTdGF0ZTo6c3RyaW5nVGFibGUoZXhlYyksIGpzQ2FzdDxTdHJpbmdQcm90b3R5
cGUqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBTdHJpbmdQcm90b3R5
cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPFN0cmlu
Z09iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpzdHJpbmdUYWJsZShleGVjKSwganNDYXN0PFN0cmlu
Z1Byb3RvdHlwZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogLy8gSGVscGVyIGZvciBwcm9kdWNpbmcgYSBKU1N0cmluZyBmb3IgJ3N0
cmluZycsIHdoZXJlICdzdHJpbmcnIHdhcyBiZWVuIHByb2R1Y2VkIGJ5CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkocmV2aXNpb24g
MTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE0MDI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDksOCArMjQ5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9v
bCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKIAotICAgICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoSlNHbG9iYWxEYXRhJiwgUHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0
IFdURjo6U3RyaW5nJiBuYW1lKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFs
RGF0YSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQqIGF0dHJpYnV0ZXMgPSAwKTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1l
LCB1bnNpZ25lZCogYXR0cmlidXRlcyA9IDApOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQ
cm9wZXJ0eU9mZnNldCBnZXQoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYg
YXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CiAKICAgICAgICAgYm9vbCBoYXNH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzOyB9CkBAIC00NzksNyArNDc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiBuZXdTdHJ1Y3R1cmU7CiAgICAgfQogICAgICAgICAKLSAgICBpbmxpbmUgUHJvcGVy
dHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQorICAgIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OmdldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkKiBhdHRyaWJ1dGVzKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwpAQCAtNDg3LDEwICs0ODcsMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgICAgICBQcm9w
ZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IG1fcHJvcGVydHlUYWJsZS0+ZmluZChwcm9wZXJ0eU5hbWUu
dWlkKCkpLmZpcnN0OwotICAgICAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52
YWxpZE9mZnNldDsKKyAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgIHJldHVybiBpbnZh
bGlkT2Zmc2V0OworICAgICAgICBpZiAoYXR0cmlidXRlcykKKyAgICAgICAgICAgICphdHRyaWJ1
dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7CisgICAgICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0Owog
ICAgIH0KIAotICAgIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKQorICAgIGlubGluZSBQ
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IFdURjo6U3RyaW5nJiBuYW1lLCB1bnNpZ25lZCogYXR0cmlidXRlcykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgICAg
IG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKQEAgLTQ5OCw3
ICs1MDIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9m
ZnNldDsKIAogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IG1fcHJvcGVydHlUYWJs
ZS0+ZmluZFdpdGhTdHJpbmcobmFtZS5pbXBsKCkpLmZpcnN0OwotICAgICAgICByZXR1cm4gZW50
cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52YWxpZE9mZnNldDsKKyAgICAgICAgaWYgKCFlbnRyeSkK
KyAgICAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworICAgICAgICBpZiAoYXR0cmlidXRl
cykKKyAgICAgICAgICAgICphdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7CisgICAgICAg
IHJldHVybiBlbnRyeS0+b2Zmc2V0OwogICAgIH0KICAgICAKICAgICBpbmxpbmUgYm9vbCBTdHJ1
Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDAzMDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MyBAQAorMjAxMy0wMS0y
MCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIGdldE93blByb3BlcnR5RGVzY3JpcHRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwcmFjdGljYWxseSByZWR1bmRhbnQgd2l0
aCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAgICAgICAgICAtIHJlbW92ZSBhbGwgaW1wbGVtZW50
YXRpb25zIG9mIGdldE93blByb3BlcnR5RGVzY3JpcHRvci4KKyAgICAgICAgICAgIC0gcGFzcyBh
dHRyaWJ1dGVzIHRvIGdldE93blByb3BlcnR5U2xvdC4KKyAgICAgICAgICAgIC0gcmVuYW1lZCBK
U0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsIHJlbW92ZWQKKyAgICAgICAg
ICAgICAgJ0FuZERlc2NyaXB0b3InLgorICAgICAgICAgICAgLSBhZGRlZCBhIHdvcmthcm91bmQg
dG8gSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdCwKKyAgICAgICAgICAgICAgZ2V0T3du
UHJvcGVydHlTbG90IGRvZXMgbm90IGJlaGF2ZSBjb3JyZWN0bHkgd3J0ICdvd24nbmVzcywKKyAg
ICAgICAgICAgICAgcmV0dXJucyBwcm9wZXJ0aWVzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uIE1h
aW50YWluIHByZXZpb3VzCisgICAgICAgICAgICAgIGJlaGF2aW91ciBmb3IgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxFbWJl
ZEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVu
dEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0Q3VzdG9tR2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OnJ1bnRpbWVPYmplY3RDdXN0b21H
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2lu
RWxlbWVudEZ1bmN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2Vu
ZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToK
KyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDb25z
dHJ1Y3RvckRlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJN
ZXRob2RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0Ogor
ICAgICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpJbnN0YW5jZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9v
YmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKE9iamNGYWxsYmFja09iamVjdEltcCk6CisgICAgICAg
ICogYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoQmluZGluZ3MpOgorICAg
ICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZUFy
cmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
UnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKiBicmlk
Z2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAoUnVudGltZUFycmF5KToKKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0aG9kOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBicmlkZ2UvcnVu
dGltZV9tZXRob2QuaDoKKyAgICAgICAgKFJ1bnRpbWVNZXRob2QpOgorICAgICAgICAqIGJyaWRn
ZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoQmluZGluZ3MpOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX29iamVjdC5oOgorICAgICAgICAoUnVudGltZU9iamVjdCk6CisgICAg
ICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEFw
cGxldEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGw6Cisg
ICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5pZGw6CisgICAgICAgICogcGFnZS9IaXN0
b3J5LmlkbDoKKyAgICAgICAgKiBwYWdlL0xvY2F0aW9uLmlkbDoKKyAgICAgICAgKiB3b3JrZXJz
L1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDEzLTAxLTIwICBNaWtlIExhd3RoZXIgIDxtaWtlbGF3
dGhlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ1NTMyBjYWxjOiB1bnByZWZpeCBpbXBsZW1l
bnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNDc5LDcgKzI0
NzksNiBAQCBfX1pON1dlYkNvcmU0UGFnZTE4c2V0VmlzaWJpbGl0eVN0YXRlRU5TCiBfX1pOM0pT
QzEzUnVudGltZU1ldGhvZDExZ2V0Q2FsbERhdGFFUE5TXzZKU0NlbGxFUk5TXzhDYWxsRGF0YUUK
IF9fWk4zSlNDMTNSdW50aW1lTWV0aG9kMTRmaW5pc2hDcmVhdGlvbkVSTlNfMTJKU0dsb2JhbERh
dGFFUktOM1dURjZTdHJpbmdFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDE4Z2V0T3duUHJvcGVy
dHlTbG90RVBOU182SlNDZWxsRVBOU185RXhlY1N0YXRlRU5TXzEyUHJvcGVydHlOYW1lRVJOU18x
MlByb3BlcnR5U2xvdEUKLV9fWk4zSlNDMTNSdW50aW1lTWV0aG9kMjRnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JFUE5TXzhKU09iamVjdEVQTlNfOUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVS
TlNfMThQcm9wZXJ0eURlc2NyaXB0b3JFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDZzX2luZm9F
CiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZEMyRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3Ry
dWN0dXJlRVBOU184QmluZGluZ3M2TWV0aG9kRQogX19aTjNKU0M4QmluZGluZ3MxMFJvb3RPYmpl
Y3REMUV2CkBAIC0yNDkwLDcgKzI0ODksNiBAQCBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9i
amVjdDE0ZmluaXNoCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdDE2Z2V0Q29uc3Ry
dWN0RGF0YUVQTlNfNkpTQ2VsbEVSTlNfMTNDb25zdHJ1Y3REYXRhRQogX19aTjNKU0M4QmluZGlu
Z3MxM1J1bnRpbWVPYmplY3QxOGdldE93blByb3BlcnR5U2xvdEVQTlNfNkpTQ2VsbEVQTlNfOUV4
ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzhC
aW5kaW5nczEzUnVudGltZU9iamVjdDE5Z2V0T3duUHJvcGVydHlOYW1lc0VQTlNfOEpTT2JqZWN0
RVBOU185RXhlY1N0YXRlRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5RU5TXzE1RW51bWVyYXRpb25N
b2RlRQotX19aTjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3QyNGdldE93blByb3BlcnR5RGVz
Y3JpcHRvckVQTlNfOEpTT2JqZWN0RVBOU185RXhlY1N0YXRlRU5TXzEyUHJvcGVydHlOYW1lRVJO
U18xOFByb3BlcnR5RGVzY3JpcHRvckUKIF9fWk4zSlNDOEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0
M3B1dEVQTlNfNkpTQ2VsbEVQTlNfOUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVOU183SlNW
YWx1ZUVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9i
amVjdDZzX2luZm9FCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdDdkZXN0cm95RVBO
U182SlNDZWxsRQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxNDAyOTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsMjQgKzMyOCw5IEBAIGJvb2wgSlNDU1NTdHlsZURl
Y2xhcmF0aW9uOjpnZXRPd25Qcm9wZXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KHByb3BlcnR5SW5mby5oYWRQaXhlbE9yUG9zUHJlZml4KQotICAgICAgICBzbG90LnNldEN1c3Rv
bUluZGV4KHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwcm9wZXJ0eUluZm8ucHJvcGVydHlJ
RCksIGNzc1Byb3BlcnR5R2V0dGVyUGl4ZWxPclBvc1ByZWZpeENhbGxiYWNrKTsKKyAgICAgICAg
c2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlJ
bmZvLnByb3BlcnR5SUQpLCBjc3NQcm9wZXJ0eUdldHRlclBpeGVsT3JQb3NQcmVmaXhDYWxsYmFj
aywgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIGVsc2UKLSAgICAgICAg
c2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlJ
bmZvLnByb3BlcnR5SUQpLCBjc3NQcm9wZXJ0eUdldHRlckNhbGxiYWNrKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvckRlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlByb3BlcnR5TmFtZSBw
cm9wZXJ0eUlkZW50aWZpZXIsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQot
ewotICAgIENTU1Byb3BlcnR5SW5mbyBwcm9wZXJ0eUluZm8gPSBjc3NQcm9wZXJ0eUlERm9ySlND
U1NQcm9wZXJ0eU5hbWUocHJvcGVydHlJZGVudGlmaWVyKTsKLSAgICBpZiAoIXByb3BlcnR5SW5m
by5wcm9wZXJ0eUlEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU1ZhbHVlIHZhbHVl
OwotICAgIGlmIChwcm9wZXJ0eUluZm8uaGFkUGl4ZWxPclBvc1ByZWZpeCkKLSAgICAgICAgdmFs
dWUgPSBjc3NQcm9wZXJ0eUdldHRlclBpeGVsT3JQb3NQcmVmaXgoZXhlYywgdGhpcywgcHJvcGVy
dHlJbmZvLnByb3BlcnR5SUQpOwotICAgIGVsc2UKLSAgICAgICAgdmFsdWUgPSBjc3NQcm9wZXJ0
eUdldHRlcihleGVjLCB0aGlzLCBwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCk7Ci0gICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51
bSk7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKSwgY3NzUHJvcGVydHlHZXR0ZXJDYWxsYmFjaywg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIHJldHVybiB0cnVlOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCwxMiArMTQwLDEyIEBA
IGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICAgICAgLy8gSXQg
aWdub3JlcyBhbnkgY3VzdG9tIHByb3BlcnRpZXMgdGhhdCBtaWdodCBiZSBzZXQgb24gdGhlIERP
TVdpbmRvdyAoaW5jbHVkaW5nIGEgY3VzdG9tIHByb3RvdHlwZSkuCiAgICAgICAgIGVudHJ5ID0g
c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIGlmIChlbnRyeSAmJiAhKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9u
KSAmJiBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSA9PSBqc0RPTVdpbmRvd0Nsb3NlZCkgewotICAg
ICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVy
KCkpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3Bl
cnR5R2V0dGVyKCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVudHJ5ID0gSlNET01XaW5kb3dQ
cm90b3R5cGU6OnNfaW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICBpZiAoZW50cnkgJiYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6
OkZ1bmN0aW9uKSAmJiBlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1
bmN0aW9uQ2xvc2UpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5v
bkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9u
Q2xvc2UsIDA+KTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNh
Y2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xv
c2UsIDA+LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xNzUsMjIgKzE3NSwyMiBAQCBib29sIEpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgICAgIGlmIChlbnRyeS0+YXR0cmli
dXRlcygpICYgSlNDOjpGdW5jdGlvbikgewogICAgICAgICAgICAgaWYgKGVudHJ5LT5mdW5jdGlv
bigpID09IGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25CbHVyKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFhbGxvd3NBY2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93
UHJvdG90eXBlRnVuY3Rpb25CbHVyLCAwPik7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcjxqc0RPTVdp
bmRvd1Byb3RvdHlwZUZ1bmN0aW9uQmx1ciwgMD4sIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzRE9NV2luZG93UHJvdG90eXBl
RnVuY3Rpb25DbG9zZSkgewogICAgICAgICAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdT
dGF0aWNGdW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UsIDA+
KTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2Fj
aGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9z
ZSwgMD4sIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5m
dW5jdGlvbigpID09IGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25Gb2N1cykgewogICAgICAg
ICAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcjxqc0RP
TVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uRm9jdXMsIDA+KTsKKyAgICAgICAgICAgICAgICAgICAg
c2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVy
PGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25Gb2N1cywgMD4sIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzRE9NV2luZG93
UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZSkgewogICAgICAgICAgICAgICAgIGlmICghYWxs
b3dzQWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmpl
Y3QsIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1
bmN0aW9uUG9zdE1lc3NhZ2UsIDI+KTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93
UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZSwgMj4sIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzRE9NV2luZG93UHJvdG90
eXBlRnVuY3Rpb25TaG93TW9kYWxEaWFsb2cpIHsKQEAgLTIwNCw3ICsyMDQsNyBAQCBib29sIEpT
RE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgICAgIC8vIEFsbG93IGFjY2Vz
cyB0byB0b1N0cmluZygpIGNyb3NzLWRvbWFpbiwgYnV0IGFsd2F5cyBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nLgogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS50b1N0cmluZykgewogICAgICAgICAgICAgaWYgKCFhbGxvd3NBY2Nlc3MpIHsKLSAgICAg
ICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBvYmplY3RUb1N0cmluZ0Z1bmN0
aW9uR2V0dGVyKTsKKyAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBv
YmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250
RW51bSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTIxMiw3ICsyMTIsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDCiAKICAgICBlbnRyeSA9IEpTRE9NV2luZG93OjpzX2luZm8ucHJvcEhhc2hUYWJs
ZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkpIHsKLSAg
ICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkp
OworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0
ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMjIyLDcgKzIyMiw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xv
dChKU0MKICAgICAvLyBhcmUgaW4gTW96IGJ1dCBub3QgSUUuIFNpbmNlIHdlIGhhdmUgc29tZSBv
ZiB0aGVzZSwgd2UgaGF2ZSB0byBkbwogICAgIC8vIGl0IHRoZSBNb3ogd2F5LgogICAgIGlmICh0
aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hpbGQocHJvcGVydHlO
YW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSkpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgY2hpbGRGcmFtZUdldHRlcik7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXNPYmplY3QsIGNoaWxkRnJhbWVHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yMzAsNyArMjMwLDEy
IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICAvLyBwcmVj
ZWRlbmNlIG92ZXIgdGhlIGluZGV4IGFuZCBuYW1lIGdldHRlcnMuICAKICAgICBKU1ZhbHVlIHBy
b3RvID0gdGhpc09iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgaWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpIHsKKyAgICAgICAgLy8gV29ya2Fyb3VuZCB0byBrZWVwIGdldE93
blByb3BlcnR5RGVzY3JpcHRvciB3b3JraW5nOyByZXR1cm4gZmFsc2UgaWYgdGhlIHByb3BlcnR5
IGlzIG5vdCByZWFsbHkgJ293bicuCisgICAgICAgIGlmIChzbG90LmluR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIFByb3BlcnR5U2xvdCBwcm90b1Nsb3Q7CisgICAg
ICAgICAgICBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBwcm90b1Nsb3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfSBlbHNlIGlmIChhc09iamVjdChwcm90byktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpKSB7CiAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgewogICAg
ICAgICAgICAgICAgIHRoaXNPYmplY3QtPnByaW50RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7
CiAgICAgICAgICAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKQEAgLTI0Niw3ICsyNTEsNyBA
QCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgdW5zaWduZWQg
aSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5pbXBs
KCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hpbGRDb3VudCgpKSB7CiAgICAgICAgIEFTU0VS
VChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9t
SW5kZXgodGhpc09iamVjdCwgaSwgaW5kZXhHZXR0ZXIpOworICAgICAgICBzbG90LnNldEN1c3Rv
bUluZGV4KHRoaXNPYmplY3QsIGksIGluZGV4R2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUg
fCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjYxLDcgKzI2
Niw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICBpZiAo
ZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCog
YXRvbWljUHJvcGVydHlOYW1lID0gZmluZEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpOwogICAg
ICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQq
Pihkb2N1bWVudCktPmhhc05hbWVkSXRlbShhdG9taWNQcm9wZXJ0eU5hbWUpIHx8IGRvY3VtZW50
LT5oYXNFbGVtZW50V2l0aElkKGF0b21pY1Byb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lZEl0ZW1HZXR0ZXIpOworICAgICAgICAgICAg
c2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZWRJdGVtR2V0dGVyLCBSZWFkT25seSB8IERv
bnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KQEAgLTI5OSw3ICszMDQsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluCiAgICAgLy8gYXJlIGluIE1veiBidXQgbm90IElFLiBTaW5jZSB3ZSBoYXZl
IHNvbWUgb2YgdGhlc2UsIHdlIGhhdmUgdG8gZG8KICAgICAvLyBpdCB0aGUgTW96IHdheS4KICAg
ICBpZiAodGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkKHBy
b3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNoaWxkRnJhbWVHZXR0ZXIpOworICAgICAgICBzbG90LnNl
dEN1c3RvbSh0aGlzT2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTMw
Nyw3ICszMTIsMTIgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgog
ICAgIC8vIHByZWNlZGVuY2Ugb3ZlciB0aGUgaW5kZXggYW5kIG5hbWUgZ2V0dGVycy4gIAogICAg
IEpTVmFsdWUgcHJvdG8gPSB0aGlzT2JqZWN0LT5wcm90b3R5cGUoKTsKICAgICBpZiAocHJvdG8u
aXNPYmplY3QoKSkgewotICAgICAgICBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNs
b3QoZXhlYywgaW5kZXgsIHNsb3QpKSB7CisgICAgICAgIC8vIFdvcmthcm91bmQgdG8ga2VlcCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Igd29ya2luZzsgcmV0dXJuIGZhbHNlIGlmIHRoZSBwcm9w
ZXJ0eSBpcyBub3QgcmVhbGx5ICdvd24nLgorICAgICAgICBpZiAoc2xvdC5pbkdldE93blByb3Bl
cnR5RGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3QgcHJvdG9TbG90Owor
ICAgICAgICAgICAgaWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgcHJvdG9TbG90KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0gZWxzZSBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
aW5kZXgsIHNsb3QpKSB7CiAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgewogICAgICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPnByaW50RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CiAg
ICAgICAgICAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKQEAgLTMyMiw3ICszMzIsNyBAQCBi
b29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluCiAgICAgLy8gYWxsb3cgd2lu
ZG93WzFdIG9yIHBhcmVudFsxXSBldGMuICgjNTY5ODMpCiAgICAgaWYgKGluZGV4IDwgdGhpc09i
amVjdC0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkQ291bnQoKSkgewogICAg
ICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKLSAgICAgICAg
c2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpOworICAg
ICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCBpbmRleEdldHRlciwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKQEAgLTMzNyw3ICszNDcsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluCiAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAg
ICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9taWNTdHJp
bmcocHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiAoc3Rh
dGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJv
cGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQcm9wZXJ0eU5h
bWUpKSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZWRJdGVt
R2V0dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVkSXRl
bUdldHRlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDUsNzkgKzM1NSw2IEBAIGJvb2wg
SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW4KICAgICByZXR1cm4gQmFzZTo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7CiB9
CiAKLWJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBKU0RPTVdpbmRvdyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7Ci0gICAgLy8gTmV2ZXIgYWxsb3cgY3Jv
c3MtZG9tYWluIGdldE93blByb3BlcnR5RGVzY3JpcHRvcgotICAgIGlmICghQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwo
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnk7
Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCBhbnkgcHJvcGVydGllcyBvdGhlciB0aGFuICJj
bG9zZSIgYW5kICJjbG9zZWQiIG9uIGEgY2xvc2VkIHdpbmRvdy4KLSAgICBpZiAoIXRoaXNPYmpl
Y3QtPmltcGwoKS0+ZnJhbWUoKSkgewotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaXMg
c2FmZSBmb3IgY3Jvc3MtZG9tYWluIGFuZCBzYW1lIGRvbWFpbiB1c2UuCi0gICAgICAgIC8vIEl0
IGlnbm9yZXMgYW55IGN1c3RvbSBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgYmUgc2V0IG9uIHRoZSBE
T01XaW5kb3cgKGluY2x1ZGluZyBhIGN1c3RvbSBwcm90b3R5cGUpLgotICAgICAgICBlbnRyeSA9
IHNfaW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICBpZiAoZW50cnkgJiYgIShlbnRyeS0+YXR0cmlidXRlcygpICYgSlNDOjpGdW5jdGlv
bikgJiYgZW50cnktPnByb3BlcnR5R2V0dGVyKCkgPT0ganNET01XaW5kb3dDbG9zZWQpIHsKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc0Jvb2xlYW4odHJ1ZSksIFJlYWRP
bmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGVudHJ5ID0gSlNET01XaW5kb3dQcm90b3R5cGU6OnNfaW5mby5w
cm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBp
ZiAoZW50cnkgJiYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSAmJiBlbnRy
eS0+ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UpIHsKLSAg
ICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJv
dG90eXBlRnVuY3Rpb25DbG9zZSwgMD4pOwotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250
RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgZW50cnkgPSBKU0RPTVdpbmRvdzo6c19pbmZvLnByb3BIYXNoVGFibGUo
ZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0
LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9y
IGNoaWxkIGZyYW1lcyBieSBuYW1lIGJlZm9yZSBidWlsdC1pbiBwcm9wZXJ0aWVzIHRvCi0gICAg
Ly8gbWF0Y2ggTW96aWxsYS4gVGhpcyBkb2VzIG5vdCBtYXRjaCBJRSwgYnV0IHNvbWUgc2l0ZXMg
ZW5kIHVwCi0gICAgLy8gbmFtaW5nIGZyYW1lcyB0aGluZ3MgdGhhdCBjb25mbGljdCB3aXRoIHdp
bmRvdyBwcm9wZXJ0aWVzIHRoYXQKLSAgICAvLyBhcmUgaW4gTW96IGJ1dCBub3QgSUUuIFNpbmNl
IHdlIGhhdmUgc29tZSBvZiB0aGVzZSwgd2UgaGF2ZSB0byBkbwotICAgIC8vIGl0IHRoZSBNb3og
d2F5LgotICAgIGlmICh0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVk
Q2hpbGQocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSkpIHsKLSAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3Qs
IGNoaWxkRnJhbWVHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xv
dC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25l
ZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPmlt
cGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5zY29wZWRDaGlsZENvdW50KCkpIHsKLSAgICAgICAgQVNT
RVJUKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKLSAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaSwgaW5kZXhH
ZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShl
eGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIEFsbG93IHNob3J0Y3V0cyBsaWtl
ICdJbWFnZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAg
ICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgQXRvbWljU3RyaW5n
SW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gZmluZEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUp
OwotICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIChzdGF0aWNfY2FzdDxIVE1MRG9j
dW1lbnQqPihkb2N1bWVudCktPmhhc05hbWVkSXRlbShhdG9taWNQcm9wZXJ0eU5hbWUpIHx8IGRv
Y3VtZW50LT5oYXNFbGVtZW50V2l0aElkKGF0b21pY1Byb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNP
YmplY3QsIG5hbWVkSXRlbUdldHRlcik7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnRE
ZWxldGUgfCBEb250RW51bSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZvaWQgSlNE
T01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxB
cHBsZXRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDExICszOCw2IEBAIGJvb2wgSlNIVE1MQXBwbGV0RWxlbWVudDo6Z2V0T3duUHJv
cGVydHkKICAgICByZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdDxK
U0hUTUxBcHBsZXRFbGVtZW50LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMp
OwogfQogCi1ib29sIEpTSFRNTEFwcGxldEVsZW1lbnQ6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
ckRlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBwbHVnaW5FbGVtZW50
Q3VzdG9tR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPEpTSFRNTEFwcGxldEVsZW1lbnQsIEJhc2U+
KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhpcyk7Ci19Ci0KIGJvb2wgSlNIVE1M
QXBwbGV0RWxlbWVudDo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgdGhpcywgc2xvdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxF
bWJlZEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCw2IEBAIGJvb2wgSlNIVE1MRW1iZWRFbGVtZW50
OjpnZXRPd25Qcm9wZXJ0eVMKICAgICByZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blBy
b3BlcnR5U2xvdDxKU0hUTUxFbWJlZEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCwgdGhpcyk7CiB9CiAKLWJvb2wgSlNIVE1MRW1iZWRFbGVtZW50OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3JEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gcGx1
Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5RGVzY3JpcHRvcjxKU0hUTUxFbWJlZEVsZW1l
bnQsIEJhc2U+KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhpcyk7Ci19Ci0KIGJv
b2wgSlNIVE1MRW1iZWRFbGVtZW50OjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbVB1dChleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCB0aGlzLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAx
NDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDYgQEAgYm9vbCBKU0hUTUxP
YmplY3RFbGVtZW50OjpnZXRPd25Qcm9wZXJ0eQogICAgIHJldHVybiBwbHVnaW5FbGVtZW50Q3Vz
dG9tR2V0T3duUHJvcGVydHlTbG90PEpTSFRNTE9iamVjdEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgdGhpcyk7CiB9CiAKLWJvb2wgSlNIVE1MT2JqZWN0RWxlbWVudDo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0g
ICAgcmV0dXJuIHBsdWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I8SlNI
VE1MT2JqZWN0RWxlbWVudCwgQmFzZT4oZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0
aGlzKTsKLX0KLQogYm9vbCBKU0hUTUxPYmplY3RFbGVtZW50OjpwdXREZWxlZ2F0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbVB1dChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCB0aGlzLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwMjk3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzAsMjAgKzcwLDIwIEBAIGJvb2wgSlNIaXN0b3J5OjpnZXRPd25Qcm9w
ZXJ0eVNsb3REZWxlZ2EKICAgICAgICAgLy8gQWxsb3cgYWNjZXNzIHRvIGJhY2soKSwgZm9yd2Fy
ZCgpIGFuZCBnbygpIGZyb20gYW55IGZyYW1lLgogICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0
ZXMoKSAmIEpTQzo6RnVuY3Rpb24pIHsKICAgICAgICAgICAgIGlmIChlbnRyeS0+ZnVuY3Rpb24o
KSA9PSBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkJhY2spIHsKLSAgICAgICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKTsK
KyAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljQmFj
a0Z1bmN0aW9uR2V0dGVyLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0g
anNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Gb3J3YXJkKSB7Ci0gICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcik7
CisgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY0Zv
cndhcmRGdW5jdGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigp
ID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uR28pIHsKLSAgICAgICAgICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlcik7CisgICAg
ICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY0dvRnVuY3Rp
b25HZXR0ZXIsIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8g
QWxsb3cgYWNjZXNzIHRvIHRvU3RyaW5nKCkgY3Jvc3MtZG9tYWluLCBidXQgYWx3YXlzIE9iamVj
dC50b1N0cmluZy4KICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkudG9TdHJpbmcpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG9iamVj
dFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhp
cywgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTkzLDUxICs5Myw2
IEBAIGJvb2wgSlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2EKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBKU0hpc3Rvcnk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVn
YXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIGlmICghaW1wbCgpLT5mcmFtZSgpKSB7Ci0g
ICAgICAgIGRlc2NyaXB0b3Iuc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIC8vIFRocm93IG91dCBhbGwgY3Jvc3MgZG9tYWluIGFjY2VzcwotICAgIGlm
ICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIGltcGwoKS0+ZnJhbWUoKSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQ2hlY2sgZm9yIHRoZSBmZXcgZnVuY3Rpb25zIHRo
YXQgd2UgYWxsb3csIGV2ZW4gd2hlbiBjYWxsZWQgY3Jvc3MtZG9tYWluLgotICAgIGNvbnN0IEhh
c2hFbnRyeSogZW50cnkgPSBKU0hpc3RvcnlQcm90b3R5cGU6OnNfaW5mby5wcm9wSGFzaFRhYmxl
KGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmIChlbnRyeSkgewotICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgLy8gQWxsb3cgYWNjZXNzIHRvIGJhY2so
KSwgZm9yd2FyZCgpIGFuZCBnbygpIGZyb20gYW55IGZyYW1lLgotICAgICAgICBpZiAoZW50cnkt
PmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pIHsKLSAgICAgICAgICAgIGlmIChlbnRyeS0+
ZnVuY3Rpb24oKSA9PSBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkJhY2spIHsKLSAgICAgICAg
ICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9u
R2V0dGVyKTsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5n
ZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1
bmN0aW9uKCkgPT0ganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Gb3J3YXJkKSB7Ci0gICAgICAg
ICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY0ZvcndhcmRGdW5j
dGlvbkdldHRlcik7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNs
b3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5
LT5mdW5jdGlvbigpID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uR28pIHsKLSAgICAgICAg
ICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdl
dHRlcik7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBBbGxvdyBhY2Nlc3MgdG8gdG9TdHJpbmcoKSBjcm9zcy1kb21haW4s
IGJ1dCBhbHdheXMgT2JqZWN0LnRvU3RyaW5nLgotICAgICAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZykgewotICAgICAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBvYmplY3RUb1N0cmlu
Z0Z1bmN0aW9uR2V0dGVyKTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkZXNjcmlw
dG9yLnNldFVuZGVmaW5lZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEpTSGlzdG9y
eTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgLy8gT25seSBhbGxvdyBwdXR0aW5nIGJ5IGZyYW1lcyBp
biB0aGUgc2FtZSBvcmlnaW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDEzICs2NiwxMyBAQCBib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdERlbGVnCiAg
ICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IEpTTG9jYXRpb25Qcm90b3R5cGU6OnNfaW5mby5w
cm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChl
bnRyeSAmJiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pKSB7CiAgICAgICAg
IGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZXBs
YWNlKSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGlj
UmVwbGFjZUZ1bmN0aW9uR2V0dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMs
IG5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0ZXIsIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkt
PmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVsb2FkKSB7Ci0gICAg
ICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljUmVsb2FkRnVuY3Rp
b25HZXR0ZXIpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0
YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09
IGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvbkFzc2lnbikgewotICAgICAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY0Fzc2lnbkZ1bmN0aW9uR2V0dGVyKTsKKyAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5j
dGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTg2LDQ1ICs4Niw2IEBAIGJvb2wgSlNMb2NhdGlvbjo6
Z2V0T3duUHJvcGVydHlTbG90RGVsZWcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBKU0xv
Y2F0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFt
ZSkgewotICAgICAgICBkZXNjcmlwdG9yLnNldFVuZGVmaW5lZCgpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gdGhyb3cgb3V0IGFsbCBjcm9zcyBkb21haW4gYWNj
ZXNzCi0gICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgZnJhbWUpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDaGVjayBmb3IgdGhlIGZldyBmdW5jdGlv
bnMgdGhhdCB3ZSBhbGxvdywgZXZlbiB3aGVuIGNhbGxlZCBjcm9zcy1kb21haW4uCi0gICAgY29u
c3QgSGFzaEVudHJ5KiBlbnRyeSA9IEpTTG9jYXRpb25Qcm90b3R5cGU6OnNfaW5mby5wcm9wSGFz
aFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIFByb3BlcnR5U2xv
dCBzbG90OwotICAgIGlmIChlbnRyeSAmJiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVu
Y3Rpb24pKSB7Ci0gICAgICAgIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0xvY2F0aW9uUHJv
dG90eXBlRnVuY3Rpb25SZXBsYWNlKSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
LCBub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyKTsKLSAgICAgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSks
IGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0
aW9uUmVsb2FkKSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5n
U3RhdGljUmVsb2FkRnVuY3Rpb25HZXR0ZXIpOwotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgZW50cnktPmF0dHJp
YnV0ZXMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChl
bnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3NpZ24pIHsK
LSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNBc3NpZ25G
dW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xv
dC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIEZJ
WE1FOiBPdGhlciBpbXBsZW1lbnRlcnMgb2YgdGhlIFdpbmRvdyBjcm9zcy1kb21haW4gc2NoZW1l
IChXaW5kb3csIEhpc3RvcnkpIGFsbG93IHRvU3RyaW5nLAotICAgIC8vIGJ1dCBmb3Igbm93IHdl
IGhhdmUgZGVjaWRlZCBub3QgdG8sIHBhcnRseSBiZWNhdXNlIGl0IHNlZW1zIHNpbGx5IHRvIHJl
dHVybiAiW09iamVjdCBMb2NhdGlvbl0iIGluCi0gICAgLy8gc3VjaCBjYXNlcyB3aGVuIG5vcm1h
bGx5IHRoZSBzdHJpbmcgZm9ybSBvZiBMb2NhdGlvbiB3b3VsZCBiZSB0aGUgVVJMLgotCi0gICAg
ZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBK
U0xvY2F0aW9uOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBG
cmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAJKHJldmlz
aW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVu
dEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsMTAgQEAgYm9vbCBy
dW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlTbAogCiAgICAgaWYgKCFzY3JpcHRPYmpl
Y3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBzbG90LnNldEN1c3RvbShlbGVtZW50LCBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0
ZXIpOworICAgIC8vIFdoaWxlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGx1Z2luIGFsbG93cywg
d2UgZG8ga25vdyB0aGF0IHdlIHByZXZlbnQKKyAgICAvLyBlbnVtZXJhdGlvbiBvciBkZWxldGlv
biBvZiBwcm9wZXJ0aWVzLCBzbyB3ZSBtYXJrIHBsdWdpbiBwcm9wZXJ0aWVzCisgICAgLy8gYXMg
RG9udEVudW0gfCBEb250RGVsZXRlCisgICAgc2xvdC5zZXRDdXN0b20oZWxlbWVudCwgcnVudGlt
ZU9iamVjdFByb3BlcnR5R2V0dGVyLCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0xMzAsNyArMTMzLDcgQEAgYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9t
R2V0T3duUHJvcGVydHlEZQogICAgIGlmICghc2NyaXB0T2JqZWN0LT5oYXNQcm9wZXJ0eShleGVj
LCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgc2xvdC5zZXRDdXN0b20oZWxlbWVudCwgcnVudGltZU9iamVjdFByb3BlcnR5
R2V0dGVyKTsKKyAgICBzbG90LnNldEN1c3RvbShlbGVtZW50LCBydW50aW1lT2JqZWN0UHJvcGVy
dHlHZXR0ZXIsIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgLy8gV2hpbGUgd2UgZG9uJ3Qg
a25vdyB3aGF0IHRoZSBwbHVnaW4gYWxsb3dzLCB3ZSBkbyBrbm93IHRoYXQgd2UgcHJldmVudAog
ICAgIC8vIGVudW1lcmF0aW9uIG9yIGRlbGV0aW9uIG9mIHByb3BlcnRpZXMsIHNvIHdlIG1hcmsg
cGx1Z2luIHByb3BlcnRpZXMKICAgICAvLyBhcyBEb250RW51bSB8IERvbnREZWxldGUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1
bmN0aW9ucy5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMjAgKzU4
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1
c3RvbUdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIGVsZW1lbnQp
OwogICAgIH0KIAotICAgIHRlbXBsYXRlIDxjbGFzcyBUeXBlLCBjbGFzcyBCYXNlPiBib29sIHBs
dWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIFR5cGUqIGVsZW1lbnQpCi0gICAgewotICAgICAgICBpZiAoIWVs
ZW1lbnQtPmdsb2JhbE9iamVjdCgpLT53b3JsZCgpLT5pc05vcm1hbCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoSlNDOjpnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8VHlwZSwgQmFzZT4oZXhlYywgZWxl
bWVudC0+c19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUsIGVsZW1lbnQsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAg
IEpTQzo6SlNWYWx1ZSBwcm90byA9IGVsZW1lbnQtPnByb3RvdHlwZSgpOwotICAgICAgICAgICAg
aWYgKHByb3RvLmlzT2JqZWN0KCkgJiYgSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2Jq
ZWN0KHByb3RvKSktPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJ1bnRpbWVP
YmplY3RDdXN0b21HZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCBlbGVtZW50KTsKLSAgICB9Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEpTUGx1Z2luRWxlbWVudEZ1bmN0aW9uc19oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlz
aW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE0ICs3Nyw2IEBAIGJvb2wgSlNXb3Jr
ZXJDb250ZXh0OjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgSlNXb3JrZXJDb250ZXh0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKLXsKLSAgICAvLyBMb29rIGZvciBvdmVycmlkZXMgYmVmb3JlIGxvb2tp
bmcgYXQgYW55IG9mIG91ciBvd24gcHJvcGVydGllcy4KLSAgICBpZiAoSlNHbG9iYWxPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIEpT
VmFsdWUgSlNXb3JrZXJDb250ZXh0OjpldmVudFNvdXJjZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rv
cj4oZXhlYywgdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTQwMiw3ICs0MDIsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAg
ICAgICAgIGlmICgkcmVxdWlyZXNNYW51YWxMb29rdXApIHsKICAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5U2xvdEltcGwsICIgICAgY29uc3QgJHtuYW1lc3BhY2VNYXliZX1IYXNoRW50
cnkqIGVudHJ5ID0gZ2V0U3RhdGljVmFsdWVTbG90RW50cnlXaXRob3V0Q2FjaGluZzwkY2xhc3NO
YW1lPihleGVjLCBwcm9wZXJ0eU5hbWUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmIChlbnRyeSkge1xuIik7Ci0gICAgICAgICAgICBwdXNo
KEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2Jq
ZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3Qs
IGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpLCBlbnRyeS0+YXR0cmlidXRlcygpKTtcbiIpOwogICAg
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0dXJuIHRy
dWU7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAg
fVxuIik7CiAgICAgICAgIH0KQEAgLTQyMiwxMCArNDIyLDE2IEBAIHN1YiBHZW5lcmF0ZUdldE93
blByb3BlcnR5U2xvdEJvZHkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCAmJiBpbmRleCA8IHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVj
dC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHtcbiIpOwogICAgICAgICB9CisgICAgICAgICMgQXNzdW1l
IHRoYXQgaWYgdGhlcmUncyBhIHNldHRlciwgdGhlIGluZGV4IHdpbGwgYmUgd3JpdGFibGUKKyAg
ICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVk
U2V0dGVyIn0pIHsKKyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIg
ICAgICAgIHVuc2lnbmVkIHNsb3RBdHRyaWJ1dGVzID0gJHtuYW1lc3BhY2VNYXliZX1Eb250RGVs
ZXRlO1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9w
ZXJ0eVNsb3RJbXBsLCAiICAgICAgICB1bnNpZ25lZCBzbG90QXR0cmlidXRlcyA9ICR7bmFtZXNw
YWNlTWF5YmV9RG9udERlbGV0ZSB8ICR7bmFtZXNwYWNlTWF5YmV9UmVhZE9ubHk7XG4iKTsKKyAg
ICAgICAgfQogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51
bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
U2xvdEltcGwsICIgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChl
eGVjLCBpbmRleCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJ
bXBsLCAiICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModGhpc09iamVjdC0+Z2V0
QnlJbmRleChleGVjLCBpbmRleCksIHNsb3RBdHRyaWJ1dGVzKTtcbiIpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAg
c2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90
LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCBpbmRleEdldHRlciwgc2xvdEF0dHJp
YnV0ZXMpO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90
SW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJv
cGVydHlTbG90SW1wbCwgIiAgICB9XG4iKTsKQEAgLTQzMyw3ICs0MzksNyBAQCBzdWIgR2VuZXJh
dGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCwgIiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0
PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVydHlOYW1lKSkge1xu
Iik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIpO1xuIik7CisgICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTtcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBs
LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0
eVNsb3RJbXBsLCAiICAgIH1cbiIpOwogICAgICAgICBpZiAoJGlubGluZWQpIHsKQEAgLTQ0Nyw3
ICs0NTMsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgICAgICYk
bWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOwogICAgIH0KIAotICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmRE
ZXNjcmlwdG9yIn0pIHsKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0pIHsKICAgICAgICAgcHVzaChAZ2V0T3duUHJv
cGVydHlTbG90SW1wbCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90RGVs
ZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOwogICAgICAgICBwdXNoKEBnZXRP
d25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgIH0KQEAg
LTQ2NiwxMDcgKzQ3Miw2IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkKICAg
ICByZXR1cm4gQGdldE93blByb3BlcnR5U2xvdEltcGw7CiB9CiAKLXN1YiBHZW5lcmF0ZUdldE93
blByb3BlcnR5RGVzY3JpcHRvckJvZHkKLXsKLSAgICBteSAoJGludGVyZmFjZSwgJGludGVyZmFj
ZU5hbWUsICRjbGFzc05hbWUsICRoYXNBdHRyaWJ1dGVzLCAkaW5saW5lZCkgPSBAXzsKLSAgICAK
LSAgICBteSAkbmFtZXNwYWNlTWF5YmUgPSAoJGlubGluZWQgPyAiSlNDOjoiIDogIiIpOwotICAg
IAotICAgIG15IEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsID0gKCk7Ci0gICAgaWYgKCRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5In0pIHsKLSAgICAg
ICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyJCaW5kaW5nU2VjdXJpdHkuaCJ9ID0gMTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KGV4ZWMsIGpzQ2FzdDwkY2xhc3NOYW1lKj4odGhpc09iamVjdCktPmltcGwoKSkp
XG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIHRoaXNPYmplY3QtPmltcGwo
KS0+ZnJhbWUoKSkpXG4iKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7Ci0gICAgfQotICAgIAotICAgIGlmICgkaW50ZXJm
YWNlTmFtZSBlcSAiTmFtZWROb2RlTWFwIiBvciAkaW50ZXJmYWNlTmFtZSA9fiAvXkhUTUxcdypD
b2xsZWN0aW9uJC8pIHsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1w
bCwgIiAgICAke25hbWVzcGFjZU1heWJlfUpTVmFsdWUgcHJvdG8gPSB0aGlzT2JqZWN0LT5wcm90
b3R5cGUoKTtcbiIpOwotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBs
LCAiICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIGpzQ2FzdDwke25hbWVzcGFjZU1heWJlfUpT
T2JqZWN0Kj4oYXNPYmplY3QocHJvdG8pKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1l
KSlcbiIpOwotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAg
ICAgICByZXR1cm4gZmFsc2U7XG5cbiIpOwotICAgIH0KLSAgICAKLSAgICBteSAkbWFudWFsTG9v
a3VwR2V0dGVyR2VuZXJhdGlvbiA9IHN1YiB7Ci0gICAgICAgIG15ICRyZXF1aXJlc01hbnVhbExv
b2t1cCA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0g
fHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn07Ci0gICAg
ICAgIGlmICgkcmVxdWlyZXNNYW51YWxMb29rdXApIHsKLSAgICAgICAgICAgIHB1c2goQGdldE93
blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgY29uc3QgJHtuYW1lc3BhY2VNYXliZX1IYXNo
RW50cnkqIGVudHJ5ID0gJHtjbGFzc05hbWV9VGFibGUuZW50cnkoZXhlYywgcHJvcGVydHlOYW1l
KTtcbiIpOwotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwg
IiAgICBpZiAoZW50cnkpIHtcbiIpOwotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTtcbiIpOwotICAgICAg
ICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgZW50
cnktPmF0dHJpYnV0ZXMoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
RGVzY3JpcHRvckltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIH1cbiIpOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIGlmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1
c3RvbU5hbWVkR2V0dGVyIn0pIHsKLSAgICAgICAgJiRtYW51YWxMb29rdXBHZXR0ZXJHZW5lcmF0
aW9uKCk7Ci0gICAgfQotCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJJbmRleGVkR2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51
bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9ySW1wbCwgIiAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBp
ZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGluZGV4IDwgc3RhdGljX2Nh
c3Q8JGludGVyZmFjZU5hbWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLT5sZW5ndGgoKSkge1xuIik7
Ci0gICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0lu
ZGV4ZWRHZXR0ZXIifSkgewotICAgICAgICAgICAgIyBBc3N1bWUgdGhhdCBpZiB0aGVyZSdzIGEg
c2V0dGVyLCB0aGUgaW5kZXggd2lsbCBiZSB3cml0YWJsZQotICAgICAgICAgICAgaWYgKCRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBp
bmRleCksICR7bmFtZXNwYWNlTWF5YmV9RG9udERlbGV0ZSk7XG4iKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1w
bCwgIiAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5SW5k
ZXgoZXhlYywgaW5kZXgpLCAke25hbWVzcGFjZU1heWJlfURvbnREZWxldGUgfCAke25hbWVzcGFj
ZU1heWJlfVJlYWRPbmx5KTtcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAg
JHtuYW1lc3BhY2VNYXliZX1Qcm9wZXJ0eVNsb3Qgc2xvdDtcbiIpOwotICAgICAgICAgICAgcHVz
aChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b21J
bmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpO1xuIik7Ci0gICAgICAgICAgICAj
IEFzc3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBzZXR0ZXIsIHRoZSBpbmRleCB3aWxsIGJlIHdyaXRh
YmxlCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1
c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAgICAgICAgICAgICAgIHB1c2goQGdldE93blByb3Bl
cnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksICR7bmFtZXNwYWNlTWF5YmV9RG9udERlbGV0
ZSk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgJHtuYW1lc3BhY2VNYXliZX1E
b250RGVsZXRlIHwgJHtuYW1lc3BhY2VNYXliZX1SZWFkT25seSk7XG4iKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBs
LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3JJbXBsLCAiICAgIH1cbiIpOwotICAgIH0KLQotICAgIGlmICgkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgewotICAgICAgICBwdXNoKEBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIGlmIChjYW5HZXRJdGVtc0Zvck5hbWUo
ZXhlYywgc3RhdGljX2Nhc3Q8JGludGVyZmFjZU5hbWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLCBw
cm9wZXJ0eU5hbWUpKSB7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9ySW1wbCwgIiAgICAgICAgJHtuYW1lc3BhY2VNYXliZX1Qcm9wZXJ0eVNsb3Qgc2xvdDtcbiIp
OwotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lR2V0dGVyKTtcbiIpOwotICAgICAgICBwdXNo
KEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERv
bnREZWxldGUgfCBEb250RW51bSk7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKLSAgICAgICAgcHVzaChA
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICB9XG4iKTsKLSAgICAgICAgaWYgKCRp
bmxpbmVkKSB7Ci0gICAgICAgICAgICAkaGVhZGVySW5jbHVkZXN7Ind0Zi90ZXh0L0F0b21pY1N0
cmluZy5oIn0gPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3sid3RmL3RleHQvQXRvbWljU3RyaW5nLmgifSA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVy
In0pIHsKLSAgICAgICAgJiRtYW51YWxMb29rdXBHZXR0ZXJHZW5lcmF0aW9uKCk7Ci0gICAgfQot
Ci0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93
blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifSkgewotICAgICAgICBwdXNoKEBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIGlmICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JEZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKVxuIik7Ci0g
ICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHJldHVy
biB0cnVlO1xuIik7Ci0gICAgfQotCi0gICAgaWYgKCRoYXNBdHRyaWJ1dGVzKSB7Ci0gICAgICAg
IGlmICgkaW5saW5lZCkgewotICAgICAgICAgICAgZGllICJDYW5ub3QgaW5saW5lIGlmIE5vU3Rh
dGljVGFibGVzIGlzIHNldC4iIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNOb1N0YXRpY1RhYmxlcyJ9KTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVz
Y3JpcHRvckltcGwsICIgICAgcmV0dXJuICR7bmFtZXNwYWNlTWF5YmV9Z2V0U3RhdGljVmFsdWVE
ZXNjcmlwdG9yPCRjbGFzc05hbWUsIEJhc2U+KGV4ZWMsIHNfaW5mby5zdGF0aWNQcm9wSGFzaFRh
YmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBs
LCAiICAgIHJldHVybiAke25hbWVzcGFjZU1heWJlfWdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjwk
Y2xhc3NOYW1lLCBCYXNlPihleGVjLCAiIC4gaGFzaFRhYmxlQWNjZXNzb3IoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSwgJGNsYXNzTmFtZSkgLiAi
LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBs
LCAiICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGw7Ci19Ci0KIHN1YiBHZW5lcmF0ZUhl
YWRlckNvbnRlbnRIZWFkZXIKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CkBAIC03OTAs
NyArNjk1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgbXkgJGhhc0NvbXBsZXhHZXR0ZXIg
PQogICAgICAgICAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRl
ciJ9CiAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmlj
SW5kZXhlZEdldHRlciJ9Ci0gICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifQorICAgICAgICB8
fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0
eVNsb3QifQogICAgICAgICB8fCAkaGFzSW1wdXJlTmFtZWRHZXR0ZXI7CiAgICAgCiAgICAgbXkg
JGhhc0dldHRlciA9ICRudW1BdHRyaWJ1dGVzID4gMCB8fCAhJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9IHx8ICRoYXNDb21wbGV4R2V0dGVyOwpAQCAt
ODAyLDEwICs3MDcsOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAjIEdldHRlcnMKICAgICBp
ZiAoJGhhc0dldHRlcikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlT
bG90Jik7XG4iKSBpZiAoJGhhc0NvbXBsZXhHZXR0ZXIpOwotICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFu
ZERlc2NyaXB0b3IifTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4iKSBpZiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlw
dG9yIn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3REZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In07CiAgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3si
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QifSA9IDE7CiAgICAgICAgICRzdHJ1Y3R1
cmVGbGFnc3siSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIn0gPSAxOwogICAgIH0KQEAgLTEwMjcsMTIgKzkzMCw2IEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KCRpbnRlcmZh
Y2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkbnVtQXR0cmlidXRlcyA+IDAsIDEpKTsK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn1cblxuIik7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJBTFdBWVNfSU5MSU5FIGJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcilcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAie1xuIik7
Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2Jq
ZWN0ID0gSlNDOjpqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOwotICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgJnNfaW5mbyk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgR2VuZXJh
dGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1l
LCAkY2xhc3NOYW1lLCAkbnVtQXR0cmlidXRlcyA+IDAsIDEpKTsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCiAgICAgaWYgKCEkaGFzUGFyZW50IHx8CkBA
IC0xMTAwLDcgKzk5Nyw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbztcbiIpOwogICAg
IGlmICgkbnVtRnVuY3Rpb25zID4gMCB8fCAkbnVtQ29uc3RhbnRzID4gMCkgewogICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4i
KTsKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCJ9ID0gMTsKICAgICB9CiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0N1c3RvbU1hcmtGdW5jdGlvbiJ9IG9yICRuZWVkc01hcmtDaGlsZHJlbikgewpAQCAt
MTYxOCwyMSArMTUxNCw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0U3RhdGljUHJvcGVydHlTbG90PCR7
Y2xhc3NOYW1lfVByb3RvdHlwZSwgSlNPYmplY3Q+KGV4ZWMsICIgLiBwcm90b3R5cGVIYXNoVGFi
bGVBY2Nlc3NvcigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1Rh
YmxlcyJ9LCAkY2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7
XG4iKTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0K
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfVByb3RvdHlwZSogdGhpc09iamVjdCA9
IGpzQ2FzdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUqPihvYmplY3QpO1xuIik7Ci0KLSAgICAgICAg
aWYgKCRudW1Db25zdGFudHMgZXEgMCAmJiAkbnVtRnVuY3Rpb25zIGVxIDApIHsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIp
OyAgICAgICAgCi0gICAgICAgIH0gZWxzaWYgKCRudW1Db25zdGFudHMgZXEgMCkgewotICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVz
Y3JpcHRvcjxKU09iamVjdD4oZXhlYywgIiAuIHByb3RvdHlwZUhhc2hUYWJsZUFjY2Vzc29yKCRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0sICRjbGFz
c05hbWUpIC4gIiwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwot
ICAgICAgICB9IGVsc2lmICgkbnVtRnVuY3Rpb25zIGVxIDApIHsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8JHtjbGFz
c05hbWV9UHJvdG90eXBlLCBKU09iamVjdD4oZXhlYywgIiAuIHByb3RvdHlwZUhhc2hUYWJsZUFj
Y2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVz
In0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTtcbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIGdldFN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcjwke2NsYXNzTmFtZX1Qcm90
b3R5cGUsIEpTT2JqZWN0PihleGVjLCAiIC4gcHJvdG90eXBlSGFzaFRhYmxlQWNjZXNzb3IoJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSwgJGNsYXNz
TmFtZSkgLiAiLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7Ci0g
ICAgICAgIH0KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIAog
ICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21OYW1lZEdl
dHRlck9uUHJvdG90eXBlIn0pIHsKQEAgLTE3NDksNyArMTYzMCw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgIHx8ICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiT21pdENvbnN0cnVjdG9yIn0gCiAgICAgICAgICAgICAgICAgIHx8ICRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0KICAgICAgICAgICAg
ICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVk
R2V0dGVyIn0KLSAgICAgICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9CisgICAgICAg
ICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdl
dE93blByb3BlcnR5U2xvdCJ9CiAgICAgICAgICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifQogICAgICAgICAgICAg
ICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifQog
ICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tTmFtZWRHZXR0ZXIifTsKQEAgLTE3NjMsMTcgKzE2NDQsMTEgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkoJGludGVy
ZmFjZSwgJGludGVyZmFjZU5hbWUsICRjbGFzc05hbWUsICRudW1BdHRyaWJ1dGVzID4gMCwgMCkp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKVxuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1l
fSo+KG9iamVjdCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUdldE93blByb3BlcnR5RGVzY3JpcHRv
ckJvZHkoJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUsICRjbGFzc05hbWUsICRudW1BdHRyaWJ1
dGVzID4gMCwgMCkpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJJbmRleGVkR2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51
bWVyaWNJbmRleGVkR2V0dGVyIn0KICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifQotICAgICAgICAgICAgICAgIHx8ICRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFu
ZERlc2NyaXB0b3IifSkgeworICAgICAgICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9KSB7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwg
UHJvcGVydHlTbG90JiBzbG90KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9
KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CkBAIC0xNzk2
LDEwICsxNjcxLDE2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKGluZGV4IDwgc3RhdGljX2Nhc3Q8JGludGVyZmFjZU5hbWUqPih0aGlzT2JqZWN0LT5pbXBs
KCkpLT5sZW5ndGgoKSkge1xuIik7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICMgQXNzdW1lIHRoYXQgaWYgdGhlcmUncyBhIHNldHRlciwgdGhlIGluZGV4IHdpbGwgYmUgd3Jp
dGFibGUKKyAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgdW5zaWduZWQgc2xvdEF0dHJpYnV0ZXMgPSBEb250RGVsZXRl
O1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHVuc2lnbmVkIHNsb3RBdHRyaWJ1dGVzID0gRG9udERl
bGV0ZSB8IFJlYWRPbmx5O1xuIik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0
ZXIifSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSk7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0
VmFsdWVXaXRoQXR0cmlidXRlcyh0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSwg
c2xvdEF0dHJpYnV0ZXMpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5k
ZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2xvdC5zZXRDdXN0
b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgdGhpc09iamVjdC0+aW5kZXhHZXR0ZXIsIHNsb3RB
dHRyaWJ1dGVzKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKQEAgLTE4MDgsMTMgKzE2ODksMTMgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgewogICAgICAgICAgICAgICAgICYk
cHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmIChjYW5HZXRJdGVtc0Zvck5hbWUoZXhlYywgc3RhdGljX2Nhc3Q8JGludGVy
ZmFjZU5hbWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLCBwcm9wZXJ0eU5hbWUpKSB7XG4iKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpc09iamVjdCwgdGhpc09iamVjdC0+bmFtZUdldHRlcik7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
dGhpc09iamVjdC0+bmFtZUdldHRlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0p
O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVy
biB0cnVlO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxu
Iik7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3sid3RmL3RleHQvQXRvbWljU3RyaW5n
LmgifSA9IDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNs
b3RBbmREZXNjcmlwdG9yIn0pIHsKKyAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifSkgewogICAgICAgICAg
ICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3REZWxl
Z2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CkBAIC0zNjU4LDcgKzM1
MzksNiBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uCiAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIH1cblxuIik7CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwotICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbztcbiIpOwogCiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4iKTsKQEAgLTQwNDEsMTEgKzM5MjEs
NiBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMKICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAie1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBy
ZXR1cm4gZ2V0U3RhdGljJHtraW5kfVNsb3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0sIEpTRE9N
V3JhcHBlcj4oZXhlYywgIiAuIGNvbnN0cnVjdG9ySGFzaFRhYmxlQWNjZXNzb3IoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSwgJGNvbnN0cnVjdG9y
Q2xhc3NOYW1lKSAuICIsIGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGNlbGwpLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1c
blxuIik7Ci0KLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAke2NvbnN0cnVjdG9y
Q2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIp
OwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIGdldFN0YXRpYyR7a2lu
ZH1EZXNjcmlwdG9yPCR7Y29uc3RydWN0b3JDbGFzc05hbWV9LCBKU0RPTVdyYXBwZXI+KGV4ZWMs
ICIgLiBjb25zdHJ1Y3Rvckhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0sICRjb25zdHJ1Y3RvckNsYXNzTmFtZSkgLiAi
LCBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7
CiAgICAgfQogCiAgICAgaWYgKElzQ29uc3RydWN0YWJsZSgkaW50ZXJmYWNlKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lE
TEF0dHJpYnV0ZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIEpTQ3VzdG9t
Q29uc3RydWN0b3IKIEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHkKIEpTQ3VzdG9tRGVmaW5lT3du
UHJvcGVydHlPblByb3RvdHlwZQogSlNDdXN0b21GaW5hbGl6ZQotSlNDdXN0b21HZXRPd25Qcm9w
ZXJ0eVNsb3RBbmREZXNjcmlwdG9yCitKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdAogSlNDdXN0
b21HZXR0ZXIKIEpTQ3VzdG9tSGVhZGVyCiBKU0N1c3RvbUlzUmVhY2hhYmxlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDQ3ICs4OSwyNSBAQCBib29sIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpT
CiB7CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+
KGNlbGwpOwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgewotICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCB0aGlz
T2JqZWN0LT5sZW5ndGhHZXR0ZXIpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5sZW5ndGhHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIHVu
c2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKICAgICBpZiAoaW5kZXggPCB0
aGlzT2JqZWN0LT5nZXRMZW5ndGgoKSkgewogICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KTsKLSAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2Jq
ZWN0LCBpbmRleCwgdGhpc09iamVjdC0+aW5kZXhHZXR0ZXIpOworICAgICAgICBzbG90LnNldEN1
c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCB0aGlzT2JqZWN0LT5pbmRleEdldHRlciwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAog
ICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgUnVudGltZUFycmF5OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0g
ICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVj
dCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICB1
bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGluZGV4IDwg
dGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpIHsKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAg
ICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCBpbmRleEdldHRlcik7Ci0g
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIERvbnREZWxldGUgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiBib29s
IFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZUFycmF5Kj4oY2VsbCk7
CiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpIHsKLSAgICAgICAgc2xv
dC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgdGhpc09iamVjdC0+aW5kZXhHZXR0
ZXIpOworICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCB0aGlz
T2JqZWN0LT5pbmRleEdldHRlciwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIApJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSwyNiArNjUsMTMgQEAgYm9vbCBSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSgogewogICAgIFJ1bnRpbWVNZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZU1l
dGhvZCo+KGNlbGwpOwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCkgewotICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0
LCB0aGlzT2JqZWN0LT5sZW5ndGhHZXR0ZXIpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1
c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5sZW5ndGhHZXR0ZXIsIFJlYWRPbmx5IHwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAog
ICAgIHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBSdW50aW1lTWV0aG9kOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3IgJmRlc2NyaXB0
b3IpCi17Ci0gICAgUnVudGltZU1ldGhvZCogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lTWV0
aG9kKj4ob2JqZWN0KTsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIGxlbmd0aEdldHRlcik7Ci0gICAgICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVNZXRob2QoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFJ1bnRpbWVNZXRob2QqIG1ldGhvZCA9IHN0YXRpY19jYXN0PFJ1
bnRpbWVNZXRob2QqPihleGVjLT5jYWxsZWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9tZXRob2QuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDYgQEAgcHJv
dGVjdGVkOgogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0
YSYpOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNWYWx1ZSBs
ZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMTQwMjk3KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM0LDE0ICsxMzQsMTQgQEAgYm9vbCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSgogICAgICAgICAvLyBTZWUgaWYgdGhlIGluc3RhbmNlIGhhcyBhIGZpZWxkIHdpdGgg
dGhlIHNwZWNpZmllZCBuYW1lLgogICAgICAgICBGaWVsZCAqYUZpZWxkID0gYUNsYXNzLT5maWVs
ZE5hbWVkKHByb3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0KCkpOwogICAgICAgICBpZiAoYUZpZWxk
KSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5m
aWVsZEdldHRlcik7CisgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlz
T2JqZWN0LT5maWVsZEdldHRlciwgRG9udERlbGV0ZSk7CiAgICAgICAgICAgICBpbnN0YW5jZS0+
ZW5kKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIE5vdyBjaGVjayBpZiBhIG1ldGhvZCB3aXRoIHNwZWNpZmllZCBuYW1lIGV4aXN0
cywgaWYgc28gcmV0dXJuIGEgZnVuY3Rpb24gb2JqZWN0IGZvcgogICAgICAgICAgICAgLy8gdGhh
dCBtZXRob2QuCiAgICAgICAgICAgICBpZiAoYUNsYXNzLT5tZXRob2ROYW1lZChwcm9wZXJ0eU5h
bWUsIGluc3RhbmNlLmdldCgpKSkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXNPYmplY3QsIHRoaXNPYmplY3QtPm1ldGhvZEdldHRlcik7CisgICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bWV0aG9kR2V0dGVyLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGluc3Rh
bmNlLT5lbmQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE1MCw3ICsxNTAs
NyBAQCBib29sIFJ1bnRpbWVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKCiAKICAgICAgICAg
Ly8gVHJ5IGEgZmFsbGJhY2sgb2JqZWN0LgogICAgICAgICBpZiAoIWFDbGFzcy0+ZmFsbGJhY2tP
YmplY3QoZXhlYywgaW5zdGFuY2UuZ2V0KCksIHByb3BlcnR5TmFtZSkuaXNVbmRlZmluZWQoKSkg
ewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+ZmFs
bGJhY2tPYmplY3RHZXR0ZXIpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVj
dCwgdGhpc09iamVjdC0+ZmFsbGJhY2tPYmplY3RHZXR0ZXIsIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKICAgICAgICAgICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xNjEsNTUgKzE2MSw2IEBAIGJvb2wgUnVudGlt
ZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEoKICAgICByZXR1cm4gaW5zdGFuY2UtPmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
Ci1ib29sIFJ1bnRpbWVPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUgKmV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBSdW50aW1lT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFJ1bnRpbWVPYmplY3QqPihvYmplY3QpOwotICAgIGlmICghdGhpc09iamVj
dC0+bV9pbnN0YW5jZSkgewotICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SW5zdGFuY2U+
IGluc3RhbmNlID0gdGhpc09iamVjdC0+bV9pbnN0YW5jZTsKLSAgICBpbnN0YW5jZS0+YmVnaW4o
KTsKLSAgICAKLSAgICBDbGFzcyAqYUNsYXNzID0gaW5zdGFuY2UtPmdldENsYXNzKCk7Ci0gICAg
Ci0gICAgaWYgKGFDbGFzcykgewotICAgICAgICAvLyBTZWUgaWYgdGhlIGluc3RhbmNlIGhhcyBh
IGZpZWxkIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgotICAgICAgICBGaWVsZCAqYUZpZWxkID0g
YUNsYXNzLT5maWVsZE5hbWVkKHByb3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0KCkpOwotICAgICAg
ICBpZiAoYUZpZWxkKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGZpZWxkR2V0dGVyKTsKLSAgICAgICAgICAg
IGluc3RhbmNlLT5lbmQoKTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBOb3cgY2hl
Y2sgaWYgYSBtZXRob2Qgd2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHMsIGlmIHNvIHJldHVybiBh
IGZ1bmN0aW9uIG9iamVjdCBmb3IKLSAgICAgICAgICAgIC8vIHRoYXQgbWV0aG9kLgotICAgICAg
ICAgICAgaWYgKGFDbGFzcy0+bWV0aG9kTmFtZWQocHJvcGVydHlOYW1lLCBpbnN0YW5jZS5nZXQo
KSkpIHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBtZXRob2RHZXR0ZXIpOwotICAgICAgICAgICAg
ICAgIGluc3RhbmNlLT5lbmQoKTsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUcnkgYSBmYWxsYmFjayBvYmplY3QuCi0gICAg
ICAgIGlmICghYUNsYXNzLT5mYWxsYmFja09iamVjdChleGVjLCBpbnN0YW5jZS5nZXQoKSwgcHJv
cGVydHlOYW1lKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGZhbGxiYWNrT2JqZWN0
R2V0dGVyKTsKLSAgICAgICAgICAgIGluc3RhbmNlLT5lbmQoKTsKLSAgICAgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERv
bnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGluc3RhbmNlLT5lbmQoKTsKLSAgICAKLSAg
ICByZXR1cm4gaW5zdGFuY2UtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiB2b2lkIFJ1bnRpbWVPYmplY3Q6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRp
bWVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZU9iamVjdCo+KGNlbGwpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUpOwogICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL2pzYy9CcmlkZ2VKU0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvanNjL0JyaWRnZUpTQy5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvanNjL0JyaWRnZUpTQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgfkluc3RhbmNlKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHB1dChK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90JikgeyB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfcnVudGltZS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw2IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0
aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxs
KiwgQ2FsbERhdGEmKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29i
amMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfcnVudGltZS5tbQkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsMTMgKzIx
NSw2IEBAIGJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXIKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIC8vIGtlZXAgdGhlIHByb3RvdHlwZSBmcm9t
IGdldHRpbmcgY2FsbGVkIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UKLSAgICBkZXNj
cmlwdG9yLnNldFVuZGVmaW5lZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIE9iamNG
YWxsYmFja09iamVjdEltcDo6cHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90JikKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZURlY2xhcmF0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5pZGwJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NyArMjIsNyBAQAogWwogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAogICAgIEpTR2VuZXJhdGVJ
c1JlYWNoYWJsZSwKLSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3Is
CisgICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QsCiAgICAgQ3VzdG9tTmFtZWRTZXR0ZXIs
CiAjaWYgZGVmaW5lZChWOF9CSU5ESU5HKSAmJiBWOF9CSU5ESU5HCiAgICAgTmFtZWRHZXR0ZXIs
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbAkocmV2aXNp
b24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIAogWwogICAgIEN1c3RvbU5hbWVkU2V0
dGVyLAotICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAgICBK
U0N1c3RvbUdldE93blByb3BlcnR5U2xvdCwKICAgICBDdXN0b21DYWxsCiBdIGludGVyZmFjZSBI
VE1MQXBwbGV0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKICAgICBbUmVmbGVjdF0gYXR0cmlidXRl
IERPTVN0cmluZyBhbGlnbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxl
bWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmlkbAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1i
ZWRFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogCiBbCiAgICAg
Q3VzdG9tTmFtZWRTZXR0ZXIsCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNj
cmlwdG9yLAorICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAogICAgIEN1c3RvbUNhbGwK
IF0gaW50ZXJmYWNlIEhUTUxFbWJlZEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiBhdHRyaWJ1dGUg
W1JlZmxlY3RdIERPTVN0cmluZyBhbGlnbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9iamVjdEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9iamVjdEVsZW1lbnQuaWRsCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPYmplY3RFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBA
QAogCiBbCiAgICAgQ3VzdG9tTmFtZWRTZXR0ZXIsCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0
eVNsb3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAogICAg
IEN1c3RvbUNhbGwKIF0gaW50ZXJmYWNlIEhUTUxPYmplY3RFbGVtZW50IDogSFRNTEVsZW1lbnQg
ewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MRm9ybUVsZW1lbnQgZm9ybTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9IaXN0b3J5LmlkbAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9IaXN0b3J5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lmIGRl
ZmluZWQoVjhfQklORElORykgJiYgVjhfQklORElORwogICAgIENoZWNrU2VjdXJpdHksCiAjZW5k
aWYKLSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCisgICAgSlND
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QsCiAgICAgQ3VzdG9tTmFtZWRTZXR0ZXIsCiAgICAgSlNH
ZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGxGcmFtZSwKICAgICBDdXN0b21EZWxldGVQcm9wZXJ0eSwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uaWRsCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2lmIGRlZmluZWQoVjhfQklORElORykgJiYgVjhfQklORElORwogICAgIENoZWNrU2Vj
dXJpdHksCiAjZW5kaWYKLSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0
b3IsCisgICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QsCiAgICAgQ3VzdG9tTmFtZWRTZXR0
ZXIsCiAgICAgSlNHZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGxGcmFtZSwKICAgICBDdXN0b21EZWxl
dGVQcm9wZXJ0eSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmlk
bAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogWwogICAgIENvbmRpdGlv
bmFsPVdPUktFUlMsCiAgICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCi0gICAgSlNDdXN0b21HZXRP
d25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlT
bG90LAogICAgIEV2ZW50VGFyZ2V0LAogICAgIEV4dGVuZHNET01HbG9iYWxPYmplY3QsCiAgICAg
SXNXb3JrZXJDb250ZXh0LApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTQwMzAwKQorKysgU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTMtMDEtMjAgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisg
ICAgICAgIFJlbW92ZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgcHJhY3RpY2FsbHkgcmVkdW5k
YW50IHdpdGggZ2V0T3duUHJvcGVydHlTbG90LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAgICAgLSBwYXNzIGF0dHJpYnV0ZXMgdG8g
Z2V0T3duUHJvcGVydHlTbG90CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0Lmg6CisgICAgICAgIChKU05QT2JqZWN0KToK
KwogMjAxMy0wMS0yMCAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8c2wub3N0YXBlbmtvQHNhbXN1
bmcuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGdldHRpbmcgcGVyLXJlc291cmNlIGNh
bGxiYWNrcyBpbiB0aGUgVUlQcm9jZXNzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lv
biAxNDAyOTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
SlNOUE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw1NCArMjc2LDE5IEBAIGJvb2wg
SlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKIAogICAgIC8vIEZpcnN0LCBjaGVj
ayBpZiB0aGUgTlBPYmplY3QgaGFzIGEgcHJvcGVydHkgd2l0aCB0aGlzIG5hbWUuCiAgICAgaWYg
KHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkgJiYgdGhpc09iamVj
dC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0
LCBucElkZW50aWZpZXIpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRo
aXNPYmplY3QtPnByb3BlcnR5R2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09i
amVjdCwgdGhpc09iamVjdC0+cHJvcGVydHlHZXR0ZXIsIERvbnREZWxldGUpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBTZWNvbmQsIGNoZWNrIGlmIHRoZSBOUE9iamVj
dCBoYXMgYSBtZXRob2Qgd2l0aCB0aGlzIG5hbWUuCiAgICAgaWYgKHRoaXNPYmplY3QtPm1fbnBP
YmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kICYmIHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFz
cy0+aGFzTWV0aG9kKHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllcikpIHsKLSAg
ICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bWV0aG9kR2V0dGVy
KTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bWV0aG9k
R2V0dGVyLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTTlBPYmplY3Q6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikK
LXsKLSAgICBKU05QT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTlBPYmplY3QqPihvYmpl
Y3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7
Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0KSB7Ci0gICAgICAgIHRocm93SW52YWxp
ZEFjY2Vzc0Vycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
TlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHBy
b3BlcnR5TmFtZSk7Ci0KLSAgICAvLyBDYWxsaW5nIE5QQ2xhc3M6Omludm9rZSB3aWxsIGNhbGwg
aW50byBwbHVnLWluIGNvZGUsIGFuZCB0aGVyZSdzIG5vIHRlbGxpbmcgd2hhdCB0aGUgcGx1Zy1p
biBjYW4gZG8uCi0gICAgLy8gKGluY2x1ZGluZyBkZXN0cm95aW5nIHRoZSBwbHVnLWluKS4gQmVj
YXVzZSBvZiB0aGlzLCB3ZSBtYWtlIHN1cmUgdG8ga2VlcCB0aGUgcGx1Zy1pbiBhbGl2ZSB1bnRp
bCAKLSAgICAvLyB0aGUgY2FsbCBoYXMgZmluaXNoZWQuCi0gICAgTlBSdW50aW1lT2JqZWN0TWFw
OjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKLQot
ICAgIC8vIEZpcnN0LCBjaGVjayBpZiB0aGUgTlBPYmplY3QgaGFzIGEgcHJvcGVydHkgd2l0aCB0
aGlzIG5hbWUuCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFzUHJv
cGVydHkgJiYgdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSh0aGlz
T2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIpKSB7Ci0gICAgICAgIFByb3BlcnR5U2xv
dCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBwcm9wZXJ0eUdldHRl
cik7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMs
IHByb3BlcnR5TmFtZSksIERvbnREZWxldGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvLyBTZWNvbmQsIGNoZWNrIGlmIHRoZSBOUE9iamVjdCBoYXMgYSBtZXRob2Qgd2l0
aCB0aGlzIG5hbWUuCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFz
TWV0aG9kICYmIHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kKHRoaXNP
YmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllcikpIHsKLSAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG1ldGhvZEdldHRlcik7
Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHBy
b3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBKU05QT2JqZWN0OjpwdXQo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgSlNOUE9iamVjdCogdGhp
c09iamVjdCA9IEpTQzo6anNDYXN0PEpTTlBPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNiBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0
YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwogCiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQg
cHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlND
OjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183723</attachid>
            <date>2013-01-21 00:07:19 -0800</date>
            <delta_ts>2013-01-21 00:14:20 -0800</delta_ts>
            <desc>delete delete delete</desc>
            <filename>107420.2.patch</filename>
            <type>text/plain</type>
            <size>195484</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQwMzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNCBA
QAorMjAxMy0wMS0yMCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGdldE93blByb3BlcnR5RGVzY3JpcHRvcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwcmFjdGljYWxseSBy
ZWR1bmRhbnQgd2l0aCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisKKyAgICAgICAgVGhlIGJ1bGsgb2Yg
Y2hhbmdlcyBoZXJlIGFyZSB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcgorICAgICAgICBtZWNoYW5pc20uIEEgbmV3IGZyZWUtZnVuY3Rpb24gaW1wbGVtZW50
YXRpb24gb2YgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGlzCisgICAgICAgIGFkZGVkIHRvIFBy
b3BlcnR5RGVzY3JpcHRvci5oLCBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBnZXRPd25Qcm9wZXJ0
eVNsb3QuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzLCBQcm9wZXJ0eVNsb3Qg
aXMgbm93IHBhc3NlZCB0aGUgYXR0cmlidXRlcywgYW5kCisgICAgICAgIHJlZmVyZW5jZXMgdGhl
IEdldHRlclNldHRlciBvYmplY3QgZm9yIGFjY2Vzc29ycywgcmF0aGVyIHRoYW4gdGhlIGdldHRl
ci4gQW4KKyAgICAgICAgYWRkaXRpb25hbCBmaWVsZCBpbmRpY2F0aW5nIGdldE93blByb3BlcnR5
RGVzY3JpcHRvciB1c2FnZSBpcyBhbHNvIGFkZGVkIHRvCisgICAgICAgIHN1cHBvcnQgZXhpc3Rp
bmcgZnVuY3Rpb25hbGxpdHkgZm9yIHRoZSBET01XaW5kb3cgb2JqZWN0LgorCisgICAgICAgIElu
IG9yZGVyIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlIHNpemUgb2YgUHJvcGVydHlTbG90LCB0aGUg
aW1wbGVtZW50YXRpb24gaGFzCisgICAgICAgIGJlZW4gcmVmYWN0b3JlZC4gUHJldmlvdXNseSB0
aGUgQ2FjaGVQcm9wZXJ0eVR5cGUgd2FzIG9ubHkgc2V0IGZvciBjYWNoZWFibGUKKyAgICAgICAg
cHJvcGVydGllcy4gTm93IGNhY2hlYWJpbGl0eSBpcyBzcGxpdCBvdXQgaW50byBhIHNlcGFyYXRl
IGZpZWxkLCBhbmQgdGhlIHR5cGUKKyAgICAgICAgaXMgYWxzbyByZWNvcmRlZC4gVGhpcyBtZWFu
cyB3ZSBjYW4gYWx3YXlzIHVzZSB0aGUgdHlwZSBmaWVsZCB0byBkZXRlcm1pbmUKKyAgICAgICAg
dGhlIHZhbHVlLCByYXRoZXIgdGhhbiBvdmVybG9hZGluZyB0aGUgbWVhbmluZyBvZiB0aGUgZ2V0
VmFsdWUgZmllbGQuIFRoaXMsCisgICAgICAgIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIg
ZmllbGRzIGFyZSBtb3ZlZCBpbnRvIGFuIGV4aXN0aW5nIChidXQgc3BhcmVzbHkKKyAgICAgICAg
dXNlZCkgdW5pb24uCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAg
ICAoSlNDYWxsYmFja09iamVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaDoKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5qczoKKyAgICAgICAgKiBKU0NUeXBl
ZEFycmF5U3R1YnMuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVi
dWdnZXJBY3RpdmF0aW9uLmg6CisgICAgICAgIChEZWJ1Z2dlckFjdGl2YXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50
cy5oOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuaDoKKyAgICAgICAgKEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmg6CisgICAgICAgIChBcnJheVByb3RvdHlwZSk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChCb29sZWFuUHJvdG90eXBlKToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6CisgICAgICAg
IChEYXRlQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5oOgorICAg
ICAgICAoRGF0ZVByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoK
KyAgICAgICAgKEVycm9yUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQpOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0FjdGl2
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgICogcnVudGltZS9K
U0NlbGwuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTTm90QW5PYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAoSlNPTk9iamVjdCk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3BlcnR5SXNF
bnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNQcm94eS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5o
OgorICAgICAgICAoSlNQcm94eSk6CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZUludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRT
dHJpbmdQcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZUdldCk6CisgICAgICAgICogcnVudGltZS9M
b29rdXAuY3BwOgorICAgICAgICAoSlNDOjpzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAg
ICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6Z2V0U3RhdGljUHJvcGVydHlT
bG90KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmdldFN0YXRpY1ZhbHVlU2xvdCk6
CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChNYXRoT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL05hbWVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL05hbWVQcm90b3R5cGUuaDoKKyAgICAgICAgKE5hbWVQcm90b3R5cGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmg6CisgICAgICAgIChOdW1iZXJDb25z
dHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAo
TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JTZWFs
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUpOgorICAgICAgICAoSlND
OjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3Ry
dWN0b3JJc0Zyb3plbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgor
ICAgICAgICAoT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaDoKKyAgICAgICAgKE9iamVjdFByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9Q
cm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3I6
OmVxdWFsVG8pOgorICAgICAgICAoSlNDOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKFByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmZ1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpjYWNoZWRQcm9wZXJ0eVR5cGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6Omlz
Q2FjaGVhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90Ojppc0NhY2hlYWJsZVZhbHVl
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhCYXNlKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VmFsdWVXaXRoQXR0cmlidXRlcyk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpzZXRDYWNoZWFibGVDdXN0b20pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNl
dEN1c3RvbUluZGV4KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRBY2Nlc3NvclNs
b3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldENhY2hlYWJsZUFjY2Vzc29yU2xv
dCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VW5kZWZpbmVkKToKKyAgICAgICAg
KFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y2xlYXJPZmZzZXQp
OgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmN1c3RvbUdldHRlcik6CisgICAgICAgIChK
U0M6OlByb3BlcnR5U2xvdDo6YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6d3JpdGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmVudW1lcmFibGUpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmNvbmZpZ3VyYWJsZSk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5U2xvdDo6aXNBY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6
Z2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRJbkdldE93blBy
b3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6aW5HZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
Lmg6CisgICAgICAgIChSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKFJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKFJlZ0V4cFByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmpl
Y3QuaDoKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5oOgorICAgICAgICAoU3RyaW5nUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpnZXQpOgorCiAyMDEzLTAxLTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5j
b20+CiAKICAgICAgICAgV2VhayBHQyBtYXBzIHNob3VsZCBiZSBlYXNpZXIgdG8gdXNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCShyZXZpc2lvbiAx
NDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAgcHVibGljOiBcCiAgICAgfVwKIFwKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtc
Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3ImKTtcCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0Nl
bGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlND
OjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1wKICAgICBzdGF0aWMgdm9pZCBwdXRC
eUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7XApAQCAtMTA2LDMxICsxMDUsMTggQEAgYm9vbCBKUyMj
bmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdAogICAgIHVuc2lnbmVkIGluZGV4ID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTtcCiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9y
YWdlTGVuZ3RoKSB7XAogICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KTtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChl
eGVjLCBpbmRleCkpO1wKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRoaXNP
YmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTtcCiAgICAgICAgIHJl
dHVybiB0cnVlO1wKICAgICB9XAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
Y2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTtcCiB9XAogXAotYm9vbCBKUyMjbmFtZSMj
QXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcilcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxl
bmd0aCkge1wKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCk7XAotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0QnlJ
bmRleChleGVjLCBpbmRleCksIERvbnREZWxldGUpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAot
ICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XAotfVwKLVwKIGJvb2wgSlMjI25hbWUj
I0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcCiB7XAog
ICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkq
PihjZWxsKTtcCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19p
bmZvKTtcCiAgICAgaWYgKHByb3BlcnR5TmFtZSA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0
aCkge1wKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMs
IHByb3BlcnR5TmFtZSkpO1wKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRo
aXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSk7XAog
ICAgICAgICByZXR1cm4gdHJ1ZTtcCiAgICAgfVwKICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7XApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzUsNyArMTc1LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRp
YyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTQwMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVJlZiA9IE9w
YXF1ZUpTU3RyaW5nOjpjcmVhdGUobmFtZSk7CiAgICAgICAgICAgICAgICAgQVBJQ2FsbGJhY2tT
aGltIGNhbGxiYWNrU2hpbShleGVjKTsKICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcGVydHko
Y3R4LCB0aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNhbGxiYWNrR2V0dGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgY2FsbGJhY2tHZXR0ZXIsIERv
bnRFbnVtKTsgLy8gV2UgZG9uJ3Qga25vdyB0aGUgYXR0cmlidXRlcywgc28gZ3Vlc3MuCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoSlNPYmplY3RHZXRQcm9wZXJ0eUNhbGxiYWNrIGdldFByb3BlcnR5ID0g
anNDbGFzcy0+Z2V0UHJvcGVydHkpIHsKQEAgLTE1MSwyOCArMTUxLDMwIEBAIGJvb2wgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5k
ZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0b0pTKGV4ZWMsIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyh0b0pTKGV4ZWMsIHZhbHVlKSwgRG9udEVudW0pOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3Rh
dGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3MtPnN0YXRpY1ZhbHVlcyhleGVj
KSkgewotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNWYWx1ZXMtPmNvbnRhaW5zKG5hbWUpKSB7
CisgICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjppdGVyYXRv
ciBlbnRyeSA9IHN0YXRpY1ZhbHVlcy0+ZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAo
ZW50cnkgIT0gc3RhdGljVmFsdWVzLT5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0U3RhdGljVmFsdWUoZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWVXaXRoQXR0cmlidXRlcyh2YWx1ZSwgZW50cnktPnZhbHVlLT5hdHRyaWJ1dGVzKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5j
dGlvbnMgPSBqc0NsYXNzLT5zdGF0aWNGdW5jdGlvbnMoZXhlYykpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhdGljRnVuY3Rpb25zLT5jb250YWlucyhuYW1lKSkgewotICAgICAgICAgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7Cisg
ICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjppdGVyYXRv
ciBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+ZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZW50cnkgIT0gc3RhdGljRnVuY3Rpb25zLT5lbmQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0aWNGdW5jdGlvbkdldHRlciwgZW50cnkt
PnZhbHVlLT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjEzLDI2ICsyMTUsNiBAQCBKU1Zh
bHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVmYXVsCiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBQYXJlbnQ+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpT
Q2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9i
amVjdCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1ldGhv
ZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgd2Ugc2hvdWxkIHJldHVybiBhbiBhY2Nl
c3MgZGVzY3JpcHRvciwgYnV0IHJldHVybmluZyBhIHZhbHVlIGRlc2NyaXB0b3IgaXMgYmV0dGVy
IHRoYW4gbm90aGluZy4KLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhl
YywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0VmFsdWUodmFsdWUpOwotICAgICAgICAvLyBXZSBkb24n
dCBrbm93IHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGNvbmZpZ3VyYWJsZSwgYnV0IGFzc3VtZSBp
dCBpcy4KLSAgICAgICAgZGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7Ci0gICAgICAg
IC8vIFdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgZW51bWVyYWJsZSAod2Ug
Y291bGQgY2FsbCBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgdG8gZmluZCBvdXQpLCBidXQgYXNzdW1l
IGl0IGlzbid0LgotICAgICAgICBkZXNjcmlwdG9yLnNldEVudW1lcmFibGUoZmFsc2UpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUGFyZW50OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIHZvaWQgSlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Qq
PihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
anMJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjIzLDIzICsyMjMsMjMgQEAgdmFyIGJhc2VE
dXBEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blBybwogc2hvdWxkQmUoJ3R5cGVvZiBiYXNlRHVw
RGVzY3JpcHRvcicsICJvYmplY3QiKTsKIHNob3VsZEJlKCdiYXNlRHVwRGVzY3JpcHRvci52YWx1
ZScsIGRlcml2ZWQuYmFzZUR1cCk7CiBzaG91bGRCZSgnYmFzZUR1cERlc2NyaXB0b3IuY29uZmln
dXJhYmxlJywgdHJ1ZSk7Ci1zaG91bGRCZSgnYmFzZUR1cERlc2NyaXB0b3IuZW51bWVyYWJsZScs
IGZhbHNlKTsKK3Nob3VsZEJlKCdiYXNlRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgdHJ1ZSk7
CiB2YXIgYmFzZU9ubHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihkZXJpdmVkLCAiYmFzZU9ubHkiKTsKIHNob3VsZEJlKCd0eXBlb2YgYmFzZU9ubHlEZXNjcmlw
dG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Jhc2VPbmx5RGVzY3JpcHRvci52YWx1ZScsIGRl
cml2ZWQuYmFzZU9ubHkpOwogc2hvdWxkQmUoJ2Jhc2VPbmx5RGVzY3JpcHRvci5jb25maWd1cmFi
bGUnLCB0cnVlKTsKLXNob3VsZEJlKCdiYXNlT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZh
bHNlKTsKK3Nob3VsZEJlKCdiYXNlT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwog
c2hvdWxkQmUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVyaXZlZCwgInByb3Rv
T25seSIpJywgdW5kZWZpbmVkKTsKIHZhciBwcm90b0R1cERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlcml2ZWQsICJwcm90b0R1cCIpOwogc2hvdWxkQmUoJ3R5
cGVvZiBwcm90b0R1cERlc2NyaXB0b3InLCAib2JqZWN0Iik7CiBzaG91bGRCZSgncHJvdG9EdXBE
ZXNjcmlwdG9yLnZhbHVlJywgZGVyaXZlZC5wcm90b0R1cCk7CiBzaG91bGRCZSgncHJvdG9EdXBE
ZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZScsIHRydWUpOwotc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3Jp
cHRvci5lbnVtZXJhYmxlJywgZmFsc2UpOworc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5l
bnVtZXJhYmxlJywgdHJ1ZSk7CiB2YXIgZGVyaXZlZE9ubHlEZXNjcmlwdG9yID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJpdmVkLCAiZGVyaXZlZE9ubHkiKTsKIHNob3VsZEJl
KCd0eXBlb2YgZGVyaXZlZE9ubHlEZXNjcmlwdG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Rl
cml2ZWRPbmx5RGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQuZGVyaXZlZE9ubHkpOwogc2hvdWxk
QmUoJ2Rlcml2ZWRPbmx5RGVzY3JpcHRvci5jb25maWd1cmFibGUnLCB0cnVlKTsKLXNob3VsZEJl
KCdkZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdk
ZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwogCiBzaG91bGRCZSgidW5k
ZWZpbmVkIGluc3RhbmNlb2YgTXlPYmplY3QiLCBmYWxzZSk7CiBFdmlsRXhjZXB0aW9uT2JqZWN0
Lmhhc0luc3RhbmNlID0gZnVuY3Rpb24gZigpIHsgcmV0dXJuIGYoKTsgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24u
Y3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTIgKzk1LDYgQEAg
dm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246OmdldE93blByb3BlcnR5TgogICAgIHRoaXNPYmplY3Qt
Pm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1i
b29sIERlYnVnZ2VyQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIERlYnVnZ2VyQWN0aXZhdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlckFjdGl2YXRpb24qPihvYmplY3QpOwotICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24tPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIGJvb2wgRGVidWdnZXJBY3RpdmF0aW9uOjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBz
aG91bGRUaHJvdykKIHsKICAgICBEZWJ1Z2dlckFjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RGVidWdnZXJBY3RpdmF0aW9uKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBKU19F
WFBPUlREQVRBIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGUKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4o
Y2VsbCk7CiAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVu
dChpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgc2xvdC5zZXRW
YWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVlLCBOb25lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0xMjgsMTggKzEyOCwxOCBAQCBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsCiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAg
ICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVudChpKSkgewog
ICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNs
b3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMo
dmFsdWUsIE5vbmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlz
T2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVt
YmVyKHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRzKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWVX
aXRoQXR0cmlidXRlcyhqc051bWJlcih0aGlzT2JqZWN0LT5tX251bUFyZ3VtZW50cyksIERvbnRF
bnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlICYmIExJS0VMWSghdGhpc09iamVjdC0+
bV9vdmVycm9kZUNhbGxlZSkpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX2lzU3RyaWN0
TW9kZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5tX2NhbGxlZS5n
ZXQoKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModGhpc09iamVj
dC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5l
Y2Vzc2FyeShleGVjKTsKQEAgLTE1MSwzNSArMTUxLDYgQEAgYm9vbCBBcmd1bWVudHM6OmdldE93
blByb3BlcnR5U2xvdChKU0NlbAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgQXJn
dW1lbnRzOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCi17Ci0gICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3Vt
ZW50cyo+KG9iamVjdCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVudChpKSkg
ewotICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgTm9uZSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkg
ewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+
bV9udW1Bcmd1bWVudHMpLCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxs
ZWUgJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSkgewotICAgICAgICBp
ZiAoIXRoaXNPYmplY3QtPm1faXNTdHJpY3RNb2RlKSB7Ci0gICAgICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHRoaXNPYmplY3QtPmNy
ZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShleGVjKTsKLSAgICB9Ci0KLSAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIgJiYgdGhpc09iamVj
dC0+bV9pc1N0cmljdE1vZGUpCi0gICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVD
YWxsZXJJZk5lY2Vzc2FyeShleGVjKTsKLSAgICAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOwotfQotCiB2b2lkIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8QXJndW1lbnRzKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTks
NiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSw2IEBAIGJv
b2wgQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG8KICAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25TbG90PEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlD
b25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlDb25zdHJ1Y3Rvcio+KGNlbGwpLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEFycmF5Q29uc3RydWN0b3I6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsK
LSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEludGVybmFsRnVuY3Rpb24+
KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJy
YXlDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmso
RXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBAQCBwcml2YXRlOgogICAgIEFycmF5Q29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0KICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENv
bnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MCwxMSArMTQwLDYgQEAgYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KAog
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNBcnJheT4oZXhlYywgRXhlY1N0YXRl
OjphcnJheVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlQcm90b3R5cGUqPihjZWxs
KSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQot
ewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNBcnJheT4oZXhlYywg
RXhlY1N0YXRlOjphcnJheVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlQcm90b3R5
cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogLy8gSGVscGVyIGZ1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBBcnJheVByb3RvdHlw
ZSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAgICAg
ICAgIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
blByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSAr
NjgsNiBAQCBib29sIEJvb2xlYW5Qcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvCiAgICAgcmV0
dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCb29sZWFuT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6
OmJvb2xlYW5Qcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEJvb2xlYW5Qcm90b3R5cGUqPihj
ZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBCb29sZWFuUHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxCb29sZWFuT2Jq
ZWN0PihleGVjLCBFeGVjU3RhdGU6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0
PEJvb2xlYW5Qcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwot
fQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xl
YW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDAy
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICBCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwotCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5
Miw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAKICAgICB0eXBlZGVmIGJvb2wgKCpEZWZpbmVP
d25Qcm9wZXJ0eUZ1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCk7CiAgICAgRGVmaW5lT3duUHJvcGVydHlGdW5j
dGlvblB0ciBkZWZpbmVPd25Qcm9wZXJ0eTsKLQotICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blBy
b3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogfTsKIAogI2RlZmluZSBD
UkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xMzcsNyArMTM0LDYgQEAgc3RydWN0
IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0VmlydHVhbCwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAotICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3Rv
cmFnZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwx
MSArOTEsNiBAQCBib29sIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAg
cmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVj
U3RhdGU6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZUNvbnN0cnVjdG9y
Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgRGF0ZUNvbnN0cnVjdG9y
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxJbnRlcm5h
bEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBq
c0Nhc3Q8RGF0ZUNvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKLX0KLQogLy8gRUNNQSAxNS45LjMKIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2Vs
bCosIENhbGxEYXRhJik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0KLSAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICB9OwogCiAg
ICAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBBcmdMaXN0Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMCwx
MSArNTIwLDYgQEAgYm9vbCBEYXRlUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSgogICAg
IHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6
ZGF0ZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZVByb3RvdHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCi1ib29sIERhdGVQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4g
Z2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OmRh
dGVUYWJsZShleGVjKSwganNDYXN0PERhdGVQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyBGdW5jdGlvbnMKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkocmV2aXNp
b24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDExICs2Niw2IEBAIGJvb2wgRXJyb3JQcm90b3R5cGU6OmdldE93blByb3BlcnR5
U2xvdCgKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEVycm9ySW5zdGFuY2U+KGV4
ZWMsIEV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEVycm9yUHJv
dG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgRXJyb3JQcm90
b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEVy
cm9ySW5zdGFuY2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZShleGVjKSwg
anNDYXN0PEVycm9yUHJvdG90eXBlKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQS0yNjIgNS4xLCAxNS4xMS40LjQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAko
cmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2
Niw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQKICAgICBpZiAo
aXNUb3JuT2ZmKCkgJiYgIWlzVmFsaWQoZW50cnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBzbG90LnNldFZhbHVlKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwor
ICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0xNDksNyArMTQ5LDcgQEAgYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xv
dChKUwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3Vt
ZW50cykgewogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBm
b3IgdGhlIGFyZ3VtZW50cyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4K
ICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1Rvcm5PZmYoKSkgewotICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+Z2V0QXJndW1lbnRzR2V0dGVyKCkp
OworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+Z2V0
QXJndW1lbnRzR2V0dGVyKCksIERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTU3LDggKzE1Nyw5IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlMKICAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQo
cHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSlNW
YWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgdW5zaWdu
ZWQgYXR0cmlidXRlcyA9IE5vbmU7CisgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0
LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVz
KSkgeworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE2OSwyNiArMTcwLDYgQEAg
Ym9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdChKUwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBKU0FjdGl2YXRpb24qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKLQotICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewotICAgICAgICAv
LyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgdGhlIGFyZ3VtZW50cyBv
YmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICAgICAgaWYgKCF0aGlz
T2JqZWN0LT5pc1Rvcm5PZmYoKSkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgICAgICAgICBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udEVudW0pOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGhpc09i
amVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBKU0Fj
dGl2YXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihjZWxs
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5o
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fj
dGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwyNCArMTgwLDEzIEBA
IGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoKIHsKICAgICBKU0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRW
YWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgICAgICBzbG90LnNldFZh
bHVlV2l0aEF0dHJpYnV0ZXMoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCB0aGlzT2Jq
ZWN0LT5pc0xlbmd0aFdyaXRhYmxlKCkgPyBEb250RGVsZXRlIHwgRG9udEVudW0gOiBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAg
IEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7Ci0gICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSks
IHRoaXNPYmplY3QtPmlzTGVuZ3RoV3JpdGFibGUoKSA/IERvbnREZWxldGUgfCBEb250RW51bSA6
IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gRUNN
QSAxNS40LjUuMQogdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNiBAQCBwdWJsaWM6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dF
eGNlcHRpb24pOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgIHN0YXRpYyBKU19FWFBPUlREQVRB
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsMTAg
KzIyMSw0IEBAIGJvb2wgSlNDZWxsOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCoKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYp
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw2IEBAIHByb3RlY3RlZDoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXN0b21IYXNJbnN0YW5jZShKU09iamVj
dCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FT
U0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEs
OCBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU0NlCiAgICAgICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSkgewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2Jq
ZWN0LT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtOworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKTsKICAgICAgICAg
aWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICBwcm90b3R5cGUtPnB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgdGhpc09iamVjdCwgRG9udEVudW0pOwpAQCAtMjMwLDcgKzIzMSw3IEBAIGJvb2wgSlNG
dW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgICAgIEFTU0VSVChpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KSwgb2Zmc2V0KTsKKyAgICAg
ICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5nZXREaXJlY3Qob2Zmc2V0KSwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKICAgICB9CiAKICAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKQEAg
LTI0MywxNyArMjQ0LDE3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpT
Q2UKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
LSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgYXJndW1lbnRzR2V0
dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgYXJndW1l
bnRzR2V0dGVyLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlz
T2JqZWN0LCBsZW5ndGhHZXR0ZXIpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0
aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRl
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkgewotICAgICAgICBzbG90LnNldENhY2hlYWJs
ZUN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFi
bGVDdXN0b20odGhpc09iamVjdCwgbmFtZUdldHRlciwgUmVhZE9ubHkgfCBEb250RW51bSB8IERv
bnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI2Nyw2NiArMjY4
LDEzIEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2xv
dC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgY2FsbGVyR2V0dGVyKTsKKyAgICAgICAg
c2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgY2FsbGVyR2V0dGVyLCBSZWFkT25s
eSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAg
SlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKLSAg
ICBpZiAodGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwotICAgIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAg
ICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1
dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFz
ZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMp
LCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnByZXRlcigpLT5yZXRy
aWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5IHwgRG9u
dEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAot
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewot
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+anNF
eGVjdXRhYmxlKCktPnBhcmFtZXRlckNvdW50KCkpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9u
dERlbGV0ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKSB7Ci0gICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+bmFtZVZhbHVl
KCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY2FsbGVyKSB7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNT
dHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNhbGxlckZy
b21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVs
ZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5j
dGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKQEAgLTQwNiwx
OSArMzU0LDIyIEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmoKICAg
ICAgICAgdGhpc09iamVjdC0+bV9pbmhlcml0b3JJRFdhdGNocG9pbnQubm90aWZ5V3JpdGUoKTsK
ICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQotCiAgICAgYm9v
bCB2YWx1ZUNoZWNrOwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cykgewogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCkt
PmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQot
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAg
ICAgICAvLyBHZXQgdGhlIHByb3BlcnR5IHRvIGZvcmNlIHJlaWZpY2F0aW9uLgorICAgICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gZ2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cisg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGhhc1Byb3BlcnR5LCBoYXNQcm9wZXJ0eSk7CiAgICAg
ICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAg
ICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUoZXhlYywgZGVz
Y3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zy
b21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKICAgICAgICAgaWYgKHRoaXNPYmpl
Y3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgaWYgKCFC
YXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
QWNjZXNzb3IpOworICAgICAgICAgICAgLy8gR2V0IHRoZSBwcm9wZXJ0eSB0byBmb3JjZSByZWlm
aWNhdGlvbi4KKyAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAgICAgICAgYm9v
bCBoYXNQcm9wZXJ0eSA9IGdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChoYXNQcm9wZXJ0eSwg
aGFzUHJvcGVydHkpOwogICAgICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7
CiAgICAgICAgIH0KICAgICAgICAgdmFsdWVDaGVjayA9ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwg
c2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+
cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmplY3QpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0MDI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTY1LDcgKzE2NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJ1Y3R1
cmUqIGNhY2hlSW5oZXJpdG9ySUQoRXhlY1N0YXRlKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0g
RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwMjk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NjAsMTQgKzU2MCw2IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCgKICAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQodGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAg
IEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2Jq
ZWN0KTsKLSAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEJhc2U+KGV4ZWMsIEV4
ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBzeW1ib2xU
YWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpjbGVhclJhcmVEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICBqc0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+bV9yYXJlRGF0YS5jbGVhcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICAgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eUZvcldy
aXRlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDEyICs1OSw2IEBAIGJvb2wgSlNOb3RBbk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNOb3RBbk9iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5o
YWRFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEpTTm90QW5PYmpl
Y3Q6OnB1dChKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSAsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRF
eGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFu
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNO
b3RBbk9iamVjdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEpTT2JqZWN0IG1ldGhvZHMKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MDUsMTEgKzYwNSw2IEBAIGJvb2wgSlNPTk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UK
ICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBFeGVjU3Rh
dGU6Ompzb25UYWJsZShleGVjKSwganNDYXN0PEpTT05PYmplY3QqPihjZWxsKSwgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU09OT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdl
dFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpqc29u
VGFibGUoZXhlYyksIGpzQ2FzdDxKU09OT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKLX0KLQogY2xhc3MgV2Fsa2VyIHsKIHB1YmxpYzoKICAgICBXYWxrZXIoRXhl
Y1N0YXRlKiBleGVjLCBIYW5kbGU8SlNPYmplY3Q+IGZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlw
ZSwgQ2FsbERhdGEgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNPTk9iamVjdChKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLQogICAgIH07
CiAKICAgICBTdHJpbmcgSlNPTlN0cmluZ2lmeShFeGVjU3RhdGUqLCBKU1ZhbHVlLCB1bnNpZ25l
ZCBpbmRlbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyArMjg1LDcgQEAgYm9vbCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgICAgICAKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBpZiAo
dmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVlLCBOb25lKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjk5LDcgKzI5OSw3IEBAIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICAgICAgCiAgICAgICAgIGRv
dWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICBp
ZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWVXaXRoQXR0cmlidXRlcyhKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSks
IE5vbmUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0zMTQsNyArMzE0LDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eAogICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAg
ICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIE5vbmUpOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdl
dCgpKSB7CkBAIC0xNDIwLDEwICsxNDIwLDEwIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJ
bnN0YW5jZShFeGVjU3QKIAogYm9vbCBKU09iamVjdDo6cHJvcGVydHlJc0VudW1lcmFibGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0g
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgaWYgKCFjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihj
b25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cikpCisgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgaWYgKCFjb25zdF9jYXN0PEpTT2JqZWN0
Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCk7CisgICAgcmV0dXJu
IHNsb3QuZW51bWVyYWJsZSgpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNwZWNp
ZmljVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0Nl
bGwqJiBzcGVjaWZpY1ZhbHVlKSBjb25zdApAQCAtMTYzMCwxNSArMTYzMCwxMyBAQCBib29sIEpT
T2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3Bl
cnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorTkVWRVJfSU5MSU5FIHZvaWQg
SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7Ci0gICAgaWYgKEpTT2Jq
ZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0dGVyKGdldERpcmVjdChvZmZzZXQpKS0+
Z2V0dGVyKCkpIHsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCi0g
ICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUdldHRlclNsb3QodGhpcywgZ2V0dGVyRnVuY3Rp
b24sIG9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xv
dChnZXR0ZXJGdW5jdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVk
KCk7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihnZXRE
aXJlY3Qob2Zmc2V0KSk7CisgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQWNjZXNzb3JTbG90KHRoaXMsIGdldHRlclNldHRlciwg
b2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3Quc2V0QWNjZXNzb3JT
bG90KGdldHRlclNldHRlciwgYXR0cmlidXRlcyk7CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dElu
ZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJ
bk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IG9sZERlc2NyaXB0b3IpCkBAIC0yMzYzLDgwICsyMzYxLDExIEBAIEJ1dHRlcmZseSogSlNPYmpl
Y3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIG9sZFNpemUsIG5ld1NpemUpOwog
fQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7
Ci0gICAgSlNDZWxsKiBjZWxsID0gMDsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmpl
Y3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIGNlbGwpOwotICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0KG9mZnNldCksIGF0
dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWdu
ZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgPT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgc3dpdGNoIChv
YmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBjYXNlIEFMTF9JTlQzMl9JTkRF
WElOR19UWVBFUzoKLSAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0g
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKLSAgICAg
ICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIDApOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElO
R19UWVBFUzogewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iamVjdC0+bV9idXR0
ZXJmbHk7Ci0gICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihK
U1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSksIDApOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxl
bmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaSA8IHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+
bV9zcGFyc2VNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICAgICAgaWYgKGl0ID09IG1hcC0+bm90
Rm91bmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpdC0+
dmFsdWUuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBpZiAob2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQorICAgICAg
ICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlmICghcHJvdG90eXBl
LmlzT2JqZWN0KCkpCkBAIC0yNTE5LDcgKzI0NDgsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVP
d25Ob25JbmRleFByb3BlcnR5CiAgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0
eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
Y3VycmVudDsKLSAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CisgICAgaWYgKCFnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewog
ICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUgcHJldmVudGVkIQogICAgICAgICBpZiAo
IWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDE3ICs3NCw2IEBAIHN0cnVjdCBIYXNoVGFibGU7CiBKU19FWFBPUlRfUFJJ
VkFURSBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7
CiBleHRlcm4gSlNfRVhQT1JUREFUQSBjb25zdCBjaGFyKiBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3I7CiAKLS8vIEVDTUEgMjYyLTMgOC42LjEKLS8vIFByb3BlcnR5IGF0dHJp
YnV0ZXMKLWVudW0gQXR0cmlidXRlIHsKLSAgICBOb25lICAgICAgICAgPSAwLAotICAgIFJlYWRP
bmx5ICAgICA9IDEgPDwgMSwgIC8vIHByb3BlcnR5IGNhbiBiZSBvbmx5IHJlYWQsIG5vdCB3cml0
dGVuCi0gICAgRG9udEVudW0gICAgID0gMSA8PCAyLCAgLy8gcHJvcGVydHkgZG9lc24ndCBhcHBl
YXIgaW4gKGZvciAuLiBpbiAuLikKLSAgICBEb250RGVsZXRlICAgPSAxIDw8IDMsICAvLyBwcm9w
ZXJ0eSBjYW4ndCBiZSBkZWxldGVkCi0gICAgRnVuY3Rpb24gICAgID0gMSA8PCA0LCAgLy8gcHJv
cGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBieSBzdGF0aWMgaGFzaHRhYmxlcwotICAg
IEFjY2Vzc29yICAgICA9IDEgPDwgNSwgIC8vIHByb3BlcnR5IGlzIGEgZ2V0dGVyL3NldHRlcgot
fTsKLQogQ09NUElMRV9BU1NFUlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIE5vbmVf
aXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CiBDT01QSUxFX0FTU0VSVChSZWFkT25s
eSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRPbmx5X2lzX2JlbG93X0ZpcnN0SW50ZXJu
YWxBdHRyaWJ1dGUpOwogQ09NUElMRV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0
cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKQEAgLTEz
OCw3ICsxMjcsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKIAogICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIApAQCAt
NDkzLDE2ICs0ODEsMTYgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0UHJvcGVydHlTcGVjaWZpY1Zh
bHVlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNGdW5jdGlvbikg
Y29uc3Q7CiAKICAgICAvLyBUaGlzIGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBwcm9w
ZXJ0eSBtYXAuCi0gICAgSlNWYWx1ZSBnZXREaXJlY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAorICAgIEpTVmFsdWUgZ2V0RGlyZWN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQqIGF0dHJpYnV0ZXMgPSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERh
dGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNl
dCwgc3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4gb2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQgPyBnZXREaXJlY3Qob2Zmc2V0KSA6IEpTVmFsdWUoKTsKICAgICB9
CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorICAgIFByb3BlcnR5T2Zmc2V0IGdl
dERpcmVjdE9mZnNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkKiBhdHRyaWJ1dGVzID0gMCkKICAgICB7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlO
YW1lKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChn
bG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBjaGVja09mZnNl
dChvZmZzZXQsIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgcmV0dXJu
IG9mZnNldDsKICAgICB9CkBAIC05MjEsNyArOTA5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHB1
dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlNDZWxsKik7CiAKICAgICBib29sIGlubGlu
ZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQ
cm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0LCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5
SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIApAQCAt
MTEzOCwxMyArMTEyNiwxNCBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6cHJvdG90eXBlKCkg
Y29uCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXMgPSBOb25lOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKTsKICAgICBp
ZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGdldERpcmVjdChvZmZzZXQpOwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRl
clNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQotICAgICAgICAg
ICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOworICAgICAgICAgICAgZmls
bEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIHZhbHVlLCBvZmZzZXQpOworICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCh0aGlzLCB2YWx1ZSwgb2Zm
c2V0LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMTQwMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDEyICs3Myw2IEBAIGJvb2wgSlNQcm94eTo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCgKICAgICByZXR1cm4gdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNQcm94eTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpTUHJv
eHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRo
aXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
Ci19Ci0KIHZvaWQgSlNQcm94eTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lv
biAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRE
aXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBA
IHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpTU2MKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE92ZXJyaWRlIGN1c3RvbSBhY2Nlc3NvciBiZWhhdmlvdXIgdGhhdCB0aGUg
RE9NIGludHJvZHVjZXMgZm9yIHNvbWUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50
IGhhbmRsZXJzIGRlY2xhcmVkIG9uIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghcmVxdWlyZXNEeW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQmFzZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuVmFsdWVzKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFJldHVyblZhbHVlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghcHV0VG9CYXNlT3BlcmF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDY1
LDE0ICs0NjUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQUxXQVlTX0lOTElORSBib29sIEpT
U3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIobV9sZW5ndGgpKTsKKyAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWVXaXRoQXR0cmlidXRlcyhqc051bWJlcihtX2xlbmd0aCksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgICAg
IGlmIChpIDwgbV9sZW5ndGgpIHsKICAgICAgICAgICAgIEFTU0VSVChpICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7IC8vIE5vIG5lZWQgZm9yIGFuIGV4cGxpY2l0IGNoZWNrLCB0aGUgYWJv
dmUgdGVzdCB3b3VsZCBhbHdheXMgZmFpbCEKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0
SW5kZXgoZXhlYywgaSkpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVz
KGdldEluZGV4KGV4ZWMsIGkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtNDgyLDcgKzQ4Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiAgICAgewogICAgICAgICBpZiAocHJvcGVydHlOYW1lIDwgbV9sZW5ndGgpIHsKLSAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7Cisg
ICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMoZ2V0SW5kZXgoZXhlYywgcHJv
cGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzgsMjIgKzc4LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRl
ci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1
ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+Ci1p
bmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKLSAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQotewotICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJv
bFRhYmxlKCk7Ci0gICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5m
aW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgIGlmIChpdGVyID09IHN5bWJvbFRh
YmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6
RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwotICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwot
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKLSAgICAgICAgb2JqZWN0LT5yZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVs
ZXRlKTsKKyAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMob2JqZWN0LT5yZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVs
ZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA4LDcgKzkzLDcgQEAgaW5saW5lIGJv
b2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJs
ZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051
bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhvYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8
IERvbnREZWxldGUpOwogICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xvb2t1cC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgYm9vbCBz
ZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogewogICAgIEFTU0VSVCh0aGlzT2Jq
LT5nbG9iYWxPYmplY3QoKSk7CiAgICAgQVNTRVJUKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5j
dGlvbik7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gdGhpc09iai0+Z2V0RGlyZWN0T2Zm
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXMoKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsICZhdHRyaWJ1dGVzKTsKIAogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAg
ICAgICAgIC8vIElmIGEgcHJvcGVydHkgaXMgZXZlciBkZWxldGVkIGZyb20gYW4gb2JqZWN0IHdp
dGggYSBzdGF0aWMgdGFibGUsIHRoZW4gd2UgcmVpZnkKQEAgLTg2LDcgKzg3LDcgQEAgYm9vbCBz
ZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICB9CiAKLSAgICBzbG90LnNldFZhbHVlKHRoaXNPYmosIHRo
aXNPYmotPmdldERpcmVjdChvZmZzZXQpLCBvZmZzZXQpOworICAgIHNsb3Quc2V0VmFsdWVXaXRo
UHJvcGVydHlPZmZzZXQodGhpc09iaiwgdGhpc09iai0+Z2V0RGlyZWN0KG9mZnNldCksIG9mZnNl
dCwgYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDI4ICsy
NTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkg
JiBGdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChl
eGVjLCBlbnRyeSwgdGhpc09iaiwgcHJvcGVydHlOYW1lLCBzbG90KTsKIAotICAgICAgICBzbG90
LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1w
LCBjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIGJvb2wgZ2V0U3RhdGljUHJvcGVydHlEZXNj
cmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgVGhpc0ltcCog
dGhpc09iaiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQotICAgIHsKLSAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxl
LT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFlbnRy
eSkgLy8gbm90IGZvdW5kLCBmb3J3YXJkIHRvIHBhcmVudAotICAgICAgICAgICAgcmV0dXJuIFBh
cmVudEltcDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7Ci0gCi0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAg
ICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICBib29s
IHByZXNlbnQgPSBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChleGVjLCBlbnRyeSwgdGhpc09iaiwg
cHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAgIGlmIChwcmVzZW50KQotICAgICAgICAg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgcmV0dXJuIHByZXNl
bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+
cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOworICAg
ICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0
ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMjk1LDI4ICsyNzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAgICAgCiAgICAg
LyoqCi0gICAgICogU2ltcGxpZmllZCB2ZXJzaW9uIG9mIGdldFN0YXRpY1Byb3BlcnR5RGVzY3Jp
cHRvciBpbiBjYXNlIHRoZXJlIGFyZSBvbmx5IGZ1bmN0aW9ucy4KLSAgICAgKiBVc2luZyB0aGlz
IGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIGFsbG93cyAndGhpcycgdG8g
YXZvaWQgaW1wbGVtZW50aW5nCi0gICAgICogYSBkdW1teSBnZXRWYWx1ZVByb3BlcnR5LgotICAg
ICAqLwotICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIGJvb2wgZ2V0
U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFRhYmxl
KiB0YWJsZSwgSlNPYmplY3QqIHRoaXNPYmosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLSAgICB7Ci0gICAgICAgIGlmIChQYXJlbnRJ
bXA6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdGF0aWNfY2FzdDxQYXJlbnRJbXAqPih0aGlz
T2JqKSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAKLSAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxl
LT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoIWVudHJ5KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgICAgIGJvb2wgcHJlc2VudCA9IHNldFVwU3RhdGljRnVuY3Rpb25TbG90KGV4ZWMsIGVu
dHJ5LCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICBpZiAocHJlc2VudCkK
LSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMs
IHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICByZXR1cm4gcHJl
c2VudDsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0
U3RhdGljUHJvcGVydHlTbG90IGluIGNhc2UgdGhlcmUgYXJlIG5vIGZ1bmN0aW9ucywgb25seSAi
dmFsdWVzIi4KICAgICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlT
bG90IHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVuY0ltcCBjbGFzcy4KICAgICAgKi8KQEAgLTMz
MCwyNiArMjg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQVNTRVJUKCEoZW50cnkt
PmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSk7CiAKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVD
dXN0b20odGhpc09iaiwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0
U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIGluIGNhc2UgdGhlcmUgYXJlIG5vIGZ1bmN0aW9ucywg
b25seSAidmFsdWVzIi4KLSAgICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgZ2V0U3RhdGljUHJv
cGVydHlEZXNjcmlwdG9yIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVuY0ltcCBjbGFzcy4KLSAg
ICAgKi8KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgotICAg
IGlubGluZSBib29sIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEhhc2hUYWJsZSogdGFibGUsIFRoaXNJbXAqIHRoaXNPYmosIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLSAgICB7Ci0gICAgICAg
IGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZW50cnkpIC8vIG5vdCBmb3VuZCwgZm9yd2FyZCB0
byBwYXJlbnQKLSAgICAgICAgICAgIHJldHVybiBQYXJlbnRJbXA6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcih0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSk7Ci0g
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2Jq
LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJv
cGVydHlHZXR0ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9i
amVjdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTEgKzEwOSw2IEBAIGJv
b2wgTWF0aE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om1hdGhUYWJsZShleGVj
KSwganNDYXN0PE1hdGhPYmplY3QqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
Ym9vbCBNYXRoT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVz
Y3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRlOjptYXRoVGFibGUoZXhlYyksIGpzQ2Fz
dDxNYXRoT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNBYnMoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAg
ICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFt
ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmFtZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Mywx
MSArNjMsNiBAQCBib29sIE5hbWVQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKCiAgICAg
cmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCYXNlPihleGVjLCBFeGVjU3RhdGU6OnByaXZh
dGVOYW1lUHJvdG90eXBlVGFibGUoZXhlYyksIGpzQ2FzdDxOYW1lUHJvdG90eXBlKj4oY2VsbCks
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgTmFtZVByb3RvdHlwZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewot
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8QmFzZT4oZXhlYywgRXhlY1N0
YXRlOjpwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8TmFtZVByb3RvdHlw
ZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZU5hbWVQcm90b0Z1bmNU
b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYW1lUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmFtZVByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDYgQEAgYm9vbCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0T3du
UHJvcGVydHlTbAogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8TnVtYmVyQ29uc3RydWN0
b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6bnVtYmVyQ29uc3RydWN0b3JU
YWJsZShleGVjKSwganNDYXN0PE51bWJlckNvbnN0cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKLWJvb2wgTnVtYmVyQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1
cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPE51bWJlckNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1
bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6Om51bWJlckNvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpz
Q2FzdDxOdW1iZXJDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7Ci19Ci0KIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGxvb2t1cFB1dDxOdW1iZXJDb25zdHJ1Y3Rvciwg
SW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRXhlY1N0YXRlOjpu
dW1iZXJDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8TnVtYmVyQ29uc3RydWN0b3IqPihj
ZWxsKSwgc2xvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgICAgICBKU1ZhbHVlIGdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTEgKzg4LDYgQEAgYm9vbCBOdW1iZXJQcm90b3R5cGU6OmdldE93blByb3BlcnR5
U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8TnVtYmVyT2JqZWN0PihleGVj
LCBFeGVjU3RhdGU6Om51bWJlclByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8TnVtYmVyUHJv
dG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgTnVtYmVyUHJv
dG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxO
dW1iZXJPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6bnVtYmVyUHJvdG90eXBlVGFibGUoZXhlYyks
IGpzQ2FzdDxOdW1iZXJQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHRv
VGhpc051bWJlcihKU1ZhbHVlIHRoaXNWYWx1ZSwgZG91YmxlJiB4KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHBy
aXZhdGU6CiAgICAgICAgIE51bWJlclByb3RvdHlwZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsK
ICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDExICs5Nyw2
IEBAIGJvb2wgT2JqZWN0Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2wKICAgICByZXR1cm4g
Z2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om9iamVjdENv
bnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxPYmplY3RDb25zdHJ1Y3Rvcio+KGNlbGwpLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIE9iamVjdENvbnN0cnVjdG9yOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17
Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywg
RXhlY1N0YXRlOjpvYmplY3RDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8T2JqZWN0Q29u
c3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyBF
Q01BIDE1LjIuMgogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdE9iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CkBAIC0xNDksMTIgKzE0NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0CiB7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3RlZCBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEg
dmFsdWUgdGhhdCBpcyBub3QgYW4gb2JqZWN0LiIpKSk7Ci0gICAgU3RyaW5nIHByb3BlcnR5TmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKKwogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBkZXNjcmlwdG9yOwotICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFt
ZSksIGRlc2NyaXB0b3IpKQorICAgIGlmICghZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zODAs
NyArMzc2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAg
IGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVz
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0IGRlc2Mg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBQLgogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAg
ICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgaWYgKCFnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCAqaXRlciwgZGVzYykpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIGlzIHRydWUsIHNl
dCBkZXNjLltbQ29uZmlndXJhYmxlXV0gdG8gZmFsc2UuCiAgICAgICAgIGRlc2Muc2V0Q29uZmln
dXJhYmxlKGZhbHNlKTsKQEAgLTQxNyw3ICs0MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdENvbnN0CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewog
ICAgICAgICAvLyBhLiBMZXQgZGVzYyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIFAuCiAgICAgICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBkZXNjOwotICAgICAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgKml0ZXIsIGRlc2MpKQorICAg
ICAgICBpZiAoIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBk
ZXNjKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvLyBiLiBJZiBJc0RhdGFEZXNj
cmlwdG9yKGRlc2MpIGlzIHRydWUsIHRoZW4KICAgICAgICAgLy8gaS4gSWYgZGVzYy5bW1dyaXRh
YmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tXcml0YWJsZV1dIHRvIGZhbHNlLgpAQCAtNDY0LDEx
ICs0NjAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAg
IFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgp
OwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9w
ZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0
IGRlc2MgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50
ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLgotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVz
YzsKLSAgICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Q7CisgICAgICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBleGVjLCAqaXRlciwgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIGlzIHRydWUsIHRoZW4gcmV0
dXJuIGZhbHNlLgotICAgICAgICBpZiAoZGVzYy5jb25maWd1cmFibGUoKSkKKyAgICAgICAgaWYg
KHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApAQCAtNDk0LDEyICs0OTAsMTIgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIFByb3BlcnR5TmFtZUFycmF5
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVy
dHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBQLgotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAgICAgICAgaWYgKCFv
YmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4
ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIGlm
ICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVj
LCAqaXRlciwgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gYi4gSWYg
SXNEYXRhRGVzY3JpcHRvcihkZXNjKSBpcyB0cnVlIHRoZW4KICAgICAgICAgLy8gaS4gSWYgZGVz
Yy5bW1dyaXRhYmxlXV0gaXMgdHJ1ZSwgcmV0dXJuIGZhbHNlLiBjLiBJZiBkZXNjLltbQ29uZmln
dXJhYmxlXV0gaXMgdHJ1ZSwgdGhlbiByZXR1cm4gZmFsc2UuCi0gICAgICAgIGlmICgoZGVzYy5p
c0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzYy53cml0YWJsZSgpKSB8fCBkZXNjLmNvbmZpZ3VyYWJs
ZSgpKQorICAgICAgICBpZiAoKCFzbG90LmlzQWNjZXNzb3IoKSAmJiBzbG90LndyaXRhYmxlKCkp
IHx8IHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDAyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsMTEgKzgxLDYgQEAgYm9vbCBPYmplY3RQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdAog
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNOb25GaW5hbE9iamVjdD4oZXhlYywg
RXhlY1N0YXRlOjpvYmplY3RQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PE9iamVjdFByb3Rv
dHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIE9iamVjdFByb3Rv
dHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNO
b25GaW5hbE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpvYmplY3RQcm90b3R5cGVUYWJsZShleGVj
KSwganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZp
c2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwcml2YXRlOgogICAgICAgICBPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODgsOCArMTg4LDggQEAgYm9vbCBQcm9wZXJ0eURlc2NyaXB0b3I6OmVxdWFs
VG8oRXhlY1N0YQogICAgICAgICAhb3RoZXIubV9zZXR0ZXIgPT0gbV9zZXR0ZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gKCFtX3ZhbHVlIHx8IHNhbWVWYWx1ZShleGVjLCBv
dGhlci5tX3ZhbHVlLCBtX3ZhbHVlKSkKLSAgICAgICAgJiYgKCFtX2dldHRlciB8fCBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChleGVjLCBvdGhlci5tX2dldHRlciwgbV9nZXR0ZXIpKQotICAgICAgICAm
JiAoIW1fc2V0dGVyIHx8IEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIG90aGVyLm1fc2V0dGVy
LCBtX3NldHRlcikpCisgICAgICAgICYmICghbV9nZXR0ZXIgfHwgc2FtZVZhbHVlKGV4ZWMsIG90
aGVyLm1fZ2V0dGVyLCBtX2dldHRlcikpCisgICAgICAgICYmICghbV9zZXR0ZXIgfHwgc2FtZVZh
bHVlKGV4ZWMsIG90aGVyLm1fc2V0dGVyLCBtX3NldHRlcikpCiAgICAgICAgICYmIGF0dHJpYnV0
ZXNFcXVhbChvdGhlcik7CiB9CiAKQEAgLTIyMyw0ICsyMjMsMzAgQEAgdW5zaWduZWQgUHJvcGVy
dHlEZXNjcmlwdG9yOjphdHRyaWJ1dGVzTwogICAgIHJldHVybiAobV9hdHRyaWJ1dGVzICYgb3Zl
cnJpZGVNYXNrKSB8IChjdXJyZW50QXR0cmlidXRlcyAmIH5vdmVycmlkZU1hc2spOwogfQogCiti
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBzbG90LnNldEluR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKCk7CisgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2xvdC5pc0FjY2Vzc29yKCkpCisgICAgICAgIGRl
c2NyaXB0b3Iuc2V0QWNjZXNzb3JEZXNjcmlwdG9yKHNsb3QuZ2V0dGVyU2V0dGVyKCksIHNsb3Qu
YXR0cmlidXRlcygpKTsKKyAgICBlbHNlCisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QuYXR0cmlidXRlcygpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsK
KyAgICBzbG90LnNldEluR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCk7CisgICAgaWYgKCFvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNs
b3QuaXNBY2Nlc3NvcigpKQorICAgICAgICBkZXNjcmlwdG9yLnNldEFjY2Vzc29yRGVzY3JpcHRv
cihzbG90LmdldHRlclNldHRlcigpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CisgICAgZWxzZQorICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBHZXR0ZXJTZXR0ZXI7CisgICAgY2xhc3MgUHJv
cGVydHlOYW1lOwogCiAgICAgLy8gU2VlIEVTNS4xIDkuMTIKICAgICBib29sIHNhbWVWYWx1ZShF
eGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKQEAgLTQxLDYgKzQyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICAsIG1fc2VlbkF0dHJpYnV0ZXMoMCkKICAgICAgICAgewogICAg
ICAgICB9CisKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB3cml0YWJsZSgpIGNvbnN0
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGVudW1lcmFibGUoKSBjb25zdDsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb25maWd1cmFibGUoKSBjb25zdDsKQEAgLTgz
LDYgKzg1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRl
czsKICAgICAgICAgdW5zaWduZWQgbV9zZWVuQXR0cmlidXRlczsKICAgICB9OworCisgICAgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9w
ZXJ0eVNsb3QuaCIKIAorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKQEAgLTI5LDEzICszMCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogSlNWYWx1ZSBQcm9w
ZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKKyAgICBK
U09iamVjdCogZ2V0dGVyRnVuYyA9IG1fZGF0YS5hY2Nlc3Nvci5nZXR0ZXJTZXR0ZXItPmdldHRl
cigpOworICAgIGlmICghZ2V0dGVyRnVuYykKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKICAgICAvLyBQcmV2ZW50IGdldHRlciBmdW5jdGlvbnMgZnJvbSBvYnNlcnZpbmcgZXhlY3V0
aW9uIGlmIGFuIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpOwogCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBtX2RhdGEuZ2V0dGVyRnVuYy0+bWV0
aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEobV9kYXRhLmdldHRlckZ1bmMsIGNhbGxEYXRhKTsKLSAg
ICByZXR1cm4gY2FsbChleGVjLCBtX2RhdGEuZ2V0dGVyRnVuYywgY2FsbFR5cGUsIGNhbGxEYXRh
LCBtX3RoaXNWYWx1ZS5pc09iamVjdCgpID8gbV90aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
IDogbV90aGlzVmFsdWUsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldHRlckZ1bmMtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlckZ1bmMsIGNh
bGxEYXRhKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShtX2RhdGEu
YWNjZXNzb3IudGhpc1ZhbHVlKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXJGdW5jLCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZS5pc09iamVjdCgpID8gdGhpc1ZhbHVlLnRvVGhp
c09iamVjdChleGVjKSA6IHRoaXNWYWx1ZSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjEyICszMCwyNTEg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3Mg
SlNPYmplY3Q7Ci0KLSNkZWZpbmUgSlNDX1ZBTFVFX01BUktFUiAwCi0jZGVmaW5lIElOREVYX0dF
VFRFUl9NQVJLRVIgcmVpbnRlcnByZXRfY2FzdDxHZXRWYWx1ZUZ1bmM+KDIpCi0jZGVmaW5lIEdF
VFRFUl9GVU5DVElPTl9NQVJLRVIgcmVpbnRlcnByZXRfY2FzdDxHZXRWYWx1ZUZ1bmM+KDMpCi0K
LSAgICBjbGFzcyBQcm9wZXJ0eVNsb3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBDYWNo
ZWRQcm9wZXJ0eVR5cGUgewotICAgICAgICAgICAgVW5jYWNoZWFibGUsCi0gICAgICAgICAgICBH
ZXR0ZXIsCi0gICAgICAgICAgICBDdXN0b20sCi0gICAgICAgICAgICBWYWx1ZQotICAgICAgICB9
OwotCi0gICAgICAgIFByb3BlcnR5U2xvdCgpCi0gICAgICAgICAgICA6IG1fY2FjaGVkUHJvcGVy
dHlUeXBlKFVuY2FjaGVhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhckJhc2UoKTsK
LSAgICAgICAgICAgIGNsZWFyT2Zmc2V0KCk7Ci0gICAgICAgICAgICBjbGVhclZhbHVlKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBleHBsaWNpdCBQcm9wZXJ0eVNsb3QoY29uc3QgSlNWYWx1ZSBi
YXNlKQotICAgICAgICAgICAgOiBtX3Nsb3RCYXNlKGJhc2UpCi0gICAgICAgICAgICAsIG1fY2Fj
aGVkUHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVh
ck9mZnNldCgpOwotICAgICAgICAgICAgY2xlYXJWYWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdHlwZWRlZiBKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU1ZhbHVlIHNs
b3RCYXNlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICB0eXBlZGVmIEpTVmFsdWUgKCpHZXRJbmRl
eFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBzbG90QmFzZSwgdW5zaWduZWQpOwotCi0g
ICAgICAgIEpTVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9nZXRWYWx1ZSA9
PSBKU0NfVkFMVUVfTUFSS0VSKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAg
ICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gSU5ERVhfR0VUVEVSX01BUktFUikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbV9nZXRJbmRleFZhbHVlKGV4ZWMsIHNsb3RCYXNlKCksIGluZGV4KCkp
OwotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gR0VUVEVSX0ZVTkNUSU9OX01BUktFUikK
LSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2V0
VmFsdWUgPT0gSlNDX1ZBTFVFX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1
ZTsKLSAgICAgICAgICAgIGlmIChtX2dldFZhbHVlID09IElOREVYX0dFVFRFUl9NQVJLRVIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2V0SW5kZXhWYWx1ZShleGVjLCBtX3Nsb3RCYXNlLCBt
X2RhdGEuaW5kZXgpOwotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gR0VUVEVSX0ZVTkNU
SU9OX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ2Fj
aGVkUHJvcGVydHlUeXBlIGNhY2hlZFByb3BlcnR5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkUHJvcGVydHlUeXBlOyB9Ci0gICAgICAgIGJvb2wgaXNDYWNoZWFibGUoKSBjb25zdCB7IHJl
dHVybiBtX2NhY2hlZFByb3BlcnR5VHlwZSAhPSBVbmNhY2hlYWJsZTsgfQotICAgICAgICBib29s
IGlzQ2FjaGVhYmxlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFByb3BlcnR5VHlwZSA9
PSBWYWx1ZTsgfQotICAgICAgICBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNDYWNoZWFibGUoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKEpT
VmFsdWUgc2xvdEJhc2UsIEpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBjbGVhck9mZnNldCgpOwotICAgICAgICAgICAgbV9n
ZXRWYWx1ZSA9IEpTQ19WQUxVRV9NQVJLRVI7Ci0gICAgICAgICAgICBtX3Nsb3RCYXNlID0gc2xv
dEJhc2U7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHZvaWQgc2V0VmFsdWUoSlNWYWx1ZSBzbG90QmFzZSwgSlNWYWx1ZSB2YWx1ZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodmFs
dWUpOwotICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IEpTQ19WQUxVRV9NQVJLRVI7Ci0gICAgICAg
ICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWU7
Ci0gICAgICAgICAgICBtX29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgIG1fY2FjaGVkUHJv
cGVydHlUeXBlID0gVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKEpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAg
ICAgICAgICBjbGVhckJhc2UoKTsKLSAgICAgICAgICAgIGNsZWFyT2Zmc2V0KCk7Ci0gICAgICAg
ICAgICBtX2dldFZhbHVlID0gSlNDX1ZBTFVFX01BUktFUjsKLSAgICAgICAgICAgIG1fdmFsdWUg
PSB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0Q3VzdG9tKEpTVmFsdWUgc2xv
dEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKHNsb3RCYXNlKTsKLSAgICAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7Ci0gICAgICAgICAg
ICBtX2dldFZhbHVlID0gZ2V0VmFsdWU7Ci0gICAgICAgICAgICBtX2dldEluZGV4VmFsdWUgPSAw
OwotICAgICAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHNldENhY2hlYWJsZUN1c3RvbShKU1ZhbHVlIHNsb3RCYXNlLCBHZXRW
YWx1ZUZ1bmMgZ2V0VmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzbG90QmFz
ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOwotICAgICAgICAgICAgbV9nZXRWYWx1
ZSA9IGdldFZhbHVlOwotICAgICAgICAgICAgbV9nZXRJbmRleFZhbHVlID0gMDsKLSAgICAgICAg
ICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAgICAgICAgIG1fY2FjaGVkUHJvcGVydHlU
eXBlID0gQ3VzdG9tOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRDdXN0b21JbmRleChK
U1ZhbHVlIHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCwgR2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5k
ZXhWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKLSAgICAg
ICAgICAgIEFTU0VSVChnZXRJbmRleFZhbHVlKTsKLSAgICAgICAgICAgIG1fZ2V0VmFsdWUgPSBJ
TkRFWF9HRVRURVJfTUFSS0VSOwotICAgICAgICAgICAgbV9nZXRJbmRleFZhbHVlID0gZ2V0SW5k
ZXhWYWx1ZTsKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAgICAgICAg
IG1fZGF0YS5pbmRleCA9IGluZGV4OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRHZXR0
ZXJTbG90KEpTT2JqZWN0KiBnZXR0ZXJGdW5jKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAgICBtX3RoaXNWYWx1ZSA9IG1fc2xvdEJhc2U7Ci0g
ICAgICAgICAgICBtX2dldFZhbHVlID0gR0VUVEVSX0ZVTkNUSU9OX01BUktFUjsKLSAgICAgICAg
ICAgIG1fZGF0YS5nZXR0ZXJGdW5jID0gZ2V0dGVyRnVuYzsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdChKU1ZhbHVlIHNsb3RCYXNlLCBKU09iamVjdCog
Z2V0dGVyRnVuYywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gR0VUVEVSX0ZV
TkNUSU9OX01BUktFUjsKLSAgICAgICAgICAgIG1fdGhpc1ZhbHVlID0gbV9zbG90QmFzZTsKLSAg
ICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAgICAgICAgIG1fZGF0YS5nZXR0
ZXJGdW5jID0gZ2V0dGVyRnVuYzsKLSAgICAgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0OwotICAg
ICAgICAgICAgbV9jYWNoZWRQcm9wZXJ0eVR5cGUgPSBHZXR0ZXI7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHNldFVuZGVmaW5lZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldFZhbHVl
KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNWYWx1ZSBzbG90QmFzZSgp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3Nsb3RCYXNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCYXNlKEpTVmFsdWUgYmFzZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKG1fc2xvdEJhc2UpOwotICAgICAgICAgICAgQVNTRVJUKGJhc2UpOwot
ICAgICAgICAgICAgbV9zbG90QmFzZSA9IGJhc2U7Ci0gICAgICAgIH0KKy8vIEVDTUEgMjYyLTMg
OC42LjEKKy8vIFByb3BlcnR5IGF0dHJpYnV0ZXMKK2VudW0gQXR0cmlidXRlIHsKKyAgICBOb25l
ICAgICAgID0gMCwKKyAgICBSZWFkT25seSAgID0gMSA8PCAwLCAvLyBwcm9wZXJ0eSBjYW4gYmUg
b25seSByZWFkLCBub3Qgd3JpdHRlbgorICAgIERvbnRFbnVtICAgPSAxIDw8IDEsIC8vIHByb3Bl
cnR5IGRvZXNuJ3QgYXBwZWFyIGluIChmb3IgLi4gaW4gLi4pCisgICAgRG9udERlbGV0ZSA9IDEg
PDwgMiwgLy8gcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRlZAorICAgIEZ1bmN0aW9uICAgPSAxIDw8
IDMsIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0
YWJsZXMKKyAgICBBY2Nlc3NvciAgID0gMSA8PCA0LCAvLyBwcm9wZXJ0eSBpcyBhIGdldHRlci9z
ZXR0ZXIKK307CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEdldHRlclNldHRlcjsKK2NsYXNz
IEpTT2JqZWN0OworCitjbGFzcyBQcm9wZXJ0eVNsb3QgeworcHVibGljOgorICAgIGVudW0gQ2Fj
aGVkUHJvcGVydHlUeXBlIHsKKyAgICAgICAgVW5jYWNoZWFibGUsCisgICAgICAgIEdldHRlciwK
KyAgICAgICAgQ3VzdG9tLAorICAgICAgICBDdXN0b21JbmRleCwKKyAgICAgICAgVmFsdWUKKyAg
ICB9OwogCi0gICAgICAgIHZvaWQgY2xlYXJCYXNlKCkKLSAgICAgICAgewotI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBKU1ZhbHVlKCk7Ci0jZW5kaWYKLSAgICAgICAg
fQorICAgIFByb3BlcnR5U2xvdCgpCisgICAgICAgIDogbV9wcm9wZXJ0eVR5cGUoVW5jYWNoZWFi
bGUpCisgICAgICAgICwgbV9jYWNoZWFibGUoZmFsc2UpCisgICAgICAgICwgbV9pbkdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihmYWxzZSkKKyAgICB7CisgICAgICAgIGNsZWFyQmFzZSgpOworICAg
ICAgICBjbGVhck9mZnNldCgpOworICAgIH0KKworICAgIGV4cGxpY2l0IFByb3BlcnR5U2xvdChj
b25zdCBKU1ZhbHVlIGJhc2UpCisgICAgICAgIDogbV9zbG90QmFzZShiYXNlKQorICAgICAgICAs
IG1fcHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQorICAgICAgICAsIG1fY2FjaGVhYmxlKGZhbHNl
KQorICAgICAgICAsIG1faW5HZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZmFsc2UpCisgICAgewor
ICAgICAgICBjbGVhck9mZnNldCgpOworICAgIH0KKworICAgIHR5cGVkZWYgSlNWYWx1ZSAoKkdl
dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lKTsK
KyAgICB0eXBlZGVmIEpTVmFsdWUgKCpHZXRJbmRleFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNW
YWx1ZSBzbG90QmFzZSwgdW5zaWduZWQpOworCisgICAgSlNWYWx1ZSBnZXRWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZGVjb2RlKG1fZGF0YS52YWx1ZSk7CisgICAgICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBD
dXN0b21JbmRleCkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY3VzdG9tSW5kZXguZ2V0SW5k
ZXhWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBtX2RhdGEuY3VzdG9tSW5kZXguaW5kZXgpOworICAg
ICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uR2V0dGVyKGV4ZWMpOworICAgICAgICByZXR1cm4gbV9kYXRhLmN1c3RvbS5nZXRWYWx1
ZShleGVjLCBzbG90QmFzZSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKworICAgIEpTVmFsdWUg
Z2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fZGF0YS52YWx1ZSk7CisgICAgICAgIGlmIChtX3Byb3Bl
cnR5VHlwZSA9PSBDdXN0b21JbmRleCkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY3VzdG9t
SW5kZXguZ2V0SW5kZXhWYWx1ZShleGVjLCBtX3Nsb3RCYXNlLCBtX2RhdGEuY3VzdG9tSW5kZXgu
aW5kZXgpOworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gR2V0dGVyKQorICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGV4ZWMpOworICAgICAgICByZXR1cm4gbV9kYXRhLmN1
c3RvbS5nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHBy
b3BlcnR5TmFtZSkpOworICAgIH0KKworICAgIENhY2hlZFByb3BlcnR5VHlwZSBjYWNoZWRQcm9w
ZXJ0eVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlYWJsZSA/IG1fcHJvcGVydHlUeXBlIDog
VW5jYWNoZWFibGU7IH0KKyAgICBib29sIGlzQ2FjaGVhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWFibGU7IH0KKyAgICBib29sIGlzQ2FjaGVhYmxlVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlYWJsZSAmJiBtX3Byb3BlcnR5VHlwZSA9PSBWYWx1ZTsgfQorICAgIFByb3BlcnR5T2Zm
c2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNDYWNoZWFi
bGUoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisKKyAgICB2b2lkIHNldFZh
bHVlV2l0aEJhc2UoSlNWYWx1ZSBzbG90QmFzZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgICAgIGNsZWFyT2Zm
c2V0KCk7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKKyAgICAgICAgbV9kYXRhLnZh
bHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBW
YWx1ZTsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVz
ID0gYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRWYWx1ZVdpdGhQcm9wZXJ0
eU9mZnNldChKU1ZhbHVlIHNsb3RCYXNlLCBKU1ZhbHVlIHZhbHVlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUp
OworICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CisgICAgICAgIG1fZGF0YS52YWx1ZSA9
IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICBtX3Byb3BlcnR5VHlwZSA9IFZhbHVlOworICAgICAgICBtX2NhY2hlYWJsZSA9IHRydWU7
CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgfQorCisgICAgdm9pZCBz
ZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICBjbGVhckJhc2UoKTsKKyAg
ICAgICAgY2xlYXJPZmZzZXQoKTsKKyAgICAgICAgbV9kYXRhLnZhbHVlID0gSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKTsKKyAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBWYWx1ZTsKKyAgICAgICAgbV9j
YWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAg
ICB9CisKKyAgICB2b2lkIHNldEN1c3RvbShKU1ZhbHVlIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMg
Z2V0VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoc2xv
dEJhc2UpOworICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOworICAgICAgICBtX2RhdGEuY3VzdG9t
LmdldFZhbHVlID0gZ2V0VmFsdWU7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKKyAg
ICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBDdXN0b207CisgICAgICAgIG1fY2FjaGVhYmxlID0gZmFs
c2U7CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0Q2FjaGVhYmxlQ3VzdG9tKEpTVmFsdWUgc2xvdEJhc2UsIEdldFZhbHVlRnVuYyBn
ZXRWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChzbG90
QmFzZSk7CisgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7CisgICAgICAgIG1fZGF0YS5jdXN0b20u
Z2V0VmFsdWUgPSBnZXRWYWx1ZTsKKyAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOworICAg
ICAgICBtX3Byb3BlcnR5VHlwZSA9IEN1c3RvbTsKKyAgICAgICAgbV9jYWNoZWFibGUgPSB0cnVl
OworICAgICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIH0KKworICAgIHZvaWQg
c2V0Q3VzdG9tSW5kZXgoSlNWYWx1ZSBzbG90QmFzZSwgdW5zaWduZWQgaW5kZXgsIEdldEluZGV4
VmFsdWVGdW5jIGdldEluZGV4VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAg
ICAgICBBU1NFUlQoc2xvdEJhc2UpOworICAgICAgICBBU1NFUlQoZ2V0SW5kZXhWYWx1ZSk7Cisg
ICAgICAgIG1fZGF0YS5jdXN0b21JbmRleC5nZXRJbmRleFZhbHVlID0gZ2V0SW5kZXhWYWx1ZTsK
KyAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOworICAgICAgICBtX2RhdGEuY3VzdG9tSW5k
ZXguaW5kZXggPSBpbmRleDsKKyAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBDdXN0b21JbmRleDsK
KyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0
cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldEFjY2Vzc29yU2xvdChHZXR0ZXJTZXR0ZXIq
IGdldHRlclNldHRlciwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VS
VChnZXR0ZXJTZXR0ZXIpOworICAgICAgICBtX2RhdGEuYWNjZXNzb3IudGhpc1ZhbHVlID0gSlNW
YWx1ZTo6ZW5jb2RlKG1fc2xvdEJhc2UpOworICAgICAgICBtX2RhdGEuYWNjZXNzb3IuZ2V0dGVy
U2V0dGVyID0gZ2V0dGVyU2V0dGVyOworICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IEdldHRlcjsK
KyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0
cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldENhY2hlYWJsZUFjY2Vzc29yU2xvdChKU1Zh
bHVlIHNsb3RCYXNlLCBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGdldHRl
clNldHRlcik7CisgICAgICAgIG1fZGF0YS5hY2Nlc3Nvci50aGlzVmFsdWUgPSBKU1ZhbHVlOjpl
bmNvZGUobV9zbG90QmFzZSk7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKKyAgICAg
ICAgbV9kYXRhLmFjY2Vzc29yLmdldHRlclNldHRlciA9IGdldHRlclNldHRlcjsKKyAgICAgICAg
bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIG1fcHJvcGVydHlUeXBlID0gR2V0dGVyOworICAg
ICAgICBtX2NhY2hlYWJsZSA9IHRydWU7CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CisgICAgfQorCisgICAgdm9pZCBzZXRVbmRlZmluZWQoKQorICAgIHsKKyAgICAgICAgc2V0
VmFsdWVXaXRoQXR0cmlidXRlcyhqc1VuZGVmaW5lZCgpLCBOb25lKTsKKyAgICB9CisKKyAgICBK
U1ZhbHVlIHNsb3RCYXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Nsb3RCYXNl
OworICAgIH0KKworICAgIHZvaWQgc2V0QmFzZShKU1ZhbHVlIGJhc2UpCisgICAgeworICAgICAg
ICBBU1NFUlQobV9zbG90QmFzZSk7CisgICAgICAgIEFTU0VSVChiYXNlKTsKKyAgICAgICAgbV9z
bG90QmFzZSA9IGJhc2U7CisgICAgfQogCi0gICAgICAgIHZvaWQgY2xlYXJWYWx1ZSgpCi0gICAg
ICAgIHsKKyAgICB2b2lkIGNsZWFyQmFzZSgpCisgICAgewogI2lmbmRlZiBOREVCVUcKLSAgICAg
ICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CisgICAgICAgIG1fc2xvdEJhc2UgPSBKU1ZhbHVl
KCk7CiAjZW5kaWYKLSAgICAgICAgfQorICAgIH0KIAotICAgICAgICB2b2lkIGNsZWFyT2Zmc2V0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2xlYXIgb2Zmc2V0IGV2ZW4gaW4gcmVsZWFz
ZSBidWlsZHMsIGluIGNhc2UgdGhpcyBQcm9wZXJ0eVNsb3QgaGFzIGJlZW4gdXNlZCBiZWZvcmUu
Ci0gICAgICAgICAgICAvLyAoRm9yIG90aGVyIGRhdGEgbWVtYmVycywgd2UgZG9uJ3QgbmVlZCB0
byBjbGVhciBhbnl0aGluZyBiZWNhdXNlIHJldXNlIHdvdWxkIG1lYW5pbmdmdWxseSBvdmVyd3Jp
dGUgdGhlbS4pCi0gICAgICAgICAgICBtX29mZnNldCA9IGludmFsaWRPZmZzZXQ7Ci0gICAgICAg
ICAgICBtX2NhY2hlZFByb3BlcnR5VHlwZSA9IFVuY2FjaGVhYmxlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaW5kZXg7IH0KLQot
ICAgICAgICBHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVyKCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKG1fY2FjaGVkUHJvcGVydHlUeXBlID09IEN1c3RvbSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9nZXRWYWx1ZTsKLSAgICAgICAgfQotICAgIHByaXZhdGU6Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKikgY29u
c3Q7Ci0KLSAgICAgICAgR2V0VmFsdWVGdW5jIG1fZ2V0VmFsdWU7Ci0gICAgICAgIEdldEluZGV4
VmFsdWVGdW5jIG1fZ2V0SW5kZXhWYWx1ZTsKLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgbV9z
bG90QmFzZTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgSlNPYmplY3QqIGdldHRlckZ1
bmM7CisgICAgdm9pZCBjbGVhck9mZnNldCgpCisgICAgeworICAgICAgICAvLyBDbGVhciBvZmZz
ZXQgZXZlbiBpbiByZWxlYXNlIGJ1aWxkcywgaW4gY2FzZSB0aGlzIFByb3BlcnR5U2xvdCBoYXMg
YmVlbiB1c2VkIGJlZm9yZS4KKyAgICAgICAgLy8gKEZvciBvdGhlciBkYXRhIG1lbWJlcnMsIHdl
IGRvbid0IG5lZWQgdG8gY2xlYXIgYW55dGhpbmcgYmVjYXVzZSByZXVzZSB3b3VsZCBtZWFuaW5n
ZnVsbHkgb3ZlcndyaXRlIHRoZW0uKQorICAgICAgICBtX29mZnNldCA9IGludmFsaWRPZmZzZXQ7
CisgICAgICAgIG1fcHJvcGVydHlUeXBlID0gVW5jYWNoZWFibGU7CisgICAgICAgIG1fY2FjaGVh
YmxlID0gZmFsc2U7CisgICAgfQorCisgICAgR2V0VmFsdWVGdW5jIGN1c3RvbUdldHRlcigpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9jYWNoZWFibGUgJiYgbV9wcm9wZXJ0eVR5cGUg
PT0gQ3VzdG9tKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5jdXN0b20uZ2V0VmFsdWU7CisgICAg
fQorCisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
czsgfQorICAgIGJvb2wgd3JpdGFibGUoKSBjb25zdCB7IHJldHVybiAhKG1fYXR0cmlidXRlcyAm
IFJlYWRPbmx5KTsgfQorICAgIGJvb2wgZW51bWVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEobV9h
dHRyaWJ1dGVzICYgRG9udEVudW0pOyB9CisgICAgYm9vbCBjb25maWd1cmFibGUoKSBjb25zdCB7
IHJldHVybiAhKG1fYXR0cmlidXRlcyAmIERvbnREZWxldGUpOyB9CisKKyAgICBib29sIGlzQWNj
ZXNzb3IoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5VHlwZSA9PSBHZXR0ZXI7IH0KKyAgICBH
ZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNBY2Nlc3NvcigpKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5hY2Nlc3Nvci5nZXR0ZXJTZXR0
ZXI7CisgICAgfQorCisgICAgdm9pZCBzZXRJbkdldE93blByb3BlcnR5RGVzY3JpcHRvcigpIHsg
bV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHRydWU7IH0KKyAgICBib29sIGluR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pbkdldE93blByb3BlcnR5RGVz
Y3JpcHRvcjsgfQorCitwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZnVu
Y3Rpb25HZXR0ZXIoRXhlY1N0YXRlKikgY29uc3Q7CisKKyAgICBKU1ZhbHVlIG1fc2xvdEJhc2U7
CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR2V0dGVyU2V0dGVy
KiBnZXR0ZXJTZXR0ZXI7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWU7Cisg
ICAgICAgIH0gYWNjZXNzb3I7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHZXRWYWx1
ZUZ1bmMgZ2V0VmFsdWU7CisgICAgICAgIH0gY3VzdG9tOworICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgR2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5kZXhWYWx1ZTsKICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4OwotICAgICAgICB9IG1fZGF0YTsKLQotICAgICAgICBKU1ZhbHVlIG1fdmFs
dWU7Ci0gICAgICAgIEpTVmFsdWUgbV90aGlzVmFsdWU7Ci0KLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgbV9vZmZzZXQ7Ci0gICAgICAgIENhY2hlZFByb3BlcnR5VHlwZSBtX2NhY2hlZFByb3BlcnR5
VHlwZTsKLSAgICB9OworICAgICAgICB9IGN1c3RvbUluZGV4OworICAgICAgICBFbmNvZGVkSlNW
YWx1ZSB2YWx1ZTsKKyAgICB9IG1fZGF0YTsKKworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OworICAgIENhY2hlZFByb3BlcnR5VHlwZSBtX3Byb3BlcnR5VHlwZTsKKyAgICB1aW50OF90IG1f
YXR0cmlidXRlczsKKyAgICBib29sIG1fY2FjaGVhYmxlOworICAgIGJvb2wgbV9pbkdldE93blBy
b3BlcnR5RGVzY3JpcHRvcjsKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxMSArMTU4LDYgQEAgYm9v
bCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiBnZXRTdGF0
aWNWYWx1ZVNsb3Q8UmVnRXhwQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4
ZWNTdGF0ZTo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZShleGVjKSwganNDYXN0PFJlZ0V4cENvbnN0
cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgUmVnRXhwQ29u
c3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPFJl
Z0V4cENvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4
cENvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+KG9iamVj
dCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIEpTVmFsdWUgcmVnRXhwQ29uc3Ry
dWN0b3JEb2xsYXIxKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3RCYXNlKS0+Z2V0QmFj
a3JlZihleGVjLCAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtODQsMTMgKzg0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4ob2JqZWN0KTsKLSAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5KGV4ZWMpOwotICAgICAgICAgICAgcmV0
dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0KICAgICAgICAgc3RhdGljIHZv
aWQgcHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHYsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKICAgICAgICAgewogICAg
ICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE1h
dGNoZXNBcnJheSo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Mywy
MiArOTMsMTIgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKUwogewog
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCkg
ewogICAgICAgICBSZWdFeHBPYmplY3QqIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGNlbGwpOwot
ICAgICAgICBzbG90LnNldFZhbHVlKHJlZ0V4cCwgcmVnRXhwLT5nZXRMYXN0SW5kZXgoKSk7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQmFzZShyZWdFeHAsIHJlZ0V4cC0+Z2V0TGFzdEluZGV4
KCksIHJlZ0V4cC0+bV9sYXN0SW5kZXhJc1dyaXRhYmxlID8gRG9udERlbGV0ZSB8IERvbnRFbnVt
IDogRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxSZWdFeHBPYmplY3QsIEpT
T2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhw
T2JqZWN0Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgUmVnRXhwT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCi17Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGFzdEluZGV4KSB7Ci0gICAgICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwID0gYXNSZWdFeHBP
YmplY3Qob2JqZWN0KTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHJlZ0V4cC0+
Z2V0TGFzdEluZGV4KCksIHJlZ0V4cC0+bV9sYXN0SW5kZXhJc1dyaXRhYmxlID8gRG9udERlbGV0
ZSB8IERvbnRFbnVtIDogRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRv
cjxSZWdFeHBPYmplY3QsIEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4
ZWMpLCBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKTsKLX0KLQogYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lv
biAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSlNWYWx1ZSBleGVjKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRp
YyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3MCw2IEBAIGJvb2wgUmVnRXhwUHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90
PFJlZ0V4cE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpyZWdFeHBQcm90b3R5cGVUYWJsZShleGVj
KSwganNDYXN0PFJlZ0V4cFByb3RvdHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCi1ib29sIFJlZ0V4cFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNG
dW5jdGlvbkRlc2NyaXB0b3I8UmVnRXhwT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFBy
b3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhwUHJvdG90eXBlKj4ob2JqZWN0KSwgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDE0MDI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTcgKzEyOCwxMSBAQCB2b2lkIFNwYXJzZUFycmF5RW50
cnk6OmdldChQcm9wZXJ0eVNsb3QmCiAgICAgQVNTRVJUKHZhbHVlKTsKIAogICAgIGlmIChMSUtF
TFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodmFs
dWUpOworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFz
R2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7Ci0gICAgaWYgKCFnZXR0ZXIpIHsKLSAgICAg
ICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNs
b3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworICAgIHNsb3Quc2V0QWNjZXNzb3JTbG90KGFzR2V0
dGVyU2V0dGVyKHZhbHVlKSwgYXR0cmlidXRlcyk7CiB9CiAKIHZvaWQgU3BhcnNlQXJyYXlFbnRy
eTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTEgKzY1LDYgQEAgYm9vbCBT
dHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiBnZXRTdGF0aWNG
dW5jdGlvblNsb3Q8SW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgRXhlY1N0YXRlOjpzdHJpbmdDb25z
dHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3RyaW5nQ29uc3RydWN0b3IqPihjZWxsKSwgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewot
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SW50ZXJuYWxGdW5jdGlvbj4o
ZXhlYywgRXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3Ry
aW5nQ29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQot
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSBzdHJp
bmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwog
CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3Bw
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNCArNjAsNiBAQCBib29sIFN0cmlu
Z09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAotYm9vbCBTdHJpbmdPYmplY3Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAg
ICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0
KTsKLSAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5nZXRTdHJpbmdQcm9wZXJ0
eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7ICAgIAotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZv
aWQgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVj
dC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MywxMSArMTUzLDYgQEAgYm9vbCBT
dHJpbmdQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNG
dW5jdGlvblNsb3Q8U3RyaW5nT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnN0cmluZ1RhYmxlKGV4
ZWMpLCBqc0Nhc3Q8U3RyaW5nUHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKLWJvb2wgU3RyaW5nUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRp
Y0Z1bmN0aW9uRGVzY3JpcHRvcjxTdHJpbmdPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6c3RyaW5n
VGFibGUoZXhlYyksIGpzQ2FzdDxTdHJpbmdQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
RnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEhlbHBlciBmb3IgcHJv
ZHVjaW5nIGEgSlNTdHJpbmcgZm9yICdzdHJpbmcnLCB3aGVyZSAnc3RyaW5nJyB3YXMgYmVlbiBw
cm9kdWNlZCBieQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDggKzI0OSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKLSAgICAgICAgUHJvcGVydHlPZmZzZXQg
Z2V0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IGdldChKU0dsb2JhbERhdGEmLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkKiBh
dHRyaWJ1dGVzID0gMCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEm
LCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgdW5zaWduZWQqIGF0dHJpYnV0ZXMgPSAwKTsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYs
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFs
dWUpOwogCiAgICAgICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllczsgfQpAQCAtNDc5LDcgKzQ3OSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbmV3U3RydWN0dXJlOwogICAgIH0KICAg
ICAgICAgCi0gICAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKKyAgICBpbmxpbmUg
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCogYXR0cmlidXRlcykKICAgICB7CiAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAg
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKQEAgLTQ4
NywxMCArNDg3LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGludmFs
aWRPZmZzZXQ7CiAKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBtX3Byb3BlcnR5
VGFibGUtPmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKLSAgICAgICAgcmV0dXJuIGVu
dHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7CisgICAgICAgIGlmICghZW50cnkp
CisgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKKyAgICAgICAgaWYgKGF0dHJpYnV0
ZXMpCisgICAgICAgICAgICAqYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOworICAgICAg
ICByZXR1cm4gZW50cnktPm9mZnNldDsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSkKKyAgICBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgdW5zaWduZWQq
IGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5m
bygpID09ICZzX2luZm8pOwogICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nh
cnkoZ2xvYmFsRGF0YSk7CkBAIC00OTgsNyArNTAyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKICAgICAgICAgUHJvcGVydHlNYXBFbnRy
eSogZW50cnkgPSBtX3Byb3BlcnR5VGFibGUtPmZpbmRXaXRoU3RyaW5nKG5hbWUuaW1wbCgpKS5m
aXJzdDsKLSAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZz
ZXQ7CisgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMpCisgICAgICAgICAgICAqYXR0cmlidXRlcyA9IGVu
dHJ5LT5hdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gZW50cnktPm9mZnNldDsKICAgICB9CiAg
ICAgCiAgICAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjptYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTQwMzAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTMtMDEtMjAgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQyMAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMg
cHJhY3RpY2FsbHkgcmVkdW5kYW50IHdpdGggZ2V0T3duUHJvcGVydHlTbG90LgorICAgICAgICAg
ICAgLSByZW1vdmUgYWxsIGltcGxlbWVudGF0aW9ucyBvZiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IuCisgICAgICAgICAgICAtIHBhc3MgYXR0cmlidXRlcyB0byBnZXRPd25Qcm9wZXJ0eVNsb3Qu
CisgICAgICAgICAgICAtIHJlbmFtZWQgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNj
cmlwdG9yLCByZW1vdmVkCisgICAgICAgICAgICAgICdBbmREZXNjcmlwdG9yJy4KKyAgICAgICAg
ICAgIC0gYWRkZWQgYSB3b3JrYXJvdW5kIHRvIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNs
b3QsCisgICAgICAgICAgICAgIGdldE93blByb3BlcnR5U2xvdCBkb2VzIG5vdCBiZWhhdmUgY29y
cmVjdGx5IHdydCAnb3duJ25lc3MsCisgICAgICAgICAgICAgIHJldHVybnMgcHJvcGVydGllcyBp
biB0aGUgcHJvdG90eXBlIGNoYWluLiBNYWludGFpbiBwcmV2aW91cworICAgICAgICAgICAgICBi
ZWhhdmlvdXIgZm9yIGdldE93blByb3BlcnR5RGVzY3JpcHRvci4KKworICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246OmdldE93
blByb3BlcnR5U2xvdERlbGVnYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlT
bG90RGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpnZXRP
d25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJD
b3JlOjpydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keSk6Cisg
ICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9u
KToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJhdGlvbik6CisgICAgICAgIChH
ZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLnR4dDoKKyAgICAgICAgKiBicmlkZ2UvanNjL0JyaWRnZUpTQy5o
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OmdldE93blByb3BlcnR5U2xvdCk6
CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgIChPYmpjRmFs
bGJhY2tPYmplY3RJbXApOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbToK
KyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6
CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKFJ1
bnRpbWVBcnJheSk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAg
ICAgKEpTQzo6UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmg6CisgICAgICAgIChSdW50aW1l
TWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEJpbmRpbmdzKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKyAgICAg
ICAgKFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmlk
bDoKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1s
L0hUTUxFbWJlZEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQu
aWRsOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5pZGw6CisgICAgICAgICogcGFnZS9Mb2NhdGlv
bi5pZGw6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAxMy0wMS0y
MCAgTWlrZSBMYXd0aGVyICA8bWlrZWxhd3RoZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENT
UzMgY2FsYzogdW5wcmVmaXggaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29y
a2luZyBjb3B5KQpAQCAtMjQ3OSw3ICsyNDc5LDYgQEAgX19aTjdXZWJDb3JlNFBhZ2UxOHNldFZp
c2liaWxpdHlTdGF0ZUVOUwogX19aTjNKU0MxM1J1bnRpbWVNZXRob2QxMWdldENhbGxEYXRhRVBO
U182SlNDZWxsRVJOU184Q2FsbERhdGFFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDE0ZmluaXNo
Q3JlYXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTjNXVEY2U3RyaW5nRQogX19aTjNKU0MxM1J1
bnRpbWVNZXRob2QxOGdldE93blByb3BlcnR5U2xvdEVQTlNfNkpTQ2VsbEVQTlNfOUV4ZWNTdGF0
ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzEzUnVudGlt
ZU1ldGhvZDI0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRVBOU184SlNPYmplY3RFUE5TXzlFeGVj
U3RhdGVFTlNfMTJQcm9wZXJ0eU5hbWVFUk5TXzE4UHJvcGVydHlEZXNjcmlwdG9yRQogX19aTjNK
U0MxM1J1bnRpbWVNZXRob2Q2c19pbmZvRQogX19aTjNKU0MxM1J1bnRpbWVNZXRob2RDMkVQTlNf
MTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVQTlNfOEJpbmRpbmdzNk1ldGhvZEUKIF9f
Wk4zSlNDOEJpbmRpbmdzMTBSb290T2JqZWN0RDFFdgpAQCAtMjQ5MCw3ICsyNDg5LDYgQEAgX19a
TjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3QxNGZpbmlzaAogX19aTjNKU0M4QmluZGluZ3Mx
M1J1bnRpbWVPYmplY3QxNmdldENvbnN0cnVjdERhdGFFUE5TXzZKU0NlbGxFUk5TXzEzQ29uc3Ry
dWN0RGF0YUUKIF9fWk4zSlNDOEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0MThnZXRPd25Qcm9wZXJ0
eVNsb3RFUE5TXzZKU0NlbGxFUE5TXzlFeGVjU3RhdGVFTlNfMTJQcm9wZXJ0eU5hbWVFUk5TXzEy
UHJvcGVydHlTbG90RQogX19aTjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3QxOWdldE93blBy
b3BlcnR5TmFtZXNFUE5TXzhKU09iamVjdEVQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5h
bWVBcnJheUVOU18xNUVudW1lcmF0aW9uTW9kZUUKLV9fWk4zSlNDOEJpbmRpbmdzMTNSdW50aW1l
T2JqZWN0MjRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JFUE5TXzhKU09iamVjdEVQTlNfOUV4ZWNT
dGF0ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMThQcm9wZXJ0eURlc2NyaXB0b3JFCiBfX1pOM0pT
QzhCaW5kaW5nczEzUnVudGltZU9iamVjdDNwdXRFUE5TXzZKU0NlbGxFUE5TXzlFeGVjU3RhdGVF
TlNfMTJQcm9wZXJ0eU5hbWVFTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQogX19a
TjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3Q2c19pbmZvRQogX19aTjNKU0M4QmluZGluZ3Mx
M1J1bnRpbWVPYmplY3Q3ZGVzdHJveUVQTlNfNkpTQ2VsbEUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDI0ICsz
MjgsOSBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3duUHJvcGVyCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChwcm9wZXJ0eUluZm8uaGFkUGl4ZWxPclBvc1ByZWZp
eCkKLSAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocHJvcGVydHlJbmZvLnByb3BlcnR5SUQpLCBjc3NQcm9wZXJ0eUdldHRlclBpeGVsT3JQb3NQ
cmVmaXhDYWxsYmFjayk7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKSwgY3NzUHJvcGVydHlHZXR0
ZXJQaXhlbE9yUG9zUHJlZml4Q2FsbGJhY2ssIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRF
bnVtKTsKICAgICBlbHNlCi0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKSwgY3NzUHJvcGVydHlHZXR0
ZXJDYWxsYmFjayk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSlNDU1NTdHlsZURlY2xh
cmF0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlJZGVudGlmaWVyLCBKU0M6OlByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBDU1NQcm9wZXJ0eUluZm8gcHJvcGVydHlJ
bmZvID0gY3NzUHJvcGVydHlJREZvckpTQ1NTUHJvcGVydHlOYW1lKHByb3BlcnR5SWRlbnRpZmll
cik7Ci0gICAgaWYgKCFwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICBpZiAocHJvcGVydHlJbmZvLmhhZFBpeGVs
T3JQb3NQcmVmaXgpCi0gICAgICAgIHZhbHVlID0gY3NzUHJvcGVydHlHZXR0ZXJQaXhlbE9yUG9z
UHJlZml4KGV4ZWMsIHRoaXMsIHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKTsKLSAgICBlbHNlCi0g
ICAgICAgIHZhbHVlID0gY3NzUHJvcGVydHlHZXR0ZXIoZXhlYywgdGhpcywgcHJvcGVydHlJbmZv
LnByb3BlcnR5SUQpOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4
KHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCksIGNz
c1Byb3BlcnR5R2V0dGVyQ2FsbGJhY2ssIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDAsMTIgKzE0MCwxMiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDCiAgICAgICAgIC8vIEl0IGlnbm9yZXMgYW55IGN1c3RvbSBwcm9wZXJ0aWVzIHRo
YXQgbWlnaHQgYmUgc2V0IG9uIHRoZSBET01XaW5kb3cgKGluY2x1ZGluZyBhIGN1c3RvbSBwcm90
b3R5cGUpLgogICAgICAgICBlbnRyeSA9IHNfaW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRy
eShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoZW50cnkgJiYgIShlbnRyeS0+YXR0
cmlidXRlcygpICYgSlNDOjpGdW5jdGlvbikgJiYgZW50cnktPnByb3BlcnR5R2V0dGVyKCkgPT0g
anNET01XaW5kb3dDbG9zZWQpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmpl
Y3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXNPYmplY3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICBlbnRyeSA9IEpTRE9NV2luZG93UHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShl
eGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGVudHJ5ICYmIChl
bnRyeS0+YXR0cmlidXRlcygpICYgSlNDOjpGdW5jdGlvbikgJiYgZW50cnktPmZ1bmN0aW9uKCkg
PT0ganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlKSB7Ci0gICAgICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNE
T01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlLCAwPik7CisgICAgICAgICAgICBzbG90LnNl
dEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01X
aW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlLCAwPiwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwg
RG9udEVudW0pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtMTc1
LDIyICsxNzUsMjIgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwog
ICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pIHsKICAgICAg
ICAgICAgIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0
aW9uQmx1cikgewogICAgICAgICAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNG
dW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQmx1ciwgMD4pOworICAg
ICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3Rh
dGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkJsdXIsIDA+LCBl
bnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24o
KSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIWFsbG93c0FjY2VzcykgewotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQ
cm90b3R5cGVGdW5jdGlvbkNsb3NlLCAwPik7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcjxqc0RPTVdp
bmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UsIDA+LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlw
ZUZ1bmN0aW9uRm9jdXMpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2Vzcykgewot
ICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5n
U3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkZvY3VzLCAw
Pik7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNh
Y2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uRm9j
dXMsIDA+LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+
ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UpIHsK
ICAgICAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgewotICAgICAgICAgICAgICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0
ZXI8anNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlLCAyPik7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNG
dW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UsIDI+
LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rp
b24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uU2hvd01vZGFsRGlhbG9nKSB7CkBA
IC0yMDQsNyArMjA0LDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpT
QwogICAgICAgICAvLyBBbGxvdyBhY2Nlc3MgdG8gdG9TdHJpbmcoKSBjcm9zcy1kb21haW4sIGJ1
dCBhbHdheXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy4KICAgICAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcpIHsKICAgICAgICAgICAgIGlm
ICghYWxsb3dzQWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09i
amVjdCwgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlciwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBK
U0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwogCiAgICAgZW50cnkgPSBKU0RPTVdp
bmRvdzo6c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgaWYgKGVudHJ5KSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3Qs
IGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09i
amVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIyMiw3ICsyMjIsNyBAQCBib29sIEpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgLy8gYXJlIGluIE1veiBidXQgbm90
IElFLiBTaW5jZSB3ZSBoYXZlIHNvbWUgb2YgdGhlc2UsIHdlIGhhdmUgdG8gZG8KICAgICAvLyBp
dCB0aGUgTW96IHdheS4KICAgICBpZiAodGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpLT50cmVl
KCktPnNjb3BlZENoaWxkKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkp
KSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNoaWxkRnJhbWVHZXR0ZXIp
OworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtMjMwLDcgKzIzMCwxMiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDCiAgICAgLy8gcHJlY2VkZW5jZSBvdmVyIHRoZSBpbmRleCBhbmQgbmFtZSBn
ZXR0ZXJzLiAgCiAgICAgSlNWYWx1ZSBwcm90byA9IHRoaXNPYmplY3QtPnByb3RvdHlwZSgpOwog
ICAgIGlmIChwcm90by5pc09iamVjdCgpKSB7Ci0gICAgICAgIGlmIChhc09iamVjdChwcm90bykt
PmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CisgICAgICAgIC8v
IFdvcmthcm91bmQgdG8ga2VlcCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Igd29ya2luZzsgcmV0
dXJuIGZhbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgcmVhbGx5ICdvd24nLgorICAgICAgICBp
ZiAoc2xvdC5pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICBQcm9w
ZXJ0eVNsb3QgcHJvdG9TbG90OworICAgICAgICAgICAgaWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgcHJvdG9TbG90KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoYXNPYmplY3QocHJvdG8pLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewogICAgICAgICAgICAg
aWYgKCFhbGxvd3NBY2Nlc3MpIHsKICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wcmludEVy
cm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZp
bmVkKCk7CkBAIC0yNDYsNyArMjUxLDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQwogICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwogICAg
IGlmIChpIDwgdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxk
Q291bnQoKSkgewogICAgICAgICBBU1NFUlQoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
OwotICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGksIGluZGV4R2V0dGVy
KTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpLCBpbmRleEdldHRl
ciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKQEAgLTI2MSw3ICsyNjYsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDCiAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAg
ICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9taWNT
dHJpbmcocHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiAo
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0oYXRvbWlj
UHJvcGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQcm9wZXJ0
eU5hbWUpKSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZWRJ
dGVtR2V0dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVk
SXRlbUdldHRlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOTksNyArMzA0LDcgQEAgYm9v
bCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIC8vIGFyZSBpbiBNb3og
YnV0IG5vdCBJRS4gU2luY2Ugd2UgaGF2ZSBzb21lIG9mIHRoZXNlLCB3ZSBoYXZlIHRvIGRvCiAg
ICAgLy8gaXQgdGhlIE1veiB3YXkuCiAgICAgaWYgKHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUo
KS0+dHJlZSgpLT5zY29wZWRDaGlsZChwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0
eU5hbWUpKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjaGlsZEZyYW1l
R2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgY2hpbGRGcmFtZUdl
dHRlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCkBAIC0zMDcsNyArMzEyLDEyIEBAIGJvb2wgSlNET01XaW5kb3c6
OmdldE93blByb3BlcnR5U2xvdEJ5SW4KICAgICAvLyBwcmVjZWRlbmNlIG92ZXIgdGhlIGluZGV4
IGFuZCBuYW1lIGdldHRlcnMuICAKICAgICBKU1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+cHJv
dG90eXBlKCk7CiAgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKGFzT2Jq
ZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkgeworICAgICAg
ICAvLyBXb3JrYXJvdW5kIHRvIGtlZXAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHdvcmtpbmc7
IHJldHVybiBmYWxzZSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IHJlYWxseSAnb3duJy4KKyAgICAg
ICAgaWYgKHNsb3QuaW5HZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAg
UHJvcGVydHlTbG90IHByb3RvU2xvdDsKKyAgICAgICAgICAgIGlmIChhc09iamVjdChwcm90bykt
PmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHByb3RvU2xvdCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGFzT2JqZWN0KHByb3Rv
KS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkgewogICAgICAgICAgICAgaWYg
KCFhbGxvd3NBY2Nlc3MpIHsKICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wcmludEVycm9y
TWVzc2FnZShlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVk
KCk7CkBAIC0zMjIsNyArMzMyLDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbgogICAgIC8vIGFsbG93IHdpbmRvd1sxXSBvciBwYXJlbnRbMV0gZXRjLiAoIzU2OTgz
KQogICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5z
Y29wZWRDaGlsZENvdW50KCkpIHsKICAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwg
aW5kZXgsIGluZGV4R2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2Jq
ZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zMzcsNyArMzQ3LDcgQEAgYm9v
bCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIGlmIChkb2N1bWVudC0+
aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9taWNQcm9w
ZXJ0eU5hbWUgPSBmaW5kQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmIChh
dG9taWNQcm9wZXJ0eU5hbWUgJiYgKHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvY3VtZW50
KS0+aGFzTmFtZWRJdGVtKGF0b21pY1Byb3BlcnR5TmFtZSkgfHwgZG9jdW1lbnQtPmhhc0VsZW1l
bnRXaXRoSWQoYXRvbWljUHJvcGVydHlOYW1lKSkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXNPYmplY3QsIG5hbWVkSXRlbUdldHRlcik7CisgICAgICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCBuYW1lZEl0ZW1HZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8
IERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpA
QCAtMzQ1LDc5ICszNTUsNiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgaW5kZXgsIHNsb3QpOwogfQogCi1ib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0g
ICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3Qp
OwotICAgIC8vIE5ldmVyIGFsbG93IGNyb3NzLWRvbWFpbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBjb25zdCBIYXNoRW50cnkqIGVudHJ5OwotICAgIAotICAgIC8vIFdlIGRvbid0IHdhbnQgYW55
IHByb3BlcnRpZXMgb3RoZXIgdGhhbiAiY2xvc2UiIGFuZCAiY2xvc2VkIiBvbiBhIGNsb3NlZCB3
aW5kb3cuCi0gICAgaWYgKCF0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCkpIHsKLSAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHNhZmUgZm9yIGNyb3NzLWRvbWFpbiBhbmQgc2FtZSBk
b21haW4gdXNlLgotICAgICAgICAvLyBJdCBpZ25vcmVzIGFueSBjdXN0b20gcHJvcGVydGllcyB0
aGF0IG1pZ2h0IGJlIHNldCBvbiB0aGUgRE9NV2luZG93IChpbmNsdWRpbmcgYSBjdXN0b20gcHJv
dG90eXBlKS4KLSAgICAgICAgZW50cnkgPSBzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50
cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKGVudHJ5ICYmICEoZW50cnktPmF0
dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pICYmIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpID09
IGpzRE9NV2luZG93Q2xvc2VkKSB7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoanNCb29sZWFuKHRydWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbnRyeSA9IEpTRE9N
V2luZG93UHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKGVudHJ5ICYmIChlbnRyeS0+YXR0cmlidXRlcygp
ICYgSlNDOjpGdW5jdGlvbikgJiYgZW50cnktPmZ1bmN0aW9uKCkgPT0ganNET01XaW5kb3dQcm90
b3R5cGVGdW5jdGlvbkNsb3NlKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNGdW5j
dGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UsIDA+KTsKLSAgICAg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0VW5kZWZpbmVk
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGVudHJ5ID0gSlNET01XaW5k
b3c6OnNfaW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUp
OwotICAgIGlmIChlbnRyeSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAg
c2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpOwotICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIAotICAgIC8vIENoZWNrIGZvciBjaGlsZCBmcmFtZXMgYnkgbmFtZSBiZWZvcmUgYnVp
bHQtaW4gcHJvcGVydGllcyB0bwotICAgIC8vIG1hdGNoIE1vemlsbGEuIFRoaXMgZG9lcyBub3Qg
bWF0Y2ggSUUsIGJ1dCBzb21lIHNpdGVzIGVuZCB1cAotICAgIC8vIG5hbWluZyBmcmFtZXMgdGhp
bmdzIHRoYXQgY29uZmxpY3Qgd2l0aCB3aW5kb3cgcHJvcGVydGllcyB0aGF0Ci0gICAgLy8gYXJl
IGluIE1veiBidXQgbm90IElFLiBTaW5jZSB3ZSBoYXZlIHNvbWUgb2YgdGhlc2UsIHdlIGhhdmUg
dG8gZG8KLSAgICAvLyBpdCB0aGUgTW96IHdheS4KLSAgICBpZiAodGhpc09iamVjdC0+aW1wbCgp
LT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5n
KHByb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyKTsKLSAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0g
ICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hp
bGRDb3VudCgpKSB7Ci0gICAgICAgIEFTU0VSVChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbUlu
ZGV4KHRoaXNPYmplY3QsIGksIGluZGV4R2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBBbGxvdyBzaG9ydGN1dHMgbGlrZSAnSW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50Lmlt
YWdlcy5JbWFnZTEKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkt
PmZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgp
KSB7Ci0gICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRB
dG9taWNTdHJpbmcocHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFt
ZSAmJiAoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0o
YXRvbWljUHJvcGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQ
cm9wZXJ0eU5hbWUpKSkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lZEl0ZW1HZXR0ZXIpOwotICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOwotfQotCiB2b2lkIEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RPTVdpbmRvdyo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1l
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsNiBAQCBib29sIEpTSFRN
TEFwcGxldEVsZW1lbnQ6OmdldE93blByb3BlcnR5CiAgICAgcmV0dXJuIHBsdWdpbkVsZW1lbnRD
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3Q8SlNIVE1MQXBwbGV0RWxlbWVudCwgQmFzZT4oZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90LCB0aGlzKTsKIH0KIAotYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsK
LSAgICByZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5RGVzY3JpcHRvcjxK
U0hUTUxBcHBsZXRFbGVtZW50LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHRoaXMpOwotfQotCiBib29sIEpTSFRNTEFwcGxldEVsZW1lbnQ6OnB1dERlbGVnYXRlKEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tUHV0
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHRoaXMsIHNsb3QpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsNiBA
QCBib29sIEpTSFRNTEVtYmVkRWxlbWVudDo6Z2V0T3duUHJvcGVydHlTCiAgICAgcmV0dXJuIHBs
dWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3Q8SlNIVE1MRW1iZWRFbGVtZW50LCBC
YXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQogCi1ib29sIEpTSFRNTEVt
YmVkRWxlbWVudDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgcmV0dXJuIHBsdWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3I8SlNIVE1MRW1iZWRFbGVtZW50LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHRoaXMpOwotfQotCiBib29sIEpTSFRNTEVtYmVkRWxlbWVudDo6cHV0RGVsZWdh
dGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RD
dXN0b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgdGhpcywgc2xvdCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDExICszOCw2IEBAIGJvb2wgSlNIVE1MT2JqZWN0RWxlbWVudDo6Z2V0T3duUHJvcGVydHkKICAg
ICByZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdDxKU0hUTUxPYmpl
Y3RFbGVtZW50LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQogCi1i
b29sIEpTSFRNTE9iamVjdEVsZW1lbnQ6OmdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRl
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yPEpTSFRNTE9iamVjdEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhpcyk7Ci19Ci0KIGJvb2wgSlNIVE1MT2JqZWN0RWxl
bWVudDo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJu
IHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgdGhpcywg
c2xvdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDIwICs3MCwyMCBAQCBi
b29sIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhCiAgICAgICAgIC8vIEFsbG93
IGFjY2VzcyB0byBiYWNrKCksIGZvcndhcmQoKSBhbmQgZ28oKSBmcm9tIGFueSBmcmFtZS4KICAg
ICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSB7CiAgICAgICAg
ICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25C
YWNrKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0
YXRpY0JhY2tGdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpcywgbm9uQ2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0
ZXMoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uRm9yd2Fy
ZCkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0
aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIsIGVudHJ5LT5hdHRy
aWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkdv
KSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRp
Y0dvRnVuY3Rpb25HZXR0ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMs
IG5vbkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyLCBlbnRyeS0+YXR0cmlidXRlcygpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEFsbG93IGFjY2VzcyB0byB0b1N0cmluZygpIGNyb3Nz
LWRvbWFpbiwgYnV0IGFsd2F5cyBPYmplY3QudG9TdHJpbmcuCiAgICAgICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nKSB7Ci0gICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKTsKKyAgICAg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIs
IGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CkBAIC05Myw1MSArOTMsNiBAQCBib29sIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVy
dHlTbG90RGVsZWdhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNIaXN0b3J5OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBp
ZiAoIWltcGwoKS0+ZnJhbWUoKSkgewotICAgICAgICBkZXNjcmlwdG9yLnNldFVuZGVmaW5lZCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBUaHJvdyBvdXQgYWxsIGNy
b3NzIGRvbWFpbiBhY2Nlc3MKLSAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShleGVj
LCBpbXBsKCktPmZyYW1lKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENoZWNr
IGZvciB0aGUgZmV3IGZ1bmN0aW9ucyB0aGF0IHdlIGFsbG93LCBldmVuIHdoZW4gY2FsbGVkIGNy
b3NzLWRvbWFpbi4KLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gSlNIaXN0b3J5UHJvdG90
eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAg
IC8vIEFsbG93IGFjY2VzcyB0byBiYWNrKCksIGZvcndhcmQoKSBhbmQgZ28oKSBmcm9tIGFueSBm
cmFtZS4KLSAgICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSB7
Ci0gICAgICAgICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNIaXN0b3J5UHJvdG90eXBl
RnVuY3Rpb25CYWNrKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9u
Q2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgZW50
cnktPmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1
bmN0aW9uRm9yd2FyZCkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5v
bkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIpOwotICAgICAgICAgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSks
IGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0hpc3RvcnlQcm90b3R5
cGVGdW5jdGlvbkdvKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9u
Q2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25HZXR0ZXIpOwotICAgICAgICAgICAgICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5
LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQWxsb3cgYWNjZXNzIHRv
IHRvU3RyaW5nKCkgY3Jvc3MtZG9tYWluLCBidXQgYWx3YXlzIE9iamVjdC50b1N0cmluZy4KLSAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcp
IHsKLSAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICAgICAgc2xvdC5zZXRD
dXN0b20odGhpcywgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUp
LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBKU0hpc3Rvcnk6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQogewogICAgIC8vIE9ubHkg
YWxsb3cgcHV0dGluZyBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9u
IDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMyArNjYsMTMgQEAgYm9vbCBKU0xvY2F0aW9uOjpn
ZXRPd25Qcm9wZXJ0eVNsb3REZWxlZwogICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0xv
Y2F0aW9uUHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywg
cHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkgJiYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBK
U0M6OkZ1bmN0aW9uKSkgewogICAgICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNMb2Nh
dGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcik7CisgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9u
R2V0dGVyLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzTG9jYXRpb25Qcm90b3R5
cGVGdW5jdGlvblJlbG9hZCkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9u
Q2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlciwgZW50cnkt
PmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNl
IGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3Np
Z24pIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNB
c3NpZ25GdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBu
b25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIsIGVudHJ5LT5hdHRyaWJ1dGVzKCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC04Niw0NSAr
ODYsNiBAQCBib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdERlbGVnCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgp
LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXRVbmRl
ZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIC8vIHRocm93
IG91dCBhbGwgY3Jvc3MgZG9tYWluIGFjY2VzcwotICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NU
b0ZyYW1lKGV4ZWMsIGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8g
Q2hlY2sgZm9yIHRoZSBmZXcgZnVuY3Rpb25zIHRoYXQgd2UgYWxsb3csIGV2ZW4gd2hlbiBjYWxs
ZWQgY3Jvc3MtZG9tYWluLgotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0xvY2F0aW9u
UHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVy
dHlOYW1lKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBpZiAoZW50cnkgJiYgKGVudHJ5
LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSkgewotICAgICAgICBpZiAoZW50cnktPmZ1
bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSkgewotICAgICAg
ICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlv
bkdldHRlcik7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRW
YWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09
IGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCkgewotICAgICAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKTsKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHBy
b3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblBy
b3RvdHlwZUZ1bmN0aW9uQXNzaWduKSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
LCBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIpOwotICAgICAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwg
ZW50cnktPmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogT3RoZXIgaW1wbGVtZW50ZXJzIG9mIHRoZSBX
aW5kb3cgY3Jvc3MtZG9tYWluIHNjaGVtZSAoV2luZG93LCBIaXN0b3J5KSBhbGxvdyB0b1N0cmlu
ZywKLSAgICAvLyBidXQgZm9yIG5vdyB3ZSBoYXZlIGRlY2lkZWQgbm90IHRvLCBwYXJ0bHkgYmVj
YXVzZSBpdCBzZWVtcyBzaWxseSB0byByZXR1cm4gIltPYmplY3QgTG9jYXRpb25dIiBpbgotICAg
IC8vIHN1Y2ggY2FzZXMgd2hlbiBub3JtYWxseSB0aGUgc3RyaW5nIGZvcm0gb2YgTG9jYXRpb24g
d291bGQgYmUgdGhlIFVSTC4KLQotICAgIGRlc2NyaXB0b3Iuc2V0VW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgSlNMb2NhdGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVs
ZW1lbnRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTgsNyArMTE4LDEwIEBAIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5
U2wKIAogICAgIGlmICghc2NyaXB0T2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5h
bWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc2xvdC5zZXRDdXN0b20oZWxlbWVudCwg
cnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKTsKKyAgICAvLyBXaGlsZSB3ZSBkb24ndCBrbm93
IHdoYXQgdGhlIHBsdWdpbiBhbGxvd3MsIHdlIGRvIGtub3cgdGhhdCB3ZSBwcmV2ZW50CisgICAg
Ly8gZW51bWVyYXRpb24gb3IgZGVsZXRpb24gb2YgcHJvcGVydGllcywgc28gd2UgbWFyayBwbHVn
aW4gcHJvcGVydGllcworICAgIC8vIGFzIERvbnRFbnVtIHwgRG9udERlbGV0ZQorICAgIHNsb3Qu
c2V0Q3VzdG9tKGVsZW1lbnQsIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlciwgRG9udEVudW0g
fCBEb250RGVsZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTMwLDcgKzEzMyw3IEBA
IGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5RGUKICAgICBpZiAoIXNjcmlw
dE9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIHNsb3Quc2V0Q3VzdG9tKGVsZW1l
bnQsIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcik7CisgICAgc2xvdC5zZXRDdXN0b20oZWxl
bWVudCwgcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyLCBEb250RW51bSB8IERvbnREZWxldGUp
OwogICAgIC8vIFdoaWxlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGx1Z2luIGFsbG93cywgd2Ug
ZG8ga25vdyB0aGF0IHdlIHByZXZlbnQKICAgICAvLyBlbnVtZXJhdGlvbiBvciBkZWxldGlvbiBv
ZiBwcm9wZXJ0aWVzLCBzbyB3ZSBtYXJrIHBsdWdpbiBwcm9wZXJ0aWVzCiAgICAgLy8gYXMgRG9u
dEVudW0gfCBEb250RGVsZXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bs
dWdpbkVsZW1lbnRGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaAkocmV2aXNpb24gMTQwMjk3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDIwICs1OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90LCBlbGVtZW50KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHlwZSwgY2xhc3MgQmFzZT4gYm9vbCBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBUeXBlKiBlbGVtZW50
KQotICAgIHsKLSAgICAgICAgaWYgKCFlbGVtZW50LT5nbG9iYWxPYmplY3QoKS0+d29ybGQoKS0+
aXNOb3JtYWwoKSkgewotICAgICAgICAgICAgaWYgKEpTQzo6Z2V0U3RhdGljVmFsdWVEZXNjcmlw
dG9yPFR5cGUsIEJhc2U+KGV4ZWMsIGVsZW1lbnQtPnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxl
LCBlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgICAgICBKU0M6OkpTVmFsdWUgcHJvdG8gPSBlbGVtZW50LT5w
cm90b3R5cGUoKTsKLSAgICAgICAgICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIEpTQzo6anND
YXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChwcm90bykpLT5oYXNQcm9wZXJ0eShleGVjLCBw
cm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZWxlbWVudCk7Ci0gICAgfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBKU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnNfaApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NywxNCArNzcsNiBAQCBib29sIEpTV29ya2VyQ29udGV4dDo6Z2V0T3duUHJvcGVydHlTbG90CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTV29ya2VyQ29udGV4dDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgLy8gTG9vayBm
b3Igb3ZlcnJpZGVzIGJlZm9yZSBsb29raW5nIGF0IGFueSBvZiBvdXIgb3duIHByb3BlcnRpZXMu
Ci0gICAgaWYgKEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6ZXZlbnRTb3Vy
Y2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU0V2ZW50U291cmNlQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlz
aW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDcgQEAgc3ViIEdlbmVyYXRl
R2V0T3duUHJvcGVydHlTbG90Qm9keQogICAgICAgICBpZiAoJHJlcXVpcmVzTWFudWFsTG9va3Vw
KSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGNvbnN0
ICR7bmFtZXNwYWNlTWF5YmV9SGFzaEVudHJ5KiBlbnRyeSA9IGdldFN0YXRpY1ZhbHVlU2xvdEVu
dHJ5V2l0aG91dENhY2hpbmc8JGNsYXNzTmFtZT4oZXhlYywgcHJvcGVydHlOYW1lKTtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAoZW50cnkp
IHtcbiIpOwotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAg
ICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSwgZW50cnkt
PmF0dHJpYnV0ZXMoKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xv
dEltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBnZXRP
d25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIH1cbiIpOwogICAgICAgICB9CkBAIC00MjIsMTAgKzQy
MiwxNiBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmIChp
bmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgaW5kZXggPCBzdGF0aWNfY2FzdDwk
aW50ZXJmYWNlTmFtZSo+KHRoaXNPYmplY3QtPmltcGwoKSktPmxlbmd0aCgpKSB7XG4iKTsKICAg
ICAgICAgfQorICAgICAgICAjIEFzc3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBzZXR0ZXIsIHRoZSBp
bmRleCB3aWxsIGJlIHdyaXRhYmxlCisgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CisgICAgICAgICAgICBwdXNoKEBn
ZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICB1bnNpZ25lZCBzbG90QXR0cmlidXRlcyA9
ICR7bmFtZXNwYWNlTWF5YmV9RG9udERlbGV0ZTtcbiIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgdW5zaWduZWQg
c2xvdEF0dHJpYnV0ZXMgPSAke25hbWVzcGFjZU1heWJlfURvbnREZWxldGUgfCAke25hbWVzcGFj
ZU1heWJlfVJlYWRPbmx5O1xuIik7CisgICAgICAgIH0KICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9KSB7Ci0gICAgICAg
ICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldFZhbHVl
KHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhB
dHRyaWJ1dGVzKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBzbG90QXR0cmli
dXRlcyk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGdldE93blBy
b3BlcnR5U2xvdEltcGwsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwg
aW5kZXgsIGluZGV4R2V0dGVyKTtcbiIpOworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRl
eCwgaW5kZXhHZXR0ZXIsIHNsb3RBdHRyaWJ1dGVzKTtcbiIpOwogICAgICAgICB9CiAgICAgICAg
IHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7
CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgfVxuIik7CkBAIC00
MzMsNyArNDM5LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQogCiAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CiAg
ICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKGNhbkdldEl0ZW1z
Rm9yTmFtZShleGVjLCBzdGF0aWNfY2FzdDwkaW50ZXJmYWNlTmFtZSo+KHRoaXNPYmplY3QtPmlt
cGwoKSksIHByb3BlcnR5TmFtZSkpIHtcbiIpOwotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0
eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5uYW1lR2V0dGVyKTtcbiIpOworICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBs
LCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5uYW1lR2V0
dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7XG4iKTsKICAgICAgICAgcHVz
aChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAg
ICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICB9XG4iKTsKICAgICAgICAg
aWYgKCRpbmxpbmVkKSB7CkBAIC00NDcsNyArNDUzLDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJv
cGVydHlTbG90Qm9keQogICAgICAgICAmJG1hbnVhbExvb2t1cEdldHRlckdlbmVyYXRpb24oKTsK
ICAgICB9CiAKLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3Vz
dG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9KSB7CisgICAgaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9KSB7
CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKHRoaXNPYmpl
Y3QtPmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkp
XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0
dXJuIHRydWU7XG4iKTsKICAgICB9CkBAIC00NjYsMTA3ICs0NzIsNiBAQCBzdWIgR2VuZXJhdGVH
ZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgcmV0dXJuIEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBs
OwogfQogCi1zdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5Ci17Ci0gICAg
bXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkaGFzQXR0cmlidXRl
cywgJGlubGluZWQpID0gQF87Ci0gICAgCi0gICAgbXkgJG5hbWVzcGFjZU1heWJlID0gKCRpbmxp
bmVkID8gIkpTQzo6IiA6ICIiKTsKLSAgICAKLSAgICBteSBAZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9ySW1wbCA9ICgpOwotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q2hlY2tTZWN1cml0eSJ9KSB7Ci0gICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgewotICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siQmluZGluZ1NlY3VyaXR5LmgifSA9
IDE7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCBqc0Nhc3Q8JGNsYXNzTmFt
ZSo+KHRoaXNPYmplY3QpLT5pbXBsKCkpKVxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFt
ZShleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCkpKVxuIik7Ci0gICAgICAgIH0KLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwotICAg
IH0KLSAgICAKLSAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIk5hbWVkTm9kZU1hcCIgb3IgJGlu
dGVyZmFjZU5hbWUgPX4gL15IVE1MXHcqQ29sbGVjdGlvbiQvKSB7Ci0gICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgJHtuYW1lc3BhY2VNYXliZX1KU1ZhbHVl
IHByb3RvID0gdGhpc09iamVjdC0+cHJvdG90eXBlKCk7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBq
c0Nhc3Q8JHtuYW1lc3BhY2VNYXliZX1KU09iamVjdCo+KGFzT2JqZWN0KHByb3RvKSktPmhhc1By
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpXG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4iKTsKLSAgICB9
Ci0gICAgCi0gICAgbXkgJG1hbnVhbExvb2t1cEdldHRlckdlbmVyYXRpb24gPSBzdWIgewotICAg
ICAgICBteSAkcmVxdWlyZXNNYW51YWxMb29rdXAgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJOYW1lZEdldHRlciJ9OwotICAgICAgICBpZiAoJHJlcXVpcmVzTWFudWFsTG9va3VwKSB7
Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIGNv
bnN0ICR7bmFtZXNwYWNlTWF5YmV9SGFzaEVudHJ5KiBlbnRyeSA9ICR7Y2xhc3NOYW1lfVRhYmxl
LmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdldE93
blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKGVudHJ5KSB7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVy
dHlHZXR0ZXIoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3Jp
cHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVl
KGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpO1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICByZXR1cm4g
dHJ1ZTtcbiIpOwotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1w
bCwgIiAgICB9XG4iKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAoISRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7Ci0gICAgICAgICYk
bWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOwotICAgIH0KLQotICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9KSB7Ci0gICAgICAg
IHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3Bl
cnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCAmJiBpbmRleCA8IHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+
aW1wbCgpKS0+bGVuZ3RoKCkpIHtcbiIpOwotICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKLSAgICAgICAgICAgICMg
QXNzdW1lIHRoYXQgaWYgdGhlcmUncyBhIHNldHRlciwgdGhlIGluZGV4IHdpbGwgYmUgd3JpdGFi
bGUKLSAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tSW5kZXhlZFNldHRlciJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNP
YmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCAke25hbWVzcGFjZU1heWJlfURvbnREZWxl
dGUpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcih0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSwgJHtuYW1lc3BhY2VNYXli
ZX1Eb250RGVsZXRlIHwgJHtuYW1lc3BhY2VNYXliZX1SZWFkT25seSk7XG4iKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
RGVzY3JpcHRvckltcGwsICIgICAgICAgICR7bmFtZXNwYWNlTWF5YmV9UHJvcGVydHlTbG90IHNs
b3Q7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGws
ICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIGluZGV4R2V0
dGVyKTtcbiIpOwotICAgICAgICAgICAgIyBBc3N1bWUgdGhhdCBpZiB0aGVyZSdzIGEgc2V0dGVy
LCB0aGUgaW5kZXggd2lsbCBiZSB3cml0YWJsZQotICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCAk
e25hbWVzcGFjZU1heWJlfURvbnREZWxldGUpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5
TmFtZSksICR7bmFtZXNwYWNlTWF5YmV9RG9udERlbGV0ZSB8ICR7bmFtZXNwYWNlTWF5YmV9UmVh
ZE9ubHkpO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKLSAg
ICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICB9XG4iKTsKLSAg
ICB9Ci0KLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0
dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0
dGVyIn0pIHsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1l
Kj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVydHlOYW1lKSkge1xuIik7Ci0gICAgICAgIHB1
c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgICR7bmFtZXNwYWNlTWF5
YmV9UHJvcGVydHlTbG90IHNsb3Q7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZUdl
dHRlcik7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwg
IiAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJv
cGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pO1xuIik7Ci0gICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHJldHVybiB0
cnVlO1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIg
ICAgfVxuIik7Ci0gICAgICAgIGlmICgkaW5saW5lZCkgewotICAgICAgICAgICAgJGhlYWRlcklu
Y2x1ZGVzeyJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCJ9ID0gMTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0gPSAx
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7Ci0gICAgICAgICYkbWFudWFsTG9va3VwR2V0
dGVyR2VuZXJhdGlvbigpOwotICAgIH0KLQotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0pIHsK
LSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBpZiAodGhp
c09iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKSlcbiIpOwotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JJbXBsLCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwotICAgIH0KLQotICAgIGlmICgk
aGFzQXR0cmlidXRlcykgewotICAgICAgICBpZiAoJGlubGluZWQpIHsKLSAgICAgICAgICAgIGRp
ZSAiQ2Fubm90IGlubGluZSBpZiBOb1N0YXRpY1RhYmxlcyBpcyBzZXQuIiBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSk7Ci0gICAgICAgICAg
ICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIHJldHVybiAke25hbWVz
cGFjZU1heWJlfWdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjwkY2xhc3NOYW1lLCBCYXNlPihleGVj
LCBzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICByZXR1cm4gJHtuYW1lc3BhY2VNYXliZX1n
ZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8JGNsYXNzTmFtZSwgQmFzZT4oZXhlYywgIiAuIGhhc2hU
YWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGlj
VGFibGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTtcbiIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
XG4iKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJ
bXBsOwotfQotCiBzdWIgR2VuZXJhdGVIZWFkZXJDb250ZW50SGVhZGVyCiB7CiAgICAgbXkgJGlu
dGVyZmFjZSA9IHNoaWZ0OwpAQCAtNzkwLDcgKzY5NSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgog
ICAgIG15ICRoYXNDb21wbGV4R2V0dGVyID0KICAgICAgICAgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0ZXIifQogICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifQotICAgICAgICB8fCAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RB
bmREZXNjcmlwdG9yIn0KKyAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0KICAgICAgICAgfHwgJGhhc0ltcHVyZU5h
bWVkR2V0dGVyOwogICAgIAogICAgIG15ICRoYXNHZXR0ZXIgPSAkbnVtQXR0cmlidXRlcyA+IDAg
fHwgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifSB8
fCAkaGFzQ29tcGxleEdldHRlcjsKQEAgLTgwMiwxMCArNzA3LDggQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgIyBHZXR0ZXJzCiAgICAgaWYgKCRoYXNHZXR0ZXIpIHsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIikgaWYgKCRoYXNDb21wbGV4R2V0dGVy
KTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGdldE93blByb3BlcnR5
U2xvdERlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlND
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn07Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0
T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9OworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9Owog
ICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
In0gPSAxOwogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyJ9ID0gMTsKICAgICB9CkBA
IC0xMDI3LDEyICs5MzAsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZz
X2luZm8pO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlR2V0T3du
UHJvcGVydHlTbG90Qm9keSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwg
JG51bUF0dHJpYnV0ZXMgPiAwLCAxKSk7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9
XG5cbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiQUxXQVlTX0lOTElORSBib29s
ICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqIG9i
amVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXG4iKTsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PCR7Y2xhc3NOYW1lfSo+
KG9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yQm9keSgk
aW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAw
LCAxKSk7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIAog
ICAgIGlmICghJGhhc1BhcmVudCB8fApAQCAtMTEwMCw3ICs5OTcsNiBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87XG4iKTsKICAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDAgfHwgJG51bUNv
bnN0YW50cyA+IDApIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QifSA9IDE7CiAgICAgfQogICAgIGlmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21NYXJrRnVuY3Rpb24ifSBvciAk
bmVlZHNNYXJrQ2hpbGRyZW4pIHsKQEAgLTE2MTgsMjEgKzE1MTQsNiBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
IGdldFN0YXRpY1Byb3BlcnR5U2xvdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUsIEpTT2JqZWN0Pihl
eGVjLCAiIC4gcHJvdG90eXBlSGFzaFRhYmxlQWNjZXNzb3IoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSwgJGNsYXNzTmFtZSkgLiAiLCB0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOwotCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9v
bCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFt
ZX1Qcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlKj4o
b2JqZWN0KTtcbiIpOwotCi0gICAgICAgIGlmICgkbnVtQ29uc3RhbnRzIGVxIDAgJiYgJG51bUZ1
bmN0aW9ucyBlcSAwKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsgICAgICAgIAotICAgICAgICB9IGVsc2lmICgkbnVt
Q29uc3RhbnRzIGVxIDApIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+KGV4ZWMsICIgLiBwcm90
b3R5cGVIYXNoVGFibGVBY2Nlc3NvcigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNOb1N0YXRpY1RhYmxlcyJ9LCAkY2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICAgICAgfSBlbHNpZiAoJG51bUZ1bmN0aW9ucyBl
cSAwKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0U3Rh
dGljVmFsdWVEZXNjcmlwdG9yPCR7Y2xhc3NOYW1lfVByb3RvdHlwZSwgSlNPYmplY3Q+KGV4ZWMs
ICIgLiBwcm90b3R5cGVIYXNoVGFibGVBY2Nlc3NvcigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAkY2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3Qs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eURl
c2NyaXB0b3I8JHtjbGFzc05hbWV9UHJvdG90eXBlLCBKU09iamVjdD4oZXhlYywgIiAuIHByb3Rv
dHlwZUhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJK
U05vU3RhdGljVGFibGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKICAgICB9CiAKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZSJ9KSB7CkBAIC0xNzQ5LDcg
KzE2MzAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICB8
fCAhJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9IAog
ICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5k
ZXhlZEdldHRlciJ9CiAgICAgICAgICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xv
dEFuZERlc2NyaXB0b3IifQorICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifQogICAgICAgICAgICAg
ICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90In0KICAgICAgICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0KICAgICAgICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn07CkBAIC0xNzYzLDE3ICsx
NjQ0LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZz
X2luZm8pO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVHZXRP
d25Qcm9wZXJ0eVNsb3RCb2R5KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1l
LCAkbnVtQXR0cmlidXRlcyA+IDAsIDApKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNz
TmFtZX06OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcilcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09i
amVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJh
dGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1l
LCAkY2xhc3NOYW1lLCAkbnVtQXR0cmlidXRlcyA+IDAsIDApKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9CiAgICAgICAgICAg
ICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0g
fHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0K
LSAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlND
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0pIHsKKyAgICAgICAgICAgICAg
ICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9w
ZXJ0eVNsb3QifSkgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y2xh
c3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFt
ZX0qPihjZWxsKTtcbiIpOwpAQCAtMTc5NiwxMCArMTY3MSwxNiBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChpbmRleCA8IHN0YXRpY19jYXN0PCRpbnRlcmZh
Y2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHtcbiIpOwogICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAjIEFzc3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBzZXR0
ZXIsIHRoZSBpbmRleCB3aWxsIGJlIHdyaXRhYmxlCisgICAgICAgICAgICAgICAgaWYgKCRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHVuc2lnbmVkIHNs
b3RBdHRyaWJ1dGVzID0gRG9udERlbGV0ZTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB1bnNpZ25l
ZCBzbG90QXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBSZWFkT25seTtcbiIpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJ
bmRleChleGVjLCBpbmRleCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModGhpc09iamVjdC0+
Z2V0QnlJbmRleChleGVjLCBpbmRleCksIHNsb3RBdHRyaWJ1dGVzKTtcbiIpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCB0aGlzT2JqZWN0
LT5pbmRleEdldHRlcik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNP
YmplY3QtPmluZGV4R2V0dGVyLCBzbG90QXR0cmlidXRlcyk7XG4iKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
cnVlO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7
CkBAIC0xODA4LDEzICsxNjg5LDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
ICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVy
In0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVy
In0pIHsKICAgICAgICAgICAgICAgICAmJHByb3BlcnR5TmFtZUdlbmVyYXRpb24oKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1l
KGV4ZWMsIHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwg
cHJvcGVydHlOYW1lKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0
ZXIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIsIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7Ind0Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0gPSAxOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9KSB7CisgICAgICAgICAg
ICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90In0pIHsKICAgICAgICAgICAgICAgICAmJHByb3BlcnR5TmFtZUdlbmVyYXRpb24o
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVj
dC0+Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSlc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
dHJ1ZTtcbiIpOwpAQCAtMzY1OCw3ICszNTM5LDYgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JE
ZWNsYXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG5cbiIpOwogCiAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87XG4iKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KVxuIik7CkBAIC00MDQxLDExICszOTIxLDYgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxw
ZXJNZXRob2RzCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIGdldFN0YXRpYyR7a2luZH1TbG90PCR7Y29u
c3RydWN0b3JDbGFzc05hbWV9LCBKU0RPTVdyYXBwZXI+KGV4ZWMsICIgLiBjb25zdHJ1Y3Rvckhh
c2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3Rh
dGljVGFibGVzIn0sICRjb25zdHJ1Y3RvckNsYXNzTmFtZSkgLiAiLCBqc0Nhc3Q8JHtjb25zdHJ1
Y3RvckNsYXNzTmFtZX0qPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOwogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotCi0gICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgImJvb2wgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcbiIpOwotICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHJldHVybiBnZXRTdGF0aWMke2tpbmR9RGVzY3JpcHRvcjwke2NvbnN0cnVjdG9yQ2xhc3NO
YW1lfSwgSlNET01XcmFwcGVyPihleGVjLCAiIC4gY29uc3RydWN0b3JIYXNoVGFibGVBY2Nlc3Nv
cigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAk
Y29uc3RydWN0b3JDbGFzc05hbWUpIC4gIiwganNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9
Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogICAgIH0KIAogICAgIGlmIChJc0NvbnN0cnVjdGFi
bGUoJGludGVyZmFjZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNyArNjYsNyBAQCBKU0N1c3RvbUNvbnN0cnVjdG9yCiBKU0N1c3RvbURlZmluZU93blBy
b3BlcnR5CiBKU0N1c3RvbURlZmluZU93blByb3BlcnR5T25Qcm90b3R5cGUKIEpTQ3VzdG9tRmlu
YWxpemUKLUpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvcgorSlNDdXN0b21H
ZXRPd25Qcm9wZXJ0eVNsb3QKIEpTQ3VzdG9tR2V0dGVyCiBKU0N1c3RvbUhlYWRlcgogSlNDdXN0
b21Jc1JlYWNoYWJsZQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNw
cAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw0NyArODksMjUgQEAgYm9vbCBSdW50aW1lQXJy
YXk6OmdldE93blByb3BlcnR5U2xvdChKUwogewogICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFi
bGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyKTsKKyAgICAgICAg
c2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0
dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCk7CiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpIHsKICAgICAg
ICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNs
b3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0
dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgdGhp
c09iamVjdC0+aW5kZXhHZXR0ZXIsIERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29s
IFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsK
LSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbGVuZ3RoR2V0dGVyKTsKLSAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlO
YW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOwotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSB7Ci0gICAg
ICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwotICAgICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0
LCBpbmRleCwgaW5kZXhHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
c2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgRG9udEVudW0p
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKTsKLX0KLQogYm9vbCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganND
YXN0PFJ1bnRpbWVBcnJheSo+KGNlbGwpOwogICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPmdl
dExlbmd0aCgpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5k
ZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRl
eCh0aGlzT2JqZWN0LCBpbmRleCwgdGhpc09iamVjdC0+aW5kZXhHZXR0ZXIsIERvbnREZWxldGUg
fCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAg
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhv
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9k
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
bWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMjYgKzY1LDEzIEBAIGJvb2wgUnVudGlt
ZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEoKIHsKICAgICBSdW50aW1lTWV0aG9kKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVNZXRob2QqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRD
YWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyKTsKKyAg
ICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVu
Z3RoR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLWJvb2wgUnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yICZkZXNjcmlwdG9yKQotewotICAgIFJ1bnRpbWVNZXRob2QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UnVudGltZU1ldGhvZCo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIFByb3BlcnR5
U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0
ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVj
LCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlv
bjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSdW50aW1lTWV0aG9k
KiBtZXRob2QgPSBzdGF0aWNfY2FzdDxSdW50aW1lTWV0aG9kKj4oZXhlYy0+Y2FsbGVlKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHJldmlzaW9uIDE0MDI5
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw2IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0
Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIEpTVmFsdWUgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUs
IFByb3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVj
dC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxNCArMTM0LDE0IEBAIGJvb2wgUnVu
dGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEoKICAgICAgICAgLy8gU2VlIGlmIHRoZSBp
bnN0YW5jZSBoYXMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KICAgICAgICAgRmll
bGQgKmFGaWVsZCA9IGFDbGFzcy0+ZmllbGROYW1lZChwcm9wZXJ0eU5hbWUsIGluc3RhbmNlLmdl
dCgpKTsKICAgICAgICAgaWYgKGFGaWVsZCkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpc09iamVjdCwgdGhpc09iamVjdC0+ZmllbGRHZXR0ZXIpOworICAgICAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+ZmllbGRHZXR0ZXIsIERvbnREZWxldGUp
OwogICAgICAgICAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBOb3cgY2hlY2sgaWYgYSBtZXRob2Qg
d2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHMsIGlmIHNvIHJldHVybiBhIGZ1bmN0aW9uIG9iamVj
dCBmb3IKICAgICAgICAgICAgIC8vIHRoYXQgbWV0aG9kLgogICAgICAgICAgICAgaWYgKGFDbGFz
cy0+bWV0aG9kTmFtZWQocHJvcGVydHlOYW1lLCBpbnN0YW5jZS5nZXQoKSkpIHsKLSAgICAgICAg
ICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5tZXRob2RHZXR0
ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmpl
Y3QtPm1ldGhvZEdldHRlciwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0xNTAsNyArMTUwLDcgQEAgYm9vbCBSdW50aW1lT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSgogCiAgICAgICAgIC8vIFRyeSBhIGZhbGxiYWNrIG9iamVjdC4KICAgICAg
ICAgaWYgKCFhQ2xhc3MtPmZhbGxiYWNrT2JqZWN0KGV4ZWMsIGluc3RhbmNlLmdldCgpLCBwcm9w
ZXJ0eU5hbWUpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXNPYmplY3QsIHRoaXNPYmplY3QtPmZhbGxiYWNrT2JqZWN0R2V0dGVyKTsKKyAgICAgICAgICAg
IHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmZhbGxiYWNrT2JqZWN0R2V0
dGVyLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgICAgICAgICBpbnN0
YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTYx
LDU1ICsxNjEsNiBAQCBib29sIFJ1bnRpbWVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKCiAg
ICAgcmV0dXJuIGluc3RhbmNlLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlICpleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0g
ICAgUnVudGltZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4ob2Jq
ZWN0KTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPm1faW5zdGFuY2UpIHsKLSAgICAgICAgdGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgCi0gICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmplY3QtPm1faW5zdGFu
Y2U7Ci0gICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgCi0gICAgQ2xhc3MgKmFDbGFzcyA9IGlu
c3RhbmNlLT5nZXRDbGFzcygpOwotICAgIAotICAgIGlmIChhQ2xhc3MpIHsKLSAgICAgICAgLy8g
U2VlIGlmIHRoZSBpbnN0YW5jZSBoYXMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4K
LSAgICAgICAgRmllbGQgKmFGaWVsZCA9IGFDbGFzcy0+ZmllbGROYW1lZChwcm9wZXJ0eU5hbWUs
IGluc3RhbmNlLmdldCgpKTsKLSAgICAgICAgaWYgKGFGaWVsZCkgewotICAgICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBm
aWVsZEdldHRlcik7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUp
LCBEb250RGVsZXRlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gTm93IGNoZWNrIGlmIGEgbWV0aG9kIHdpdGggc3BlY2lmaWVkIG5h
bWUgZXhpc3RzLCBpZiBzbyByZXR1cm4gYSBmdW5jdGlvbiBvYmplY3QgZm9yCi0gICAgICAgICAg
ICAvLyB0aGF0IG1ldGhvZC4KLSAgICAgICAgICAgIGlmIChhQ2xhc3MtPm1ldGhvZE5hbWVkKHBy
b3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbWV0
aG9kR2V0dGVyKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVHJ5
IGEgZmFsbGJhY2sgb2JqZWN0LgotICAgICAgICBpZiAoIWFDbGFzcy0+ZmFsbGJhY2tPYmplY3Qo
ZXhlYywgaW5zdGFuY2UuZ2V0KCksIHByb3BlcnR5TmFtZSkuaXNVbmRlZmluZWQoKSkgewotICAg
ICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBmYWxsYmFja09iamVjdEdldHRlcik7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+
ZW5kKCk7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1
ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBp
bnN0YW5jZS0+ZW5kKCk7Ci0gICAgCi0gICAgcmV0dXJuIGluc3RhbmNlLT5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
LX0KLQogdm9pZCBSdW50aW1lT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1
bnRpbWVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29i
amVjdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0
VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuaAkocmV2aXNpb24gMTQw
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbnN0YW5jZSgp
OwogCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKSB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpIHsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gMTQwMjk3
KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSw3ICsxMjUsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIENh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjE1LDEzICsyMTUsNiBAQCBib29sIE9iamNGYWxsYmFja09iamVjdElt
cDo6Z2V0T3duUHJvcGVyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgT2JqY0ZhbGxiYWNr
T2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICAv
LyBrZWVwIHRoZSBwcm90b3R5cGUgZnJvbSBnZXR0aW5nIGNhbGxlZCBpbnN0ZWFkIG9mIGp1c3Qg
cmV0dXJuaW5nIGZhbHNlCi0gICAgZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQogdm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnB1dChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaWRsCShyZXZp
c2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKIFsKICAgICBKU0N1c3RvbU1hcmtG
dW5jdGlvbiwKICAgICBKU0dlbmVyYXRlSXNSZWFjaGFibGUsCi0gICAgSlNDdXN0b21HZXRPd25Q
cm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90
LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAogI2lmIGRlZmluZWQoVjhfQklORElORykgJiYgVjhf
QklORElORwogICAgIE5hbWVkR2V0dGVyLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5pZGwJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEFwcGxldEVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBA
CiAKIFsKICAgICBDdXN0b21OYW1lZFNldHRlciwKLSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5
U2xvdEFuZERlc2NyaXB0b3IsCisgICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QsCiAgICAg
Q3VzdG9tQ2FsbAogXSBpbnRlcmZhY2UgSFRNTEFwcGxldEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7
CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgYWxpZ247CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDcgKzIwLDcgQEAKIAogWwogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAotICAgIEpTQ3VzdG9t
R2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAgICBKU0N1c3RvbUdldE93blByb3Bl
cnR5U2xvdCwKICAgICBDdXN0b21DYWxsCiBdIGludGVyZmFjZSBIVE1MRW1iZWRFbGVtZW50IDog
SFRNTEVsZW1lbnQgewogYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgYWxpZ247CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmlkbAkocmV2aXNpb24gMTQw
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIAogWwogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAot
ICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAgICBKU0N1c3Rv
bUdldE93blByb3BlcnR5U2xvdCwKICAgICBDdXN0b21DYWxsCiBdIGludGVyZmFjZSBIVE1MT2Jq
ZWN0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEZv
cm1FbGVtZW50IGZvcm07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNpZiBkZWZpbmVkKFY4X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcK
ICAgICBDaGVja1NlY3VyaXR5LAogI2VuZGlmCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNs
b3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAogICAgIEN1
c3RvbU5hbWVkU2V0dGVyLAogICAgIEpTR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsRnJhbWUsCiAg
ICAgQ3VzdG9tRGVsZXRlUHJvcGVydHksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0
aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAko
cmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBkZWZpbmVkKFY4X0JJTkRJTkcpICYm
IFY4X0JJTkRJTkcKICAgICBDaGVja1NlY3VyaXR5LAogI2VuZGlmCi0gICAgSlNDdXN0b21HZXRP
d25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlT
bG90LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAogICAgIEpTR2VuZXJhdGVJc1JlYWNoYWJsZT1J
bXBsRnJhbWUsCiAgICAgQ3VzdG9tRGVsZXRlUHJvcGVydHksCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKIFsKICAgICBDb25kaXRpb25hbD1XT1JLRVJTLAogICAgIEpTQ3VzdG9tTWFya0Z1
bmN0aW9uLAotICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAg
ICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCwKICAgICBFdmVudFRhcmdldCwKICAgICBFeHRl
bmRzRE9NR2xvYmFsT2JqZWN0LAogICAgIElzV29ya2VyQ29udGV4dCwKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE0MDMwMCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTAxLTIwICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJh
cnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDc0MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIGlzIHByYWN0aWNhbGx5IHJlZHVuZGFudCB3aXRoIGdldE93blByb3BlcnR5U2xvdC4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAg
ICAgIC0gcGFzcyBhdHRyaWJ1dGVzIHRvIGdldE93blByb3BlcnR5U2xvdAorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5o
OgorICAgICAgICAoSlNOUE9iamVjdCk6CisKIDIwMTMtMDEtMjAgIFZpYXRjaGVzbGF2IE9zdGFw
ZW5rbyAgPHNsLm9zdGFwZW5rb0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZW1vdmUgc3VwcG9y
dCBnZXR0aW5nIHBlci1yZXNvdXJjZSBjYWxsYmFja3MgaW4gdGhlIFVJUHJvY2VzcwpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzYsNTQgKzI3NiwxOSBAQCBib29sIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChK
U0NlCiAKICAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhlIE5QT2JqZWN0IGhhcyBhIHByb3BlcnR5
IHdpdGggdGhpcyBuYW1lLgogICAgIGlmICh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3Mt
Pmhhc1Byb3BlcnR5ICYmIHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVy
dHkodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyKSkgewotICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5wcm9wZXJ0eUdldHRlcik7CisgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnByb3BlcnR5R2V0dGVy
LCBEb250RGVsZXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gU2Vj
b25kLCBjaGVjayBpZiB0aGUgTlBPYmplY3QgaGFzIGEgbWV0aG9kIHdpdGggdGhpcyBuYW1lLgog
ICAgIGlmICh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCAmJiB0aGlz
T2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCh0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0LCBucElkZW50aWZpZXIpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3Qs
IHRoaXNPYmplY3QtPm1ldGhvZEdldHRlcik7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNP
YmplY3QsIHRoaXNPYmplY3QtPm1ldGhvZEdldHRlciwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgSlNOUE9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU05QT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwotICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVj
dCkgewotICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElk
ZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwotCi0gICAgLy8gQ2FsbGluZyBO
UENsYXNzOjppbnZva2Ugd2lsbCBjYWxsIGludG8gcGx1Zy1pbiBjb2RlLCBhbmQgdGhlcmUncyBu
byB0ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRvLgotICAgIC8vIChpbmNsdWRpbmcgZGVz
dHJveWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2YgdGhpcywgd2UgbWFrZSBzdXJlIHRvIGtl
ZXAgdGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCi0gICAgLy8gdGhlIGNhbGwgaGFzIGZpbmlzaGVk
LgotICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3RlY3Rvcih0aGlz
T2JqZWN0LT5tX29iamVjdE1hcCk7Ci0KLSAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhlIE5QT2Jq
ZWN0IGhhcyBhIHByb3BlcnR5IHdpdGggdGhpcyBuYW1lLgotICAgIGlmICh0aGlzT2JqZWN0LT5t
X25wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5ICYmIHRoaXNPYmplY3QtPm1fbnBPYmplY3Qt
Pl9jbGFzcy0+aGFzUHJvcGVydHkodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVy
KSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpc09iamVjdCwgcHJvcGVydHlHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gU2Vjb25kLCBjaGVjayBpZiB0aGUg
TlBPYmplY3QgaGFzIGEgbWV0aG9kIHdpdGggdGhpcyBuYW1lLgotICAgIGlmICh0aGlzT2JqZWN0
LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCAmJiB0aGlzT2JqZWN0LT5tX25wT2JqZWN0
LT5fY2xhc3MtPmhhc01ldGhvZCh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIp
KSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBtZXRob2RHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KIHZvaWQgSlNOUE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KQogewogICAgIEpTTlBPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU05QT2JqZWN0
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDcgKzg2LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSlNDOjpDb25z
dHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERh
dGEmKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qm
KTsKIAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183724</attachid>
            <date>2013-01-21 00:14:20 -0800</date>
            <delta_ts>2013-01-22 02:49:21 -0800</delta_ts>
            <desc>revert change to enum values</desc>
            <filename>107420.3.patch</filename>
            <type>text/plain</type>
            <size>195484</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQwMzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNCBA
QAorMjAxMy0wMS0yMCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGdldE93blByb3BlcnR5RGVzY3JpcHRvcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwcmFjdGljYWxseSBy
ZWR1bmRhbnQgd2l0aCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisKKyAgICAgICAgVGhlIGJ1bGsgb2Yg
Y2hhbmdlcyBoZXJlIGFyZSB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcgorICAgICAgICBtZWNoYW5pc20uIEEgbmV3IGZyZWUtZnVuY3Rpb24gaW1wbGVtZW50
YXRpb24gb2YgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGlzCisgICAgICAgIGFkZGVkIHRvIFBy
b3BlcnR5RGVzY3JpcHRvci5oLCBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBnZXRPd25Qcm9wZXJ0
eVNsb3QuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzLCBQcm9wZXJ0eVNsb3Qg
aXMgbm93IHBhc3NlZCB0aGUgYXR0cmlidXRlcywgYW5kCisgICAgICAgIHJlZmVyZW5jZXMgdGhl
IEdldHRlclNldHRlciBvYmplY3QgZm9yIGFjY2Vzc29ycywgcmF0aGVyIHRoYW4gdGhlIGdldHRl
ci4gQW4KKyAgICAgICAgYWRkaXRpb25hbCBmaWVsZCBpbmRpY2F0aW5nIGdldE93blByb3BlcnR5
RGVzY3JpcHRvciB1c2FnZSBpcyBhbHNvIGFkZGVkIHRvCisgICAgICAgIHN1cHBvcnQgZXhpc3Rp
bmcgZnVuY3Rpb25hbGxpdHkgZm9yIHRoZSBET01XaW5kb3cgb2JqZWN0LgorCisgICAgICAgIElu
IG9yZGVyIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlIHNpemUgb2YgUHJvcGVydHlTbG90LCB0aGUg
aW1wbGVtZW50YXRpb24gaGFzCisgICAgICAgIGJlZW4gcmVmYWN0b3JlZC4gUHJldmlvdXNseSB0
aGUgQ2FjaGVQcm9wZXJ0eVR5cGUgd2FzIG9ubHkgc2V0IGZvciBjYWNoZWFibGUKKyAgICAgICAg
cHJvcGVydGllcy4gTm93IGNhY2hlYWJpbGl0eSBpcyBzcGxpdCBvdXQgaW50byBhIHNlcGFyYXRl
IGZpZWxkLCBhbmQgdGhlIHR5cGUKKyAgICAgICAgaXMgYWxzbyByZWNvcmRlZC4gVGhpcyBtZWFu
cyB3ZSBjYW4gYWx3YXlzIHVzZSB0aGUgdHlwZSBmaWVsZCB0byBkZXRlcm1pbmUKKyAgICAgICAg
dGhlIHZhbHVlLCByYXRoZXIgdGhhbiBvdmVybG9hZGluZyB0aGUgbWVhbmluZyBvZiB0aGUgZ2V0
VmFsdWUgZmllbGQuIFRoaXMsCisgICAgICAgIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIg
ZmllbGRzIGFyZSBtb3ZlZCBpbnRvIGFuIGV4aXN0aW5nIChidXQgc3BhcmVzbHkKKyAgICAgICAg
dXNlZCkgdW5pb24uCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAg
ICAoSlNDYWxsYmFja09iamVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaDoKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5qczoKKyAgICAgICAgKiBKU0NUeXBl
ZEFycmF5U3R1YnMuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVi
dWdnZXJBY3RpdmF0aW9uLmg6CisgICAgICAgIChEZWJ1Z2dlckFjdGl2YXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50
cy5oOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuaDoKKyAgICAgICAgKEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmg6CisgICAgICAgIChBcnJheVByb3RvdHlwZSk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChCb29sZWFuUHJvdG90eXBlKToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6CisgICAgICAg
IChEYXRlQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5oOgorICAg
ICAgICAoRGF0ZVByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoK
KyAgICAgICAgKEVycm9yUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQpOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0FjdGl2
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgICogcnVudGltZS9K
U0NlbGwuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTTm90QW5PYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAoSlNPTk9iamVjdCk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3BlcnR5SXNF
bnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNQcm94eS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5o
OgorICAgICAgICAoSlNQcm94eSk6CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZUludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRT
dHJpbmdQcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZUdldCk6CisgICAgICAgICogcnVudGltZS9M
b29rdXAuY3BwOgorICAgICAgICAoSlNDOjpzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAg
ICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6Z2V0U3RhdGljUHJvcGVydHlT
bG90KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmdldFN0YXRpY1ZhbHVlU2xvdCk6
CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChNYXRoT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL05hbWVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL05hbWVQcm90b3R5cGUuaDoKKyAgICAgICAgKE5hbWVQcm90b3R5cGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmg6CisgICAgICAgIChOdW1iZXJDb25z
dHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAo
TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JTZWFs
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUpOgorICAgICAgICAoSlND
OjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3Ry
dWN0b3JJc0Zyb3plbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgor
ICAgICAgICAoT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaDoKKyAgICAgICAgKE9iamVjdFByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9Q
cm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3I6
OmVxdWFsVG8pOgorICAgICAgICAoSlNDOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKFByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmZ1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpjYWNoZWRQcm9wZXJ0eVR5cGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6Omlz
Q2FjaGVhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90Ojppc0NhY2hlYWJsZVZhbHVl
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhCYXNlKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VmFsdWVXaXRoQXR0cmlidXRlcyk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpzZXRDYWNoZWFibGVDdXN0b20pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNl
dEN1c3RvbUluZGV4KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRBY2Nlc3NvclNs
b3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldENhY2hlYWJsZUFjY2Vzc29yU2xv
dCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VW5kZWZpbmVkKToKKyAgICAgICAg
KFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y2xlYXJPZmZzZXQp
OgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmN1c3RvbUdldHRlcik6CisgICAgICAgIChK
U0M6OlByb3BlcnR5U2xvdDo6YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6d3JpdGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmVudW1lcmFibGUpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmNvbmZpZ3VyYWJsZSk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5U2xvdDo6aXNBY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6
Z2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRJbkdldE93blBy
b3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6aW5HZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
Lmg6CisgICAgICAgIChSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKFJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKFJlZ0V4cFByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmpl
Y3QuaDoKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5oOgorICAgICAgICAoU3RyaW5nUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpnZXQpOgorCiAyMDEzLTAxLTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5j
b20+CiAKICAgICAgICAgV2VhayBHQyBtYXBzIHNob3VsZCBiZSBlYXNpZXIgdG8gdXNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCShyZXZpc2lvbiAx
NDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAgcHVibGljOiBcCiAgICAgfVwKIFwKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtc
Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3ImKTtcCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0Nl
bGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlND
OjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1wKICAgICBzdGF0aWMgdm9pZCBwdXRC
eUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7XApAQCAtMTA2LDMxICsxMDUsMTggQEAgYm9vbCBKUyMj
bmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdAogICAgIHVuc2lnbmVkIGluZGV4ID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTtcCiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9y
YWdlTGVuZ3RoKSB7XAogICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KTtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChl
eGVjLCBpbmRleCkpO1wKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRoaXNP
YmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTtcCiAgICAgICAgIHJl
dHVybiB0cnVlO1wKICAgICB9XAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
Y2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTtcCiB9XAogXAotYm9vbCBKUyMjbmFtZSMj
QXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcilcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxl
bmd0aCkge1wKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCk7XAotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0QnlJ
bmRleChleGVjLCBpbmRleCksIERvbnREZWxldGUpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAot
ICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XAotfVwKLVwKIGJvb2wgSlMjI25hbWUj
I0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcCiB7XAog
ICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkq
PihjZWxsKTtcCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19p
bmZvKTtcCiAgICAgaWYgKHByb3BlcnR5TmFtZSA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0
aCkge1wKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMs
IHByb3BlcnR5TmFtZSkpO1wKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRo
aXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSk7XAog
ICAgICAgICByZXR1cm4gdHJ1ZTtcCiAgICAgfVwKICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7XApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzUsNyArMTc1LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRp
YyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTQwMjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVJlZiA9IE9w
YXF1ZUpTU3RyaW5nOjpjcmVhdGUobmFtZSk7CiAgICAgICAgICAgICAgICAgQVBJQ2FsbGJhY2tT
aGltIGNhbGxiYWNrU2hpbShleGVjKTsKICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcGVydHko
Y3R4LCB0aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNhbGxiYWNrR2V0dGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgY2FsbGJhY2tHZXR0ZXIsIERv
bnRFbnVtKTsgLy8gV2UgZG9uJ3Qga25vdyB0aGUgYXR0cmlidXRlcywgc28gZ3Vlc3MuCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoSlNPYmplY3RHZXRQcm9wZXJ0eUNhbGxiYWNrIGdldFByb3BlcnR5ID0g
anNDbGFzcy0+Z2V0UHJvcGVydHkpIHsKQEAgLTE1MSwyOCArMTUxLDMwIEBAIGJvb2wgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWUoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5k
ZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0b0pTKGV4ZWMsIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyh0b0pTKGV4ZWMsIHZhbHVlKSwgRG9udEVudW0pOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3Rh
dGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3MtPnN0YXRpY1ZhbHVlcyhleGVj
KSkgewotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNWYWx1ZXMtPmNvbnRhaW5zKG5hbWUpKSB7
CisgICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjppdGVyYXRv
ciBlbnRyeSA9IHN0YXRpY1ZhbHVlcy0+ZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAo
ZW50cnkgIT0gc3RhdGljVmFsdWVzLT5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0U3RhdGljVmFsdWUoZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWVXaXRoQXR0cmlidXRlcyh2YWx1ZSwgZW50cnktPnZhbHVlLT5hdHRyaWJ1dGVzKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5j
dGlvbnMgPSBqc0NsYXNzLT5zdGF0aWNGdW5jdGlvbnMoZXhlYykpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhdGljRnVuY3Rpb25zLT5jb250YWlucyhuYW1lKSkgewotICAgICAgICAgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7Cisg
ICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjppdGVyYXRv
ciBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+ZmluZChuYW1lKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZW50cnkgIT0gc3RhdGljRnVuY3Rpb25zLT5lbmQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0aWNGdW5jdGlvbkdldHRlciwgZW50cnkt
PnZhbHVlLT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjEzLDI2ICsyMTUsNiBAQCBKU1Zh
bHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVmYXVsCiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBQYXJlbnQ+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpT
Q2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9i
amVjdCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1ldGhv
ZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgd2Ugc2hvdWxkIHJldHVybiBhbiBhY2Nl
c3MgZGVzY3JpcHRvciwgYnV0IHJldHVybmluZyBhIHZhbHVlIGRlc2NyaXB0b3IgaXMgYmV0dGVy
IHRoYW4gbm90aGluZy4KLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhl
YywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0VmFsdWUodmFsdWUpOwotICAgICAgICAvLyBXZSBkb24n
dCBrbm93IHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGNvbmZpZ3VyYWJsZSwgYnV0IGFzc3VtZSBp
dCBpcy4KLSAgICAgICAgZGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7Ci0gICAgICAg
IC8vIFdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgZW51bWVyYWJsZSAod2Ug
Y291bGQgY2FsbCBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgdG8gZmluZCBvdXQpLCBidXQgYXNzdW1l
IGl0IGlzbid0LgotICAgICAgICBkZXNjcmlwdG9yLnNldEVudW1lcmFibGUoZmFsc2UpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUGFyZW50OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIHZvaWQgSlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Qq
PihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
anMJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjIzLDIzICsyMjMsMjMgQEAgdmFyIGJhc2VE
dXBEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blBybwogc2hvdWxkQmUoJ3R5cGVvZiBiYXNlRHVw
RGVzY3JpcHRvcicsICJvYmplY3QiKTsKIHNob3VsZEJlKCdiYXNlRHVwRGVzY3JpcHRvci52YWx1
ZScsIGRlcml2ZWQuYmFzZUR1cCk7CiBzaG91bGRCZSgnYmFzZUR1cERlc2NyaXB0b3IuY29uZmln
dXJhYmxlJywgdHJ1ZSk7Ci1zaG91bGRCZSgnYmFzZUR1cERlc2NyaXB0b3IuZW51bWVyYWJsZScs
IGZhbHNlKTsKK3Nob3VsZEJlKCdiYXNlRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgdHJ1ZSk7
CiB2YXIgYmFzZU9ubHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihkZXJpdmVkLCAiYmFzZU9ubHkiKTsKIHNob3VsZEJlKCd0eXBlb2YgYmFzZU9ubHlEZXNjcmlw
dG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Jhc2VPbmx5RGVzY3JpcHRvci52YWx1ZScsIGRl
cml2ZWQuYmFzZU9ubHkpOwogc2hvdWxkQmUoJ2Jhc2VPbmx5RGVzY3JpcHRvci5jb25maWd1cmFi
bGUnLCB0cnVlKTsKLXNob3VsZEJlKCdiYXNlT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZh
bHNlKTsKK3Nob3VsZEJlKCdiYXNlT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwog
c2hvdWxkQmUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVyaXZlZCwgInByb3Rv
T25seSIpJywgdW5kZWZpbmVkKTsKIHZhciBwcm90b0R1cERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlcml2ZWQsICJwcm90b0R1cCIpOwogc2hvdWxkQmUoJ3R5
cGVvZiBwcm90b0R1cERlc2NyaXB0b3InLCAib2JqZWN0Iik7CiBzaG91bGRCZSgncHJvdG9EdXBE
ZXNjcmlwdG9yLnZhbHVlJywgZGVyaXZlZC5wcm90b0R1cCk7CiBzaG91bGRCZSgncHJvdG9EdXBE
ZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZScsIHRydWUpOwotc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3Jp
cHRvci5lbnVtZXJhYmxlJywgZmFsc2UpOworc2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5l
bnVtZXJhYmxlJywgdHJ1ZSk7CiB2YXIgZGVyaXZlZE9ubHlEZXNjcmlwdG9yID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJpdmVkLCAiZGVyaXZlZE9ubHkiKTsKIHNob3VsZEJl
KCd0eXBlb2YgZGVyaXZlZE9ubHlEZXNjcmlwdG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Rl
cml2ZWRPbmx5RGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQuZGVyaXZlZE9ubHkpOwogc2hvdWxk
QmUoJ2Rlcml2ZWRPbmx5RGVzY3JpcHRvci5jb25maWd1cmFibGUnLCB0cnVlKTsKLXNob3VsZEJl
KCdkZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdk
ZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScsIHRydWUpOwogCiBzaG91bGRCZSgidW5k
ZWZpbmVkIGluc3RhbmNlb2YgTXlPYmplY3QiLCBmYWxzZSk7CiBFdmlsRXhjZXB0aW9uT2JqZWN0
Lmhhc0luc3RhbmNlID0gZnVuY3Rpb24gZigpIHsgcmV0dXJuIGYoKTsgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24u
Y3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTIgKzk1LDYgQEAg
dm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246OmdldE93blByb3BlcnR5TgogICAgIHRoaXNPYmplY3Qt
Pm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1i
b29sIERlYnVnZ2VyQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIERlYnVnZ2VyQWN0aXZhdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlckFjdGl2YXRpb24qPihvYmplY3QpOwotICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24tPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIGJvb2wgRGVidWdnZXJBY3RpdmF0aW9uOjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBz
aG91bGRUaHJvdykKIHsKICAgICBEZWJ1Z2dlckFjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RGVidWdnZXJBY3RpdmF0aW9uKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBKU19F
WFBPUlREQVRBIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGUKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4o
Y2VsbCk7CiAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVu
dChpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgc2xvdC5zZXRW
YWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVlLCBOb25lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0xMjgsMTggKzEyOCwxOCBAQCBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsCiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAg
ICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVudChpKSkgewog
ICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNs
b3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMo
dmFsdWUsIE5vbmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlz
T2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVt
YmVyKHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRzKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWVX
aXRoQXR0cmlidXRlcyhqc051bWJlcih0aGlzT2JqZWN0LT5tX251bUFyZ3VtZW50cyksIERvbnRF
bnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlICYmIExJS0VMWSghdGhpc09iamVjdC0+
bV9vdmVycm9kZUNhbGxlZSkpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX2lzU3RyaWN0
TW9kZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5tX2NhbGxlZS5n
ZXQoKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModGhpc09iamVj
dC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5l
Y2Vzc2FyeShleGVjKTsKQEAgLTE1MSwzNSArMTUxLDYgQEAgYm9vbCBBcmd1bWVudHM6OmdldE93
blByb3BlcnR5U2xvdChKU0NlbAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgQXJn
dW1lbnRzOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCi17Ci0gICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3Vt
ZW50cyo+KG9iamVjdCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVudChpKSkg
ewotICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgTm9uZSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkg
ewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+
bV9udW1Bcmd1bWVudHMpLCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxs
ZWUgJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJyb2RlQ2FsbGVlKSkgewotICAgICAgICBp
ZiAoIXRoaXNPYmplY3QtPm1faXNTdHJpY3RNb2RlKSB7Ci0gICAgICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHRoaXNPYmplY3QtPmNy
ZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShleGVjKTsKLSAgICB9Ci0KLSAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIgJiYgdGhpc09iamVj
dC0+bV9pc1N0cmljdE1vZGUpCi0gICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVD
YWxsZXJJZk5lY2Vzc2FyeShleGVjKTsKLSAgICAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOwotfQotCiB2b2lkIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8QXJndW1lbnRzKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTks
NiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSw2IEBAIGJv
b2wgQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG8KICAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25TbG90PEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlD
b25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlDb25zdHJ1Y3Rvcio+KGNlbGwpLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEFycmF5Q29uc3RydWN0b3I6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsK
LSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEludGVybmFsRnVuY3Rpb24+
KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJy
YXlDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmso
RXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBAQCBwcml2YXRlOgogICAgIEFycmF5Q29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0KICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENv
bnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MCwxMSArMTQwLDYgQEAgYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KAog
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNBcnJheT4oZXhlYywgRXhlY1N0YXRl
OjphcnJheVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlQcm90b3R5cGUqPihjZWxs
KSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQot
ewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNBcnJheT4oZXhlYywg
RXhlY1N0YXRlOjphcnJheVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlQcm90b3R5
cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogLy8gSGVscGVyIGZ1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDI5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBBcnJheVByb3RvdHlw
ZSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAgICAg
ICAgIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
blByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSAr
NjgsNiBAQCBib29sIEJvb2xlYW5Qcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvCiAgICAgcmV0
dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCb29sZWFuT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6
OmJvb2xlYW5Qcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEJvb2xlYW5Qcm90b3R5cGUqPihj
ZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBCb29sZWFuUHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxCb29sZWFuT2Jq
ZWN0PihleGVjLCBFeGVjU3RhdGU6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0
PEJvb2xlYW5Qcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwot
fQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xl
YW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDAy
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICBCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwotCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5
Miw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAKICAgICB0eXBlZGVmIGJvb2wgKCpEZWZpbmVP
d25Qcm9wZXJ0eUZ1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCk7CiAgICAgRGVmaW5lT3duUHJvcGVydHlGdW5j
dGlvblB0ciBkZWZpbmVPd25Qcm9wZXJ0eTsKLQotICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blBy
b3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogfTsKIAogI2RlZmluZSBD
UkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xMzcsNyArMTM0LDYgQEAgc3RydWN0
IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0VmlydHVhbCwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAotICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3Rv
cmFnZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwx
MSArOTEsNiBAQCBib29sIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAg
cmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVj
U3RhdGU6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZUNvbnN0cnVjdG9y
Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgRGF0ZUNvbnN0cnVjdG9y
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxJbnRlcm5h
bEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBq
c0Nhc3Q8RGF0ZUNvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKLX0KLQogLy8gRUNNQSAxNS45LjMKIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2Vs
bCosIENhbGxEYXRhJik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0KLSAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICB9OwogCiAg
ICAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBBcmdMaXN0Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMCwx
MSArNTIwLDYgQEAgYm9vbCBEYXRlUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSgogICAg
IHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6
ZGF0ZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZVByb3RvdHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCi1ib29sIERhdGVQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4g
Z2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OmRh
dGVUYWJsZShleGVjKSwganNDYXN0PERhdGVQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyBGdW5jdGlvbnMKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkocmV2aXNp
b24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0KICAgICAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDExICs2Niw2IEBAIGJvb2wgRXJyb3JQcm90b3R5cGU6OmdldE93blByb3BlcnR5
U2xvdCgKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEVycm9ySW5zdGFuY2U+KGV4
ZWMsIEV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEVycm9yUHJv
dG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgRXJyb3JQcm90
b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEVy
cm9ySW5zdGFuY2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJsZShleGVjKSwg
anNDYXN0PEVycm9yUHJvdG90eXBlKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQS0yNjIgNS4xLCAxNS4xMS40LjQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAko
cmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2
Niw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQKICAgICBpZiAo
aXNUb3JuT2ZmKCkgJiYgIWlzVmFsaWQoZW50cnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBzbG90LnNldFZhbHVlKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwor
ICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0xNDksNyArMTQ5LDcgQEAgYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xv
dChKUwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3Vt
ZW50cykgewogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBm
b3IgdGhlIGFyZ3VtZW50cyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4K
ICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1Rvcm5PZmYoKSkgewotICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+Z2V0QXJndW1lbnRzR2V0dGVyKCkp
OworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+Z2V0
QXJndW1lbnRzR2V0dGVyKCksIERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTU3LDggKzE1Nyw5IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlMKICAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQo
cHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSlNW
YWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgdW5zaWdu
ZWQgYXR0cmlidXRlcyA9IE5vbmU7CisgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0
LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVz
KSkgeworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE2OSwyNiArMTcwLDYgQEAg
Ym9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdChKUwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBKU0FjdGl2YXRpb24qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKLQotICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewotICAgICAgICAv
LyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgdGhlIGFyZ3VtZW50cyBv
YmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KLSAgICAgICAgaWYgKCF0aGlz
T2JqZWN0LT5pc1Rvcm5PZmYoKSkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgICAgICAgICBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udEVudW0pOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGhpc09i
amVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBKU0Fj
dGl2YXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihjZWxs
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5o
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fj
dGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwyNCArMTgwLDEzIEBA
IGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoKIHsKICAgICBKU0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRW
YWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgICAgICBzbG90LnNldFZh
bHVlV2l0aEF0dHJpYnV0ZXMoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCB0aGlzT2Jq
ZWN0LT5pc0xlbmd0aFdyaXRhYmxlKCkgPyBEb250RGVsZXRlIHwgRG9udEVudW0gOiBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAg
IEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7Ci0gICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSks
IHRoaXNPYmplY3QtPmlzTGVuZ3RoV3JpdGFibGUoKSA/IERvbnREZWxldGUgfCBEb250RW51bSA6
IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gRUNN
QSAxNS40LjUuMQogdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNiBAQCBwdWJsaWM6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dF
eGNlcHRpb24pOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgIHN0YXRpYyBKU19FWFBPUlREQVRB
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsMTAg
KzIyMSw0IEBAIGJvb2wgSlNDZWxsOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCoKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYp
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw2IEBAIHByb3RlY3RlZDoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXN0b21IYXNJbnN0YW5jZShKU09iamVj
dCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FT
U0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEs
OCBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU0NlCiAgICAgICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSkgewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2Jq
ZWN0LT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtOworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKTsKICAgICAgICAg
aWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICBwcm90b3R5cGUtPnB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgdGhpc09iamVjdCwgRG9udEVudW0pOwpAQCAtMjMwLDcgKzIzMSw3IEBAIGJvb2wgSlNG
dW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgICAgIEFTU0VSVChpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KSwgb2Zmc2V0KTsKKyAgICAg
ICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5nZXREaXJlY3Qob2Zmc2V0KSwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKICAgICB9CiAKICAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKQEAg
LTI0MywxNyArMjQ0LDE3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpT
Q2UKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
LSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgYXJndW1lbnRzR2V0
dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgYXJndW1l
bnRzR2V0dGVyLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlz
T2JqZWN0LCBsZW5ndGhHZXR0ZXIpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0
aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRl
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkgewotICAgICAgICBzbG90LnNldENhY2hlYWJs
ZUN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFi
bGVDdXN0b20odGhpc09iamVjdCwgbmFtZUdldHRlciwgUmVhZE9ubHkgfCBEb250RW51bSB8IERv
bnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI2Nyw2NiArMjY4
LDEzIEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2xv
dC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgY2FsbGVyR2V0dGVyKTsKKyAgICAgICAg
c2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgY2FsbGVyR2V0dGVyLCBSZWFkT25s
eSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAg
SlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKLSAg
ICBpZiAodGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwotICAgIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAg
ICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1
dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFz
ZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMp
LCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnByZXRlcigpLT5yZXRy
aWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5IHwgRG9u
dEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAot
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewot
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+anNF
eGVjdXRhYmxlKCktPnBhcmFtZXRlckNvdW50KCkpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9u
dERlbGV0ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKSB7Ci0gICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+bmFtZVZhbHVl
KCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY2FsbGVyKSB7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNT
dHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNhbGxlckZy
b21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVs
ZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5j
dGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKQEAgLTQwNiwx
OSArMzU0LDIyIEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmoKICAg
ICAgICAgdGhpc09iamVjdC0+bV9pbmhlcml0b3JJRFdhdGNocG9pbnQubm90aWZ5V3JpdGUoKTsK
ICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQotCiAgICAgYm9v
bCB2YWx1ZUNoZWNrOwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cykgewogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCkt
PmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQot
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAg
ICAgICAvLyBHZXQgdGhlIHByb3BlcnR5IHRvIGZvcmNlIHJlaWZpY2F0aW9uLgorICAgICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gZ2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cisg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGhhc1Byb3BlcnR5LCBoYXNQcm9wZXJ0eSk7CiAgICAg
ICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAg
ICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUoZXhlYywgZGVz
Y3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zy
b21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKICAgICAgICAgaWYgKHRoaXNPYmpl
Y3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgaWYgKCFC
YXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
QWNjZXNzb3IpOworICAgICAgICAgICAgLy8gR2V0IHRoZSBwcm9wZXJ0eSB0byBmb3JjZSByZWlm
aWNhdGlvbi4KKyAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAgICAgICAgYm9v
bCBoYXNQcm9wZXJ0eSA9IGdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChoYXNQcm9wZXJ0eSwg
aGFzUHJvcGVydHkpOwogICAgICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7
CiAgICAgICAgIH0KICAgICAgICAgdmFsdWVDaGVjayA9ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwg
c2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+
cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmplY3QpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE0MDI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTY1LDcgKzE2NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJ1Y3R1
cmUqIGNhY2hlSW5oZXJpdG9ySUQoRXhlY1N0YXRlKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0g
RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwMjk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NjAsMTQgKzU2MCw2IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCgKICAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQodGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAg
IEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2Jq
ZWN0KTsKLSAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEJhc2U+KGV4ZWMsIEV4
ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBzeW1ib2xU
YWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpjbGVhclJhcmVEYXRhKEpTQ2VsbCogY2VsbCkKIHsKICAgICBqc0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+bV9yYXJlRGF0YS5jbGVhcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICAgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eUZvcldy
aXRlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDEyICs1OSw2IEBAIGJvb2wgSlNOb3RBbk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNOb3RBbk9iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5o
YWRFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEpTTm90QW5PYmpl
Y3Q6OnB1dChKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSAsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRF
eGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFu
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNO
b3RBbk9iamVjdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEpTT2JqZWN0IG1ldGhvZHMKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MDUsMTEgKzYwNSw2IEBAIGJvb2wgSlNPTk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UK
ICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBFeGVjU3Rh
dGU6Ompzb25UYWJsZShleGVjKSwganNDYXN0PEpTT05PYmplY3QqPihjZWxsKSwgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU09OT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdl
dFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpqc29u
VGFibGUoZXhlYyksIGpzQ2FzdDxKU09OT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKLX0KLQogY2xhc3MgV2Fsa2VyIHsKIHB1YmxpYzoKICAgICBXYWxrZXIoRXhl
Y1N0YXRlKiBleGVjLCBIYW5kbGU8SlNPYmplY3Q+IGZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlw
ZSwgQ2FsbERhdGEgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNPTk9iamVjdChKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLQogICAgIH07
CiAKICAgICBTdHJpbmcgSlNPTlN0cmluZ2lmeShFeGVjU3RhdGUqLCBKU1ZhbHVlLCB1bnNpZ25l
ZCBpbmRlbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyArMjg1LDcgQEAgYm9vbCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgICAgICAKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBpZiAo
dmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVlLCBOb25lKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjk5LDcgKzI5OSw3IEBAIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICAgICAgCiAgICAgICAgIGRv
dWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICBp
ZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWVXaXRoQXR0cmlidXRlcyhKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSks
IE5vbmUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0zMTQsNyArMzE0LDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eAogICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAg
ICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIE5vbmUpOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdl
dCgpKSB7CkBAIC0xNDIwLDEwICsxNDIwLDEwIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJ
bnN0YW5jZShFeGVjU3QKIAogYm9vbCBKU09iamVjdDo6cHJvcGVydHlJc0VudW1lcmFibGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0g
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgaWYgKCFjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihj
b25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cikpCisgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgaWYgKCFjb25zdF9jYXN0PEpTT2JqZWN0
Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCk7CisgICAgcmV0dXJu
IHNsb3QuZW51bWVyYWJsZSgpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNwZWNp
ZmljVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0Nl
bGwqJiBzcGVjaWZpY1ZhbHVlKSBjb25zdApAQCAtMTYzMCwxNSArMTYzMCwxMyBAQCBib29sIEpT
T2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3Bl
cnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorTkVWRVJfSU5MSU5FIHZvaWQg
SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7Ci0gICAgaWYgKEpTT2Jq
ZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0dGVyKGdldERpcmVjdChvZmZzZXQpKS0+
Z2V0dGVyKCkpIHsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCi0g
ICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUdldHRlclNsb3QodGhpcywgZ2V0dGVyRnVuY3Rp
b24sIG9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xv
dChnZXR0ZXJGdW5jdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVk
KCk7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihnZXRE
aXJlY3Qob2Zmc2V0KSk7CisgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQWNjZXNzb3JTbG90KHRoaXMsIGdldHRlclNldHRlciwg
b2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3Quc2V0QWNjZXNzb3JT
bG90KGdldHRlclNldHRlciwgYXR0cmlidXRlcyk7CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dElu
ZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJ
bk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IG9sZERlc2NyaXB0b3IpCkBAIC0yMzYzLDgwICsyMzYxLDExIEBAIEJ1dHRlcmZseSogSlNPYmpl
Y3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIG9sZFNpemUsIG5ld1NpemUpOwog
fQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7
Ci0gICAgSlNDZWxsKiBjZWxsID0gMDsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmpl
Y3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIGNlbGwpOwotICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0KG9mZnNldCksIGF0
dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWdu
ZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgPT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgc3dpdGNoIChv
YmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBjYXNlIEFMTF9JTlQzMl9JTkRF
WElOR19UWVBFUzoKLSAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0g
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKLSAgICAg
ICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIDApOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElO
R19UWVBFUzogewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iamVjdC0+bV9idXR0
ZXJmbHk7Ci0gICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihK
U1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSksIDApOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxl
bmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaSA8IHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+
bV9zcGFyc2VNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICAgICAgaWYgKGl0ID09IG1hcC0+bm90
Rm91bmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpdC0+
dmFsdWUuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBpZiAob2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQorICAgICAg
ICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlmICghcHJvdG90eXBl
LmlzT2JqZWN0KCkpCkBAIC0yNTE5LDcgKzI0NDgsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVP
d25Ob25JbmRleFByb3BlcnR5CiAgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0
eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
Y3VycmVudDsKLSAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CisgICAgaWYgKCFnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewog
ICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUgcHJldmVudGVkIQogICAgICAgICBpZiAo
IWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDE3ICs3NCw2IEBAIHN0cnVjdCBIYXNoVGFibGU7CiBKU19FWFBPUlRfUFJJ
VkFURSBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7
CiBleHRlcm4gSlNfRVhQT1JUREFUQSBjb25zdCBjaGFyKiBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3I7CiAKLS8vIEVDTUEgMjYyLTMgOC42LjEKLS8vIFByb3BlcnR5IGF0dHJp
YnV0ZXMKLWVudW0gQXR0cmlidXRlIHsKLSAgICBOb25lICAgICAgICAgPSAwLAotICAgIFJlYWRP
bmx5ICAgICA9IDEgPDwgMSwgIC8vIHByb3BlcnR5IGNhbiBiZSBvbmx5IHJlYWQsIG5vdCB3cml0
dGVuCi0gICAgRG9udEVudW0gICAgID0gMSA8PCAyLCAgLy8gcHJvcGVydHkgZG9lc24ndCBhcHBl
YXIgaW4gKGZvciAuLiBpbiAuLikKLSAgICBEb250RGVsZXRlICAgPSAxIDw8IDMsICAvLyBwcm9w
ZXJ0eSBjYW4ndCBiZSBkZWxldGVkCi0gICAgRnVuY3Rpb24gICAgID0gMSA8PCA0LCAgLy8gcHJv
cGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBieSBzdGF0aWMgaGFzaHRhYmxlcwotICAg
IEFjY2Vzc29yICAgICA9IDEgPDwgNSwgIC8vIHByb3BlcnR5IGlzIGEgZ2V0dGVyL3NldHRlcgot
fTsKLQogQ09NUElMRV9BU1NFUlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIE5vbmVf
aXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CiBDT01QSUxFX0FTU0VSVChSZWFkT25s
eSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRPbmx5X2lzX2JlbG93X0ZpcnN0SW50ZXJu
YWxBdHRyaWJ1dGUpOwogQ09NUElMRV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0
cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKQEAgLTEz
OCw3ICsxMjcsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKIAogICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIApAQCAt
NDkzLDE2ICs0ODEsMTYgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0UHJvcGVydHlTcGVjaWZpY1Zh
bHVlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNGdW5jdGlvbikg
Y29uc3Q7CiAKICAgICAvLyBUaGlzIGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBwcm9w
ZXJ0eSBtYXAuCi0gICAgSlNWYWx1ZSBnZXREaXJlY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAorICAgIEpTVmFsdWUgZ2V0RGlyZWN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQqIGF0dHJpYnV0ZXMgPSAwKSBjb25zdAogICAgIHsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERh
dGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNl
dCwgc3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4gb2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQgPyBnZXREaXJlY3Qob2Zmc2V0KSA6IEpTVmFsdWUoKTsKICAgICB9
CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorICAgIFByb3BlcnR5T2Zmc2V0IGdl
dERpcmVjdE9mZnNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkKiBhdHRyaWJ1dGVzID0gMCkKICAgICB7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlO
YW1lKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChn
bG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBjaGVja09mZnNl
dChvZmZzZXQsIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgcmV0dXJu
IG9mZnNldDsKICAgICB9CkBAIC05MjEsNyArOTA5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHB1
dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlNDZWxsKik7CiAKICAgICBib29sIGlubGlu
ZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQ
cm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0LCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5
SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIApAQCAt
MTEzOCwxMyArMTEyNiwxNCBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6cHJvdG90eXBlKCkg
Y29uCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXMgPSBOb25lOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKTsKICAgICBp
ZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGdldERpcmVjdChvZmZzZXQpOwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRl
clNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQotICAgICAgICAg
ICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOworICAgICAgICAgICAgZmls
bEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIHZhbHVlLCBvZmZzZXQpOworICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCh0aGlzLCB2YWx1ZSwgb2Zm
c2V0LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMTQwMjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDEyICs3Myw2IEBAIGJvb2wgSlNQcm94eTo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCgKICAgICByZXR1cm4gdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNQcm94eTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpTUHJv
eHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRo
aXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
Ci19Ci0KIHZvaWQgSlNQcm94eTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lv
biAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRE
aXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBA
IHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpTU2MKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE92ZXJyaWRlIGN1c3RvbSBhY2Nlc3NvciBiZWhhdmlvdXIgdGhhdCB0aGUg
RE9NIGludHJvZHVjZXMgZm9yIHNvbWUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50
IGhhbmRsZXJzIGRlY2xhcmVkIG9uIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghcmVxdWlyZXNEeW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQmFzZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuVmFsdWVzKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFJldHVyblZhbHVlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghcHV0VG9CYXNlT3BlcmF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDY1
LDE0ICs0NjUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgQUxXQVlTX0lOTElORSBib29sIEpT
U3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIobV9sZW5ndGgpKTsKKyAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWVXaXRoQXR0cmlidXRlcyhqc051bWJlcihtX2xlbmd0aCksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgICAg
IGlmIChpIDwgbV9sZW5ndGgpIHsKICAgICAgICAgICAgIEFTU0VSVChpICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7IC8vIE5vIG5lZWQgZm9yIGFuIGV4cGxpY2l0IGNoZWNrLCB0aGUgYWJv
dmUgdGVzdCB3b3VsZCBhbHdheXMgZmFpbCEKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0
SW5kZXgoZXhlYywgaSkpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVz
KGdldEluZGV4KGV4ZWMsIGkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtNDgyLDcgKzQ4Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiAgICAgewogICAgICAgICBpZiAocHJvcGVydHlOYW1lIDwgbV9sZW5ndGgpIHsKLSAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7Cisg
ICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMoZ2V0SW5kZXgoZXhlYywgcHJv
cGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzgsMjIgKzc4LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRl
ci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1
ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+Ci1p
bmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKLSAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQotewotICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJv
bFRhYmxlKCk7Ci0gICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5m
aW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgIGlmIChpdGVyID09IHN5bWJvbFRh
YmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6
RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwotICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwot
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKLSAgICAgICAgb2JqZWN0LT5yZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVs
ZXRlKTsKKyAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMob2JqZWN0LT5yZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVs
ZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA4LDcgKzkzLDcgQEAgaW5saW5lIGJv
b2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJs
ZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051
bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhvYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8
IERvbnREZWxldGUpOwogICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xvb2t1cC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgYm9vbCBz
ZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogewogICAgIEFTU0VSVCh0aGlzT2Jq
LT5nbG9iYWxPYmplY3QoKSk7CiAgICAgQVNTRVJUKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5j
dGlvbik7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gdGhpc09iai0+Z2V0RGlyZWN0T2Zm
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXMoKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsICZhdHRyaWJ1dGVzKTsKIAogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAg
ICAgICAgIC8vIElmIGEgcHJvcGVydHkgaXMgZXZlciBkZWxldGVkIGZyb20gYW4gb2JqZWN0IHdp
dGggYSBzdGF0aWMgdGFibGUsIHRoZW4gd2UgcmVpZnkKQEAgLTg2LDcgKzg3LDcgQEAgYm9vbCBz
ZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICB9CiAKLSAgICBzbG90LnNldFZhbHVlKHRoaXNPYmosIHRo
aXNPYmotPmdldERpcmVjdChvZmZzZXQpLCBvZmZzZXQpOworICAgIHNsb3Quc2V0VmFsdWVXaXRo
UHJvcGVydHlPZmZzZXQodGhpc09iaiwgdGhpc09iai0+Z2V0RGlyZWN0KG9mZnNldCksIG9mZnNl
dCwgYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDI4ICsy
NTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkg
JiBGdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChl
eGVjLCBlbnRyeSwgdGhpc09iaiwgcHJvcGVydHlOYW1lLCBzbG90KTsKIAotICAgICAgICBzbG90
LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1w
LCBjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIGJvb2wgZ2V0U3RhdGljUHJvcGVydHlEZXNj
cmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgVGhpc0ltcCog
dGhpc09iaiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQotICAgIHsKLSAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxl
LT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFlbnRy
eSkgLy8gbm90IGZvdW5kLCBmb3J3YXJkIHRvIHBhcmVudAotICAgICAgICAgICAgcmV0dXJuIFBh
cmVudEltcDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7Ci0gCi0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAg
ICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICBib29s
IHByZXNlbnQgPSBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChleGVjLCBlbnRyeSwgdGhpc09iaiwg
cHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAgIGlmIChwcmVzZW50KQotICAgICAgICAg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgcmV0dXJuIHByZXNl
bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+
cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOworICAg
ICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0
ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMjk1LDI4ICsyNzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAgICAgCiAgICAg
LyoqCi0gICAgICogU2ltcGxpZmllZCB2ZXJzaW9uIG9mIGdldFN0YXRpY1Byb3BlcnR5RGVzY3Jp
cHRvciBpbiBjYXNlIHRoZXJlIGFyZSBvbmx5IGZ1bmN0aW9ucy4KLSAgICAgKiBVc2luZyB0aGlz
IGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIGFsbG93cyAndGhpcycgdG8g
YXZvaWQgaW1wbGVtZW50aW5nCi0gICAgICogYSBkdW1teSBnZXRWYWx1ZVByb3BlcnR5LgotICAg
ICAqLwotICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIGJvb2wgZ2V0
U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFRhYmxl
KiB0YWJsZSwgSlNPYmplY3QqIHRoaXNPYmosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLSAgICB7Ci0gICAgICAgIGlmIChQYXJlbnRJ
bXA6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdGF0aWNfY2FzdDxQYXJlbnRJbXAqPih0aGlz
T2JqKSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAKLSAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxl
LT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoIWVudHJ5KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgICAgIGJvb2wgcHJlc2VudCA9IHNldFVwU3RhdGljRnVuY3Rpb25TbG90KGV4ZWMsIGVu
dHJ5LCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICBpZiAocHJlc2VudCkK
LSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMs
IHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICByZXR1cm4gcHJl
c2VudDsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0
U3RhdGljUHJvcGVydHlTbG90IGluIGNhc2UgdGhlcmUgYXJlIG5vIGZ1bmN0aW9ucywgb25seSAi
dmFsdWVzIi4KICAgICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlT
bG90IHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVuY0ltcCBjbGFzcy4KICAgICAgKi8KQEAgLTMz
MCwyNiArMjg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQVNTRVJUKCEoZW50cnkt
PmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSk7CiAKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVD
dXN0b20odGhpc09iaiwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0
U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIGluIGNhc2UgdGhlcmUgYXJlIG5vIGZ1bmN0aW9ucywg
b25seSAidmFsdWVzIi4KLSAgICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgZ2V0U3RhdGljUHJv
cGVydHlEZXNjcmlwdG9yIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVuY0ltcCBjbGFzcy4KLSAg
ICAgKi8KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgotICAg
IGlubGluZSBib29sIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEhhc2hUYWJsZSogdGFibGUsIFRoaXNJbXAqIHRoaXNPYmosIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLSAgICB7Ci0gICAgICAg
IGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZW50cnkpIC8vIG5vdCBmb3VuZCwgZm9yd2FyZCB0
byBwYXJlbnQKLSAgICAgICAgICAgIHJldHVybiBQYXJlbnRJbXA6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcih0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSk7Ci0g
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2Jq
LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJv
cGVydHlHZXR0ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9i
amVjdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTEgKzEwOSw2IEBAIGJv
b2wgTWF0aE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om1hdGhUYWJsZShleGVj
KSwganNDYXN0PE1hdGhPYmplY3QqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
Ym9vbCBNYXRoT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVz
Y3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRlOjptYXRoVGFibGUoZXhlYyksIGpzQ2Fz
dDxNYXRoT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNBYnMoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAg
ICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFt
ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmFtZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Mywx
MSArNjMsNiBAQCBib29sIE5hbWVQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKCiAgICAg
cmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCYXNlPihleGVjLCBFeGVjU3RhdGU6OnByaXZh
dGVOYW1lUHJvdG90eXBlVGFibGUoZXhlYyksIGpzQ2FzdDxOYW1lUHJvdG90eXBlKj4oY2VsbCks
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgTmFtZVByb3RvdHlwZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewot
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8QmFzZT4oZXhlYywgRXhlY1N0
YXRlOjpwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8TmFtZVByb3RvdHlw
ZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZU5hbWVQcm90b0Z1bmNU
b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYW1lUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmFtZVByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDYgQEAgYm9vbCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0T3du
UHJvcGVydHlTbAogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8TnVtYmVyQ29uc3RydWN0
b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6bnVtYmVyQ29uc3RydWN0b3JU
YWJsZShleGVjKSwganNDYXN0PE51bWJlckNvbnN0cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKLWJvb2wgTnVtYmVyQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1
cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPE51bWJlckNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1
bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6Om51bWJlckNvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpz
Q2FzdDxOdW1iZXJDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7Ci19Ci0KIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGxvb2t1cFB1dDxOdW1iZXJDb25zdHJ1Y3Rvciwg
SW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRXhlY1N0YXRlOjpu
dW1iZXJDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8TnVtYmVyQ29uc3RydWN0b3IqPihj
ZWxsKSwgc2xvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgICAgICBKU1ZhbHVlIGdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTEgKzg4LDYgQEAgYm9vbCBOdW1iZXJQcm90b3R5cGU6OmdldE93blByb3BlcnR5
U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8TnVtYmVyT2JqZWN0PihleGVj
LCBFeGVjU3RhdGU6Om51bWJlclByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8TnVtYmVyUHJv
dG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgTnVtYmVyUHJv
dG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxO
dW1iZXJPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6bnVtYmVyUHJvdG90eXBlVGFibGUoZXhlYyks
IGpzQ2FzdDxOdW1iZXJQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHRv
VGhpc051bWJlcihKU1ZhbHVlIHRoaXNWYWx1ZSwgZG91YmxlJiB4KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHBy
aXZhdGU6CiAgICAgICAgIE51bWJlclByb3RvdHlwZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsK
ICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDExICs5Nyw2
IEBAIGJvb2wgT2JqZWN0Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2wKICAgICByZXR1cm4g
Z2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om9iamVjdENv
bnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxPYmplY3RDb25zdHJ1Y3Rvcio+KGNlbGwpLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIE9iamVjdENvbnN0cnVjdG9yOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17
Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywg
RXhlY1N0YXRlOjpvYmplY3RDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8T2JqZWN0Q29u
c3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyBF
Q01BIDE1LjIuMgogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdE9iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CkBAIC0xNDksMTIgKzE0NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0CiB7CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3RlZCBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEg
dmFsdWUgdGhhdCBpcyBub3QgYW4gb2JqZWN0LiIpKSk7Ci0gICAgU3RyaW5nIHByb3BlcnR5TmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKKwogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBkZXNjcmlwdG9yOwotICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFt
ZSksIGRlc2NyaXB0b3IpKQorICAgIGlmICghZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zODAs
NyArMzc2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAg
IGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVz
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0IGRlc2Mg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBQLgogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAg
ICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgaWYgKCFnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCAqaXRlciwgZGVzYykpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIGlzIHRydWUsIHNl
dCBkZXNjLltbQ29uZmlndXJhYmxlXV0gdG8gZmFsc2UuCiAgICAgICAgIGRlc2Muc2V0Q29uZmln
dXJhYmxlKGZhbHNlKTsKQEAgLTQxNyw3ICs0MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdENvbnN0CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewog
ICAgICAgICAvLyBhLiBMZXQgZGVzYyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIFAuCiAgICAgICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBkZXNjOwotICAgICAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgKml0ZXIsIGRlc2MpKQorICAg
ICAgICBpZiAoIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBk
ZXNjKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvLyBiLiBJZiBJc0RhdGFEZXNj
cmlwdG9yKGRlc2MpIGlzIHRydWUsIHRoZW4KICAgICAgICAgLy8gaS4gSWYgZGVzYy5bW1dyaXRh
YmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tXcml0YWJsZV1dIHRvIGZhbHNlLgpAQCAtNDY0LDEx
ICs0NjAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAg
IFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgp
OwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9w
ZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0
IGRlc2MgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50
ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLgotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVz
YzsKLSAgICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Q7CisgICAgICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBleGVjLCAqaXRlciwgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIGlzIHRydWUsIHRoZW4gcmV0
dXJuIGZhbHNlLgotICAgICAgICBpZiAoZGVzYy5jb25maWd1cmFibGUoKSkKKyAgICAgICAgaWYg
KHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApAQCAtNDk0LDEyICs0OTAsMTIgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIFByb3BlcnR5TmFtZUFycmF5
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVy
dHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBQLgotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAgICAgICAgaWYgKCFv
YmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4
ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIGlm
ICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVj
LCAqaXRlciwgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gYi4gSWYg
SXNEYXRhRGVzY3JpcHRvcihkZXNjKSBpcyB0cnVlIHRoZW4KICAgICAgICAgLy8gaS4gSWYgZGVz
Yy5bW1dyaXRhYmxlXV0gaXMgdHJ1ZSwgcmV0dXJuIGZhbHNlLiBjLiBJZiBkZXNjLltbQ29uZmln
dXJhYmxlXV0gaXMgdHJ1ZSwgdGhlbiByZXR1cm4gZmFsc2UuCi0gICAgICAgIGlmICgoZGVzYy5p
c0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzYy53cml0YWJsZSgpKSB8fCBkZXNjLmNvbmZpZ3VyYWJs
ZSgpKQorICAgICAgICBpZiAoKCFzbG90LmlzQWNjZXNzb3IoKSAmJiBzbG90LndyaXRhYmxlKCkp
IHx8IHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDAyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsMTEgKzgxLDYgQEAgYm9vbCBPYmplY3RQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdAog
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNOb25GaW5hbE9iamVjdD4oZXhlYywg
RXhlY1N0YXRlOjpvYmplY3RQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PE9iamVjdFByb3Rv
dHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIE9iamVjdFByb3Rv
dHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNO
b25GaW5hbE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpvYmplY3RQcm90b3R5cGVUYWJsZShleGVj
KSwganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZp
c2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwcml2YXRlOgogICAgICAgICBPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODgsOCArMTg4LDggQEAgYm9vbCBQcm9wZXJ0eURlc2NyaXB0b3I6OmVxdWFs
VG8oRXhlY1N0YQogICAgICAgICAhb3RoZXIubV9zZXR0ZXIgPT0gbV9zZXR0ZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gKCFtX3ZhbHVlIHx8IHNhbWVWYWx1ZShleGVjLCBv
dGhlci5tX3ZhbHVlLCBtX3ZhbHVlKSkKLSAgICAgICAgJiYgKCFtX2dldHRlciB8fCBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChleGVjLCBvdGhlci5tX2dldHRlciwgbV9nZXR0ZXIpKQotICAgICAgICAm
JiAoIW1fc2V0dGVyIHx8IEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIG90aGVyLm1fc2V0dGVy
LCBtX3NldHRlcikpCisgICAgICAgICYmICghbV9nZXR0ZXIgfHwgc2FtZVZhbHVlKGV4ZWMsIG90
aGVyLm1fZ2V0dGVyLCBtX2dldHRlcikpCisgICAgICAgICYmICghbV9zZXR0ZXIgfHwgc2FtZVZh
bHVlKGV4ZWMsIG90aGVyLm1fc2V0dGVyLCBtX3NldHRlcikpCiAgICAgICAgICYmIGF0dHJpYnV0
ZXNFcXVhbChvdGhlcik7CiB9CiAKQEAgLTIyMyw0ICsyMjMsMzAgQEAgdW5zaWduZWQgUHJvcGVy
dHlEZXNjcmlwdG9yOjphdHRyaWJ1dGVzTwogICAgIHJldHVybiAobV9hdHRyaWJ1dGVzICYgb3Zl
cnJpZGVNYXNrKSB8IChjdXJyZW50QXR0cmlidXRlcyAmIH5vdmVycmlkZU1hc2spOwogfQogCiti
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBzbG90LnNldEluR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKCk7CisgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2xvdC5pc0FjY2Vzc29yKCkpCisgICAgICAgIGRl
c2NyaXB0b3Iuc2V0QWNjZXNzb3JEZXNjcmlwdG9yKHNsb3QuZ2V0dGVyU2V0dGVyKCksIHNsb3Qu
YXR0cmlidXRlcygpKTsKKyAgICBlbHNlCisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QuYXR0cmlidXRlcygpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsK
KyAgICBzbG90LnNldEluR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCk7CisgICAgaWYgKCFvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNs
b3QuaXNBY2Nlc3NvcigpKQorICAgICAgICBkZXNjcmlwdG9yLnNldEFjY2Vzc29yRGVzY3JpcHRv
cihzbG90LmdldHRlclNldHRlcigpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CisgICAgZWxzZQorICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBHZXR0ZXJTZXR0ZXI7CisgICAgY2xhc3MgUHJv
cGVydHlOYW1lOwogCiAgICAgLy8gU2VlIEVTNS4xIDkuMTIKICAgICBib29sIHNhbWVWYWx1ZShF
eGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKQEAgLTQxLDYgKzQyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICAsIG1fc2VlbkF0dHJpYnV0ZXMoMCkKICAgICAgICAgewogICAg
ICAgICB9CisKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB3cml0YWJsZSgpIGNvbnN0
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGVudW1lcmFibGUoKSBjb25zdDsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb25maWd1cmFibGUoKSBjb25zdDsKQEAgLTgz
LDYgKzg1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRl
czsKICAgICAgICAgdW5zaWduZWQgbV9zZWVuQXR0cmlidXRlczsKICAgICB9OworCisgICAgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9w
ZXJ0eVNsb3QuaCIKIAorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKQEAgLTI5LDEzICszMCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogSlNWYWx1ZSBQcm9w
ZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKKyAgICBK
U09iamVjdCogZ2V0dGVyRnVuYyA9IG1fZGF0YS5hY2Nlc3Nvci5nZXR0ZXJTZXR0ZXItPmdldHRl
cigpOworICAgIGlmICghZ2V0dGVyRnVuYykKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKICAgICAvLyBQcmV2ZW50IGdldHRlciBmdW5jdGlvbnMgZnJvbSBvYnNlcnZpbmcgZXhlY3V0
aW9uIGlmIGFuIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpOwogCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBtX2RhdGEuZ2V0dGVyRnVuYy0+bWV0
aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEobV9kYXRhLmdldHRlckZ1bmMsIGNhbGxEYXRhKTsKLSAg
ICByZXR1cm4gY2FsbChleGVjLCBtX2RhdGEuZ2V0dGVyRnVuYywgY2FsbFR5cGUsIGNhbGxEYXRh
LCBtX3RoaXNWYWx1ZS5pc09iamVjdCgpID8gbV90aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
IDogbV90aGlzVmFsdWUsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldHRlckZ1bmMtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlckZ1bmMsIGNh
bGxEYXRhKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShtX2RhdGEu
YWNjZXNzb3IudGhpc1ZhbHVlKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXJGdW5jLCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZS5pc09iamVjdCgpID8gdGhpc1ZhbHVlLnRvVGhp
c09iamVjdChleGVjKSA6IHRoaXNWYWx1ZSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjEyICszMCwyNTEg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3Mg
SlNPYmplY3Q7Ci0KLSNkZWZpbmUgSlNDX1ZBTFVFX01BUktFUiAwCi0jZGVmaW5lIElOREVYX0dF
VFRFUl9NQVJLRVIgcmVpbnRlcnByZXRfY2FzdDxHZXRWYWx1ZUZ1bmM+KDIpCi0jZGVmaW5lIEdF
VFRFUl9GVU5DVElPTl9NQVJLRVIgcmVpbnRlcnByZXRfY2FzdDxHZXRWYWx1ZUZ1bmM+KDMpCi0K
LSAgICBjbGFzcyBQcm9wZXJ0eVNsb3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBDYWNo
ZWRQcm9wZXJ0eVR5cGUgewotICAgICAgICAgICAgVW5jYWNoZWFibGUsCi0gICAgICAgICAgICBH
ZXR0ZXIsCi0gICAgICAgICAgICBDdXN0b20sCi0gICAgICAgICAgICBWYWx1ZQotICAgICAgICB9
OwotCi0gICAgICAgIFByb3BlcnR5U2xvdCgpCi0gICAgICAgICAgICA6IG1fY2FjaGVkUHJvcGVy
dHlUeXBlKFVuY2FjaGVhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhckJhc2UoKTsK
LSAgICAgICAgICAgIGNsZWFyT2Zmc2V0KCk7Ci0gICAgICAgICAgICBjbGVhclZhbHVlKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBleHBsaWNpdCBQcm9wZXJ0eVNsb3QoY29uc3QgSlNWYWx1ZSBi
YXNlKQotICAgICAgICAgICAgOiBtX3Nsb3RCYXNlKGJhc2UpCi0gICAgICAgICAgICAsIG1fY2Fj
aGVkUHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVh
ck9mZnNldCgpOwotICAgICAgICAgICAgY2xlYXJWYWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdHlwZWRlZiBKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU1ZhbHVlIHNs
b3RCYXNlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICB0eXBlZGVmIEpTVmFsdWUgKCpHZXRJbmRl
eFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBzbG90QmFzZSwgdW5zaWduZWQpOwotCi0g
ICAgICAgIEpTVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9nZXRWYWx1ZSA9
PSBKU0NfVkFMVUVfTUFSS0VSKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAg
ICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gSU5ERVhfR0VUVEVSX01BUktFUikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbV9nZXRJbmRleFZhbHVlKGV4ZWMsIHNsb3RCYXNlKCksIGluZGV4KCkp
OwotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gR0VUVEVSX0ZVTkNUSU9OX01BUktFUikK
LSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZ2V0
VmFsdWUgPT0gSlNDX1ZBTFVFX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1
ZTsKLSAgICAgICAgICAgIGlmIChtX2dldFZhbHVlID09IElOREVYX0dFVFRFUl9NQVJLRVIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2V0SW5kZXhWYWx1ZShleGVjLCBtX3Nsb3RCYXNlLCBt
X2RhdGEuaW5kZXgpOwotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gR0VUVEVSX0ZVTkNU
SU9OX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ2Fj
aGVkUHJvcGVydHlUeXBlIGNhY2hlZFByb3BlcnR5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkUHJvcGVydHlUeXBlOyB9Ci0gICAgICAgIGJvb2wgaXNDYWNoZWFibGUoKSBjb25zdCB7IHJl
dHVybiBtX2NhY2hlZFByb3BlcnR5VHlwZSAhPSBVbmNhY2hlYWJsZTsgfQotICAgICAgICBib29s
IGlzQ2FjaGVhYmxlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFByb3BlcnR5VHlwZSA9
PSBWYWx1ZTsgfQotICAgICAgICBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNDYWNoZWFibGUoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKEpT
VmFsdWUgc2xvdEJhc2UsIEpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBjbGVhck9mZnNldCgpOwotICAgICAgICAgICAgbV9n
ZXRWYWx1ZSA9IEpTQ19WQUxVRV9NQVJLRVI7Ci0gICAgICAgICAgICBtX3Nsb3RCYXNlID0gc2xv
dEJhc2U7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHZvaWQgc2V0VmFsdWUoSlNWYWx1ZSBzbG90QmFzZSwgSlNWYWx1ZSB2YWx1ZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodmFs
dWUpOwotICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IEpTQ19WQUxVRV9NQVJLRVI7Ci0gICAgICAg
ICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWU7
Ci0gICAgICAgICAgICBtX29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgIG1fY2FjaGVkUHJv
cGVydHlUeXBlID0gVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKEpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAg
ICAgICAgICBjbGVhckJhc2UoKTsKLSAgICAgICAgICAgIGNsZWFyT2Zmc2V0KCk7Ci0gICAgICAg
ICAgICBtX2dldFZhbHVlID0gSlNDX1ZBTFVFX01BUktFUjsKLSAgICAgICAgICAgIG1fdmFsdWUg
PSB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0Q3VzdG9tKEpTVmFsdWUgc2xv
dEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKHNsb3RCYXNlKTsKLSAgICAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7Ci0gICAgICAgICAg
ICBtX2dldFZhbHVlID0gZ2V0VmFsdWU7Ci0gICAgICAgICAgICBtX2dldEluZGV4VmFsdWUgPSAw
OwotICAgICAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHNldENhY2hlYWJsZUN1c3RvbShKU1ZhbHVlIHNsb3RCYXNlLCBHZXRW
YWx1ZUZ1bmMgZ2V0VmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzbG90QmFz
ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOwotICAgICAgICAgICAgbV9nZXRWYWx1
ZSA9IGdldFZhbHVlOwotICAgICAgICAgICAgbV9nZXRJbmRleFZhbHVlID0gMDsKLSAgICAgICAg
ICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAgICAgICAgIG1fY2FjaGVkUHJvcGVydHlU
eXBlID0gQ3VzdG9tOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRDdXN0b21JbmRleChK
U1ZhbHVlIHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCwgR2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5k
ZXhWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKLSAgICAg
ICAgICAgIEFTU0VSVChnZXRJbmRleFZhbHVlKTsKLSAgICAgICAgICAgIG1fZ2V0VmFsdWUgPSBJ
TkRFWF9HRVRURVJfTUFSS0VSOwotICAgICAgICAgICAgbV9nZXRJbmRleFZhbHVlID0gZ2V0SW5k
ZXhWYWx1ZTsKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAgICAgICAg
IG1fZGF0YS5pbmRleCA9IGluZGV4OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRHZXR0
ZXJTbG90KEpTT2JqZWN0KiBnZXR0ZXJGdW5jKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAgICBtX3RoaXNWYWx1ZSA9IG1fc2xvdEJhc2U7Ci0g
ICAgICAgICAgICBtX2dldFZhbHVlID0gR0VUVEVSX0ZVTkNUSU9OX01BUktFUjsKLSAgICAgICAg
ICAgIG1fZGF0YS5nZXR0ZXJGdW5jID0gZ2V0dGVyRnVuYzsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdChKU1ZhbHVlIHNsb3RCYXNlLCBKU09iamVjdCog
Z2V0dGVyRnVuYywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gR0VUVEVSX0ZV
TkNUSU9OX01BUktFUjsKLSAgICAgICAgICAgIG1fdGhpc1ZhbHVlID0gbV9zbG90QmFzZTsKLSAg
ICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAgICAgICAgIG1fZGF0YS5nZXR0
ZXJGdW5jID0gZ2V0dGVyRnVuYzsKLSAgICAgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0OwotICAg
ICAgICAgICAgbV9jYWNoZWRQcm9wZXJ0eVR5cGUgPSBHZXR0ZXI7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHNldFVuZGVmaW5lZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldFZhbHVl
KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNWYWx1ZSBzbG90QmFzZSgp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3Nsb3RCYXNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCYXNlKEpTVmFsdWUgYmFzZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKG1fc2xvdEJhc2UpOwotICAgICAgICAgICAgQVNTRVJUKGJhc2UpOwot
ICAgICAgICAgICAgbV9zbG90QmFzZSA9IGJhc2U7Ci0gICAgICAgIH0KKy8vIEVDTUEgMjYyLTMg
OC42LjEKKy8vIFByb3BlcnR5IGF0dHJpYnV0ZXMKK2VudW0gQXR0cmlidXRlIHsKKyAgICBOb25l
ICAgICAgID0gMCwKKyAgICBSZWFkT25seSAgID0gMSA8PCAxLCAvLyBwcm9wZXJ0eSBjYW4gYmUg
b25seSByZWFkLCBub3Qgd3JpdHRlbgorICAgIERvbnRFbnVtICAgPSAxIDw8IDIsIC8vIHByb3Bl
cnR5IGRvZXNuJ3QgYXBwZWFyIGluIChmb3IgLi4gaW4gLi4pCisgICAgRG9udERlbGV0ZSA9IDEg
PDwgMywgLy8gcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRlZAorICAgIEZ1bmN0aW9uICAgPSAxIDw8
IDQsIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0
YWJsZXMKKyAgICBBY2Nlc3NvciAgID0gMSA8PCA1LCAvLyBwcm9wZXJ0eSBpcyBhIGdldHRlci9z
ZXR0ZXIKK307CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEdldHRlclNldHRlcjsKK2NsYXNz
IEpTT2JqZWN0OworCitjbGFzcyBQcm9wZXJ0eVNsb3QgeworcHVibGljOgorICAgIGVudW0gQ2Fj
aGVkUHJvcGVydHlUeXBlIHsKKyAgICAgICAgVW5jYWNoZWFibGUsCisgICAgICAgIEdldHRlciwK
KyAgICAgICAgQ3VzdG9tLAorICAgICAgICBDdXN0b21JbmRleCwKKyAgICAgICAgVmFsdWUKKyAg
ICB9OwogCi0gICAgICAgIHZvaWQgY2xlYXJCYXNlKCkKLSAgICAgICAgewotI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBKU1ZhbHVlKCk7Ci0jZW5kaWYKLSAgICAgICAg
fQorICAgIFByb3BlcnR5U2xvdCgpCisgICAgICAgIDogbV9wcm9wZXJ0eVR5cGUoVW5jYWNoZWFi
bGUpCisgICAgICAgICwgbV9jYWNoZWFibGUoZmFsc2UpCisgICAgICAgICwgbV9pbkdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihmYWxzZSkKKyAgICB7CisgICAgICAgIGNsZWFyQmFzZSgpOworICAg
ICAgICBjbGVhck9mZnNldCgpOworICAgIH0KKworICAgIGV4cGxpY2l0IFByb3BlcnR5U2xvdChj
b25zdCBKU1ZhbHVlIGJhc2UpCisgICAgICAgIDogbV9zbG90QmFzZShiYXNlKQorICAgICAgICAs
IG1fcHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQorICAgICAgICAsIG1fY2FjaGVhYmxlKGZhbHNl
KQorICAgICAgICAsIG1faW5HZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZmFsc2UpCisgICAgewor
ICAgICAgICBjbGVhck9mZnNldCgpOworICAgIH0KKworICAgIHR5cGVkZWYgSlNWYWx1ZSAoKkdl
dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lKTsK
KyAgICB0eXBlZGVmIEpTVmFsdWUgKCpHZXRJbmRleFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNW
YWx1ZSBzbG90QmFzZSwgdW5zaWduZWQpOworCisgICAgSlNWYWx1ZSBnZXRWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZGVjb2RlKG1fZGF0YS52YWx1ZSk7CisgICAgICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBD
dXN0b21JbmRleCkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY3VzdG9tSW5kZXguZ2V0SW5k
ZXhWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBtX2RhdGEuY3VzdG9tSW5kZXguaW5kZXgpOworICAg
ICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uR2V0dGVyKGV4ZWMpOworICAgICAgICByZXR1cm4gbV9kYXRhLmN1c3RvbS5nZXRWYWx1
ZShleGVjLCBzbG90QmFzZSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKworICAgIEpTVmFsdWUg
Z2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fZGF0YS52YWx1ZSk7CisgICAgICAgIGlmIChtX3Byb3Bl
cnR5VHlwZSA9PSBDdXN0b21JbmRleCkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY3VzdG9t
SW5kZXguZ2V0SW5kZXhWYWx1ZShleGVjLCBtX3Nsb3RCYXNlLCBtX2RhdGEuY3VzdG9tSW5kZXgu
aW5kZXgpOworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gR2V0dGVyKQorICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGV4ZWMpOworICAgICAgICByZXR1cm4gbV9kYXRhLmN1
c3RvbS5nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHBy
b3BlcnR5TmFtZSkpOworICAgIH0KKworICAgIENhY2hlZFByb3BlcnR5VHlwZSBjYWNoZWRQcm9w
ZXJ0eVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlYWJsZSA/IG1fcHJvcGVydHlUeXBlIDog
VW5jYWNoZWFibGU7IH0KKyAgICBib29sIGlzQ2FjaGVhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWFibGU7IH0KKyAgICBib29sIGlzQ2FjaGVhYmxlVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlYWJsZSAmJiBtX3Byb3BlcnR5VHlwZSA9PSBWYWx1ZTsgfQorICAgIFByb3BlcnR5T2Zm
c2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNDYWNoZWFi
bGUoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisKKyAgICB2b2lkIHNldFZh
bHVlV2l0aEJhc2UoSlNWYWx1ZSBzbG90QmFzZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgICAgIGNsZWFyT2Zm
c2V0KCk7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKKyAgICAgICAgbV9kYXRhLnZh
bHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBW
YWx1ZTsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVz
ID0gYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRWYWx1ZVdpdGhQcm9wZXJ0
eU9mZnNldChKU1ZhbHVlIHNsb3RCYXNlLCBKU1ZhbHVlIHZhbHVlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUp
OworICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CisgICAgICAgIG1fZGF0YS52YWx1ZSA9
IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICBtX3Byb3BlcnR5VHlwZSA9IFZhbHVlOworICAgICAgICBtX2NhY2hlYWJsZSA9IHRydWU7
CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgfQorCisgICAgdm9pZCBz
ZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICBjbGVhckJhc2UoKTsKKyAg
ICAgICAgY2xlYXJPZmZzZXQoKTsKKyAgICAgICAgbV9kYXRhLnZhbHVlID0gSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKTsKKyAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBWYWx1ZTsKKyAgICAgICAgbV9j
YWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAg
ICB9CisKKyAgICB2b2lkIHNldEN1c3RvbShKU1ZhbHVlIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMg
Z2V0VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoc2xv
dEJhc2UpOworICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOworICAgICAgICBtX2RhdGEuY3VzdG9t
LmdldFZhbHVlID0gZ2V0VmFsdWU7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKKyAg
ICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBDdXN0b207CisgICAgICAgIG1fY2FjaGVhYmxlID0gZmFs
c2U7CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0Q2FjaGVhYmxlQ3VzdG9tKEpTVmFsdWUgc2xvdEJhc2UsIEdldFZhbHVlRnVuYyBn
ZXRWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChzbG90
QmFzZSk7CisgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7CisgICAgICAgIG1fZGF0YS5jdXN0b20u
Z2V0VmFsdWUgPSBnZXRWYWx1ZTsKKyAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOworICAg
ICAgICBtX3Byb3BlcnR5VHlwZSA9IEN1c3RvbTsKKyAgICAgICAgbV9jYWNoZWFibGUgPSB0cnVl
OworICAgICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIH0KKworICAgIHZvaWQg
c2V0Q3VzdG9tSW5kZXgoSlNWYWx1ZSBzbG90QmFzZSwgdW5zaWduZWQgaW5kZXgsIEdldEluZGV4
VmFsdWVGdW5jIGdldEluZGV4VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAg
ICAgICBBU1NFUlQoc2xvdEJhc2UpOworICAgICAgICBBU1NFUlQoZ2V0SW5kZXhWYWx1ZSk7Cisg
ICAgICAgIG1fZGF0YS5jdXN0b21JbmRleC5nZXRJbmRleFZhbHVlID0gZ2V0SW5kZXhWYWx1ZTsK
KyAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOworICAgICAgICBtX2RhdGEuY3VzdG9tSW5k
ZXguaW5kZXggPSBpbmRleDsKKyAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBDdXN0b21JbmRleDsK
KyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0
cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldEFjY2Vzc29yU2xvdChHZXR0ZXJTZXR0ZXIq
IGdldHRlclNldHRlciwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VS
VChnZXR0ZXJTZXR0ZXIpOworICAgICAgICBtX2RhdGEuYWNjZXNzb3IudGhpc1ZhbHVlID0gSlNW
YWx1ZTo6ZW5jb2RlKG1fc2xvdEJhc2UpOworICAgICAgICBtX2RhdGEuYWNjZXNzb3IuZ2V0dGVy
U2V0dGVyID0gZ2V0dGVyU2V0dGVyOworICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IEdldHRlcjsK
KyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0
cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldENhY2hlYWJsZUFjY2Vzc29yU2xvdChKU1Zh
bHVlIHNsb3RCYXNlLCBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGdldHRl
clNldHRlcik7CisgICAgICAgIG1fZGF0YS5hY2Nlc3Nvci50aGlzVmFsdWUgPSBKU1ZhbHVlOjpl
bmNvZGUobV9zbG90QmFzZSk7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKKyAgICAg
ICAgbV9kYXRhLmFjY2Vzc29yLmdldHRlclNldHRlciA9IGdldHRlclNldHRlcjsKKyAgICAgICAg
bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIG1fcHJvcGVydHlUeXBlID0gR2V0dGVyOworICAg
ICAgICBtX2NhY2hlYWJsZSA9IHRydWU7CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CisgICAgfQorCisgICAgdm9pZCBzZXRVbmRlZmluZWQoKQorICAgIHsKKyAgICAgICAgc2V0
VmFsdWVXaXRoQXR0cmlidXRlcyhqc1VuZGVmaW5lZCgpLCBOb25lKTsKKyAgICB9CisKKyAgICBK
U1ZhbHVlIHNsb3RCYXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Nsb3RCYXNl
OworICAgIH0KKworICAgIHZvaWQgc2V0QmFzZShKU1ZhbHVlIGJhc2UpCisgICAgeworICAgICAg
ICBBU1NFUlQobV9zbG90QmFzZSk7CisgICAgICAgIEFTU0VSVChiYXNlKTsKKyAgICAgICAgbV9z
bG90QmFzZSA9IGJhc2U7CisgICAgfQogCi0gICAgICAgIHZvaWQgY2xlYXJWYWx1ZSgpCi0gICAg
ICAgIHsKKyAgICB2b2lkIGNsZWFyQmFzZSgpCisgICAgewogI2lmbmRlZiBOREVCVUcKLSAgICAg
ICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CisgICAgICAgIG1fc2xvdEJhc2UgPSBKU1ZhbHVl
KCk7CiAjZW5kaWYKLSAgICAgICAgfQorICAgIH0KIAotICAgICAgICB2b2lkIGNsZWFyT2Zmc2V0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2xlYXIgb2Zmc2V0IGV2ZW4gaW4gcmVsZWFz
ZSBidWlsZHMsIGluIGNhc2UgdGhpcyBQcm9wZXJ0eVNsb3QgaGFzIGJlZW4gdXNlZCBiZWZvcmUu
Ci0gICAgICAgICAgICAvLyAoRm9yIG90aGVyIGRhdGEgbWVtYmVycywgd2UgZG9uJ3QgbmVlZCB0
byBjbGVhciBhbnl0aGluZyBiZWNhdXNlIHJldXNlIHdvdWxkIG1lYW5pbmdmdWxseSBvdmVyd3Jp
dGUgdGhlbS4pCi0gICAgICAgICAgICBtX29mZnNldCA9IGludmFsaWRPZmZzZXQ7Ci0gICAgICAg
ICAgICBtX2NhY2hlZFByb3BlcnR5VHlwZSA9IFVuY2FjaGVhYmxlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaW5kZXg7IH0KLQot
ICAgICAgICBHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVyKCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKG1fY2FjaGVkUHJvcGVydHlUeXBlID09IEN1c3RvbSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9nZXRWYWx1ZTsKLSAgICAgICAgfQotICAgIHByaXZhdGU6Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKikgY29u
c3Q7Ci0KLSAgICAgICAgR2V0VmFsdWVGdW5jIG1fZ2V0VmFsdWU7Ci0gICAgICAgIEdldEluZGV4
VmFsdWVGdW5jIG1fZ2V0SW5kZXhWYWx1ZTsKLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgbV9z
bG90QmFzZTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgSlNPYmplY3QqIGdldHRlckZ1
bmM7CisgICAgdm9pZCBjbGVhck9mZnNldCgpCisgICAgeworICAgICAgICAvLyBDbGVhciBvZmZz
ZXQgZXZlbiBpbiByZWxlYXNlIGJ1aWxkcywgaW4gY2FzZSB0aGlzIFByb3BlcnR5U2xvdCBoYXMg
YmVlbiB1c2VkIGJlZm9yZS4KKyAgICAgICAgLy8gKEZvciBvdGhlciBkYXRhIG1lbWJlcnMsIHdl
IGRvbid0IG5lZWQgdG8gY2xlYXIgYW55dGhpbmcgYmVjYXVzZSByZXVzZSB3b3VsZCBtZWFuaW5n
ZnVsbHkgb3ZlcndyaXRlIHRoZW0uKQorICAgICAgICBtX29mZnNldCA9IGludmFsaWRPZmZzZXQ7
CisgICAgICAgIG1fcHJvcGVydHlUeXBlID0gVW5jYWNoZWFibGU7CisgICAgICAgIG1fY2FjaGVh
YmxlID0gZmFsc2U7CisgICAgfQorCisgICAgR2V0VmFsdWVGdW5jIGN1c3RvbUdldHRlcigpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9jYWNoZWFibGUgJiYgbV9wcm9wZXJ0eVR5cGUg
PT0gQ3VzdG9tKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5jdXN0b20uZ2V0VmFsdWU7CisgICAg
fQorCisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
czsgfQorICAgIGJvb2wgd3JpdGFibGUoKSBjb25zdCB7IHJldHVybiAhKG1fYXR0cmlidXRlcyAm
IFJlYWRPbmx5KTsgfQorICAgIGJvb2wgZW51bWVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEobV9h
dHRyaWJ1dGVzICYgRG9udEVudW0pOyB9CisgICAgYm9vbCBjb25maWd1cmFibGUoKSBjb25zdCB7
IHJldHVybiAhKG1fYXR0cmlidXRlcyAmIERvbnREZWxldGUpOyB9CisKKyAgICBib29sIGlzQWNj
ZXNzb3IoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5VHlwZSA9PSBHZXR0ZXI7IH0KKyAgICBH
ZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNBY2Nlc3NvcigpKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5hY2Nlc3Nvci5nZXR0ZXJTZXR0
ZXI7CisgICAgfQorCisgICAgdm9pZCBzZXRJbkdldE93blByb3BlcnR5RGVzY3JpcHRvcigpIHsg
bV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHRydWU7IH0KKyAgICBib29sIGluR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pbkdldE93blByb3BlcnR5RGVz
Y3JpcHRvcjsgfQorCitwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZnVu
Y3Rpb25HZXR0ZXIoRXhlY1N0YXRlKikgY29uc3Q7CisKKyAgICBKU1ZhbHVlIG1fc2xvdEJhc2U7
CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR2V0dGVyU2V0dGVy
KiBnZXR0ZXJTZXR0ZXI7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWU7Cisg
ICAgICAgIH0gYWNjZXNzb3I7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBHZXRWYWx1
ZUZ1bmMgZ2V0VmFsdWU7CisgICAgICAgIH0gY3VzdG9tOworICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgR2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5kZXhWYWx1ZTsKICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4OwotICAgICAgICB9IG1fZGF0YTsKLQotICAgICAgICBKU1ZhbHVlIG1fdmFs
dWU7Ci0gICAgICAgIEpTVmFsdWUgbV90aGlzVmFsdWU7Ci0KLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgbV9vZmZzZXQ7Ci0gICAgICAgIENhY2hlZFByb3BlcnR5VHlwZSBtX2NhY2hlZFByb3BlcnR5
VHlwZTsKLSAgICB9OworICAgICAgICB9IGN1c3RvbUluZGV4OworICAgICAgICBFbmNvZGVkSlNW
YWx1ZSB2YWx1ZTsKKyAgICB9IG1fZGF0YTsKKworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OworICAgIENhY2hlZFByb3BlcnR5VHlwZSBtX3Byb3BlcnR5VHlwZTsKKyAgICB1aW50OF90IG1f
YXR0cmlidXRlczsKKyAgICBib29sIG1fY2FjaGVhYmxlOworICAgIGJvb2wgbV9pbkdldE93blBy
b3BlcnR5RGVzY3JpcHRvcjsKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxMSArMTU4LDYgQEAgYm9v
bCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiBnZXRTdGF0
aWNWYWx1ZVNsb3Q8UmVnRXhwQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4
ZWNTdGF0ZTo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZShleGVjKSwganNDYXN0PFJlZ0V4cENvbnN0
cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgUmVnRXhwQ29u
c3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPFJl
Z0V4cENvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4
cENvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+KG9iamVj
dCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIEpTVmFsdWUgcmVnRXhwQ29uc3Ry
dWN0b3JEb2xsYXIxKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlO
YW1lKQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3RCYXNlKS0+Z2V0QmFj
a3JlZihleGVjLCAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtODQsMTMgKzg0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4ob2JqZWN0KTsKLSAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5KGV4ZWMpOwotICAgICAgICAgICAgcmV0
dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAgICB9Ci0KICAgICAgICAgc3RhdGljIHZv
aWQgcHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHYsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKICAgICAgICAgewogICAg
ICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJlZ0V4cE1h
dGNoZXNBcnJheSo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Mywy
MiArOTMsMTIgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKUwogewog
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCkg
ewogICAgICAgICBSZWdFeHBPYmplY3QqIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGNlbGwpOwot
ICAgICAgICBzbG90LnNldFZhbHVlKHJlZ0V4cCwgcmVnRXhwLT5nZXRMYXN0SW5kZXgoKSk7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQmFzZShyZWdFeHAsIHJlZ0V4cC0+Z2V0TGFzdEluZGV4
KCksIHJlZ0V4cC0+bV9sYXN0SW5kZXhJc1dyaXRhYmxlID8gRG9udERlbGV0ZSB8IERvbnRFbnVt
IDogRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxSZWdFeHBPYmplY3QsIEpT
T2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhw
T2JqZWN0Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgUmVnRXhwT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCi17Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGFzdEluZGV4KSB7Ci0gICAgICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwID0gYXNSZWdFeHBP
YmplY3Qob2JqZWN0KTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHJlZ0V4cC0+
Z2V0TGFzdEluZGV4KCksIHJlZ0V4cC0+bV9sYXN0SW5kZXhJc1dyaXRhYmxlID8gRG9udERlbGV0
ZSB8IERvbnRFbnVtIDogRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRv
cjxSZWdFeHBPYmplY3QsIEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4
ZWMpLCBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKTsKLX0KLQogYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lv
biAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSlNWYWx1ZSBleGVjKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRp
YyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3MCw2IEBAIGJvb2wgUmVnRXhwUHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90
PFJlZ0V4cE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpyZWdFeHBQcm90b3R5cGVUYWJsZShleGVj
KSwganNDYXN0PFJlZ0V4cFByb3RvdHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCi1ib29sIFJlZ0V4cFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNG
dW5jdGlvbkRlc2NyaXB0b3I8UmVnRXhwT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFBy
b3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhwUHJvdG90eXBlKj4ob2JqZWN0KSwgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDE0MDI5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTcgKzEyOCwxMSBAQCB2b2lkIFNwYXJzZUFycmF5RW50
cnk6OmdldChQcm9wZXJ0eVNsb3QmCiAgICAgQVNTRVJUKHZhbHVlKTsKIAogICAgIGlmIChMSUtF
TFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodmFs
dWUpOworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFz
R2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7Ci0gICAgaWYgKCFnZXR0ZXIpIHsKLSAgICAg
ICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNs
b3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworICAgIHNsb3Quc2V0QWNjZXNzb3JTbG90KGFzR2V0
dGVyU2V0dGVyKHZhbHVlKSwgYXR0cmlidXRlcyk7CiB9CiAKIHZvaWQgU3BhcnNlQXJyYXlFbnRy
eTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTEgKzY1LDYgQEAgYm9vbCBT
dHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiBnZXRTdGF0aWNG
dW5jdGlvblNsb3Q8SW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgRXhlY1N0YXRlOjpzdHJpbmdDb25z
dHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3RyaW5nQ29uc3RydWN0b3IqPihjZWxsKSwgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewot
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SW50ZXJuYWxGdW5jdGlvbj4o
ZXhlYywgRXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3Ry
aW5nQ29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQot
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSBzdHJp
bmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwog
CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3Bw
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNCArNjAsNiBAQCBib29sIFN0cmlu
Z09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAotYm9vbCBTdHJpbmdPYmplY3Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAg
ICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0
KTsKLSAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5nZXRTdHJpbmdQcm9wZXJ0
eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7ICAgIAotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZv
aWQgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVj
dC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MywxMSArMTUzLDYgQEAgYm9vbCBT
dHJpbmdQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNG
dW5jdGlvblNsb3Q8U3RyaW5nT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnN0cmluZ1RhYmxlKGV4
ZWMpLCBqc0Nhc3Q8U3RyaW5nUHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKLWJvb2wgU3RyaW5nUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRp
Y0Z1bmN0aW9uRGVzY3JpcHRvcjxTdHJpbmdPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6c3RyaW5n
VGFibGUoZXhlYyksIGpzQ2FzdDxTdHJpbmdQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
RnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEhlbHBlciBmb3IgcHJv
ZHVjaW5nIGEgSlNTdHJpbmcgZm9yICdzdHJpbmcnLCB3aGVyZSAnc3RyaW5nJyB3YXMgYmVlbiBw
cm9kdWNlZCBieQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDggKzI0OSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKLSAgICAgICAgUHJvcGVydHlPZmZzZXQg
Z2V0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IGdldChKU0dsb2JhbERhdGEmLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkKiBh
dHRyaWJ1dGVzID0gMCk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEm
LCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgdW5zaWduZWQqIGF0dHJpYnV0ZXMgPSAwKTsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYs
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFs
dWUpOwogCiAgICAgICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllczsgfQpAQCAtNDc5LDcgKzQ3OSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbmV3U3RydWN0dXJlOwogICAgIH0KICAg
ICAgICAgCi0gICAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKKyAgICBpbmxpbmUg
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCogYXR0cmlidXRlcykKICAgICB7CiAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAg
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKQEAgLTQ4
NywxMCArNDg3LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGludmFs
aWRPZmZzZXQ7CiAKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBtX3Byb3BlcnR5
VGFibGUtPmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKLSAgICAgICAgcmV0dXJuIGVu
dHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7CisgICAgICAgIGlmICghZW50cnkp
CisgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKKyAgICAgICAgaWYgKGF0dHJpYnV0
ZXMpCisgICAgICAgICAgICAqYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOworICAgICAg
ICByZXR1cm4gZW50cnktPm9mZnNldDsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSkKKyAgICBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgdW5zaWduZWQq
IGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5m
bygpID09ICZzX2luZm8pOwogICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nh
cnkoZ2xvYmFsRGF0YSk7CkBAIC00OTgsNyArNTAyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKICAgICAgICAgUHJvcGVydHlNYXBFbnRy
eSogZW50cnkgPSBtX3Byb3BlcnR5VGFibGUtPmZpbmRXaXRoU3RyaW5nKG5hbWUuaW1wbCgpKS5m
aXJzdDsKLSAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZz
ZXQ7CisgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMpCisgICAgICAgICAgICAqYXR0cmlidXRlcyA9IGVu
dHJ5LT5hdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gZW50cnktPm9mZnNldDsKICAgICB9CiAg
ICAgCiAgICAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjptYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTQwMzAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTMtMDEtMjAgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQyMAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMg
cHJhY3RpY2FsbHkgcmVkdW5kYW50IHdpdGggZ2V0T3duUHJvcGVydHlTbG90LgorICAgICAgICAg
ICAgLSByZW1vdmUgYWxsIGltcGxlbWVudGF0aW9ucyBvZiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IuCisgICAgICAgICAgICAtIHBhc3MgYXR0cmlidXRlcyB0byBnZXRPd25Qcm9wZXJ0eVNsb3Qu
CisgICAgICAgICAgICAtIHJlbmFtZWQgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNj
cmlwdG9yLCByZW1vdmVkCisgICAgICAgICAgICAgICdBbmREZXNjcmlwdG9yJy4KKyAgICAgICAg
ICAgIC0gYWRkZWQgYSB3b3JrYXJvdW5kIHRvIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNs
b3QsCisgICAgICAgICAgICAgIGdldE93blByb3BlcnR5U2xvdCBkb2VzIG5vdCBiZWhhdmUgY29y
cmVjdGx5IHdydCAnb3duJ25lc3MsCisgICAgICAgICAgICAgIHJldHVybnMgcHJvcGVydGllcyBp
biB0aGUgcHJvdG90eXBlIGNoYWluLiBNYWludGFpbiBwcmV2aW91cworICAgICAgICAgICAgICBi
ZWhhdmlvdXIgZm9yIGdldE93blByb3BlcnR5RGVzY3JpcHRvci4KKworICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246OmdldE93
blByb3BlcnR5U2xvdERlbGVnYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlT
bG90RGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpnZXRP
d25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJD
b3JlOjpydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keSk6Cisg
ICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9u
KToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJhdGlvbik6CisgICAgICAgIChH
ZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLnR4dDoKKyAgICAgICAgKiBicmlkZ2UvanNjL0JyaWRnZUpTQy5o
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OmdldE93blByb3BlcnR5U2xvdCk6
CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgIChPYmpjRmFs
bGJhY2tPYmplY3RJbXApOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbToK
KyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6
CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKFJ1
bnRpbWVBcnJheSk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAg
ICAgKEpTQzo6UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmg6CisgICAgICAgIChSdW50aW1l
TWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEJpbmRpbmdzKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKyAgICAg
ICAgKFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmlk
bDoKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1s
L0hUTUxFbWJlZEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQu
aWRsOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5pZGw6CisgICAgICAgICogcGFnZS9Mb2NhdGlv
bi5pZGw6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAxMy0wMS0y
MCAgTWlrZSBMYXd0aGVyICA8bWlrZWxhd3RoZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENT
UzMgY2FsYzogdW5wcmVmaXggaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29y
a2luZyBjb3B5KQpAQCAtMjQ3OSw3ICsyNDc5LDYgQEAgX19aTjdXZWJDb3JlNFBhZ2UxOHNldFZp
c2liaWxpdHlTdGF0ZUVOUwogX19aTjNKU0MxM1J1bnRpbWVNZXRob2QxMWdldENhbGxEYXRhRVBO
U182SlNDZWxsRVJOU184Q2FsbERhdGFFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDE0ZmluaXNo
Q3JlYXRpb25FUk5TXzEySlNHbG9iYWxEYXRhRVJLTjNXVEY2U3RyaW5nRQogX19aTjNKU0MxM1J1
bnRpbWVNZXRob2QxOGdldE93blByb3BlcnR5U2xvdEVQTlNfNkpTQ2VsbEVQTlNfOUV4ZWNTdGF0
ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzEzUnVudGlt
ZU1ldGhvZDI0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRVBOU184SlNPYmplY3RFUE5TXzlFeGVj
U3RhdGVFTlNfMTJQcm9wZXJ0eU5hbWVFUk5TXzE4UHJvcGVydHlEZXNjcmlwdG9yRQogX19aTjNK
U0MxM1J1bnRpbWVNZXRob2Q2c19pbmZvRQogX19aTjNKU0MxM1J1bnRpbWVNZXRob2RDMkVQTlNf
MTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUVQTlNfOEJpbmRpbmdzNk1ldGhvZEUKIF9f
Wk4zSlNDOEJpbmRpbmdzMTBSb290T2JqZWN0RDFFdgpAQCAtMjQ5MCw3ICsyNDg5LDYgQEAgX19a
TjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3QxNGZpbmlzaAogX19aTjNKU0M4QmluZGluZ3Mx
M1J1bnRpbWVPYmplY3QxNmdldENvbnN0cnVjdERhdGFFUE5TXzZKU0NlbGxFUk5TXzEzQ29uc3Ry
dWN0RGF0YUUKIF9fWk4zSlNDOEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0MThnZXRPd25Qcm9wZXJ0
eVNsb3RFUE5TXzZKU0NlbGxFUE5TXzlFeGVjU3RhdGVFTlNfMTJQcm9wZXJ0eU5hbWVFUk5TXzEy
UHJvcGVydHlTbG90RQogX19aTjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3QxOWdldE93blBy
b3BlcnR5TmFtZXNFUE5TXzhKU09iamVjdEVQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5h
bWVBcnJheUVOU18xNUVudW1lcmF0aW9uTW9kZUUKLV9fWk4zSlNDOEJpbmRpbmdzMTNSdW50aW1l
T2JqZWN0MjRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JFUE5TXzhKU09iamVjdEVQTlNfOUV4ZWNT
dGF0ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMThQcm9wZXJ0eURlc2NyaXB0b3JFCiBfX1pOM0pT
QzhCaW5kaW5nczEzUnVudGltZU9iamVjdDNwdXRFUE5TXzZKU0NlbGxFUE5TXzlFeGVjU3RhdGVF
TlNfMTJQcm9wZXJ0eU5hbWVFTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQogX19a
TjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3Q2c19pbmZvRQogX19aTjNKU0M4QmluZGluZ3Mx
M1J1bnRpbWVPYmplY3Q3ZGVzdHJveUVQTlNfNkpTQ2VsbEUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDI0ICsz
MjgsOSBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3duUHJvcGVyCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChwcm9wZXJ0eUluZm8uaGFkUGl4ZWxPclBvc1ByZWZp
eCkKLSAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocHJvcGVydHlJbmZvLnByb3BlcnR5SUQpLCBjc3NQcm9wZXJ0eUdldHRlclBpeGVsT3JQb3NQ
cmVmaXhDYWxsYmFjayk7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKSwgY3NzUHJvcGVydHlHZXR0
ZXJQaXhlbE9yUG9zUHJlZml4Q2FsbGJhY2ssIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRF
bnVtKTsKICAgICBlbHNlCi0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKSwgY3NzUHJvcGVydHlHZXR0
ZXJDYWxsYmFjayk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSlNDU1NTdHlsZURlY2xh
cmF0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlJZGVudGlmaWVyLCBKU0M6OlByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBDU1NQcm9wZXJ0eUluZm8gcHJvcGVydHlJ
bmZvID0gY3NzUHJvcGVydHlJREZvckpTQ1NTUHJvcGVydHlOYW1lKHByb3BlcnR5SWRlbnRpZmll
cik7Ci0gICAgaWYgKCFwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICBpZiAocHJvcGVydHlJbmZvLmhhZFBpeGVs
T3JQb3NQcmVmaXgpCi0gICAgICAgIHZhbHVlID0gY3NzUHJvcGVydHlHZXR0ZXJQaXhlbE9yUG9z
UHJlZml4KGV4ZWMsIHRoaXMsIHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKTsKLSAgICBlbHNlCi0g
ICAgICAgIHZhbHVlID0gY3NzUHJvcGVydHlHZXR0ZXIoZXhlYywgdGhpcywgcHJvcGVydHlJbmZv
LnByb3BlcnR5SUQpOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4
KHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCksIGNz
c1Byb3BlcnR5R2V0dGVyQ2FsbGJhY2ssIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDAsMTIgKzE0MCwxMiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDCiAgICAgICAgIC8vIEl0IGlnbm9yZXMgYW55IGN1c3RvbSBwcm9wZXJ0aWVzIHRo
YXQgbWlnaHQgYmUgc2V0IG9uIHRoZSBET01XaW5kb3cgKGluY2x1ZGluZyBhIGN1c3RvbSBwcm90
b3R5cGUpLgogICAgICAgICBlbnRyeSA9IHNfaW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRy
eShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoZW50cnkgJiYgIShlbnRyeS0+YXR0
cmlidXRlcygpICYgSlNDOjpGdW5jdGlvbikgJiYgZW50cnktPnByb3BlcnR5R2V0dGVyKCkgPT0g
anNET01XaW5kb3dDbG9zZWQpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmpl
Y3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXNPYmplY3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICBlbnRyeSA9IEpTRE9NV2luZG93UHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShl
eGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGVudHJ5ICYmIChl
bnRyeS0+YXR0cmlidXRlcygpICYgSlNDOjpGdW5jdGlvbikgJiYgZW50cnktPmZ1bmN0aW9uKCkg
PT0ganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlKSB7Ci0gICAgICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNE
T01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlLCAwPik7CisgICAgICAgICAgICBzbG90LnNl
dEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01X
aW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlLCAwPiwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwg
RG9udEVudW0pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtMTc1
LDIyICsxNzUsMjIgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwog
ICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pIHsKICAgICAg
ICAgICAgIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0
aW9uQmx1cikgewogICAgICAgICAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNG
dW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQmx1ciwgMD4pOworICAg
ICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3Rh
dGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkJsdXIsIDA+LCBl
bnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24o
KSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIWFsbG93c0FjY2VzcykgewotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQ
cm90b3R5cGVGdW5jdGlvbkNsb3NlLCAwPik7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcjxqc0RPTVdp
bmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UsIDA+LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlw
ZUZ1bmN0aW9uRm9jdXMpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2Vzcykgewot
ICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5n
U3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkZvY3VzLCAw
Pik7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNh
Y2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uRm9j
dXMsIDA+LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+
ZnVuY3Rpb24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UpIHsK
ICAgICAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgewotICAgICAgICAgICAgICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0
ZXI8anNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlLCAyPik7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNG
dW5jdGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UsIDI+
LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rp
b24oKSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uU2hvd01vZGFsRGlhbG9nKSB7CkBA
IC0yMDQsNyArMjA0LDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpT
QwogICAgICAgICAvLyBBbGxvdyBhY2Nlc3MgdG8gdG9TdHJpbmcoKSBjcm9zcy1kb21haW4sIGJ1
dCBhbHdheXMgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy4KICAgICAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcpIHsKICAgICAgICAgICAgIGlm
ICghYWxsb3dzQWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09i
amVjdCwgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlciwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBK
U0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwogCiAgICAgZW50cnkgPSBKU0RPTVdp
bmRvdzo6c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgaWYgKGVudHJ5KSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3Qs
IGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09i
amVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIyMiw3ICsyMjIsNyBAQCBib29sIEpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgLy8gYXJlIGluIE1veiBidXQgbm90
IElFLiBTaW5jZSB3ZSBoYXZlIHNvbWUgb2YgdGhlc2UsIHdlIGhhdmUgdG8gZG8KICAgICAvLyBp
dCB0aGUgTW96IHdheS4KICAgICBpZiAodGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpLT50cmVl
KCktPnNjb3BlZENoaWxkKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkp
KSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNoaWxkRnJhbWVHZXR0ZXIp
OworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtMjMwLDcgKzIzMCwxMiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDCiAgICAgLy8gcHJlY2VkZW5jZSBvdmVyIHRoZSBpbmRleCBhbmQgbmFtZSBn
ZXR0ZXJzLiAgCiAgICAgSlNWYWx1ZSBwcm90byA9IHRoaXNPYmplY3QtPnByb3RvdHlwZSgpOwog
ICAgIGlmIChwcm90by5pc09iamVjdCgpKSB7Ci0gICAgICAgIGlmIChhc09iamVjdChwcm90bykt
PmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CisgICAgICAgIC8v
IFdvcmthcm91bmQgdG8ga2VlcCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Igd29ya2luZzsgcmV0
dXJuIGZhbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgcmVhbGx5ICdvd24nLgorICAgICAgICBp
ZiAoc2xvdC5pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICBQcm9w
ZXJ0eVNsb3QgcHJvdG9TbG90OworICAgICAgICAgICAgaWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgcHJvdG9TbG90KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoYXNPYmplY3QocHJvdG8pLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewogICAgICAgICAgICAg
aWYgKCFhbGxvd3NBY2Nlc3MpIHsKICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wcmludEVy
cm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZp
bmVkKCk7CkBAIC0yNDYsNyArMjUxLDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQwogICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwogICAg
IGlmIChpIDwgdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxk
Q291bnQoKSkgewogICAgICAgICBBU1NFUlQoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
OwotICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGksIGluZGV4R2V0dGVy
KTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpLCBpbmRleEdldHRl
ciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKQEAgLTI2MSw3ICsyNjYsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDCiAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAg
ICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9taWNT
dHJpbmcocHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiAo
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0oYXRvbWlj
UHJvcGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQcm9wZXJ0
eU5hbWUpKSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZWRJ
dGVtR2V0dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVk
SXRlbUdldHRlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOTksNyArMzA0LDcgQEAgYm9v
bCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIC8vIGFyZSBpbiBNb3og
YnV0IG5vdCBJRS4gU2luY2Ugd2UgaGF2ZSBzb21lIG9mIHRoZXNlLCB3ZSBoYXZlIHRvIGRvCiAg
ICAgLy8gaXQgdGhlIE1veiB3YXkuCiAgICAgaWYgKHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUo
KS0+dHJlZSgpLT5zY29wZWRDaGlsZChwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0
eU5hbWUpKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjaGlsZEZyYW1l
R2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgY2hpbGRGcmFtZUdl
dHRlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCkBAIC0zMDcsNyArMzEyLDEyIEBAIGJvb2wgSlNET01XaW5kb3c6
OmdldE93blByb3BlcnR5U2xvdEJ5SW4KICAgICAvLyBwcmVjZWRlbmNlIG92ZXIgdGhlIGluZGV4
IGFuZCBuYW1lIGdldHRlcnMuICAKICAgICBKU1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+cHJv
dG90eXBlKCk7CiAgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKGFzT2Jq
ZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkgeworICAgICAg
ICAvLyBXb3JrYXJvdW5kIHRvIGtlZXAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHdvcmtpbmc7
IHJldHVybiBmYWxzZSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IHJlYWxseSAnb3duJy4KKyAgICAg
ICAgaWYgKHNsb3QuaW5HZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAg
UHJvcGVydHlTbG90IHByb3RvU2xvdDsKKyAgICAgICAgICAgIGlmIChhc09iamVjdChwcm90bykt
PmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHByb3RvU2xvdCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGFzT2JqZWN0KHByb3Rv
KS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkgewogICAgICAgICAgICAgaWYg
KCFhbGxvd3NBY2Nlc3MpIHsKICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wcmludEVycm9y
TWVzc2FnZShlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVk
KCk7CkBAIC0zMjIsNyArMzMyLDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbgogICAgIC8vIGFsbG93IHdpbmRvd1sxXSBvciBwYXJlbnRbMV0gZXRjLiAoIzU2OTgz
KQogICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5z
Y29wZWRDaGlsZENvdW50KCkpIHsKICAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwg
aW5kZXgsIGluZGV4R2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2Jq
ZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zMzcsNyArMzQ3LDcgQEAgYm9v
bCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIGlmIChkb2N1bWVudC0+
aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9taWNQcm9w
ZXJ0eU5hbWUgPSBmaW5kQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmIChh
dG9taWNQcm9wZXJ0eU5hbWUgJiYgKHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvY3VtZW50
KS0+aGFzTmFtZWRJdGVtKGF0b21pY1Byb3BlcnR5TmFtZSkgfHwgZG9jdW1lbnQtPmhhc0VsZW1l
bnRXaXRoSWQoYXRvbWljUHJvcGVydHlOYW1lKSkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXNPYmplY3QsIG5hbWVkSXRlbUdldHRlcik7CisgICAgICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCBuYW1lZEl0ZW1HZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8
IERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpA
QCAtMzQ1LDc5ICszNTUsNiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgaW5kZXgsIHNsb3QpOwogfQogCi1ib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0g
ICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3Qp
OwotICAgIC8vIE5ldmVyIGFsbG93IGNyb3NzLWRvbWFpbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBjb25zdCBIYXNoRW50cnkqIGVudHJ5OwotICAgIAotICAgIC8vIFdlIGRvbid0IHdhbnQgYW55
IHByb3BlcnRpZXMgb3RoZXIgdGhhbiAiY2xvc2UiIGFuZCAiY2xvc2VkIiBvbiBhIGNsb3NlZCB3
aW5kb3cuCi0gICAgaWYgKCF0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCkpIHsKLSAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHNhZmUgZm9yIGNyb3NzLWRvbWFpbiBhbmQgc2FtZSBk
b21haW4gdXNlLgotICAgICAgICAvLyBJdCBpZ25vcmVzIGFueSBjdXN0b20gcHJvcGVydGllcyB0
aGF0IG1pZ2h0IGJlIHNldCBvbiB0aGUgRE9NV2luZG93IChpbmNsdWRpbmcgYSBjdXN0b20gcHJv
dG90eXBlKS4KLSAgICAgICAgZW50cnkgPSBzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50
cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKGVudHJ5ICYmICEoZW50cnktPmF0
dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pICYmIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpID09
IGpzRE9NV2luZG93Q2xvc2VkKSB7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoanNCb29sZWFuKHRydWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbnRyeSA9IEpTRE9N
V2luZG93UHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKGVudHJ5ICYmIChlbnRyeS0+YXR0cmlidXRlcygp
ICYgSlNDOjpGdW5jdGlvbikgJiYgZW50cnktPmZ1bmN0aW9uKCkgPT0ganNET01XaW5kb3dQcm90
b3R5cGVGdW5jdGlvbkNsb3NlKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5vbkNhY2hpbmdTdGF0aWNGdW5j
dGlvbkdldHRlcjxqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UsIDA+KTsKLSAgICAg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0VW5kZWZpbmVk
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGVudHJ5ID0gSlNET01XaW5k
b3c6OnNfaW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUp
OwotICAgIGlmIChlbnRyeSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAg
c2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpOwotICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIAotICAgIC8vIENoZWNrIGZvciBjaGlsZCBmcmFtZXMgYnkgbmFtZSBiZWZvcmUgYnVp
bHQtaW4gcHJvcGVydGllcyB0bwotICAgIC8vIG1hdGNoIE1vemlsbGEuIFRoaXMgZG9lcyBub3Qg
bWF0Y2ggSUUsIGJ1dCBzb21lIHNpdGVzIGVuZCB1cAotICAgIC8vIG5hbWluZyBmcmFtZXMgdGhp
bmdzIHRoYXQgY29uZmxpY3Qgd2l0aCB3aW5kb3cgcHJvcGVydGllcyB0aGF0Ci0gICAgLy8gYXJl
IGluIE1veiBidXQgbm90IElFLiBTaW5jZSB3ZSBoYXZlIHNvbWUgb2YgdGhlc2UsIHdlIGhhdmUg
dG8gZG8KLSAgICAvLyBpdCB0aGUgTW96IHdheS4KLSAgICBpZiAodGhpc09iamVjdC0+aW1wbCgp
LT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5n
KHByb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyKTsKLSAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0g
ICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hp
bGRDb3VudCgpKSB7Ci0gICAgICAgIEFTU0VSVChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbUlu
ZGV4KHRoaXNPYmplY3QsIGksIGluZGV4R2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBBbGxvdyBzaG9ydGN1dHMgbGlrZSAnSW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50Lmlt
YWdlcy5JbWFnZTEKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkt
PmZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgp
KSB7Ci0gICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRB
dG9taWNTdHJpbmcocHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFt
ZSAmJiAoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0o
YXRvbWljUHJvcGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQ
cm9wZXJ0eU5hbWUpKSkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lZEl0ZW1HZXR0ZXIpOwotICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOwotfQotCiB2b2lkIEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RPTVdpbmRvdyo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1l
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsNiBAQCBib29sIEpTSFRN
TEFwcGxldEVsZW1lbnQ6OmdldE93blByb3BlcnR5CiAgICAgcmV0dXJuIHBsdWdpbkVsZW1lbnRD
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3Q8SlNIVE1MQXBwbGV0RWxlbWVudCwgQmFzZT4oZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90LCB0aGlzKTsKIH0KIAotYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsK
LSAgICByZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5RGVzY3JpcHRvcjxK
U0hUTUxBcHBsZXRFbGVtZW50LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHRoaXMpOwotfQotCiBib29sIEpTSFRNTEFwcGxldEVsZW1lbnQ6OnB1dERlbGVnYXRlKEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tUHV0
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHRoaXMsIHNsb3QpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsNiBA
QCBib29sIEpTSFRNTEVtYmVkRWxlbWVudDo6Z2V0T3duUHJvcGVydHlTCiAgICAgcmV0dXJuIHBs
dWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3Q8SlNIVE1MRW1iZWRFbGVtZW50LCBC
YXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQogCi1ib29sIEpTSFRNTEVt
YmVkRWxlbWVudDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgcmV0dXJuIHBsdWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3I8SlNIVE1MRW1iZWRFbGVtZW50LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHRoaXMpOwotfQotCiBib29sIEpTSFRNTEVtYmVkRWxlbWVudDo6cHV0RGVsZWdh
dGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RD
dXN0b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgdGhpcywgc2xvdCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDExICszOCw2IEBAIGJvb2wgSlNIVE1MT2JqZWN0RWxlbWVudDo6Z2V0T3duUHJvcGVydHkKICAg
ICByZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdDxKU0hUTUxPYmpl
Y3RFbGVtZW50LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQogCi1i
b29sIEpTSFRNTE9iamVjdEVsZW1lbnQ6OmdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRl
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yPEpTSFRNTE9iamVjdEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhpcyk7Ci19Ci0KIGJvb2wgSlNIVE1MT2JqZWN0RWxl
bWVudDo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJu
IHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgdGhpcywg
c2xvdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDIwICs3MCwyMCBAQCBi
b29sIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhCiAgICAgICAgIC8vIEFsbG93
IGFjY2VzcyB0byBiYWNrKCksIGZvcndhcmQoKSBhbmQgZ28oKSBmcm9tIGFueSBmcmFtZS4KICAg
ICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSB7CiAgICAgICAg
ICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25C
YWNrKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0
YXRpY0JhY2tGdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpcywgbm9uQ2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0
ZXMoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uRm9yd2Fy
ZCkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0
aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIsIGVudHJ5LT5hdHRy
aWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkdv
KSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRp
Y0dvRnVuY3Rpb25HZXR0ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMs
IG5vbkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyLCBlbnRyeS0+YXR0cmlidXRlcygpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEFsbG93IGFjY2VzcyB0byB0b1N0cmluZygpIGNyb3Nz
LWRvbWFpbiwgYnV0IGFsd2F5cyBPYmplY3QudG9TdHJpbmcuCiAgICAgICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nKSB7Ci0gICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKTsKKyAgICAg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIs
IGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CkBAIC05Myw1MSArOTMsNiBAQCBib29sIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVy
dHlTbG90RGVsZWdhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNIaXN0b3J5OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBp
ZiAoIWltcGwoKS0+ZnJhbWUoKSkgewotICAgICAgICBkZXNjcmlwdG9yLnNldFVuZGVmaW5lZCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBUaHJvdyBvdXQgYWxsIGNy
b3NzIGRvbWFpbiBhY2Nlc3MKLSAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShleGVj
LCBpbXBsKCktPmZyYW1lKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENoZWNr
IGZvciB0aGUgZmV3IGZ1bmN0aW9ucyB0aGF0IHdlIGFsbG93LCBldmVuIHdoZW4gY2FsbGVkIGNy
b3NzLWRvbWFpbi4KLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gSlNIaXN0b3J5UHJvdG90
eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAg
IC8vIEFsbG93IGFjY2VzcyB0byBiYWNrKCksIGZvcndhcmQoKSBhbmQgZ28oKSBmcm9tIGFueSBm
cmFtZS4KLSAgICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSB7
Ci0gICAgICAgICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNIaXN0b3J5UHJvdG90eXBl
RnVuY3Rpb25CYWNrKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9u
Q2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgZW50
cnktPmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1
bmN0aW9uRm9yd2FyZCkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5v
bkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIpOwotICAgICAgICAgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSks
IGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0hpc3RvcnlQcm90b3R5
cGVGdW5jdGlvbkdvKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9u
Q2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25HZXR0ZXIpOwotICAgICAgICAgICAgICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5
LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQWxsb3cgYWNjZXNzIHRv
IHRvU3RyaW5nKCkgY3Jvc3MtZG9tYWluLCBidXQgYWx3YXlzIE9iamVjdC50b1N0cmluZy4KLSAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcp
IHsKLSAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICAgICAgc2xvdC5zZXRD
dXN0b20odGhpcywgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUp
LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBKU0hpc3Rvcnk6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQogewogICAgIC8vIE9ubHkg
YWxsb3cgcHV0dGluZyBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9u
IDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMyArNjYsMTMgQEAgYm9vbCBKU0xvY2F0aW9uOjpn
ZXRPd25Qcm9wZXJ0eVNsb3REZWxlZwogICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0xv
Y2F0aW9uUHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywg
cHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkgJiYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBK
U0M6OkZ1bmN0aW9uKSkgewogICAgICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNMb2Nh
dGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcik7CisgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9u
R2V0dGVyLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzTG9jYXRpb25Qcm90b3R5
cGVGdW5jdGlvblJlbG9hZCkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9u
Q2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlciwgZW50cnkt
PmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNl
IGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3Np
Z24pIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNB
c3NpZ25GdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBu
b25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIsIGVudHJ5LT5hdHRyaWJ1dGVzKCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC04Niw0NSAr
ODYsNiBAQCBib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdERlbGVnCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgp
LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXRVbmRl
ZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIC8vIHRocm93
IG91dCBhbGwgY3Jvc3MgZG9tYWluIGFjY2VzcwotICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NU
b0ZyYW1lKGV4ZWMsIGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8g
Q2hlY2sgZm9yIHRoZSBmZXcgZnVuY3Rpb25zIHRoYXQgd2UgYWxsb3csIGV2ZW4gd2hlbiBjYWxs
ZWQgY3Jvc3MtZG9tYWluLgotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0xvY2F0aW9u
UHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVy
dHlOYW1lKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBpZiAoZW50cnkgJiYgKGVudHJ5
LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSkgewotICAgICAgICBpZiAoZW50cnktPmZ1
bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSkgewotICAgICAg
ICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlv
bkdldHRlcik7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRW
YWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09
IGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCkgewotICAgICAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKTsKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHBy
b3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblBy
b3RvdHlwZUZ1bmN0aW9uQXNzaWduKSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
LCBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIpOwotICAgICAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwg
ZW50cnktPmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogT3RoZXIgaW1wbGVtZW50ZXJzIG9mIHRoZSBX
aW5kb3cgY3Jvc3MtZG9tYWluIHNjaGVtZSAoV2luZG93LCBIaXN0b3J5KSBhbGxvdyB0b1N0cmlu
ZywKLSAgICAvLyBidXQgZm9yIG5vdyB3ZSBoYXZlIGRlY2lkZWQgbm90IHRvLCBwYXJ0bHkgYmVj
YXVzZSBpdCBzZWVtcyBzaWxseSB0byByZXR1cm4gIltPYmplY3QgTG9jYXRpb25dIiBpbgotICAg
IC8vIHN1Y2ggY2FzZXMgd2hlbiBub3JtYWxseSB0aGUgc3RyaW5nIGZvcm0gb2YgTG9jYXRpb24g
d291bGQgYmUgdGhlIFVSTC4KLQotICAgIGRlc2NyaXB0b3Iuc2V0VW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgSlNMb2NhdGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVs
ZW1lbnRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTgsNyArMTE4LDEwIEBAIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5
U2wKIAogICAgIGlmICghc2NyaXB0T2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5h
bWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc2xvdC5zZXRDdXN0b20oZWxlbWVudCwg
cnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKTsKKyAgICAvLyBXaGlsZSB3ZSBkb24ndCBrbm93
IHdoYXQgdGhlIHBsdWdpbiBhbGxvd3MsIHdlIGRvIGtub3cgdGhhdCB3ZSBwcmV2ZW50CisgICAg
Ly8gZW51bWVyYXRpb24gb3IgZGVsZXRpb24gb2YgcHJvcGVydGllcywgc28gd2UgbWFyayBwbHVn
aW4gcHJvcGVydGllcworICAgIC8vIGFzIERvbnRFbnVtIHwgRG9udERlbGV0ZQorICAgIHNsb3Qu
c2V0Q3VzdG9tKGVsZW1lbnQsIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlciwgRG9udEVudW0g
fCBEb250RGVsZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTMwLDcgKzEzMyw3IEBA
IGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5RGUKICAgICBpZiAoIXNjcmlw
dE9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIHNsb3Quc2V0Q3VzdG9tKGVsZW1l
bnQsIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcik7CisgICAgc2xvdC5zZXRDdXN0b20oZWxl
bWVudCwgcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyLCBEb250RW51bSB8IERvbnREZWxldGUp
OwogICAgIC8vIFdoaWxlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGx1Z2luIGFsbG93cywgd2Ug
ZG8ga25vdyB0aGF0IHdlIHByZXZlbnQKICAgICAvLyBlbnVtZXJhdGlvbiBvciBkZWxldGlvbiBv
ZiBwcm9wZXJ0aWVzLCBzbyB3ZSBtYXJrIHBsdWdpbiBwcm9wZXJ0aWVzCiAgICAgLy8gYXMgRG9u
dEVudW0gfCBEb250RGVsZXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bs
dWdpbkVsZW1lbnRGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaAkocmV2aXNpb24gMTQwMjk3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDIwICs1OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90LCBlbGVtZW50KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHlwZSwgY2xhc3MgQmFzZT4gYm9vbCBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBUeXBlKiBlbGVtZW50
KQotICAgIHsKLSAgICAgICAgaWYgKCFlbGVtZW50LT5nbG9iYWxPYmplY3QoKS0+d29ybGQoKS0+
aXNOb3JtYWwoKSkgewotICAgICAgICAgICAgaWYgKEpTQzo6Z2V0U3RhdGljVmFsdWVEZXNjcmlw
dG9yPFR5cGUsIEJhc2U+KGV4ZWMsIGVsZW1lbnQtPnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxl
LCBlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgICAgICBKU0M6OkpTVmFsdWUgcHJvdG8gPSBlbGVtZW50LT5w
cm90b3R5cGUoKTsKLSAgICAgICAgICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIEpTQzo6anND
YXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChwcm90bykpLT5oYXNQcm9wZXJ0eShleGVjLCBw
cm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZWxlbWVudCk7Ci0gICAgfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBKU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnNfaApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NywxNCArNzcsNiBAQCBib29sIEpTV29ya2VyQ29udGV4dDo6Z2V0T3duUHJvcGVydHlTbG90CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTV29ya2VyQ29udGV4dDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgLy8gTG9vayBm
b3Igb3ZlcnJpZGVzIGJlZm9yZSBsb29raW5nIGF0IGFueSBvZiBvdXIgb3duIHByb3BlcnRpZXMu
Ci0gICAgaWYgKEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6ZXZlbnRTb3Vy
Y2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU0V2ZW50U291cmNlQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlz
aW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDcgQEAgc3ViIEdlbmVyYXRl
R2V0T3duUHJvcGVydHlTbG90Qm9keQogICAgICAgICBpZiAoJHJlcXVpcmVzTWFudWFsTG9va3Vw
KSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGNvbnN0
ICR7bmFtZXNwYWNlTWF5YmV9SGFzaEVudHJ5KiBlbnRyeSA9IGdldFN0YXRpY1ZhbHVlU2xvdEVu
dHJ5V2l0aG91dENhY2hpbmc8JGNsYXNzTmFtZT4oZXhlYywgcHJvcGVydHlOYW1lKTtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAoZW50cnkp
IHtcbiIpOwotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAg
ICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSwgZW50cnkt
PmF0dHJpYnV0ZXMoKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xv
dEltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBnZXRP
d25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIH1cbiIpOwogICAgICAgICB9CkBAIC00MjIsMTAgKzQy
MiwxNiBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmIChp
bmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgaW5kZXggPCBzdGF0aWNfY2FzdDwk
aW50ZXJmYWNlTmFtZSo+KHRoaXNPYmplY3QtPmltcGwoKSktPmxlbmd0aCgpKSB7XG4iKTsKICAg
ICAgICAgfQorICAgICAgICAjIEFzc3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBzZXR0ZXIsIHRoZSBp
bmRleCB3aWxsIGJlIHdyaXRhYmxlCisgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CisgICAgICAgICAgICBwdXNoKEBn
ZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICB1bnNpZ25lZCBzbG90QXR0cmlidXRlcyA9
ICR7bmFtZXNwYWNlTWF5YmV9RG9udERlbGV0ZTtcbiIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgdW5zaWduZWQg
c2xvdEF0dHJpYnV0ZXMgPSAke25hbWVzcGFjZU1heWJlfURvbnREZWxldGUgfCAke25hbWVzcGFj
ZU1heWJlfVJlYWRPbmx5O1xuIik7CisgICAgICAgIH0KICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9KSB7Ci0gICAgICAg
ICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldFZhbHVl
KHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhB
dHRyaWJ1dGVzKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBzbG90QXR0cmli
dXRlcyk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGdldE93blBy
b3BlcnR5U2xvdEltcGwsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwg
aW5kZXgsIGluZGV4R2V0dGVyKTtcbiIpOworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRl
eCwgaW5kZXhHZXR0ZXIsIHNsb3RBdHRyaWJ1dGVzKTtcbiIpOwogICAgICAgICB9CiAgICAgICAg
IHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7
CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgfVxuIik7CkBAIC00
MzMsNyArNDM5LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQogCiAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CiAg
ICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKGNhbkdldEl0ZW1z
Rm9yTmFtZShleGVjLCBzdGF0aWNfY2FzdDwkaW50ZXJmYWNlTmFtZSo+KHRoaXNPYmplY3QtPmlt
cGwoKSksIHByb3BlcnR5TmFtZSkpIHtcbiIpOwotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0
eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5uYW1lR2V0dGVyKTtcbiIpOworICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBs
LCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5uYW1lR2V0
dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7XG4iKTsKICAgICAgICAgcHVz
aChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAg
ICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICB9XG4iKTsKICAgICAgICAg
aWYgKCRpbmxpbmVkKSB7CkBAIC00NDcsNyArNDUzLDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJv
cGVydHlTbG90Qm9keQogICAgICAgICAmJG1hbnVhbExvb2t1cEdldHRlckdlbmVyYXRpb24oKTsK
ICAgICB9CiAKLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3Vz
dG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9KSB7CisgICAgaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9KSB7
CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKHRoaXNPYmpl
Y3QtPmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkp
XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0
dXJuIHRydWU7XG4iKTsKICAgICB9CkBAIC00NjYsMTA3ICs0NzIsNiBAQCBzdWIgR2VuZXJhdGVH
ZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgcmV0dXJuIEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBs
OwogfQogCi1zdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5Ci17Ci0gICAg
bXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkaGFzQXR0cmlidXRl
cywgJGlubGluZWQpID0gQF87Ci0gICAgCi0gICAgbXkgJG5hbWVzcGFjZU1heWJlID0gKCRpbmxp
bmVkID8gIkpTQzo6IiA6ICIiKTsKLSAgICAKLSAgICBteSBAZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9ySW1wbCA9ICgpOwotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q2hlY2tTZWN1cml0eSJ9KSB7Ci0gICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgewotICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siQmluZGluZ1NlY3VyaXR5LmgifSA9
IDE7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCBqc0Nhc3Q8JGNsYXNzTmFt
ZSo+KHRoaXNPYmplY3QpLT5pbXBsKCkpKVxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFt
ZShleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCkpKVxuIik7Ci0gICAgICAgIH0KLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwotICAg
IH0KLSAgICAKLSAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIk5hbWVkTm9kZU1hcCIgb3IgJGlu
dGVyZmFjZU5hbWUgPX4gL15IVE1MXHcqQ29sbGVjdGlvbiQvKSB7Ci0gICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgJHtuYW1lc3BhY2VNYXliZX1KU1ZhbHVl
IHByb3RvID0gdGhpc09iamVjdC0+cHJvdG90eXBlKCk7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBq
c0Nhc3Q8JHtuYW1lc3BhY2VNYXliZX1KU09iamVjdCo+KGFzT2JqZWN0KHByb3RvKSktPmhhc1By
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpXG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4iKTsKLSAgICB9
Ci0gICAgCi0gICAgbXkgJG1hbnVhbExvb2t1cEdldHRlckdlbmVyYXRpb24gPSBzdWIgewotICAg
ICAgICBteSAkcmVxdWlyZXNNYW51YWxMb29rdXAgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJOYW1lZEdldHRlciJ9OwotICAgICAgICBpZiAoJHJlcXVpcmVzTWFudWFsTG9va3VwKSB7
Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIGNv
bnN0ICR7bmFtZXNwYWNlTWF5YmV9SGFzaEVudHJ5KiBlbnRyeSA9ICR7Y2xhc3NOYW1lfVRhYmxl
LmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdldE93
blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKGVudHJ5KSB7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVy
dHlHZXR0ZXIoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3Jp
cHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVl
KGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpO1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICByZXR1cm4g
dHJ1ZTtcbiIpOwotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1w
bCwgIiAgICB9XG4iKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAoISRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7Ci0gICAgICAgICYk
bWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOwotICAgIH0KLQotICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9KSB7Ci0gICAgICAg
IHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3Bl
cnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCAmJiBpbmRleCA8IHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+
aW1wbCgpKS0+bGVuZ3RoKCkpIHtcbiIpOwotICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKLSAgICAgICAgICAgICMg
QXNzdW1lIHRoYXQgaWYgdGhlcmUncyBhIHNldHRlciwgdGhlIGluZGV4IHdpbGwgYmUgd3JpdGFi
bGUKLSAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tSW5kZXhlZFNldHRlciJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNP
YmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCAke25hbWVzcGFjZU1heWJlfURvbnREZWxl
dGUpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcih0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSwgJHtuYW1lc3BhY2VNYXli
ZX1Eb250RGVsZXRlIHwgJHtuYW1lc3BhY2VNYXliZX1SZWFkT25seSk7XG4iKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
RGVzY3JpcHRvckltcGwsICIgICAgICAgICR7bmFtZXNwYWNlTWF5YmV9UHJvcGVydHlTbG90IHNs
b3Q7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGws
ICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIGluZGV4R2V0
dGVyKTtcbiIpOwotICAgICAgICAgICAgIyBBc3N1bWUgdGhhdCBpZiB0aGVyZSdzIGEgc2V0dGVy
LCB0aGUgaW5kZXggd2lsbCBiZSB3cml0YWJsZQotICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCAk
e25hbWVzcGFjZU1heWJlfURvbnREZWxldGUpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5
TmFtZSksICR7bmFtZXNwYWNlTWF5YmV9RG9udERlbGV0ZSB8ICR7bmFtZXNwYWNlTWF5YmV9UmVh
ZE9ubHkpO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKLSAg
ICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICB9XG4iKTsKLSAg
ICB9Ci0KLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0
dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0
dGVyIn0pIHsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1l
Kj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVydHlOYW1lKSkge1xuIik7Ci0gICAgICAgIHB1
c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgICR7bmFtZXNwYWNlTWF5
YmV9UHJvcGVydHlTbG90IHNsb3Q7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZUdl
dHRlcik7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwg
IiAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJv
cGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pO1xuIik7Ci0gICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHJldHVybiB0
cnVlO1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIg
ICAgfVxuIik7Ci0gICAgICAgIGlmICgkaW5saW5lZCkgewotICAgICAgICAgICAgJGhlYWRlcklu
Y2x1ZGVzeyJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCJ9ID0gMTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0gPSAx
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7Ci0gICAgICAgICYkbWFudWFsTG9va3VwR2V0
dGVyR2VuZXJhdGlvbigpOwotICAgIH0KLQotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0pIHsK
LSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBpZiAodGhp
c09iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKSlcbiIpOwotICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JJbXBsLCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwotICAgIH0KLQotICAgIGlmICgk
aGFzQXR0cmlidXRlcykgewotICAgICAgICBpZiAoJGlubGluZWQpIHsKLSAgICAgICAgICAgIGRp
ZSAiQ2Fubm90IGlubGluZSBpZiBOb1N0YXRpY1RhYmxlcyBpcyBzZXQuIiBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSk7Ci0gICAgICAgICAg
ICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIHJldHVybiAke25hbWVz
cGFjZU1heWJlfWdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjwkY2xhc3NOYW1lLCBCYXNlPihleGVj
LCBzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICByZXR1cm4gJHtuYW1lc3BhY2VNYXliZX1n
ZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8JGNsYXNzTmFtZSwgQmFzZT4oZXhlYywgIiAuIGhhc2hU
YWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGlj
VGFibGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTtcbiIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
XG4iKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJ
bXBsOwotfQotCiBzdWIgR2VuZXJhdGVIZWFkZXJDb250ZW50SGVhZGVyCiB7CiAgICAgbXkgJGlu
dGVyZmFjZSA9IHNoaWZ0OwpAQCAtNzkwLDcgKzY5NSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgog
ICAgIG15ICRoYXNDb21wbGV4R2V0dGVyID0KICAgICAgICAgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0ZXIifQogICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifQotICAgICAgICB8fCAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RB
bmREZXNjcmlwdG9yIn0KKyAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0KICAgICAgICAgfHwgJGhhc0ltcHVyZU5h
bWVkR2V0dGVyOwogICAgIAogICAgIG15ICRoYXNHZXR0ZXIgPSAkbnVtQXR0cmlidXRlcyA+IDAg
fHwgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifSB8
fCAkaGFzQ29tcGxleEdldHRlcjsKQEAgLTgwMiwxMCArNzA3LDggQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgIyBHZXR0ZXJzCiAgICAgaWYgKCRoYXNHZXR0ZXIpIHsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIikgaWYgKCRoYXNDb21wbGV4R2V0dGVy
KTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGdldE93blByb3BlcnR5
U2xvdERlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlND
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn07Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0
T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9OworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9Owog
ICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
In0gPSAxOwogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyJ9ID0gMTsKICAgICB9CkBA
IC0xMDI3LDEyICs5MzAsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZz
X2luZm8pO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlR2V0T3du
UHJvcGVydHlTbG90Qm9keSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwg
JG51bUF0dHJpYnV0ZXMgPiAwLCAxKSk7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9
XG5cbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiQUxXQVlTX0lOTElORSBib29s
ICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqIG9i
amVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXG4iKTsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PCR7Y2xhc3NOYW1lfSo+
KG9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yQm9keSgk
aW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAw
LCAxKSk7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIAog
ICAgIGlmICghJGhhc1BhcmVudCB8fApAQCAtMTEwMCw3ICs5OTcsNiBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87XG4iKTsKICAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDAgfHwgJG51bUNv
bnN0YW50cyA+IDApIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QifSA9IDE7CiAgICAgfQogICAgIGlmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21NYXJrRnVuY3Rpb24ifSBvciAk
bmVlZHNNYXJrQ2hpbGRyZW4pIHsKQEAgLTE2MTgsMjEgKzE1MTQsNiBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
IGdldFN0YXRpY1Byb3BlcnR5U2xvdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUsIEpTT2JqZWN0Pihl
eGVjLCAiIC4gcHJvdG90eXBlSGFzaFRhYmxlQWNjZXNzb3IoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSwgJGNsYXNzTmFtZSkgLiAiLCB0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOwotCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9v
bCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFt
ZX1Qcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlKj4o
b2JqZWN0KTtcbiIpOwotCi0gICAgICAgIGlmICgkbnVtQ29uc3RhbnRzIGVxIDAgJiYgJG51bUZ1
bmN0aW9ucyBlcSAwKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsgICAgICAgIAotICAgICAgICB9IGVsc2lmICgkbnVt
Q29uc3RhbnRzIGVxIDApIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+KGV4ZWMsICIgLiBwcm90
b3R5cGVIYXNoVGFibGVBY2Nlc3NvcigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNOb1N0YXRpY1RhYmxlcyJ9LCAkY2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICAgICAgfSBlbHNpZiAoJG51bUZ1bmN0aW9ucyBl
cSAwKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0U3Rh
dGljVmFsdWVEZXNjcmlwdG9yPCR7Y2xhc3NOYW1lfVByb3RvdHlwZSwgSlNPYmplY3Q+KGV4ZWMs
ICIgLiBwcm90b3R5cGVIYXNoVGFibGVBY2Nlc3NvcigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAkY2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3Qs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eURl
c2NyaXB0b3I8JHtjbGFzc05hbWV9UHJvdG90eXBlLCBKU09iamVjdD4oZXhlYywgIiAuIHByb3Rv
dHlwZUhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJK
U05vU3RhdGljVGFibGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKICAgICB9CiAKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZSJ9KSB7CkBAIC0xNzQ5LDcg
KzE2MzAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICB8
fCAhJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9IAog
ICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5k
ZXhlZEdldHRlciJ9CiAgICAgICAgICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xv
dEFuZERlc2NyaXB0b3IifQorICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifQogICAgICAgICAgICAg
ICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90In0KICAgICAgICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0KICAgICAgICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn07CkBAIC0xNzYzLDE3ICsx
NjQ0LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZz
X2luZm8pO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVHZXRP
d25Qcm9wZXJ0eVNsb3RCb2R5KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1l
LCAkbnVtQXR0cmlidXRlcyA+IDAsIDApKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNz
TmFtZX06OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcilcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09i
amVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJh
dGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1l
LCAkY2xhc3NOYW1lLCAkbnVtQXR0cmlidXRlcyA+IDAsIDApKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9CiAgICAgICAgICAg
ICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0g
fHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0K
LSAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlND
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0pIHsKKyAgICAgICAgICAgICAg
ICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9w
ZXJ0eVNsb3QifSkgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y2xh
c3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFt
ZX0qPihjZWxsKTtcbiIpOwpAQCAtMTc5NiwxMCArMTY3MSwxNiBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChpbmRleCA8IHN0YXRpY19jYXN0PCRpbnRlcmZh
Y2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHtcbiIpOwogICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAjIEFzc3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBzZXR0
ZXIsIHRoZSBpbmRleCB3aWxsIGJlIHdyaXRhYmxlCisgICAgICAgICAgICAgICAgaWYgKCRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHVuc2lnbmVkIHNs
b3RBdHRyaWJ1dGVzID0gRG9udERlbGV0ZTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB1bnNpZ25l
ZCBzbG90QXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBSZWFkT25seTtcbiIpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJ
bmRleChleGVjLCBpbmRleCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModGhpc09iamVjdC0+
Z2V0QnlJbmRleChleGVjLCBpbmRleCksIHNsb3RBdHRyaWJ1dGVzKTtcbiIpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCB0aGlzT2JqZWN0
LT5pbmRleEdldHRlcik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNP
YmplY3QtPmluZGV4R2V0dGVyLCBzbG90QXR0cmlidXRlcyk7XG4iKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
cnVlO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7
CkBAIC0xODA4LDEzICsxNjg5LDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
ICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVy
In0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVy
In0pIHsKICAgICAgICAgICAgICAgICAmJHByb3BlcnR5TmFtZUdlbmVyYXRpb24oKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1l
KGV4ZWMsIHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwg
cHJvcGVydHlOYW1lKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0
ZXIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIsIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7Ind0Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0gPSAxOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9KSB7CisgICAgICAgICAg
ICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90In0pIHsKICAgICAgICAgICAgICAgICAmJHByb3BlcnR5TmFtZUdlbmVyYXRpb24o
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVj
dC0+Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSlc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
dHJ1ZTtcbiIpOwpAQCAtMzY1OCw3ICszNTM5LDYgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JE
ZWNsYXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG5cbiIpOwogCiAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87XG4iKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KVxuIik7CkBAIC00MDQxLDExICszOTIxLDYgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxw
ZXJNZXRob2RzCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIGdldFN0YXRpYyR7a2luZH1TbG90PCR7Y29u
c3RydWN0b3JDbGFzc05hbWV9LCBKU0RPTVdyYXBwZXI+KGV4ZWMsICIgLiBjb25zdHJ1Y3Rvckhh
c2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3Rh
dGljVGFibGVzIn0sICRjb25zdHJ1Y3RvckNsYXNzTmFtZSkgLiAiLCBqc0Nhc3Q8JHtjb25zdHJ1
Y3RvckNsYXNzTmFtZX0qPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOwogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotCi0gICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgImJvb2wgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcbiIpOwotICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHJldHVybiBnZXRTdGF0aWMke2tpbmR9RGVzY3JpcHRvcjwke2NvbnN0cnVjdG9yQ2xhc3NO
YW1lfSwgSlNET01XcmFwcGVyPihleGVjLCAiIC4gY29uc3RydWN0b3JIYXNoVGFibGVBY2Nlc3Nv
cigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAk
Y29uc3RydWN0b3JDbGFzc05hbWUpIC4gIiwganNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9
Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogICAgIH0KIAogICAgIGlmIChJc0NvbnN0cnVjdGFi
bGUoJGludGVyZmFjZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNyArNjYsNyBAQCBKU0N1c3RvbUNvbnN0cnVjdG9yCiBKU0N1c3RvbURlZmluZU93blBy
b3BlcnR5CiBKU0N1c3RvbURlZmluZU93blByb3BlcnR5T25Qcm90b3R5cGUKIEpTQ3VzdG9tRmlu
YWxpemUKLUpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvcgorSlNDdXN0b21H
ZXRPd25Qcm9wZXJ0eVNsb3QKIEpTQ3VzdG9tR2V0dGVyCiBKU0N1c3RvbUhlYWRlcgogSlNDdXN0
b21Jc1JlYWNoYWJsZQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNw
cAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw0NyArODksMjUgQEAgYm9vbCBSdW50aW1lQXJy
YXk6OmdldE93blByb3BlcnR5U2xvdChKUwogewogICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFi
bGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyKTsKKyAgICAgICAg
c2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0
dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCk7CiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpIHsKICAgICAg
ICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNs
b3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0
dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgdGhp
c09iamVjdC0+aW5kZXhHZXR0ZXIsIERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29s
IFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsK
LSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbGVuZ3RoR2V0dGVyKTsKLSAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlO
YW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOwotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSB7Ci0gICAg
ICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwotICAgICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0
LCBpbmRleCwgaW5kZXhHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
c2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgRG9udEVudW0p
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKTsKLX0KLQogYm9vbCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganND
YXN0PFJ1bnRpbWVBcnJheSo+KGNlbGwpOwogICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPmdl
dExlbmd0aCgpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5k
ZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRl
eCh0aGlzT2JqZWN0LCBpbmRleCwgdGhpc09iamVjdC0+aW5kZXhHZXR0ZXIsIERvbnREZWxldGUg
fCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMTQwMjk3KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAg
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhv
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9k
LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
bWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMjYgKzY1LDEzIEBAIGJvb2wgUnVudGlt
ZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEoKIHsKICAgICBSdW50aW1lTWV0aG9kKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVNZXRob2QqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRD
YWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyKTsKKyAg
ICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVu
Z3RoR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLWJvb2wgUnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yICZkZXNjcmlwdG9yKQotewotICAgIFJ1bnRpbWVNZXRob2QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UnVudGltZU1ldGhvZCo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIFByb3BlcnR5
U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0
ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVj
LCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlv
bjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSdW50aW1lTWV0aG9k
KiBtZXRob2QgPSBzdGF0aWNfY2FzdDxSdW50aW1lTWV0aG9kKj4oZXhlYy0+Y2FsbGVlKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHJldmlzaW9uIDE0MDI5
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw2IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0
Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIEpTVmFsdWUgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUs
IFByb3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVj
dC5jcHAJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxNCArMTM0LDE0IEBAIGJvb2wgUnVu
dGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEoKICAgICAgICAgLy8gU2VlIGlmIHRoZSBp
bnN0YW5jZSBoYXMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KICAgICAgICAgRmll
bGQgKmFGaWVsZCA9IGFDbGFzcy0+ZmllbGROYW1lZChwcm9wZXJ0eU5hbWUsIGluc3RhbmNlLmdl
dCgpKTsKICAgICAgICAgaWYgKGFGaWVsZCkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpc09iamVjdCwgdGhpc09iamVjdC0+ZmllbGRHZXR0ZXIpOworICAgICAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+ZmllbGRHZXR0ZXIsIERvbnREZWxldGUp
OwogICAgICAgICAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBOb3cgY2hlY2sgaWYgYSBtZXRob2Qg
d2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHMsIGlmIHNvIHJldHVybiBhIGZ1bmN0aW9uIG9iamVj
dCBmb3IKICAgICAgICAgICAgIC8vIHRoYXQgbWV0aG9kLgogICAgICAgICAgICAgaWYgKGFDbGFz
cy0+bWV0aG9kTmFtZWQocHJvcGVydHlOYW1lLCBpbnN0YW5jZS5nZXQoKSkpIHsKLSAgICAgICAg
ICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5tZXRob2RHZXR0
ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmpl
Y3QtPm1ldGhvZEdldHRlciwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0xNTAsNyArMTUwLDcgQEAgYm9vbCBSdW50aW1lT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSgogCiAgICAgICAgIC8vIFRyeSBhIGZhbGxiYWNrIG9iamVjdC4KICAgICAg
ICAgaWYgKCFhQ2xhc3MtPmZhbGxiYWNrT2JqZWN0KGV4ZWMsIGluc3RhbmNlLmdldCgpLCBwcm9w
ZXJ0eU5hbWUpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXNPYmplY3QsIHRoaXNPYmplY3QtPmZhbGxiYWNrT2JqZWN0R2V0dGVyKTsKKyAgICAgICAgICAg
IHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmZhbGxiYWNrT2JqZWN0R2V0
dGVyLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgICAgICAgICBpbnN0
YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTYx
LDU1ICsxNjEsNiBAQCBib29sIFJ1bnRpbWVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKCiAg
ICAgcmV0dXJuIGluc3RhbmNlLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlICpleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0g
ICAgUnVudGltZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4ob2Jq
ZWN0KTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPm1faW5zdGFuY2UpIHsKLSAgICAgICAgdGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgCi0gICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmplY3QtPm1faW5zdGFu
Y2U7Ci0gICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgCi0gICAgQ2xhc3MgKmFDbGFzcyA9IGlu
c3RhbmNlLT5nZXRDbGFzcygpOwotICAgIAotICAgIGlmIChhQ2xhc3MpIHsKLSAgICAgICAgLy8g
U2VlIGlmIHRoZSBpbnN0YW5jZSBoYXMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4K
LSAgICAgICAgRmllbGQgKmFGaWVsZCA9IGFDbGFzcy0+ZmllbGROYW1lZChwcm9wZXJ0eU5hbWUs
IGluc3RhbmNlLmdldCgpKTsKLSAgICAgICAgaWYgKGFGaWVsZCkgewotICAgICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBm
aWVsZEdldHRlcik7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUp
LCBEb250RGVsZXRlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gTm93IGNoZWNrIGlmIGEgbWV0aG9kIHdpdGggc3BlY2lmaWVkIG5h
bWUgZXhpc3RzLCBpZiBzbyByZXR1cm4gYSBmdW5jdGlvbiBvYmplY3QgZm9yCi0gICAgICAgICAg
ICAvLyB0aGF0IG1ldGhvZC4KLSAgICAgICAgICAgIGlmIChhQ2xhc3MtPm1ldGhvZE5hbWVkKHBy
b3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbWV0
aG9kR2V0dGVyKTsKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVHJ5
IGEgZmFsbGJhY2sgb2JqZWN0LgotICAgICAgICBpZiAoIWFDbGFzcy0+ZmFsbGJhY2tPYmplY3Qo
ZXhlYywgaW5zdGFuY2UuZ2V0KCksIHByb3BlcnR5TmFtZSkuaXNVbmRlZmluZWQoKSkgewotICAg
ICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBmYWxsYmFja09iamVjdEdldHRlcik7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+
ZW5kKCk7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1
ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBp
bnN0YW5jZS0+ZW5kKCk7Ci0gICAgCi0gICAgcmV0dXJuIGluc3RhbmNlLT5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
LX0KLQogdm9pZCBSdW50aW1lT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1
bnRpbWVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29i
amVjdC5oCShyZXZpc2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0
VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuaAkocmV2aXNpb24gMTQw
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbnN0YW5jZSgp
OwogCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKSB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpIHsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gMTQwMjk3
KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSw3ICsxMjUsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIENh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjE1LDEzICsyMTUsNiBAQCBib29sIE9iamNGYWxsYmFja09iamVjdElt
cDo6Z2V0T3duUHJvcGVyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgT2JqY0ZhbGxiYWNr
T2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICAv
LyBrZWVwIHRoZSBwcm90b3R5cGUgZnJvbSBnZXR0aW5nIGNhbGxlZCBpbnN0ZWFkIG9mIGp1c3Qg
cmV0dXJuaW5nIGZhbHNlCi0gICAgZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQogdm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnB1dChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaWRsCShyZXZp
c2lvbiAxNDAyOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKIFsKICAgICBKU0N1c3RvbU1hcmtG
dW5jdGlvbiwKICAgICBKU0dlbmVyYXRlSXNSZWFjaGFibGUsCi0gICAgSlNDdXN0b21HZXRPd25Q
cm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90
LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAogI2lmIGRlZmluZWQoVjhfQklORElORykgJiYgVjhf
QklORElORwogICAgIE5hbWVkR2V0dGVyLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5pZGwJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEFwcGxldEVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBA
CiAKIFsKICAgICBDdXN0b21OYW1lZFNldHRlciwKLSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5
U2xvdEFuZERlc2NyaXB0b3IsCisgICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QsCiAgICAg
Q3VzdG9tQ2FsbAogXSBpbnRlcmZhY2UgSFRNTEFwcGxldEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7
CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgYWxpZ247CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwJKHJldmlzaW9uIDE0MDI5NykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDcgKzIwLDcgQEAKIAogWwogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAotICAgIEpTQ3VzdG9t
R2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAgICBKU0N1c3RvbUdldE93blByb3Bl
cnR5U2xvdCwKICAgICBDdXN0b21DYWxsCiBdIGludGVyZmFjZSBIVE1MRW1iZWRFbGVtZW50IDog
SFRNTEVsZW1lbnQgewogYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgYWxpZ247CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmlkbAkocmV2aXNpb24gMTQw
Mjk3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIAogWwogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAot
ICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAgICBKU0N1c3Rv
bUdldE93blByb3BlcnR5U2xvdCwKICAgICBDdXN0b21DYWxsCiBdIGludGVyZmFjZSBIVE1MT2Jq
ZWN0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEZv
cm1FbGVtZW50IGZvcm07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwJKHJldmlzaW9uIDE0
MDI5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNpZiBkZWZpbmVkKFY4X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcK
ICAgICBDaGVja1NlY3VyaXR5LAogI2VuZGlmCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNs
b3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAogICAgIEN1
c3RvbU5hbWVkU2V0dGVyLAogICAgIEpTR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsRnJhbWUsCiAg
ICAgQ3VzdG9tRGVsZXRlUHJvcGVydHksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0
aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAko
cmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBkZWZpbmVkKFY4X0JJTkRJTkcpICYm
IFY4X0JJTkRJTkcKICAgICBDaGVja1NlY3VyaXR5LAogI2VuZGlmCi0gICAgSlNDdXN0b21HZXRP
d25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlT
bG90LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAogICAgIEpTR2VuZXJhdGVJc1JlYWNoYWJsZT1J
bXBsRnJhbWUsCiAgICAgQ3VzdG9tRGVsZXRlUHJvcGVydHksCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKIFsKICAgICBDb25kaXRpb25hbD1XT1JLRVJTLAogICAgIEpTQ3VzdG9tTWFya0Z1
bmN0aW9uLAotICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAg
ICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCwKICAgICBFdmVudFRhcmdldCwKICAgICBFeHRl
bmRzRE9NR2xvYmFsT2JqZWN0LAogICAgIElzV29ya2VyQ29udGV4dCwKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE0MDMwMCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTAxLTIwICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJh
cnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDc0MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIGlzIHByYWN0aWNhbGx5IHJlZHVuZGFudCB3aXRoIGdldE93blByb3BlcnR5U2xvdC4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAg
ICAgIC0gcGFzcyBhdHRyaWJ1dGVzIHRvIGdldE93blByb3BlcnR5U2xvdAorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5o
OgorICAgICAgICAoSlNOUE9iamVjdCk6CisKIDIwMTMtMDEtMjAgIFZpYXRjaGVzbGF2IE9zdGFw
ZW5rbyAgPHNsLm9zdGFwZW5rb0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZW1vdmUgc3VwcG9y
dCBnZXR0aW5nIHBlci1yZXNvdXJjZSBjYWxsYmFja3MgaW4gdGhlIFVJUHJvY2VzcwpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwMjk3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzYsNTQgKzI3NiwxOSBAQCBib29sIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChK
U0NlCiAKICAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhlIE5QT2JqZWN0IGhhcyBhIHByb3BlcnR5
IHdpdGggdGhpcyBuYW1lLgogICAgIGlmICh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3Mt
Pmhhc1Byb3BlcnR5ICYmIHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVy
dHkodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyKSkgewotICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5wcm9wZXJ0eUdldHRlcik7CisgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnByb3BlcnR5R2V0dGVy
LCBEb250RGVsZXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gU2Vj
b25kLCBjaGVjayBpZiB0aGUgTlBPYmplY3QgaGFzIGEgbWV0aG9kIHdpdGggdGhpcyBuYW1lLgog
ICAgIGlmICh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCAmJiB0aGlz
T2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCh0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0LCBucElkZW50aWZpZXIpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3Qs
IHRoaXNPYmplY3QtPm1ldGhvZEdldHRlcik7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNP
YmplY3QsIHRoaXNPYmplY3QtPm1ldGhvZEdldHRlciwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgSlNOUE9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU05QT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwotICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVj
dCkgewotICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElk
ZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwotCi0gICAgLy8gQ2FsbGluZyBO
UENsYXNzOjppbnZva2Ugd2lsbCBjYWxsIGludG8gcGx1Zy1pbiBjb2RlLCBhbmQgdGhlcmUncyBu
byB0ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRvLgotICAgIC8vIChpbmNsdWRpbmcgZGVz
dHJveWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2YgdGhpcywgd2UgbWFrZSBzdXJlIHRvIGtl
ZXAgdGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCi0gICAgLy8gdGhlIGNhbGwgaGFzIGZpbmlzaGVk
LgotICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3RlY3Rvcih0aGlz
T2JqZWN0LT5tX29iamVjdE1hcCk7Ci0KLSAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhlIE5QT2Jq
ZWN0IGhhcyBhIHByb3BlcnR5IHdpdGggdGhpcyBuYW1lLgotICAgIGlmICh0aGlzT2JqZWN0LT5t
X25wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5ICYmIHRoaXNPYmplY3QtPm1fbnBPYmplY3Qt
Pl9jbGFzcy0+aGFzUHJvcGVydHkodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVy
KSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpc09iamVjdCwgcHJvcGVydHlHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gU2Vjb25kLCBjaGVjayBpZiB0aGUg
TlBPYmplY3QgaGFzIGEgbWV0aG9kIHdpdGggdGhpcyBuYW1lLgotICAgIGlmICh0aGlzT2JqZWN0
LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCAmJiB0aGlzT2JqZWN0LT5tX25wT2JqZWN0
LT5fY2xhc3MtPmhhc01ldGhvZCh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIp
KSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBtZXRob2RHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KIHZvaWQgSlNOUE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KQogewogICAgIEpTTlBPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU05QT2JqZWN0
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHJldmlzaW9uIDE0MDI5NykKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDcgKzg2LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSlNDOjpDb25z
dHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERh
dGEmKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qm
KTsKIAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSk7Cg==
</data>
<flag name="commit-queue"
          id="202212"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183945</attachid>
            <date>2013-01-22 02:49:21 -0800</date>
            <delta_ts>2013-01-22 03:15:56 -0800</delta_ts>
            <desc>Add more slot/descriptor divergence to location &amp; history</desc>
            <filename>107420.6.patch</filename>
            <type>text/plain</type>
            <size>197603</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNCBA
QAorMjAxMy0wMS0yMiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGdldE93blByb3BlcnR5RGVzY3JpcHRvcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwcmFjdGljYWxseSBy
ZWR1bmRhbnQgd2l0aCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisKKyAgICAgICAgVGhlIGJ1bGsgb2Yg
Y2hhbmdlcyBoZXJlIGFyZSB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcgorICAgICAgICBtZWNoYW5pc20uIEEgbmV3IGZyZWUtZnVuY3Rpb24gaW1wbGVtZW50
YXRpb24gb2YgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGlzCisgICAgICAgIGFkZGVkIHRvIFBy
b3BlcnR5RGVzY3JpcHRvci5oLCBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBnZXRPd25Qcm9wZXJ0
eVNsb3QuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzLCBQcm9wZXJ0eVNsb3Qg
aXMgbm93IHBhc3NlZCB0aGUgYXR0cmlidXRlcywgYW5kCisgICAgICAgIHJlZmVyZW5jZXMgdGhl
IEdldHRlclNldHRlciBvYmplY3QgZm9yIGFjY2Vzc29ycywgcmF0aGVyIHRoYW4gdGhlIGdldHRl
ci4gQW4KKyAgICAgICAgYWRkaXRpb25hbCBmaWVsZCBpbmRpY2F0aW5nIGdldE93blByb3BlcnR5
RGVzY3JpcHRvciB1c2FnZSBpcyBhbHNvIGFkZGVkIHRvCisgICAgICAgIHN1cHBvcnQgZXhpc3Rp
bmcgZnVuY3Rpb25hbGxpdHkgZm9yIHRoZSBET01XaW5kb3cgb2JqZWN0LgorCisgICAgICAgIElu
IG9yZGVyIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlIHNpemUgb2YgUHJvcGVydHlTbG90LCB0aGUg
aW1wbGVtZW50YXRpb24gaGFzCisgICAgICAgIGJlZW4gcmVmYWN0b3JlZC4gUHJldmlvdXNseSB0
aGUgQ2FjaGVQcm9wZXJ0eVR5cGUgd2FzIG9ubHkgc2V0IGZvciBjYWNoZWFibGUKKyAgICAgICAg
cHJvcGVydGllcy4gTm93IGNhY2hlYWJpbGl0eSBpcyBzcGxpdCBvdXQgaW50byBhIHNlcGFyYXRl
IGZpZWxkLCBhbmQgdGhlIHR5cGUKKyAgICAgICAgaXMgYWxzbyByZWNvcmRlZC4gVGhpcyBtZWFu
cyB3ZSBjYW4gYWx3YXlzIHVzZSB0aGUgdHlwZSBmaWVsZCB0byBkZXRlcm1pbmUKKyAgICAgICAg
dGhlIHZhbHVlLCByYXRoZXIgdGhhbiBvdmVybG9hZGluZyB0aGUgbWVhbmluZyBvZiB0aGUgZ2V0
VmFsdWUgZmllbGQuIFRoaXMsCisgICAgICAgIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIg
ZmllbGRzIGFyZSBtb3ZlZCBpbnRvIGFuIGV4aXN0aW5nIChidXQgc3BhcmVzbHkKKyAgICAgICAg
dXNlZCkgdW5pb24uCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAg
ICAoSlNDYWxsYmFja09iamVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaDoKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5qczoKKyAgICAgICAgKiBKU0NUeXBl
ZEFycmF5U3R1YnMuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVi
dWdnZXJBY3RpdmF0aW9uLmg6CisgICAgICAgIChEZWJ1Z2dlckFjdGl2YXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50
cy5oOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuaDoKKyAgICAgICAgKEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmg6CisgICAgICAgIChBcnJheVByb3RvdHlwZSk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChCb29sZWFuUHJvdG90eXBlKToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6CisgICAgICAg
IChEYXRlQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5oOgorICAg
ICAgICAoRGF0ZVByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoK
KyAgICAgICAgKEVycm9yUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQpOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0FjdGl2
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgICogcnVudGltZS9K
U0NlbGwuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTTm90QW5PYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAoSlNPTk9iamVjdCk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3BlcnR5SXNF
bnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNQcm94eS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5o
OgorICAgICAgICAoSlNQcm94eSk6CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZUludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRT
dHJpbmdQcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZUdldCk6CisgICAgICAgICogcnVudGltZS9M
b29rdXAuY3BwOgorICAgICAgICAoSlNDOjpzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAg
ICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6Z2V0U3RhdGljUHJvcGVydHlT
bG90KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmdldFN0YXRpY1ZhbHVlU2xvdCk6
CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChNYXRoT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL05hbWVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL05hbWVQcm90b3R5cGUuaDoKKyAgICAgICAgKE5hbWVQcm90b3R5cGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmg6CisgICAgICAgIChOdW1iZXJDb25z
dHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAo
TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JTZWFs
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUpOgorICAgICAgICAoSlND
OjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3Ry
dWN0b3JJc0Zyb3plbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgor
ICAgICAgICAoT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaDoKKyAgICAgICAgKE9iamVjdFByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9Q
cm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3I6
OmVxdWFsVG8pOgorICAgICAgICAoSlNDOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKFByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmZ1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpjYWNoZWRQcm9wZXJ0eVR5cGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6Omlz
Q2FjaGVhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90Ojppc0NhY2hlYWJsZVZhbHVl
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhCYXNlKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VmFsdWVXaXRoQXR0cmlidXRlcyk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpzZXRDYWNoZWFibGVDdXN0b20pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNl
dEN1c3RvbUluZGV4KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRBY2Nlc3NvclNs
b3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldENhY2hlYWJsZUFjY2Vzc29yU2xv
dCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VW5kZWZpbmVkKToKKyAgICAgICAg
KFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y2xlYXJPZmZzZXQp
OgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmN1c3RvbUdldHRlcik6CisgICAgICAgIChK
U0M6OlByb3BlcnR5U2xvdDo6YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6d3JpdGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmVudW1lcmFibGUpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmNvbmZpZ3VyYWJsZSk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5U2xvdDo6aXNBY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6
Z2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRJbkdldE93blBy
b3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6aW5HZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
Lmg6CisgICAgICAgIChSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKFJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKFJlZ0V4cFByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmpl
Y3QuaDoKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5oOgorICAgICAgICAoU3RyaW5nUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpnZXQpOgorCiAyMDEzLTAxLTIyICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBw
bGUuY29tPgogCiAgICAgICAgIFBERlBsdWdpbjogQnVpbGQgUERGUGx1Z2luIGV2ZXJ5d2hlcmUs
IGVuYWJsZSBhdCBydW50aW1lCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRB
cnJheVN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVk
QXJyYXlTdHVicy5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SlNDVHlwZWRBcnJheVN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAgcHVi
bGljOiBcCiAgICAgfVwKIFwKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTtcCiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKICAgICBz
dGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYp
O1wKICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7XApAQCAtMTA2
LDMxICsxMDUsMTggQEAgYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdAog
ICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCiAgICAgaWYgKGlu
ZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAogICAgICAgICBBU1NFUlQoaW5k
ZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUo
dGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1wKKyAgICAgICAgc2xvdC5zZXRW
YWx1ZVdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBE
b250RGVsZXRlKTtcCiAgICAgICAgIHJldHVybiB0cnVlO1wKICAgICB9XAogICAgIHJldHVybiBC
YXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTtc
CiB9XAogXAotYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcCi17XAotICAgIEpTIyNuYW1lIyNB
cnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1
bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCA8
IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aCkge1wKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7XAotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCksIERvbnREZWxldGUpO1wK
LSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
XAotfVwKLVwKIGJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdClcCiB7XAogICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCiAgICAgaWYgKHByb3BlcnR5TmFtZSA8IHRo
aXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aCkge1wKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlz
T2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSkpO1wKKyAgICAgICAgc2xvdC5z
ZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVy
dHlOYW1lKSwgRG9udERlbGV0ZSk7XAogICAgICAgICByZXR1cm4gdHJ1ZTtcCiAgICAgfVwKICAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xv
dCk7XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDYgQEAgcHJpdmF0ZToK
IAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOwogICAgIAogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBi
b29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZVJlZiA9IE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUobmFtZSk7CiAgICAg
ICAgICAgICAgICAgQVBJQ2FsbGJhY2tTaGltIGNhbGxiYWNrU2hpbShleGVjKTsKICAgICAgICAg
ICAgICAgICBpZiAoaGFzUHJvcGVydHkoY3R4LCB0aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYuZ2V0
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNh
bGxiYWNrR2V0dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09i
amVjdCwgY2FsbGJhY2tHZXR0ZXIsIERvbnRFbnVtKTsgLy8gV2UgZG9uJ3Qga25vdyB0aGUgYXR0
cmlidXRlcywgc28gZ3Vlc3MuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNPYmplY3RHZXRQcm9wZXJ0
eUNhbGxiYWNrIGdldFByb3BlcnR5ID0ganNDbGFzcy0+Z2V0UHJvcGVydHkpIHsKQEAgLTE1MSwy
OCArMTUxLDMwIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAodmFsdWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0b0pTKGV4ZWMsIHZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyh0b0pTKGV4
ZWMsIHZhbHVlKSwgRG9udEVudW0pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpz
Q2xhc3MtPnN0YXRpY1ZhbHVlcyhleGVjKSkgewotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNW
YWx1ZXMtPmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0
YXRpY1ZhbHVlc1RhYmxlOjppdGVyYXRvciBlbnRyeSA9IHN0YXRpY1ZhbHVlcy0+ZmluZChuYW1l
KTsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gc3RhdGljVmFsdWVzLT5lbmQoKSkgewog
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0U3RhdGlj
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyh2YWx1ZSwgZW50
cnktPnZhbHVlLT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1
bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5jdGlvbnMgPSBqc0NsYXNzLT5zdGF0aWNGdW5jdGlvbnMo
ZXhlYykpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljRnVuY3Rpb25zLT5jb250YWlucyhu
YW1lKSkgewotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBz
dGF0aWNGdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRp
Y0Z1bmN0aW9uc1RhYmxlOjppdGVyYXRvciBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+ZmluZChu
YW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gc3RhdGljRnVuY3Rpb25zLT5lbmQo
KSkgeworICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0
aWNGdW5jdGlvbkdldHRlciwgZW50cnktPnZhbHVlLT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtMjEzLDI2ICsyMTUsNiBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVm
YXVsCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQotewotICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgaWYgKHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7Ci0gICAgICAgIC8vIElkZWFsbHkg
d2Ugc2hvdWxkIHJldHVybiBhbiBhY2Nlc3MgZGVzY3JpcHRvciwgYnV0IHJldHVybmluZyBhIHZh
bHVlIGRlc2NyaXB0b3IgaXMgYmV0dGVyIHRoYW4gbm90aGluZy4KLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0VmFsdWUodmFs
dWUpOwotICAgICAgICAvLyBXZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGNv
bmZpZ3VyYWJsZSwgYnV0IGFzc3VtZSBpdCBpcy4KLSAgICAgICAgZGVzY3JpcHRvci5zZXRDb25m
aWd1cmFibGUodHJ1ZSk7Ci0gICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgcHJv
cGVydHkgaXMgZW51bWVyYWJsZSAod2UgY291bGQgY2FsbCBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkg
dG8gZmluZCBvdXQpLCBidXQgYXNzdW1lIGl0IGlzbid0LgotICAgICAgICBkZXNjcmlwdG9yLnNl
dEVudW1lcmFibGUoZmFsc2UpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gUGFyZW50OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4K
IHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuanMJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjIz
LDIzICsyMjMsMjMgQEAgdmFyIGJhc2VEdXBEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blBybwog
c2hvdWxkQmUoJ3R5cGVvZiBiYXNlRHVwRGVzY3JpcHRvcicsICJvYmplY3QiKTsKIHNob3VsZEJl
KCdiYXNlRHVwRGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQuYmFzZUR1cCk7CiBzaG91bGRCZSgn
YmFzZUR1cERlc2NyaXB0b3IuY29uZmlndXJhYmxlJywgdHJ1ZSk7Ci1zaG91bGRCZSgnYmFzZUR1
cERlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdiYXNlRHVwRGVzY3Jp
cHRvci5lbnVtZXJhYmxlJywgdHJ1ZSk7CiB2YXIgYmFzZU9ubHlEZXNjcmlwdG9yID0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJpdmVkLCAiYmFzZU9ubHkiKTsKIHNob3VsZEJl
KCd0eXBlb2YgYmFzZU9ubHlEZXNjcmlwdG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Jhc2VP
bmx5RGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQuYmFzZU9ubHkpOwogc2hvdWxkQmUoJ2Jhc2VP
bmx5RGVzY3JpcHRvci5jb25maWd1cmFibGUnLCB0cnVlKTsKLXNob3VsZEJlKCdiYXNlT25seURl
c2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdiYXNlT25seURlc2NyaXB0
b3IuZW51bWVyYWJsZScsIHRydWUpOwogc2hvdWxkQmUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZGVyaXZlZCwgInByb3RvT25seSIpJywgdW5kZWZpbmVkKTsKIHZhciBwcm90b0R1
cERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlcml2ZWQsICJw
cm90b0R1cCIpOwogc2hvdWxkQmUoJ3R5cGVvZiBwcm90b0R1cERlc2NyaXB0b3InLCAib2JqZWN0
Iik7CiBzaG91bGRCZSgncHJvdG9EdXBEZXNjcmlwdG9yLnZhbHVlJywgZGVyaXZlZC5wcm90b0R1
cCk7CiBzaG91bGRCZSgncHJvdG9EdXBEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZScsIHRydWUpOwot
c2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgZmFsc2UpOworc2hvdWxk
QmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgdHJ1ZSk7CiB2YXIgZGVyaXZlZE9u
bHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJpdmVkLCAi
ZGVyaXZlZE9ubHkiKTsKIHNob3VsZEJlKCd0eXBlb2YgZGVyaXZlZE9ubHlEZXNjcmlwdG9yJywg
Im9iamVjdCIpOwogc2hvdWxkQmUoJ2Rlcml2ZWRPbmx5RGVzY3JpcHRvci52YWx1ZScsIGRlcml2
ZWQuZGVyaXZlZE9ubHkpOwogc2hvdWxkQmUoJ2Rlcml2ZWRPbmx5RGVzY3JpcHRvci5jb25maWd1
cmFibGUnLCB0cnVlKTsKLXNob3VsZEJlKCdkZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJs
ZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdkZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScs
IHRydWUpOwogCiBzaG91bGRCZSgidW5kZWZpbmVkIGluc3RhbmNlb2YgTXlPYmplY3QiLCBmYWxz
ZSk7CiBFdmlsRXhjZXB0aW9uT2JqZWN0Lmhhc0luc3RhbmNlID0gZnVuY3Rpb24gZigpIHsgcmV0
dXJuIGYoKTsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ckFjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsMTIgKzk1LDYgQEAgdm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246OmdldE93blBy
b3BlcnR5TgogICAgIHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIERlYnVnZ2VyQWN0aXZhdGlvbjo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewot
ICAgIERlYnVnZ2VyQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlckFjdGl2
YXRpb24qPihvYmplY3QpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24tPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5tX2FjdGl2
YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIGJvb2wg
RGVidWdnZXJBY3RpdmF0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBEZWJ1Z2dlckFjdGl2
YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RGVidWdnZXJBY3RpdmF0aW9uKj4ob2JqZWN0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJB
Y3RpdmF0aW9uLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKIAogICAgICAgICBKU19FWFBPUlREQVRBIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMu
Y3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgQXJndW1l
bnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGUKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4oY2VsbCk7CiAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0
aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVudChpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZh
bHVlKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVlLCBOb25lKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMjgsMTggKzEyOCwxOCBAQCBib29s
IEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsCiAgICAgdW5zaWduZWQgaSA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0
LT50cnlHZXRBcmd1bWVudChpKSkgewogICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCk7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICBzbG90
LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIE5vbmUpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGggJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkgewotICAg
ICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRzKSk7
CisgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhqc051bWJlcih0aGlzT2JqZWN0
LT5tX251bUFyZ3VtZW50cyksIERvbnRFbnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVl
ICYmIExJS0VMWSghdGhpc09iamVjdC0+bV9vdmVycm9kZUNhbGxlZSkpIHsKICAgICAgICAgaWYg
KCF0aGlzT2JqZWN0LT5tX2lzU3RyaWN0TW9kZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LT5tX2NhbGxlZS5nZXQoKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVl
V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHRoaXNPYmplY3QtPmNy
ZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShleGVjKTsKQEAgLTE1MSwzNSArMTUxLDYg
QEAgYm9vbCBBcmd1bWVudHM6OmdldE93blByb3BlcnR5U2xvdChKU0NlbAogICAgIHJldHVybiBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKLWJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgQXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KG9iamVjdCk7Ci0gICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2Jq
ZWN0LT50cnlHZXRBcmd1bWVudChpKSkgewotICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwg
Tm9uZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlzT2Jq
ZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkgewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoanNOdW1iZXIodGhpc09iamVjdC0+bV9udW1Bcmd1bWVudHMpLCBEb250RW51bSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUgJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJy
b2RlQ2FsbGVlKSkgewotICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1faXNTdHJpY3RNb2RlKSB7
Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+bV9jYWxs
ZWUuZ2V0KCksIERvbnRFbnVtKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShl
eGVjKTsKLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5jYWxsZXIgJiYgdGhpc09iamVjdC0+bV9pc1N0cmljdE1vZGUpCi0gICAgICAgIHRoaXNP
YmplY3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZXJJZk5lY2Vzc2FyeShleGVjKTsKLSAgICAKLSAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiB2b2lkIEFyZ3VtZW50czo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4ob2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTksNyArOTksNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXRCeUlu
ZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDExICs3MSw2IEBAIGJvb2wgQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVy
dHlTbG8KICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEludGVybmFsRnVuY3Rpb24+
KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJy
YXlDb25zdHJ1Y3Rvcio+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEFy
cmF5Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNj
cmlwdG9yPEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlDb25zdHJ1Y3Rv
clRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEpTT2JqZWN0KiBjb25z
dHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Q
cm9maWxlKiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxl
bmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBA
QCBwcml2YXRlOgogICAgIEFycmF5Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0KICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5
cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCwxMSArMTQwLDYgQEAgYm9vbCBBcnJheVByb3RvdHlw
ZTo6Z2V0T3duUHJvcGVydHlTbG90KAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8
SlNBcnJheT4oZXhlYywgRXhlY1N0YXRlOjphcnJheVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nh
c3Q8QXJyYXlQcm90b3R5cGUqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9v
bCBBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRl
c2NyaXB0b3I8SlNBcnJheT4oZXhlYywgRXhlY1N0YXRlOjphcnJheVByb3RvdHlwZVRhYmxlKGV4
ZWMpLCBqc0Nhc3Q8QXJyYXlQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVu
Y3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gSGVscGVyIGZ1bmN0aW9u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBl
LmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKik7CiAgICAgICAgIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDQwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsNiBAQCBib29sIEJvb2xlYW5Qcm90b3R5cGU6Omdl
dE93blByb3BlcnR5U2xvCiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCb29sZWFu
T2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZShleGVjKSwganND
YXN0PEJvb2xlYW5Qcm90b3R5cGUqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
Ym9vbCBCb29sZWFuUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0
aW9uRGVzY3JpcHRvcjxCb29sZWFuT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OmJvb2xlYW5Qcm90
b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEJvb2xlYW5Qcm90b3R5cGUqPihvYmplY3QpLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblBy
b3RvdHlwZS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDYgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotCi0gICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9u
IDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5Miw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAKICAg
ICB0eXBlZGVmIGJvb2wgKCpEZWZpbmVPd25Qcm9wZXJ0eUZ1bmN0aW9uUHRyKShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCk7CiAg
ICAgRGVmaW5lT3duUHJvcGVydHlGdW5jdGlvblB0ciBkZWZpbmVPd25Qcm9wZXJ0eTsKLQotICAg
IHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyKShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0g
ICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yOwogfTsKIAogI2RlZmluZSBDUkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBA
IC0xMzcsNyArMTM0LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFt
ZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0Vmly
dHVhbCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAotICAgICAg
ICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwKICAgICB9LCBcCiAgICAg
Q2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDA0
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMSArOTEsNiBAQCBib29sIERhdGVDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxJbnRl
cm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKGV4ZWMp
LCBqc0Nhc3Q8RGF0ZUNvbnN0cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLWJvb2wgRGF0ZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1
bmN0aW9uRGVzY3JpcHRvcjxJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OmRhdGVD
b25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZUNvbnN0cnVjdG9yKj4ob2JqZWN0KSwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gRUNNQSAxNS45LjMKIEpTT2JqZWN0
KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNTUsOCArNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIENh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKICAgICB9OwogCiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQw
NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyMCwxMSArNTIwLDYgQEAgYm9vbCBEYXRlUHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSgogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNP
YmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0ZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZVByb3Rv
dHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIERhdGVQcm90b3R5
cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2Jq
ZWN0PihleGVjLCBFeGVjU3RhdGU6OmRhdGVUYWJsZShleGVjKSwganNDYXN0PERhdGVQcm90b3R5
cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyBGdW5jdGlv
bnMKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVQcm90b3R5cGUuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2Niw2IEBAIGJvb2wgRXJyb3JQ
cm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCgKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rp
b25TbG90PEVycm9ySW5zdGFuY2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJs
ZShleGVjKSwganNDYXN0PEVycm9yUHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKLWJvb2wgRXJyb3JQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25EZXNjcmlwdG9yPEVycm9ySW5zdGFuY2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6ZXJy
b3JQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEVycm9yUHJvdG90eXBlKj4ob2JqZWN0KSwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNN
QS0yNjIgNS4xLCAxNS4xMS40LjQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NyArNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNDA0
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6
c3ltYm9sVGFibGVHZXQKICAgICBpZiAoaXNUb3JuT2ZmKCkgJiYgIWlzVmFsaWQoZW50cnkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzbG90LnNldFZhbHVlKHJlZ2lzdGVyQXQoZW50
cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhy
ZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDksNyArMTQ5LDcgQEAgYm9vbCBKU0FjdGl2
YXRpb246OmdldE93blByb3BlcnR5U2xvdChKUwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewogICAgICAgICAvLyBEZWZlbmQgYWdhaW5z
dCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgdGhlIGFyZ3VtZW50cyBvYmplY3QgYWZ0ZXIgaXQg
aGFzIGJlZW4gb3B0aW1pemVkIG91dC4KICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1Rvcm5P
ZmYoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVj
dC0+Z2V0QXJndW1lbnRzR2V0dGVyKCkpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhp
c09iamVjdCwgdGhpc09iamVjdC0+Z2V0QXJndW1lbnRzR2V0dGVyKCksIERvbnRFbnVtKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTU3LDggKzE1Nyw5
IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlMKICAgICBpZiAodGhp
c09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3QtPmdldERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2xvdC5zZXRW
YWx1ZSh2YWx1ZSk7CisgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IE5vbmU7CisgICAgaWYgKEpT
VmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBw
cm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKSkgeworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0
dHJpYnV0ZXModmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTE2OSwyNiArMTcwLDYgQEAgYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5
U2xvdChKUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU0FjdGl2YXRpb246OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikK
LXsKLSAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4o
b2JqZWN0KTsKLQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cykgewotICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFz
a2luZyBmb3IgdGhlIGFyZ3VtZW50cyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVk
IG91dC4KLSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1Rvcm5PZmYoKSkgewotICAgICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb246OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKSwgRG9udEVudW0pOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKLX0KLQogdm9pZCBKU0FjdGl2YXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FjdGl2YXRpb24qPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTQwNDA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCwyNCArMTgwLDEzIEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCoKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihj
ZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgo
KSkpOworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMoanNOdW1iZXIodGhpc09i
amVjdC0+bGVuZ3RoKCkpLCB0aGlzT2JqZWN0LT5pc0xlbmd0aFdyaXRhYmxlKCkgPyBEb250RGVs
ZXRlIHwgRG9udEVudW0gOiBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJv
b2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNB
cnJheSo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJl
cih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIHRoaXNPYmplY3QtPmlzTGVuZ3RoV3JpdGFibGUoKSA/
IERvbnREZWxldGUgfCBEb250RW51bSA6IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKLX0KLQogLy8gRUNNQSAxNS40LjUuMQogdm9pZCBKU0FycmF5OjpwdXQoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAog
ICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lv
biAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjEsMTAgKzIyMSw0IEBAIGJvb2wgSlNDZWxsOjpkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNDZWxsOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcg
KzE1Niw2IEBAIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBj
dXN0b21IYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQwNDA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyMSw3ICsyMjEsOCBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3Bl
cnR5U2xvdChKU0NlCiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIAogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSkgewotICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gRG9u
dERlbGV0ZSB8IERvbnRFbnVtOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlz
T2JqZWN0LT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
ICZhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAg
ICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgICAgICBwcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdGhpc09iamVjdCwgRG9udEVudW0pOwpAQCAt
MjMwLDcgKzIzMSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UK
ICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICB9CiAK
LSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5nZXREaXJlY3Qo
b2Zmc2V0KSwgb2Zmc2V0KTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNl
dCh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KSwgb2Zmc2V0LCBhdHRy
aWJ1dGVzKTsKICAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5hcmd1bWVudHMpIHsKQEAgLTI0MywxNyArMjQ0LDE3IEBAIGJvb2wgSlNGdW5jdGlv
bjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20o
dGhpc09iamVjdCwgYXJndW1lbnRzR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVD
dXN0b20odGhpc09iamVjdCwgYXJndW1lbnRzR2V0dGVyLCBSZWFkT25seSB8IERvbnRFbnVtIHwg
RG9udERlbGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBzbG90
LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIpOworICAgICAgICBz
bG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIsIFJlYWRPbmx5
IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkgewot
ICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lR2V0dGVyKTsK
KyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgbmFtZUdldHRlciwg
UmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKQEAgLTI2Nyw2NiArMjY4LDEzIEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJv
cGVydHlTbG90KEpTQ2UKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwg
Y2FsbGVyR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVj
dCwgY2FsbGVyR2V0dGVyLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBK
U0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4ob2JqZWN0KTsKLSAgICBpZiAodGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24o
KSkKLSAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgIAotICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSkgewotICAgICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0g
ICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7Ci0gICAgICAg
IGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAo
IXJlc3VsdCkgewotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlw
ZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nv
cik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihl
eGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhp
c09iamVjdCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
anNOdW1iZXIodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPnBhcmFtZXRlckNvdW50KCkpLCBS
ZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5uYW1lKSB7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5q
c0V4ZWN1dGFibGUoKS0+bmFtZVZhbHVlKCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVs
ZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7Ci0gICAgICAgIGlmICh0aGlzT2Jq
ZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIGJvb2wg
cmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgewot
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnBy
ZXRlcigpLT5yZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRP
bmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBKU0Z1bmN0
aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4ob2JqZWN0KTsKQEAgLTQwNiwxOSArMzU0LDIyIEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmoKICAgICAgICAgdGhpc09iamVjdC0+bV9pbmhlcml0b3JJRFdh
dGNocG9pbnQubm90aWZ5V3JpdGUoKTsKICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2Vw
dGlvbik7CiAgICAgfQotCiAgICAgYm9vbCB2YWx1ZUNoZWNrOwogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewogICAgICAgICBpZiAodGhp
c09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIUJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERp
cmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVu
dW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAvLyBHZXQgdGhlIHByb3BlcnR5IHRvIGZvcmNl
IHJlaWZpY2F0aW9uLgorICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgICAg
ICBib29sIGhhc1Byb3BlcnR5ID0gZ2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGhhc1Byb3Bl
cnR5LCBoYXNQcm9wZXJ0eSk7CiAgICAgICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0
aW9uKTsKICAgICAgICAgfQogICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUo
KSB8fCBzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRl
cigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOwogICAg
IH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIp
IHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUo
KSkgewotICAgICAgICAgICAgaWYgKCFCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwg
RG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgLy8gR2V0IHRo
ZSBwcm9wZXJ0eSB0byBmb3JjZSByZWlmaWNhdGlvbi4KKyAgICAgICAgICAgIFByb3BlcnR5U2xv
dCBzbG90OworICAgICAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGdldE93blByb3BlcnR5U2xv
dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChoYXNQcm9wZXJ0eSwgaGFzUHJvcGVydHkpOwogICAgICAgICAgICAgcmV0dXJu
IEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgdmFsdWVDaGVjayA9
ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUo
KSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRo
aXNPYmplY3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBTdHJ1Y3R1cmUqIGNhY2hlSW5oZXJpdG9ySUQoRXhlY1N0YXRlKik7
CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAg
ICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsMTQgKzU2MCw2IEBAIGJv
b2wgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCgKICAgICByZXR1cm4gc3ltYm9s
VGFibGVHZXQodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU0ds
b2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25E
ZXNjcmlwdG9yPEJhc2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyks
IHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIHJldHVybiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwotfQotCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjpjbGVhclJhcmVEYXRhKEpT
Q2VsbCogY2VsbCkKIHsKICAgICBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+bV9yYXJl
RGF0YS5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICAgICAg
Ym9vbCBoYXNPd25Qcm9wZXJ0eUZvcldyaXRlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAkocmV2
aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEyICs1OSw2IEBAIGJvb2wgSlNOb3RBbk9i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
SlNOb3RBbk9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpCi17Ci0gICAgQVNT
RVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiB2b2lkIEpTTm90QW5PYmplY3Q6OnB1dChKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSAsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgQVNTRVJU
X1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEpTT2Jq
ZWN0IG1ldGhvZHMKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlz
aW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsMTEgKzYwNSw2IEBAIGJvb2wgSlNPTk9iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90
PEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Ompzb25UYWJsZShleGVjKSwganNDYXN0PEpTT05P
YmplY3QqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU09OT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVj
dD4oZXhlYywgRXhlY1N0YXRlOjpqc29uVGFibGUoZXhlYyksIGpzQ2FzdDxKU09OT2JqZWN0Kj4o
b2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogY2xhc3MgV2Fsa2VyIHsK
IHB1YmxpYzoKICAgICBXYWxrZXIoRXhlY1N0YXRlKiBleGVjLCBIYW5kbGU8SlNPYmplY3Q+IGZ1
bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgQ2FsbERhdGEgY2FsbERhdGEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDggKzU3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgSlNPTk9iamVjdChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKLQogICAgIH07CiAKICAgICBTdHJpbmcgSlNPTlN0cmluZ2lmeShFeGVj
U3RhdGUqLCBKU1ZhbHVlLCB1bnNpZ25lZCBpbmRlbnQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsNyArMjg1LDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAog
ICAgICAgICAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOwogICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWUodmFsdWUpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVl
LCBOb25lKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMjk5LDcgKzI5OSw3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgKICAgICAgICAgCiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldOwogICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsK
KyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhKU1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCB2YWx1ZSksIE5vbmUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zMTQsNyArMzE0LDcgQEAgYm9vbCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0
b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBz
bG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0
dHJpYnV0ZXModmFsdWUsIE5vbmUpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CkBAIC0xNDIwLDEwICsxNDIwLDEwIEBAIGJv
b2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKIAogYm9vbCBKU09iamVjdDo6
cHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7
Ci0gICAgaWYgKCFjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCisgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAg
aWYgKCFjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blBy
b3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGVzY3JpcHRvci5l
bnVtZXJhYmxlKCk7CisgICAgcmV0dXJuIHNsb3QuZW51bWVyYWJsZSgpOwogfQogCiBib29sIEpT
T2JqZWN0OjpnZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKSBjb25zdApAQCAtMTYz
MCwxNSArMTYzMCwxMyBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxs
R2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQorTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qo
UHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCiB7Ci0gICAgaWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0
dGVyKGdldERpcmVjdChvZmZzZXQpKS0+Z2V0dGVyKCkpIHsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUdldHRl
clNsb3QodGhpcywgZ2V0dGVyRnVuY3Rpb24sIG9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXJGdW5jdGlvbik7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0
ZXIgPSBhc0dldHRlclNldHRlcihnZXREaXJlY3Qob2Zmc2V0KSk7CisgICAgaWYgKCFzdHJ1Y3R1
cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQWNjZXNzb3JT
bG90KHRoaXMsIGdldHRlclNldHRlciwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICBlbHNlCisg
ICAgICAgIHNsb3Quc2V0QWNjZXNzb3JTbG90KGdldHRlclNldHRlciwgYXR0cmlidXRlcyk7CiB9
CiAKIHZvaWQgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywg
U3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCkBAIC0yMzYzLDgwICsyMzYx
LDExIEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KCksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAg
dW5zaWduZWQgYXR0cmlidXRlcyA9IDA7Ci0gICAgSlNDZWxsKiBjZWxsID0gMDsKLSAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNlbGwpOwotICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVj
dC0+Z2V0RGlyZWN0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0g
ICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewotICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX1VO
REVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2Jq
ZWN0LT5tX2J1dHRlcmZseTsKLSAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAoIXZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IodmFsdWUsIDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG9iamVjdC0+bV9idXR0ZXJmbHk7Ci0gICAgICAgIGlmIChpID49IGJ1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRv
dWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICBp
ZiAodmFsdWUgIT0gdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2
YWx1ZSksIDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0g
ICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAg
ICAgICAgaWYgKGl0ID09IG1hcC0+bm90Rm91bmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6OmdldFByb3Bl
cnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBKU09iamVjdCogb2JqZWN0
ID0gdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAob2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpKQorICAgICAgICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7
CiAgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCkBAIC0yNTE5LDcgKzI0NDgsNyBA
QCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5CiAgICAgCiAgICAgLy8g
SWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJl
bnQpKSB7CisgICAgaWYgKCFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJv
cGVydHlOYW1lLCBjdXJyZW50KSkgewogICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUg
cHJldmVudGVkIQogICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAgICBp
ZiAodGhyb3dFeGNlcHRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDE3ICs3NCw2IEBAIHN0cnVjdCBI
YXNoVGFibGU7CiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhl
Y1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CiBleHRlcm4gSlNfRVhQT1JUREFUQSBjb25zdCBjaGFy
KiBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3I7CiAKLS8vIEVDTUEgMjYyLTMg
OC42LjEKLS8vIFByb3BlcnR5IGF0dHJpYnV0ZXMKLWVudW0gQXR0cmlidXRlIHsKLSAgICBOb25l
ICAgICAgICAgPSAwLAotICAgIFJlYWRPbmx5ICAgICA9IDEgPDwgMSwgIC8vIHByb3BlcnR5IGNh
biBiZSBvbmx5IHJlYWQsIG5vdCB3cml0dGVuCi0gICAgRG9udEVudW0gICAgID0gMSA8PCAyLCAg
Ly8gcHJvcGVydHkgZG9lc24ndCBhcHBlYXIgaW4gKGZvciAuLiBpbiAuLikKLSAgICBEb250RGVs
ZXRlICAgPSAxIDw8IDMsICAvLyBwcm9wZXJ0eSBjYW4ndCBiZSBkZWxldGVkCi0gICAgRnVuY3Rp
b24gICAgID0gMSA8PCA0LCAgLy8gcHJvcGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBi
eSBzdGF0aWMgaGFzaHRhYmxlcwotICAgIEFjY2Vzc29yICAgICA9IDEgPDwgNSwgIC8vIHByb3Bl
cnR5IGlzIGEgZ2V0dGVyL3NldHRlcgotfTsKLQogQ09NUElMRV9BU1NFUlQoTm9uZSA8IEZpcnN0
SW50ZXJuYWxBdHRyaWJ1dGUsIE5vbmVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7
CiBDT01QSUxFX0FTU0VSVChSZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRP
bmx5X2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwogQ09NUElMRV9BU1NFUlQoRG9u
dEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJzdElu
dGVybmFsQXR0cmlidXRlKTsKQEAgLTEzOCw3ICsxMjcsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgIGJvb2wgYWxsb3dzQWNjZXNz
RnJvbShFeGVjU3RhdGUqKTsKIApAQCAtNDkzLDE2ICs0ODEsMTYgQEAgcHVibGljOgogICAgIGJv
b2wgZ2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlND
ZWxsKiYgc3BlY2lmaWNGdW5jdGlvbikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGdldCBmdW5jdGlv
biBvbmx5IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCi0gICAgSlNWYWx1ZSBnZXREaXJlY3Qo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25z
dAorICAgIEpTVmFsdWUgZ2V0RGlyZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQqIGF0dHJpYnV0ZXMgPSAwKSBjb25zdAogICAg
IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChnbG9i
YWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAg
ICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgc3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCkp
OwogICAgICAgICByZXR1cm4gb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQgPyBnZXREaXJlY3Qob2Zm
c2V0KSA6IEpTVmFsdWUoKTsKICAgICB9CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RP
ZmZzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQorICAgIFByb3BlcnR5T2Zmc2V0IGdldERpcmVjdE9mZnNldChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkKiBhdHRyaWJ1dGVzID0g
MCkKICAgICB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICAgICAgcmV0dXJuIG9mZnNldDsKICAgICB9CkBAIC05MjEsNyArOTA5LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIHB1dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYsIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlND
ZWxsKik7CiAKICAgICBib29sIGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5
U2xvdCYsIFByb3BlcnR5T2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgIGNvbnN0
IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSkgY29uc3Q7CiAgICAgICAgIApAQCAtMTEzOCwxMyArMTEyNiwxNCBAQCBpbmxpbmUgSlNWYWx1
ZSBKU09iamVjdDo6cHJvdG90eXBlKCkgY29uCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUpOworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBOb25lOworICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsICZhdHRyaWJ1dGVzKTsKICAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkp
IHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdChvZmZzZXQpOwogICAgICAgICBp
ZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dl
dHRlclNldHRlcigpKQotICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBv
ZmZzZXQpOworICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQs
IGF0dHJpYnV0ZXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRo
aXMsIHZhbHVlLCBvZmZzZXQpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0
eU9mZnNldCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEyICs3Myw2IEBAIGJvb2wgSlNQ
cm94eTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKICAgICByZXR1cm4gdGhpc09iamVjdC0+
dGFyZ2V0KCktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09i
amVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNQ
cm94eTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQotewotICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+
KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZSgp
LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZvaWQgSlNQcm94eTo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgcHJv
dGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNDA0MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1v
ZGUsIEpTU2MKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIGN1c3RvbSBhY2Nl
c3NvciBiZWhhdmlvdXIgdGhhdCB0aGUgRE9NIGludHJvZHVjZXMgZm9yIHNvbWUKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXJzIGRlY2xhcmVkIG9uIGZ1bmN0aW9uIGRl
Y2xhcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZXNEeW5hbWlj
Q2hlY2tzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQmFzZShnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQo
KSwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAocmV0dXJuVmFsdWVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJldHVyblZh
bHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghcHV0VG9CYXNlT3BlcmF0
aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2
aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDE0ICs0NjUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiAgICAgewogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIobV9sZW5n
dGgpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhqc051bWJlciht
X2xlbmd0aCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CiAgICAgICAgIGlmIChpIDwgbV9sZW5ndGgpIHsKICAgICAgICAgICAg
IEFTU0VSVChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7IC8vIE5vIG5lZWQgZm9yIGFu
IGV4cGxpY2l0IGNoZWNrLCB0aGUgYWJvdmUgdGVzdCB3b3VsZCBhbHdheXMgZmFpbCEKLSAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXgoZXhlYywgaSkpOworICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKGdldEluZGV4KGV4ZWMsIGkpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtNDgy
LDcgKzQ4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU1N0
cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAgICAgICBpZiAocHJvcGVy
dHlOYW1lIDwgbV9sZW5ndGgpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXgo
ZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJp
YnV0ZXMoZ2V0SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJl
dmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMjIgKzc4LDcgQEAgaW5saW5lIGJv
b2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJs
ZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051
bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuZ2V0KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
eW1ib2xUYWJsZU9iamVjdFR5cGU+Ci1pbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKLSAgICBT
eW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7Ci0gICAgU3ltYm9sVGFibGU6Oml0ZXJh
dG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwot
ICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwotICAgIEFT
U0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKLSAg
ICAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5n
ZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKKyAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJp
YnV0ZXMob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5n
ZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTA4LDcgKzkzLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7
CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3Qt
PnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWVX
aXRoQXR0cmlidXRlcyhvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCks
IGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOwogICAgIHNsb3RJc1dyaXRlYWJs
ZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDcgKzY5LDggQEAgYm9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUq
IAogewogICAgIEFTU0VSVCh0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgQVNTRVJUKGVu
dHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5jdGlvbik7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gdGhpc09iai0+Z2V0RGlyZWN0T2Zmc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lKTsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXMoKTsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKTsKIAogICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIC8vIElmIGEgcHJvcGVydHkgaXMgZXZlciBk
ZWxldGVkIGZyb20gYW4gb2JqZWN0IHdpdGggYSBzdGF0aWMgdGFibGUsIHRoZW4gd2UgcmVpZnkK
QEAgLTg2LDcgKzg3LDcgQEAgYm9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUq
IAogICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICB9CiAKLSAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmosIHRoaXNPYmotPmdldERpcmVjdChvZmZzZXQpLCBvZmZzZXQp
OworICAgIHNsb3Quc2V0VmFsdWVXaXRoUHJvcGVydHlPZmZzZXQodGhpc09iaiwgdGhpc09iai0+
Z2V0RGlyZWN0KG9mZnNldCksIG9mZnNldCwgYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lv
biAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUxLDI4ICsyNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
aWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBz
ZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChleGVjLCBlbnRyeSwgdGhpc09iaiwgcHJvcGVydHlOYW1l
LCBzbG90KTsKIAotICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRy
eS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wLCBjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIGJv
b2wgZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFz
aFRhYmxlKiB0YWJsZSwgVGhpc0ltcCogdGhpc09iaiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotICAgIHsKLSAgICAgICAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKCFlbnRyeSkgLy8gbm90IGZvdW5kLCBmb3J3YXJkIHRvIHBhcmVu
dAotICAgICAgICAgICAgcmV0dXJuIFBhcmVudEltcDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gCi0gICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90OwotICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0
aW9uKSB7Ci0gICAgICAgICAgICBib29sIHByZXNlbnQgPSBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xv
dChleGVjLCBlbnRyeSwgdGhpc09iaiwgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAg
IGlmIChwcmVzZW50KQotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHByZXNlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzbG90LnNl
dEN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVu
dHJ5LT5hdHRyaWJ1dGVzKCkpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlz
T2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjk1LDI4ICsyNzQsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB9CiAgICAgCiAgICAgLyoqCi0gICAgICogU2ltcGxpZmllZCB2ZXJzaW9uIG9m
IGdldFN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvciBpbiBjYXNlIHRoZXJlIGFyZSBvbmx5IGZ1bmN0
aW9ucy4KLSAgICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlEZXNj
cmlwdG9yIGFsbG93cyAndGhpcycgdG8gYXZvaWQgaW1wbGVtZW50aW5nCi0gICAgICogYSBkdW1t
eSBnZXRWYWx1ZVByb3BlcnR5LgotICAgICAqLwotICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnRJ
bXA+Ci0gICAgaW5saW5lIGJvb2wgZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgSlNPYmplY3QqIHRoaXNPYmosIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLSAg
ICB7Ci0gICAgICAgIGlmIChQYXJlbnRJbXA6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdGF0
aWNfY2FzdDxQYXJlbnRJbXAqPih0aGlzT2JqKSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICBpZiAoIWVudHJ5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIGJvb2wgcHJlc2VudCA9IHNldFVwU3Rh
dGljRnVuY3Rpb25TbG90KGV4ZWMsIGVudHJ5LCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwotICAgICAgICBpZiAocHJlc2VudCkKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOwotICAgICAgICByZXR1cm4gcHJlc2VudDsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBT
aW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0U3RhdGljUHJvcGVydHlTbG90IGluIGNhc2UgdGhlcmUg
YXJlIG5vIGZ1bmN0aW9ucywgb25seSAidmFsdWVzIi4KICAgICAgKiBVc2luZyB0aGlzIGluc3Rl
YWQgb2YgZ2V0U3RhdGljUHJvcGVydHlTbG90IHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVuY0lt
cCBjbGFzcy4KICAgICAgKi8KQEAgLTMzMCwyNiArMjg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgQVNTRVJUKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSk7CiAKLSAg
ICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iaiwgZW50cnktPnByb3BlcnR5R2V0
dGVyKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBT
aW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIGluIGNhc2Ug
dGhlcmUgYXJlIG5vIGZ1bmN0aW9ucywgb25seSAidmFsdWVzIi4KLSAgICAgKiBVc2luZyB0aGlz
IGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIHJlbW92ZXMgdGhlIG5lZWQg
Zm9yIGEgRnVuY0ltcCBjbGFzcy4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0lt
cCwgY2xhc3MgUGFyZW50SW1wPgotICAgIGlubGluZSBib29sIGdldFN0YXRpY1ZhbHVlRGVzY3Jp
cHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIFRoaXNJbXAqIHRo
aXNPYmosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKLSAgICB7Ci0gICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+
ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZW50cnkp
IC8vIG5vdCBmb3VuZCwgZm9yd2FyZCB0byBwYXJlbnQKLSAgICAgICAgICAgIHJldHVybiBQYXJl
bnRJbXA6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCEoZW50cnktPmF0dHJp
YnV0ZXMoKSAmIEZ1bmN0aW9uKSk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5
TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1
c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMo
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksMTEgKzEwOSw2IEBAIGJvb2wgTWF0aE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQ2UKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBF
eGVjU3RhdGU6Om1hdGhUYWJsZShleGVjKSwganNDYXN0PE1hdGhPYmplY3QqPihjZWxsKSwgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBNYXRoT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0
dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRl
OjptYXRoVGFibGUoZXhlYyksIGpzQ2FzdDxNYXRoT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKiBleGVjKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2aXNpb24g
MTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAog
ICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0
MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsNiBAQCBib29sIE5hbWVQcm90b3R5cGU6Omdl
dE93blByb3BlcnR5U2xvdChKCiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCYXNl
PihleGVjLCBFeGVjU3RhdGU6OnByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUoZXhlYyksIGpzQ2Fz
dDxOYW1lUHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wg
TmFtZVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2Ny
aXB0b3I8QmFzZT4oZXhlYywgRXhlY1N0YXRlOjpwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKGV4
ZWMpLCBqc0Nhc3Q8TmFtZVByb3RvdHlwZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJpdmF0ZU5hbWVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5oCShyZXZpc2lv
biAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRl
OgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
ckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDYgQEAgYm9vbCBO
dW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiBnZXRTdGF0aWNW
YWx1ZVNsb3Q8TnVtYmVyQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNT
dGF0ZTo6bnVtYmVyQ29uc3RydWN0b3JUYWJsZShleGVjKSwganNDYXN0PE51bWJlckNvbnN0cnVj
dG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgTnVtYmVyQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPE51bWJl
ckNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6Om51bWJlckNv
bnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxOdW1iZXJDb25zdHJ1Y3Rvcio+KG9iamVjdCks
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGxvb2t1
cFB1dDxOdW1iZXJDb25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgRXhlY1N0YXRlOjpudW1iZXJDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nh
c3Q8TnVtYmVyQ29uc3RydWN0b3IqPihjZWxsKSwgc2xvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0
MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAg
ICAgICBKU1ZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25z
dDsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTEgKzg4LDYgQEAgYm9vbCBOdW1iZXJQ
cm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlv
blNsb3Q8TnVtYmVyT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om51bWJlclByb3RvdHlwZVRhYmxl
KGV4ZWMpLCBqc0Nhc3Q8TnVtYmVyUHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKLWJvb2wgTnVtYmVyUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0
YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxOdW1iZXJPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6bnVt
YmVyUHJvdG90eXBlVGFibGUoZXhlYyksIGpzQ2FzdDxOdW1iZXJQcm90b3R5cGUqPihvYmplY3Qp
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0
aWMgQUxXQVlTX0lOTElORSBib29sIHRvVGhpc051bWJlcihKU1ZhbHVlIHRoaXNWYWx1ZSwgZG91
YmxlJiB4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVy
UHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL051bWJlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIE51bWJlclByb3RvdHlwZShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDExICs5Nyw2IEBAIGJvb2wgT2JqZWN0Q29uc3RydWN0b3I6OmdldE93
blByb3BlcnR5U2wKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0Pihl
eGVjLCBFeGVjU3RhdGU6Om9iamVjdENvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxPYmpl
Y3RDb25zdHJ1Y3Rvcio+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIE9i
amVjdENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVz
Y3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpvYmplY3RDb25zdHJ1Y3RvclRhYmxl
KGV4ZWMpLCBqc0Nhc3Q8T2JqZWN0Q29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwotfQotCiAvLyBFQ01BIDE1LjIuMgogc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNPYmplY3QqIGNvbnN0cnVjdE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CkBAIC0xNDksMTIgKzE0NCwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiB7CiAgICAgaWYg
KCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3RlZCBw
cm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gb2JqZWN0LiIpKSk7
Ci0gICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBleGVj
LT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsK
KwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgIGlmICghb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFtZSksIGRlc2NyaXB0b3IpKQorICAgIGlmICghZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC0zODAsNyArMzc2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdAogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
ICAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dl
dE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLgogICAgICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAgICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAg
ICAgICAgaWYgKCFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCAqaXRlciwg
ZGVzYykpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0Nv
bmZpZ3VyYWJsZV1dIGlzIHRydWUsIHNldCBkZXNjLltbQ29uZmlndXJhYmxlXV0gdG8gZmFsc2Uu
CiAgICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGZhbHNlKTsKQEAgLTQxNyw3ICs0MTMsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgZm9yIChQcm9w
ZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICAvLyBhLiBMZXQgZGVzYyBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIFAuCiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjOwotICAgICAgICBpZiAo
IW9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwg
ZXhlYywgKml0ZXIsIGRlc2MpKQorICAgICAgICBpZiAoIWdldE93blByb3BlcnR5RGVzY3JpcHRv
cihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAvLyBiLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGRlc2MpIGlzIHRydWUsIHRoZW4KICAgICAg
ICAgLy8gaS4gSWYgZGVzYy5bW1dyaXRhYmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tXcml0YWJs
ZV1dIHRvIGZhbHNlLgpAQCAtNDY0LDExICs0NjAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdAogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLgotICAgICAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAgICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNj
KSkKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIGlmICghb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCAqaXRlciwgc2xvdCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3Vy
YWJsZV1dIGlzIHRydWUsIHRoZW4gcmV0dXJuIGZhbHNlLgotICAgICAgICBpZiAoZGVzYy5jb25m
aWd1cmFibGUoKSkKKyAgICAgICAgaWYgKHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApAQCAt
NDk0LDEyICs0OTAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dAogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVz
LmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8g
YS4gTGV0IGRlc2MgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLgotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0
b3IgZGVzYzsKLSAgICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgUHJvcGVy
dHlTbG90IHNsb3Q7CisgICAgICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCAqaXRlciwgc2xvdCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgLy8gYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihkZXNjKSBpcyB0cnVlIHRo
ZW4KICAgICAgICAgLy8gaS4gSWYgZGVzYy5bW1dyaXRhYmxlXV0gaXMgdHJ1ZSwgcmV0dXJuIGZh
bHNlLiBjLiBJZiBkZXNjLltbQ29uZmlndXJhYmxlXV0gaXMgdHJ1ZSwgdGhlbiByZXR1cm4gZmFs
c2UuCi0gICAgICAgIGlmICgoZGVzYy5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzYy53cml0YWJs
ZSgpKSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICBpZiAoKCFzbG90LmlzQWNjZXNz
b3IoKSAmJiBzbG90LndyaXRhYmxlKCkpIHx8IHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDYgQEAgYm9vbCBPYmplY3RQcm90b3R5
cGU6OmdldE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8
SlNOb25GaW5hbE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpvYmplY3RQcm90b3R5cGVUYWJsZShl
eGVjKSwganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCi1ib29sIE9iamVjdFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0
aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNOb25GaW5hbE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpv
YmplY3RQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KG9iamVj
dCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4
ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBPYmplY3RQcm90
b3R5cGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwog
ICAgIH07CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCShy
ZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eURlc2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsOCArMTg4LDggQEAgYm9vbCBQ
cm9wZXJ0eURlc2NyaXB0b3I6OmVxdWFsVG8oRXhlY1N0YQogICAgICAgICAhb3RoZXIubV9zZXR0
ZXIgPT0gbV9zZXR0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gKCFtX3Zh
bHVlIHx8IHNhbWVWYWx1ZShleGVjLCBvdGhlci5tX3ZhbHVlLCBtX3ZhbHVlKSkKLSAgICAgICAg
JiYgKCFtX2dldHRlciB8fCBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBvdGhlci5tX2dldHRl
ciwgbV9nZXR0ZXIpKQotICAgICAgICAmJiAoIW1fc2V0dGVyIHx8IEpTVmFsdWU6OnN0cmljdEVx
dWFsKGV4ZWMsIG90aGVyLm1fc2V0dGVyLCBtX3NldHRlcikpCisgICAgICAgICYmICghbV9nZXR0
ZXIgfHwgc2FtZVZhbHVlKGV4ZWMsIG90aGVyLm1fZ2V0dGVyLCBtX2dldHRlcikpCisgICAgICAg
ICYmICghbV9zZXR0ZXIgfHwgc2FtZVZhbHVlKGV4ZWMsIG90aGVyLm1fc2V0dGVyLCBtX3NldHRl
cikpCiAgICAgICAgICYmIGF0dHJpYnV0ZXNFcXVhbChvdGhlcik7CiB9CiAKQEAgLTIyMyw0ICsy
MjMsMzAgQEAgdW5zaWduZWQgUHJvcGVydHlEZXNjcmlwdG9yOjphdHRyaWJ1dGVzTwogICAgIHJl
dHVybiAobV9hdHRyaWJ1dGVzICYgb3ZlcnJpZGVNYXNrKSB8IChjdXJyZW50QXR0cmlidXRlcyAm
IH5vdmVycmlkZU1hc2spOwogfQogCitib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xv
dDsKKyAgICBzbG90LnNldEluR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCk7CisgICAgaWYgKCFv
YmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2xvdC5p
c0FjY2Vzc29yKCkpCisgICAgICAgIGRlc2NyaXB0b3Iuc2V0QWNjZXNzb3JEZXNjcmlwdG9yKHNs
b3QuZ2V0dGVyU2V0dGVyKCksIHNsb3QuYXR0cmlidXRlcygpKTsKKyAgICBlbHNlCisgICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFt
ZSksIHNsb3QuYXR0cmlidXRlcygpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sK
KyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBzbG90LnNldEluR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKCk7CisgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHNsb3QuaXNBY2Nlc3NvcigpKQorICAgICAgICBkZXNjcmlw
dG9yLnNldEFjY2Vzc29yRGVzY3JpcHRvcihzbG90LmdldHRlclNldHRlcigpLCBzbG90LmF0dHJp
YnV0ZXMoKSk7CisgICAgZWxzZQorICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xv
dC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBHZXR0
ZXJTZXR0ZXI7CisgICAgY2xhc3MgUHJvcGVydHlOYW1lOwogCiAgICAgLy8gU2VlIEVTNS4xIDku
MTIKICAgICBib29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKQEAg
LTQxLDYgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1fc2VlbkF0dHJp
YnV0ZXMoMCkKICAgICAgICAgewogICAgICAgICB9CisKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCB3cml0YWJsZSgpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGVudW1lcmFibGUoKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb25m
aWd1cmFibGUoKSBjb25zdDsKQEAgLTgzLDYgKzg1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKICAgICAgICAgdW5zaWduZWQgbV9zZWVuQXR0cmli
dXRlczsKICAgICB9OworCisgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAg
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIH0KIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJ
KHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKIAorI2luY2x1ZGUgIkdldHRlclNl
dHRlci5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTI5LDEzICszMCwxOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKIHsKKyAgICBKU09iamVjdCogZ2V0dGVyRnVuYyA9IG1fZGF0YS5hY2Nl
c3Nvci5nZXR0ZXJTZXR0ZXItPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyRnVuYykKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKICAgICAvLyBQcmV2ZW50IGdldHRlciBmdW5jdGlv
bnMgZnJvbSBvYnNlcnZpbmcgZXhlY3V0aW9uIGlmIGFuIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLgog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2Vw
dGlvbigpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBtX2RhdGEuZ2V0dGVyRnVuYy0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEobV9kYXRhLmdl
dHRlckZ1bmMsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBtX2RhdGEuZ2V0dGVy
RnVuYywgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX3RoaXNWYWx1ZS5pc09iamVjdCgpID8gbV90aGlz
VmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpIDogbV90aGlzVmFsdWUsIGV4ZWMtPmVtcHR5TGlzdCgp
KTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlckZ1bmMtPm1ldGhvZFRhYmxlKCktPmdl
dENhbGxEYXRhKGdldHRlckZ1bmMsIGNhbGxEYXRhKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShtX2RhdGEuYWNjZXNzb3IudGhpc1ZhbHVlKTsKKyAgICByZXR1cm4g
Y2FsbChleGVjLCBnZXR0ZXJGdW5jLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZS5pc09i
amVjdCgpID8gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKSA6IHRoaXNWYWx1ZSwgZXhlYy0+
ZW1wdHlMaXN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxNDA0MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMjEyICszMCwyNTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFz
cyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgSlNPYmplY3Q7Ci0KLSNkZWZpbmUgSlNDX1ZBTFVFX01B
UktFUiAwCi0jZGVmaW5lIElOREVYX0dFVFRFUl9NQVJLRVIgcmVpbnRlcnByZXRfY2FzdDxHZXRW
YWx1ZUZ1bmM+KDIpCi0jZGVmaW5lIEdFVFRFUl9GVU5DVElPTl9NQVJLRVIgcmVpbnRlcnByZXRf
Y2FzdDxHZXRWYWx1ZUZ1bmM+KDMpCi0KLSAgICBjbGFzcyBQcm9wZXJ0eVNsb3QgewotICAgIHB1
YmxpYzoKLSAgICAgICAgZW51bSBDYWNoZWRQcm9wZXJ0eVR5cGUgewotICAgICAgICAgICAgVW5j
YWNoZWFibGUsCi0gICAgICAgICAgICBHZXR0ZXIsCi0gICAgICAgICAgICBDdXN0b20sCi0gICAg
ICAgICAgICBWYWx1ZQotICAgICAgICB9OwotCi0gICAgICAgIFByb3BlcnR5U2xvdCgpCi0gICAg
ICAgICAgICA6IG1fY2FjaGVkUHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjbGVhckJhc2UoKTsKLSAgICAgICAgICAgIGNsZWFyT2Zmc2V0KCk7Ci0gICAg
ICAgICAgICBjbGVhclZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBleHBsaWNpdCBQcm9w
ZXJ0eVNsb3QoY29uc3QgSlNWYWx1ZSBiYXNlKQotICAgICAgICAgICAgOiBtX3Nsb3RCYXNlKGJh
c2UpCi0gICAgICAgICAgICAsIG1fY2FjaGVkUHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjbGVhck9mZnNldCgpOwotICAgICAgICAgICAgY2xlYXJWYWx1
ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZWRlZiBKU1ZhbHVlICgqR2V0VmFsdWVGdW5j
KShFeGVjU3RhdGUqLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICB0
eXBlZGVmIEpTVmFsdWUgKCpHZXRJbmRleFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBz
bG90QmFzZSwgdW5zaWduZWQpOwotCi0gICAgICAgIEpTVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobV9nZXRWYWx1ZSA9PSBKU0NfVkFMVUVfTUFSS0VSKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtX3ZhbHVlOwotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gSU5ERVhf
R0VUVEVSX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9nZXRJbmRleFZhbHVlKGV4
ZWMsIHNsb3RCYXNlKCksIGluZGV4KCkpOwotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0g
R0VUVEVSX0ZVTkNUSU9OX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25H
ZXR0ZXIoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBzbG90QmFz
ZSgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXRWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gSlNDX1ZBTFVFX01BUktFUikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAgICAgICAgICAgIGlmIChtX2dldFZhbHVlID09
IElOREVYX0dFVFRFUl9NQVJLRVIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2V0SW5kZXhW
YWx1ZShleGVjLCBtX3Nsb3RCYXNlLCBtX2RhdGEuaW5kZXgpOwotICAgICAgICAgICAgaWYgKG1f
Z2V0VmFsdWUgPT0gR0VUVEVSX0ZVTkNUSU9OX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShl
eGVjLCBzbG90QmFzZSgpLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQ2FjaGVkUHJvcGVydHlUeXBlIGNhY2hlZFByb3BlcnR5VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUHJvcGVydHlUeXBlOyB9Ci0gICAgICAgIGJvb2wg
aXNDYWNoZWFibGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFByb3BlcnR5VHlwZSAhPSBVbmNh
Y2hlYWJsZTsgfQotICAgICAgICBib29sIGlzQ2FjaGVhYmxlVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlZFByb3BlcnR5VHlwZSA9PSBWYWx1ZTsgfQotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXND
YWNoZWFibGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUgc2xvdEJhc2UsIEpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBjbGVhck9m
ZnNldCgpOwotICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IEpTQ19WQUxVRV9NQVJLRVI7Ci0gICAg
ICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFs
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0VmFsdWUoSlNWYWx1ZSBz
bG90QmFzZSwgSlNWYWx1ZSB2YWx1ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IEpT
Q19WQUxVRV9NQVJLRVI7Ci0gICAgICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7Ci0gICAg
ICAgICAgICBtX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICBtX29mZnNldCA9IG9mZnNldDsK
LSAgICAgICAgICAgIG1fY2FjaGVkUHJvcGVydHlUeXBlID0gVmFsdWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBjbGVhckJhc2UoKTsKLSAgICAgICAgICAg
IGNsZWFyT2Zmc2V0KCk7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gSlNDX1ZBTFVFX01BUktF
UjsKLSAgICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgc2V0Q3VzdG9tKEpTVmFsdWUgc2xvdEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKLSAgICAgICAgICAgIEFTU0VS
VChnZXRWYWx1ZSk7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gZ2V0VmFsdWU7Ci0gICAgICAg
ICAgICBtX2dldEluZGV4VmFsdWUgPSAwOwotICAgICAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RC
YXNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldENhY2hlYWJsZUN1c3Rv
bShKU1ZhbHVlIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZ2V0VmFsdWUp
OwotICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IGdldFZhbHVlOwotICAgICAgICAgICAgbV9nZXRJ
bmRleFZhbHVlID0gMDsKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAg
ICAgICAgIG1fY2FjaGVkUHJvcGVydHlUeXBlID0gQ3VzdG9tOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRDdXN0b21JbmRleChKU1ZhbHVlIHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCwg
R2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5kZXhWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKHNsb3RCYXNlKTsKLSAgICAgICAgICAgIEFTU0VSVChnZXRJbmRleFZhbHVlKTsKLSAg
ICAgICAgICAgIG1fZ2V0VmFsdWUgPSBJTkRFWF9HRVRURVJfTUFSS0VSOwotICAgICAgICAgICAg
bV9nZXRJbmRleFZhbHVlID0gZ2V0SW5kZXhWYWx1ZTsKLSAgICAgICAgICAgIG1fc2xvdEJhc2Ug
PSBzbG90QmFzZTsKLSAgICAgICAgICAgIG1fZGF0YS5pbmRleCA9IGluZGV4OwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBzZXRHZXR0ZXJTbG90KEpTT2JqZWN0KiBnZXR0ZXJGdW5jKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAgICBtX3Ro
aXNWYWx1ZSA9IG1fc2xvdEJhc2U7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gR0VUVEVSX0ZV
TkNUSU9OX01BUktFUjsKLSAgICAgICAgICAgIG1fZGF0YS5nZXR0ZXJGdW5jID0gZ2V0dGVyRnVu
YzsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdChKU1Zh
bHVlIHNsb3RCYXNlLCBKU09iamVjdCogZ2V0dGVyRnVuYywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAg
ICBtX2dldFZhbHVlID0gR0VUVEVSX0ZVTkNUSU9OX01BUktFUjsKLSAgICAgICAgICAgIG1fdGhp
c1ZhbHVlID0gbV9zbG90QmFzZTsKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsK
LSAgICAgICAgICAgIG1fZGF0YS5nZXR0ZXJGdW5jID0gZ2V0dGVyRnVuYzsKLSAgICAgICAgICAg
IG1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgbV9jYWNoZWRQcm9wZXJ0eVR5cGUgPSBH
ZXR0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFVuZGVmaW5lZCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgSlNWYWx1ZSBzbG90QmFzZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX3Nsb3RCYXNlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCYXNlKEpTVmFs
dWUgYmFzZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fc2xvdEJhc2UpOwotICAg
ICAgICAgICAgQVNTRVJUKGJhc2UpOwotICAgICAgICAgICAgbV9zbG90QmFzZSA9IGJhc2U7Ci0g
ICAgICAgIH0KKy8vIEVDTUEgMjYyLTMgOC42LjEKKy8vIFByb3BlcnR5IGF0dHJpYnV0ZXMKK2Vu
dW0gQXR0cmlidXRlIHsKKyAgICBOb25lICAgICAgID0gMCwKKyAgICBSZWFkT25seSAgID0gMSA8
PCAxLCAvLyBwcm9wZXJ0eSBjYW4gYmUgb25seSByZWFkLCBub3Qgd3JpdHRlbgorICAgIERvbnRF
bnVtICAgPSAxIDw8IDIsIC8vIHByb3BlcnR5IGRvZXNuJ3QgYXBwZWFyIGluIChmb3IgLi4gaW4g
Li4pCisgICAgRG9udERlbGV0ZSA9IDEgPDwgMywgLy8gcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRl
ZAorICAgIEZ1bmN0aW9uICAgPSAxIDw8IDQsIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBv
bmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKKyAgICBBY2Nlc3NvciAgID0gMSA8PCA1LCAv
LyBwcm9wZXJ0eSBpcyBhIGdldHRlci9zZXR0ZXIKK307CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2Ns
YXNzIEdldHRlclNldHRlcjsKK2NsYXNzIEpTT2JqZWN0OworCitjbGFzcyBQcm9wZXJ0eVNsb3Qg
eworcHVibGljOgorICAgIGVudW0gQ2FjaGVkUHJvcGVydHlUeXBlIHsKKyAgICAgICAgVW5jYWNo
ZWFibGUsCisgICAgICAgIEdldHRlciwKKyAgICAgICAgQ3VzdG9tLAorICAgICAgICBDdXN0b21J
bmRleCwKKyAgICAgICAgVmFsdWUKKyAgICB9OwogCi0gICAgICAgIHZvaWQgY2xlYXJCYXNlKCkK
LSAgICAgICAgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBKU1Zh
bHVlKCk7Ci0jZW5kaWYKLSAgICAgICAgfQorICAgIFByb3BlcnR5U2xvdCgpCisgICAgICAgIDog
bV9wcm9wZXJ0eVR5cGUoVW5jYWNoZWFibGUpCisgICAgICAgICwgbV9jYWNoZWFibGUoZmFsc2Up
CisgICAgICAgICwgbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcihmYWxzZSkKKyAgICB7Cisg
ICAgICAgIGNsZWFyQmFzZSgpOworICAgICAgICBjbGVhck9mZnNldCgpOworICAgIH0KKworICAg
IGV4cGxpY2l0IFByb3BlcnR5U2xvdChjb25zdCBKU1ZhbHVlIGJhc2UpCisgICAgICAgIDogbV9z
bG90QmFzZShiYXNlKQorICAgICAgICAsIG1fcHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQorICAg
ICAgICAsIG1fY2FjaGVhYmxlKGZhbHNlKQorICAgICAgICAsIG1faW5HZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZmFsc2UpCisgICAgeworICAgICAgICBjbGVhck9mZnNldCgpOworICAgIH0KKwor
ICAgIHR5cGVkZWYgSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBz
bG90QmFzZSwgUHJvcGVydHlOYW1lKTsKKyAgICB0eXBlZGVmIEpTVmFsdWUgKCpHZXRJbmRleFZh
bHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBzbG90QmFzZSwgdW5zaWduZWQpOworCisgICAg
SlNWYWx1ZSBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fZGF0YS52YWx1ZSk7CisgICAgICAg
IGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDdXN0b21JbmRleCkKKyAgICAgICAgICAgIHJldHVybiBt
X2RhdGEuY3VzdG9tSW5kZXguZ2V0SW5kZXhWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBtX2RhdGEu
Y3VzdG9tSW5kZXguaW5kZXgpOworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gR2V0dGVy
KQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGV4ZWMpOworICAgICAgICByZXR1
cm4gbV9kYXRhLmN1c3RvbS5nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBwcm9wZXJ0eU5hbWUp
OworICAgIH0KKworICAgIEpTVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUg
PT0gVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fZGF0YS52YWx1
ZSk7CisgICAgICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDdXN0b21JbmRleCkKKyAgICAgICAg
ICAgIHJldHVybiBtX2RhdGEuY3VzdG9tSW5kZXguZ2V0SW5kZXhWYWx1ZShleGVjLCBtX3Nsb3RC
YXNlLCBtX2RhdGEuY3VzdG9tSW5kZXguaW5kZXgpOworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5
cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGV4ZWMpOwor
ICAgICAgICByZXR1cm4gbV9kYXRhLmN1c3RvbS5nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIH0KKworICAgIENhY2hl
ZFByb3BlcnR5VHlwZSBjYWNoZWRQcm9wZXJ0eVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
YWJsZSA/IG1fcHJvcGVydHlUeXBlIDogVW5jYWNoZWFibGU7IH0KKyAgICBib29sIGlzQ2FjaGVh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWFibGU7IH0KKyAgICBib29sIGlzQ2FjaGVhYmxl
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlYWJsZSAmJiBtX3Byb3BlcnR5VHlwZSA9PSBW
YWx1ZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNDYWNoZWFibGUoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsK
KyAgICB9CisKKyAgICB2b2lkIHNldFZhbHVlV2l0aEJhc2UoSlNWYWx1ZSBzbG90QmFzZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVCh2
YWx1ZSk7CisgICAgICAgIGNsZWFyT2Zmc2V0KCk7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90
QmFzZTsKKyAgICAgICAgbV9kYXRhLnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAg
ICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBWYWx1ZTsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxz
ZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldChKU1ZhbHVlIHNsb3RCYXNlLCBKU1ZhbHVl
IHZhbHVlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
eworICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7
CisgICAgICAgIG1fZGF0YS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAg
IG1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IFZhbHVlOworICAg
ICAgICBtX2NhY2hlYWJsZSA9IHRydWU7CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CisgICAgfQorCisgICAgdm9pZCBzZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUpOwor
ICAgICAgICBjbGVhckJhc2UoKTsKKyAgICAgICAgY2xlYXJPZmZzZXQoKTsKKyAgICAgICAgbV9k
YXRhLnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgbV9wcm9wZXJ0eVR5
cGUgPSBWYWx1ZTsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRy
aWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldEN1c3RvbShKU1ZhbHVl
IHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisg
ICAgeworICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOworICAgICAgICBBU1NFUlQoZ2V0VmFsdWUp
OworICAgICAgICBtX2RhdGEuY3VzdG9tLmdldFZhbHVlID0gZ2V0VmFsdWU7CisgICAgICAgIG1f
c2xvdEJhc2UgPSBzbG90QmFzZTsKKyAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBDdXN0b207Cisg
ICAgICAgIG1fY2FjaGVhYmxlID0gZmFsc2U7CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJp
YnV0ZXM7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Q2FjaGVhYmxlQ3VzdG9tKEpTVmFsdWUg
c2xvdEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CisgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7
CisgICAgICAgIG1fZGF0YS5jdXN0b20uZ2V0VmFsdWUgPSBnZXRWYWx1ZTsKKyAgICAgICAgbV9z
bG90QmFzZSA9IHNsb3RCYXNlOworICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IEN1c3RvbTsKKyAg
ICAgICAgbV9jYWNoZWFibGUgPSB0cnVlOworICAgICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1
dGVzOworICAgIH0KKworICAgIHZvaWQgc2V0Q3VzdG9tSW5kZXgoSlNWYWx1ZSBzbG90QmFzZSwg
dW5zaWduZWQgaW5kZXgsIEdldEluZGV4VmFsdWVGdW5jIGdldEluZGV4VmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOworICAgICAgICBB
U1NFUlQoZ2V0SW5kZXhWYWx1ZSk7CisgICAgICAgIG1fZGF0YS5jdXN0b21JbmRleC5nZXRJbmRl
eFZhbHVlID0gZ2V0SW5kZXhWYWx1ZTsKKyAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOwor
ICAgICAgICBtX2RhdGEuY3VzdG9tSW5kZXguaW5kZXggPSBpbmRleDsKKyAgICAgICAgbV9wcm9w
ZXJ0eVR5cGUgPSBDdXN0b21JbmRleDsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAg
ICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldEFj
Y2Vzc29yU2xvdChHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgdW5zaWduZWQgYXR0cmlidXRl
cykKKyAgICB7CisgICAgICAgIEFTU0VSVChnZXR0ZXJTZXR0ZXIpOworICAgICAgICBtX2RhdGEu
YWNjZXNzb3IudGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKG1fc2xvdEJhc2UpOworICAgICAg
ICBtX2RhdGEuYWNjZXNzb3IuZ2V0dGVyU2V0dGVyID0gZ2V0dGVyU2V0dGVyOworICAgICAgICBt
X3Byb3BlcnR5VHlwZSA9IEdldHRlcjsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAg
ICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldENh
Y2hlYWJsZUFjY2Vzc29yU2xvdChKU1ZhbHVlIHNsb3RCYXNlLCBHZXR0ZXJTZXR0ZXIqIGdldHRl
clNldHRlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGdldHRlclNldHRlcik7CisgICAgICAgIG1fZGF0YS5hY2Nlc3Nv
ci50aGlzVmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUobV9zbG90QmFzZSk7CisgICAgICAgIG1fc2xv
dEJhc2UgPSBzbG90QmFzZTsKKyAgICAgICAgbV9kYXRhLmFjY2Vzc29yLmdldHRlclNldHRlciA9
IGdldHRlclNldHRlcjsKKyAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIG1fcHJv
cGVydHlUeXBlID0gR2V0dGVyOworICAgICAgICBtX2NhY2hlYWJsZSA9IHRydWU7CisgICAgICAg
IG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgfQorCisgICAgdm9pZCBzZXRVbmRlZmlu
ZWQoKQorICAgIHsKKyAgICAgICAgc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhqc1VuZGVmaW5lZCgp
LCBOb25lKTsKKyAgICB9CisKKyAgICBKU1ZhbHVlIHNsb3RCYXNlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3Nsb3RCYXNlOworICAgIH0KKworICAgIHZvaWQgc2V0QmFzZShKU1Zh
bHVlIGJhc2UpCisgICAgeworICAgICAgICBBU1NFUlQobV9zbG90QmFzZSk7CisgICAgICAgIEFT
U0VSVChiYXNlKTsKKyAgICAgICAgbV9zbG90QmFzZSA9IGJhc2U7CisgICAgfQogCi0gICAgICAg
IHZvaWQgY2xlYXJWYWx1ZSgpCi0gICAgICAgIHsKKyAgICB2b2lkIGNsZWFyQmFzZSgpCisgICAg
ewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CisgICAg
ICAgIG1fc2xvdEJhc2UgPSBKU1ZhbHVlKCk7CiAjZW5kaWYKLSAgICAgICAgfQorICAgIH0KIAot
ICAgICAgICB2b2lkIGNsZWFyT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2xl
YXIgb2Zmc2V0IGV2ZW4gaW4gcmVsZWFzZSBidWlsZHMsIGluIGNhc2UgdGhpcyBQcm9wZXJ0eVNs
b3QgaGFzIGJlZW4gdXNlZCBiZWZvcmUuCi0gICAgICAgICAgICAvLyAoRm9yIG90aGVyIGRhdGEg
bWVtYmVycywgd2UgZG9uJ3QgbmVlZCB0byBjbGVhciBhbnl0aGluZyBiZWNhdXNlIHJldXNlIHdv
dWxkIG1lYW5pbmdmdWxseSBvdmVyd3JpdGUgdGhlbS4pCi0gICAgICAgICAgICBtX29mZnNldCA9
IGludmFsaWRPZmZzZXQ7Ci0gICAgICAgICAgICBtX2NhY2hlZFByb3BlcnR5VHlwZSA9IFVuY2Fj
aGVhYmxlOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEuaW5kZXg7IH0KLQotICAgICAgICBHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVy
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fY2FjaGVkUHJvcGVydHlU
eXBlID09IEN1c3RvbSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZTsKLSAgICAgICAg
fQotICAgIHByaXZhdGU6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZnVuY3Rp
b25HZXR0ZXIoRXhlY1N0YXRlKikgY29uc3Q7Ci0KLSAgICAgICAgR2V0VmFsdWVGdW5jIG1fZ2V0
VmFsdWU7Ci0gICAgICAgIEdldEluZGV4VmFsdWVGdW5jIG1fZ2V0SW5kZXhWYWx1ZTsKLSAgICAg
ICAgCi0gICAgICAgIEpTVmFsdWUgbV9zbG90QmFzZTsKLSAgICAgICAgdW5pb24gewotICAgICAg
ICAgICAgSlNPYmplY3QqIGdldHRlckZ1bmM7CisgICAgdm9pZCBjbGVhck9mZnNldCgpCisgICAg
eworICAgICAgICAvLyBDbGVhciBvZmZzZXQgZXZlbiBpbiByZWxlYXNlIGJ1aWxkcywgaW4gY2Fz
ZSB0aGlzIFByb3BlcnR5U2xvdCBoYXMgYmVlbiB1c2VkIGJlZm9yZS4KKyAgICAgICAgLy8gKEZv
ciBvdGhlciBkYXRhIG1lbWJlcnMsIHdlIGRvbid0IG5lZWQgdG8gY2xlYXIgYW55dGhpbmcgYmVj
YXVzZSByZXVzZSB3b3VsZCBtZWFuaW5nZnVsbHkgb3ZlcndyaXRlIHRoZW0uKQorICAgICAgICBt
X29mZnNldCA9IGludmFsaWRPZmZzZXQ7CisgICAgICAgIG1fcHJvcGVydHlUeXBlID0gVW5jYWNo
ZWFibGU7CisgICAgICAgIG1fY2FjaGVhYmxlID0gZmFsc2U7CisgICAgfQorCisgICAgR2V0VmFs
dWVGdW5jIGN1c3RvbUdldHRlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9jYWNo
ZWFibGUgJiYgbV9wcm9wZXJ0eVR5cGUgPT0gQ3VzdG9tKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0
YS5jdXN0b20uZ2V0VmFsdWU7CisgICAgfQorCisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGJvb2wgd3JpdGFibGUoKSBjb25zdCB7
IHJldHVybiAhKG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5KTsgfQorICAgIGJvb2wgZW51bWVyYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuICEobV9hdHRyaWJ1dGVzICYgRG9udEVudW0pOyB9CisgICAgYm9v
bCBjb25maWd1cmFibGUoKSBjb25zdCB7IHJldHVybiAhKG1fYXR0cmlidXRlcyAmIERvbnREZWxl
dGUpOyB9CisKKyAgICBib29sIGlzQWNjZXNzb3IoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5
VHlwZSA9PSBHZXR0ZXI7IH0KKyAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcigpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNBY2Nlc3NvcigpKTsKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YS5hY2Nlc3Nvci5nZXR0ZXJTZXR0ZXI7CisgICAgfQorCisgICAgdm9pZCBzZXRJbkdldE93
blByb3BlcnR5RGVzY3JpcHRvcigpIHsgbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHRy
dWU7IH0KKyAgICBib29sIGluR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgfQorCitwcml2YXRlOgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKikgY29uc3Q7CisK
KyAgICBKU1ZhbHVlIG1fc2xvdEJhc2U7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3Qgewor
ICAgICAgICAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXI7CisgICAgICAgICAgICBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWU7CisgICAgICAgIH0gYWNjZXNzb3I7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWU7CisgICAgICAgIH0gY3VzdG9t
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5k
ZXhWYWx1ZTsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4OwotICAgICAgICB9IG1fZGF0YTsK
LQotICAgICAgICBKU1ZhbHVlIG1fdmFsdWU7Ci0gICAgICAgIEpTVmFsdWUgbV90aGlzVmFsdWU7
Ci0KLSAgICAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgICAgIENhY2hlZFByb3Bl
cnR5VHlwZSBtX2NhY2hlZFByb3BlcnR5VHlwZTsKLSAgICB9OworICAgICAgICB9IGN1c3RvbUlu
ZGV4OworICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICB9IG1fZGF0YTsKKworICAg
IFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIENhY2hlZFByb3BlcnR5VHlwZSBtX3Byb3Bl
cnR5VHlwZTsKKyAgICB1aW50OF90IG1fYXR0cmlidXRlczsKKyAgICBib29sIG1fY2FjaGVhYmxl
OworICAgIGJvb2wgbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKK307CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1OCwxMSArMTU4LDYgQEAgYm9vbCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVy
dHlTbAogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8UmVnRXhwQ29uc3RydWN0b3IsIElu
dGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZShl
eGVjKSwganNDYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKLWJvb2wgUmVnRXhwQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0
U3RhdGljVmFsdWVEZXNjcmlwdG9yPFJlZ0V4cENvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9u
PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cENvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxS
ZWdFeHBDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19
Ci0KIEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIxKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0
cnVjdG9yKHNsb3RCYXNlKS0+Z2V0QmFja3JlZihleGVjLCAxKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24g
MTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAK
ICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZp
c2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtODQsMTMgKzg0LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBSZWdFeHBNYXRj
aGVzQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4ob2JqZWN0
KTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5
KGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAg
ICB9Ci0KICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHYsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKICAgICAgICAgewogICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PFJlZ0V4cE1hdGNoZXNBcnJheSo+KGNlbGwpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MywyMiArOTMsMTIgQEAgYm9vbCBSZWdFeHBPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdChKUwogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxhc3RJbmRleCkgewogICAgICAgICBSZWdFeHBPYmplY3QqIHJlZ0V4cCA9
IGFzUmVnRXhwT2JqZWN0KGNlbGwpOwotICAgICAgICBzbG90LnNldFZhbHVlKHJlZ0V4cCwgcmVn
RXhwLT5nZXRMYXN0SW5kZXgoKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQmFzZShyZWdF
eHAsIHJlZ0V4cC0+Z2V0TGFzdEluZGV4KCksIHJlZ0V4cC0+bV9sYXN0SW5kZXhJc1dyaXRhYmxl
ID8gRG9udERlbGV0ZSB8IERvbnRFbnVtIDogRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9u
bHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGdldFN0YXRpY1Zh
bHVlU2xvdDxSZWdFeHBPYmplY3QsIEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFRh
YmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKLWJvb2wgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KSB7Ci0gICAgICAgIFJlZ0V4cE9i
amVjdCogcmVnRXhwID0gYXNSZWdFeHBPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKHJlZ0V4cC0+Z2V0TGFzdEluZGV4KCksIHJlZ0V4cC0+bV9sYXN0SW5k
ZXhJc1dyaXRhYmxlID8gRG9udERlbGV0ZSB8IERvbnRFbnVtIDogRG9udERlbGV0ZSB8IERvbnRF
bnVtIHwgUmVhZE9ubHkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxSZWdFeHBPYmplY3QsIEpTT2JqZWN0PihleGVjLCBF
eGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ob2JqZWN0
KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogYm9vbCBSZWdFeHBPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxhc3RJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBleGVjKEV4ZWNTdGF0ZSosIEpTU3Ry
aW5nKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3
MCw2IEBAIGJvb2wgUmVnRXhwUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICByZXR1
cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PFJlZ0V4cE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpy
ZWdFeHBQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PFJlZ0V4cFByb3RvdHlwZSo+KGNlbGwp
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIFJlZ0V4cFByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQot
ewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8UmVnRXhwT2JqZWN0Pihl
eGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhw
UHJvdG90eXBlKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1
bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTcgKzEyOCwx
MSBAQCB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmCiAgICAgQVNTRVJU
KHZhbHVlKTsKIAogICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7Ci0g
ICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0
dHJpYnV0ZXModmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7Ci0g
ICAgaWYgKCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworICAgIHNs
b3Quc2V0QWNjZXNzb3JTbG90KGFzR2V0dGVyU2V0dGVyKHZhbHVlKSwgYXR0cmlidXRlcyk7CiB9
CiAKIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0Nv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUsMTEgKzY1LDYgQEAgYm9vbCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlT
bAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SW50ZXJuYWxGdW5jdGlvbj4oZXhl
YywgRXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3RyaW5n
Q29uc3RydWN0b3IqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBTdHJp
bmdDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2Ny
aXB0b3I8SW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgRXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3Rv
clRhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3RyaW5nQ29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSBzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3RhdGUq
IGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0
YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCwxNCArNjAsNiBAQCBib29sIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJCiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAotYm9vbCBT
dHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxW
YWx1ZSgpLT5nZXRTdHJpbmdQcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7ICAgIAotICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZvaWQgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAg
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MywxMSArMTUzLDYgQEAgYm9vbCBTdHJpbmdQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xv
dAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8U3RyaW5nT2JqZWN0PihleGVjLCBF
eGVjU3RhdGU6OnN0cmluZ1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3RyaW5nUHJvdG90eXBlKj4oY2Vs
bCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgU3RyaW5nUHJvdG90eXBlOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Ci17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxTdHJpbmdPYmplY3Q+
KGV4ZWMsIEV4ZWNTdGF0ZTo6c3RyaW5nVGFibGUoZXhlYyksIGpzQ2FzdDxTdHJpbmdQcm90b3R5
cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIC8vIEhlbHBlciBmb3IgcHJvZHVjaW5nIGEgSlNTdHJpbmcgZm9yICdzdHJpbmcnLCB3
aGVyZSAnc3RyaW5nJyB3YXMgYmVlbiBwcm9kdWNlZCBieQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDQwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQ5LDggKzI0OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkKiBhdHRyaWJ1dGVzID0gMCk7CisgICAgICAgIFByb3BlcnR5
T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgdW5zaWdu
ZWQqIGF0dHJpYnV0ZXMgPSAwKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlP
ZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOwogCiAgICAgICAgIGJvb2wgaGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
czsgfQpAQCAtNDc5LDcgKzQ3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4g
bmV3U3RydWN0dXJlOwogICAgIH0KICAgICAgICAgCi0gICAgaW5saW5lIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKKyAgICBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCogYXR0cmlidXRlcykKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJ
bmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeShnbG9iYWxEYXRhKTsKQEAgLTQ4NywxMCArNDg3LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKICAgICAgICAgUHJvcGVydHlNYXBF
bnRyeSogZW50cnkgPSBtX3Byb3BlcnR5VGFibGUtPmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5m
aXJzdDsKLSAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZz
ZXQ7CisgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMpCisgICAgICAgICAgICAqYXR0cmlidXRlcyA9IGVu
dHJ5LT5hdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gZW50cnktPm9mZnNldDsKICAgICB9CiAK
LSAgICBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSkKKyAgICBpbmxpbmUgUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6
OlN0cmluZyYgbmFtZSwgdW5zaWduZWQqIGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwogICAgICAgICBtYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7CkBAIC00OTgsNyArNTAyLDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAK
ICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBtX3Byb3BlcnR5VGFibGUtPmZpbmRX
aXRoU3RyaW5nKG5hbWUuaW1wbCgpKS5maXJzdDsKLSAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50
cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7CisgICAgICAgIGlmICghZW50cnkpCisgICAgICAg
ICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMpCisgICAg
ICAgICAgICAqYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4g
ZW50cnktPm9mZnNldDsKICAgICB9CiAgICAgCiAgICAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjpt
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
KQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODMgQEAKKzIwMTMtMDEtMjIgIEdhdmlu
IEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNzQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgcHJhY3RpY2FsbHkgcmVkdW5kYW50IHdpdGggZ2V0T3du
UHJvcGVydHlTbG90LgorICAgICAgICAgICAgLSByZW1vdmUgYWxsIGltcGxlbWVudGF0aW9ucyBv
ZiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IuCisgICAgICAgICAgICAtIHBhc3MgYXR0cmlidXRl
cyB0byBnZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAgICAgICAgICAtIHJlbmFtZWQgSlNDdXN0b21H
ZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLCByZW1vdmVkCisgICAgICAgICAgICAgICdB
bmREZXNjcmlwdG9yJy4KKyAgICAgICAgICAgIC0gYWRkZWQgYSB3b3JrYXJvdW5kIHRvIEpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QsCisgICAgICAgICAgICAgIGdldE93blByb3BlcnR5
U2xvdCBkb2VzIG5vdCBiZWhhdmUgY29ycmVjdGx5IHdydCAnb3duJ25lc3MsCisgICAgICAgICAg
ICAgIHJldHVybnMgcHJvcGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluLiBNYWludGFpbiBw
cmV2aW91cworICAgICAgICAgICAgICBiZWhhdmlvdXIgZm9yIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvci4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NT
U1N0eWxlRGVjbGFyYXRpb246OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
SGlzdG9yeTo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZSk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRG
dW5jdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
V29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlR2V0
T3duUHJvcGVydHlTbG90Qm9keSk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAg
IChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JE
ZWNsYXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dDoKKyAgICAgICAg
KiBicmlkZ2UvanNjL0JyaWRnZUpTQy5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFu
Y2U6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19ydW50
aW1lLmg6CisgICAgICAgIChPYmpjRmFsbGJhY2tPYmplY3RJbXApOgorICAgICAgICAqIGJyaWRn
ZS9vYmpjL29iamNfcnVudGltZS5tbToKKyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVB
cnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogYnJpZGdlL3J1bnRp
bWVfYXJyYXkuaDoKKyAgICAgICAgKFJ1bnRpbWVBcnJheSk6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZU1ldGhvZDo6Z2V0T3duUHJv
cGVydHlTbG90KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmg6CisgICAgICAgIChSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGlt
ZV9vYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKiBicmlkZ2Uv
cnVudGltZV9vYmplY3QuaDoKKyAgICAgICAgKFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGNz
cy9DU1NTdHlsZURlY2xhcmF0aW9uLmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVt
ZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsOgorICAgICAgICAq
IGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuaWRsOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5pZGw6
CisgICAgICAgICogcGFnZS9Mb2NhdGlvbi5pZGw6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmlkbDoKKwogMjAxMy0wMS0yMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEF0b21pY01hcmt1cFRva2VuQmFzZSBtdXN0IGRpZQpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgyLDcgKzI0ODIsNiBAQCBfX1pON1dlYkNvcmU0
UGFnZTE4c2V0VmlzaWJpbGl0eVN0YXRlRU5TCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDExZ2V0
Q2FsbERhdGFFUE5TXzZKU0NlbGxFUk5TXzhDYWxsRGF0YUUKIF9fWk4zSlNDMTNSdW50aW1lTWV0
aG9kMTRmaW5pc2hDcmVhdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUktOM1dURjZTdHJpbmdFCiBf
X1pOM0pTQzEzUnVudGltZU1ldGhvZDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU182SlNDZWxsRVBO
U185RXhlY1N0YXRlRU5TXzEyUHJvcGVydHlOYW1lRVJOU18xMlByb3BlcnR5U2xvdEUKLV9fWk4z
SlNDMTNSdW50aW1lTWV0aG9kMjRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JFUE5TXzhKU09iamVj
dEVQTlNfOUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMThQcm9wZXJ0eURlc2NyaXB0
b3JFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDZzX2luZm9FCiBfX1pOM0pTQzEzUnVudGltZU1l
dGhvZEMyRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRVBOU184QmluZGluZ3M2
TWV0aG9kRQogX19aTjNKU0M4QmluZGluZ3MxMFJvb3RPYmplY3REMUV2CkBAIC0yNDkzLDcgKzI0
OTIsNiBAQCBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdDE0ZmluaXNoCiBfX1pOM0pT
QzhCaW5kaW5nczEzUnVudGltZU9iamVjdDE2Z2V0Q29uc3RydWN0RGF0YUVQTlNfNkpTQ2VsbEVS
TlNfMTNDb25zdHJ1Y3REYXRhRQogX19aTjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3QxOGdl
dE93blByb3BlcnR5U2xvdEVQTlNfNkpTQ2VsbEVQTlNfOUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5
TmFtZUVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVj
dDE5Z2V0T3duUHJvcGVydHlOYW1lc0VQTlNfOEpTT2JqZWN0RVBOU185RXhlY1N0YXRlRVJOU18x
N1Byb3BlcnR5TmFtZUFycmF5RU5TXzE1RW51bWVyYXRpb25Nb2RlRQotX19aTjNKU0M4QmluZGlu
Z3MxM1J1bnRpbWVPYmplY3QyNGdldE93blByb3BlcnR5RGVzY3JpcHRvckVQTlNfOEpTT2JqZWN0
RVBOU185RXhlY1N0YXRlRU5TXzEyUHJvcGVydHlOYW1lRVJOU18xOFByb3BlcnR5RGVzY3JpcHRv
ckUKIF9fWk4zSlNDOEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0M3B1dEVQTlNfNkpTQ2VsbEVQTlNf
OUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVOU183SlNWYWx1ZUVSTlNfMTVQdXRQcm9wZXJ0
eVNsb3RFCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdDZzX2luZm9FCiBfX1pOM0pT
QzhCaW5kaW5nczEzUnVudGltZU9iamVjdDdkZXN0cm95RVBOU182SlNDZWxsRQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFy
YXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjgsMjQgKzMyOCw5IEBAIGJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRPd25Qcm9w
ZXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHByb3BlcnR5SW5mby5oYWRQaXhl
bE9yUG9zUHJlZml4KQotICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCksIGNzc1Byb3BlcnR5R2V0dGVy
UGl4ZWxPclBvc1ByZWZpeENhbGxiYWNrKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0
aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlJbmZvLnByb3BlcnR5SUQpLCBjc3NQ
cm9wZXJ0eUdldHRlclBpeGVsT3JQb3NQcmVmaXhDYWxsYmFjaywgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pOwogICAgIGVsc2UKLSAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0
aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlJbmZvLnByb3BlcnR5SUQpLCBjc3NQ
cm9wZXJ0eUdldHRlckNhbGxiYWNrKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBKU0NT
U1N0eWxlRGVjbGFyYXRpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eUlkZW50aWZpZXIsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIENTU1Byb3BlcnR5SW5m
byBwcm9wZXJ0eUluZm8gPSBjc3NQcm9wZXJ0eUlERm9ySlNDU1NQcm9wZXJ0eU5hbWUocHJvcGVy
dHlJZGVudGlmaWVyKTsKLSAgICBpZiAoIXByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlOwotICAgIGlmIChwcm9wZXJ0eUlu
Zm8uaGFkUGl4ZWxPclBvc1ByZWZpeCkKLSAgICAgICAgdmFsdWUgPSBjc3NQcm9wZXJ0eUdldHRl
clBpeGVsT3JQb3NQcmVmaXgoZXhlYywgdGhpcywgcHJvcGVydHlJbmZvLnByb3BlcnR5SUQpOwot
ICAgIGVsc2UKLSAgICAgICAgdmFsdWUgPSBjc3NQcm9wZXJ0eUdldHRlcihleGVjLCB0aGlzLCBw
cm9wZXJ0eUluZm8ucHJvcGVydHlJRCk7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZh
bHVlLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgICAgIHNsb3Quc2V0
Q3VzdG9tSW5kZXgodGhpcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5SW5mby5wcm9w
ZXJ0eUlEKSwgY3NzUHJvcGVydHlHZXR0ZXJDYWxsYmFjaywgUmVhZE9ubHkgfCBEb250RGVsZXRl
IHwgRG9udEVudW0pOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAxNDA0
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsMTEgQEAgc3RhdGljIEpTVmFsdWUgbmFtZWRJ
dGVtR2V0dGVyKEV4ZWNTdGF0ZQogYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKKworICAgIC8vIE5ldmVyIGFsbG93IGNyb3NzLWRv
bWFpbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IKKyAgICBpZiAoc2xvdC5pbkdldE93blByb3Bl
cnR5RGVzY3JpcHRvcigpICYmICFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCiAgICAgLy8gV2hlbiBhY2Nlc3NpbmcgYSBXaW5kb3cgY3Jvc3MtZG9tYWluLCBmdW5jdGlv
bnMgYXJlIGFsd2F5cyB0aGUgbmF0aXZlIGJ1aWx0LWluIG9uZXMsIGFuZCB0aGV5CiAgICAgLy8g
YXJlIG5vdCBhZmZlY3RlZCBieSBwcm9wZXJ0aWVzIGNoYW5nZWQgb24gdGhlIFdpbmRvdyBvciBh
bnl0aGluZyBpbiBpdHMgcHJvdG90eXBlIGNoYWluLgogICAgIC8vIFRoaXMgaXMgY29uc2lzdGVu
dCB3aXRoIHRoZSBiZWhhdmlvciBvZiBGaXJlZm94LgpAQCAtMTQwLDEyICsxNDUsMTIgQEAgYm9v
bCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwogICAgICAgICAvLyBJdCBpZ25v
cmVzIGFueSBjdXN0b20gcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHNldCBvbiB0aGUgRE9NV2lu
ZG93IChpbmNsdWRpbmcgYSBjdXN0b20gcHJvdG90eXBlKS4KICAgICAgICAgZW50cnkgPSBzX2lu
Zm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAg
ICAgaWYgKGVudHJ5ICYmICEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pICYm
IGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpID09IGpzRE9NV2luZG93Q2xvc2VkKSB7Ci0gICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7
CisgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlH
ZXR0ZXIoKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZW50cnkgPSBKU0RPTVdpbmRvd1Byb3Rv
dHlwZTo6c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIGlmIChlbnRyeSAmJiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVu
Y3Rpb24pICYmIGVudHJ5LT5mdW5jdGlvbigpID09IGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rp
b25DbG9zZSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2Fj
aGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9z
ZSwgMD4pOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2FjaGlu
Z1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSwg
MD4sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAKQEAgLTE3NSwyMiArMTgwLDIyIEBAIGJvb2wgSlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVz
KCkgJiBKU0M6OkZ1bmN0aW9uKSB7CiAgICAgICAgICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkg
PT0ganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkJsdXIpIHsKICAgICAgICAgICAgICAgICBp
ZiAoIWFsbG93c0FjY2VzcykgewotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90
b3R5cGVGdW5jdGlvbkJsdXIsIDA+KTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93
UHJvdG90eXBlRnVuY3Rpb25CbHVyLCAwPiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNET01XaW5kb3dQcm90b3R5cGVGdW5j
dGlvbkNsb3NlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvd3NBY2Nlc3MpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRp
Y0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSwgMD4pOwor
ICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5n
U3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlLCAw
PiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0
aW9uKCkgPT0ganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkZvY3VzKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKCFhbGxvd3NBY2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRD
dXN0b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2lu
ZG93UHJvdG90eXBlRnVuY3Rpb25Gb2N1cywgMD4pOworICAgICAgICAgICAgICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNE
T01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkZvY3VzLCAwPiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNET01XaW5kb3dQcm90
b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvd3NB
Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rp
b25Qb3N0TWVzc2FnZSwgMj4pOworICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90
b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlLCAyPiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNET01XaW5kb3dQcm90b3R5cGVG
dW5jdGlvblNob3dNb2RhbERpYWxvZykgewpAQCAtMjA0LDcgKzIwOSw3IEBAIGJvb2wgSlNET01X
aW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICAgICAgLy8gQWxsb3cgYWNjZXNzIHRv
IHRvU3RyaW5nKCkgY3Jvc3MtZG9tYWluLCBidXQgYWx3YXlzIE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmcuCiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LnRvU3RyaW5nKSB7CiAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgewotICAgICAgICAg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25H
ZXR0ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG9iamVj
dFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMjEyLDcgKzIxNyw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xv
dChKU0MKIAogICAgIGVudHJ5ID0gSlNET01XaW5kb3c6OnNfaW5mby5wcm9wSGFzaFRhYmxlKGV4
ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChlbnRyeSkgewotICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Cisg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigp
LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC0yMjIsNyArMjI3LDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpT
QwogICAgIC8vIGFyZSBpbiBNb3ogYnV0IG5vdCBJRS4gU2luY2Ugd2UgaGF2ZSBzb21lIG9mIHRo
ZXNlLCB3ZSBoYXZlIHRvIGRvCiAgICAgLy8gaXQgdGhlIE1veiB3YXkuCiAgICAgaWYgKHRoaXNP
YmplY3QtPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5zY29wZWRDaGlsZChwcm9wZXJ0eU5hbWVU
b0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhp
c09iamVjdCwgY2hpbGRGcmFtZUdldHRlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVu
dW0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIzMCw3ICsyMzUsMTIgQEAg
Ym9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwogICAgIC8vIHByZWNlZGVu
Y2Ugb3ZlciB0aGUgaW5kZXggYW5kIG5hbWUgZ2V0dGVycy4gIAogICAgIEpTVmFsdWUgcHJvdG8g
PSB0aGlzT2JqZWN0LT5wcm90b3R5cGUoKTsKICAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkgewot
ICAgICAgICBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSkgeworICAgICAgICAvLyBXb3JrYXJvdW5kIHRvIGtlZXAgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yIHdvcmtpbmc7IHJldHVybiBmYWxzZSBpZiB0aGUgcHJvcGVydHkgaXMg
bm90IHJlYWxseSAnb3duJy4KKyAgICAgICAgaWYgKHNsb3QuaW5HZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoKSkgeworICAgICAgICAgICAgUHJvcGVydHlTbG90IHByb3RvU2xvdDsKKyAgICAgICAg
ICAgIGlmIChhc09iamVjdChwcm90byktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5h
bWUsIHByb3RvU2xvdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
IGVsc2UgaWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCkpIHsKICAgICAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzKSB7CiAgICAgICAg
ICAgICAgICAgdGhpc09iamVjdC0+cHJpbnRFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTsKICAg
ICAgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwpAQCAtMjQ2LDcgKzI1Niw3IEBAIGJv
b2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICB1bnNpZ25lZCBpID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPmltcGwoKS0+
ZnJhbWUoKS0+dHJlZSgpLT5zY29wZWRDaGlsZENvdW50KCkpIHsKICAgICAgICAgQVNTRVJUKGkg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKLSAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRl
eCh0aGlzT2JqZWN0LCBpLCBpbmRleEdldHRlcik7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5k
ZXgodGhpc09iamVjdCwgaSwgaW5kZXhHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNjEsNyArMjcxLDcg
QEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwogICAgIGlmIChkb2N1
bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9t
aWNQcm9wZXJ0eU5hbWUgPSBmaW5kQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgICAg
IGlmIChhdG9taWNQcm9wZXJ0eU5hbWUgJiYgKHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRv
Y3VtZW50KS0+aGFzTmFtZWRJdGVtKGF0b21pY1Byb3BlcnR5TmFtZSkgfHwgZG9jdW1lbnQtPmhh
c0VsZW1lbnRXaXRoSWQoYXRvbWljUHJvcGVydHlOYW1lKSkpIHsKLSAgICAgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVkSXRlbUdldHRlcik7CisgICAgICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lZEl0ZW1HZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjcyLDcgKzI4MiwxMSBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDCiBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2lu
ZG93Kj4oY2VsbCk7Ci0gICAgCisKKyAgICAvLyBOZXZlciBhbGxvdyBjcm9zcy1kb21haW4gZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yCisgICAgaWYgKHNsb3QuaW5HZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoKSAmJiAhQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93
KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAg
IGlmICghdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgaGF2ZSBhIG1lc3NhZ2UgaGVyZSB0aGF0IGV4cGxhaW5zIHdoeSB0aGUgcHJvcGVy
dHkgYWNjZXNzL2Z1bmN0aW9uIGNhbGwgd2FzCiAgICAgICAgIC8vIG5vdCBhbGxvd2VkLiAKQEAg
LTI5OSw3ICszMTMsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
CiAgICAgLy8gYXJlIGluIE1veiBidXQgbm90IElFLiBTaW5jZSB3ZSBoYXZlIHNvbWUgb2YgdGhl
c2UsIHdlIGhhdmUgdG8gZG8KICAgICAvLyBpdCB0aGUgTW96IHdheS4KICAgICBpZiAodGhpc09i
amVjdC0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkKHByb3BlcnR5TmFtZVRv
QXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXNPYmplY3QsIGNoaWxkRnJhbWVHZXR0ZXIpOworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
T2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51
bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTMwNyw3ICszMjEsMTIg
QEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIC8vIHByZWNl
ZGVuY2Ugb3ZlciB0aGUgaW5kZXggYW5kIG5hbWUgZ2V0dGVycy4gIAogICAgIEpTVmFsdWUgcHJv
dG8gPSB0aGlzT2JqZWN0LT5wcm90b3R5cGUoKTsKICAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkg
ewotICAgICAgICBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5k
ZXgsIHNsb3QpKSB7CisgICAgICAgIC8vIFdvcmthcm91bmQgdG8ga2VlcCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3Igd29ya2luZzsgcmV0dXJuIGZhbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3Qg
cmVhbGx5ICdvd24nLgorICAgICAgICBpZiAoc2xvdC5pbkdldE93blByb3BlcnR5RGVzY3JpcHRv
cigpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3QgcHJvdG9TbG90OworICAgICAgICAgICAg
aWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwg
cHJvdG9TbG90KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxz
ZSBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3Qp
KSB7CiAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgewogICAgICAgICAgICAgICAgIHRo
aXNPYmplY3QtPnByaW50RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CiAgICAgICAgICAgICAg
ICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKQEAgLTMyMiw3ICszNDEsNyBAQCBib29sIEpTRE9NV2lu
ZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluCiAgICAgLy8gYWxsb3cgd2luZG93WzFdIG9yIHBh
cmVudFsxXSBldGMuICgjNTY5ODMpCiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+aW1wbCgp
LT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkQ291bnQoKSkgewogICAgICAgICBBU1NFUlQo
aW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKLSAgICAgICAgc2xvdC5zZXRDdXN0
b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpOworICAgICAgICBzbG90LnNl
dEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCBpbmRleEdldHRlciwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTMzNyw3ICszNTYsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
CiAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIEF0b21pY1N0
cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9taWNTdHJpbmcocHJvcGVydHlO
YW1lKTsKICAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiAoc3RhdGljX2Nhc3Q8SFRN
TERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSB8
fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQcm9wZXJ0eU5hbWUpKSkgewotICAg
ICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZWRJdGVtR2V0dGVyKTsKKyAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVkSXRlbUdldHRlciwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDUsNzkgKzM2NCw2IEBAIGJvb2wgSlNET01XaW5kb3c6
OmdldE93blByb3BlcnR5U2xvdEJ5SW4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7CiB9CiAKLWJvb2wgSlNE
T01XaW5kb3c6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKLXsKLSAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0RPTVdpbmRvdyo+KG9iamVjdCk7Ci0gICAgLy8gTmV2ZXIgYWxsb3cgY3Jvc3MtZG9tYWluIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcgotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnk7Ci0gICAgCi0gICAg
Ly8gV2UgZG9uJ3Qgd2FudCBhbnkgcHJvcGVydGllcyBvdGhlciB0aGFuICJjbG9zZSIgYW5kICJj
bG9zZWQiIG9uIGEgY2xvc2VkIHdpbmRvdy4KLSAgICBpZiAoIXRoaXNPYmplY3QtPmltcGwoKS0+
ZnJhbWUoKSkgewotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgc2FmZSBmb3IgY3Jv
c3MtZG9tYWluIGFuZCBzYW1lIGRvbWFpbiB1c2UuCi0gICAgICAgIC8vIEl0IGlnbm9yZXMgYW55
IGN1c3RvbSBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgYmUgc2V0IG9uIHRoZSBET01XaW5kb3cgKGlu
Y2x1ZGluZyBhIGN1c3RvbSBwcm90b3R5cGUpLgotICAgICAgICBlbnRyeSA9IHNfaW5mby5wcm9w
SGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAo
ZW50cnkgJiYgIShlbnRyeS0+YXR0cmlidXRlcygpICYgSlNDOjpGdW5jdGlvbikgJiYgZW50cnkt
PnByb3BlcnR5R2V0dGVyKCkgPT0ganNET01XaW5kb3dDbG9zZWQpIHsKLSAgICAgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc0Jvb2xlYW4odHJ1ZSksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGVudHJ5ID0gSlNET01XaW5kb3dQcm90b3R5cGU6OnNfaW5mby5wcm9wSGFzaFRhYmxl
KGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoZW50cnkgJiYg
KGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSAmJiBlbnRyeS0+ZnVuY3Rpb24o
KSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UpIHsKLSAgICAgICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90OwotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rp
b25DbG9zZSwgMD4pOwotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3Qu
Z2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9u
dEVudW0pOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZGVz
Y3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgZW50cnkgPSBKU0RPTVdpbmRvdzo6c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5
KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICAgIFByb3BlcnR5
U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJv
cGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90Lmdl
dFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIGNoaWxkIGZyYW1l
cyBieSBuYW1lIGJlZm9yZSBidWlsdC1pbiBwcm9wZXJ0aWVzIHRvCi0gICAgLy8gbWF0Y2ggTW96
aWxsYS4gVGhpcyBkb2VzIG5vdCBtYXRjaCBJRSwgYnV0IHNvbWUgc2l0ZXMgZW5kIHVwCi0gICAg
Ly8gbmFtaW5nIGZyYW1lcyB0aGluZ3MgdGhhdCBjb25mbGljdCB3aXRoIHdpbmRvdyBwcm9wZXJ0
aWVzIHRoYXQKLSAgICAvLyBhcmUgaW4gTW96IGJ1dCBub3QgSUUuIFNpbmNlIHdlIGhhdmUgc29t
ZSBvZiB0aGVzZSwgd2UgaGF2ZSB0byBkbwotICAgIC8vIGl0IHRoZSBNb3ogd2F5LgotICAgIGlm
ICh0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hpbGQocHJvcGVy
dHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSkpIHsKLSAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNoaWxkRnJhbWVH
ZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShl
eGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUo
KS0+dHJlZSgpLT5zY29wZWRDaGlsZENvdW50KCkpIHsKLSAgICAgICAgQVNTRVJUKGkgIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KTsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAg
ICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaSwgaW5kZXhHZXR0ZXIpOwotICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIC8vIEFsbG93IHNob3J0Y3V0cyBsaWtlICdJbWFnZTEnIGlu
c3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1l
bnQtPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWlj
UHJvcGVydHlOYW1lID0gZmluZEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpOwotICAgICAgICBp
ZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1
bWVudCktPmhhc05hbWVkSXRlbShhdG9taWNQcm9wZXJ0eU5hbWUpIHx8IGRvY3VtZW50LT5oYXNF
bGVtZW50V2l0aElkKGF0b21pY1Byb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdDsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVk
SXRlbUdldHRlcik7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5n
ZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250
RW51bSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZvaWQgSlNET01XaW5kb3c6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTRE9NV2lu
ZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEx
ICszOCw2IEBAIGJvb2wgSlNIVE1MQXBwbGV0RWxlbWVudDo6Z2V0T3duUHJvcGVydHkKICAgICBy
ZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdDxKU0hUTUxBcHBsZXRF
bGVtZW50LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQogCi1ib29s
IEpTSFRNTEFwcGxldEVsZW1lbnQ6OmdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yPEpTSFRNTEFwcGxldEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgdGhpcyk7Ci19Ci0KIGJvb2wgSlNIVE1MQXBwbGV0RWxlbWVu
dDo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHJ1
bnRpbWVPYmplY3RDdXN0b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgdGhpcywgc2xv
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDExICszOCw2IEBAIGJvb2wgSlNIVE1MRW1iZWRFbGVtZW50OjpnZXRPd25Qcm9w
ZXJ0eVMKICAgICByZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdDxK
U0hUTUxFbWJlZEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgdGhpcyk7
CiB9CiAKLWJvb2wgSlNIVE1MRW1iZWRFbGVtZW50OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JE
ZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gcGx1Z2luRWxlbWVudEN1
c3RvbUdldE93blByb3BlcnR5RGVzY3JpcHRvcjxKU0hUTUxFbWJlZEVsZW1lbnQsIEJhc2U+KGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhpcyk7Ci19Ci0KIGJvb2wgSlNIVE1MRW1i
ZWRFbGVtZW50OjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBy
ZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCB0
aGlzLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9iamVj
dEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDYgQEAgYm9vbCBKU0hUTUxPYmplY3RFbGVtZW50
OjpnZXRPd25Qcm9wZXJ0eQogICAgIHJldHVybiBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJv
cGVydHlTbG90PEpTSFRNTE9iamVjdEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCwgdGhpcyk7CiB9CiAKLWJvb2wgSlNIVE1MT2JqZWN0RWxlbWVudDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIHBs
dWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I8SlNIVE1MT2JqZWN0RWxl
bWVudCwgQmFzZT4oZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aGlzKTsKLX0KLQog
Ym9vbCBKU0hUTUxPYmplY3RFbGVtZW50OjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbVB1dChleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCB0aGlzLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNzcgKzY0LDM5IEBAIGJvb2wgSlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxl
Z2EKICAgICBpZiAoc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIGltcGwoKS0+ZnJhbWUo
KSwgbWVzc2FnZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIENoZWNrIGZvciB0
aGUgZmV3IGZ1bmN0aW9ucyB0aGF0IHdlIGFsbG93LCBldmVuIHdoZW4gY2FsbGVkIGNyb3NzLWRv
bWFpbi4KLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gSlNIaXN0b3J5UHJvdG90eXBlOjpz
X2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAg
ICBpZiAoZW50cnkpIHsKLSAgICAgICAgLy8gQWxsb3cgYWNjZXNzIHRvIGJhY2soKSwgZm9yd2Fy
ZCgpIGFuZCBnbygpIGZyb20gYW55IGZyYW1lLgotICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0
ZXMoKSAmIEpTQzo6RnVuY3Rpb24pIHsKLSAgICAgICAgICAgIGlmIChlbnRyeS0+ZnVuY3Rpb24o
KSA9PSBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkJhY2spIHsKLSAgICAgICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50
cnktPmZ1bmN0aW9uKCkgPT0ganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Gb3J3YXJkKSB7Ci0g
ICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY0Zvcndh
cmRGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1
bmN0aW9uR28pIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNo
aW5nU3RhdGljR29GdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBbGxv
dyBhY2Nlc3MgdG8gdG9TdHJpbmcoKSBjcm9zcy1kb21haW4sIGJ1dCBhbHdheXMgT2JqZWN0LnRv
U3RyaW5nLgotICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS50b1N0cmluZykgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgb2JqZWN0VG9T
dHJpbmdGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoaW1wbCgpLT5mcmFtZSgp
LCBtZXNzYWdlKTsKLSAgICBzbG90LnNldFVuZGVmaW5lZCgpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgaWYgKCFpbXBsKCktPmZyYW1lKCkpIHsKLSAgICAgICAg
ZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKKyAgICAvLyB0aHJvdyBvdXQgYWxsIGNyb3NzIGRv
bWFpbiBhY2Nlc3MKKyAgICBpZiAoc2xvdC5pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcigpKSB7
CisgICAgICAgIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoaW1wbCgpLT5mcmFtZSgpLCBtZXNz
YWdlKTsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgLy8gVGhyb3cgb3V0IGFsbCBjcm9zcyBkb21haW4gYWNjZXNzCi0gICAg
aWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgaW1wbCgpLT5mcmFtZSgpKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICAvLyBDaGVjayBmb3IgdGhlIGZldyBmdW5jdGlvbnMg
dGhhdCB3ZSBhbGxvdywgZXZlbiB3aGVuIGNhbGxlZCBjcm9zcy1kb21haW4uCiAgICAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IEpTSGlzdG9yeVByb3RvdHlwZTo6c19pbmZvLnByb3BIYXNoVGFi
bGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKGVudHJ5KSB7Ci0g
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICAvLyBBbGxvdyBhY2Nlc3MgdG8gYmFj
aygpLCBmb3J3YXJkKCkgYW5kIGdvKCkgZnJvbSBhbnkgZnJhbWUuCiAgICAgICAgIGlmIChlbnRy
eS0+YXR0cmlidXRlcygpICYgSlNDOjpGdW5jdGlvbikgewogICAgICAgICAgICAgaWYgKGVudHJ5
LT5mdW5jdGlvbigpID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFjaykgewotICAgICAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNCYWNrRnVuY3Rp
b25HZXR0ZXIpOwotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOworICAg
ICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNCYWNrRnVu
Y3Rpb25HZXR0ZXIsIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0hp
c3RvcnlQcm90b3R5cGVGdW5jdGlvbkZvcndhcmQpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNl
dEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVyKTsKLSAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVj
LCBwcm9wZXJ0eU5hbWUpLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVy
LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNIaXN0b3J5UHJvdG90
eXBlRnVuY3Rpb25HbykgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5v
bkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKTsKLSAgICAgICAgICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBlbnRy
eS0+YXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBu
b25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBBbGxvdyBhY2Nlc3MgdG8gdG9TdHJpbmcoKSBjcm9zcy1k
b21haW4sIGJ1dCBhbHdheXMgT2JqZWN0LnRvU3RyaW5nLgogICAgICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZykgewotICAgICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBvYmplY3RU
b1N0cmluZ0Z1bmN0aW9uR2V0dGVyKTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgb2JqZWN0VG9TdHJpbmdGdW5j
dGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGRlc2NyaXB0b3Iuc2V0VW5kZWZpbmVkKCk7Cisg
ICAgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShpbXBsKCktPmZyYW1lKCksIG1lc3NhZ2UpOwor
ICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZp
c2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTcgKzYyLDI0IEBAIGJvb2wgSlNMb2NhdGlv
bjo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWcKICAgICBpZiAoc2hvdWxkQWxsb3dBY2Nlc3NUb0Zy
YW1lKGV4ZWMsIGZyYW1lLCBtZXNzYWdlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
Ly8gdGhyb3cgb3V0IGFsbCBjcm9zcyBkb21haW4gYWNjZXNzCisgICAgaWYgKHNsb3QuaW5HZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoKSkgeworICAgICAgICBwcmludEVycm9yTWVzc2FnZUZvckZy
YW1lKGZyYW1lLCBtZXNzYWdlKTsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgLy8gQ2hlY2sgZm9yIHRoZSBmZXcgZnVuY3Rp
b25zIHRoYXQgd2UgYWxsb3csIGV2ZW4gd2hlbiBjYWxsZWQgY3Jvc3MtZG9tYWluLgogICAgIGNv
bnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0xvY2F0aW9uUHJvdG90eXBlOjpzX2luZm8ucHJvcEhh
c2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkg
JiYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSkgewogICAgICAgICBpZiAo
ZW50cnktPmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSkg
ewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlcGxh
Y2VGdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25D
YWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyLCBlbnRyeS0+YXR0cmlidXRlcygpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5j
dGlvbigpID09IGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCkgewotICAgICAgICAg
ICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0
dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNS
ZWxvYWRGdW5jdGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0xv
Y2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3NpZ24pIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdldHRlcik7CisgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25H
ZXR0ZXIsIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICB9CkBAIC04Niw0NSArOTMsNiBAQCBib29sIEpTTG9jYXRpb246OmdldE93
blByb3BlcnR5U2xvdERlbGVnCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNMb2NhdGlv
bjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsK
LSAgICAgICAgZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAotICAgIC8vIHRocm93IG91dCBhbGwgY3Jvc3MgZG9tYWluIGFjY2Vzcwot
ICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIGZyYW1lKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIHRoZSBmZXcgZnVuY3Rpb25zIHRo
YXQgd2UgYWxsb3csIGV2ZW4gd2hlbiBjYWxsZWQgY3Jvc3MtZG9tYWluLgotICAgIGNvbnN0IEhh
c2hFbnRyeSogZW50cnkgPSBKU0xvY2F0aW9uUHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJs
ZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICBpZiAoZW50cnkgJiYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9u
KSkgewotICAgICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlw
ZUZ1bmN0aW9uUmVwbGFjZSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9u
Q2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBlbnRy
eS0+YXR0cmlidXRlcygpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJl
bG9hZCkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRp
Y1JlbG9hZEZ1bmN0aW9uR2V0dGVyKTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoZW50cnkt
PmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKSB7Ci0gICAg
ICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rp
b25HZXR0ZXIpOwotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTog
T3RoZXIgaW1wbGVtZW50ZXJzIG9mIHRoZSBXaW5kb3cgY3Jvc3MtZG9tYWluIHNjaGVtZSAoV2lu
ZG93LCBIaXN0b3J5KSBhbGxvdyB0b1N0cmluZywKLSAgICAvLyBidXQgZm9yIG5vdyB3ZSBoYXZl
IGRlY2lkZWQgbm90IHRvLCBwYXJ0bHkgYmVjYXVzZSBpdCBzZWVtcyBzaWxseSB0byByZXR1cm4g
IltPYmplY3QgTG9jYXRpb25dIiBpbgotICAgIC8vIHN1Y2ggY2FzZXMgd2hlbiBub3JtYWxseSB0
aGUgc3RyaW5nIGZvcm0gb2YgTG9jYXRpb24gd291bGQgYmUgdGhlIFVSTC4KLQotICAgIGRlc2Ny
aXB0b3Iuc2V0VW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgSlNMb2Nh
dGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgRnJhbWUq
IGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5j
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDEwIEBAIGJvb2wgcnVudGlt
ZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2wKIAogICAgIGlmICghc2NyaXB0T2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgc2xvdC5zZXRDdXN0b20oZWxlbWVudCwgcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKTsK
KyAgICAvLyBXaGlsZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHBsdWdpbiBhbGxvd3MsIHdlIGRv
IGtub3cgdGhhdCB3ZSBwcmV2ZW50CisgICAgLy8gZW51bWVyYXRpb24gb3IgZGVsZXRpb24gb2Yg
cHJvcGVydGllcywgc28gd2UgbWFyayBwbHVnaW4gcHJvcGVydGllcworICAgIC8vIGFzIERvbnRF
bnVtIHwgRG9udERlbGV0ZQorICAgIHNsb3Quc2V0Q3VzdG9tKGVsZW1lbnQsIHJ1bnRpbWVPYmpl
Y3RQcm9wZXJ0eUdldHRlciwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTMwLDcgKzEzMyw3IEBAIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93
blByb3BlcnR5RGUKICAgICBpZiAoIXNjcmlwdE9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJv
cGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFByb3BlcnR5U2xvdCBzbG90
OwotICAgIHNsb3Quc2V0Q3VzdG9tKGVsZW1lbnQsIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRl
cik7CisgICAgc2xvdC5zZXRDdXN0b20oZWxlbWVudCwgcnVudGltZU9iamVjdFByb3BlcnR5R2V0
dGVyLCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgIC8vIFdoaWxlIHdlIGRvbid0IGtub3cg
d2hhdCB0aGUgcGx1Z2luIGFsbG93cywgd2UgZG8ga25vdyB0aGF0IHdlIHByZXZlbnQKICAgICAv
LyBlbnVtZXJhdGlvbiBvciBkZWxldGlvbiBvZiBwcm9wZXJ0aWVzLCBzbyB3ZSBtYXJrIHBsdWdp
biBwcm9wZXJ0aWVzCiAgICAgLy8gYXMgRG9udEVudW0gfCBEb250RGVsZXRlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnMuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
bHVnaW5FbGVtZW50RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDIwICs1OCw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RDdXN0b21H
ZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCBlbGVtZW50KTsKICAg
ICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHlwZSwgY2xhc3MgQmFzZT4gYm9vbCBwbHVnaW5F
bGVtZW50Q3VzdG9tR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBUeXBlKiBlbGVtZW50KQotICAgIHsKLSAgICAgICAgaWYgKCFlbGVtZW50
LT5nbG9iYWxPYmplY3QoKS0+d29ybGQoKS0+aXNOb3JtYWwoKSkgewotICAgICAgICAgICAgaWYg
KEpTQzo6Z2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPFR5cGUsIEJhc2U+KGV4ZWMsIGVsZW1lbnQt
PnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLCBlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBKU0M6
OkpTVmFsdWUgcHJvdG8gPSBlbGVtZW50LT5wcm90b3R5cGUoKTsKLSAgICAgICAgICAgIGlmIChw
cm90by5pc09iamVjdCgpICYmIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChw
cm90bykpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBydW50aW1lT2JqZWN0
Q3VzdG9tR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgZWxlbWVudCk7Ci0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBKU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnNfaApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxNCArNzcsNiBAQCBib29sIEpTV29ya2VyQ29u
dGV4dDo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpT
V29ya2VyQ29udGV4dDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCi17Ci0gICAgLy8gTG9vayBmb3Igb3ZlcnJpZGVzIGJlZm9yZSBsb29raW5nIGF0
IGFueSBvZiBvdXIgb3duIHByb3BlcnRpZXMuCi0gICAgaWYgKEpTR2xvYmFsT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBKU1ZhbHVl
IEpTV29ya2VyQ29udGV4dDo6ZXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0V2ZW50U291cmNlQ29uc3RydWN0b3I+KGV4
ZWMsIHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00
MDIsNyArNDAyLDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQogICAgICAg
ICBpZiAoJHJlcXVpcmVzTWFudWFsTG9va3VwKSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsLCAiICAgIGNvbnN0ICR7bmFtZXNwYWNlTWF5YmV9SGFzaEVudHJ5KiBl
bnRyeSA9IGdldFN0YXRpY1ZhbHVlU2xvdEVudHJ5V2l0aG91dENhY2hpbmc8JGNsYXNzTmFtZT4o
ZXhlYywgcHJvcGVydHlOYW1lKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCwgIiAgICBpZiAoZW50cnkpIHtcbiIpOwotICAgICAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
ZW50cnktPnByb3BlcnR5R2V0dGVyKCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRy
eS0+cHJvcGVydHlHZXR0ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7XG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIH1cbiIp
OwogICAgICAgICB9CkBAIC00MjIsMTAgKzQyMiwxNiBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9w
ZXJ0eVNsb3RCb2R5CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXggJiYgaW5kZXggPCBzdGF0aWNfY2FzdDwkaW50ZXJmYWNlTmFtZSo+KHRoaXNPYmplY3QtPmlt
cGwoKSktPmxlbmd0aCgpKSB7XG4iKTsKICAgICAgICAgfQorICAgICAgICAjIEFzc3VtZSB0aGF0
IGlmIHRoZXJlJ3MgYSBzZXR0ZXIsIHRoZSBpbmRleCB3aWxsIGJlIHdyaXRhYmxlCisgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRl
ciJ9KSB7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAg
ICB1bnNpZ25lZCBzbG90QXR0cmlidXRlcyA9ICR7bmFtZXNwYWNlTWF5YmV9RG9udERlbGV0ZTtc
biIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlT
bG90SW1wbCwgIiAgICAgICAgdW5zaWduZWQgc2xvdEF0dHJpYnV0ZXMgPSAke25hbWVzcGFjZU1h
eWJlfURvbnREZWxldGUgfCAke25hbWVzcGFjZU1heWJlfVJlYWRPbmx5O1xuIik7CisgICAgICAg
IH0KICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmlj
SW5kZXhlZEdldHRlciJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJ
bXBsLCAiICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywg
aW5kZXgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwg
IiAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QtPmdldEJ5SW5k
ZXgoZXhlYywgaW5kZXgpLCBzbG90QXR0cmlidXRlcyk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIGluZGV4R2V0dGVyKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgc2xvdC5zZXRD
dXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIsIHNsb3RBdHRyaWJ1dGVz
KTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGws
ICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
U2xvdEltcGwsICIgICAgfVxuIik7CkBAIC00MzMsNyArNDM5LDcgQEAgc3ViIEdlbmVyYXRlR2V0
T3duUHJvcGVydHlTbG90Qm9keQogCiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xv
dEltcGwsICIgICAgaWYgKGNhbkdldEl0ZW1zRm9yTmFtZShleGVjLCBzdGF0aWNfY2FzdDwkaW50
ZXJmYWNlTmFtZSo+KHRoaXNPYmplY3QtPmltcGwoKSksIHByb3BlcnR5TmFtZSkpIHtcbiIpOwot
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKTtcbiIpOworICAgICAgICBw
dXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
T2JqZWN0LCB0aGlzT2JqZWN0LT5uYW1lR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAg
ICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90
SW1wbCwgIiAgICB9XG4iKTsKICAgICAgICAgaWYgKCRpbmxpbmVkKSB7CkBAIC00NDcsNyArNDUz
LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQogICAgICAgICAmJG1hbnVh
bExvb2t1cEdldHRlckdlbmVyYXRpb24oKTsKICAgICB9CiAKLSAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3Jp
cHRvciJ9KSB7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1
c3RvbUdldE93blByb3BlcnR5U2xvdCJ9KSB7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
U2xvdEltcGwsICIgICAgaWYgKHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdERlbGVnYXRl
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpXG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJv
cGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICB9CkBAIC00NjYs
MTA3ICs0NzIsNiBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgcmV0
dXJuIEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsOwogfQogCi1zdWIgR2VuZXJhdGVHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JCb2R5Ci17Ci0gICAgbXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1l
LCAkY2xhc3NOYW1lLCAkaGFzQXR0cmlidXRlcywgJGlubGluZWQpID0gQF87Ci0gICAgCi0gICAg
bXkgJG5hbWVzcGFjZU1heWJlID0gKCRpbmxpbmVkID8gIkpTQzo6IiA6ICIiKTsKLSAgICAKLSAg
ICBteSBAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCA9ICgpOwotICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eSJ9KSB7Ci0gICAgICAgIGlm
ICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siQmluZGluZ1NlY3VyaXR5LmgifSA9IDE7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhleGVjLCBqc0Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5pbXBsKCkpKVxuIik7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCktPmZy
YW1lKCkpKVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiBmYWxzZTtcbiIpOwotICAgIH0KLSAgICAKLSAgICBpZiAoJGludGVyZmFjZU5h
bWUgZXEgIk5hbWVkTm9kZU1hcCIgb3IgJGludGVyZmFjZU5hbWUgPX4gL15IVE1MXHcqQ29sbGVj
dGlvbiQvKSB7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIg
ICAgJHtuYW1lc3BhY2VNYXliZX1KU1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+cHJvdG90eXBl
KCk7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8JHtuYW1lc3BhY2VNYXliZX1KU09iamVj
dCo+KGFzT2JqZWN0KHByb3RvKSktPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpXG4i
KTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAg
cmV0dXJuIGZhbHNlO1xuXG4iKTsKLSAgICB9Ci0gICAgCi0gICAgbXkgJG1hbnVhbExvb2t1cEdl
dHRlckdlbmVyYXRpb24gPSBzdWIgewotICAgICAgICBteSAkcmVxdWlyZXNNYW51YWxMb29rdXAg
PSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9OwotICAgICAgICBp
ZiAoJHJlcXVpcmVzTWFudWFsTG9va3VwKSB7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIGNvbnN0ICR7bmFtZXNwYWNlTWF5YmV9SGFzaEVudHJ5
KiBlbnRyeSA9ICR7Y2xhc3NOYW1lfVRhYmxlLmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7XG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAg
aWYgKGVudHJ5KSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3Jp
cHRvckltcGwsICIgICAgICAgIFByb3BlcnR5U2xvdCBzbG90O1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7XG4iKTsKLSAgICAgICAgICAg
IHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5h
dHRyaWJ1dGVzKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JJbXBsLCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwotICAgICAgICAgICAgcHVzaChA
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICB9XG4iKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21O
YW1lZEdldHRlciJ9KSB7Ci0gICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigp
OwotICAgIH0KLQotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5k
ZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmlj
SW5kZXhlZEdldHRlciJ9KSB7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRv
ckltcGwsICIgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1xuIik7
Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKGlu
ZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBpbmRleCA8IHN0YXRpY19jYXN0PCRp
bnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHtcbiIpOwotICAg
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVk
R2V0dGVyIn0pIHsKLSAgICAgICAgICAgICMgQXNzdW1lIHRoYXQgaWYgdGhlcmUncyBhIHNldHRl
ciwgdGhlIGluZGV4IHdpbGwgYmUgd3JpdGFibGUKLSAgICAgICAgICAgIGlmICgkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgp
LCAke25hbWVzcGFjZU1heWJlfURvbnREZWxldGUpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4
ZWMsIGluZGV4KSwgJHtuYW1lc3BhY2VNYXliZX1Eb250RGVsZXRlIHwgJHtuYW1lc3BhY2VNYXli
ZX1SZWFkT25seSk7XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgICR7bmFt
ZXNwYWNlTWF5YmV9UHJvcGVydHlTbG90IHNsb3Q7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgo
dGhpc09iamVjdCwgaW5kZXgsIGluZGV4R2V0dGVyKTtcbiIpOwotICAgICAgICAgICAgIyBBc3N1
bWUgdGhhdCBpZiB0aGVyZSdzIGEgc2V0dGVyLCB0aGUgaW5kZXggd2lsbCBiZSB3cml0YWJsZQot
ICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21J
bmRleGVkU2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JJbXBsLCAiICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRW
YWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCAke25hbWVzcGFjZU1heWJlfURvbnREZWxldGUpO1xu
Iik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGdldE93blBy
b3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksICR7bmFtZXNwYWNlTWF5YmV9RG9udERl
bGV0ZSB8ICR7bmFtZXNwYWNlTWF5YmV9UmVhZE9ubHkpO1xuIik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICAgICAgcmV0dXJuIHRydWU7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9ySW1wbCwgIiAgICB9XG4iKTsKLSAgICB9Ci0KLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKLSAgICAgICAgcHVzaChAZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMs
IHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVy
dHlOYW1lKSkge1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvcklt
cGwsICIgICAgICAgICR7bmFtZXNwYWNlTWF5YmV9UHJvcGVydHlTbG90IHNsb3Q7XG4iKTsKLSAg
ICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpc09iamVjdCwgbmFtZUdldHRlcik7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pO1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3Jp
cHRvckltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93
blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgfVxuIik7Ci0gICAgICAgIGlmICgkaW5saW5l
ZCkgewotICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJ3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aCJ9ID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0
Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0gPSAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7
Ci0gICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOwotICAgIH0KLQotICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9w
ZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0pIHsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ySW1wbCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yRGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSlcbiIpOwotICAgICAg
ICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICByZXR1cm4gdHJ1
ZTtcbiIpOwotICAgIH0KLQotICAgIGlmICgkaGFzQXR0cmlidXRlcykgewotICAgICAgICBpZiAo
JGlubGluZWQpIHsKLSAgICAgICAgICAgIGRpZSAiQ2Fubm90IGlubGluZSBpZiBOb1N0YXRpY1Rh
YmxlcyBpcyBzZXQuIiBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9T
dGF0aWNUYWJsZXMifSk7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JJbXBsLCAiICAgIHJldHVybiAke25hbWVzcGFjZU1heWJlfWdldFN0YXRpY1ZhbHVlRGVzY3Jp
cHRvcjwkY2xhc3NOYW1lLCBCYXNlPihleGVjLCBzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZSwg
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICByZXR1cm4gJHtuYW1lc3BhY2VNYXliZX1nZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8JGNsYXNz
TmFtZSwgQmFzZT4oZXhlYywgIiAuIGhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhp
c09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsOwotfQotCiBzdWIgR2VuZXJhdGVIZWFkZXJD
b250ZW50SGVhZGVyCiB7CiAgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwpAQCAtNzkwLDcgKzY5
NSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIG15ICRoYXNDb21wbGV4R2V0dGVyID0KICAg
ICAgICAgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0ZXIifQog
ICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4
ZWRHZXR0ZXIifQotICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0KKyAgICAgICAgfHwgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90
In0KICAgICAgICAgfHwgJGhhc0ltcHVyZU5hbWVkR2V0dGVyOwogICAgIAogICAgIG15ICRoYXNH
ZXR0ZXIgPSAkbnVtQXR0cmlidXRlcyA+IDAgfHwgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifSB8fCAkaGFzQ29tcGxleEdldHRlcjsKQEAgLTgwMiwx
MCArNzA3LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgIyBHZXR0ZXJzCiAgICAgaWYgKCRo
YXNHZXR0ZXIpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCosIEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
O1xuIikgaWYgKCRoYXNDb21wbGV4R2V0dGVyKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBib29sIGdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNj
cmlwdG9yIn07Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90RGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1
c3RvbUdldE93blByb3BlcnR5U2xvdCJ9OwogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90In0gPSAxOwogICAgICAgICAkc3RydWN0dXJlRmxh
Z3N7IkpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyJ9ID0gMTsKICAgICB9CkBAIC0xMDI3LDEyICs5MzAsNiBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keSgkaW50ZXJmYWNlLCAk
aW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAwLCAxKSk7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9XG5cbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiQUxXQVlTX0lOTElORSBib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpXG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIntcbiIpOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9
IEpTQzo6anNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
ICZzX2luZm8pO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlR2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yQm9keSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNs
YXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAwLCAxKSk7Ci0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIAogICAgIGlmICghJGhhc1BhcmVudCB8fApAQCAtMTEw
MCw3ICs5OTcsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XG4iKTsKICAgICBpZiAo
JG51bUZ1bmN0aW9ucyA+IDAgfHwgJG51bUNvbnN0YW50cyA+IDApIHsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAg
ICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qi
fSA9IDE7CiAgICAgfQogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNDdXN0b21NYXJrRnVuY3Rpb24ifSBvciAkbmVlZHNNYXJrQ2hpbGRyZW4pIHsKQEAgLTE2MTgs
MjEgKzE1MTQsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldFN0YXRpY1Byb3BlcnR5U2xvdDwke2NsYXNz
TmFtZX1Qcm90b3R5cGUsIEpTT2JqZWN0PihleGVjLCAiIC4gcHJvdG90eXBlSGFzaFRhYmxlQWNj
ZXNzb3IoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMi
fSwgJGNsYXNzTmFtZSkgLiAiLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7
CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotCi0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlKj4ob2JqZWN0KTtcbiIpOwotCi0gICAgICAgIGlmICgk
bnVtQ29uc3RhbnRzIGVxIDAgJiYgJG51bUZ1bmN0aW9ucyBlcSAwKSB7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsgICAg
ICAgIAotICAgICAgICB9IGVsc2lmICgkbnVtQ29uc3RhbnRzIGVxIDApIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0
b3I8SlNPYmplY3Q+KGV4ZWMsICIgLiBwcm90b3R5cGVIYXNoVGFibGVBY2Nlc3NvcigkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAkY2xhc3NOYW1l
KSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICAg
ICAgfSBlbHNpZiAoJG51bUZ1bmN0aW9ucyBlcSAwKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPCR7Y2xhc3NOYW1l
fVByb3RvdHlwZSwgSlNPYmplY3Q+KGV4ZWMsICIgLiBwcm90b3R5cGVIYXNoVGFibGVBY2Nlc3Nv
cigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAk
Y2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4i
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3I8JHtjbGFzc05hbWV9UHJvdG90eXBl
LCBKU09iamVjdD4oZXhlYywgIiAuIHByb3RvdHlwZUhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0sICRjbGFzc05hbWUp
IC4gIiwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAg
ICB9Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tTmFtZWRHZXR0ZXJP
blByb3RvdHlwZSJ9KSB7CkBAIC0xNzQ5LDcgKzE2MzAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgICAgICB8fCAhJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9IAogICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9CiAgICAgICAgICAgICAgICAg
IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRl
ciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifQorICAgICAgICAgICAg
ICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Q
cm9wZXJ0eVNsb3QifQogICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0KICAgICAgICAgICAgICAgICAg
fHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0KICAgICAg
ICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5h
bWVkR2V0dGVyIn07CkBAIC0xNzYzLDE3ICsxNjQ0LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KCRpbnRlcmZhY2Us
ICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkbnVtQXR0cmlidXRlcyA+IDAsIDApKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihv
YmplY3QpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5
KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkbnVtQXR0cmlidXRlcyA+
IDAsIDApKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5k
ZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmlj
SW5kZXhlZEdldHRlciJ9CiAgICAgICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0KLSAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNj
cmlwdG9yIn0pIHsKKyAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifSkgewogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3Bl
cnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhp
c09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwpAQCAtMTc5NiwxMCAr
MTY3MSwxNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChp
bmRleCA8IHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKS0+
bGVuZ3RoKCkpIHtcbiIpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAjIEFz
c3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBzZXR0ZXIsIHRoZSBpbmRleCB3aWxsIGJlIHdyaXRhYmxl
CisgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21JbmRleGVkU2V0dGVyIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHVuc2lnbmVkIHNsb3RBdHRyaWJ1dGVzID0gRG9udERlbGV0ZTtcbiIp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICB1bnNpZ25lZCBzbG90QXR0cmlidXRlcyA9IERvbnREZWxldGUg
fCBSZWFkT25seTtcbiIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0p
IHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldFZhbHVl
V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCksIHNsb3RB
dHRyaWJ1dGVzKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRo
aXNPYmplY3QsIGluZGV4LCB0aGlzT2JqZWN0LT5pbmRleEdldHRlcik7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5k
ZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyLCBzbG90QXR0cmli
dXRlcyk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CkBAIC0xODA4LDEzICsxNjg5LDEzIEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKICAgICAgICAgICAgICAgICAmJHByb3Bl
cnR5TmFtZUdlbmVyYXRpb24oKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PCRpbnRlcmZhY2VO
YW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVydHlOYW1lKSkge1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNP
YmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNP
YmplY3QtPm5hbWVHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1
ZTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0g
PSAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5k
RGVzY3JpcHRvciJ9KSB7CisgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0pIHsKICAgICAgICAgICAgICAg
ICAmJHByb3BlcnR5TmFtZUdlbmVyYXRpb24oKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUo
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwpAQCAtMzY1OCw3ICszNTM5LDYg
QEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICB9XG5cbiIpOwogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKLSAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XG4iKTsKIAogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIik7CkBAIC00MDQ0LDExICszOTI0LDYgQEAg
c3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIntcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJu
IGdldFN0YXRpYyR7a2luZH1TbG90PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9LCBKU0RPTVdyYXBw
ZXI+KGV4ZWMsICIgLiBjb25zdHJ1Y3Rvckhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0sICRjb25zdHJ1Y3RvckNsYXNz
TmFtZSkgLiAiLCBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihjZWxsKSwgcHJvcGVy
dHlOYW1lLCBzbG90KTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIp
OwotCi0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgJHtjb25zdHJ1Y3RvckNsYXNz
TmFtZX06OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcilcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKLSAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBnZXRTdGF0aWMke2tpbmR9RGVz
Y3JpcHRvcjwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSwgSlNET01XcmFwcGVyPihleGVjLCAiIC4g
Y29uc3RydWN0b3JIYXNoVGFibGVBY2Nlc3NvcigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAkY29uc3RydWN0b3JDbGFzc05hbWUpIC4gIiwganND
YXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogICAg
IH0KIAogICAgIGlmIChJc0NvbnN0cnVjdGFibGUoJGludGVyZmFjZSkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkocmV2
aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBKU0N1c3RvbUNvbnN0
cnVjdG9yCiBKU0N1c3RvbURlZmluZU93blByb3BlcnR5CiBKU0N1c3RvbURlZmluZU93blByb3Bl
cnR5T25Qcm90b3R5cGUKIEpTQ3VzdG9tRmluYWxpemUKLUpTQ3VzdG9tR2V0T3duUHJvcGVydHlT
bG90QW5kRGVzY3JpcHRvcgorSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QKIEpTQ3VzdG9tR2V0
dGVyCiBKU0N1c3RvbUhlYWRlcgogSlNDdXN0b21Jc1JlYWNoYWJsZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw0
NyArODksMjUgQEAgYm9vbCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKUwogewog
ICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihjZWxs
KTsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVj
dC0+bGVuZ3RoR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09i
amVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25l
ZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgaWYgKGluZGV4IDwgdGhpc09i
amVjdC0+Z2V0TGVuZ3RoKCkpIHsKICAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwg
aW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21J
bmRleCh0aGlzT2JqZWN0LCBpbmRleCwgdGhpc09iamVjdC0+aW5kZXhHZXR0ZXIsIERvbnREZWxl
dGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBy
ZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFJ1
bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwot
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewot
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09i
amVjdCwgbGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNs
b3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwg
RG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWdu
ZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpbmRleCA8IHRoaXNP
YmplY3QtPmdldExlbmd0aCgpKSB7Ci0gICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXgpOwotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xv
dC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpOwotICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5h
bWUpLCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogYm9vbCBSdW50
aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVu
dGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KGNlbGwpOwogICAg
IGlmIChpbmRleCA8IHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSB7Ci0gICAgICAgIHNsb3Quc2V0
Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyKTsK
KyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgdGhpc09iamVj
dC0+aW5kZXhHZXR0ZXIsIERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
aAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjUsMjYgKzY1LDEzIEBAIGJvb2wgUnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEoK
IHsKICAgICBSdW50aW1lTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVNZXRob2Qq
PihjZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhp
c09iamVjdC0+bGVuZ3RoR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20o
dGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBy
ZXR1cm4gSW50ZXJuYWxGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgUnVudGltZU1ldGhvZDo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yICZkZXNjcmlwdG9yKQot
ewotICAgIFJ1bnRpbWVNZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZU1ldGhvZCo+
KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERv
bnREZWxldGUgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBSdW50aW1lTWV0aG9kKiBtZXRob2QgPSBzdGF0aWNfY2FzdDxSdW50aW1l
TWV0aG9kKj4oZXhlYy0+Y2FsbGVlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw2IEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsK
IAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTVmFsdWUgbGVuZ3Ro
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNCwxNCArMTM0LDE0IEBAIGJvb2wgUnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KEoKICAgICAgICAgLy8gU2VlIGlmIHRoZSBpbnN0YW5jZSBoYXMgYSBmaWVsZCB3aXRoIHRoZSBz
cGVjaWZpZWQgbmFtZS4KICAgICAgICAgRmllbGQgKmFGaWVsZCA9IGFDbGFzcy0+ZmllbGROYW1l
ZChwcm9wZXJ0eU5hbWUsIGluc3RhbmNlLmdldCgpKTsKICAgICAgICAgaWYgKGFGaWVsZCkgewot
ICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+ZmllbGRH
ZXR0ZXIpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVj
dC0+ZmllbGRHZXR0ZXIsIERvbnREZWxldGUpOwogICAgICAgICAgICAgaW5zdGFuY2UtPmVuZCgp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBOb3cgY2hlY2sgaWYgYSBtZXRob2Qgd2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHMsIGlm
IHNvIHJldHVybiBhIGZ1bmN0aW9uIG9iamVjdCBmb3IKICAgICAgICAgICAgIC8vIHRoYXQgbWV0
aG9kLgogICAgICAgICAgICAgaWYgKGFDbGFzcy0+bWV0aG9kTmFtZWQocHJvcGVydHlOYW1lLCBp
bnN0YW5jZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2Jq
ZWN0LCB0aGlzT2JqZWN0LT5tZXRob2RHZXR0ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm1ldGhvZEdldHRlciwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpbnN0YW5jZS0+
ZW5kKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTAsNyArMTUwLDcgQEAg
Ym9vbCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSgogCiAgICAgICAgIC8vIFRy
eSBhIGZhbGxiYWNrIG9iamVjdC4KICAgICAgICAgaWYgKCFhQ2xhc3MtPmZhbGxiYWNrT2JqZWN0
KGV4ZWMsIGluc3RhbmNlLmdldCgpLCBwcm9wZXJ0eU5hbWUpLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmZhbGxiYWNr
T2JqZWN0R2V0dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRo
aXNPYmplY3QtPmZhbGxiYWNrT2JqZWN0R2V0dGVyLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CiAgICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTYxLDU1ICsxNjEsNiBAQCBib29sIFJ1bnRpbWVPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdChKCiAgICAgcmV0dXJuIGluc3RhbmNlLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9v
bCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlICpleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgUnVudGltZU9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPm1f
aW5zdGFuY2UpIHsKLSAgICAgICAgdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0
YW5jZSA9IHRoaXNPYmplY3QtPm1faW5zdGFuY2U7Ci0gICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0g
ICAgCi0gICAgQ2xhc3MgKmFDbGFzcyA9IGluc3RhbmNlLT5nZXRDbGFzcygpOwotICAgIAotICAg
IGlmIChhQ2xhc3MpIHsKLSAgICAgICAgLy8gU2VlIGlmIHRoZSBpbnN0YW5jZSBoYXMgYSBmaWVs
ZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KLSAgICAgICAgRmllbGQgKmFGaWVsZCA9IGFDbGFz
cy0+ZmllbGROYW1lZChwcm9wZXJ0eU5hbWUsIGluc3RhbmNlLmdldCgpKTsKLSAgICAgICAgaWYg
KGFGaWVsZCkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBmaWVsZEdldHRlcik7Ci0gICAgICAgICAgICBpbnN0
YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5n
ZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm93IGNoZWNrIGlm
IGEgbWV0aG9kIHdpdGggc3BlY2lmaWVkIG5hbWUgZXhpc3RzLCBpZiBzbyByZXR1cm4gYSBmdW5j
dGlvbiBvYmplY3QgZm9yCi0gICAgICAgICAgICAvLyB0aGF0IG1ldGhvZC4KLSAgICAgICAgICAg
IGlmIChhQ2xhc3MtPm1ldGhvZE5hbWVkKHByb3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgbWV0aG9kR2V0dGVyKTsKLSAgICAgICAgICAgICAgICBp
bnN0YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gVHJ5IGEgZmFsbGJhY2sgb2JqZWN0LgotICAgICAgICBp
ZiAoIWFDbGFzcy0+ZmFsbGJhY2tPYmplY3QoZXhlYywgaW5zdGFuY2UuZ2V0KCksIHByb3BlcnR5
TmFtZSkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBmYWxsYmFja09iamVjdEdldHRl
cik7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgCi0gICAgcmV0
dXJuIGluc3RhbmNlLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBSdW50aW1lT2JqZWN0OjpwdXQo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsK
ICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qc2MvQnJpZGdlSlNDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pz
Yy9CcmlkZ2VKU0MuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L2pzYy9CcmlkZ2VKU0MuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5JbnN0YW5jZSgpOwogCiAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
IHsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X3J1bnRpbWUuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29i
amMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNiBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZv
aWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjE1LDEzICsyMTUsNiBA
QCBib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6Z2V0T3duUHJvcGVyCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICAvLyBrZWVwIHRoZSBwcm90b3R5cGUgZnJvbSBnZXR0
aW5nIGNhbGxlZCBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGZhbHNlCi0gICAgZGVzY3JpcHRv
ci5zZXRVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBPYmpjRmFsbGJh
Y2tPYmplY3RJbXA6OnB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVEZWNsYXJhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlRGVjbGFyYXRpb24uaWRsCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIy
LDcgQEAKIFsKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBKU0dlbmVyYXRlSXNSZWFj
aGFibGUsCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAg
IEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAogI2lm
IGRlZmluZWQoVjhfQklORElORykgJiYgVjhfQklORElORwogICAgIE5hbWVkR2V0dGVyLApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGwJKHJldmlzaW9uIDE0
MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAKIFsKICAgICBDdXN0b21OYW1lZFNldHRlciwK
LSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCisgICAgSlNDdXN0
b21HZXRPd25Qcm9wZXJ0eVNsb3QsCiAgICAgQ3VzdG9tQ2FsbAogXSBpbnRlcmZhY2UgSFRNTEFw
cGxldEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01T
dHJpbmcgYWxpZ247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5p
ZGwJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxl
bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIAogWwogICAgIEN1c3Rv
bU5hbWVkU2V0dGVyLAotICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRv
ciwKKyAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCwKICAgICBDdXN0b21DYWxsCiBdIGlu
dGVyZmFjZSBIVE1MRW1iZWRFbGVtZW50IDogSFRNTEVsZW1lbnQgewogYXR0cmlidXRlIFtSZWZs
ZWN0XSBET01TdHJpbmcgYWxpZ247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmlkbAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIAog
WwogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAotICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90
QW5kRGVzY3JpcHRvciwKKyAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCwKICAgICBDdXN0
b21DYWxsCiBdIGludGVyZmFjZSBIVE1MT2JqZWN0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEZvcm1FbGVtZW50IGZvcm07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvSGlzdG9yeS5pZGwJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
SGlzdG9yeS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpZiBkZWZpbmVk
KFY4X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcKICAgICBDaGVja1NlY3VyaXR5LAogI2VuZGlmCi0g
ICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9t
R2V0T3duUHJvcGVydHlTbG90LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAogICAgIEpTR2VuZXJh
dGVJc1JlYWNoYWJsZT1JbXBsRnJhbWUsCiAgICAgQ3VzdG9tRGVsZXRlUHJvcGVydHksCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
ICNpZiBkZWZpbmVkKFY4X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcKICAgICBDaGVja1NlY3VyaXR5
LAogI2VuZGlmCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAor
ICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAog
ICAgIEpTR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsRnJhbWUsCiAgICAgQ3VzdG9tRGVsZXRlUHJv
cGVydHksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJl
dmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIFsKICAgICBDb25kaXRpb25hbD1X
T1JLRVJTLAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAotICAgIEpTQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCwK
ICAgICBFdmVudFRhcmdldCwKICAgICBFeHRlbmRzRE9NR2xvYmFsT2JqZWN0LAogICAgIElzV29y
a2VyQ29udGV4dCwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTAx
LTIyICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0MjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHByYWN0aWNhbGx5IHJlZHVuZGFudCB3
aXRoIGdldE93blByb3BlcnR5U2xvdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgICAgIC0gcGFzcyBhdHRyaWJ1dGVzIHRvIGdldE93
blByb3BlcnR5U2xvdAorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOgorICAgICAgICAoSlNOUE9iamVjdCk6CisKIDIw
MTMtMDEtMjIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUERGUGx1Z2luOiBCdWlsZCBQREZQbHVnaW4gZXZlcnl3aGVyZSwgZW5hYmxlIGF0IHJ1bnRp
bWUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc2LDU0ICsyNzYsMTkgQEAgYm9vbCBKU05QT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZQogCiAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIHRoZSBOUE9iamVjdCBoYXMg
YSBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZS4KICAgICBpZiAodGhpc09iamVjdC0+bV9ucE9iamVj
dC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSAmJiB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3Mt
Pmhhc1Byb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllcikpIHsKLSAg
ICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+cHJvcGVydHlHZXR0
ZXIpOworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5wcm9w
ZXJ0eUdldHRlciwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAog
ICAgIC8vIFNlY29uZCwgY2hlY2sgaWYgdGhlIE5QT2JqZWN0IGhhcyBhIG1ldGhvZCB3aXRoIHRo
aXMgbmFtZS4KICAgICBpZiAodGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRo
b2QgJiYgdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QodGhpc09iamVj
dC0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5tZXRob2RHZXR0ZXIpOworICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5tZXRob2RHZXR0ZXIsIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpTTlBPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAgICBpZiAoIXRoaXNPYmplY3Qt
Pm1fbnBPYmplY3QpIHsKLSAgICAgICAgdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBOUElkZW50aWZpZXIgbnBJZGVudGlm
aWVyID0gbnBJZGVudGlmaWVyRnJvbUlkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKLQotICAgIC8v
IENhbGxpbmcgTlBDbGFzczo6aW52b2tlIHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwgYW5k
IHRoZXJlJ3Mgbm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KLSAgICAvLyAoaW5j
bHVkaW5nIGRlc3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1ha2Ug
c3VyZSB0byBrZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIAotICAgIC8vIHRoZSBjYWxsIGhh
cyBmaW5pc2hlZC4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90
ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwotCi0gICAgLy8gRmlyc3QsIGNoZWNrIGlm
IHRoZSBOUE9iamVjdCBoYXMgYSBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZS4KLSAgICBpZiAodGhp
c09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSAmJiB0aGlzT2JqZWN0LT5t
X25wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5w
SWRlbnRpZmllcikpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIHByb3BlcnR5R2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERl
bGV0ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFNlY29uZCwgY2hl
Y2sgaWYgdGhlIE5QT2JqZWN0IGhhcyBhIG1ldGhvZCB3aXRoIHRoaXMgbmFtZS4KLSAgICBpZiAo
dGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QgJiYgdGhpc09iamVjdC0+
bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJ
ZGVudGlmaWVyKSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpc09iamVjdCwgbWV0aG9kR2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiB2b2lkIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJv
cGVydHlTbG90JikKIHsKICAgICBKU05QT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8
SlNOUE9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpD
b25zdHJ1Y3REYXRhJik7CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJv
cGVydHlTbG90Jik7CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2Vs
bCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183952</attachid>
            <date>2013-01-22 03:15:56 -0800</date>
            <delta_ts>2013-04-08 18:09:53 -0700</delta_ts>
            <desc>Kicking another ews run!</desc>
            <filename>107420.6.patch</filename>
            <type>text/plain</type>
            <size>197603</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNCBA
QAorMjAxMy0wMS0yMiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIGdldE93blByb3BlcnR5RGVzY3JpcHRvcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwcmFjdGljYWxseSBy
ZWR1bmRhbnQgd2l0aCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisKKyAgICAgICAgVGhlIGJ1bGsgb2Yg
Y2hhbmdlcyBoZXJlIGFyZSB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcgorICAgICAgICBtZWNoYW5pc20uIEEgbmV3IGZyZWUtZnVuY3Rpb24gaW1wbGVtZW50
YXRpb24gb2YgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGlzCisgICAgICAgIGFkZGVkIHRvIFBy
b3BlcnR5RGVzY3JpcHRvci5oLCBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBnZXRPd25Qcm9wZXJ0
eVNsb3QuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzLCBQcm9wZXJ0eVNsb3Qg
aXMgbm93IHBhc3NlZCB0aGUgYXR0cmlidXRlcywgYW5kCisgICAgICAgIHJlZmVyZW5jZXMgdGhl
IEdldHRlclNldHRlciBvYmplY3QgZm9yIGFjY2Vzc29ycywgcmF0aGVyIHRoYW4gdGhlIGdldHRl
ci4gQW4KKyAgICAgICAgYWRkaXRpb25hbCBmaWVsZCBpbmRpY2F0aW5nIGdldE93blByb3BlcnR5
RGVzY3JpcHRvciB1c2FnZSBpcyBhbHNvIGFkZGVkIHRvCisgICAgICAgIHN1cHBvcnQgZXhpc3Rp
bmcgZnVuY3Rpb25hbGxpdHkgZm9yIHRoZSBET01XaW5kb3cgb2JqZWN0LgorCisgICAgICAgIElu
IG9yZGVyIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlIHNpemUgb2YgUHJvcGVydHlTbG90LCB0aGUg
aW1wbGVtZW50YXRpb24gaGFzCisgICAgICAgIGJlZW4gcmVmYWN0b3JlZC4gUHJldmlvdXNseSB0
aGUgQ2FjaGVQcm9wZXJ0eVR5cGUgd2FzIG9ubHkgc2V0IGZvciBjYWNoZWFibGUKKyAgICAgICAg
cHJvcGVydGllcy4gTm93IGNhY2hlYWJpbGl0eSBpcyBzcGxpdCBvdXQgaW50byBhIHNlcGFyYXRl
IGZpZWxkLCBhbmQgdGhlIHR5cGUKKyAgICAgICAgaXMgYWxzbyByZWNvcmRlZC4gVGhpcyBtZWFu
cyB3ZSBjYW4gYWx3YXlzIHVzZSB0aGUgdHlwZSBmaWVsZCB0byBkZXRlcm1pbmUKKyAgICAgICAg
dGhlIHZhbHVlLCByYXRoZXIgdGhhbiBvdmVybG9hZGluZyB0aGUgbWVhbmluZyBvZiB0aGUgZ2V0
VmFsdWUgZmllbGQuIFRoaXMsCisgICAgICAgIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIg
ZmllbGRzIGFyZSBtb3ZlZCBpbnRvIGFuIGV4aXN0aW5nIChidXQgc3BhcmVzbHkKKyAgICAgICAg
dXNlZCkgdW5pb24uCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAg
ICAoSlNDYWxsYmFja09iamVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaDoKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5qczoKKyAgICAgICAgKiBKU0NUeXBl
ZEFycmF5U3R1YnMuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogZGVidWdnZXIvRGVi
dWdnZXJBY3RpdmF0aW9uLmg6CisgICAgICAgIChEZWJ1Z2dlckFjdGl2YXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50
cy5oOgorICAgICAgICAoQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuaDoKKyAgICAgICAgKEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmg6CisgICAgICAgIChBcnJheVByb3RvdHlwZSk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChCb29sZWFuUHJvdG90eXBlKToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6CisgICAgICAg
IChEYXRlQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5oOgorICAg
ICAgICAoRGF0ZVByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoK
KyAgICAgICAgKEVycm9yUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQpOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0FjdGl2
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgICogcnVudGltZS9K
U0NlbGwuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTTm90QW5PYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOgorICAgICAgICAoSlNPTk9iamVjdCk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3BlcnR5SXNF
bnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNQcm94eS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5o
OgorICAgICAgICAoSlNQcm94eSk6CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZUludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRT
dHJpbmdQcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZUdldCk6CisgICAgICAgICogcnVudGltZS9M
b29rdXAuY3BwOgorICAgICAgICAoSlNDOjpzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAg
ICAgICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6Z2V0U3RhdGljUHJvcGVydHlT
bG90KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmdldFN0YXRpY1ZhbHVlU2xvdCk6
CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChNYXRoT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL05hbWVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL05hbWVQcm90b3R5cGUuaDoKKyAgICAgICAgKE5hbWVQcm90b3R5cGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmg6CisgICAgICAgIChOdW1iZXJDb25z
dHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAo
TnVtYmVyUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JTZWFs
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUpOgorICAgICAgICAoSlND
OjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3Ry
dWN0b3JJc0Zyb3plbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgor
ICAgICAgICAoT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90
b3R5cGUuaDoKKyAgICAgICAgKE9iamVjdFByb3RvdHlwZSk6CisgICAgICAgICogcnVudGltZS9Q
cm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3I6
OmVxdWFsVG8pOgorICAgICAgICAoSlNDOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKFByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmZ1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpjYWNoZWRQcm9wZXJ0eVR5cGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6Omlz
Q2FjaGVhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90Ojppc0NhY2hlYWJsZVZhbHVl
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhCYXNlKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VmFsdWVXaXRoQXR0cmlidXRlcyk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlT
bG90OjpzZXRDYWNoZWFibGVDdXN0b20pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNl
dEN1c3RvbUluZGV4KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRBY2Nlc3NvclNs
b3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldENhY2hlYWJsZUFjY2Vzc29yU2xv
dCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VW5kZWZpbmVkKToKKyAgICAgICAg
KFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6Y2xlYXJPZmZzZXQp
OgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmN1c3RvbUdldHRlcik6CisgICAgICAgIChK
U0M6OlByb3BlcnR5U2xvdDo6YXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6d3JpdGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmVudW1lcmFibGUpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmNvbmZpZ3VyYWJsZSk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5U2xvdDo6aXNBY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6
Z2V0dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRJbkdldE93blBy
b3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6aW5HZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
Lmg6CisgICAgICAgIChSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKFJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKFJlZ0V4cFByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmpl
Y3QuaDoKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5oOgorICAgICAgICAoU3RyaW5nUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpnZXQpOgorCiAyMDEzLTAxLTIyICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBw
bGUuY29tPgogCiAgICAgICAgIFBERlBsdWdpbjogQnVpbGQgUERGUGx1Z2luIGV2ZXJ5d2hlcmUs
IGVuYWJsZSBhdCBydW50aW1lCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRB
cnJheVN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVk
QXJyYXlTdHVicy5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SlNDVHlwZWRBcnJheVN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAgcHVi
bGljOiBcCiAgICAgfVwKIFwKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTtcCiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKICAgICBz
dGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYp
O1wKICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7XApAQCAtMTA2
LDMxICsxMDUsMTggQEAgYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdAog
ICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCiAgICAgaWYgKGlu
ZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAogICAgICAgICBBU1NFUlQoaW5k
ZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUo
dGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1wKKyAgICAgICAgc2xvdC5zZXRW
YWx1ZVdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBE
b250RGVsZXRlKTtcCiAgICAgICAgIHJldHVybiB0cnVlO1wKICAgICB9XAogICAgIHJldHVybiBC
YXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTtc
CiB9XAogXAotYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcCi17XAotICAgIEpTIyNuYW1lIyNB
cnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1
bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCA8
IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aCkge1wKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7XAotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCksIERvbnREZWxldGUpO1wK
LSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
XAotfVwKLVwKIGJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdClcCiB7XAogICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCiAgICAgaWYgKHByb3BlcnR5TmFtZSA8IHRo
aXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aCkge1wKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlz
T2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSkpO1wKKyAgICAgICAgc2xvdC5z
ZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVy
dHlOYW1lKSwgRG9udERlbGV0ZSk7XAogICAgICAgICByZXR1cm4gdHJ1ZTtcCiAgICAgfVwKICAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xv
dCk7XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDYgQEAgcHJpdmF0ZToK
IAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOwogICAgIAogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBi
b29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZVJlZiA9IE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUobmFtZSk7CiAgICAg
ICAgICAgICAgICAgQVBJQ2FsbGJhY2tTaGltIGNhbGxiYWNrU2hpbShleGVjKTsKICAgICAgICAg
ICAgICAgICBpZiAoaGFzUHJvcGVydHkoY3R4LCB0aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYuZ2V0
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNh
bGxiYWNrR2V0dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09i
amVjdCwgY2FsbGJhY2tHZXR0ZXIsIERvbnRFbnVtKTsgLy8gV2UgZG9uJ3Qga25vdyB0aGUgYXR0
cmlidXRlcywgc28gZ3Vlc3MuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNPYmplY3RHZXRQcm9wZXJ0
eUNhbGxiYWNrIGdldFByb3BlcnR5ID0ganNDbGFzcy0+Z2V0UHJvcGVydHkpIHsKQEAgLTE1MSwy
OCArMTUxLDMwIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAodmFsdWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0b0pTKGV4ZWMsIHZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyh0b0pTKGV4
ZWMsIHZhbHVlKSwgRG9udEVudW0pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpz
Q2xhc3MtPnN0YXRpY1ZhbHVlcyhleGVjKSkgewotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNW
YWx1ZXMtPmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0
YXRpY1ZhbHVlc1RhYmxlOjppdGVyYXRvciBlbnRyeSA9IHN0YXRpY1ZhbHVlcy0+ZmluZChuYW1l
KTsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gc3RhdGljVmFsdWVzLT5lbmQoKSkgewog
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0U3RhdGlj
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyh2YWx1ZSwgZW50
cnktPnZhbHVlLT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1
bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5jdGlvbnMgPSBqc0NsYXNzLT5zdGF0aWNGdW5jdGlvbnMo
ZXhlYykpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljRnVuY3Rpb25zLT5jb250YWlucyhu
YW1lKSkgewotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBz
dGF0aWNGdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRp
Y0Z1bmN0aW9uc1RhYmxlOjppdGVyYXRvciBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+ZmluZChu
YW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gc3RhdGljRnVuY3Rpb25zLT5lbmQo
KSkgeworICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0
aWNGdW5jdGlvbkdldHRlciwgZW50cnktPnZhbHVlLT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtMjEzLDI2ICsyMTUsNiBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVm
YXVsCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQotewotICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgaWYgKHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7Ci0gICAgICAgIC8vIElkZWFsbHkg
d2Ugc2hvdWxkIHJldHVybiBhbiBhY2Nlc3MgZGVzY3JpcHRvciwgYnV0IHJldHVybmluZyBhIHZh
bHVlIGRlc2NyaXB0b3IgaXMgYmV0dGVyIHRoYW4gbm90aGluZy4KLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0VmFsdWUodmFs
dWUpOwotICAgICAgICAvLyBXZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGNv
bmZpZ3VyYWJsZSwgYnV0IGFzc3VtZSBpdCBpcy4KLSAgICAgICAgZGVzY3JpcHRvci5zZXRDb25m
aWd1cmFibGUodHJ1ZSk7Ci0gICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgcHJv
cGVydHkgaXMgZW51bWVyYWJsZSAod2UgY291bGQgY2FsbCBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkg
dG8gZmluZCBvdXQpLCBidXQgYXNzdW1lIGl0IGlzbid0LgotICAgICAgICBkZXNjcmlwdG9yLnNl
dEVudW1lcmFibGUoZmFsc2UpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gUGFyZW50OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4K
IHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuanMJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjIz
LDIzICsyMjMsMjMgQEAgdmFyIGJhc2VEdXBEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blBybwog
c2hvdWxkQmUoJ3R5cGVvZiBiYXNlRHVwRGVzY3JpcHRvcicsICJvYmplY3QiKTsKIHNob3VsZEJl
KCdiYXNlRHVwRGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQuYmFzZUR1cCk7CiBzaG91bGRCZSgn
YmFzZUR1cERlc2NyaXB0b3IuY29uZmlndXJhYmxlJywgdHJ1ZSk7Ci1zaG91bGRCZSgnYmFzZUR1
cERlc2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdiYXNlRHVwRGVzY3Jp
cHRvci5lbnVtZXJhYmxlJywgdHJ1ZSk7CiB2YXIgYmFzZU9ubHlEZXNjcmlwdG9yID0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJpdmVkLCAiYmFzZU9ubHkiKTsKIHNob3VsZEJl
KCd0eXBlb2YgYmFzZU9ubHlEZXNjcmlwdG9yJywgIm9iamVjdCIpOwogc2hvdWxkQmUoJ2Jhc2VP
bmx5RGVzY3JpcHRvci52YWx1ZScsIGRlcml2ZWQuYmFzZU9ubHkpOwogc2hvdWxkQmUoJ2Jhc2VP
bmx5RGVzY3JpcHRvci5jb25maWd1cmFibGUnLCB0cnVlKTsKLXNob3VsZEJlKCdiYXNlT25seURl
c2NyaXB0b3IuZW51bWVyYWJsZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdiYXNlT25seURlc2NyaXB0
b3IuZW51bWVyYWJsZScsIHRydWUpOwogc2hvdWxkQmUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZGVyaXZlZCwgInByb3RvT25seSIpJywgdW5kZWZpbmVkKTsKIHZhciBwcm90b0R1
cERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlcml2ZWQsICJw
cm90b0R1cCIpOwogc2hvdWxkQmUoJ3R5cGVvZiBwcm90b0R1cERlc2NyaXB0b3InLCAib2JqZWN0
Iik7CiBzaG91bGRCZSgncHJvdG9EdXBEZXNjcmlwdG9yLnZhbHVlJywgZGVyaXZlZC5wcm90b0R1
cCk7CiBzaG91bGRCZSgncHJvdG9EdXBEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZScsIHRydWUpOwot
c2hvdWxkQmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgZmFsc2UpOworc2hvdWxk
QmUoJ3Byb3RvRHVwRGVzY3JpcHRvci5lbnVtZXJhYmxlJywgdHJ1ZSk7CiB2YXIgZGVyaXZlZE9u
bHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJpdmVkLCAi
ZGVyaXZlZE9ubHkiKTsKIHNob3VsZEJlKCd0eXBlb2YgZGVyaXZlZE9ubHlEZXNjcmlwdG9yJywg
Im9iamVjdCIpOwogc2hvdWxkQmUoJ2Rlcml2ZWRPbmx5RGVzY3JpcHRvci52YWx1ZScsIGRlcml2
ZWQuZGVyaXZlZE9ubHkpOwogc2hvdWxkQmUoJ2Rlcml2ZWRPbmx5RGVzY3JpcHRvci5jb25maWd1
cmFibGUnLCB0cnVlKTsKLXNob3VsZEJlKCdkZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJs
ZScsIGZhbHNlKTsKK3Nob3VsZEJlKCdkZXJpdmVkT25seURlc2NyaXB0b3IuZW51bWVyYWJsZScs
IHRydWUpOwogCiBzaG91bGRCZSgidW5kZWZpbmVkIGluc3RhbmNlb2YgTXlPYmplY3QiLCBmYWxz
ZSk7CiBFdmlsRXhjZXB0aW9uT2JqZWN0Lmhhc0luc3RhbmNlID0gZnVuY3Rpb24gZigpIHsgcmV0
dXJuIGYoKTsgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ckFjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsMTIgKzk1LDYgQEAgdm9pZCBEZWJ1Z2dlckFjdGl2YXRpb246OmdldE93blBy
b3BlcnR5TgogICAgIHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIERlYnVnZ2VyQWN0aXZhdGlvbjo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewot
ICAgIERlYnVnZ2VyQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlckFjdGl2
YXRpb24qPihvYmplY3QpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24tPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5tX2FjdGl2
YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIGJvb2wg
RGVidWdnZXJBY3RpdmF0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBEZWJ1Z2dlckFjdGl2
YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RGVidWdnZXJBY3RpdmF0aW9uKj4ob2JqZWN0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJB
Y3RpdmF0aW9uLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKIAogICAgICAgICBKU19FWFBPUlREQVRBIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMu
Y3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgQXJndW1l
bnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGUKIHsKICAgICBBcmd1bWVudHMqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4oY2VsbCk7CiAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0
aGlzT2JqZWN0LT50cnlHZXRBcmd1bWVudChpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZh
bHVlKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVlLCBOb25lKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMjgsMTggKzEyOCwxOCBAQCBib29s
IEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsCiAgICAgdW5zaWduZWQgaSA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0
LT50cnlHZXRBcmd1bWVudChpKSkgewogICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCk7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICBzbG90
LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXModmFsdWUsIE5vbmUpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGggJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkgewotICAg
ICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbnVtQXJndW1lbnRzKSk7
CisgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhqc051bWJlcih0aGlzT2JqZWN0
LT5tX251bUFyZ3VtZW50cyksIERvbnRFbnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVl
ICYmIExJS0VMWSghdGhpc09iamVjdC0+bV9vdmVycm9kZUNhbGxlZSkpIHsKICAgICAgICAgaWYg
KCF0aGlzT2JqZWN0LT5tX2lzU3RyaWN0TW9kZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LT5tX2NhbGxlZS5nZXQoKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVl
V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdC0+bV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHRoaXNPYmplY3QtPmNy
ZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShleGVjKTsKQEAgLTE1MSwzNSArMTUxLDYg
QEAgYm9vbCBBcmd1bWVudHM6OmdldE93blByb3BlcnR5U2xvdChKU0NlbAogICAgIHJldHVybiBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKLWJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgQXJndW1lbnRzKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KG9iamVjdCk7Ci0gICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB0aGlzT2Jq
ZWN0LT50cnlHZXRBcmd1bWVudChpKSkgewotICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwg
Tm9uZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggJiYgTElLRUxZKCF0aGlzT2Jq
ZWN0LT5tX292ZXJyb2RlTGVuZ3RoKSkgewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoanNOdW1iZXIodGhpc09iamVjdC0+bV9udW1Bcmd1bWVudHMpLCBEb250RW51bSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUgJiYgTElLRUxZKCF0aGlzT2JqZWN0LT5tX292ZXJy
b2RlQ2FsbGVlKSkgewotICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1faXNTdHJpY3RNb2RlKSB7
Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+bV9jYWxs
ZWUuZ2V0KCksIERvbnRFbnVtKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXNPYmplY3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShl
eGVjKTsKLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5jYWxsZXIgJiYgdGhpc09iamVjdC0+bV9pc1N0cmljdE1vZGUpCi0gICAgICAgIHRoaXNP
YmplY3QtPmNyZWF0ZVN0cmljdE1vZGVDYWxsZXJJZk5lY2Vzc2FyeShleGVjKTsKLSAgICAKLSAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiB2b2lkIEFyZ3VtZW50czo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4ob2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTksNyArOTksNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXRCeUlu
ZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDExICs3MSw2IEBAIGJvb2wgQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVy
dHlTbG8KICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEludGVybmFsRnVuY3Rpb24+
KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJy
YXlDb25zdHJ1Y3Rvcio+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEFy
cmF5Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNj
cmlwdG9yPEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6YXJyYXlDb25zdHJ1Y3Rv
clRhYmxlKGV4ZWMpLCBqc0Nhc3Q8QXJyYXlDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEpTT2JqZWN0KiBjb25z
dHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Q
cm9maWxlKiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxl
bmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBA
QCBwcml2YXRlOgogICAgIEFycmF5Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0KICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5
cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCwxMSArMTQwLDYgQEAgYm9vbCBBcnJheVByb3RvdHlw
ZTo6Z2V0T3duUHJvcGVydHlTbG90KAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8
SlNBcnJheT4oZXhlYywgRXhlY1N0YXRlOjphcnJheVByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nh
c3Q8QXJyYXlQcm90b3R5cGUqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9v
bCBBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRl
c2NyaXB0b3I8SlNBcnJheT4oZXhlYywgRXhlY1N0YXRlOjphcnJheVByb3RvdHlwZVRhYmxlKGV4
ZWMpLCBqc0Nhc3Q8QXJyYXlQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVu
Y3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gSGVscGVyIGZ1bmN0aW9u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBl
LmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKik7CiAgICAgICAgIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDQwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsNiBAQCBib29sIEJvb2xlYW5Qcm90b3R5cGU6Omdl
dE93blByb3BlcnR5U2xvCiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCb29sZWFu
T2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZShleGVjKSwganND
YXN0PEJvb2xlYW5Qcm90b3R5cGUqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
Ym9vbCBCb29sZWFuUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0
aW9uRGVzY3JpcHRvcjxCb29sZWFuT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OmJvb2xlYW5Qcm90
b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEJvb2xlYW5Qcm90b3R5cGUqPihvYmplY3QpLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblBy
b3RvdHlwZS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDYgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotCi0gICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9u
IDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5Miw2IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAKICAg
ICB0eXBlZGVmIGJvb2wgKCpEZWZpbmVPd25Qcm9wZXJ0eUZ1bmN0aW9uUHRyKShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCk7CiAg
ICAgRGVmaW5lT3duUHJvcGVydHlGdW5jdGlvblB0ciBkZWZpbmVPd25Qcm9wZXJ0eTsKLQotICAg
IHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyKShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0g
ICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yOwogfTsKIAogI2RlZmluZSBDUkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBA
IC0xMzcsNyArMTM0LDYgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFt
ZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0Vmly
dHVhbCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAotICAgICAg
ICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwKICAgICB9LCBcCiAgICAg
Q2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDA0
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMSArOTEsNiBAQCBib29sIERhdGVDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxJbnRl
cm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKGV4ZWMp
LCBqc0Nhc3Q8RGF0ZUNvbnN0cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLWJvb2wgRGF0ZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1
bmN0aW9uRGVzY3JpcHRvcjxJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OmRhdGVD
b25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZUNvbnN0cnVjdG9yKj4ob2JqZWN0KSwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gRUNNQSAxNS45LjMKIEpTT2JqZWN0
KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNTUsOCArNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIENh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKICAgICB9OwogCiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBBcmdMaXN0Jik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTQw
NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyMCwxMSArNTIwLDYgQEAgYm9vbCBEYXRlUHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSgogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNP
YmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0ZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0ZVByb3Rv
dHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIERhdGVQcm90b3R5
cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2Jq
ZWN0PihleGVjLCBFeGVjU3RhdGU6OmRhdGVUYWJsZShleGVjKSwganNDYXN0PERhdGVQcm90b3R5
cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyBGdW5jdGlv
bnMKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVQcm90b3R5cGUuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2Niw2IEBAIGJvb2wgRXJyb3JQ
cm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCgKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rp
b25TbG90PEVycm9ySW5zdGFuY2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6ZXJyb3JQcm90b3R5cGVUYWJs
ZShleGVjKSwganNDYXN0PEVycm9yUHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKLWJvb2wgRXJyb3JQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25EZXNjcmlwdG9yPEVycm9ySW5zdGFuY2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6ZXJy
b3JQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PEVycm9yUHJvdG90eXBlKj4ob2JqZWN0KSwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNN
QS0yNjIgNS4xLCAxNS4xMS40LjQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NyArNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNDA0
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6
c3ltYm9sVGFibGVHZXQKICAgICBpZiAoaXNUb3JuT2ZmKCkgJiYgIWlzVmFsaWQoZW50cnkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzbG90LnNldFZhbHVlKHJlZ2lzdGVyQXQoZW50
cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhy
ZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDksNyArMTQ5LDcgQEAgYm9vbCBKU0FjdGl2
YXRpb246OmdldE93blByb3BlcnR5U2xvdChKUwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewogICAgICAgICAvLyBEZWZlbmQgYWdhaW5z
dCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgdGhlIGFyZ3VtZW50cyBvYmplY3QgYWZ0ZXIgaXQg
aGFzIGJlZW4gb3B0aW1pemVkIG91dC4KICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1Rvcm5P
ZmYoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVj
dC0+Z2V0QXJndW1lbnRzR2V0dGVyKCkpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhp
c09iamVjdCwgdGhpc09iamVjdC0+Z2V0QXJndW1lbnRzR2V0dGVyKCksIERvbnRFbnVtKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTU3LDggKzE1Nyw5
IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlMKICAgICBpZiAodGhp
c09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3QtPmdldERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2xvdC5zZXRW
YWx1ZSh2YWx1ZSk7CisgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IE5vbmU7CisgICAgaWYgKEpT
VmFsdWUgdmFsdWUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBw
cm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKSkgeworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0
dHJpYnV0ZXModmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTE2OSwyNiArMTcwLDYgQEAgYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5
U2xvdChKUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU0FjdGl2YXRpb246OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikK
LXsKLSAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4o
b2JqZWN0KTsKLQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cykgewotICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFz
a2luZyBmb3IgdGhlIGFyZ3VtZW50cyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVk
IG91dC4KLSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1Rvcm5PZmYoKSkgewotICAgICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb246OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKSwgRG9udEVudW0pOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKLX0KLQogdm9pZCBKU0FjdGl2YXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FjdGl2YXRpb24qPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTQwNDA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCwyNCArMTgwLDEzIEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCoKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihj
ZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgo
KSkpOworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJpYnV0ZXMoanNOdW1iZXIodGhpc09i
amVjdC0+bGVuZ3RoKCkpLCB0aGlzT2JqZWN0LT5pc0xlbmd0aFdyaXRhYmxlKCkgPyBEb250RGVs
ZXRlIHwgRG9udEVudW0gOiBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJv
b2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNB
cnJheSo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJl
cih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIHRoaXNPYmplY3QtPmlzTGVuZ3RoV3JpdGFibGUoKSA/
IERvbnREZWxldGUgfCBEb250RW51bSA6IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKLX0KLQogLy8gRUNNQSAxNS40LjUuMQogdm9pZCBKU0FycmF5OjpwdXQoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAog
ICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lv
biAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjEsMTAgKzIyMSw0IEBAIGJvb2wgSlNDZWxsOjpkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNDZWxsOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcg
KzE1Niw2IEBAIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBj
dXN0b21IYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTQwNDA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyMSw3ICsyMjEsOCBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3Bl
cnR5U2xvdChKU0NlCiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIAogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSkgewotICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gRG9u
dERlbGV0ZSB8IERvbnRFbnVtOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlz
T2JqZWN0LT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
ICZhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAg
ICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgICAgICBwcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdGhpc09iamVjdCwgRG9udEVudW0pOwpAQCAt
MjMwLDcgKzIzMSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UK
ICAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICB9CiAK
LSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5nZXREaXJlY3Qo
b2Zmc2V0KSwgb2Zmc2V0KTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNl
dCh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KSwgb2Zmc2V0LCBhdHRy
aWJ1dGVzKTsKICAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5hcmd1bWVudHMpIHsKQEAgLTI0MywxNyArMjQ0LDE3IEBAIGJvb2wgSlNGdW5jdGlv
bjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20o
dGhpc09iamVjdCwgYXJndW1lbnRzR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVD
dXN0b20odGhpc09iamVjdCwgYXJndW1lbnRzR2V0dGVyLCBSZWFkT25seSB8IERvbnRFbnVtIHwg
RG9udERlbGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBzbG90
LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIpOworICAgICAgICBz
bG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIsIFJlYWRPbmx5
IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkgewot
ICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lR2V0dGVyKTsK
KyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgbmFtZUdldHRlciwg
UmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKQEAgLTI2Nyw2NiArMjY4LDEzIEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJv
cGVydHlTbG90KEpTQ2UKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwg
Y2FsbGVyR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVj
dCwgY2FsbGVyR2V0dGVyLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBK
U0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4ob2JqZWN0KTsKLSAgICBpZiAodGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24o
KSkKLSAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgIAotICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSkgewotICAgICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0g
ICAgICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7Ci0gICAgICAg
IGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAo
IXJlc3VsdCkgewotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlw
ZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nv
cik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihl
eGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhp
c09iamVjdCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
anNOdW1iZXIodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPnBhcmFtZXRlckNvdW50KCkpLCBS
ZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5uYW1lKSB7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5q
c0V4ZWN1dGFibGUoKS0+bmFtZVZhbHVlKCksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVs
ZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7Ci0gICAgICAgIGlmICh0aGlzT2Jq
ZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIGJvb2wg
cmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgewot
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihleGVjLT5pbnRlcnBy
ZXRlcigpLT5yZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCksIFJlYWRP
bmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBKU0Z1bmN0
aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4ob2JqZWN0KTsKQEAgLTQwNiwxOSArMzU0LDIyIEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmoKICAgICAgICAgdGhpc09iamVjdC0+bV9pbmhlcml0b3JJRFdh
dGNocG9pbnQubm90aWZ5V3JpdGUoKTsKICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2Vw
dGlvbik7CiAgICAgfQotCiAgICAgYm9vbCB2YWx1ZUNoZWNrOwogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewogICAgICAgICBpZiAodGhp
c09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIUJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERp
cmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVu
dW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAvLyBHZXQgdGhlIHByb3BlcnR5IHRvIGZvcmNl
IHJlaWZpY2F0aW9uLgorICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgICAg
ICBib29sIGhhc1Byb3BlcnR5ID0gZ2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGhhc1Byb3Bl
cnR5LCBoYXNQcm9wZXJ0eSk7CiAgICAgICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0
aW9uKTsKICAgICAgICAgfQogICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUo
KSB8fCBzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRl
cigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOwogICAg
IH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIp
IHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUo
KSkgewotICAgICAgICAgICAgaWYgKCFCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwg
RG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgLy8gR2V0IHRo
ZSBwcm9wZXJ0eSB0byBmb3JjZSByZWlmaWNhdGlvbi4KKyAgICAgICAgICAgIFByb3BlcnR5U2xv
dCBzbG90OworICAgICAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGdldE93blByb3BlcnR5U2xv
dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChoYXNQcm9wZXJ0eSwgaGFzUHJvcGVydHkpOwogICAgICAgICAgICAgcmV0dXJu
IEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgdmFsdWVDaGVjayA9
ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUo
KSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRo
aXNPYmplY3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBTdHJ1Y3R1cmUqIGNhY2hlSW5oZXJpdG9ySUQoRXhlY1N0YXRlKik7
CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAg
ICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsMTQgKzU2MCw2IEBAIGJv
b2wgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCgKICAgICByZXR1cm4gc3ltYm9s
VGFibGVHZXQodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU0ds
b2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25E
ZXNjcmlwdG9yPEJhc2U+KGV4ZWMsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyks
IHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIHJldHVybiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwotfQotCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjpjbGVhclJhcmVEYXRhKEpT
Q2VsbCogY2VsbCkKIHsKICAgICBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+bV9yYXJl
RGF0YS5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICAgICAg
Ym9vbCBoYXNPd25Qcm9wZXJ0eUZvcldyaXRlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAkocmV2
aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEyICs1OSw2IEBAIGJvb2wgSlNOb3RBbk9i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
SlNOb3RBbk9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpCi17Ci0gICAgQVNT
RVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiB2b2lkIEpTTm90QW5PYmplY3Q6OnB1dChKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSAsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgQVNTRVJU
X1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEpTT2Jq
ZWN0IG1ldGhvZHMKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlz
aW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsMTEgKzYwNSw2IEBAIGJvb2wgSlNPTk9iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90
PEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Ompzb25UYWJsZShleGVjKSwganNDYXN0PEpTT05P
YmplY3QqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU09OT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVj
dD4oZXhlYywgRXhlY1N0YXRlOjpqc29uVGFibGUoZXhlYyksIGpzQ2FzdDxKU09OT2JqZWN0Kj4o
b2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogY2xhc3MgV2Fsa2VyIHsK
IHB1YmxpYzoKICAgICBXYWxrZXIoRXhlY1N0YXRlKiBleGVjLCBIYW5kbGU8SlNPYmplY3Q+IGZ1
bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgQ2FsbERhdGEgY2FsbERhdGEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDggKzU3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgSlNPTk9iamVjdChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKLQogICAgIH07CiAKICAgICBTdHJpbmcgSlNPTlN0cmluZ2lmeShFeGVj
U3RhdGUqLCBKU1ZhbHVlLCB1bnNpZ25lZCBpbmRlbnQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsNyArMjg1LDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAog
ICAgICAgICAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOwogICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWUodmFsdWUpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHZhbHVl
LCBOb25lKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMjk5LDcgKzI5OSw3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgKICAgICAgICAgCiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldOwogICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsK
KyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhKU1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCB2YWx1ZSksIE5vbmUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zMTQsNyArMzE0LDcgQEAgYm9vbCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0
b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBz
bG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0
dHJpYnV0ZXModmFsdWUsIE5vbmUpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CkBAIC0xNDIwLDEwICsxNDIwLDEwIEBAIGJv
b2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKIAogYm9vbCBKU09iamVjdDo6
cHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7
Ci0gICAgaWYgKCFjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCisgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAg
aWYgKCFjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blBy
b3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZGVzY3JpcHRvci5l
bnVtZXJhYmxlKCk7CisgICAgcmV0dXJuIHNsb3QuZW51bWVyYWJsZSgpOwogfQogCiBib29sIEpT
T2JqZWN0OjpnZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKSBjb25zdApAQCAtMTYz
MCwxNSArMTYzMCwxMyBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxs
R2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQorTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qo
UHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCiB7Ci0gICAgaWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0
dGVyKGdldERpcmVjdChvZmZzZXQpKS0+Z2V0dGVyKCkpIHsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUdldHRl
clNsb3QodGhpcywgZ2V0dGVyRnVuY3Rpb24sIG9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXJGdW5jdGlvbik7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0
ZXIgPSBhc0dldHRlclNldHRlcihnZXREaXJlY3Qob2Zmc2V0KSk7CisgICAgaWYgKCFzdHJ1Y3R1
cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQWNjZXNzb3JT
bG90KHRoaXMsIGdldHRlclNldHRlciwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKKyAgICBlbHNlCisg
ICAgICAgIHNsb3Quc2V0QWNjZXNzb3JTbG90KGdldHRlclNldHRlciwgYXR0cmlidXRlcyk7CiB9
CiAKIHZvaWQgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywg
U3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCkBAIC0yMzYzLDgwICsyMzYx
LDExIEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KCksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAg
dW5zaWduZWQgYXR0cmlidXRlcyA9IDA7Ci0gICAgSlNDZWxsKiBjZWxsID0gMDsKLSAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNlbGwpOwotICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVj
dC0+Z2V0RGlyZWN0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0g
ICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewotICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX1VO
REVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2Jq
ZWN0LT5tX2J1dHRlcmZseTsKLSAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICBpZiAoIXZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IodmFsdWUsIDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG9iamVjdC0+bV9idXR0ZXJmbHk7Ci0gICAgICAgIGlmIChpID49IGJ1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRv
dWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICBp
ZiAodmFsdWUgIT0gdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2
YWx1ZSksIDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0g
ICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAg
ICAgICAgaWYgKGl0ID09IG1hcC0+bm90Rm91bmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpdC0+dmFsdWUuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIGJvb2wgSlNPYmplY3Q6OmdldFByb3Bl
cnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBKU09iamVjdCogb2JqZWN0
ID0gdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAob2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpKQorICAgICAgICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7
CiAgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCkBAIC0yNTE5LDcgKzI0NDgsNyBA
QCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5CiAgICAgCiAgICAgLy8g
SWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJl
bnQpKSB7CisgICAgaWYgKCFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJv
cGVydHlOYW1lLCBjdXJyZW50KSkgewogICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUg
cHJldmVudGVkIQogICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAgICBp
ZiAodGhyb3dFeGNlcHRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDE3ICs3NCw2IEBAIHN0cnVjdCBI
YXNoVGFibGU7CiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhl
Y1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CiBleHRlcm4gSlNfRVhQT1JUREFUQSBjb25zdCBjaGFy
KiBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3I7CiAKLS8vIEVDTUEgMjYyLTMg
OC42LjEKLS8vIFByb3BlcnR5IGF0dHJpYnV0ZXMKLWVudW0gQXR0cmlidXRlIHsKLSAgICBOb25l
ICAgICAgICAgPSAwLAotICAgIFJlYWRPbmx5ICAgICA9IDEgPDwgMSwgIC8vIHByb3BlcnR5IGNh
biBiZSBvbmx5IHJlYWQsIG5vdCB3cml0dGVuCi0gICAgRG9udEVudW0gICAgID0gMSA8PCAyLCAg
Ly8gcHJvcGVydHkgZG9lc24ndCBhcHBlYXIgaW4gKGZvciAuLiBpbiAuLikKLSAgICBEb250RGVs
ZXRlICAgPSAxIDw8IDMsICAvLyBwcm9wZXJ0eSBjYW4ndCBiZSBkZWxldGVkCi0gICAgRnVuY3Rp
b24gICAgID0gMSA8PCA0LCAgLy8gcHJvcGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBi
eSBzdGF0aWMgaGFzaHRhYmxlcwotICAgIEFjY2Vzc29yICAgICA9IDEgPDwgNSwgIC8vIHByb3Bl
cnR5IGlzIGEgZ2V0dGVyL3NldHRlcgotfTsKLQogQ09NUElMRV9BU1NFUlQoTm9uZSA8IEZpcnN0
SW50ZXJuYWxBdHRyaWJ1dGUsIE5vbmVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7
CiBDT01QSUxFX0FTU0VSVChSZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRP
bmx5X2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwogQ09NUElMRV9BU1NFUlQoRG9u
dEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJzdElu
dGVybmFsQXR0cmlidXRlKTsKQEAgLTEzOCw3ICsxMjcsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgIGJvb2wgYWxsb3dzQWNjZXNz
RnJvbShFeGVjU3RhdGUqKTsKIApAQCAtNDkzLDE2ICs0ODEsMTYgQEAgcHVibGljOgogICAgIGJv
b2wgZ2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlND
ZWxsKiYgc3BlY2lmaWNGdW5jdGlvbikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGdldCBmdW5jdGlv
biBvbmx5IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCi0gICAgSlNWYWx1ZSBnZXREaXJlY3Qo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25z
dAorICAgIEpTVmFsdWUgZ2V0RGlyZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQqIGF0dHJpYnV0ZXMgPSAwKSBjb25zdAogICAg
IHsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChnbG9i
YWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAg
ICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgc3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCkp
OwogICAgICAgICByZXR1cm4gb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQgPyBnZXREaXJlY3Qob2Zm
c2V0KSA6IEpTVmFsdWUoKTsKICAgICB9CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RP
ZmZzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQorICAgIFByb3BlcnR5T2Zmc2V0IGdldERpcmVjdE9mZnNldChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkKiBhdHRyaWJ1dGVzID0g
MCkKICAgICB7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5n
ZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICAgICAgcmV0dXJuIG9mZnNldDsKICAgICB9CkBAIC05MjEsNyArOTA5LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIHB1dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYsIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlND
ZWxsKik7CiAKICAgICBib29sIGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5
U2xvdCYsIFByb3BlcnR5T2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgIGNvbnN0
IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSkgY29uc3Q7CiAgICAgICAgIApAQCAtMTEzOCwxMyArMTEyNiwxNCBAQCBpbmxpbmUgSlNWYWx1
ZSBKU09iamVjdDo6cHJvdG90eXBlKCkgY29uCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUpOworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBOb25lOworICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsICZhdHRyaWJ1dGVzKTsKICAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkp
IHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdChvZmZzZXQpOwogICAgICAgICBp
ZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dl
dHRlclNldHRlcigpKQotICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBv
ZmZzZXQpOworICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQs
IGF0dHJpYnV0ZXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRo
aXMsIHZhbHVlLCBvZmZzZXQpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhQcm9wZXJ0
eU9mZnNldCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEyICs3Myw2IEBAIGJvb2wgSlNQ
cm94eTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKICAgICByZXR1cm4gdGhpc09iamVjdC0+
dGFyZ2V0KCktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09i
amVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNQ
cm94eTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQotewotICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+
KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZSgp
LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZvaWQgSlNQcm94eTo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Byb3h5Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgcHJv
dGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNDA0MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1v
ZGUsIEpTU2MKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIGN1c3RvbSBhY2Nl
c3NvciBiZWhhdmlvdXIgdGhhdCB0aGUgRE9NIGludHJvZHVjZXMgZm9yIHNvbWUKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXJzIGRlY2xhcmVkIG9uIGZ1bmN0aW9uIGRl
Y2xhcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZXNEeW5hbWlj
Q2hlY2tzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQmFzZShnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQo
KSwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAocmV0dXJuVmFsdWVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJldHVyblZh
bHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghcHV0VG9CYXNlT3BlcmF0
aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2
aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDE0ICs0NjUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiAgICAgewogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIobV9sZW5n
dGgpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhqc051bWJlciht
X2xlbmd0aCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CiAgICAgICAgIGlmIChpIDwgbV9sZW5ndGgpIHsKICAgICAgICAgICAg
IEFTU0VSVChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7IC8vIE5vIG5lZWQgZm9yIGFu
IGV4cGxpY2l0IGNoZWNrLCB0aGUgYWJvdmUgdGVzdCB3b3VsZCBhbHdheXMgZmFpbCEKLSAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXgoZXhlYywgaSkpOworICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKGdldEluZGV4KGV4ZWMsIGkpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtNDgy
LDcgKzQ4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU1N0
cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAgICAgICBpZiAocHJvcGVy
dHlOYW1lIDwgbV9sZW5ndGgpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXgo
ZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJp
YnV0ZXMoZ2V0SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJl
dmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMjIgKzc4LDcgQEAgaW5saW5lIGJv
b2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJs
ZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051
bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuZ2V0KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
eW1ib2xUYWJsZU9iamVjdFR5cGU+Ci1pbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKLSAgICBT
eW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7Ci0gICAgU3ltYm9sVGFibGU6Oml0ZXJh
dG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwot
ICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwotICAgIEFT
U0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKLSAg
ICAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5n
ZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKKyAgICBzbG90LnNldFZhbHVlV2l0aEF0dHJp
YnV0ZXMob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5n
ZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTA4LDcgKzkzLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7
CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgc2xvdC5zZXRWYWx1ZShvYmplY3Qt
PnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3Quc2V0VmFsdWVX
aXRoQXR0cmlidXRlcyhvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCks
IGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOwogICAgIHNsb3RJc1dyaXRlYWJs
ZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDcgKzY5LDggQEAgYm9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUq
IAogewogICAgIEFTU0VSVCh0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgQVNTRVJUKGVu
dHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5jdGlvbik7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gdGhpc09iai0+Z2V0RGlyZWN0T2Zmc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lKTsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXMoKTsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzT2JqLT5nZXREaXJlY3RPZmZzZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsICZhdHRyaWJ1dGVzKTsKIAogICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIC8vIElmIGEgcHJvcGVydHkgaXMgZXZlciBk
ZWxldGVkIGZyb20gYW4gb2JqZWN0IHdpdGggYSBzdGF0aWMgdGFibGUsIHRoZW4gd2UgcmVpZnkK
QEAgLTg2LDcgKzg3LDcgQEAgYm9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUq
IAogICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICB9CiAKLSAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmosIHRoaXNPYmotPmdldERpcmVjdChvZmZzZXQpLCBvZmZzZXQp
OworICAgIHNsb3Quc2V0VmFsdWVXaXRoUHJvcGVydHlPZmZzZXQodGhpc09iaiwgdGhpc09iai0+
Z2V0RGlyZWN0KG9mZnNldCksIG9mZnNldCwgYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lv
biAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUxLDI4ICsyNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
aWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBGdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBz
ZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChleGVjLCBlbnRyeSwgdGhpc09iaiwgcHJvcGVydHlOYW1l
LCBzbG90KTsKIAotICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqLCBlbnRy
eS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wLCBjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIGJv
b2wgZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFz
aFRhYmxlKiB0YWJsZSwgVGhpc0ltcCogdGhpc09iaiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotICAgIHsKLSAgICAgICAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKCFlbnRyeSkgLy8gbm90IGZvdW5kLCBmb3J3YXJkIHRvIHBhcmVu
dAotICAgICAgICAgICAgcmV0dXJuIFBhcmVudEltcDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXNPYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci0gCi0gICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90OwotICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0
aW9uKSB7Ci0gICAgICAgICAgICBib29sIHByZXNlbnQgPSBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xv
dChleGVjLCBlbnRyeSwgdGhpc09iaiwgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgICAg
IGlmIChwcmVzZW50KQotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHByZXNlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzbG90LnNl
dEN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVu
dHJ5LT5hdHRyaWJ1dGVzKCkpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlz
T2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjk1LDI4ICsyNzQsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB9CiAgICAgCiAgICAgLyoqCi0gICAgICogU2ltcGxpZmllZCB2ZXJzaW9uIG9m
IGdldFN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvciBpbiBjYXNlIHRoZXJlIGFyZSBvbmx5IGZ1bmN0
aW9ucy4KLSAgICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlEZXNj
cmlwdG9yIGFsbG93cyAndGhpcycgdG8gYXZvaWQgaW1wbGVtZW50aW5nCi0gICAgICogYSBkdW1t
eSBnZXRWYWx1ZVByb3BlcnR5LgotICAgICAqLwotICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnRJ
bXA+Ci0gICAgaW5saW5lIGJvb2wgZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgSlNPYmplY3QqIHRoaXNPYmosIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLSAg
ICB7Ci0gICAgICAgIGlmIChQYXJlbnRJbXA6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdGF0
aWNfY2FzdDxQYXJlbnRJbXAqPih0aGlzT2JqKSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICBpZiAoIWVudHJ5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIGJvb2wgcHJlc2VudCA9IHNldFVwU3Rh
dGljRnVuY3Rpb25TbG90KGV4ZWMsIGVudHJ5LCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwotICAgICAgICBpZiAocHJlc2VudCkKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOwotICAgICAgICByZXR1cm4gcHJlc2VudDsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBT
aW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0U3RhdGljUHJvcGVydHlTbG90IGluIGNhc2UgdGhlcmUg
YXJlIG5vIGZ1bmN0aW9ucywgb25seSAidmFsdWVzIi4KICAgICAgKiBVc2luZyB0aGlzIGluc3Rl
YWQgb2YgZ2V0U3RhdGljUHJvcGVydHlTbG90IHJlbW92ZXMgdGhlIG5lZWQgZm9yIGEgRnVuY0lt
cCBjbGFzcy4KICAgICAgKi8KQEAgLTMzMCwyNiArMjg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgQVNTRVJUKCEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEZ1bmN0aW9uKSk7CiAKLSAg
ICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iaiwgZW50cnktPnByb3BlcnR5R2V0
dGVyKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBT
aW1wbGlmaWVkIHZlcnNpb24gb2YgZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIGluIGNhc2Ug
dGhlcmUgYXJlIG5vIGZ1bmN0aW9ucywgb25seSAidmFsdWVzIi4KLSAgICAgKiBVc2luZyB0aGlz
IGluc3RlYWQgb2YgZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yIHJlbW92ZXMgdGhlIG5lZWQg
Zm9yIGEgRnVuY0ltcCBjbGFzcy4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0lt
cCwgY2xhc3MgUGFyZW50SW1wPgotICAgIGlubGluZSBib29sIGdldFN0YXRpY1ZhbHVlRGVzY3Jp
cHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIFRoaXNJbXAqIHRo
aXNPYmosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKLSAgICB7Ci0gICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+
ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZW50cnkp
IC8vIG5vdCBmb3VuZCwgZm9yd2FyZCB0byBwYXJlbnQKLSAgICAgICAgICAgIHJldHVybiBQYXJl
bnRJbXA6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCEoZW50cnktPmF0dHJp
YnV0ZXMoKSAmIEZ1bmN0aW9uKSk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Ci0gICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5
TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOworICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1
c3RvbSh0aGlzT2JqLCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMo
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksMTEgKzEwOSw2IEBAIGJvb2wgTWF0aE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQ2UKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCBF
eGVjU3RhdGU6Om1hdGhUYWJsZShleGVjKSwganNDYXN0PE1hdGhPYmplY3QqPihjZWxsKSwgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBNYXRoT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0
dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRl
OjptYXRoVGFibGUoZXhlYyksIGpzQ2FzdDxNYXRoT2JqZWN0Kj4ob2JqZWN0KSwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKiBleGVjKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2aXNpb24g
MTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgfQogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAog
ICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0
MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hbWVQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsNiBAQCBib29sIE5hbWVQcm90b3R5cGU6Omdl
dE93blByb3BlcnR5U2xvdChKCiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCYXNl
PihleGVjLCBFeGVjU3RhdGU6OnByaXZhdGVOYW1lUHJvdG90eXBlVGFibGUoZXhlYyksIGpzQ2Fz
dDxOYW1lUHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wg
TmFtZVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2Ny
aXB0b3I8QmFzZT4oZXhlYywgRXhlY1N0YXRlOjpwcml2YXRlTmFtZVByb3RvdHlwZVRhYmxlKGV4
ZWMpLCBqc0Nhc3Q8TmFtZVByb3RvdHlwZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJpdmF0ZU5hbWVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmFtZVByb3RvdHlwZS5oCShyZXZpc2lv
biAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lUHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRl
OgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
ckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDYgQEAgYm9vbCBO
dW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiBnZXRTdGF0aWNW
YWx1ZVNsb3Q8TnVtYmVyQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNT
dGF0ZTo6bnVtYmVyQ29uc3RydWN0b3JUYWJsZShleGVjKSwganNDYXN0PE51bWJlckNvbnN0cnVj
dG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgTnVtYmVyQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPE51bWJl
ckNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6Om51bWJlckNv
bnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxOdW1iZXJDb25zdHJ1Y3Rvcio+KG9iamVjdCks
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGxvb2t1
cFB1dDxOdW1iZXJDb25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgRXhlY1N0YXRlOjpudW1iZXJDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nh
c3Q8TnVtYmVyQ29uc3RydWN0b3IqPihjZWxsKSwgc2xvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0
MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAg
ICAgICBKU1ZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25z
dDsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTEgKzg4LDYgQEAgYm9vbCBOdW1iZXJQ
cm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlv
blNsb3Q8TnVtYmVyT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om51bWJlclByb3RvdHlwZVRhYmxl
KGV4ZWMpLCBqc0Nhc3Q8TnVtYmVyUHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKLWJvb2wgTnVtYmVyUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0
YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxOdW1iZXJPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6bnVt
YmVyUHJvdG90eXBlVGFibGUoZXhlYyksIGpzQ2FzdDxOdW1iZXJQcm90b3R5cGUqPihvYmplY3Qp
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0
aWMgQUxXQVlTX0lOTElORSBib29sIHRvVGhpc051bWJlcihKU1ZhbHVlIHRoaXNWYWx1ZSwgZG91
YmxlJiB4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVy
UHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL051bWJlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIE51bWJlclByb3RvdHlwZShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDExICs5Nyw2IEBAIGJvb2wgT2JqZWN0Q29uc3RydWN0b3I6OmdldE93
blByb3BlcnR5U2wKICAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0Pihl
eGVjLCBFeGVjU3RhdGU6Om9iamVjdENvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxPYmpl
Y3RDb25zdHJ1Y3Rvcio+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIE9i
amVjdENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVz
Y3JpcHRvcjxKU09iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpvYmplY3RDb25zdHJ1Y3RvclRhYmxl
KGV4ZWMpLCBqc0Nhc3Q8T2JqZWN0Q29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwotfQotCiAvLyBFQ01BIDE1LjIuMgogc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNPYmplY3QqIGNvbnN0cnVjdE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CkBAIC0xNDksMTIgKzE0NCwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiB7CiAgICAgaWYg
KCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3RlZCBw
cm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gb2JqZWN0LiIpKSk7
Ci0gICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShleGVjLCBleGVj
LT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsK
KwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgIGlmICghb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFtZSksIGRlc2NyaXB0b3IpKQorICAgIGlmICghZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC0zODAsNyArMzc2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdAogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
ICAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dl
dE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLgogICAgICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAgICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAg
ICAgICAgaWYgKCFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCAqaXRlciwg
ZGVzYykpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0Nv
bmZpZ3VyYWJsZV1dIGlzIHRydWUsIHNldCBkZXNjLltbQ29uZmlndXJhYmxlXV0gdG8gZmFsc2Uu
CiAgICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGZhbHNlKTsKQEAgLTQxNyw3ICs0MTMsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgZm9yIChQcm9w
ZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICAvLyBhLiBMZXQgZGVzYyBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIFAuCiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjOwotICAgICAgICBpZiAo
IW9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwg
ZXhlYywgKml0ZXIsIGRlc2MpKQorICAgICAgICBpZiAoIWdldE93blByb3BlcnR5RGVzY3JpcHRv
cihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAvLyBiLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGRlc2MpIGlzIHRydWUsIHRoZW4KICAgICAg
ICAgLy8gaS4gSWYgZGVzYy5bW1dyaXRhYmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tXcml0YWJs
ZV1dIHRvIGZhbHNlLgpAQCAtNDY0LDExICs0NjAsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdAogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLgotICAgICAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAgICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNj
KSkKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIGlmICghb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCAqaXRlciwgc2xvdCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3Vy
YWJsZV1dIGlzIHRydWUsIHRoZW4gcmV0dXJuIGZhbHNlLgotICAgICAgICBpZiAoZGVzYy5jb25m
aWd1cmFibGUoKSkKKyAgICAgICAgaWYgKHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApAQCAt
NDk0LDEyICs0OTAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dAogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVz
LmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8g
YS4gTGV0IGRlc2MgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLgotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0
b3IgZGVzYzsKLSAgICAgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsICppdGVyLCBkZXNjKSkKKyAgICAgICAgUHJvcGVy
dHlTbG90IHNsb3Q7CisgICAgICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCAqaXRlciwgc2xvdCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgLy8gYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihkZXNjKSBpcyB0cnVlIHRo
ZW4KICAgICAgICAgLy8gaS4gSWYgZGVzYy5bW1dyaXRhYmxlXV0gaXMgdHJ1ZSwgcmV0dXJuIGZh
bHNlLiBjLiBJZiBkZXNjLltbQ29uZmlndXJhYmxlXV0gaXMgdHJ1ZSwgdGhlbiByZXR1cm4gZmFs
c2UuCi0gICAgICAgIGlmICgoZGVzYy5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzYy53cml0YWJs
ZSgpKSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICBpZiAoKCFzbG90LmlzQWNjZXNz
b3IoKSAmJiBzbG90LndyaXRhYmxlKCkpIHx8IHNsb3QuY29uZmlndXJhYmxlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDYgQEAgYm9vbCBPYmplY3RQcm90b3R5
cGU6OmdldE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8
SlNOb25GaW5hbE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpvYmplY3RQcm90b3R5cGVUYWJsZShl
eGVjKSwganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCi1ib29sIE9iamVjdFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0
aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNOb25GaW5hbE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpv
YmplY3RQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KG9iamVj
dCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4
ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBPYmplY3RQcm90
b3R5cGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwog
ICAgIH07CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCShy
ZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eURlc2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsOCArMTg4LDggQEAgYm9vbCBQ
cm9wZXJ0eURlc2NyaXB0b3I6OmVxdWFsVG8oRXhlY1N0YQogICAgICAgICAhb3RoZXIubV9zZXR0
ZXIgPT0gbV9zZXR0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gKCFtX3Zh
bHVlIHx8IHNhbWVWYWx1ZShleGVjLCBvdGhlci5tX3ZhbHVlLCBtX3ZhbHVlKSkKLSAgICAgICAg
JiYgKCFtX2dldHRlciB8fCBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBvdGhlci5tX2dldHRl
ciwgbV9nZXR0ZXIpKQotICAgICAgICAmJiAoIW1fc2V0dGVyIHx8IEpTVmFsdWU6OnN0cmljdEVx
dWFsKGV4ZWMsIG90aGVyLm1fc2V0dGVyLCBtX3NldHRlcikpCisgICAgICAgICYmICghbV9nZXR0
ZXIgfHwgc2FtZVZhbHVlKGV4ZWMsIG90aGVyLm1fZ2V0dGVyLCBtX2dldHRlcikpCisgICAgICAg
ICYmICghbV9zZXR0ZXIgfHwgc2FtZVZhbHVlKGV4ZWMsIG90aGVyLm1fc2V0dGVyLCBtX3NldHRl
cikpCiAgICAgICAgICYmIGF0dHJpYnV0ZXNFcXVhbChvdGhlcik7CiB9CiAKQEAgLTIyMyw0ICsy
MjMsMzAgQEAgdW5zaWduZWQgUHJvcGVydHlEZXNjcmlwdG9yOjphdHRyaWJ1dGVzTwogICAgIHJl
dHVybiAobV9hdHRyaWJ1dGVzICYgb3ZlcnJpZGVNYXNrKSB8IChjdXJyZW50QXR0cmlidXRlcyAm
IH5vdmVycmlkZU1hc2spOwogfQogCitib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xv
dDsKKyAgICBzbG90LnNldEluR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCk7CisgICAgaWYgKCFv
YmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2xvdC5p
c0FjY2Vzc29yKCkpCisgICAgICAgIGRlc2NyaXB0b3Iuc2V0QWNjZXNzb3JEZXNjcmlwdG9yKHNs
b3QuZ2V0dGVyU2V0dGVyKCksIHNsb3QuYXR0cmlidXRlcygpKTsKKyAgICBlbHNlCisgICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFt
ZSksIHNsb3QuYXR0cmlidXRlcygpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sK
KyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBzbG90LnNldEluR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKCk7CisgICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHNsb3QuaXNBY2Nlc3NvcigpKQorICAgICAgICBkZXNjcmlw
dG9yLnNldEFjY2Vzc29yRGVzY3JpcHRvcihzbG90LmdldHRlclNldHRlcigpLCBzbG90LmF0dHJp
YnV0ZXMoKSk7CisgICAgZWxzZQorICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xv
dC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBHZXR0
ZXJTZXR0ZXI7CisgICAgY2xhc3MgUHJvcGVydHlOYW1lOwogCiAgICAgLy8gU2VlIEVTNS4xIDku
MTIKICAgICBib29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKQEAg
LTQxLDYgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1fc2VlbkF0dHJp
YnV0ZXMoMCkKICAgICAgICAgewogICAgICAgICB9CisKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCB3cml0YWJsZSgpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGVudW1lcmFibGUoKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb25m
aWd1cmFibGUoKSBjb25zdDsKQEAgLTgzLDYgKzg1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKICAgICAgICAgdW5zaWduZWQgbV9zZWVuQXR0cmli
dXRlczsKICAgICB9OworCisgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAg
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIH0KIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJ
KHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKIAorI2luY2x1ZGUgIkdldHRlclNl
dHRlci5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTI5LDEzICszMCwxOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKIHsKKyAgICBKU09iamVjdCogZ2V0dGVyRnVuYyA9IG1fZGF0YS5hY2Nl
c3Nvci5nZXR0ZXJTZXR0ZXItPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyRnVuYykKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKICAgICAvLyBQcmV2ZW50IGdldHRlciBmdW5jdGlv
bnMgZnJvbSBvYnNlcnZpbmcgZXhlY3V0aW9uIGlmIGFuIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLgog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2Vw
dGlvbigpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBtX2RhdGEuZ2V0dGVyRnVuYy0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEobV9kYXRhLmdl
dHRlckZ1bmMsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBtX2RhdGEuZ2V0dGVy
RnVuYywgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX3RoaXNWYWx1ZS5pc09iamVjdCgpID8gbV90aGlz
VmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpIDogbV90aGlzVmFsdWUsIGV4ZWMtPmVtcHR5TGlzdCgp
KTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlckZ1bmMtPm1ldGhvZFRhYmxlKCktPmdl
dENhbGxEYXRhKGdldHRlckZ1bmMsIGNhbGxEYXRhKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShtX2RhdGEuYWNjZXNzb3IudGhpc1ZhbHVlKTsKKyAgICByZXR1cm4g
Y2FsbChleGVjLCBnZXR0ZXJGdW5jLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZS5pc09i
amVjdCgpID8gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKSA6IHRoaXNWYWx1ZSwgZXhlYy0+
ZW1wdHlMaXN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxNDA0MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMjEyICszMCwyNTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFz
cyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgSlNPYmplY3Q7Ci0KLSNkZWZpbmUgSlNDX1ZBTFVFX01B
UktFUiAwCi0jZGVmaW5lIElOREVYX0dFVFRFUl9NQVJLRVIgcmVpbnRlcnByZXRfY2FzdDxHZXRW
YWx1ZUZ1bmM+KDIpCi0jZGVmaW5lIEdFVFRFUl9GVU5DVElPTl9NQVJLRVIgcmVpbnRlcnByZXRf
Y2FzdDxHZXRWYWx1ZUZ1bmM+KDMpCi0KLSAgICBjbGFzcyBQcm9wZXJ0eVNsb3QgewotICAgIHB1
YmxpYzoKLSAgICAgICAgZW51bSBDYWNoZWRQcm9wZXJ0eVR5cGUgewotICAgICAgICAgICAgVW5j
YWNoZWFibGUsCi0gICAgICAgICAgICBHZXR0ZXIsCi0gICAgICAgICAgICBDdXN0b20sCi0gICAg
ICAgICAgICBWYWx1ZQotICAgICAgICB9OwotCi0gICAgICAgIFByb3BlcnR5U2xvdCgpCi0gICAg
ICAgICAgICA6IG1fY2FjaGVkUHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjbGVhckJhc2UoKTsKLSAgICAgICAgICAgIGNsZWFyT2Zmc2V0KCk7Ci0gICAg
ICAgICAgICBjbGVhclZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBleHBsaWNpdCBQcm9w
ZXJ0eVNsb3QoY29uc3QgSlNWYWx1ZSBiYXNlKQotICAgICAgICAgICAgOiBtX3Nsb3RCYXNlKGJh
c2UpCi0gICAgICAgICAgICAsIG1fY2FjaGVkUHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjbGVhck9mZnNldCgpOwotICAgICAgICAgICAgY2xlYXJWYWx1
ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZWRlZiBKU1ZhbHVlICgqR2V0VmFsdWVGdW5j
KShFeGVjU3RhdGUqLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICB0
eXBlZGVmIEpTVmFsdWUgKCpHZXRJbmRleFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBz
bG90QmFzZSwgdW5zaWduZWQpOwotCi0gICAgICAgIEpTVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobV9nZXRWYWx1ZSA9PSBKU0NfVkFMVUVfTUFSS0VSKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtX3ZhbHVlOwotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gSU5ERVhf
R0VUVEVSX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9nZXRJbmRleFZhbHVlKGV4
ZWMsIHNsb3RCYXNlKCksIGluZGV4KCkpOwotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0g
R0VUVEVSX0ZVTkNUSU9OX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25H
ZXR0ZXIoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBzbG90QmFz
ZSgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXRWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gSlNDX1ZBTFVFX01BUktFUikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAgICAgICAgICAgIGlmIChtX2dldFZhbHVlID09
IElOREVYX0dFVFRFUl9NQVJLRVIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2V0SW5kZXhW
YWx1ZShleGVjLCBtX3Nsb3RCYXNlLCBtX2RhdGEuaW5kZXgpOwotICAgICAgICAgICAgaWYgKG1f
Z2V0VmFsdWUgPT0gR0VUVEVSX0ZVTkNUSU9OX01BUktFUikKLSAgICAgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShl
eGVjLCBzbG90QmFzZSgpLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQ2FjaGVkUHJvcGVydHlUeXBlIGNhY2hlZFByb3BlcnR5VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUHJvcGVydHlUeXBlOyB9Ci0gICAgICAgIGJvb2wg
aXNDYWNoZWFibGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFByb3BlcnR5VHlwZSAhPSBVbmNh
Y2hlYWJsZTsgfQotICAgICAgICBib29sIGlzQ2FjaGVhYmxlVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlZFByb3BlcnR5VHlwZSA9PSBWYWx1ZTsgfQotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXND
YWNoZWFibGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUgc2xvdEJhc2UsIEpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBjbGVhck9m
ZnNldCgpOwotICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IEpTQ19WQUxVRV9NQVJLRVI7Ci0gICAg
ICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFs
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0VmFsdWUoSlNWYWx1ZSBz
bG90QmFzZSwgSlNWYWx1ZSB2YWx1ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IEpT
Q19WQUxVRV9NQVJLRVI7Ci0gICAgICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7Ci0gICAg
ICAgICAgICBtX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICBtX29mZnNldCA9IG9mZnNldDsK
LSAgICAgICAgICAgIG1fY2FjaGVkUHJvcGVydHlUeXBlID0gVmFsdWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBjbGVhckJhc2UoKTsKLSAgICAgICAgICAg
IGNsZWFyT2Zmc2V0KCk7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gSlNDX1ZBTFVFX01BUktF
UjsKLSAgICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgc2V0Q3VzdG9tKEpTVmFsdWUgc2xvdEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKLSAgICAgICAgICAgIEFTU0VS
VChnZXRWYWx1ZSk7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gZ2V0VmFsdWU7Ci0gICAgICAg
ICAgICBtX2dldEluZGV4VmFsdWUgPSAwOwotICAgICAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RC
YXNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldENhY2hlYWJsZUN1c3Rv
bShKU1ZhbHVlIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7Ci0gICAgICAgICAgICBBU1NFUlQoZ2V0VmFsdWUp
OwotICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IGdldFZhbHVlOwotICAgICAgICAgICAgbV9nZXRJ
bmRleFZhbHVlID0gMDsKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKLSAgICAg
ICAgICAgIG1fY2FjaGVkUHJvcGVydHlUeXBlID0gQ3VzdG9tOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRDdXN0b21JbmRleChKU1ZhbHVlIHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCwg
R2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5kZXhWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKHNsb3RCYXNlKTsKLSAgICAgICAgICAgIEFTU0VSVChnZXRJbmRleFZhbHVlKTsKLSAg
ICAgICAgICAgIG1fZ2V0VmFsdWUgPSBJTkRFWF9HRVRURVJfTUFSS0VSOwotICAgICAgICAgICAg
bV9nZXRJbmRleFZhbHVlID0gZ2V0SW5kZXhWYWx1ZTsKLSAgICAgICAgICAgIG1fc2xvdEJhc2Ug
PSBzbG90QmFzZTsKLSAgICAgICAgICAgIG1fZGF0YS5pbmRleCA9IGluZGV4OwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBzZXRHZXR0ZXJTbG90KEpTT2JqZWN0KiBnZXR0ZXJGdW5jKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAgICBtX3Ro
aXNWYWx1ZSA9IG1fc2xvdEJhc2U7Ci0gICAgICAgICAgICBtX2dldFZhbHVlID0gR0VUVEVSX0ZV
TkNUSU9OX01BUktFUjsKLSAgICAgICAgICAgIG1fZGF0YS5nZXR0ZXJGdW5jID0gZ2V0dGVyRnVu
YzsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdChKU1Zh
bHVlIHNsb3RCYXNlLCBKU09iamVjdCogZ2V0dGVyRnVuYywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAg
ICBtX2dldFZhbHVlID0gR0VUVEVSX0ZVTkNUSU9OX01BUktFUjsKLSAgICAgICAgICAgIG1fdGhp
c1ZhbHVlID0gbV9zbG90QmFzZTsKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsK
LSAgICAgICAgICAgIG1fZGF0YS5nZXR0ZXJGdW5jID0gZ2V0dGVyRnVuYzsKLSAgICAgICAgICAg
IG1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgbV9jYWNoZWRQcm9wZXJ0eVR5cGUgPSBH
ZXR0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFVuZGVmaW5lZCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgSlNWYWx1ZSBzbG90QmFzZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX3Nsb3RCYXNlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCYXNlKEpTVmFs
dWUgYmFzZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fc2xvdEJhc2UpOwotICAg
ICAgICAgICAgQVNTRVJUKGJhc2UpOwotICAgICAgICAgICAgbV9zbG90QmFzZSA9IGJhc2U7Ci0g
ICAgICAgIH0KKy8vIEVDTUEgMjYyLTMgOC42LjEKKy8vIFByb3BlcnR5IGF0dHJpYnV0ZXMKK2Vu
dW0gQXR0cmlidXRlIHsKKyAgICBOb25lICAgICAgID0gMCwKKyAgICBSZWFkT25seSAgID0gMSA8
PCAxLCAvLyBwcm9wZXJ0eSBjYW4gYmUgb25seSByZWFkLCBub3Qgd3JpdHRlbgorICAgIERvbnRF
bnVtICAgPSAxIDw8IDIsIC8vIHByb3BlcnR5IGRvZXNuJ3QgYXBwZWFyIGluIChmb3IgLi4gaW4g
Li4pCisgICAgRG9udERlbGV0ZSA9IDEgPDwgMywgLy8gcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRl
ZAorICAgIEZ1bmN0aW9uICAgPSAxIDw8IDQsIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBv
bmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKKyAgICBBY2Nlc3NvciAgID0gMSA8PCA1LCAv
LyBwcm9wZXJ0eSBpcyBhIGdldHRlci9zZXR0ZXIKK307CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2Ns
YXNzIEdldHRlclNldHRlcjsKK2NsYXNzIEpTT2JqZWN0OworCitjbGFzcyBQcm9wZXJ0eVNsb3Qg
eworcHVibGljOgorICAgIGVudW0gQ2FjaGVkUHJvcGVydHlUeXBlIHsKKyAgICAgICAgVW5jYWNo
ZWFibGUsCisgICAgICAgIEdldHRlciwKKyAgICAgICAgQ3VzdG9tLAorICAgICAgICBDdXN0b21J
bmRleCwKKyAgICAgICAgVmFsdWUKKyAgICB9OwogCi0gICAgICAgIHZvaWQgY2xlYXJCYXNlKCkK
LSAgICAgICAgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBKU1Zh
bHVlKCk7Ci0jZW5kaWYKLSAgICAgICAgfQorICAgIFByb3BlcnR5U2xvdCgpCisgICAgICAgIDog
bV9wcm9wZXJ0eVR5cGUoVW5jYWNoZWFibGUpCisgICAgICAgICwgbV9jYWNoZWFibGUoZmFsc2Up
CisgICAgICAgICwgbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcihmYWxzZSkKKyAgICB7Cisg
ICAgICAgIGNsZWFyQmFzZSgpOworICAgICAgICBjbGVhck9mZnNldCgpOworICAgIH0KKworICAg
IGV4cGxpY2l0IFByb3BlcnR5U2xvdChjb25zdCBKU1ZhbHVlIGJhc2UpCisgICAgICAgIDogbV9z
bG90QmFzZShiYXNlKQorICAgICAgICAsIG1fcHJvcGVydHlUeXBlKFVuY2FjaGVhYmxlKQorICAg
ICAgICAsIG1fY2FjaGVhYmxlKGZhbHNlKQorICAgICAgICAsIG1faW5HZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZmFsc2UpCisgICAgeworICAgICAgICBjbGVhck9mZnNldCgpOworICAgIH0KKwor
ICAgIHR5cGVkZWYgSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBz
bG90QmFzZSwgUHJvcGVydHlOYW1lKTsKKyAgICB0eXBlZGVmIEpTVmFsdWUgKCpHZXRJbmRleFZh
bHVlRnVuYykoRXhlY1N0YXRlKiwgSlNWYWx1ZSBzbG90QmFzZSwgdW5zaWduZWQpOworCisgICAg
SlNWYWx1ZSBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fZGF0YS52YWx1ZSk7CisgICAgICAg
IGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDdXN0b21JbmRleCkKKyAgICAgICAgICAgIHJldHVybiBt
X2RhdGEuY3VzdG9tSW5kZXguZ2V0SW5kZXhWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBtX2RhdGEu
Y3VzdG9tSW5kZXguaW5kZXgpOworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gR2V0dGVy
KQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGV4ZWMpOworICAgICAgICByZXR1
cm4gbV9kYXRhLmN1c3RvbS5nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBwcm9wZXJ0eU5hbWUp
OworICAgIH0KKworICAgIEpTVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5cGUg
PT0gVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fZGF0YS52YWx1
ZSk7CisgICAgICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDdXN0b21JbmRleCkKKyAgICAgICAg
ICAgIHJldHVybiBtX2RhdGEuY3VzdG9tSW5kZXguZ2V0SW5kZXhWYWx1ZShleGVjLCBtX3Nsb3RC
YXNlLCBtX2RhdGEuY3VzdG9tSW5kZXguaW5kZXgpOworICAgICAgICBpZiAobV9wcm9wZXJ0eVR5
cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGV4ZWMpOwor
ICAgICAgICByZXR1cm4gbV9kYXRhLmN1c3RvbS5nZXRWYWx1ZShleGVjLCBzbG90QmFzZSgpLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIH0KKworICAgIENhY2hl
ZFByb3BlcnR5VHlwZSBjYWNoZWRQcm9wZXJ0eVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
YWJsZSA/IG1fcHJvcGVydHlUeXBlIDogVW5jYWNoZWFibGU7IH0KKyAgICBib29sIGlzQ2FjaGVh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWFibGU7IH0KKyAgICBib29sIGlzQ2FjaGVhYmxl
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlYWJsZSAmJiBtX3Byb3BlcnR5VHlwZSA9PSBW
YWx1ZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNDYWNoZWFibGUoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsK
KyAgICB9CisKKyAgICB2b2lkIHNldFZhbHVlV2l0aEJhc2UoSlNWYWx1ZSBzbG90QmFzZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVCh2
YWx1ZSk7CisgICAgICAgIGNsZWFyT2Zmc2V0KCk7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90
QmFzZTsKKyAgICAgICAgbV9kYXRhLnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAg
ICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBWYWx1ZTsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxz
ZTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRWYWx1ZVdpdGhQcm9wZXJ0eU9mZnNldChKU1ZhbHVlIHNsb3RCYXNlLCBKU1ZhbHVl
IHZhbHVlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
eworICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7
CisgICAgICAgIG1fZGF0YS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAg
IG1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IFZhbHVlOworICAg
ICAgICBtX2NhY2hlYWJsZSA9IHRydWU7CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CisgICAgfQorCisgICAgdm9pZCBzZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUpOwor
ICAgICAgICBjbGVhckJhc2UoKTsKKyAgICAgICAgY2xlYXJPZmZzZXQoKTsKKyAgICAgICAgbV9k
YXRhLnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgbV9wcm9wZXJ0eVR5
cGUgPSBWYWx1ZTsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9hdHRy
aWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldEN1c3RvbShKU1ZhbHVl
IHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisg
ICAgeworICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOworICAgICAgICBBU1NFUlQoZ2V0VmFsdWUp
OworICAgICAgICBtX2RhdGEuY3VzdG9tLmdldFZhbHVlID0gZ2V0VmFsdWU7CisgICAgICAgIG1f
c2xvdEJhc2UgPSBzbG90QmFzZTsKKyAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBDdXN0b207Cisg
ICAgICAgIG1fY2FjaGVhYmxlID0gZmFsc2U7CisgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJp
YnV0ZXM7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Q2FjaGVhYmxlQ3VzdG9tKEpTVmFsdWUg
c2xvdEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CisgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7
CisgICAgICAgIG1fZGF0YS5jdXN0b20uZ2V0VmFsdWUgPSBnZXRWYWx1ZTsKKyAgICAgICAgbV9z
bG90QmFzZSA9IHNsb3RCYXNlOworICAgICAgICBtX3Byb3BlcnR5VHlwZSA9IEN1c3RvbTsKKyAg
ICAgICAgbV9jYWNoZWFibGUgPSB0cnVlOworICAgICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1
dGVzOworICAgIH0KKworICAgIHZvaWQgc2V0Q3VzdG9tSW5kZXgoSlNWYWx1ZSBzbG90QmFzZSwg
dW5zaWduZWQgaW5kZXgsIEdldEluZGV4VmFsdWVGdW5jIGdldEluZGV4VmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOworICAgICAgICBB
U1NFUlQoZ2V0SW5kZXhWYWx1ZSk7CisgICAgICAgIG1fZGF0YS5jdXN0b21JbmRleC5nZXRJbmRl
eFZhbHVlID0gZ2V0SW5kZXhWYWx1ZTsKKyAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOwor
ICAgICAgICBtX2RhdGEuY3VzdG9tSW5kZXguaW5kZXggPSBpbmRleDsKKyAgICAgICAgbV9wcm9w
ZXJ0eVR5cGUgPSBDdXN0b21JbmRleDsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAg
ICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldEFj
Y2Vzc29yU2xvdChHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgdW5zaWduZWQgYXR0cmlidXRl
cykKKyAgICB7CisgICAgICAgIEFTU0VSVChnZXR0ZXJTZXR0ZXIpOworICAgICAgICBtX2RhdGEu
YWNjZXNzb3IudGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKG1fc2xvdEJhc2UpOworICAgICAg
ICBtX2RhdGEuYWNjZXNzb3IuZ2V0dGVyU2V0dGVyID0gZ2V0dGVyU2V0dGVyOworICAgICAgICBt
X3Byb3BlcnR5VHlwZSA9IEdldHRlcjsKKyAgICAgICAgbV9jYWNoZWFibGUgPSBmYWxzZTsKKyAg
ICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICB9CisKKyAgICB2b2lkIHNldENh
Y2hlYWJsZUFjY2Vzc29yU2xvdChKU1ZhbHVlIHNsb3RCYXNlLCBHZXR0ZXJTZXR0ZXIqIGdldHRl
clNldHRlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGdldHRlclNldHRlcik7CisgICAgICAgIG1fZGF0YS5hY2Nlc3Nv
ci50aGlzVmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUobV9zbG90QmFzZSk7CisgICAgICAgIG1fc2xv
dEJhc2UgPSBzbG90QmFzZTsKKyAgICAgICAgbV9kYXRhLmFjY2Vzc29yLmdldHRlclNldHRlciA9
IGdldHRlclNldHRlcjsKKyAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIG1fcHJv
cGVydHlUeXBlID0gR2V0dGVyOworICAgICAgICBtX2NhY2hlYWJsZSA9IHRydWU7CisgICAgICAg
IG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgfQorCisgICAgdm9pZCBzZXRVbmRlZmlu
ZWQoKQorICAgIHsKKyAgICAgICAgc2V0VmFsdWVXaXRoQXR0cmlidXRlcyhqc1VuZGVmaW5lZCgp
LCBOb25lKTsKKyAgICB9CisKKyAgICBKU1ZhbHVlIHNsb3RCYXNlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3Nsb3RCYXNlOworICAgIH0KKworICAgIHZvaWQgc2V0QmFzZShKU1Zh
bHVlIGJhc2UpCisgICAgeworICAgICAgICBBU1NFUlQobV9zbG90QmFzZSk7CisgICAgICAgIEFT
U0VSVChiYXNlKTsKKyAgICAgICAgbV9zbG90QmFzZSA9IGJhc2U7CisgICAgfQogCi0gICAgICAg
IHZvaWQgY2xlYXJWYWx1ZSgpCi0gICAgICAgIHsKKyAgICB2b2lkIGNsZWFyQmFzZSgpCisgICAg
ewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CisgICAg
ICAgIG1fc2xvdEJhc2UgPSBKU1ZhbHVlKCk7CiAjZW5kaWYKLSAgICAgICAgfQorICAgIH0KIAot
ICAgICAgICB2b2lkIGNsZWFyT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2xl
YXIgb2Zmc2V0IGV2ZW4gaW4gcmVsZWFzZSBidWlsZHMsIGluIGNhc2UgdGhpcyBQcm9wZXJ0eVNs
b3QgaGFzIGJlZW4gdXNlZCBiZWZvcmUuCi0gICAgICAgICAgICAvLyAoRm9yIG90aGVyIGRhdGEg
bWVtYmVycywgd2UgZG9uJ3QgbmVlZCB0byBjbGVhciBhbnl0aGluZyBiZWNhdXNlIHJldXNlIHdv
dWxkIG1lYW5pbmdmdWxseSBvdmVyd3JpdGUgdGhlbS4pCi0gICAgICAgICAgICBtX29mZnNldCA9
IGludmFsaWRPZmZzZXQ7Ci0gICAgICAgICAgICBtX2NhY2hlZFByb3BlcnR5VHlwZSA9IFVuY2Fj
aGVhYmxlOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEuaW5kZXg7IH0KLQotICAgICAgICBHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVy
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fY2FjaGVkUHJvcGVydHlU
eXBlID09IEN1c3RvbSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZTsKLSAgICAgICAg
fQotICAgIHByaXZhdGU6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZnVuY3Rp
b25HZXR0ZXIoRXhlY1N0YXRlKikgY29uc3Q7Ci0KLSAgICAgICAgR2V0VmFsdWVGdW5jIG1fZ2V0
VmFsdWU7Ci0gICAgICAgIEdldEluZGV4VmFsdWVGdW5jIG1fZ2V0SW5kZXhWYWx1ZTsKLSAgICAg
ICAgCi0gICAgICAgIEpTVmFsdWUgbV9zbG90QmFzZTsKLSAgICAgICAgdW5pb24gewotICAgICAg
ICAgICAgSlNPYmplY3QqIGdldHRlckZ1bmM7CisgICAgdm9pZCBjbGVhck9mZnNldCgpCisgICAg
eworICAgICAgICAvLyBDbGVhciBvZmZzZXQgZXZlbiBpbiByZWxlYXNlIGJ1aWxkcywgaW4gY2Fz
ZSB0aGlzIFByb3BlcnR5U2xvdCBoYXMgYmVlbiB1c2VkIGJlZm9yZS4KKyAgICAgICAgLy8gKEZv
ciBvdGhlciBkYXRhIG1lbWJlcnMsIHdlIGRvbid0IG5lZWQgdG8gY2xlYXIgYW55dGhpbmcgYmVj
YXVzZSByZXVzZSB3b3VsZCBtZWFuaW5nZnVsbHkgb3ZlcndyaXRlIHRoZW0uKQorICAgICAgICBt
X29mZnNldCA9IGludmFsaWRPZmZzZXQ7CisgICAgICAgIG1fcHJvcGVydHlUeXBlID0gVW5jYWNo
ZWFibGU7CisgICAgICAgIG1fY2FjaGVhYmxlID0gZmFsc2U7CisgICAgfQorCisgICAgR2V0VmFs
dWVGdW5jIGN1c3RvbUdldHRlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9jYWNo
ZWFibGUgJiYgbV9wcm9wZXJ0eVR5cGUgPT0gQ3VzdG9tKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0
YS5jdXN0b20uZ2V0VmFsdWU7CisgICAgfQorCisgICAgdW5zaWduZWQgYXR0cmlidXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGJvb2wgd3JpdGFibGUoKSBjb25zdCB7
IHJldHVybiAhKG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5KTsgfQorICAgIGJvb2wgZW51bWVyYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuICEobV9hdHRyaWJ1dGVzICYgRG9udEVudW0pOyB9CisgICAgYm9v
bCBjb25maWd1cmFibGUoKSBjb25zdCB7IHJldHVybiAhKG1fYXR0cmlidXRlcyAmIERvbnREZWxl
dGUpOyB9CisKKyAgICBib29sIGlzQWNjZXNzb3IoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5
VHlwZSA9PSBHZXR0ZXI7IH0KKyAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlcigpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNBY2Nlc3NvcigpKTsKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YS5hY2Nlc3Nvci5nZXR0ZXJTZXR0ZXI7CisgICAgfQorCisgICAgdm9pZCBzZXRJbkdldE93
blByb3BlcnR5RGVzY3JpcHRvcigpIHsgbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHRy
dWU7IH0KKyAgICBib29sIGluR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgfQorCitwcml2YXRlOgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKikgY29uc3Q7CisK
KyAgICBKU1ZhbHVlIG1fc2xvdEJhc2U7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3Qgewor
ICAgICAgICAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXI7CisgICAgICAgICAgICBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWU7CisgICAgICAgIH0gYWNjZXNzb3I7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWU7CisgICAgICAgIH0gY3VzdG9t
OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgR2V0SW5kZXhWYWx1ZUZ1bmMgZ2V0SW5k
ZXhWYWx1ZTsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4OwotICAgICAgICB9IG1fZGF0YTsK
LQotICAgICAgICBKU1ZhbHVlIG1fdmFsdWU7Ci0gICAgICAgIEpTVmFsdWUgbV90aGlzVmFsdWU7
Ci0KLSAgICAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgICAgIENhY2hlZFByb3Bl
cnR5VHlwZSBtX2NhY2hlZFByb3BlcnR5VHlwZTsKLSAgICB9OworICAgICAgICB9IGN1c3RvbUlu
ZGV4OworICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICB9IG1fZGF0YTsKKworICAg
IFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIENhY2hlZFByb3BlcnR5VHlwZSBtX3Byb3Bl
cnR5VHlwZTsKKyAgICB1aW50OF90IG1fYXR0cmlidXRlczsKKyAgICBib29sIG1fY2FjaGVhYmxl
OworICAgIGJvb2wgbV9pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKK307CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1OCwxMSArMTU4LDYgQEAgYm9vbCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVy
dHlTbAogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8UmVnRXhwQ29uc3RydWN0b3IsIElu
dGVybmFsRnVuY3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZShl
eGVjKSwganNDYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKLWJvb2wgUmVnRXhwQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0
U3RhdGljVmFsdWVEZXNjcmlwdG9yPFJlZ0V4cENvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9u
PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cENvbnN0cnVjdG9yVGFibGUoZXhlYyksIGpzQ2FzdDxS
ZWdFeHBDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19
Ci0KIEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIxKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0
cnVjdG9yKHNsb3RCYXNlKS0+Z2V0QmFja3JlZihleGVjLCAxKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24g
MTQwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAK
ICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZp
c2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtODQsMTMgKzg0LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBSZWdFeHBNYXRj
aGVzQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4ob2JqZWN0
KTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5
KGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAg
ICB9Ci0KICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHYsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKICAgICAgICAgewogICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PFJlZ0V4cE1hdGNoZXNBcnJheSo+KGNlbGwpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MywyMiArOTMsMTIgQEAgYm9vbCBSZWdFeHBPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdChKUwogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxhc3RJbmRleCkgewogICAgICAgICBSZWdFeHBPYmplY3QqIHJlZ0V4cCA9
IGFzUmVnRXhwT2JqZWN0KGNlbGwpOwotICAgICAgICBzbG90LnNldFZhbHVlKHJlZ0V4cCwgcmVn
RXhwLT5nZXRMYXN0SW5kZXgoKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWVXaXRoQmFzZShyZWdF
eHAsIHJlZ0V4cC0+Z2V0TGFzdEluZGV4KCksIHJlZ0V4cC0+bV9sYXN0SW5kZXhJc1dyaXRhYmxl
ID8gRG9udERlbGV0ZSB8IERvbnRFbnVtIDogRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9u
bHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGdldFN0YXRpY1Zh
bHVlU2xvdDxSZWdFeHBPYmplY3QsIEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFRh
YmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKLWJvb2wgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KSB7Ci0gICAgICAgIFJlZ0V4cE9i
amVjdCogcmVnRXhwID0gYXNSZWdFeHBPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKHJlZ0V4cC0+Z2V0TGFzdEluZGV4KCksIHJlZ0V4cC0+bV9sYXN0SW5k
ZXhJc1dyaXRhYmxlID8gRG9udERlbGV0ZSB8IERvbnRFbnVtIDogRG9udERlbGV0ZSB8IERvbnRF
bnVtIHwgUmVhZE9ubHkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxSZWdFeHBPYmplY3QsIEpTT2JqZWN0PihleGVjLCBF
eGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ob2JqZWN0
KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogYm9vbCBSZWdFeHBPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxhc3RJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBleGVjKEV4ZWNTdGF0ZSosIEpTU3Ry
aW5nKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3
MCw2IEBAIGJvb2wgUmVnRXhwUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICByZXR1
cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PFJlZ0V4cE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpy
ZWdFeHBQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PFJlZ0V4cFByb3RvdHlwZSo+KGNlbGwp
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIFJlZ0V4cFByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQot
ewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8UmVnRXhwT2JqZWN0Pihl
eGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhw
UHJvdG90eXBlKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1
bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTcgKzEyOCwx
MSBAQCB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmCiAgICAgQVNTRVJU
KHZhbHVlKTsKIAogICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7Ci0g
ICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICBzbG90LnNldFZhbHVlV2l0aEF0
dHJpYnV0ZXModmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7Ci0g
ICAgaWYgKCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworICAgIHNs
b3Quc2V0QWNjZXNzb3JTbG90KGFzR2V0dGVyU2V0dGVyKHZhbHVlKSwgYXR0cmlidXRlcyk7CiB9
CiAKIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0Nv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUsMTEgKzY1LDYgQEAgYm9vbCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlT
bAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SW50ZXJuYWxGdW5jdGlvbj4oZXhl
YywgRXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3RyaW5n
Q29uc3RydWN0b3IqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBTdHJp
bmdDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2Ny
aXB0b3I8SW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgRXhlY1N0YXRlOjpzdHJpbmdDb25zdHJ1Y3Rv
clRhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3RyaW5nQ29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSBzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3RhdGUq
IGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0
YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCwxNCArNjAsNiBAQCBib29sIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJCiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAotYm9vbCBT
dHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxW
YWx1ZSgpLT5nZXRTdHJpbmdQcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7ICAgIAotICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZvaWQgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAg
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MywxMSArMTUzLDYgQEAgYm9vbCBTdHJpbmdQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xv
dAogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8U3RyaW5nT2JqZWN0PihleGVjLCBF
eGVjU3RhdGU6OnN0cmluZ1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8U3RyaW5nUHJvdG90eXBlKj4oY2Vs
bCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgU3RyaW5nUHJvdG90eXBlOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Ci17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxTdHJpbmdPYmplY3Q+
KGV4ZWMsIEV4ZWNTdGF0ZTo6c3RyaW5nVGFibGUoZXhlYyksIGpzQ2FzdDxTdHJpbmdQcm90b3R5
cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIC8vIEhlbHBlciBmb3IgcHJvZHVjaW5nIGEgSlNTdHJpbmcgZm9yICdzdHJpbmcnLCB3
aGVyZSAnc3RyaW5nJyB3YXMgYmVlbiBwcm9kdWNlZCBieQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgJKHJldmlzaW9uIDE0MDQwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQ5LDggKzI0OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkKiBhdHRyaWJ1dGVzID0gMCk7CisgICAgICAgIFByb3BlcnR5
T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgdW5zaWdu
ZWQqIGF0dHJpYnV0ZXMgPSAwKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlP
ZmZzZXQgZ2V0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOwogCiAgICAgICAgIGJvb2wgaGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
czsgfQpAQCAtNDc5LDcgKzQ3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4g
bmV3U3RydWN0dXJlOwogICAgIH0KICAgICAgICAgCi0gICAgaW5saW5lIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKKyAgICBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCogYXR0cmlidXRlcykKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJ
bmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeShnbG9iYWxEYXRhKTsKQEAgLTQ4NywxMCArNDg3LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKICAgICAgICAgUHJvcGVydHlNYXBF
bnRyeSogZW50cnkgPSBtX3Byb3BlcnR5VGFibGUtPmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5m
aXJzdDsKLSAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZz
ZXQ7CisgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMpCisgICAgICAgICAgICAqYXR0cmlidXRlcyA9IGVu
dHJ5LT5hdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gZW50cnktPm9mZnNldDsKICAgICB9CiAK
LSAgICBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSkKKyAgICBpbmxpbmUgUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6
OlN0cmluZyYgbmFtZSwgdW5zaWduZWQqIGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwogICAgICAgICBtYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7CkBAIC00OTgsNyArNTAyLDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAK
ICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBtX3Byb3BlcnR5VGFibGUtPmZpbmRX
aXRoU3RyaW5nKG5hbWUuaW1wbCgpKS5maXJzdDsKLSAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50
cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7CisgICAgICAgIGlmICghZW50cnkpCisgICAgICAg
ICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMpCisgICAg
ICAgICAgICAqYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4g
ZW50cnktPm9mZnNldDsKICAgICB9CiAgICAgCiAgICAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjpt
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
KQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODMgQEAKKzIwMTMtMDEtMjIgIEdhdmlu
IEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNzQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgcHJhY3RpY2FsbHkgcmVkdW5kYW50IHdpdGggZ2V0T3du
UHJvcGVydHlTbG90LgorICAgICAgICAgICAgLSByZW1vdmUgYWxsIGltcGxlbWVudGF0aW9ucyBv
ZiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IuCisgICAgICAgICAgICAtIHBhc3MgYXR0cmlidXRl
cyB0byBnZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAgICAgICAgICAtIHJlbmFtZWQgSlNDdXN0b21H
ZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLCByZW1vdmVkCisgICAgICAgICAgICAgICdB
bmREZXNjcmlwdG9yJy4KKyAgICAgICAgICAgIC0gYWRkZWQgYSB3b3JrYXJvdW5kIHRvIEpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QsCisgICAgICAgICAgICAgIGdldE93blByb3BlcnR5
U2xvdCBkb2VzIG5vdCBiZWhhdmUgY29ycmVjdGx5IHdydCAnb3duJ25lc3MsCisgICAgICAgICAg
ICAgIHJldHVybnMgcHJvcGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluLiBNYWludGFpbiBw
cmV2aW91cworICAgICAgICAgICAgICBiZWhhdmlvdXIgZm9yIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvci4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NT
U1N0eWxlRGVjbGFyYXRpb246OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
SGlzdG9yeTo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZSk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRG
dW5jdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
V29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlR2V0
T3duUHJvcGVydHlTbG90Qm9keSk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAg
IChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JE
ZWNsYXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dDoKKyAgICAgICAg
KiBicmlkZ2UvanNjL0JyaWRnZUpTQy5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFu
Y2U6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19ydW50
aW1lLmg6CisgICAgICAgIChPYmpjRmFsbGJhY2tPYmplY3RJbXApOgorICAgICAgICAqIGJyaWRn
ZS9vYmpjL29iamNfcnVudGltZS5tbToKKyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVB
cnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgICogYnJpZGdlL3J1bnRp
bWVfYXJyYXkuaDoKKyAgICAgICAgKFJ1bnRpbWVBcnJheSk6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZU1ldGhvZDo6Z2V0T3duUHJv
cGVydHlTbG90KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmg6CisgICAgICAgIChSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGlt
ZV9vYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKiBicmlkZ2Uv
cnVudGltZV9vYmplY3QuaDoKKyAgICAgICAgKFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGNz
cy9DU1NTdHlsZURlY2xhcmF0aW9uLmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVt
ZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsOgorICAgICAgICAq
IGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuaWRsOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5pZGw6
CisgICAgICAgICogcGFnZS9Mb2NhdGlvbi5pZGw6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmlkbDoKKwogMjAxMy0wMS0yMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEF0b21pY01hcmt1cFRva2VuQmFzZSBtdXN0IGRpZQpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgyLDcgKzI0ODIsNiBAQCBfX1pON1dlYkNvcmU0
UGFnZTE4c2V0VmlzaWJpbGl0eVN0YXRlRU5TCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDExZ2V0
Q2FsbERhdGFFUE5TXzZKU0NlbGxFUk5TXzhDYWxsRGF0YUUKIF9fWk4zSlNDMTNSdW50aW1lTWV0
aG9kMTRmaW5pc2hDcmVhdGlvbkVSTlNfMTJKU0dsb2JhbERhdGFFUktOM1dURjZTdHJpbmdFCiBf
X1pOM0pTQzEzUnVudGltZU1ldGhvZDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU182SlNDZWxsRVBO
U185RXhlY1N0YXRlRU5TXzEyUHJvcGVydHlOYW1lRVJOU18xMlByb3BlcnR5U2xvdEUKLV9fWk4z
SlNDMTNSdW50aW1lTWV0aG9kMjRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JFUE5TXzhKU09iamVj
dEVQTlNfOUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVSTlNfMThQcm9wZXJ0eURlc2NyaXB0
b3JFCiBfX1pOM0pTQzEzUnVudGltZU1ldGhvZDZzX2luZm9FCiBfX1pOM0pTQzEzUnVudGltZU1l
dGhvZEMyRVBOU18xNEpTR2xvYmFsT2JqZWN0RVBOU185U3RydWN0dXJlRVBOU184QmluZGluZ3M2
TWV0aG9kRQogX19aTjNKU0M4QmluZGluZ3MxMFJvb3RPYmplY3REMUV2CkBAIC0yNDkzLDcgKzI0
OTIsNiBAQCBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdDE0ZmluaXNoCiBfX1pOM0pT
QzhCaW5kaW5nczEzUnVudGltZU9iamVjdDE2Z2V0Q29uc3RydWN0RGF0YUVQTlNfNkpTQ2VsbEVS
TlNfMTNDb25zdHJ1Y3REYXRhRQogX19aTjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3QxOGdl
dE93blByb3BlcnR5U2xvdEVQTlNfNkpTQ2VsbEVQTlNfOUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5
TmFtZUVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVj
dDE5Z2V0T3duUHJvcGVydHlOYW1lc0VQTlNfOEpTT2JqZWN0RVBOU185RXhlY1N0YXRlRVJOU18x
N1Byb3BlcnR5TmFtZUFycmF5RU5TXzE1RW51bWVyYXRpb25Nb2RlRQotX19aTjNKU0M4QmluZGlu
Z3MxM1J1bnRpbWVPYmplY3QyNGdldE93blByb3BlcnR5RGVzY3JpcHRvckVQTlNfOEpTT2JqZWN0
RVBOU185RXhlY1N0YXRlRU5TXzEyUHJvcGVydHlOYW1lRVJOU18xOFByb3BlcnR5RGVzY3JpcHRv
ckUKIF9fWk4zSlNDOEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0M3B1dEVQTlNfNkpTQ2VsbEVQTlNf
OUV4ZWNTdGF0ZUVOU18xMlByb3BlcnR5TmFtZUVOU183SlNWYWx1ZUVSTlNfMTVQdXRQcm9wZXJ0
eVNsb3RFCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdDZzX2luZm9FCiBfX1pOM0pT
QzhCaW5kaW5nczEzUnVudGltZU9iamVjdDdkZXN0cm95RVBOU182SlNDZWxsRQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFy
YXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjgsMjQgKzMyOCw5IEBAIGJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRPd25Qcm9w
ZXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHByb3BlcnR5SW5mby5oYWRQaXhl
bE9yUG9zUHJlZml4KQotICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCksIGNzc1Byb3BlcnR5R2V0dGVy
UGl4ZWxPclBvc1ByZWZpeENhbGxiYWNrKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0
aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlJbmZvLnByb3BlcnR5SUQpLCBjc3NQ
cm9wZXJ0eUdldHRlclBpeGVsT3JQb3NQcmVmaXhDYWxsYmFjaywgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pOwogICAgIGVsc2UKLSAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0
aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlJbmZvLnByb3BlcnR5SUQpLCBjc3NQ
cm9wZXJ0eUdldHRlckNhbGxiYWNrKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBKU0NT
U1N0eWxlRGVjbGFyYXRpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eUlkZW50aWZpZXIsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIENTU1Byb3BlcnR5SW5m
byBwcm9wZXJ0eUluZm8gPSBjc3NQcm9wZXJ0eUlERm9ySlNDU1NQcm9wZXJ0eU5hbWUocHJvcGVy
dHlJZGVudGlmaWVyKTsKLSAgICBpZiAoIXByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlOwotICAgIGlmIChwcm9wZXJ0eUlu
Zm8uaGFkUGl4ZWxPclBvc1ByZWZpeCkKLSAgICAgICAgdmFsdWUgPSBjc3NQcm9wZXJ0eUdldHRl
clBpeGVsT3JQb3NQcmVmaXgoZXhlYywgdGhpcywgcHJvcGVydHlJbmZvLnByb3BlcnR5SUQpOwot
ICAgIGVsc2UKLSAgICAgICAgdmFsdWUgPSBjc3NQcm9wZXJ0eUdldHRlcihleGVjLCB0aGlzLCBw
cm9wZXJ0eUluZm8ucHJvcGVydHlJRCk7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZh
bHVlLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgICAgIHNsb3Quc2V0
Q3VzdG9tSW5kZXgodGhpcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5SW5mby5wcm9w
ZXJ0eUlEKSwgY3NzUHJvcGVydHlHZXR0ZXJDYWxsYmFjaywgUmVhZE9ubHkgfCBEb250RGVsZXRl
IHwgRG9udEVudW0pOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAxNDA0
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsMTEgQEAgc3RhdGljIEpTVmFsdWUgbmFtZWRJ
dGVtR2V0dGVyKEV4ZWNTdGF0ZQogYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKKworICAgIC8vIE5ldmVyIGFsbG93IGNyb3NzLWRv
bWFpbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IKKyAgICBpZiAoc2xvdC5pbkdldE93blByb3Bl
cnR5RGVzY3JpcHRvcigpICYmICFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCiAgICAgLy8gV2hlbiBhY2Nlc3NpbmcgYSBXaW5kb3cgY3Jvc3MtZG9tYWluLCBmdW5jdGlv
bnMgYXJlIGFsd2F5cyB0aGUgbmF0aXZlIGJ1aWx0LWluIG9uZXMsIGFuZCB0aGV5CiAgICAgLy8g
YXJlIG5vdCBhZmZlY3RlZCBieSBwcm9wZXJ0aWVzIGNoYW5nZWQgb24gdGhlIFdpbmRvdyBvciBh
bnl0aGluZyBpbiBpdHMgcHJvdG90eXBlIGNoYWluLgogICAgIC8vIFRoaXMgaXMgY29uc2lzdGVu
dCB3aXRoIHRoZSBiZWhhdmlvciBvZiBGaXJlZm94LgpAQCAtMTQwLDEyICsxNDUsMTIgQEAgYm9v
bCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwogICAgICAgICAvLyBJdCBpZ25v
cmVzIGFueSBjdXN0b20gcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHNldCBvbiB0aGUgRE9NV2lu
ZG93IChpbmNsdWRpbmcgYSBjdXN0b20gcHJvdG90eXBlKS4KICAgICAgICAgZW50cnkgPSBzX2lu
Zm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAg
ICAgaWYgKGVudHJ5ICYmICEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVuY3Rpb24pICYm
IGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpID09IGpzRE9NV2luZG93Q2xvc2VkKSB7Ci0gICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7
CisgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlH
ZXR0ZXIoKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZW50cnkgPSBKU0RPTVdpbmRvd1Byb3Rv
dHlwZTo6c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIGlmIChlbnRyeSAmJiAoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEpTQzo6RnVu
Y3Rpb24pICYmIGVudHJ5LT5mdW5jdGlvbigpID09IGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rp
b25DbG9zZSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2Fj
aGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9z
ZSwgMD4pOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2FjaGlu
Z1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSwg
MD4sIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAKQEAgLTE3NSwyMiArMTgwLDIyIEBAIGJvb2wgSlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICAgICAgaWYgKGVudHJ5LT5hdHRyaWJ1dGVz
KCkgJiBKU0M6OkZ1bmN0aW9uKSB7CiAgICAgICAgICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkg
PT0ganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkJsdXIpIHsKICAgICAgICAgICAgICAgICBp
ZiAoIWFsbG93c0FjY2VzcykgewotICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90
b3R5cGVGdW5jdGlvbkJsdXIsIDA+KTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93
UHJvdG90eXBlRnVuY3Rpb25CbHVyLCAwPiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNET01XaW5kb3dQcm90b3R5cGVGdW5j
dGlvbkNsb3NlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvd3NBY2Nlc3MpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRp
Y0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSwgMD4pOwor
ICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5n
U3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlLCAw
PiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0
aW9uKCkgPT0ganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkZvY3VzKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKCFhbGxvd3NBY2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRD
dXN0b20odGhpc09iamVjdCwgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2lu
ZG93UHJvdG90eXBlRnVuY3Rpb25Gb2N1cywgMD4pOworICAgICAgICAgICAgICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNE
T01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkZvY3VzLCAwPiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNET01XaW5kb3dQcm90
b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvd3NB
Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rp
b25Qb3N0TWVzc2FnZSwgMj4pOworICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXI8anNET01XaW5kb3dQcm90
b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlLCAyPiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNET01XaW5kb3dQcm90b3R5cGVG
dW5jdGlvblNob3dNb2RhbERpYWxvZykgewpAQCAtMjA0LDcgKzIwOSw3IEBAIGJvb2wgSlNET01X
aW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICAgICAgLy8gQWxsb3cgYWNjZXNzIHRv
IHRvU3RyaW5nKCkgY3Jvc3MtZG9tYWluLCBidXQgYWx3YXlzIE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmcuCiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LnRvU3RyaW5nKSB7CiAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgewotICAgICAgICAg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25H
ZXR0ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG9iamVj
dFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMjEyLDcgKzIxNyw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xv
dChKU0MKIAogICAgIGVudHJ5ID0gSlNET01XaW5kb3c6OnNfaW5mby5wcm9wSGFzaFRhYmxlKGV4
ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChlbnRyeSkgewotICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7Cisg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigp
LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC0yMjIsNyArMjI3LDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpT
QwogICAgIC8vIGFyZSBpbiBNb3ogYnV0IG5vdCBJRS4gU2luY2Ugd2UgaGF2ZSBzb21lIG9mIHRo
ZXNlLCB3ZSBoYXZlIHRvIGRvCiAgICAgLy8gaXQgdGhlIE1veiB3YXkuCiAgICAgaWYgKHRoaXNP
YmplY3QtPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5zY29wZWRDaGlsZChwcm9wZXJ0eU5hbWVU
b0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhp
c09iamVjdCwgY2hpbGRGcmFtZUdldHRlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVu
dW0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIzMCw3ICsyMzUsMTIgQEAg
Ym9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwogICAgIC8vIHByZWNlZGVu
Y2Ugb3ZlciB0aGUgaW5kZXggYW5kIG5hbWUgZ2V0dGVycy4gIAogICAgIEpTVmFsdWUgcHJvdG8g
PSB0aGlzT2JqZWN0LT5wcm90b3R5cGUoKTsKICAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkgewot
ICAgICAgICBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSkgeworICAgICAgICAvLyBXb3JrYXJvdW5kIHRvIGtlZXAgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yIHdvcmtpbmc7IHJldHVybiBmYWxzZSBpZiB0aGUgcHJvcGVydHkgaXMg
bm90IHJlYWxseSAnb3duJy4KKyAgICAgICAgaWYgKHNsb3QuaW5HZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoKSkgeworICAgICAgICAgICAgUHJvcGVydHlTbG90IHByb3RvU2xvdDsKKyAgICAgICAg
ICAgIGlmIChhc09iamVjdChwcm90byktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5h
bWUsIHByb3RvU2xvdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
IGVsc2UgaWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCkpIHsKICAgICAgICAgICAgIGlmICghYWxsb3dzQWNjZXNzKSB7CiAgICAgICAg
ICAgICAgICAgdGhpc09iamVjdC0+cHJpbnRFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTsKICAg
ICAgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwpAQCAtMjQ2LDcgKzI1Niw3IEBAIGJv
b2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICB1bnNpZ25lZCBpID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPmltcGwoKS0+
ZnJhbWUoKS0+dHJlZSgpLT5zY29wZWRDaGlsZENvdW50KCkpIHsKICAgICAgICAgQVNTRVJUKGkg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKLSAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRl
eCh0aGlzT2JqZWN0LCBpLCBpbmRleEdldHRlcik7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5k
ZXgodGhpc09iamVjdCwgaSwgaW5kZXhHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNjEsNyArMjcxLDcg
QEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQwogICAgIGlmIChkb2N1
bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBhdG9t
aWNQcm9wZXJ0eU5hbWUgPSBmaW5kQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgICAg
IGlmIChhdG9taWNQcm9wZXJ0eU5hbWUgJiYgKHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRv
Y3VtZW50KS0+aGFzTmFtZWRJdGVtKGF0b21pY1Byb3BlcnR5TmFtZSkgfHwgZG9jdW1lbnQtPmhh
c0VsZW1lbnRXaXRoSWQoYXRvbWljUHJvcGVydHlOYW1lKSkpIHsKLSAgICAgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVkSXRlbUdldHRlcik7CisgICAgICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lZEl0ZW1HZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjcyLDcgKzI4MiwxMSBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDCiBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2lu
ZG93Kj4oY2VsbCk7Ci0gICAgCisKKyAgICAvLyBOZXZlciBhbGxvdyBjcm9zcy1kb21haW4gZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yCisgICAgaWYgKHNsb3QuaW5HZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoKSAmJiAhQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93
KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAg
IGlmICghdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgaGF2ZSBhIG1lc3NhZ2UgaGVyZSB0aGF0IGV4cGxhaW5zIHdoeSB0aGUgcHJvcGVy
dHkgYWNjZXNzL2Z1bmN0aW9uIGNhbGwgd2FzCiAgICAgICAgIC8vIG5vdCBhbGxvd2VkLiAKQEAg
LTI5OSw3ICszMTMsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
CiAgICAgLy8gYXJlIGluIE1veiBidXQgbm90IElFLiBTaW5jZSB3ZSBoYXZlIHNvbWUgb2YgdGhl
c2UsIHdlIGhhdmUgdG8gZG8KICAgICAvLyBpdCB0aGUgTW96IHdheS4KICAgICBpZiAodGhpc09i
amVjdC0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkKHByb3BlcnR5TmFtZVRv
QXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXNPYmplY3QsIGNoaWxkRnJhbWVHZXR0ZXIpOworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
T2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51
bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTMwNyw3ICszMjEsMTIg
QEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIC8vIHByZWNl
ZGVuY2Ugb3ZlciB0aGUgaW5kZXggYW5kIG5hbWUgZ2V0dGVycy4gIAogICAgIEpTVmFsdWUgcHJv
dG8gPSB0aGlzT2JqZWN0LT5wcm90b3R5cGUoKTsKICAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkg
ewotICAgICAgICBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5k
ZXgsIHNsb3QpKSB7CisgICAgICAgIC8vIFdvcmthcm91bmQgdG8ga2VlcCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3Igd29ya2luZzsgcmV0dXJuIGZhbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3Qg
cmVhbGx5ICdvd24nLgorICAgICAgICBpZiAoc2xvdC5pbkdldE93blByb3BlcnR5RGVzY3JpcHRv
cigpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3QgcHJvdG9TbG90OworICAgICAgICAgICAg
aWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwg
cHJvdG9TbG90KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxz
ZSBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3Qp
KSB7CiAgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgewogICAgICAgICAgICAgICAgIHRo
aXNPYmplY3QtPnByaW50RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CiAgICAgICAgICAgICAg
ICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKQEAgLTMyMiw3ICszNDEsNyBAQCBib29sIEpTRE9NV2lu
ZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluCiAgICAgLy8gYWxsb3cgd2luZG93WzFdIG9yIHBh
cmVudFsxXSBldGMuICgjNTY5ODMpCiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+aW1wbCgp
LT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkQ291bnQoKSkgewogICAgICAgICBBU1NFUlQo
aW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKLSAgICAgICAgc2xvdC5zZXRDdXN0
b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpOworICAgICAgICBzbG90LnNl
dEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCBpbmRleEdldHRlciwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTMzNyw3ICszNTYsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
CiAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIEF0b21pY1N0
cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9taWNTdHJpbmcocHJvcGVydHlO
YW1lKTsKICAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiAoc3RhdGljX2Nhc3Q8SFRN
TERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSB8
fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQcm9wZXJ0eU5hbWUpKSkgewotICAg
ICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZWRJdGVtR2V0dGVyKTsKKyAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVkSXRlbUdldHRlciwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDUsNzkgKzM2NCw2IEBAIGJvb2wgSlNET01XaW5kb3c6
OmdldE93blByb3BlcnR5U2xvdEJ5SW4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7CiB9CiAKLWJvb2wgSlNE
T01XaW5kb3c6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKLXsKLSAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0RPTVdpbmRvdyo+KG9iamVjdCk7Ci0gICAgLy8gTmV2ZXIgYWxsb3cgY3Jvc3MtZG9tYWluIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcgotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnk7Ci0gICAgCi0gICAg
Ly8gV2UgZG9uJ3Qgd2FudCBhbnkgcHJvcGVydGllcyBvdGhlciB0aGFuICJjbG9zZSIgYW5kICJj
bG9zZWQiIG9uIGEgY2xvc2VkIHdpbmRvdy4KLSAgICBpZiAoIXRoaXNPYmplY3QtPmltcGwoKS0+
ZnJhbWUoKSkgewotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgc2FmZSBmb3IgY3Jv
c3MtZG9tYWluIGFuZCBzYW1lIGRvbWFpbiB1c2UuCi0gICAgICAgIC8vIEl0IGlnbm9yZXMgYW55
IGN1c3RvbSBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgYmUgc2V0IG9uIHRoZSBET01XaW5kb3cgKGlu
Y2x1ZGluZyBhIGN1c3RvbSBwcm90b3R5cGUpLgotICAgICAgICBlbnRyeSA9IHNfaW5mby5wcm9w
SGFzaFRhYmxlKGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAo
ZW50cnkgJiYgIShlbnRyeS0+YXR0cmlidXRlcygpICYgSlNDOjpGdW5jdGlvbikgJiYgZW50cnkt
PnByb3BlcnR5R2V0dGVyKCkgPT0ganNET01XaW5kb3dDbG9zZWQpIHsKLSAgICAgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc0Jvb2xlYW4odHJ1ZSksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGVudHJ5ID0gSlNET01XaW5kb3dQcm90b3R5cGU6OnNfaW5mby5wcm9wSGFzaFRhYmxl
KGV4ZWMpLT5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoZW50cnkgJiYg
KGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSAmJiBlbnRyeS0+ZnVuY3Rpb24o
KSA9PSBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQ2xvc2UpIHsKLSAgICAgICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90OwotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyPGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rp
b25DbG9zZSwgMD4pOwotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3Qu
Z2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9u
dEVudW0pOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZGVz
Y3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgZW50cnkgPSBKU0RPTVdpbmRvdzo6c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyktPmVudHJ5
KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICAgIFByb3BlcnR5
U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJv
cGVydHlHZXR0ZXIoKSk7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90Lmdl
dFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIGNoaWxkIGZyYW1l
cyBieSBuYW1lIGJlZm9yZSBidWlsdC1pbiBwcm9wZXJ0aWVzIHRvCi0gICAgLy8gbWF0Y2ggTW96
aWxsYS4gVGhpcyBkb2VzIG5vdCBtYXRjaCBJRSwgYnV0IHNvbWUgc2l0ZXMgZW5kIHVwCi0gICAg
Ly8gbmFtaW5nIGZyYW1lcyB0aGluZ3MgdGhhdCBjb25mbGljdCB3aXRoIHdpbmRvdyBwcm9wZXJ0
aWVzIHRoYXQKLSAgICAvLyBhcmUgaW4gTW96IGJ1dCBub3QgSUUuIFNpbmNlIHdlIGhhdmUgc29t
ZSBvZiB0aGVzZSwgd2UgaGF2ZSB0byBkbwotICAgIC8vIGl0IHRoZSBNb3ogd2F5LgotICAgIGlm
ICh0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hpbGQocHJvcGVy
dHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSkpIHsKLSAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNoaWxkRnJhbWVH
ZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShl
eGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUo
KS0+dHJlZSgpLT5zY29wZWRDaGlsZENvdW50KCkpIHsKLSAgICAgICAgQVNTRVJUKGkgIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KTsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAg
ICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaSwgaW5kZXhHZXR0ZXIpOwotICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIC8vIEFsbG93IHNob3J0Y3V0cyBsaWtlICdJbWFnZTEnIGlu
c3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1l
bnQtPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWlj
UHJvcGVydHlOYW1lID0gZmluZEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpOwotICAgICAgICBp
ZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1
bWVudCktPmhhc05hbWVkSXRlbShhdG9taWNQcm9wZXJ0eU5hbWUpIHx8IGRvY3VtZW50LT5oYXNF
bGVtZW50V2l0aElkKGF0b21pY1Byb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdDsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVk
SXRlbUdldHRlcik7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5n
ZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250
RW51bSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHZvaWQgSlNET01XaW5kb3c6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTRE9NV2lu
ZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEx
ICszOCw2IEBAIGJvb2wgSlNIVE1MQXBwbGV0RWxlbWVudDo6Z2V0T3duUHJvcGVydHkKICAgICBy
ZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdDxKU0hUTUxBcHBsZXRF
bGVtZW50LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQogCi1ib29s
IEpTSFRNTEFwcGxldEVsZW1lbnQ6OmdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yPEpTSFRNTEFwcGxldEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgdGhpcyk7Ci19Ci0KIGJvb2wgSlNIVE1MQXBwbGV0RWxlbWVu
dDo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHJ1
bnRpbWVPYmplY3RDdXN0b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgdGhpcywgc2xv
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDExICszOCw2IEBAIGJvb2wgSlNIVE1MRW1iZWRFbGVtZW50OjpnZXRPd25Qcm9w
ZXJ0eVMKICAgICByZXR1cm4gcGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdDxK
U0hUTUxFbWJlZEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgdGhpcyk7
CiB9CiAKLWJvb2wgSlNIVE1MRW1iZWRFbGVtZW50OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JE
ZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gcGx1Z2luRWxlbWVudEN1
c3RvbUdldE93blByb3BlcnR5RGVzY3JpcHRvcjxKU0hUTUxFbWJlZEVsZW1lbnQsIEJhc2U+KGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhpcyk7Ci19Ci0KIGJvb2wgSlNIVE1MRW1i
ZWRFbGVtZW50OjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBy
ZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCB0
aGlzLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9iamVj
dEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDYgQEAgYm9vbCBKU0hUTUxPYmplY3RFbGVtZW50
OjpnZXRPd25Qcm9wZXJ0eQogICAgIHJldHVybiBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJv
cGVydHlTbG90PEpTSFRNTE9iamVjdEVsZW1lbnQsIEJhc2U+KGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCwgdGhpcyk7CiB9CiAKLWJvb2wgSlNIVE1MT2JqZWN0RWxlbWVudDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJuIHBs
dWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I8SlNIVE1MT2JqZWN0RWxl
bWVudCwgQmFzZT4oZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aGlzKTsKLX0KLQog
Ym9vbCBKU0hUTUxPYmplY3RFbGVtZW50OjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbVB1dChleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCB0aGlzLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNzcgKzY0LDM5IEBAIGJvb2wgSlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxl
Z2EKICAgICBpZiAoc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIGltcGwoKS0+ZnJhbWUo
KSwgbWVzc2FnZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIENoZWNrIGZvciB0
aGUgZmV3IGZ1bmN0aW9ucyB0aGF0IHdlIGFsbG93LCBldmVuIHdoZW4gY2FsbGVkIGNyb3NzLWRv
bWFpbi4KLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gSlNIaXN0b3J5UHJvdG90eXBlOjpz
X2luZm8ucHJvcEhhc2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAg
ICBpZiAoZW50cnkpIHsKLSAgICAgICAgLy8gQWxsb3cgYWNjZXNzIHRvIGJhY2soKSwgZm9yd2Fy
ZCgpIGFuZCBnbygpIGZyb20gYW55IGZyYW1lLgotICAgICAgICBpZiAoZW50cnktPmF0dHJpYnV0
ZXMoKSAmIEpTQzo6RnVuY3Rpb24pIHsKLSAgICAgICAgICAgIGlmIChlbnRyeS0+ZnVuY3Rpb24o
KSA9PSBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkJhY2spIHsKLSAgICAgICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50
cnktPmZ1bmN0aW9uKCkgPT0ganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Gb3J3YXJkKSB7Ci0g
ICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY0Zvcndh
cmRGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1
bmN0aW9uR28pIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNo
aW5nU3RhdGljR29GdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBbGxv
dyBhY2Nlc3MgdG8gdG9TdHJpbmcoKSBjcm9zcy1kb21haW4sIGJ1dCBhbHdheXMgT2JqZWN0LnRv
U3RyaW5nLgotICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS50b1N0cmluZykgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgb2JqZWN0VG9T
dHJpbmdGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoaW1wbCgpLT5mcmFtZSgp
LCBtZXNzYWdlKTsKLSAgICBzbG90LnNldFVuZGVmaW5lZCgpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgaWYgKCFpbXBsKCktPmZyYW1lKCkpIHsKLSAgICAgICAg
ZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKKyAgICAvLyB0aHJvdyBvdXQgYWxsIGNyb3NzIGRv
bWFpbiBhY2Nlc3MKKyAgICBpZiAoc2xvdC5pbkdldE93blByb3BlcnR5RGVzY3JpcHRvcigpKSB7
CisgICAgICAgIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoaW1wbCgpLT5mcmFtZSgpLCBtZXNz
YWdlKTsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgLy8gVGhyb3cgb3V0IGFsbCBjcm9zcyBkb21haW4gYWNjZXNzCi0gICAg
aWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgaW1wbCgpLT5mcmFtZSgpKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICAvLyBDaGVjayBmb3IgdGhlIGZldyBmdW5jdGlvbnMg
dGhhdCB3ZSBhbGxvdywgZXZlbiB3aGVuIGNhbGxlZCBjcm9zcy1kb21haW4uCiAgICAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IEpTSGlzdG9yeVByb3RvdHlwZTo6c19pbmZvLnByb3BIYXNoVGFi
bGUoZXhlYyktPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKGVudHJ5KSB7Ci0g
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICAvLyBBbGxvdyBhY2Nlc3MgdG8gYmFj
aygpLCBmb3J3YXJkKCkgYW5kIGdvKCkgZnJvbSBhbnkgZnJhbWUuCiAgICAgICAgIGlmIChlbnRy
eS0+YXR0cmlidXRlcygpICYgSlNDOjpGdW5jdGlvbikgewogICAgICAgICAgICAgaWYgKGVudHJ5
LT5mdW5jdGlvbigpID09IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFjaykgewotICAgICAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNCYWNrRnVuY3Rp
b25HZXR0ZXIpOwotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOworICAg
ICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNCYWNrRnVu
Y3Rpb25HZXR0ZXIsIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0hp
c3RvcnlQcm90b3R5cGVGdW5jdGlvbkZvcndhcmQpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNl
dEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVyKTsKLSAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVj
LCBwcm9wZXJ0eU5hbWUpLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVy
LCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNIaXN0b3J5UHJvdG90
eXBlRnVuY3Rpb25HbykgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5v
bkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKTsKLSAgICAgICAgICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBlbnRy
eS0+YXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBu
b25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBBbGxvdyBhY2Nlc3MgdG8gdG9TdHJpbmcoKSBjcm9zcy1k
b21haW4sIGJ1dCBhbHdheXMgT2JqZWN0LnRvU3RyaW5nLgogICAgICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZykgewotICAgICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBvYmplY3RU
b1N0cmluZ0Z1bmN0aW9uR2V0dGVyKTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgb2JqZWN0VG9TdHJpbmdGdW5j
dGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGRlc2NyaXB0b3Iuc2V0VW5kZWZpbmVkKCk7Cisg
ICAgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShpbXBsKCktPmZyYW1lKCksIG1lc3NhZ2UpOwor
ICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZp
c2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTcgKzYyLDI0IEBAIGJvb2wgSlNMb2NhdGlv
bjo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWcKICAgICBpZiAoc2hvdWxkQWxsb3dBY2Nlc3NUb0Zy
YW1lKGV4ZWMsIGZyYW1lLCBtZXNzYWdlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
Ly8gdGhyb3cgb3V0IGFsbCBjcm9zcyBkb21haW4gYWNjZXNzCisgICAgaWYgKHNsb3QuaW5HZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoKSkgeworICAgICAgICBwcmludEVycm9yTWVzc2FnZUZvckZy
YW1lKGZyYW1lLCBtZXNzYWdlKTsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgLy8gQ2hlY2sgZm9yIHRoZSBmZXcgZnVuY3Rp
b25zIHRoYXQgd2UgYWxsb3csIGV2ZW4gd2hlbiBjYWxsZWQgY3Jvc3MtZG9tYWluLgogICAgIGNv
bnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0xvY2F0aW9uUHJvdG90eXBlOjpzX2luZm8ucHJvcEhh
c2hUYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkg
JiYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9uKSkgewogICAgICAgICBpZiAo
ZW50cnktPmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSkg
ewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlcGxh
Y2VGdW5jdGlvbkdldHRlcik7CisgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25D
YWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyLCBlbnRyeS0+YXR0cmlidXRlcygpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5mdW5j
dGlvbigpID09IGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCkgewotICAgICAgICAg
ICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0
dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNS
ZWxvYWRGdW5jdGlvbkdldHRlciwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+ZnVuY3Rpb24oKSA9PSBqc0xv
Y2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3NpZ24pIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXMsIG5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdldHRlcik7CisgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25H
ZXR0ZXIsIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICB9CkBAIC04Niw0NSArOTMsNiBAQCBib29sIEpTTG9jYXRpb246OmdldE93
blByb3BlcnR5U2xvdERlbGVnCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNMb2NhdGlv
bjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsK
LSAgICAgICAgZGVzY3JpcHRvci5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAotICAgIC8vIHRocm93IG91dCBhbGwgY3Jvc3MgZG9tYWluIGFjY2Vzcwot
ICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIGZyYW1lKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIHRoZSBmZXcgZnVuY3Rpb25zIHRo
YXQgd2UgYWxsb3csIGV2ZW4gd2hlbiBjYWxsZWQgY3Jvc3MtZG9tYWluLgotICAgIGNvbnN0IEhh
c2hFbnRyeSogZW50cnkgPSBKU0xvY2F0aW9uUHJvdG90eXBlOjpzX2luZm8ucHJvcEhhc2hUYWJs
ZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICBpZiAoZW50cnkgJiYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBKU0M6OkZ1bmN0aW9u
KSkgewotICAgICAgICBpZiAoZW50cnktPmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlw
ZUZ1bmN0aW9uUmVwbGFjZSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9u
Q2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcik7Ci0gICAgICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBlbnRy
eS0+YXR0cmlidXRlcygpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKGVudHJ5LT5mdW5jdGlvbigpID09IGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJl
bG9hZCkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbm9uQ2FjaGluZ1N0YXRp
Y1JlbG9hZEZ1bmN0aW9uR2V0dGVyKTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5hdHRyaWJ1dGVz
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoZW50cnkt
PmZ1bmN0aW9uKCkgPT0ganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKSB7Ci0gICAg
ICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rp
b25HZXR0ZXIpOwotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTog
T3RoZXIgaW1wbGVtZW50ZXJzIG9mIHRoZSBXaW5kb3cgY3Jvc3MtZG9tYWluIHNjaGVtZSAoV2lu
ZG93LCBIaXN0b3J5KSBhbGxvdyB0b1N0cmluZywKLSAgICAvLyBidXQgZm9yIG5vdyB3ZSBoYXZl
IGRlY2lkZWQgbm90IHRvLCBwYXJ0bHkgYmVjYXVzZSBpdCBzZWVtcyBzaWxseSB0byByZXR1cm4g
IltPYmplY3QgTG9jYXRpb25dIiBpbgotICAgIC8vIHN1Y2ggY2FzZXMgd2hlbiBub3JtYWxseSB0
aGUgc3RyaW5nIGZvcm0gb2YgTG9jYXRpb24gd291bGQgYmUgdGhlIFVSTC4KLQotICAgIGRlc2Ny
aXB0b3Iuc2V0VW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgSlNMb2Nh
dGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgRnJhbWUq
IGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5j
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDEwIEBAIGJvb2wgcnVudGlt
ZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2wKIAogICAgIGlmICghc2NyaXB0T2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgc2xvdC5zZXRDdXN0b20oZWxlbWVudCwgcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKTsK
KyAgICAvLyBXaGlsZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHBsdWdpbiBhbGxvd3MsIHdlIGRv
IGtub3cgdGhhdCB3ZSBwcmV2ZW50CisgICAgLy8gZW51bWVyYXRpb24gb3IgZGVsZXRpb24gb2Yg
cHJvcGVydGllcywgc28gd2UgbWFyayBwbHVnaW4gcHJvcGVydGllcworICAgIC8vIGFzIERvbnRF
bnVtIHwgRG9udERlbGV0ZQorICAgIHNsb3Quc2V0Q3VzdG9tKGVsZW1lbnQsIHJ1bnRpbWVPYmpl
Y3RQcm9wZXJ0eUdldHRlciwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTMwLDcgKzEzMyw3IEBAIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93
blByb3BlcnR5RGUKICAgICBpZiAoIXNjcmlwdE9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJv
cGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFByb3BlcnR5U2xvdCBzbG90
OwotICAgIHNsb3Quc2V0Q3VzdG9tKGVsZW1lbnQsIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRl
cik7CisgICAgc2xvdC5zZXRDdXN0b20oZWxlbWVudCwgcnVudGltZU9iamVjdFByb3BlcnR5R2V0
dGVyLCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgIC8vIFdoaWxlIHdlIGRvbid0IGtub3cg
d2hhdCB0aGUgcGx1Z2luIGFsbG93cywgd2UgZG8ga25vdyB0aGF0IHdlIHByZXZlbnQKICAgICAv
LyBlbnVtZXJhdGlvbiBvciBkZWxldGlvbiBvZiBwcm9wZXJ0aWVzLCBzbyB3ZSBtYXJrIHBsdWdp
biBwcm9wZXJ0aWVzCiAgICAgLy8gYXMgRG9udEVudW0gfCBEb250RGVsZXRlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnMuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
bHVnaW5FbGVtZW50RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDIwICs1OCw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RDdXN0b21H
ZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCBlbGVtZW50KTsKICAg
ICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHlwZSwgY2xhc3MgQmFzZT4gYm9vbCBwbHVnaW5F
bGVtZW50Q3VzdG9tR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBUeXBlKiBlbGVtZW50KQotICAgIHsKLSAgICAgICAgaWYgKCFlbGVtZW50
LT5nbG9iYWxPYmplY3QoKS0+d29ybGQoKS0+aXNOb3JtYWwoKSkgewotICAgICAgICAgICAgaWYg
KEpTQzo6Z2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPFR5cGUsIEJhc2U+KGV4ZWMsIGVsZW1lbnQt
PnNfaW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLCBlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBKU0M6
OkpTVmFsdWUgcHJvdG8gPSBlbGVtZW50LT5wcm90b3R5cGUoKTsKLSAgICAgICAgICAgIGlmIChw
cm90by5pc09iamVjdCgpICYmIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChw
cm90bykpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBydW50aW1lT2JqZWN0
Q3VzdG9tR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgZWxlbWVudCk7Ci0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBKU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnNfaApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAx
NDA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxNCArNzcsNiBAQCBib29sIEpTV29ya2VyQ29u
dGV4dDo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpT
V29ya2VyQ29udGV4dDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCi17Ci0gICAgLy8gTG9vayBmb3Igb3ZlcnJpZGVzIGJlZm9yZSBsb29raW5nIGF0
IGFueSBvZiBvdXIgb3duIHByb3BlcnRpZXMuCi0gICAgaWYgKEpTR2xvYmFsT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBKU1ZhbHVl
IEpTV29ya2VyQ29udGV4dDo6ZXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0V2ZW50U291cmNlQ29uc3RydWN0b3I+KGV4
ZWMsIHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00
MDIsNyArNDAyLDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQogICAgICAg
ICBpZiAoJHJlcXVpcmVzTWFudWFsTG9va3VwKSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsLCAiICAgIGNvbnN0ICR7bmFtZXNwYWNlTWF5YmV9SGFzaEVudHJ5KiBl
bnRyeSA9IGdldFN0YXRpY1ZhbHVlU2xvdEVudHJ5V2l0aG91dENhY2hpbmc8JGNsYXNzTmFtZT4o
ZXhlYywgcHJvcGVydHlOYW1lKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCwgIiAgICBpZiAoZW50cnkpIHtcbiIpOwotICAgICAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
ZW50cnktPnByb3BlcnR5R2V0dGVyKCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRy
eS0+cHJvcGVydHlHZXR0ZXIoKSwgZW50cnktPmF0dHJpYnV0ZXMoKSk7XG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIH1cbiIp
OwogICAgICAgICB9CkBAIC00MjIsMTAgKzQyMiwxNiBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9w
ZXJ0eVNsb3RCb2R5CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXggJiYgaW5kZXggPCBzdGF0aWNfY2FzdDwkaW50ZXJmYWNlTmFtZSo+KHRoaXNPYmplY3QtPmlt
cGwoKSktPmxlbmd0aCgpKSB7XG4iKTsKICAgICAgICAgfQorICAgICAgICAjIEFzc3VtZSB0aGF0
IGlmIHRoZXJlJ3MgYSBzZXR0ZXIsIHRoZSBpbmRleCB3aWxsIGJlIHdyaXRhYmxlCisgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRl
ciJ9KSB7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAg
ICB1bnNpZ25lZCBzbG90QXR0cmlidXRlcyA9ICR7bmFtZXNwYWNlTWF5YmV9RG9udERlbGV0ZTtc
biIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlT
bG90SW1wbCwgIiAgICAgICAgdW5zaWduZWQgc2xvdEF0dHJpYnV0ZXMgPSAke25hbWVzcGFjZU1h
eWJlfURvbnREZWxldGUgfCAke25hbWVzcGFjZU1heWJlfVJlYWRPbmx5O1xuIik7CisgICAgICAg
IH0KICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmlj
SW5kZXhlZEdldHRlciJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJ
bXBsLCAiICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywg
aW5kZXgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwg
IiAgICAgICAgc2xvdC5zZXRWYWx1ZVdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QtPmdldEJ5SW5k
ZXgoZXhlYywgaW5kZXgpLCBzbG90QXR0cmlidXRlcyk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIGluZGV4R2V0dGVyKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgc2xvdC5zZXRD
dXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIsIHNsb3RBdHRyaWJ1dGVz
KTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGws
ICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
U2xvdEltcGwsICIgICAgfVxuIik7CkBAIC00MzMsNyArNDM5LDcgQEAgc3ViIEdlbmVyYXRlR2V0
T3duUHJvcGVydHlTbG90Qm9keQogCiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xv
dEltcGwsICIgICAgaWYgKGNhbkdldEl0ZW1zRm9yTmFtZShleGVjLCBzdGF0aWNfY2FzdDwkaW50
ZXJmYWNlTmFtZSo+KHRoaXNPYmplY3QtPmltcGwoKSksIHByb3BlcnR5TmFtZSkpIHtcbiIpOwot
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKTtcbiIpOworICAgICAgICBw
dXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
T2JqZWN0LCB0aGlzT2JqZWN0LT5uYW1lR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAg
ICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90
SW1wbCwgIiAgICB9XG4iKTsKICAgICAgICAgaWYgKCRpbmxpbmVkKSB7CkBAIC00NDcsNyArNDUz
LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQogICAgICAgICAmJG1hbnVh
bExvb2t1cEdldHRlckdlbmVyYXRpb24oKTsKICAgICB9CiAKLSAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3Jp
cHRvciJ9KSB7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1
c3RvbUdldE93blByb3BlcnR5U2xvdCJ9KSB7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
U2xvdEltcGwsICIgICAgaWYgKHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdERlbGVnYXRl
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpXG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJv
cGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICB9CkBAIC00NjYs
MTA3ICs0NzIsNiBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgcmV0
dXJuIEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsOwogfQogCi1zdWIgR2VuZXJhdGVHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JCb2R5Ci17Ci0gICAgbXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1l
LCAkY2xhc3NOYW1lLCAkaGFzQXR0cmlidXRlcywgJGlubGluZWQpID0gQF87Ci0gICAgCi0gICAg
bXkgJG5hbWVzcGFjZU1heWJlID0gKCRpbmxpbmVkID8gIkpTQzo6IiA6ICIiKTsKLSAgICAKLSAg
ICBteSBAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCA9ICgpOwotICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eSJ9KSB7Ci0gICAgICAgIGlm
ICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siQmluZGluZ1NlY3VyaXR5LmgifSA9IDE7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhleGVjLCBqc0Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5pbXBsKCkpKVxuIik7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCktPmZy
YW1lKCkpKVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiBmYWxzZTtcbiIpOwotICAgIH0KLSAgICAKLSAgICBpZiAoJGludGVyZmFjZU5h
bWUgZXEgIk5hbWVkTm9kZU1hcCIgb3IgJGludGVyZmFjZU5hbWUgPX4gL15IVE1MXHcqQ29sbGVj
dGlvbiQvKSB7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIg
ICAgJHtuYW1lc3BhY2VNYXliZX1KU1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+cHJvdG90eXBl
KCk7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8JHtuYW1lc3BhY2VNYXliZX1KU09iamVj
dCo+KGFzT2JqZWN0KHByb3RvKSktPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpXG4i
KTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAg
cmV0dXJuIGZhbHNlO1xuXG4iKTsKLSAgICB9Ci0gICAgCi0gICAgbXkgJG1hbnVhbExvb2t1cEdl
dHRlckdlbmVyYXRpb24gPSBzdWIgewotICAgICAgICBteSAkcmVxdWlyZXNNYW51YWxMb29rdXAg
PSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9OwotICAgICAgICBp
ZiAoJHJlcXVpcmVzTWFudWFsTG9va3VwKSB7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIGNvbnN0ICR7bmFtZXNwYWNlTWF5YmV9SGFzaEVudHJ5
KiBlbnRyeSA9ICR7Y2xhc3NOYW1lfVRhYmxlLmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7XG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAg
aWYgKGVudHJ5KSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3Jp
cHRvckltcGwsICIgICAgICAgIFByb3BlcnR5U2xvdCBzbG90O1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7XG4iKTsKLSAgICAgICAgICAg
IHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIGVudHJ5LT5h
dHRyaWJ1dGVzKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JJbXBsLCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwotICAgICAgICAgICAgcHVzaChA
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICB9XG4iKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21O
YW1lZEdldHRlciJ9KSB7Ci0gICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigp
OwotICAgIH0KLQotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5k
ZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmlj
SW5kZXhlZEdldHRlciJ9KSB7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRv
ckltcGwsICIgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1xuIik7
Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKGlu
ZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBpbmRleCA8IHN0YXRpY19jYXN0PCRp
bnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHtcbiIpOwotICAg
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVk
R2V0dGVyIn0pIHsKLSAgICAgICAgICAgICMgQXNzdW1lIHRoYXQgaWYgdGhlcmUncyBhIHNldHRl
ciwgdGhlIGluZGV4IHdpbGwgYmUgd3JpdGFibGUKLSAgICAgICAgICAgIGlmICgkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgp
LCAke25hbWVzcGFjZU1heWJlfURvbnREZWxldGUpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4
ZWMsIGluZGV4KSwgJHtuYW1lc3BhY2VNYXliZX1Eb250RGVsZXRlIHwgJHtuYW1lc3BhY2VNYXli
ZX1SZWFkT25seSk7XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgICR7bmFt
ZXNwYWNlTWF5YmV9UHJvcGVydHlTbG90IHNsb3Q7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgo
dGhpc09iamVjdCwgaW5kZXgsIGluZGV4R2V0dGVyKTtcbiIpOwotICAgICAgICAgICAgIyBBc3N1
bWUgdGhhdCBpZiB0aGVyZSdzIGEgc2V0dGVyLCB0aGUgaW5kZXggd2lsbCBiZSB3cml0YWJsZQot
ICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21J
bmRleGVkU2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JJbXBsLCAiICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRW
YWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCAke25hbWVzcGFjZU1heWJlfURvbnREZWxldGUpO1xu
Iik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGdldE93blBy
b3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksICR7bmFtZXNwYWNlTWF5YmV9RG9udERl
bGV0ZSB8ICR7bmFtZXNwYWNlTWF5YmV9UmVhZE9ubHkpO1xuIik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICAgICAgcmV0dXJuIHRydWU7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9ySW1wbCwgIiAgICB9XG4iKTsKLSAgICB9Ci0KLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKLSAgICAgICAgcHVzaChAZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMs
IHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVy
dHlOYW1lKSkge1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvcklt
cGwsICIgICAgICAgICR7bmFtZXNwYWNlTWF5YmV9UHJvcGVydHlTbG90IHNsb3Q7XG4iKTsKLSAg
ICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpc09iamVjdCwgbmFtZUdldHRlcik7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pO1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3Jp
cHRvckltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgIHB1c2goQGdldE93
blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgfVxuIik7Ci0gICAgICAgIGlmICgkaW5saW5l
ZCkgewotICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJ3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aCJ9ID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0
Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0gPSAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7
Ci0gICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOwotICAgIH0KLQotICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9w
ZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0pIHsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ySW1wbCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yRGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSlcbiIpOwotICAgICAg
ICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICByZXR1cm4gdHJ1
ZTtcbiIpOwotICAgIH0KLQotICAgIGlmICgkaGFzQXR0cmlidXRlcykgewotICAgICAgICBpZiAo
JGlubGluZWQpIHsKLSAgICAgICAgICAgIGRpZSAiQ2Fubm90IGlubGluZSBpZiBOb1N0YXRpY1Rh
YmxlcyBpcyBzZXQuIiBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9T
dGF0aWNUYWJsZXMifSk7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JJbXBsLCAiICAgIHJldHVybiAke25hbWVzcGFjZU1heWJlfWdldFN0YXRpY1ZhbHVlRGVzY3Jp
cHRvcjwkY2xhc3NOYW1lLCBCYXNlPihleGVjLCBzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZSwg
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICByZXR1cm4gJHtuYW1lc3BhY2VNYXliZX1nZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8JGNsYXNz
TmFtZSwgQmFzZT4oZXhlYywgIiAuIGhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhp
c09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsOwotfQotCiBzdWIgR2VuZXJhdGVIZWFkZXJD
b250ZW50SGVhZGVyCiB7CiAgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwpAQCAtNzkwLDcgKzY5
NSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIG15ICRoYXNDb21wbGV4R2V0dGVyID0KICAg
ICAgICAgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0ZXIifQog
ICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4
ZWRHZXR0ZXIifQotICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0KKyAgICAgICAgfHwgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90
In0KICAgICAgICAgfHwgJGhhc0ltcHVyZU5hbWVkR2V0dGVyOwogICAgIAogICAgIG15ICRoYXNH
ZXR0ZXIgPSAkbnVtQXR0cmlidXRlcyA+IDAgfHwgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifSB8fCAkaGFzQ29tcGxleEdldHRlcjsKQEAgLTgwMiwx
MCArNzA3LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgIyBHZXR0ZXJzCiAgICAgaWYgKCRo
YXNHZXR0ZXIpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCosIEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
O1xuIikgaWYgKCRoYXNDb21wbGV4R2V0dGVyKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBib29sIGdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNj
cmlwdG9yIn07Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90RGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1
c3RvbUdldE93blByb3BlcnR5U2xvdCJ9OwogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90In0gPSAxOwogICAgICAgICAkc3RydWN0dXJlRmxh
Z3N7IkpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyJ9ID0gMTsKICAgICB9CkBAIC0xMDI3LDEyICs5MzAsNiBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keSgkaW50ZXJmYWNlLCAk
aW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAwLCAxKSk7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9XG5cbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiQUxXQVlTX0lOTElORSBib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpXG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIntcbiIpOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9
IEpTQzo6anNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
ICZzX2luZm8pO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlR2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yQm9keSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNs
YXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAwLCAxKSk7Ci0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIAogICAgIGlmICghJGhhc1BhcmVudCB8fApAQCAtMTEw
MCw3ICs5OTcsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XG4iKTsKICAgICBpZiAo
JG51bUZ1bmN0aW9ucyA+IDAgfHwgJG51bUNvbnN0YW50cyA+IDApIHsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAg
ICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qi
fSA9IDE7CiAgICAgfQogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNDdXN0b21NYXJrRnVuY3Rpb24ifSBvciAkbmVlZHNNYXJrQ2hpbGRyZW4pIHsKQEAgLTE2MTgs
MjEgKzE1MTQsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldFN0YXRpY1Byb3BlcnR5U2xvdDwke2NsYXNz
TmFtZX1Qcm90b3R5cGUsIEpTT2JqZWN0PihleGVjLCAiIC4gcHJvdG90eXBlSGFzaFRhYmxlQWNj
ZXNzb3IoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMi
fSwgJGNsYXNzTmFtZSkgLiAiLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7
CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotCi0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlKj4ob2JqZWN0KTtcbiIpOwotCi0gICAgICAgIGlmICgk
bnVtQ29uc3RhbnRzIGVxIDAgJiYgJG51bUZ1bmN0aW9ucyBlcSAwKSB7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsgICAg
ICAgIAotICAgICAgICB9IGVsc2lmICgkbnVtQ29uc3RhbnRzIGVxIDApIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0
b3I8SlNPYmplY3Q+KGV4ZWMsICIgLiBwcm90b3R5cGVIYXNoVGFibGVBY2Nlc3NvcigkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAkY2xhc3NOYW1l
KSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICAg
ICAgfSBlbHNpZiAoJG51bUZ1bmN0aW9ucyBlcSAwKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPCR7Y2xhc3NOYW1l
fVByb3RvdHlwZSwgSlNPYmplY3Q+KGV4ZWMsICIgLiBwcm90b3R5cGVIYXNoVGFibGVBY2Nlc3Nv
cigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAk
Y2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4i
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3I8JHtjbGFzc05hbWV9UHJvdG90eXBl
LCBKU09iamVjdD4oZXhlYywgIiAuIHByb3RvdHlwZUhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0sICRjbGFzc05hbWUp
IC4gIiwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAg
ICB9Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tTmFtZWRHZXR0ZXJP
blByb3RvdHlwZSJ9KSB7CkBAIC0xNzQ5LDcgKzE2MzAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgICAgICB8fCAhJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9IAogICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9CiAgICAgICAgICAgICAgICAg
IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRl
ciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifQorICAgICAgICAgICAg
ICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Q
cm9wZXJ0eVNsb3QifQogICAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0KICAgICAgICAgICAgICAgICAg
fHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0KICAgICAg
ICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5h
bWVkR2V0dGVyIn07CkBAIC0xNzYzLDE3ICsxNjQ0LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KCRpbnRlcmZhY2Us
ICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkbnVtQXR0cmlidXRlcyA+IDAsIDApKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihv
YmplY3QpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5
KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkbnVtQXR0cmlidXRlcyA+
IDAsIDApKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5k
ZXhlZEdldHRlciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmlj
SW5kZXhlZEdldHRlciJ9CiAgICAgICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0KLSAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNj
cmlwdG9yIn0pIHsKKyAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifSkgewogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3Bl
cnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhp
c09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwpAQCAtMTc5NiwxMCAr
MTY3MSwxNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChp
bmRleCA8IHN0YXRpY19jYXN0PCRpbnRlcmZhY2VOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKS0+
bGVuZ3RoKCkpIHtcbiIpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAjIEFz
c3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBzZXR0ZXIsIHRoZSBpbmRleCB3aWxsIGJlIHdyaXRhYmxl
CisgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21JbmRleGVkU2V0dGVyIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHVuc2lnbmVkIHNsb3RBdHRyaWJ1dGVzID0gRG9udERlbGV0ZTtcbiIp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICB1bnNpZ25lZCBzbG90QXR0cmlidXRlcyA9IERvbnREZWxldGUg
fCBSZWFkT25seTtcbiIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0p
IHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldFZhbHVl
V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCksIHNsb3RB
dHRyaWJ1dGVzKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRo
aXNPYmplY3QsIGluZGV4LCB0aGlzT2JqZWN0LT5pbmRleEdldHRlcik7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5k
ZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyLCBzbG90QXR0cmli
dXRlcyk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CkBAIC0xODA4LDEzICsxNjg5LDEzIEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKICAgICAgICAgICAgICAgICAmJHByb3Bl
cnR5TmFtZUdlbmVyYXRpb24oKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PCRpbnRlcmZhY2VO
YW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVydHlOYW1lKSkge1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNP
YmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNP
YmplY3QtPm5hbWVHZXR0ZXIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1
ZTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0g
PSAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5k
RGVzY3JpcHRvciJ9KSB7CisgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0pIHsKICAgICAgICAgICAgICAg
ICAmJHByb3BlcnR5TmFtZUdlbmVyYXRpb24oKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUo
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwpAQCAtMzY1OCw3ICszNTM5LDYg
QEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICB9XG5cbiIpOwogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKLSAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XG4iKTsKIAogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIik7CkBAIC00MDQ0LDExICszOTI0LDYgQEAg
c3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIntcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJu
IGdldFN0YXRpYyR7a2luZH1TbG90PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9LCBKU0RPTVdyYXBw
ZXI+KGV4ZWMsICIgLiBjb25zdHJ1Y3Rvckhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0sICRjb25zdHJ1Y3RvckNsYXNz
TmFtZSkgLiAiLCBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihjZWxsKSwgcHJvcGVy
dHlOYW1lLCBzbG90KTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIp
OwotCi0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgJHtjb25zdHJ1Y3RvckNsYXNz
TmFtZX06OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcilcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKLSAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBnZXRTdGF0aWMke2tpbmR9RGVz
Y3JpcHRvcjwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSwgSlNET01XcmFwcGVyPihleGVjLCAiIC4g
Y29uc3RydWN0b3JIYXNoVGFibGVBY2Nlc3NvcigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAkY29uc3RydWN0b3JDbGFzc05hbWUpIC4gIiwganND
YXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogICAg
IH0KIAogICAgIGlmIChJc0NvbnN0cnVjdGFibGUoJGludGVyZmFjZSkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkocmV2
aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBKU0N1c3RvbUNvbnN0
cnVjdG9yCiBKU0N1c3RvbURlZmluZU93blByb3BlcnR5CiBKU0N1c3RvbURlZmluZU93blByb3Bl
cnR5T25Qcm90b3R5cGUKIEpTQ3VzdG9tRmluYWxpemUKLUpTQ3VzdG9tR2V0T3duUHJvcGVydHlT
bG90QW5kRGVzY3JpcHRvcgorSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QKIEpTQ3VzdG9tR2V0
dGVyCiBKU0N1c3RvbUhlYWRlcgogSlNDdXN0b21Jc1JlYWNoYWJsZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw0
NyArODksMjUgQEAgYm9vbCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKUwogewog
ICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihjZWxs
KTsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVj
dC0+bGVuZ3RoR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09i
amVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25l
ZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CiAgICAgaWYgKGluZGV4IDwgdGhpc09i
amVjdC0+Z2V0TGVuZ3RoKCkpIHsKICAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwg
aW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21J
bmRleCh0aGlzT2JqZWN0LCBpbmRleCwgdGhpc09iamVjdC0+aW5kZXhHZXR0ZXIsIERvbnREZWxl
dGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBy
ZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFJ1
bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwot
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewot
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09i
amVjdCwgbGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNs
b3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwg
RG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWdu
ZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpbmRleCA8IHRoaXNP
YmplY3QtPmdldExlbmd0aCgpKSB7Ci0gICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXgpOwotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xv
dC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpOwotICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5h
bWUpLCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogYm9vbCBSdW50
aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVu
dGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KGNlbGwpOwogICAg
IGlmIChpbmRleCA8IHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSB7Ci0gICAgICAgIHNsb3Quc2V0
Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyKTsK
KyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgdGhpc09iamVj
dC0+aW5kZXhHZXR0ZXIsIERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
aAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNpb24gMTQwNDA0KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjUsMjYgKzY1LDEzIEBAIGJvb2wgUnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEoK
IHsKICAgICBSdW50aW1lTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVNZXRob2Qq
PihjZWxsKTsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgdGhp
c09iamVjdC0+bGVuZ3RoR2V0dGVyKTsKKyAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20o
dGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBy
ZXR1cm4gSW50ZXJuYWxGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgUnVudGltZU1ldGhvZDo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yICZkZXNjcmlwdG9yKQot
ewotICAgIFJ1bnRpbWVNZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZU1ldGhvZCo+
KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERv
bnREZWxldGUgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBSdW50aW1lTWV0aG9kKiBtZXRob2QgPSBzdGF0aWNfY2FzdDxSdW50aW1l
TWV0aG9kKj4oZXhlYy0+Y2FsbGVlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmgJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw2IEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsK
IAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTVmFsdWUgbGVuZ3Ro
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNCwxNCArMTM0LDE0IEBAIGJvb2wgUnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KEoKICAgICAgICAgLy8gU2VlIGlmIHRoZSBpbnN0YW5jZSBoYXMgYSBmaWVsZCB3aXRoIHRoZSBz
cGVjaWZpZWQgbmFtZS4KICAgICAgICAgRmllbGQgKmFGaWVsZCA9IGFDbGFzcy0+ZmllbGROYW1l
ZChwcm9wZXJ0eU5hbWUsIGluc3RhbmNlLmdldCgpKTsKICAgICAgICAgaWYgKGFGaWVsZCkgewot
ICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+ZmllbGRH
ZXR0ZXIpOworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVj
dC0+ZmllbGRHZXR0ZXIsIERvbnREZWxldGUpOwogICAgICAgICAgICAgaW5zdGFuY2UtPmVuZCgp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBOb3cgY2hlY2sgaWYgYSBtZXRob2Qgd2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHMsIGlm
IHNvIHJldHVybiBhIGZ1bmN0aW9uIG9iamVjdCBmb3IKICAgICAgICAgICAgIC8vIHRoYXQgbWV0
aG9kLgogICAgICAgICAgICAgaWYgKGFDbGFzcy0+bWV0aG9kTmFtZWQocHJvcGVydHlOYW1lLCBp
bnN0YW5jZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2Jq
ZWN0LCB0aGlzT2JqZWN0LT5tZXRob2RHZXR0ZXIpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm1ldGhvZEdldHRlciwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpbnN0YW5jZS0+
ZW5kKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTAsNyArMTUwLDcgQEAg
Ym9vbCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSgogCiAgICAgICAgIC8vIFRy
eSBhIGZhbGxiYWNrIG9iamVjdC4KICAgICAgICAgaWYgKCFhQ2xhc3MtPmZhbGxiYWNrT2JqZWN0
KGV4ZWMsIGluc3RhbmNlLmdldCgpLCBwcm9wZXJ0eU5hbWUpLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmZhbGxiYWNr
T2JqZWN0R2V0dGVyKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRo
aXNPYmplY3QtPmZhbGxiYWNrT2JqZWN0R2V0dGVyLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CiAgICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTYxLDU1ICsxNjEsNiBAQCBib29sIFJ1bnRpbWVPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdChKCiAgICAgcmV0dXJuIGluc3RhbmNlLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9v
bCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlICpleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgUnVudGltZU9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPm1f
aW5zdGFuY2UpIHsKLSAgICAgICAgdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0
YW5jZSA9IHRoaXNPYmplY3QtPm1faW5zdGFuY2U7Ci0gICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0g
ICAgCi0gICAgQ2xhc3MgKmFDbGFzcyA9IGluc3RhbmNlLT5nZXRDbGFzcygpOwotICAgIAotICAg
IGlmIChhQ2xhc3MpIHsKLSAgICAgICAgLy8gU2VlIGlmIHRoZSBpbnN0YW5jZSBoYXMgYSBmaWVs
ZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KLSAgICAgICAgRmllbGQgKmFGaWVsZCA9IGFDbGFz
cy0+ZmllbGROYW1lZChwcm9wZXJ0eU5hbWUsIGluc3RhbmNlLmdldCgpKTsKLSAgICAgICAgaWYg
KGFGaWVsZCkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBmaWVsZEdldHRlcik7Ci0gICAgICAgICAgICBpbnN0
YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5n
ZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm93IGNoZWNrIGlm
IGEgbWV0aG9kIHdpdGggc3BlY2lmaWVkIG5hbWUgZXhpc3RzLCBpZiBzbyByZXR1cm4gYSBmdW5j
dGlvbiBvYmplY3QgZm9yCi0gICAgICAgICAgICAvLyB0aGF0IG1ldGhvZC4KLSAgICAgICAgICAg
IGlmIChhQ2xhc3MtPm1ldGhvZE5hbWVkKHByb3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgbWV0aG9kR2V0dGVyKTsKLSAgICAgICAgICAgICAgICBp
bnN0YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gVHJ5IGEgZmFsbGJhY2sgb2JqZWN0LgotICAgICAgICBp
ZiAoIWFDbGFzcy0+ZmFsbGJhY2tPYmplY3QoZXhlYywgaW5zdGFuY2UuZ2V0KCksIHByb3BlcnR5
TmFtZSkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBmYWxsYmFja09iamVjdEdldHRl
cik7Ci0gICAgICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpbnN0YW5jZS0+ZW5kKCk7Ci0gICAgCi0gICAgcmV0
dXJuIGluc3RhbmNlLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogdm9pZCBSdW50aW1lT2JqZWN0OjpwdXQo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
IAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsK
ICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qc2MvQnJpZGdlSlNDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pz
Yy9CcmlkZ2VKU0MuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L2pzYy9CcmlkZ2VKU0MuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5JbnN0YW5jZSgpOwogCiAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
IHsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X3J1bnRpbWUuaAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29i
amMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNiBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIHZv
aWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjE1LDEzICsyMTUsNiBA
QCBib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6Z2V0T3duUHJvcGVyCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICAvLyBrZWVwIHRoZSBwcm90b3R5cGUgZnJvbSBnZXR0
aW5nIGNhbGxlZCBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGZhbHNlCi0gICAgZGVzY3JpcHRv
ci5zZXRVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBPYmpjRmFsbGJh
Y2tPYmplY3RJbXA6OnB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVEZWNsYXJhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlRGVjbGFyYXRpb24uaWRsCShyZXZpc2lvbiAxNDA0MDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIy
LDcgQEAKIFsKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBKU0dlbmVyYXRlSXNSZWFj
aGFibGUsCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAg
IEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAogI2lm
IGRlZmluZWQoVjhfQklORElORykgJiYgVjhfQklORElORwogICAgIE5hbWVkR2V0dGVyLApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGwJKHJldmlzaW9uIDE0
MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAKIFsKICAgICBDdXN0b21OYW1lZFNldHRlciwK
LSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCisgICAgSlNDdXN0
b21HZXRPd25Qcm9wZXJ0eVNsb3QsCiAgICAgQ3VzdG9tQ2FsbAogXSBpbnRlcmZhY2UgSFRNTEFw
cGxldEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01T
dHJpbmcgYWxpZ247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5p
ZGwJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxl
bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIAogWwogICAgIEN1c3Rv
bU5hbWVkU2V0dGVyLAotICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRv
ciwKKyAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCwKICAgICBDdXN0b21DYWxsCiBdIGlu
dGVyZmFjZSBIVE1MRW1iZWRFbGVtZW50IDogSFRNTEVsZW1lbnQgewogYXR0cmlidXRlIFtSZWZs
ZWN0XSBET01TdHJpbmcgYWxpZ247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmlkbAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIAog
WwogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAotICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90
QW5kRGVzY3JpcHRvciwKKyAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCwKICAgICBDdXN0
b21DYWxsCiBdIGludGVyZmFjZSBIVE1MT2JqZWN0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEZvcm1FbGVtZW50IGZvcm07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvSGlzdG9yeS5pZGwJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
SGlzdG9yeS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpZiBkZWZpbmVk
KFY4X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcKICAgICBDaGVja1NlY3VyaXR5LAogI2VuZGlmCi0g
ICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAgIEpTQ3VzdG9t
R2V0T3duUHJvcGVydHlTbG90LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAogICAgIEpTR2VuZXJh
dGVJc1JlYWNoYWJsZT1JbXBsRnJhbWUsCiAgICAgQ3VzdG9tRGVsZXRlUHJvcGVydHksCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAkocmV2aXNpb24gMTQwNDA0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
ICNpZiBkZWZpbmVkKFY4X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcKICAgICBDaGVja1NlY3VyaXR5
LAogI2VuZGlmCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAor
ICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAog
ICAgIEpTR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsRnJhbWUsCiAgICAgQ3VzdG9tRGVsZXRlUHJv
cGVydHksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJl
dmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIFsKICAgICBDb25kaXRpb25hbD1X
T1JLRVJTLAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAotICAgIEpTQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdCwK
ICAgICBFdmVudFRhcmdldCwKICAgICBFeHRlbmRzRE9NR2xvYmFsT2JqZWN0LAogICAgIElzV29y
a2VyQ29udGV4dCwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTAx
LTIyICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0MjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHByYWN0aWNhbGx5IHJlZHVuZGFudCB3
aXRoIGdldE93blByb3BlcnR5U2xvdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgICAgIC0gcGFzcyBhdHRyaWJ1dGVzIHRvIGdldE93
blByb3BlcnR5U2xvdAorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOgorICAgICAgICAoSlNOUE9iamVjdCk6CisKIDIw
MTMtMDEtMjIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUERGUGx1Z2luOiBCdWlsZCBQREZQbHVnaW4gZXZlcnl3aGVyZSwgZW5hYmxlIGF0IHJ1bnRp
bWUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDE0MDQwNCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc2LDU0ICsyNzYsMTkgQEAgYm9vbCBKU05QT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZQogCiAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIHRoZSBOUE9iamVjdCBoYXMg
YSBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZS4KICAgICBpZiAodGhpc09iamVjdC0+bV9ucE9iamVj
dC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSAmJiB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3Mt
Pmhhc1Byb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllcikpIHsKLSAg
ICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+cHJvcGVydHlHZXR0
ZXIpOworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5wcm9w
ZXJ0eUdldHRlciwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAog
ICAgIC8vIFNlY29uZCwgY2hlY2sgaWYgdGhlIE5QT2JqZWN0IGhhcyBhIG1ldGhvZCB3aXRoIHRo
aXMgbmFtZS4KICAgICBpZiAodGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRo
b2QgJiYgdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QodGhpc09iamVj
dC0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5tZXRob2RHZXR0ZXIpOworICAgICAgICBzbG90LnNldEN1
c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5tZXRob2RHZXR0ZXIsIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEpTTlBPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KG9iamVjdCk7Ci0gICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAgICBpZiAoIXRoaXNPYmplY3Qt
Pm1fbnBPYmplY3QpIHsKLSAgICAgICAgdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBOUElkZW50aWZpZXIgbnBJZGVudGlm
aWVyID0gbnBJZGVudGlmaWVyRnJvbUlkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKLQotICAgIC8v
IENhbGxpbmcgTlBDbGFzczo6aW52b2tlIHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwgYW5k
IHRoZXJlJ3Mgbm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KLSAgICAvLyAoaW5j
bHVkaW5nIGRlc3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1ha2Ug
c3VyZSB0byBrZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIAotICAgIC8vIHRoZSBjYWxsIGhh
cyBmaW5pc2hlZC4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90
ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwotCi0gICAgLy8gRmlyc3QsIGNoZWNrIGlm
IHRoZSBOUE9iamVjdCBoYXMgYSBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZS4KLSAgICBpZiAodGhp
c09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSAmJiB0aGlzT2JqZWN0LT5t
X25wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5w
SWRlbnRpZmllcikpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIHByb3BlcnR5R2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERl
bGV0ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFNlY29uZCwgY2hl
Y2sgaWYgdGhlIE5QT2JqZWN0IGhhcyBhIG1ldGhvZCB3aXRoIHRoaXMgbmFtZS4KLSAgICBpZiAo
dGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QgJiYgdGhpc09iamVjdC0+
bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJ
ZGVudGlmaWVyKSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpc09iamVjdCwgbWV0aG9kR2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiB2b2lkIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJv
cGVydHlTbG90JikKIHsKICAgICBKU05QT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8
SlNOUE9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCShyZXZpc2lvbiAxNDA0MDQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpD
b25zdHJ1Y3REYXRhJik7CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJv
cGVydHlTbG90Jik7CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2Vs
bCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOwo=
</data>
<flag name="commit-queue"
          id="202528"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>