<?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>97083</bug_id>
          
          <creation_ts>2012-09-19 01:27:50 -0700</creation_ts>
          <short_desc>REGRESSION(r128976): Breaks compilation on QT, Apple WIn (Requested by vsevik on #webkit).</short_desc>
          <delta_ts>2012-09-19 01:49:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>96917</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>vsevik</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>723382</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 01:27:50 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/128976 broke the build:
Breaks compilation on QT, Apple WIn (Requested by vsevik on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723385</commentid>
    <comment_count>1</comment_count>
      <attachid>164690</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 01:28:33 -0700</bug_when>
    <thetext>Created attachment 164690
ROLLOUT of r128976

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723389</commentid>
    <comment_count>2</comment_count>
      <attachid>164690</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-09-19 01:49:44 -0700</bug_when>
    <thetext>Comment on attachment 164690
ROLLOUT of r128976

Clearing flags on attachment: 164690

Committed r128979: &lt;http://trac.webkit.org/changeset/128979&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723390</commentid>
    <comment_count>3</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-09-19 01:49:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164690</attachid>
            <date>2012-09-19 01:28:33 -0700</date>
            <delta_ts>2012-09-19 01:49:44 -0700</delta_ts>
            <desc>ROLLOUT of r128976</desc>
            <filename>bug-97083-20120919083458.patch</filename>
            <type>text/plain</type>
            <size>260804</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4OTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQ3YzMzNGQ2ZDQyNTRh
NzgwMDY1MjA1MjExZTdkMDNiNWZiNzcyMC4uNWY1M2E2NjFjYjhmMzIxMzU3YTg2ODhmOGMwOTE4
ZDM0MDcyMzg0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0wOS0xOSAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CisKKyAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjEyODk3Ni4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMTI4OTc2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NzA4MworCisgICAgICAgIEJyZWFrcyBjb21waWxhdGlvbiBvbiBRVCwgQXBw
bGUgV0luIChSZXF1ZXN0ZWQgYnkgdnNldmlrIG9uCisgICAgICAgICN3ZWJraXQpLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGU6OkluamVjdGVkU2NyaXB0V2Vi
R0xNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZTo6
bW9kdWxlRm9yU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZTo6c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0V2ViR0xNb2R1
bGU6OndyYXBXZWJHTENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZTo6Y2FwdHVyZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2Ny
aXB0V2ViR0xNb2R1bGU6OmRyb3BUcmFjZUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlOjp0cmFjZUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlOjpyZXBsYXlUcmFjZUxvZyk6CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qczogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5q
cy4KKyAgICAgICAgKC4pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuanNvbjoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JXZWJHTEFnZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkdMQWdlbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXZWJHTEFn
ZW50OjpJbnNwZWN0b3JXZWJHTEFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcldl
YkdMQWdlbnQ6On5JbnNwZWN0b3JXZWJHTEFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvcldlYkdMQWdlbnQ6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
cldlYkdMQWdlbnQ6OmNsZWFyRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
V2ViR0xBZ2VudDo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXZWJHTEFn
ZW50OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV2ViR0xBZ2VudDo6ZGlz
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXZWJHTEFnZW50Ojpkcm9wVHJhY2VM
b2cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yV2ViR0xBZ2VudDo6Y2FwdHVyZUZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldlYkdMQWdlbnQ6OmdldFRyYWNlTG9nKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldlYkdMQWdlbnQ6OnJlcGxheVRyYWNlTG9nKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldlYkdMQWdlbnQ6OndyYXBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRGb3JJbnN0cnVtZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
V2ViR0xBZ2VudDo6aW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZUZvclRyYWNlTG9nSWQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEFnZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9yV2ViR0xBZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JXZWJHTEFnZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yV2ViR0xBZ2VudDo6ZW5hYmxlZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvcldl
YkdMSW5zdHJ1bWVudGF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uLmguCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d3JhcFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEZvckluc3RydW1lbnRhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3RydW1lbnRpbmdBZ2VudHMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zdHJ1bWVudGluZ0FnZW50czo6SW5zdHJ1bWVudGluZ0FnZW50cyk6CisgICAgICAgIChJ
bnN0cnVtZW50aW5nQWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRpbmdBZ2Vu
dHM6Omluc3BlY3RvcldlYkdMQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGlu
Z0FnZW50czo6c2V0SW5zcGVjdG9yV2ViR0xBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Nv
bXBpbGUtZnJvbnQtZW5kLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUHJvZmls
ZXNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkV4cGVyaW1lbnRzU2V0dGluZ3MpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
V2ViR0xQcm9maWxlVmlldy5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ2FudmFzUHJvZmlsZVZpZXcuanMuCisgICAgICAgIChXZWJJbnNwZWN0b3Iu
V2ViR0xQcm9maWxlVmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlVmll
dy5wcm90b3R5cGUuZGlzcG9zZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxl
Vmlldy5wcm90b3R5cGUuZ2V0IHN0YXR1c0Jhckl0ZW1zKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5XZWJHTFByb2ZpbGVWaWV3LnByb3RvdHlwZS5nZXQgcHJvZmlsZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuV2ViR0xQcm9maWxlVmlldy5wcm90b3R5cGUud2FzU2hvd24pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZVZpZXcucHJvdG90eXBlLndpbGxIaWRlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVWaWV3LnByb3RvdHlwZS5fc2hvd1RyYWNlTG9n
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVWaWV3LnByb3RvdHlwZS5fb25U
cmFjZUxvZ0l0ZW1DbGljay5kaWRSZXBsYXlUcmFjZUxvZyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuV2ViR0xQcm9maWxlVmlldy5wcm90b3R5cGUuX29uVHJhY2VMb2dJdGVtQ2xpY2spOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZVR5cGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLldlYkdMUHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCBidXR0b25Ub29sdGlwKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVUeXBlLnByb3RvdHlwZS5idXR0b25DbGlja2Vk
LmRpZFN0YXJ0Q2FwdHVyaW5nRnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLldlYkdMUHJv
ZmlsZVR5cGUucHJvdG90eXBlLmJ1dHRvbkNsaWNrZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LldlYkdMUHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCB0cmVlSXRlbVRpdGxlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVUeXBlLnByb3RvdHlwZS5nZXQgZGVzY3JpcHRpb24p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZVR5cGUucHJvdG90eXBlLnJlc2V0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVUeXBlLnByb3RvdHlwZS5jcmVh
dGVUZW1wb3JhcnlQcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVU
eXBlLnByb3RvdHlwZS5jcmVhdGVQcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5XZWJH
TFByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZUhlYWRl
ci5wcm90b3R5cGUudHJhY2VMb2dJZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuV2ViR0xQcm9m
aWxlSGVhZGVyLnByb3RvdHlwZS5jcmVhdGVTaWRlYmFyVHJlZUVsZW1lbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZUhlYWRlci5wcm90b3R5cGUuY3JlYXRlVmlldyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvd2ViR0xQcm9maWxlci5jc3M6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NhbnZhc1Byb2ZpbGVyLmNzcy4KKyAgICAgICAgKC53
ZWJnbC1wcm9maWxlLXZpZXcpOgorICAgICAgICAoLndlYmdsLXRyYWNlLWxvZyk6CisgICAgICAg
ICgud2ViZ2wtdHJhY2UtbG9nIGRpdik6CisgICAgICAgICgjd2ViZ2wtcmVwbGF5LWltYWdlLWNv
bnRhaW5lcik6CisgICAgICAgICgjd2ViZ2wtcmVwbGF5LWltYWdlKToKKwogMjAxMi0wOS0xOSAg
QW5kcmV5IEFkYWlraW4gIDxhYW5kcmV5QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbV2ViR0xdIC0+IFtDYW52YXNdIFJlbmFtZSBXZWJHTEFnZW50IHRvIENhbnZhc0Fn
ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDRiMDI1MDYyOTE1YWU4MGVlOTMwNTM1Y2Q5YzAz
YzJhZGU2MTAwYWEuLmY3NGJhMmQyOGY3YjQ4NTI2NzYwODYwYThjOTdlMDEyYTA1NGE0MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTM4LDE2ICsxNTM4LDE1IEBAIFNFVChXZWJDb3JlX1NP
VVJDRVMKICAgICBpbnNwZWN0b3IvSWRlbnRpZmllcnNGYWN0b3J5LmNwcAogICAgIGluc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNw
cAotICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAKICAgICBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlw
dE1hbmFnZXIuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TW9kdWxlLmNwcAorICAg
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYXNlQWdlbnQuY3BwCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCi0gICAgaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnNv
bGVBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE1
NzUsNiArMTU3NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVUZXh0RWRpdG9yLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisgICAgaW5zcGVjdG9y
L0luc3BlY3RvcldlYkdMQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFn
ZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcAogICAgIGluc3Bl
Y3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmNwcApAQCAtMjc3NiwxMyArMjc3NiwxNSBA
QCBBRERfQ1VTVE9NX0NPTU1BTkQoCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luamVjdGVkU2NyaXB0U291cmNlLmgpCiAKIAotIyBH
ZW5lcmF0ZSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCi1BRERfQ1VTVE9NX0NP
TU1BTkQoCi0gICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCi0gICAgTUFJTl9ERVBFTkRFTkNZIGluc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcwotICAgIENPTU1BTkQgJHtQRVJM
X0VYRUNVVEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci94eGQucGwgSW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGVTb3VyY2VfanMgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCi0gICAgVkVSQkFUSU0pCi1MSVNU
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmgpCisjIEdlbmVyYXRlIEluamVjdGVkU2Ny
aXB0V2ViR0xNb2R1bGVTb3VyY2UuaAorSUYgKEVOQUJMRV9XRUJHTCkKKyAgICBBRERfQ1VTVE9N
X0NPTU1BTkQoCisgICAgICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oCisgICAgICAgIE1BSU5fREVQRU5ERU5D
WSBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcworICAgICAgICBD
T01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IveHhkLnBs
IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2VfanMgJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMgJHtERVJJVkVEX1NPVVJDRVNf
V0VCQ09SRV9ESVJ9L0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaAorICAgICAgICBW
RVJCQVRJTSkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaCkKK0VORElG
ICgpCiAKIAogTUFLRV9IQVNIX1RPT0xTKCR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL0NvbG9yRGF0
YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGY3NzU1NTIzOTFmZjg0MTRjYmU0
NWZmODBjODBhOGRjYWY5YWQ2ZWEuLmQxZjA5NzJjZDE3OTg5MmZjNTRiODllNTZhZWMxZWVlM2Jl
MzNjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTA0NCwxMCArMTA0NCwx
MCBAQCBhbGwgOiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oCiBJbmplY3RlZFNjcmlwdFNvdXJjZS5o
IDogSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKIAlwZXJsICQoV2ViQ29yZSkvaW5zcGVjdG9yL3h4
ZC5wbCBJbmplY3RlZFNjcmlwdFNvdXJjZV9qcyAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdFNvdXJjZS5qcyBJbmplY3RlZFNjcmlwdFNvdXJjZS5oCiAKLWFsbCA6IEluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmgKK2FsbCA6IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1
bGVTb3VyY2UuaAogCi1JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oIDogSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMKLQlwZXJsICQoV2ViQ29yZSkvaW5zcGVjdG9y
L3h4ZC5wbCBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZV9qcyAkKFdlYkNvcmUpL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcyBJbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZVNvdXJjZS5oCitJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmgg
OiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzCisJcGVybCAkKFdlYkNvcmUpL2lu
c3BlY3Rvci94eGQucGwgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZV9qcyAkKFdlYkNv
cmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzIEluamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaAogCiAtaW5jbHVkZSAkKEpTX0RPTV9IRUFERVJTOi5o
PS5kZXApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaSBi
L1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQppbmRleCA5M2IwYWVjOWIyMjFmNjc4
ZDVmYmMxNDFlZGUyNzE4YTM1NjhlYTFmLi43MTc5MzBjMTRhYjkyMmY5Zjg1OWIwZWZkNjJhYmQ0
NWQwZmQ5ODJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkK
KysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCkBAIC02MSw3ICs2MSw3IEBA
IElOU1BFQ1RPUl9PVkVSTEFZX1BBR0UgPSAkJFBXRC9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eVBhZ2UuaHRtbAogCiBJTkpFQ1RFRF9TQ1JJUFRfU09VUkNFID0gJCRQV0QvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0U291cmNlLmpzCiAKLUlOSkVDVEVEX1NDUklQVF9DQU5WQVNfTU9EVUxFX1NP
VVJDRSA9ICQkUFdEL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5q
cworSU5KRUNURURfU0NSSVBUX1dFQkdMX01PRFVMRV9TT1VSQ0UgPSAkJFBXRC9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcwogCiBYUEFUSEJJU09OID0gJCRQV0Qv
eG1sL1hQYXRoR3JhbW1hci55CiAKQEAgLTc4NywxOSArNzg3LDE5IEBAIGluc3BlY3Rvck92ZXJs
YXlQYWdlLmNvbW1hbmRzID0gcGVybCAkJFBXRC9pbnNwZWN0b3IveHhkLnBsIEluc3BlY3Rvck92
ZXJsYXlQYWdlCiBpbnNwZWN0b3JPdmVybGF5UGFnZS5hZGRfb3V0cHV0X3RvX3NvdXJjZXMgPSBm
YWxzZQogR0VORVJBVE9SUyArPSBpbnNwZWN0b3JPdmVybGF5UGFnZQogCi0jIEdFTkVSQVRPUiAy
OiBpbnNwZWN0b3IgaW5qZWN0ZWQgc2NyaXB0IHNvdXJjZSBjb21waWxlcgorIyBHRU5FUkFUT1Ig
Mi1hOiBpbnNwZWN0b3IgaW5qZWN0ZWQgc2NyaXB0IHNvdXJjZSBjb21waWxlcgogaW5qZWN0ZWRT
Y3JpcHRTb3VyY2Uub3V0cHV0ID0gSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaAogaW5qZWN0ZWRTY3Jp
cHRTb3VyY2UuaW5wdXQgPSBJTkpFQ1RFRF9TQ1JJUFRfU09VUkNFCiBpbmplY3RlZFNjcmlwdFNv
dXJjZS5jb21tYW5kcyA9IHBlcmwgJCRQV0QvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlw
dFNvdXJjZV9qcyAke1FNQUtFX0ZJTEVfSU59ICR7UU1BS0VfRklMRV9PVVR9CiBpbmplY3RlZFNj
cmlwdFNvdXJjZS5hZGRfb3V0cHV0X3RvX3NvdXJjZXMgPSBmYWxzZQogR0VORVJBVE9SUyArPSBp
bmplY3RlZFNjcmlwdFNvdXJjZQogCi0jIEdFTkVSQVRPUiAzOiBpbnNwZWN0b3IgY2FudmFzIGlu
amVjdGVkIHNjcmlwdCBzb3VyY2UgY29tcGlsZXIKLUluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxl
U291cmNlLm91dHB1dCA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmgKLUluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmlucHV0ID0gSU5KRUNURURfU0NSSVBUX0NBTlZB
U19NT0RVTEVfU09VUkNFCi1JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5jb21tYW5k
cyA9IHBlcmwgJCRQV0QvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVs
ZVNvdXJjZV9qcyAke1FNQUtFX0ZJTEVfSU59ICR7UU1BS0VfRklMRV9PVVR9Ci1JbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZVNvdXJjZS5hZGRfb3V0cHV0X3RvX3NvdXJjZXMgPSBmYWxzZQotR0VO
RVJBVE9SUyArPSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZQorIyBHRU5FUkFUT1Ig
Mi1iOiBpbnNwZWN0b3Igd2ViZ2wgaW5qZWN0ZWQgc2NyaXB0IHNvdXJjZSBjb21waWxlcgorSW5q
ZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5vdXRwdXQgPSBJbmplY3RlZFNjcmlwdFdlYkdM
TW9kdWxlU291cmNlLmgKK0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaW5wdXQgPSBJ
TkpFQ1RFRF9TQ1JJUFRfV0VCR0xfTU9EVUxFX1NPVVJDRQorSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZVNvdXJjZS5jb21tYW5kcyA9IHBlcmwgJCRQV0QvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlX2pzICR7UU1BS0VfRklMRV9JTn0gJHtRTUFLRV9GSUxF
X09VVH0KK0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuYWRkX291dHB1dF90b19zb3Vy
Y2VzID0gZmFsc2UKK0dFTkVSQVRPUlMgKz0gSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJj
ZQogCiAjIEdFTkVSQVRPUiA0OiBDU1MgZ3JhbW1hcgogY3NzYmlzb24ub3V0cHV0ID0gJHtRTUFL
RV9GSUxFX0JBU0V9LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBjZmQzZjhmMTBlZTY5ODEw
M2MzZjBmOTQxMmU5NTAwMzU0OTc0NzBlLi5lMWM2NDYyZjI3NGYwOTAwNGRhZGUwMmE1MTI3Yzcy
NGJmZDI0M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNTAwLDEwICs1MDAsMTAgQEAgRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanM6IERlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSW5zcGUKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHAKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yT3ZlcmxheVBh
Z2UuaDogJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheVBhZ2UuaHRtbAogCSQo
QU1fVl9HRU4pJChQRVJMKSAkKFdlYkNvcmUpL2luc3BlY3Rvci94eGQucGwgSW5zcGVjdG9yT3Zl
cmxheVBhZ2VfaHRtbCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5UGFnZS5o
dG1sICQoR0VOU09VUkNFU19XRUJDT1JFKS9JbnNwZWN0b3JPdmVybGF5UGFnZS5oCi1EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmg6ICQoV2Vi
Q29yZSkvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzCi0JJChB
TV9WX0dFTikkKFBFUkwpICQoV2ViQ29yZSkvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZVNvdXJjZV9qcyAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZVNvdXJjZS5qcyAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvSW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGVTb3VyY2UuaAogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbmplY3RlZFNj
cmlwdFNvdXJjZS5oOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cwogCSQoQU1fVl9HRU4pJChQRVJMKSAkKFdlYkNvcmUpL2luc3BlY3Rvci94eGQucGwgSW5qZWN0
ZWRTY3JpcHRTb3VyY2VfanMgJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3Vy
Y2UuanMgJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0luamVjdGVkU2NyaXB0U291cmNlLmgKK0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oOiAkKFdl
YkNvcmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzCisJJChB
TV9WX0dFTikkKFBFUkwpICQoV2ViQ29yZSkvaW5zcGVjdG9yL3h4ZC5wbCBJbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlU291cmNlX2pzICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGVTb3VyY2UuanMgJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGVTb3VyY2UuaAogCiBpZiBFTkFCTEVfV0VCX0FVRElPCiAjIEluc3RhbGxpbmcg
SFJURiBkYXRhYmFzZSB3YXYgZmlsZXMKQEAgLTc3NCw4ICs3NzQsOCBAQCBFWFRSQV9ESVNUICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5TmFtZXMuaW4gXAogCVNv
dXJjZS9XZWJDb3JlL2ljdS9MSUNFTlNFIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weSBcCi0JU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgXAorCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb24gXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3ItMS4wLmpzb24gXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
UGFnZS5odG1sIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDhjYThiMjY4ZTMy
NmJiZmY4N2Q3MTQ1NmY3NzQxM2E4ODY0MDc3MjYuLmNhNmRhYmNmNTE0NDI2MWI0MDk3NmQ1YTA5
YWNhNzJhZTNjODg0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTksOCAr
MTksOCBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSFRNTEVudGl0eVRhYmxlLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9IVE1MTmFt
ZXMuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0hUTUxOYW1lcy5oIFwKLQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmggXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCBcCisJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmggXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIFwKIAlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIFwKQEAgLTM2MzMsMjMgKzM2
MzMsMjAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0QmFzZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuaCBcCi0JU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggXAog
CVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmggXAogCVNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFzZUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhc2VBZ2VudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzQWdlbnQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZh
c0luc3RydW1lbnRhdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2xpZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXApA
QCAtMzcxMyw2ICszNzEwLDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
V2ViR0xBZ2VudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJH
TEFnZW50LmggXAorCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEluc3Ry
dW1lbnRhdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2Vy
QWdlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdl
bnQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNl
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKaW5kZXggNzQ2NWQ0NDA1MjZkOGE1N2ZlNzhiMGJiNzA1OGJkN2MzMTAz
MGNkOC4uMmNjYTIxZTk0Mjc2Y2YxYWE3YjU4M2VhZjA1ZTY2OGZjMjlkOTdjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC03MzIsMTUgKzczMiwxNCBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSWRl
bnRpZmllcnNGYWN0b3J5LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAgXAotICAgIGluc3BlY3Rvci9J
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEhvc3QuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TW9kdWxlLmNwcCBcCisgICAgaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhc2VBZ2VudC5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgXAotICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwIFwKQEAgLTc2Nyw2ICs3NjYsNyBAQCBTT1VSQ0VTICs9IFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmNwcCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuY3BwIFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zdHJ1
bWVudGluZ0FnZW50cy5jcHAgXAogICAgIGluc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsLmNwcCBcCkBAIC0xODU3LDE1ICsxODU3LDEzIEBAIEhFQURFUlMgKz0gXAogICAgIGluc3Bl
Y3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
LmggXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaCBcCi0gICAgaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmggXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEhvc3QuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5oIFwKICAg
ICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaCBcCisgICAgaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGUuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFnZW50Lmgg
XAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckJhc2VBZ2VudC5oIFwKLSAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaCBcCi0gICAgaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0luc3RydW1lbnRh
dGlvbi5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmggXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmggXAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmggXApAQCAtMTg5NCw2ICsxODkyLDggQEAgSEVBREVSUyAr
PSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlVGV4dEVkaXRvci5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5oIFwKKyAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvcldvcmtlckFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnN0cnVtZW50aW5n
QWdlbnRzLmggXAogICAgIGluc3BlY3Rvci9NZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCAxNzEyMjMzMTQxMGM2YjU3
ZmYzNGE1MTIyOGUyMTA5Mjk4MmI0MTRhLi40YjFlNGRmMTk3MTE1YzEyZWQ3NjIzY2Y1NzEyOTQw
MzM5MDUwZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtNDYx
LDUwICs0NjEsNTAgQEAKICAgICAgIF0KICAgICB9LAogICAgIHsKLSAgICAgICd0YXJnZXRfbmFt
ZSc6ICdpbmplY3RlZF9jYW52YXNfc2NyaXB0X3NvdXJjZScsCisgICAgICAndGFyZ2V0X25hbWUn
OiAnaW5qZWN0ZWRfc2NyaXB0X3NvdXJjZScsCiAgICAgICAndHlwZSc6ICdub25lJywKICAgICAg
ICdhY3Rpb25zJzogWwogICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVy
YXRlSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UnLAorICAgICAgICAgICdhY3Rpb25f
bmFtZSc6ICdnZW5lcmF0ZUluamVjdGVkU2NyaXB0U291cmNlJywKICAgICAgICAgICAnaW5wdXRz
JzogWwotICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVs
ZVNvdXJjZS5qcycsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291
cmNlLmpzJywKICAgICAgICAgICBdLAogICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAg
ICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbmplY3RlZFNjcmlwdENhbnZh
c01vZHVsZVNvdXJjZS5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElS
KS93ZWJraXQvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCcsCiAgICAgICAgICAgXSwKICAgICAgICAg
ICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAogICAgICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAg
ICAgICAnPChwZXJsX2V4ZSknLAogICAgICAgICAgICAgJy4uL2luc3BlY3Rvci94eGQucGwnLAot
ICAgICAgICAgICAgJ0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlX2pzJywKKyAgICAg
ICAgICAgICdJbmplY3RlZFNjcmlwdFNvdXJjZV9qcycsCiAgICAgICAgICAgICAnPEAoX2lucHV0
cyknLAogICAgICAgICAgICAgJzxAKF9vdXRwdXRzKScKICAgICAgICAgICBdLAotICAgICAgICAg
ICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2Uu
aCBmcm9tIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzJywKKyAgICAgICAgICAn
bWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluamVjdGVkU2NyaXB0U291cmNlLmggZnJvbSBJbmplY3Rl
ZFNjcmlwdFNvdXJjZS5qcycsCiAgICAgICAgIH0sCiAgICAgICBdCiAgICAgfSwKICAgICB7Ci0g
ICAgICAndGFyZ2V0X25hbWUnOiAnaW5qZWN0ZWRfc2NyaXB0X3NvdXJjZScsCisgICAgICAndGFy
Z2V0X25hbWUnOiAnaW5qZWN0ZWRfd2ViZ2xfc2NyaXB0X3NvdXJjZScsCiAgICAgICAndHlwZSc6
ICdub25lJywKICAgICAgICdhY3Rpb25zJzogWwogICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlv
bl9uYW1lJzogJ2dlbmVyYXRlSW5qZWN0ZWRTY3JpcHRTb3VyY2UnLAorICAgICAgICAgICdhY3Rp
b25fbmFtZSc6ICdnZW5lcmF0ZUluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UnLAogICAg
ICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0U291cmNlLmpzJywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcycsCiAgICAgICAgICAgXSwKICAgICAgICAgICAnb3V0cHV0cyc6
IFsKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5qZWN0
ZWRTY3JpcHRTb3VyY2UuaCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2Via2l0L0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaCcsCiAgICAgICAgICAg
XSwKICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAogICAgICAgICAgICdhY3Rpb24n
OiBbCiAgICAgICAgICAgICAnPChwZXJsX2V4ZSknLAogICAgICAgICAgICAgJy4uL2luc3BlY3Rv
ci94eGQucGwnLAotICAgICAgICAgICAgJ0luamVjdGVkU2NyaXB0U291cmNlX2pzJywKKyAgICAg
ICAgICAgICdJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlX2pzJywKICAgICAgICAgICAg
ICc8QChfaW5wdXRzKScsCiAgICAgICAgICAgICAnPEAoX291dHB1dHMpJwogICAgICAgICAgIF0s
Ci0gICAgICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBJbmplY3RlZFNjcmlwdFNvdXJjZS5o
IGZyb20gSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMnLAorICAgICAgICAgICdtZXNzYWdlJzogJ0dl
bmVyYXRpbmcgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oIGZyb20gSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcycsCiAgICAgICAgIH0sCiAgICAgICBdCiAgICAgfSwK
QEAgLTEyMDAsOCArMTIwMCw4IEBACiAgICAgICAgICd3ZWJjb3JlX2JpbmRpbmdzX3NvdXJjZXMn
LAogICAgICAgICAnaW5zcGVjdG9yX292ZXJsYXlfcGFnZScsCiAgICAgICAgICdpbnNwZWN0b3Jf
cHJvdG9jb2xfc291cmNlcycsCi0gICAgICAgICdpbmplY3RlZF9jYW52YXNfc2NyaXB0X3NvdXJj
ZScsCiAgICAgICAgICdpbmplY3RlZF9zY3JpcHRfc291cmNlJywKKyAgICAgICAgJ2luamVjdGVk
X3dlYmdsX3NjcmlwdF9zb3VyY2UnLAogICAgICAgICAnZGVidWdnZXJfc2NyaXB0X3NvdXJjZScs
CiAgICAgICAgICcuLi8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXAvSmF2YVNj
cmlwdENvcmUuZ3lwOnlhcnInLAogICAgICAgICAnLi4vLi4vV1RGL1dURi5neXAvV1RGLmd5cDp3
dGYnLApAQCAtMTMyNyw4ICsxMzI3LDggQEAKICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAg
J2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgJ2RlYnVnZ2VyX3NjcmlwdF9zb3VyY2UnLAotICAg
ICAgICAnaW5qZWN0ZWRfY2FudmFzX3NjcmlwdF9zb3VyY2UnLAogICAgICAgICAnaW5qZWN0ZWRf
c2NyaXB0X3NvdXJjZScsCisgICAgICAgICdpbmplY3RlZF93ZWJnbF9zY3JpcHRfc291cmNlJywK
ICAgICAgICAgJ2luc3BlY3Rvcl9vdmVybGF5X3BhZ2UnLAogICAgICAgICAnaW5zcGVjdG9yX3By
b3RvY29sX3NvdXJjZXMnLAogICAgICAgICAnd2ViY29yZV9iaW5kaW5nc19zb3VyY2VzJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA0ZDQzYzQxNjViZjRmMTgxMDgwYWNjZWJiNzI3MmQ2ZGFhYWEzNGNk
Li5kNmZmNzc1NzU2ZDU3NzNjZjU2MzJkZDIzMGUxM2YxYTgxMDFhMjM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0yODU1LDIzICsyODU1LDIwIEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgnLAotICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAnLAotICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCcsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0TWFuYWdlci5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRNb2R1bGUuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1
bGUuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUu
Y3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5o
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFzZUFnZW50LmNwcCcsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmgnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXNBZ2VudC5jcHAnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzSW5zdHJ1
bWVudGF0aW9uLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3Bw
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oJywKQEAgLTI5Mjgs
NiArMjkyNSw5IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oJywKKyAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5jcHAnLAorICAgICAgICAgICAgJ2lu
c3BlY3Rvci9JbnNwZWN0b3JXZWJHTEFnZW50LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbi5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yV29ya2VyQWdlbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3RydW1lbnRpbmdB
Z2VudHMuY3BwJywKQEAgLTY0OTUsNyArNjQ5NSw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC90ZXh0RWRpdG9yLmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC90ZXh0UHJvbXB0LmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC90
aW1lbGluZVBhbmVsLmNzcycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9jYW52
YXNQcm9maWxlci5jc3MnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvd2ViR0xQ
cm9maWxlci5jc3MnLAogICAgICAgICBdLAogICAgICAgICAnd2ViaW5zcGVjdG9yX2VsZW1lbnRz
X2pzX2ZpbGVzJzogWwogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTTmFtZWRG
bG93Q29sbGVjdGlvbnNWaWV3LmpzJywKQEAgLTY1NzQsNyArNjU3NCw3IEBACiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVMYXVuY2hlclZpZXcuanMnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvVG9wRG93blByb2ZpbGVEYXRhR3JpZFRyZWUuanMnLAotICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ2FudmFzUHJvZmlsZVZpZXcuanMnLAorICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvV2ViR0xQcm9maWxlVmlldy5qcycsCiAgICAg
ICAgIF0sCiAKICAgICAgICAgJ3dlYmluc3BlY3Rvcl9hdWRpdHNfanNfZmlsZXMnOiBbCkBAIC03
MjczLDggKzcyNzMsOCBAQAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSFRNTEVudGl0eVRhYmxlLmNwcCcsCiAgICAgICAgICAgICAnPChQUk9EVUNU
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9IVE1MTmFtZXMuY3BwJywKICAgICAgICAgICAg
ICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0hlYWRlckRldGVjdGlvbi5o
JywKLSAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0lu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmgnLAogICAgICAgICAgICAgJzwoUFJPRFVD
VF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCcsCisg
ICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmgnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwJywK
ICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNzY4ZGUwZGM0
ODMyNTdkMzJjMmFhMjk1MWUwMjY0ZTM2NzE2OGE2MC4uMTg5NmExMTlkYzJmZjk4ODExYjIzNTg1
MWRlMzJmMGQwNGMzNWE2YyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTU5MCwxMSArNTkwLDExIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcJChQ
cm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3Vy
Y2UuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcJChQ
cm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xJbmplY3RlZFNjcmlw
dFNvdXJjZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
alwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
U291cmNlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTc0NTg3LDcgKzc0NTg3
LDcgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCIKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdEhvc3QuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKQEAgLTc0NjA3LDExICs3
NDYwNywxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRIb3N0
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGlu
c3BlY3RvclxJbmplY3RlZFNjcmlwdEhvc3QuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXEluamVjdGVkU2NyaXB0TWFuYWdlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgogCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgpAQCAtNzQ2MzEsMTEgKzc0NjMxLDEx
IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXElu
amVjdGVkU2NyaXB0TW9kdWxlLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJ
CQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCkBAIC03NDY1NSwxMSArNzQ2NTUsMTEgQEAKIAkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1vZHVsZS5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3Jp
cHRNb2R1bGUuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluamVjdGVkU2Ny
aXB0V2ViR0xNb2R1bGUuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJ
TmFtZT0iUmVsZWFzZXxXaW4zMiIKQEAgLTc0Njc5LDcgKzc0Njc5LDcgQEAKIAkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1vZHVsZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQpAQCAtNzQ3OTEsMzQgKzc0NzkxLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckNhbnZhc0Fn
ZW50LmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVh
c2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rp
b258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvckNhbnZhc0FnZW50LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDYW52YXNJbnN0
cnVtZW50YXRpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckNsaWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgpAQCAtNzU1MzUsNiArNzU1MDcsMzQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvcldlYkdM
QWdlbnQuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVs
ZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJ
PFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUHJvZHVj
dGlvbnxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJ
PFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxpbnNwZWN0b3JcSW5zcGVjdG9yV2ViR0xBZ2VudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yV2ViR0xJbnN0
cnVtZW50YXRpb24uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvcldvcmtlckFnZW50LmNwcCIKIAkJCQk+CiAJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCkBAIC03NTk3MCwxNCArNzU5NzAsNiBAQAogCQkJCQk+CiAJCQkJ
PC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxjYW52YXNQcm9maWxlci5jc3MiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUK
LQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENhbnZhc1Byb2ZpbGVW
aWV3LmpzIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDaGVja2JveC5qcyIKIAkJCQkJPgogCQkJCTwvRmls
ZT4KQEAgLTc2ODgyLDYgKzc2ODc0LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZp
bGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHdlYkdMUHJvZmls
ZXIuY3NzIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxXZWJHTFByb2ZpbGVWaWV3LmpzIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxXb3JrZXJzU2lkZWJhclBhbmUuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
N2EyNWVhYTg4MTRhZDQ4NTczMzFhNmM1M2E3NjYzNjZjZDNjMjJkYy4uMjBkYjhmNDQ0MTRjZWFl
YTRjZjU4ZGUzMTE0Y2I3YzFkYjc3ODUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDUzOSwxNSArNDUzOSwxNSBAQAogCQlB
QTIxRUNDRDBBQkYwRkM2MDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEwOTc4RUUwQUJBQTZFMTAw
ODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBQTRDM0E3NjBCMkIxNjc5MDAyMzM0QTIgLyogU3R5
bGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFBNEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICovOyB9Owog
CQlBQTRDM0E3NzBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3NTBCMkIxNjc5MDAyMzM0
QTIgLyogU3R5bGVFbGVtZW50LmggKi87IH07Ci0JCUFBNzMxODNFMTU5MjU1QjkwMEE5M0U2RSAv
KiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTczMTgzQzE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3BwICovOyB9OwotCQlBQTczMTgzRjE1OTI1NUI5MDBBOTNF
NkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNzMxODNEMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZS5oICovOyB9OworCQlBQTczMTgzRTE1OTI1NUI5MDBBOTNF
NkUgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTczMTgzQzE1OTI1NUI5MDBBOTNFNkUgLyogSW5q
ZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAgKi87IH07CisJCUFBNzMxODNGMTU5MjU1QjkwMEE5
M0U2RSAvKiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTczMTgzRDE1OTI1NUI5MDBBOTNFNkUgLyogSW5q
ZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oICovOyB9OwogCQlBQUI2MDU0RTE1ODc0QzU4MDA3QjUw
MzEgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFBQjYwNTRBMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNj
cmlwdEJhc2UuY3BwICovOyB9OwogCQlBQUI2MDU0RjE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0
ZWRTY3JpcHRCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQUI2MDU0QjE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmggKi87
IH07CiAJCUFBQjYwNTUwMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUI2MDU0
QzE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwICovOyB9OwogCQlB
QUI2MDU1MTE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBQjYwNTREMTU4NzRDNTgw
MDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oICovOyB9OwotCQlBQUQ3NjZFQjE1N0U1
MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFENzY2RTgxNTdFNTAyRjAwRTg1NDIzIC8q
IEluc3BlY3RvckNhbnZhc0FnZW50LmNwcCAqLzsgfTsKLQkJQUFENzY2RUMxNTdFNTAyRjAwRTg1
NDIzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBQUQ3NjZFOTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaCAqLzsgfTsKLQkJQUFENzY2RUQxNTdFNTAyRjAwRTg1NDIzIC8qIEluc3Bl
Y3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUFENzY2RUExNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNh
bnZhc0luc3RydW1lbnRhdGlvbi5oICovOyB9OworCQlBQUQ3NjZFQjE1N0U1MDJGMDBFODU0MjMg
LyogSW5zcGVjdG9yV2ViR0xBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBQUQ3NjZFODE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2Vi
R0xBZ2VudC5jcHAgKi87IH07CisJCUFBRDc2NkVDMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0
b3JXZWJHTEFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQUQ3NjZFOTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xBZ2VudC5oICov
OyB9OworCQlBQUQ3NjZFRDE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xJbnN0cnVt
ZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFBRDc2NkVBMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlv
bi5oICovOyB9OwogCQlBQUY1QjdCNzE1MjRCNkM1MDAwNENCNDkgLyogV2ViU29ja2V0RnJhbWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFGNUI3
QjExNTI0QjRCRDAwMDRDQjQ5IC8qIFdlYlNvY2tldEZyYW1lLmNwcCAqLzsgfTsKIAkJQUIyM0Ez
MjcwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMjNBMzI1MDlCQkE3RDAw
MDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAgKi87IH07CiAJCUFCMjNBMzI4
MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUIyM0EzMjYwOUJCQTdEMDAwNjdD
QzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmggKi87IH07CkBAIC0xMTY3NCwxNyArMTE2
NzQsMTcgQEAKIAkJQUEwOTc4RUUwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0N1cnNvckltYWdlVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUE0QzNBNzQwQjJCMTY3OTAwMjMz
NEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3R5bGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUE0
QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUFBNzMxODNDMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFBNzMx
ODNEMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQTkwMzBGRTE1N0UxNkEwMDAyNzYyNDcg
LyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5q
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUE5MTI3NTAxNTdFMzVBNTAwNDU0RTU0
IC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBNzMxODNDMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBQTczMTgzRDE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRXZWJH
TE1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBOTAzMEZFMTU3
RTE2QTAwMDI3NjI0NyAvKiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZVNvdXJjZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUE5MTI3NTAxNTdF
MzVBNTAwNDU0RTU0IC8qIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUI2MDU0QTE1ODc0QzU4MDA3QjUw
MzEgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluamVjdGVkU2NyaXB0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFBQjYwNTRCMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdEJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBQjYwNTRDMTU4NzRDNTgwMDdCNTAzMSAvKiBJ
bmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFBQjYwNTREMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdE1vZHVsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQUQ3NjZFODE1N0U1MDJGMDBFODU0MjMgLyog
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBQUQ3NjZFOTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUFENzY2RUExNTdFNTAyRjAwRTg1NDIzIC8q
IEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQUFENzY2RTgxNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3Rvcldl
YkdMQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9yV2ViR0xBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBRDc2NkU5
MTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEFnZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvcldlYkdMQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQUFENzY2RUExNTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvcldlYkdM
SW5zdHJ1bWVudGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3Bl
Y3RvcldlYkdMSW5zdHJ1bWVudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFBRjVCN0IxMTUyNEI0QkQwMDA0Q0I0OSAvKiBXZWJTb2NrZXRGcmFtZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTb2NrZXRGcmFtZS5jcHA7IHBhdGggPSBN
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBQjIzQTMyNTA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUIyM0Ez
MjYwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2MTUsNyArMTQ2MTUsNyBAQAogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk3QTU2M0U1NDEyREUzMkIwMDBGNDUzNkQg
LyogSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCAqLywKLQkJCQlBQTkxMjc1MDE1N0UzNUE1MDA0NTRF
NTQgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaCAqLywKKwkJCQlBQTkxMjc1
MDE1N0UzNUE1MDA0NTRFNTQgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5oICov
LAogCQkJCTRGNzA3QTk3MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5jcHAgKi8sCiAJCQkJNEY3MDdBOTgxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmggKi8sCiAJCQkJNEY0RjVGRkExMUNCRDJEMjAwQTE4NkJGIC8qIElu
c3BlY3RvckZyb250ZW5kLmNwcCAqLywKQEAgLTE0NjYzLDkgKzE0NjYzLDkgQEAKIAkJCQlBQUI2
MDU0QzE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwICovLAogCQkJ
CUFBQjYwNTREMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5oICovLAog
CQkJCTdBNTYzRjk1MTJERjVDOTEwMEY0NTM2RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5qcyAq
LywKLQkJCQlBQTczMTgzQzE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNN
b2R1bGUuY3BwICovLAotCQkJCUFBNzMxODNEMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZS5oICovLAotCQkJCUFBOTAzMEZFMTU3RTE2QTAwMDI3NjI0NyAvKiBJ
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcyAqLywKKwkJCQlBQTczMTgzQzE1OTI1
NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5jcHAgKi8sCisJCQkJQUE3
MzE4M0QxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaCAqLywK
KwkJCQlBQTkwMzBGRTE1N0UxNkEwMDAyNzYyNDcgLyogSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZVNvdXJjZS5qcyAqLywKIAkJCQkxQzQzNUNENDE0RTg1NDVCMDA0RTEwRUEgLyogSW5zcGVjdG9y
LTAuMS5qc29uICovLAogCQkJCTFDNDM1Q0Q1MTRFODU0NUIwMDRFMTBFQSAvKiBJbnNwZWN0b3It
MS4wLmpzb24gKi8sCiAJCQkJMUM0MzVDRDMxNEU4NTQ0RjAwNEUxMEVBIC8qIEluc3BlY3Rvci5q
c29uICovLApAQCAtMTQ3NDAsOSArMTQ3NDAsOSBAQAogCQkJCTc1NDEzM0E3MTAyRTAwRTgwMDA3
NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50LmggKi8sCiAJCQkJNEYzMjg5QjMxMUE0MkFB
QjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5jcHAgKi8sCiAJCQkJNEYzMjg5QjQxMUE0MkFB
QjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5oICovLAotCQkJCUFBRDc2NkU4MTU3RTUwMkYw
MEU4NTQyMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgKi8sCi0JCQkJQUFENzY2RTkxNTdF
NTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggKi8sCi0JCQkJQUFENzY2RUEx
NTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5oICovLAor
CQkJCUFBRDc2NkU4MTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEFnZW50LmNwcCAq
LywKKwkJCQlBQUQ3NjZFOTE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xBZ2VudC5o
ICovLAorCQkJCUFBRDc2NkVBMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JXZWJHTEluc3Ry
dW1lbnRhdGlvbi5oICovLAogCQkJCUYzODEwQzE5MTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0
b3JXb3JrZXJBZ2VudC5jcHAgKi8sCiAJCQkJRjM4MTBDMUExMzY1QTQ5NjAwRUQ2RTMzIC8qIElu
c3BlY3RvcldvcmtlckFnZW50LmggKi8sCiAJCQkJRjM3NUNDMDYxMTUwRDMwMDAwOEREQjgxIC8q
IEluc3BlY3RvcldvcmtlclJlc291cmNlLmggKi8sCkBAIC0yMzc1Nyw3ICsyMzc1Nyw3IEBACiAJ
CQkJN0EwRTc2RkExMEJGMDhFRDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjMxNjM5NkMxMzI5NDgxQTAwQTY0OUNCIC8qIEluamVjdGVkU2NyaXB0
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUFCNjA1NTExNTg3NEM1ODAwN0I1MDMxIC8q
IEluamVjdGVkU2NyaXB0TW9kdWxlLmggaW4gSGVhZGVycyAqLywKLQkJCQlBQTczMTgzRjE1OTI1
NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCUFBNzMxODNGMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdFdlYkdMTW9k
dWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjVFNTBBMTU1QTA1MDAwQTQyMzQgLyogSW5s
aW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjVFMzBBMTU1QTA1MDAwQTQyMzQgLyog
SW5saW5lRmxvd0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTIzODEwLDggKzIzODEw
LDggQEAKIAkJCQk3NTQxMzNBODEwMkUwMEU4MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc4REEyMEYxNTIwRUJBMzAwNjE0MUMxIC8qIElu
c3BlY3RvclR5cGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjMyODlCNjExQTQyQUFC
MDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBQUQ3NjZF
QzE1N0U1MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUFBRDc2NkVEMTU3RTUwMkYwMEU4NTQyMyAvKiBJbnNwZWN0b3JDYW52YXNJbnN0cnVt
ZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUFBRDc2NkVDMTU3RTUwMkYwMEU4NTQyMyAv
KiBJbnNwZWN0b3JXZWJHTEFnZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBQUQ3NjZFRDE1N0U1
MDJGMDBFODU0MjMgLyogSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUYzODEwQzFDMTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM3NUNDMDcxMTUwRDMwMDAwOEREQjgxIC8qIEluc3Bl
Y3RvcldvcmtlclJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0FCRkUwQzEzMEU5REEw
MDBFN0Y3RDEgLyogSW5zdHJ1bWVudGluZ0FnZW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjk2
NCw3ICsyNjk2NCw3IEBACiAJCQkJN0EwRTc2RjkxMEJGMDhFRDAwQTAyNzZFIC8qIEluamVjdGVk
U2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzE2Mzk2QjEzMjk0ODFBMDBBNjQ5
Q0IgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBQjYw
NTUwMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBQTczMTgzRTE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUE3MzE4M0UxNTkyNTVCOTAwQTkzRTZF
IC8qIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThD
RkY1RTYwQTE1NUEwNTAwMEE0MjM0IC8qIElubGluZUJveC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBOENGRjVFNDBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lRmxvd0JveC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0VBNDg1OTA5N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI3MDEyLDcgKzI3MDEyLDcgQEAKIAkJCQk3NTQxMzNBQTEwMkUw
MEY0MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1NzNEMTM0NzE0Q0UzOUZGMDA1N0FCQ0EgLyogSW5zcGVjdG9yVHlwZUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNEYzMjg5QjUxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3Rv
clZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBQUQ3NjZFQjE1N0U1MDJGMDBFODU0MjMg
LyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUFENzY2RUIx
NTdFNTAyRjAwRTg1NDIzIC8qIEluc3BlY3RvcldlYkdMQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRjM4MTBDMUIxMzY1QTQ5NjAwRUQ2RTMzIC8qIEluc3BlY3RvcldvcmtlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUYzNTBCNzM1MTNGMTM3N0QwMDg4MEM0MyAvKiBJbnN0cnVt
ZW50aW5nQWdlbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTYwMEIwNTM4MTQwMDJD
RTY0RiAvKiBJbnRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAppbmRl
eCA1NTZiZGY3NWZiNGE4YzhiZmVlOWRmYWIwMGZkZTljNmRlMDlmZDU5Li44MDIxMmE5ZWU5MTlm
MDFhMWQ3OTdmM2IwODQ0M2IyZmM0ZWVhNzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcApAQCAtMzEsNyAr
MzEsNyBAQAogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSW5z
cGVjdG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yV2ViR0xJ
bnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAppbmRleCAwYjE1NzI3OWNjZDFhYWI5
NTIyNzBmNWY4OTUyZDc3NDBlZWIzZjkxLi5hYjZjNzVhYjk1YjVjNDYxY2UyNDc0NDAwZjE2MWM1
NzM2MGM4OTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCkBAIC00MCw3ICs0MCw3
IEBACiAjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJW
OE5vZGUuaCIKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFzSW5z
dHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb24u
aCIKICNpbmNsdWRlICJWOFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggNmY0ZDFmNzAxMGZiNzE0YWE0YWQzMjdiOTQw
NWQ3MjE4MmEzZDY1My4uZGQ5Y2IxMWExNjZkM2I3YTgyNTg2ZmQ0MDIyYTlmMzdkMmU3NTdiNyAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKQEAgLTQ2LDYgKzQ2LDcgQEAgRE9NQUlOX0RFRklORV9OQU1FX01BUCA9IHsKICAgICAi
SW5kZXhlZERCIjogIklOREVYRURfREFUQUJBU0UiLAogICAgICJQcm9maWxlciI6ICJKQVZBU0NS
SVBUX0RFQlVHR0VSIiwKICAgICAiV29ya2VyIjogIldPUktFUlMiLAorICAgICJXZWJHTCI6ICJX
RUJHTCIsCiB9CiAKIApAQCAtNTcsNyArNTgsNyBAQCBUWVBFX05BTUVfRklYX01BUCA9IHsKIAog
CiBUWVBFU19XSVRIX1JVTlRJTUVfQ0FTVF9TRVQgPSBmcm96ZW5zZXQoWyJSdW50aW1lLlJlbW90
ZU9iamVjdCIsICJSdW50aW1lLlByb3BlcnR5RGVzY3JpcHRvciIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLCAiRGVi
dWdnZXIuQ2FsbEZyYW1lIiwgIkNhbnZhcy5UcmFjZUxvZyIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLCAiRGVidWdn
ZXIuQ2FsbEZyYW1lIiwgIldlYkdMLlRyYWNlTG9nIiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBiZSBhIHRlbXBvcmFyeSBoYWNrLiBUaW1l
bGluZUV2ZW50IHNob3VsZCBiZSBjcmVhdGVkIHZpYSBnZW5lcmF0ZWQgQysrIEFQSS4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZl
bnQiXSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0Q2FudmFzTW9kdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMjc4
ZDk3NmVjM2Y3NTUxZjM3YmUzYzk0ZjkzY2U3MjU1MTYyOGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLQotI2luY2x1ZGUg
IkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmgiCi0KLSNpbmNsdWRlICJJbmplY3RlZFNjcmlw
dC5oIgotI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmgiCi0jaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25D
YWxsLmgiCi0jaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6OkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxl
KCkKLSAgICA6IEluamVjdGVkU2NyaXB0TW9kdWxlKCJJbmplY3RlZFNjcmlwdENhbnZhc01vZHVs
ZSIpCi17Ci19Ci0KLUluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIEluamVjdGVkU2NyaXB0Q2Fu
dmFzTW9kdWxlOjptb2R1bGVGb3JTdGF0ZShJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVk
U2NyaXB0TWFuYWdlciwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQotewotICAgIEluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlIHJlc3VsdDsKLSAgICByZXN1bHQuZW5zdXJlSW5qZWN0ZWQoaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLCBzY3JpcHRTdGF0ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotU3RyaW5nIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlOjpzb3VyY2UoKSBjb25zdAotewot
ICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oSW5qZWN0ZWRT
Y3JpcHRDYW52YXNNb2R1bGVTb3VyY2VfanMpLCBzaXplb2YoSW5qZWN0ZWRTY3JpcHRDYW52YXNN
b2R1bGVTb3VyY2VfanMpKTsKLX0KLQotI2lmIEVOQUJMRShXRUJHTCkKLVNjcmlwdE9iamVjdCBJ
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZTo6d3JhcFdlYkdMQ29udGV4dChjb25zdCBTY3JpcHRP
YmplY3QmIGdsQ29udGV4dCkKLXsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5q
ZWN0ZWRTY3JpcHRPYmplY3QoKSwgIndyYXBXZWJHTENvbnRleHQiKTsKLSAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChnbENvbnRleHQpOwotICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7
Ci0gICAgU2NyaXB0VmFsdWUgcmVzdWx0VmFsdWUgPSBjYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJs
ZWQoZnVuY3Rpb24sIGhhZEV4Y2VwdGlvbik7Ci0gICAgaWYgKGhhZEV4Y2VwdGlvbiB8fCByZXN1
bHRWYWx1ZS5oYXNOb1ZhbHVlKCkgfHwgIXJlc3VsdFZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTY3JpcHRPYmplY3QoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIFNjcmlwdE9iamVjdChnbENvbnRleHQuc2NyaXB0U3RhdGUoKSwg
cmVzdWx0VmFsdWUpOwotfQotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKLQotdm9pZCBJbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZTo6Y2FwdHVyZUZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgU3RyaW5nKiB0cmFjZUxvZ0lkKQotewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiY2FwdHVyZUZyYW1lIik7Ci0gICAgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3Vs
dFZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0g
SW5zcGVjdG9yVmFsdWU6OlR5cGVTdHJpbmcgfHwgIXJlc3VsdFZhbHVlLT5hc1N0cmluZyh0cmFj
ZUxvZ0lkKSkKLSAgICAgICAgKmVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiBjYXB0dXJl
RnJhbWUiOwotfQotCi12b2lkIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlOjpkcm9wVHJhY2VM
b2coRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQpCi17
Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCks
ICJkcm9wVHJhY2VMb2ciKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCh0cmFjZUxvZ0lk
KTsKLSAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOwotICAgIGNhbGxGdW5jdGlvbldpdGhF
dmFsRW5hYmxlZChmdW5jdGlvbiwgaGFkRXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWhhZEV4Y2Vw
dGlvbik7Ci0gICAgaWYgKGhhZEV4Y2VwdGlvbikKLSAgICAgICAgKmVycm9yU3RyaW5nID0gIklu
dGVybmFsIGVycm9yOiBkcm9wVHJhY2VMb2ciOwotfQotCi12b2lkIEluamVjdGVkU2NyaXB0Q2Fu
dmFzTW9kdWxlOjp0cmFjZUxvZyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdHJhY2VMb2dJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDYW52YXM6OlRyYWNlTG9nPiogdHJh
Y2VMb2cpCi17Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0
T2JqZWN0KCksICJ0cmFjZUxvZyIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHRyYWNl
TG9nSWQpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgbWFr
ZUNhbGwoZnVuY3Rpb24sICZyZXN1bHRWYWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCBy
ZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBlT2JqZWN0KSB7Ci0gICAg
ICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5nKGVycm9yU3RyaW5nKSkKLSAgICAgICAgICAg
ICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogdHJhY2VMb2ciOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgICp0cmFjZUxvZyA9IFR5cGVCdWlsZGVyOjpDYW52YXM6OlRyYWNlTG9n
OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZSk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGU6OnJlcGxheVRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiB0cmFjZUxvZ0lkLCBpbnQgc3RlcE5vLCBTdHJpbmcqIHJlc3VsdCkKLXsKLSAgICBT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgInJlcGxh
eVRyYWNlTG9nIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodHJhY2VMb2dJZCk7Ci0g
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3RlcE5vKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0VmFsdWUp
OwotICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBJbnNwZWN0
b3JWYWx1ZTo6VHlwZVN0cmluZyB8fCAhcmVzdWx0VmFsdWUtPmFzU3RyaW5nKHJlc3VsdCkpCi0g
ICAgICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVwbGF5VHJhY2VMb2ciOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2Fu
dmFzTW9kdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRlMjIzNjYwOWNjYzc3
NGQ2NmQ2Y2JhOWRmNjBhMjlmNjUxZDkyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRD
YW52YXNNb2R1bGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlX2gKLSNkZWZpbmUgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGVfaAotCi0jaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaCIKLSNpbmNsdWRlICJTY3Jp
cHRTdGF0ZS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLWNsYXNzIFNjcmlwdE9i
amVjdDsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0KLWNsYXNzIEluamVjdGVkU2NyaXB0Q2Fu
dmFzTW9kdWxlIDogcHVibGljIEluamVjdGVkU2NyaXB0TW9kdWxlIHsKLXB1YmxpYzoKLSAgICBJ
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSgpOwotICAgIAotICAgIHZpcnR1YWwgU3RyaW5nIHNv
dXJjZSgpIGNvbnN0OwotCi0gICAgc3RhdGljIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1v
ZHVsZUZvclN0YXRlKEluamVjdGVkU2NyaXB0TWFuYWdlciosIFNjcmlwdFN0YXRlKik7Ci0KLSNp
ZiBFTkFCTEUoV0VCR0wpCi0gICAgU2NyaXB0T2JqZWN0IHdyYXBXZWJHTENvbnRleHQoY29uc3Qg
U2NyaXB0T2JqZWN0JiBnbENvbnRleHQpOwotI2VuZGlmCi0KLSAgICB2b2lkIGNhcHR1cmVGcmFt
ZShFcnJvclN0cmluZyosIFN0cmluZyopOwotICAgIHZvaWQgZHJvcFRyYWNlTG9nKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB0cmFjZUxvZyhFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpUcmFjZUxvZz4qKTsKLSAg
ICB2b2lkIHJlcGxheVRyYWNlTG9nKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgaW50LCBT
dHJpbmcqKTsKLX07Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyAhZGVmaW5lZChJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZV9oKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNl
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxl
U291cmNlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzgwYWYzYzQxNTI1Yzk4
ZTc2YmRiODAzNTcwZWVjM2I4Y2I3N2IyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdENh
bnZhc01vZHVsZVNvdXJjZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDIxMTMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgot
ICogQHBhcmFtIHtJbmplY3RlZFNjcmlwdEhvc3R9IEluamVjdGVkU2NyaXB0SG9zdAotICogQHBh
cmFtIHtXaW5kb3d9IGluc3BlY3RlZFdpbmRvdwotICogQHBhcmFtIHtudW1iZXJ9IGluamVjdGVk
U2NyaXB0SWQKLSAqLwotKGZ1bmN0aW9uIChJbmplY3RlZFNjcmlwdEhvc3QsIGluc3BlY3RlZFdp
bmRvdywgaW5qZWN0ZWRTY3JpcHRJZCkgewotCi12YXIgVHlwZVV0aWxzID0gewotICAgIC8qKgot
ICAgICAqIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvdHlwZWRhcnJheS9zcGVjcy9s
YXRlc3QvIzcKLSAgICAgKiBAdHlwZSB7QXJyYXkuPEZ1bmN0aW9uPn0KLSAgICAgKi8KLSAgICBf
dHlwZWRBcnJheUNsYXNzZXM6IChmdW5jdGlvbih0eXBlTmFtZXMpIHsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGVOYW1lcy5sZW5ndGg7
IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpbnNwZWN0ZWRXaW5kb3dbdHlwZU5hbWVz
W2ldXSkKLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbnNwZWN0ZWRXaW5kb3dbdHlwZU5h
bWVzW2ldXSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9KShbIklu
dDhBcnJheSIsICJVaW50OEFycmF5IiwgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgIkludDE2QXJyYXki
LCAiVWludDE2QXJyYXkiLCAiSW50MzJBcnJheSIsICJVaW50MzJBcnJheSIsICJGbG9hdDMyQXJy
YXkiLCAiRmxvYXQ2NEFycmF5Il0pLAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHsqfSBhcnJh
eQotICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufQotICAgICAqLwotICAgIHR5cGVkQXJyYXlDbGFz
czogZnVuY3Rpb24oYXJyYXkpCi0gICAgewotICAgICAgICB2YXIgY2xhc3NlcyA9IFR5cGVVdGls
cy5fdHlwZWRBcnJheUNsYXNzZXM7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2xhc3Nl
cy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChhcnJheSBpbnN0YW5jZW9m
IGNsYXNzZXNbaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzZXNbaV07Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7Kn0gb2JqCi0gICAgICogQHJldHVybiB7Kn0KLSAgICAgKiBGSVhNRTogc3VwcHJlc3MgY2hl
Y2tUeXBlcyBkdWUgdG8gb3V0ZGF0ZWQgYnVpbHRpbiBleHRlcm5zIGZvciBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQgYW5kIEltYWdlRGF0YQotICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30K
LSAgICAgKi8KLSAgICBjbG9uZTogZnVuY3Rpb24ob2JqKQotICAgIHsKLSAgICAgICAgaWYgKCFv
YmopCi0gICAgICAgICAgICByZXR1cm4gb2JqOwotCi0gICAgICAgIHZhciB0eXBlID0gdHlwZW9m
IG9iajsKLSAgICAgICAgaWYgKHR5cGUgIT09ICJvYmplY3QiICYmIHR5cGUgIT09ICJmdW5jdGlv
biIpCi0gICAgICAgICAgICByZXR1cm4gb2JqOwotCi0gICAgICAgIC8vIEhhbmRsZSBBcnJheSBh
bmQgQXJyYXlCdWZmZXIgaW5zdGFuY2VzLgotICAgICAgICBpZiAodHlwZW9mIG9iai5zbGljZSA9
PT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQob2JqIGluc3RhbmNl
b2YgQXJyYXkgfHwgb2JqIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpOwotICAgICAgICAgICAgcmV0
dXJuIG9iai5zbGljZSgwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB0eXBlZEFycmF5Q2xh
c3MgPSBUeXBlVXRpbHMudHlwZWRBcnJheUNsYXNzKG9iaik7Ci0gICAgICAgIGlmICh0eXBlZEFy
cmF5Q2xhc3MpCi0gICAgICAgICAgICByZXR1cm4gbmV3IHR5cGVkQXJyYXlDbGFzcyhvYmopOwot
Ci0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KQotICAgICAgICAg
ICAgcmV0dXJuIG9iai5jbG9uZU5vZGUodHJ1ZSk7Ci0KLSAgICAgICAgaWYgKG9iaiBpbnN0YW5j
ZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JqLmNs
b25lTm9kZSh0cnVlKTsKLSAgICAgICAgICAgIHZhciBjb250ZXh0ID0gUmVzb3VyY2Uud3JhcHBl
ZE9iamVjdChyZXN1bHQuZ2V0Q29udGV4dCgiMmQiKSk7Ci0gICAgICAgICAgICBjb250ZXh0LmRy
YXdJbWFnZShvYmosIDAsIDApOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7Ci0gICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gb2JqLmNsb25lTm9kZSh0cnVlKTsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBDb3B5IEhUTUxWaWRlb0VsZW1lbnQncyBjdXJyZW50IGltYWdlIGludG8gYSAyZCBj
YW52YXMuCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG9iaiBpbnN0YW5jZW9mIEltYWdlRGF0YSkgewotICAgICAgICAgICAgdmFyIGNvbnRleHQg
PSBUeXBlVXRpbHMuX2R1bW15Q2FudmFzMmRDb250ZXh0KCk7Ci0gICAgICAgICAgICB2YXIgcmVz
dWx0ID0gY29udGV4dC5jcmVhdGVJbWFnZURhdGEob2JqKTsKLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwLCBuID0gb2JqLmRhdGEubGVuZ3RoOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgICBy
ZXN1bHQuZGF0YVtpXSA9IG9iai5kYXRhW2ldOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotCi0gICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDog
ZmFpbGVkIHRvIGNsb25lIG9iamVjdDogIiwgb2JqKTsKLSAgICAgICAgcmV0dXJuIG9iajsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
fQotICAgICAqLwotICAgIF9kdW1teUNhbnZhczJkQ29udGV4dDogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdmFyIGNvbnRleHQgPSBUeXBlVXRpbHMuX2R1bW15Q2FudmFzMmRDb250ZXh0SW5z
dGFuY2U7Ci0gICAgICAgIGlmICghY29udGV4dCkgewotICAgICAgICAgICAgdmFyIGNhbnZhcyA9
IGluc3BlY3RlZFdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKLSAgICAg
ICAgICAgIGNvbnRleHQgPSAvKiogQHR5cGUge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gKi8g
UmVzb3VyY2Uud3JhcHBlZE9iamVjdChjYW52YXMuZ2V0Q29udGV4dCgiMmQiKSk7Ci0gICAgICAg
ICAgICBUeXBlVXRpbHMuX2R1bW15Q2FudmFzMmRDb250ZXh0SW5zdGFuY2UgPSBjb250ZXh0Owot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjb250ZXh0OwotICAgIH0KLX0KLQotLyoqCi0gKiBA
aW50ZXJmYWNlCi0gKi8KLWZ1bmN0aW9uIFN0YWNrVHJhY2UoKQotewotfQotCi1TdGFja1RyYWNl
LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKLSAg
ICAgKiBAcmV0dXJuIHt7c291cmNlVVJMOiBzdHJpbmcsIGxpbmVOdW1iZXI6IG51bWJlciwgY29s
dW1uTnVtYmVyOiBudW1iZXJ9fQotICAgICAqLwotICAgIGNhbGxGcmFtZTogZnVuY3Rpb24oaW5k
ZXgpCi0gICAgewotICAgIH0KLX0KLQotLyoqCi0gKiBAcGFyYW0ge251bWJlcj19IHN0YWNrVHJh
Y2VMaW1pdAotICogQHBhcmFtIHtGdW5jdGlvbj19IHRvcE1vc3RGdW5jdGlvblRvSWdub3JlCi0g
KiBAcmV0dXJuIHtTdGFja1RyYWNlfQotICovCi1TdGFja1RyYWNlLmNyZWF0ZSA9IGZ1bmN0aW9u
KHN0YWNrVHJhY2VMaW1pdCwgdG9wTW9zdEZ1bmN0aW9uVG9JZ25vcmUpCi17Ci0gICAgaWYgKHR5
cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gImZ1bmN0aW9uIikKLSAgICAgICAgcmV0
dXJuIG5ldyBTdGFja1RyYWNlVjgoc3RhY2tUcmFjZUxpbWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0ln
bm9yZSB8fCBhcmd1bWVudHMuY2FsbGVlKTsKLSAgICAvLyBGSVhNRTogU3VwcG9ydCBKU0MsIGFu
ZCBtYXliZSBvdGhlciBicm93c2Vycy4KLSAgICByZXR1cm4gbnVsbDsKLX0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtTdGFja1RyYWNlfQotICogQHBhcmFtIHtudW1i
ZXI9fSBzdGFja1RyYWNlTGltaXQKLSAqIEBwYXJhbSB7RnVuY3Rpb249fSB0b3BNb3N0RnVuY3Rp
b25Ub0lnbm9yZQotICogQHNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3Avdjgvd2lraS9KYXZh
U2NyaXB0U3RhY2tUcmFjZUFwaQotICovCi1mdW5jdGlvbiBTdGFja1RyYWNlVjgoc3RhY2tUcmFj
ZUxpbWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9yZSkKLXsKLSAgICBTdGFja1RyYWNlLmNhbGwo
dGhpcyk7Ci0gICAgdmFyIG9sZFN0YWNrVHJhY2VMaW1pdCA9IEVycm9yLnN0YWNrVHJhY2VMaW1p
dDsKLSAgICBpZiAodHlwZW9mIHN0YWNrVHJhY2VMaW1pdCA9PT0gIm51bWJlciIpCi0gICAgICAg
IEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IHN0YWNrVHJhY2VMaW1pdDsKLQotICAgIHRoaXMuX2Vy
cm9yID0gLyoqIEB0eXBlIHt7c3RhY2s6IEFycmF5fX0gKi8ge307Ci0gICAgRXJyb3IuY2FwdHVy
ZVN0YWNrVHJhY2UodGhpcy5fZXJyb3IsIHRvcE1vc3RGdW5jdGlvblRvSWdub3JlIHx8IGFyZ3Vt
ZW50cy5jYWxsZWUpOwotCi0gICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gb2xkU3RhY2tUcmFj
ZUxpbWl0OwotfQotCi1TdGFja1RyYWNlVjgucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAq
IEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAotICAgICAqIEByZXR1cm4g
e3tzb3VyY2VVUkw6IHN0cmluZywgbGluZU51bWJlcjogbnVtYmVyLCBjb2x1bW5OdW1iZXI6IG51
bWJlcn19Ci0gICAgICovCi0gICAgY2FsbEZyYW1lOiBmdW5jdGlvbihpbmRleCkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5fc3RhY2tUcmFjZSkKLSAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVT
dGFja1RyYWNlKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGFja1RyYWNlW2luZGV4XTsKLSAg
ICB9LAotCi0gICAgX3ByZXBhcmVTdGFja1RyYWNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgb2xkUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsKLSAg
ICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlcnJvcgotICAgICAgICAgKiBA
cGFyYW0ge0FycmF5LjxDYWxsU2l0ZT59IHN0cnVjdHVyZWRTdGFja1RyYWNlCi0gICAgICAgICAq
IEByZXR1cm4ge0FycmF5Ljx7c291cmNlVVJMOiBzdHJpbmcsIGxpbmVOdW1iZXI6IG51bWJlciwg
Y29sdW1uTnVtYmVyOiBudW1iZXJ9Pn0KLSAgICAgICAgICovCi0gICAgICAgIEVycm9yLnByZXBh
cmVTdGFja1RyYWNlID0gZnVuY3Rpb24oZXJyb3IsIHN0cnVjdHVyZWRTdGFja1RyYWNlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlZFN0YWNrVHJhY2UubWFwKGZ1bmN0
aW9uKGNhbGxTaXRlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAg
ICAgICAgc291cmNlVVJMOiBjYWxsU2l0ZS5nZXRGaWxlTmFtZSgpLAotICAgICAgICAgICAgICAg
ICAgICBsaW5lTnVtYmVyOiBjYWxsU2l0ZS5nZXRMaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAg
ICAgICAgIGNvbHVtbk51bWJlcjogY2FsbFNpdGUuZ2V0Q29sdW1uTnVtYmVyKCkKLSAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fc3Rh
Y2tUcmFjZSA9IHRoaXMuX2Vycm9yLnN0YWNrOwotICAgICAgICBFcnJvci5wcmVwYXJlU3RhY2tU
cmFjZSA9IG9sZFByZXBhcmVTdGFja1RyYWNlOwotICAgICAgICBkZWxldGUgdGhpcy5fZXJyb3I7
IC8vIE5vIGxvbmdlciBuZWVkZWQsIGZyZWUgbWVtb3J5LgotICAgIH0KLX0KLQotU3RhY2tUcmFj
ZVY4LnByb3RvdHlwZS5fX3Byb3RvX18gPSBTdGFja1RyYWNlLnByb3RvdHlwZTsKLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gQ2FjaGUoKQotewotICAgIHRoaXMucmVzZXQo
KTsKLX0KLQotQ2FjaGUucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251
bWJlcn0KLSAgICAgKi8KLSAgICBzaXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fc2l6ZTsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2l0ZW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLSAgICAgICAgdGhpcy5f
c2l6ZSA9IDA7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkK
LSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGhhczogZnVuY3Rpb24oa2V5
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGtleSBpbiB0aGlzLl9pdGVtczsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGtleQotICAgICAqIEByZXR1cm4ge09iamVj
dH0KLSAgICAgKi8KLSAgICBnZXQ6IGZ1bmN0aW9uKGtleSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9pdGVtc1trZXldOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0ga2V5Ci0gICAgICogQHBhcmFtIHtPYmplY3R9IGl0ZW0KLSAgICAgKi8KLSAgICBwdXQ6
IGZ1bmN0aW9uKGtleSwgaXRlbSkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5oYXMoa2V5KSkK
LSAgICAgICAgICAgICsrdGhpcy5fc2l6ZTsKLSAgICAgICAgdGhpcy5faXRlbXNba2V5XSA9IGl0
ZW07Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtSZXNvdXJj
ZXxPYmplY3R9IHRoaXNPYmplY3QKLSAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKLSAq
IEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBhcmdzCi0gKiBAcGFyYW0ge1Jlc291cmNlfCo9fSBy
ZXN1bHQKLSAqIEBwYXJhbSB7U3RhY2tUcmFjZT19IHN0YWNrVHJhY2UKLSAqLwotZnVuY3Rpb24g
Q2FsbCh0aGlzT2JqZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3MsIHJlc3VsdCwgc3RhY2tUcmFjZSkK
LXsKLSAgICB0aGlzLl90aGlzT2JqZWN0ID0gdGhpc09iamVjdDsKLSAgICB0aGlzLl9mdW5jdGlv
bk5hbWUgPSBmdW5jdGlvbk5hbWU7Ci0gICAgdGhpcy5fYXJncyA9IEFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKGFyZ3MsIDApOwotICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICB0aGlz
Ll9zdGFja1RyYWNlID0gc3RhY2tUcmFjZSB8fCBudWxsOwotfQotCi1DYWxsLnByb3RvdHlwZSA9
IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KLSAgICAgKi8KLSAgICByZXNv
dXJjZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJlc291cmNlLmZvck9iamVj
dCh0aGlzLl90aGlzT2JqZWN0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
c3RyaW5nfQotICAgICAqLwotICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uTmFtZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7QXJyYXl9Ci0gICAgICovCi0gICAgYXJnczogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2FyZ3M7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4geyp9Ci0gICAgICovCi0gICAgcmVzdWx0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtTdGFja1RyYWNlfQotICAgICAqLwotICAgIHN0YWNrVHJhY2U6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGFja1RyYWNlOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge1N0YWNrVHJhY2V9IHN0YWNrVHJhY2UKLSAgICAgKi8KLSAgICBzZXRTdGFj
a1RyYWNlOiBmdW5jdGlvbihzdGFja1RyYWNlKQotICAgIHsKLSAgICAgICAgdGhpcy5fc3RhY2tU
cmFjZSA9IHN0YWNrVHJhY2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Kn0g
cmVzdWx0Ci0gICAgICovCi0gICAgc2V0UmVzdWx0OiBmdW5jdGlvbihyZXN1bHQpCi0gICAgewot
ICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7Ci0gICAgfSwKLQotICAgIGZyZWV6ZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2ZyZWV6ZWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHRoaXMuX2ZyZWV6ZWQgPSB0cnVlOwotICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbiA9IHRoaXMuX2FyZ3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogZnJlZXplIHRoZSBSZXNvdXJjZXMgYWxzbyEKLSAgICAgICAgICAgIGlmICghUmVz
b3VyY2UuZm9yT2JqZWN0KHRoaXMuX2FyZ3NbaV0pKQotICAgICAgICAgICAgICAgIHRoaXMuX2Fy
Z3NbaV0gPSBUeXBlVXRpbHMuY2xvbmUodGhpcy5fYXJnc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKiBAcmV0dXJu
IHtSZXBsYXlhYmxlQ2FsbH0KLSAgICAgKi8KLSAgICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNh
Y2hlKQotICAgIHsKLSAgICAgICAgdGhpcy5mcmVlemUoKTsKLSAgICAgICAgdmFyIHRoaXNPYmpl
Y3QgPSAvKiogQHR5cGUge1JlcGxheWFibGVSZXNvdXJjZX0gKi8gUmVzb3VyY2UudG9SZXBsYXlh
YmxlKHRoaXMuX3RoaXNPYmplY3QsIGNhY2hlKTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFJlc291
cmNlLnRvUmVwbGF5YWJsZSh0aGlzLl9yZXN1bHQsIGNhY2hlKTsKLSAgICAgICAgdmFyIGFyZ3Mg
PSB0aGlzLl9hcmdzLm1hcChmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNv
dXJjZS50b1JlcGxheWFibGUob2JqLCBjYWNoZSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1
cm4gbmV3IFJlcGxheWFibGVDYWxsKHRoaXNPYmplY3QsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgYXJn
cywgcmVzdWx0LCB0aGlzLl9zdGFja1RyYWNlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtSZXBsYXlhYmxlQ2FsbH0gcmVwbGF5YWJsZUNhbGwKLSAgICAgKiBAcGFyYW0ge0Nh
Y2hlfSBjYWNoZQotICAgICAqIEByZXR1cm4ge0NhbGx9Ci0gICAgICovCi0gICAgcmVwbGF5OiBm
dW5jdGlvbihyZXBsYXlhYmxlQ2FsbCwgY2FjaGUpCi0gICAgewotICAgICAgICB2YXIgcmVwbGF5
T2JqZWN0ID0gUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShyZXBsYXlhYmxlQ2FsbC5yZXNvdXJj
ZSgpLCBjYWNoZSk7Ci0gICAgICAgIHZhciByZXBsYXlGdW5jdGlvbiA9IHJlcGxheU9iamVjdFty
ZXBsYXlhYmxlQ2FsbC5mdW5jdGlvbk5hbWUoKV07Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5
cGVvZiByZXBsYXlGdW5jdGlvbiA9PT0gImZ1bmN0aW9uIiwgIkV4cGVjdGVkIGEgZnVuY3Rpb24g
dG8gcmVwbGF5Iik7Ci0gICAgICAgIHZhciByZXBsYXlBcmdzID0gcmVwbGF5YWJsZUNhbGwuYXJn
cygpLm1hcChmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgIHJldHVybiBSZXBsYXlhYmxlUmVz
b3VyY2UucmVwbGF5KG9iaiwgY2FjaGUpOwotICAgICAgICB9KTsKLSAgICAgICAgdmFyIHJlcGxh
eVJlc3VsdCA9IHJlcGxheUZ1bmN0aW9uLmFwcGx5KHJlcGxheU9iamVjdCwgcmVwbGF5QXJncyk7
Ci0gICAgICAgIGlmIChyZXBsYXlhYmxlQ2FsbC5yZXN1bHQoKSBpbnN0YW5jZW9mIFJlcGxheWFi
bGVSZXNvdXJjZSkgewotICAgICAgICAgICAgdmFyIHJlc291cmNlID0gcmVwbGF5YWJsZUNhbGwu
cmVzdWx0KCkucmVwbGF5KGNhY2hlKTsKLSAgICAgICAgICAgIGlmICghcmVzb3VyY2Uud3JhcHBl
ZE9iamVjdCgpKQotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldFdyYXBwZWRPYmplY3QocmVw
bGF5UmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3RoaXNPYmplY3QgPSByZXBs
YXlPYmplY3Q7Ci0gICAgICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IHJlcGxheWFibGVDYWxsLmZ1
bmN0aW9uTmFtZSgpOwotICAgICAgICB0aGlzLl9hcmdzID0gcmVwbGF5QXJnczsKLSAgICAgICAg
dGhpcy5fcmVzdWx0ID0gcmVwbGF5UmVzdWx0OwotICAgICAgICB0aGlzLl9zdGFja1RyYWNlID0g
cmVwbGF5YWJsZUNhbGwuc3RhY2tUcmFjZSgpOwotICAgICAgICB0aGlzLl9mcmVlemVkID0gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQHBhcmFtIHtSZXBsYXlhYmxlUmVzb3VyY2V9IHRoaXNPYmplY3QKLSAqIEBwYXJhbSB7
c3RyaW5nfSBmdW5jdGlvbk5hbWUKLSAqIEBwYXJhbSB7QXJyYXkuPFJlcGxheWFibGVSZXNvdXJj
ZXwqPn0gYXJncwotICogQHBhcmFtIHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0gcmVzdWx0Ci0gKiBA
cGFyYW0ge1N0YWNrVHJhY2V9IHN0YWNrVHJhY2UKLSAqLwotZnVuY3Rpb24gUmVwbGF5YWJsZUNh
bGwodGhpc09iamVjdCwgZnVuY3Rpb25OYW1lLCBhcmdzLCByZXN1bHQsIHN0YWNrVHJhY2UpCi17
Ci0gICAgdGhpcy5fdGhpc09iamVjdCA9IHRoaXNPYmplY3Q7Ci0gICAgdGhpcy5fZnVuY3Rpb25O
YW1lID0gZnVuY3Rpb25OYW1lOwotICAgIHRoaXMuX2FyZ3MgPSBhcmdzOwotICAgIHRoaXMuX3Jl
c3VsdCA9IHJlc3VsdDsKLSAgICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKLX0KLQot
UmVwbGF5YWJsZUNhbGwucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1Jl
cGxheWFibGVSZXNvdXJjZX0KLSAgICAgKi8KLSAgICByZXNvdXJjZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RoaXNPYmplY3Q7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbk5hbWU7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0FycmF5LjxSZXBsYXlhYmxlUmVzb3VyY2V8Kj59
Ci0gICAgICovCi0gICAgYXJnczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX2FyZ3M7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVS
ZXNvdXJjZXwqfQotICAgICAqLwotICAgIHJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7U3RhY2tUcmFjZX0KLSAgICAgKi8KLSAgICBzdGFja1RyYWNlOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2tUcmFjZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKiBAcmV0dXJuIHtDYWxsfQotICAgICAq
LwotICAgIHJlcGxheTogZnVuY3Rpb24oY2FjaGUpCi0gICAgewotICAgICAgICB2YXIgY2FsbCA9
IE9iamVjdC5jcmVhdGUoQ2FsbC5wcm90b3R5cGUpOwotICAgICAgICByZXR1cm4gY2FsbC5yZXBs
YXkodGhpcywgY2FjaGUpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBw
YXJhbSB7T2JqZWN0fSB3cmFwcGVkT2JqZWN0Ci0gKi8KLWZ1bmN0aW9uIFJlc291cmNlKHdyYXBw
ZWRPYmplY3QpCi17Ci0gICAgdGhpcy5faWQgPSArK1Jlc291cmNlLl91bmlxdWVJZDsKLSAgICB0
aGlzLl9yZXNvdXJjZU1hbmFnZXIgPSBudWxsOwotICAgIHRoaXMuX2NhbGxzID0gW107Ci0gICAg
dGhpcy5zZXRXcmFwcGVkT2JqZWN0KHdyYXBwZWRPYmplY3QpOwotfQotCi0vKioKLSAqIEB0eXBl
IHtudW1iZXJ9Ci0gKi8KLVJlc291cmNlLl91bmlxdWVJZCA9IDA7Ci0KLS8qKgotICogQHBhcmFt
IHsqfSBvYmoKLSAqIEByZXR1cm4ge1Jlc291cmNlfQotICovCi1SZXNvdXJjZS5mb3JPYmplY3Qg
PSBmdW5jdGlvbihvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiBudWxsOwot
ICAgIGlmIChvYmogaW5zdGFuY2VvZiBSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG9iajsKLSAg
ICBpZiAodHlwZW9mIG9iaiA9PT0gIm9iamVjdCIpCi0gICAgICAgIHJldHVybiBvYmpbIl9fcmVz
b3VyY2VPYmplY3QiXTsKLSAgICByZXR1cm4gbnVsbDsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge1Jl
c291cmNlfCp9IG9iagotICogQHJldHVybiB7Kn0KLSAqLwotUmVzb3VyY2Uud3JhcHBlZE9iamVj
dCA9IGZ1bmN0aW9uKG9iaikKLXsKLSAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmpl
Y3Qob2JqKTsKLSAgICByZXR1cm4gcmVzb3VyY2UgPyByZXNvdXJjZS53cmFwcGVkT2JqZWN0KCkg
OiBvYmo7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtSZXNvdXJjZXwqfSBvYmoKLSAqIEBwYXJhbSB7
Q2FjaGV9IGNhY2hlCi0gKiBAcmV0dXJuIHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0KLSAqLwotUmVz
b3VyY2UudG9SZXBsYXlhYmxlID0gZnVuY3Rpb24ob2JqLCBjYWNoZSkKLXsKLSAgICB2YXIgcmVz
b3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob2JqKTsKLSAgICByZXR1cm4gcmVzb3VyY2UgPyBy
ZXNvdXJjZS50b1JlcGxheWFibGUoY2FjaGUpIDogb2JqOwotfQotCi1SZXNvdXJjZS5wcm90b3R5
cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGlk
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faWQ7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICB3cmFwcGVkT2Jq
ZWN0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fd3JhcHBlZE9iamVj
dDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlCi0gICAg
ICovCi0gICAgc2V0V3JhcHBlZE9iamVjdDogZnVuY3Rpb24odmFsdWUpCi0gICAgewotICAgICAg
ICBjb25zb2xlLmFzc2VydCh2YWx1ZSwgIndyYXBwZWRPYmplY3Qgc2hvdWxkIG5vdCBiZSBOVUxM
Iik7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KCEodmFsdWUgaW5zdGFuY2VvZiBSZXNvdXJjZSks
ICJCaW5kaW5nIGEgUmVzb3VyY2Ugb2JqZWN0IHRvIGFub3RoZXIgUmVzb3VyY2Ugb2JqZWN0PyIp
OwotICAgICAgICB0aGlzLl93cmFwcGVkT2JqZWN0ID0gdmFsdWU7Ci0gICAgICAgIHRoaXMuX2Jp
bmRPYmplY3RUb1Jlc291cmNlKHZhbHVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJl
dHVybiB7T2JqZWN0fQotICAgICAqLwotICAgIHByb3h5T2JqZWN0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuX3Byb3h5T2JqZWN0KQotICAgICAgICAgICAgdGhpcy5fcHJv
eHlPYmplY3QgPSB0aGlzLl93cmFwT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm94
eU9iamVjdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7UmVzb3VyY2VUcmFj
a2luZ01hbmFnZXJ9Ci0gICAgICovCi0gICAgbWFuYWdlcjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlTWFuYWdlcjsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtSZXNvdXJjZVRyYWNraW5nTWFuYWdlcn0gdmFsdWUKLSAgICAgKi8KLSAg
ICBzZXRNYW5hZ2VyOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc291
cmNlTWFuYWdlciA9IHZhbHVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtB
cnJheS48Q2FsbD59Ci0gICAgICovCi0gICAgY2FsbHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9jYWxsczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtDYWNoZX0gY2FjaGUKLSAgICAgKiBAcmV0dXJuIHtSZXBsYXlhYmxlUmVzb3VyY2V9Ci0gICAg
ICovCi0gICAgdG9SZXBsYXlhYmxlOiBmdW5jdGlvbihjYWNoZSkKLSAgICB7Ci0gICAgICAgIHZh
ciByZXN1bHQgPSBjYWNoZS5nZXQodGhpcy5faWQpOwotICAgICAgICBpZiAocmVzdWx0KQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgdmFyIGRhdGEgPSB7Ci0gICAgICAgICAg
ICBpZDogdGhpcy5faWQKLSAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gbmV3IFJlcGxheWFi
bGVSZXNvdXJjZSh0aGlzLCBkYXRhKTsKLSAgICAgICAgY2FjaGUucHV0KHRoaXMuX2lkLCByZXN1
bHQpOyAvLyBQdXQgaW50byB0aGUgY2FjaGUgZWFybHkgdG8gYXZvaWQgbG9vcHMuCi0gICAgICAg
IGRhdGEuY2FsbHMgPSB0aGlzLl9jYWxscy5tYXAoZnVuY3Rpb24oY2FsbCkgewotICAgICAgICAg
ICAgcmV0dXJuIGNhbGwudG9SZXBsYXlhYmxlKGNhY2hlKTsKLSAgICAgICAgfSk7Ci0gICAgICAg
IHRoaXMuX3BvcHVsYXRlUmVwbGF5YWJsZURhdGEoZGF0YSwgY2FjaGUpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0
YQotICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCi0gICAgICovCi0gICAgX3BvcHVsYXRlUmVw
bGF5YWJsZURhdGE6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgLy8gRG8g
bm90aGluZy4gU2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFyYW0ge0NhY2hl
fSBjYWNoZQotICAgICAqIEByZXR1cm4ge1Jlc291cmNlfQotICAgICAqLwotICAgIHJlcGxheTog
ZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewotICAgICAgICB2YXIgcmVzb3VyY2UgPSBjYWNo
ZS5nZXQoZGF0YS5pZCk7Ci0gICAgICAgIGlmIChyZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVy
biByZXNvdXJjZTsKLSAgICAgICAgdGhpcy5faWQgPSBkYXRhLmlkOwotICAgICAgICB0aGlzLl9y
ZXNvdXJjZU1hbmFnZXIgPSBudWxsOwotICAgICAgICB0aGlzLl9jYWxscyA9IFtdOwotICAgICAg
ICB0aGlzLl93cmFwcGVkT2JqZWN0ID0gbnVsbDsKLSAgICAgICAgY2FjaGUucHV0KGRhdGEuaWQs
IHRoaXMpOyAvLyBQdXQgaW50byB0aGUgY2FjaGUgZWFybHkgdG8gYXZvaWQgbG9vcHMuCi0gICAg
ICAgIHRoaXMuX2RvUmVwbGF5Q2FsbHMoZGF0YSwgY2FjaGUpOwotICAgICAgICBjb25zb2xlLmFz
c2VydCh0aGlzLl93cmFwcGVkT2JqZWN0LCAiUmVzb3VyY2Ugc2hvdWxkIGJlIHJlY29uc3RydWN0
ZWQhIik7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge09iamVjdH0gZGF0YQotICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCi0gICAgICov
Ci0gICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDAsIG4gPSBkYXRhLmNhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkKLSAg
ICAgICAgICAgIHRoaXMuX2NhbGxzLnB1c2goZGF0YS5jYWxsc1tpXS5yZXBsYXkoY2FjaGUpKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCi0gICAgICovCi0g
ICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAgICBjYWxsLmZyZWV6ZSgp
OwotICAgICAgICB0aGlzLl9jYWxscy5wdXNoKGNhbGwpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0geyFPYmplY3R9IG9iamVjdAotICAgICAqLwotICAgIF9iaW5kT2JqZWN0VG9S
ZXNvdXJjZTogZnVuY3Rpb24ob2JqZWN0KQotICAgIHsKLSAgICAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KG9iamVjdCwgIl9fcmVzb3VyY2VPYmplY3QiLCB7Ci0gICAgICAgICAgICB2YWx1ZTog
dGhpcywKLSAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSwKLSAgICAgICAgICAgIGVudW1lcmFi
bGU6IGZhbHNlLAotICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCi0gICAgICAgIH0pOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAg
X3dyYXBPYmplY3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB3cmFwcGVkT2JqZWN0
ID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7Ci0gICAgICAgIGlmICghd3JhcHBlZE9iamVjdCkKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgcHJveHkgPSBPYmplY3QuY3JlYXRl
KHdyYXBwZWRPYmplY3QuX19wcm90b19fKTsgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSAiaW5zdGFu
Y2VvZiIuCi0KLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICB2YXIgY3VzdG9tV3Jh
cEZ1bmN0aW9ucyA9IHRoaXMuX2N1c3RvbVdyYXBGdW5jdGlvbnMoKTsKLSAgICAgICAgZnVuY3Rp
b24gcHJvY2Vzc1Byb3BlcnR5KHByb3BlcnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
dHlwZW9mIHdyYXBwZWRPYmplY3RbcHJvcGVydHldID09PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGN1c3RvbVdyYXBGdW5jdGlvbiA9IGN1c3RvbVdyYXBGdW5jdGlvbnNbcHJv
cGVydHldOwotICAgICAgICAgICAgICAgIGlmIChjdXN0b21XcmFwRnVuY3Rpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IHNlbGYuX3dyYXBDdXN0b21GdW5jdGlvbihz
ZWxmLCB3cmFwcGVkT2JqZWN0LCB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XSwgcHJvcGVydHksIGN1
c3RvbVdyYXBGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBwcm94eVtwcm9wZXJ0eV0gPSBzZWxmLl93cmFwRnVuY3Rpb24oc2VsZiwgd3JhcHBlZE9i
amVjdCwgd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV0sIHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoL15bQS1aMC05X10rJC8udGVzdChwcm9wZXJ0eSkgJiYgdHlwZW9mIHdyYXBwZWRP
YmplY3RbcHJvcGVydHldID09PSAibnVtYmVyIikgewotICAgICAgICAgICAgICAgIC8vIEZhc3Qg
YWNjZXNzIHRvIGVudW1zIGFuZCBjb25zdGFudHMuCi0gICAgICAgICAgICAgICAgcHJveHlbcHJv
cGVydHldID0gd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV07Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgcHJvcGVydHksIHsK
LSAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5
XTsKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5j
dGlvbih2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IExvZyB0aGUgc2V0dGVyIGNhbGxzLgotICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc29sZS5lcnJvcigiRklYTUU6IFNldHRpbmcgYW4gYXR0cmlidXRlICVzIHdhcyBub3Qg
bG9nZ2VkLiIsIHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZWRPYmpl
Y3RbcHJvcGVydHldID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICAgICAgICAgIGVudW1lcmFibGU6IHRydWUKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhciBpc0VtcHR5ID0gdHJ1ZTsKLSAgICAgICAg
Zm9yICh2YXIgcHJvcGVydHkgaW4gd3JhcHBlZE9iamVjdCkgewotICAgICAgICAgICAgaXNFbXB0
eSA9IGZhbHNlOwotICAgICAgICAgICAgcHJvY2Vzc1Byb3BlcnR5KHByb3BlcnR5KTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoaXNFbXB0eSkKLSAgICAgICAgICAgIHJldHVybiB3cmFwcGVkT2Jq
ZWN0OyAvLyBOb3RoaW5nIHRvIHByb3h5LgotCi0gICAgICAgIHRoaXMuX2JpbmRPYmplY3RUb1Jl
c291cmNlKHByb3h5KTsKLSAgICAgICAgcmV0dXJuIHByb3h5OwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1Jlc291cmNlfSByZXNvdXJjZQotICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBvcmlnaW5hbE9iamVjdAotICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdpbmFsRnVuY3Rp
b24KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lCi0gICAgICogQHBhcmFtIHtG
dW5jdGlvbn0gY3VzdG9tV3JhcEZ1bmN0aW9uCi0gICAgICogQHJldHVybiB7RnVuY3Rpb259Ci0g
ICAgICovCi0gICAgX3dyYXBDdXN0b21GdW5jdGlvbjogZnVuY3Rpb24ocmVzb3VyY2UsIG9yaWdp
bmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGN1c3RvbVdyYXBGdW5j
dGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbigpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZhciBtYW5hZ2VyID0gcmVzb3VyY2UubWFuYWdlcigpOwotICAgICAgICAgICAgdmFy
IGlzQ2FwdHVyaW5nID0gbWFuYWdlciAmJiBtYW5hZ2VyLmNhcHR1cmluZygpOwotICAgICAgICAg
ICAgaWYgKGlzQ2FwdHVyaW5nKQotICAgICAgICAgICAgICAgIG1hbmFnZXIuY2FwdHVyZUFyZ3Vt
ZW50cyhyZXNvdXJjZSwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIHZhciB3cmFwRnVuY3Rpb24g
PSBuZXcgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uKG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0
aW9uLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVu
Y3Rpb24uYXBwbHkod3JhcEZ1bmN0aW9uLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgaWYgKGlz
Q2FwdHVyaW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNhbGwgPSB3cmFwRnVuY3Rpb24uY2Fs
bCgpOwotICAgICAgICAgICAgICAgIGNhbGwuc2V0U3RhY2tUcmFjZShTdGFja1RyYWNlLmNyZWF0
ZSgxLCBhcmd1bWVudHMuY2FsbGVlKSk7Ci0gICAgICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRD
YWxsKGNhbGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHdyYXBGdW5jdGlv
bi5yZXN1bHQoKTsKLSAgICAgICAgfTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtSZXNvdXJjZX0gcmVzb3VyY2UKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gb3JpZ2luYWxPYmpl
Y3QKLSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcmlnaW5hbEZ1bmN0aW9uCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQotICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufQotICAg
ICAqLwotICAgIF93cmFwRnVuY3Rpb246IGZ1bmN0aW9uKHJlc291cmNlLCBvcmlnaW5hbE9iamVj
dCwgb3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rpb25OYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJj
ZS5tYW5hZ2VyKCk7Ci0gICAgICAgICAgICBpZiAoIW1hbmFnZXIgfHwgIW1hbmFnZXIuY2FwdHVy
aW5nKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob3Jp
Z2luYWxPYmplY3QsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBtYW5hZ2VyLmNhcHR1cmVBcmd1
bWVudHMocmVzb3VyY2UsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3Jp
Z2luYWxGdW5jdGlvbi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgIHZhciBzdGFja1RyYWNlID0gU3RhY2tUcmFjZS5jcmVhdGUoMSwgYXJndW1lbnRzLmNhbGxl
ZSk7Ci0gICAgICAgICAgICB2YXIgY2FsbCA9IG5ldyBDYWxsKHJlc291cmNlLCBmdW5jdGlvbk5h
bWUsIGFyZ3VtZW50cywgcmVzdWx0LCBzdGFja1RyYWNlKTsKLSAgICAgICAgICAgIG1hbmFnZXIu
cmVwb3J0Q2FsbChjYWxsKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH07
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge09iamVjdC48c3RyaW5nLCBGdW5j
dGlvbj59Ci0gICAgICovCi0gICAgX2N1c3RvbVdyYXBGdW5jdGlvbnM6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB7fTsgLy8gTWF5IGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nl
cy4KLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge09iamVjdH0g
b3JpZ2luYWxPYmplY3QKLSAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdpbmFsRnVuY3Rpb24KLSAq
IEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKLSAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRz
fSBhcmdzCi0gKi8KLVJlc291cmNlLldyYXBGdW5jdGlvbiA9IGZ1bmN0aW9uKG9yaWdpbmFsT2Jq
ZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGFyZ3MpCi17Ci0gICAgdGhpcy5f
b3JpZ2luYWxPYmplY3QgPSBvcmlnaW5hbE9iamVjdDsKLSAgICB0aGlzLl9vcmlnaW5hbEZ1bmN0
aW9uID0gb3JpZ2luYWxGdW5jdGlvbjsKLSAgICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlv
bk5hbWU7Ci0gICAgdGhpcy5fYXJncyA9IGFyZ3M7Ci0gICAgdGhpcy5fcmVzb3VyY2UgPSBSZXNv
dXJjZS5mb3JPYmplY3Qob3JpZ2luYWxPYmplY3QpOwotICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
X3Jlc291cmNlLCAiRXhwZWN0ZWQgYSB3cmFwcGVkIGNhbGwgb24gYSBSZXNvdXJjZSBvYmplY3Qu
Iik7Ci19Ci0KLVJlc291cmNlLldyYXBGdW5jdGlvbi5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7Kn0KLSAgICAgKi8KLSAgICByZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5fZXhlY3V0ZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX2V4ZWN1
dGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX29yaWdpbmFsRnVu
Y3Rpb24uYXBwbHkodGhpcy5fb3JpZ2luYWxPYmplY3QsIHRoaXMuX2FyZ3MpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge0NhbGx9Ci0gICAgICovCi0gICAgY2FsbDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl9jYWxsKQotICAgICAgICAgICAgdGhpcy5fY2FsbCA9IG5ldyBDYWxs
KHRoaXMuX3Jlc291cmNlLCB0aGlzLl9mdW5jdGlvbk5hbWUsIHRoaXMuX2FyZ3MsIHRoaXMucmVz
dWx0KCkpOwotICAgICAgICByZXR1cm4gdGhpcy5fY2FsbDsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHsqfSByZXN1bHQKLSAgICAgKi8KLSAgICBvdmVycmlkZVJlc3VsdDogZnVu
Y3Rpb24ocmVzdWx0KQotICAgIHsKLSAgICAgICAgdmFyIGNhbGwgPSB0aGlzLmNhbGwoKTsKLSAg
ICAgICAgY2FsbC5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVz
dWx0OwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7UmVzb3Vy
Y2V9IG9yaWdpbmFsUmVzb3VyY2UKLSAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCi0gKi8KLWZ1bmN0
aW9uIFJlcGxheWFibGVSZXNvdXJjZShvcmlnaW5hbFJlc291cmNlLCBkYXRhKQotewotICAgIHRo
aXMuX3Byb3RvID0gb3JpZ2luYWxSZXNvdXJjZS5fX3Byb3RvX187Ci0gICAgdGhpcy5fZGF0YSA9
IGRhdGE7Ci19Ci0KLVJlcGxheWFibGVSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KLSAg
ICAgKi8KLSAgICByZXBsYXk6IGZ1bmN0aW9uKGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IE9iamVjdC5jcmVhdGUodGhpcy5fcHJvdG8pOwotICAgICAgICByZXN1bHQgPSByZXN1
bHQucmVwbGF5KHRoaXMuX2RhdGEsIGNhY2hlKQotICAgICAgICBjb25zb2xlLmFzc2VydChyZXN1
bHQuX19wcm90b19fID09PSB0aGlzLl9wcm90bywgIldyb25nIHR5cGUgb2YgYSByZXBsYXkgcmVz
dWx0Iik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfQotCi0vKioKLSAqIEBwYXJh
bSB7UmVwbGF5YWJsZVJlc291cmNlfCp9IG9iagotICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAq
IEByZXR1cm4geyp9Ci0gKi8KLVJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkgPSBmdW5jdGlvbihv
YmosIGNhY2hlKQotewotICAgIHJldHVybiAob2JqIGluc3RhbmNlb2YgUmVwbGF5YWJsZVJlc291
cmNlKSA/IG9iai5yZXBsYXkoY2FjaGUpLndyYXBwZWRPYmplY3QoKSA6IG9iajsKLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtSZXNvdXJjZX0KLSAqLwotZnVuY3Rpb24g
V2ViR0xCb3VuZFJlc291cmNlKHdyYXBwZWRPYmplY3QpCi17Ci0gICAgUmVzb3VyY2UuY2FsbCh0
aGlzLCB3cmFwcGVkT2JqZWN0KTsKLSAgICB0aGlzLl9zdGF0ZSA9IHt9OwotfQotCi1XZWJHTEJv
dW5kUmVzb3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAg
ICAgKi8KLSAgICBfcG9wdWxhdGVSZXBsYXlhYmxlRGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUp
Ci0gICAgewotICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTsKLSAgICAgICAgZGF0YS5z
dGF0ZSA9IHt9OwotICAgICAgICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbihw
YXJhbWV0ZXIpIHsKLSAgICAgICAgICAgIGRhdGEuc3RhdGVbcGFyYW1ldGVyXSA9IFJlc291cmNl
LnRvUmVwbGF5YWJsZShzdGF0ZVtwYXJhbWV0ZXJdLCBjYWNoZSk7Ci0gICAgICAgIH0pOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0g
ZGF0YQotICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCi0gICAgICovCi0gICAgX2RvUmVwbGF5
Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIHN0YXRlID0g
e307Ci0gICAgICAgIE9iamVjdC5rZXlzKGRhdGEuc3RhdGUpLmZvckVhY2goZnVuY3Rpb24ocGFy
YW1ldGVyKSB7Ci0gICAgICAgICAgICBzdGF0ZVtwYXJhbWV0ZXJdID0gUmVwbGF5YWJsZVJlc291
cmNlLnJlcGxheShkYXRhLnN0YXRlW3BhcmFtZXRlcl0sIGNhY2hlKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7Ci0KLSAgICAgICAgdmFyIGdsID0gdGhpcy5fcmVw
bGF5Q29udGV4dFJlc291cmNlKGRhdGEsIGNhY2hlKS53cmFwcGVkT2JqZWN0KCk7Ci0KLSAgICAg
ICAgdmFyIGJpbmRpbmdzRGF0YSA9IHsKLSAgICAgICAgICAgIFRFWFRVUkVfMkQ6IFsiYmluZFRl
eHR1cmUiLCAiVEVYVFVSRV9CSU5ESU5HXzJEIl0sCi0gICAgICAgICAgICBURVhUVVJFX0NVQkVf
TUFQOiBbImJpbmRUZXh0dXJlIiwgIlRFWFRVUkVfQklORElOR19DVUJFX01BUCJdLAotICAgICAg
ICAgICAgQVJSQVlfQlVGRkVSOiBbImJpbmRCdWZmZXIiLCAiQVJSQVlfQlVGRkVSX0JJTkRJTkci
XSwKLSAgICAgICAgICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSOiBbImJpbmRCdWZmZXIiLCAiRUxF
TUVOVF9BUlJBWV9CVUZGRVJfQklORElORyJdLAotICAgICAgICAgICAgRlJBTUVCVUZGRVI6IFsi
YmluZEZyYW1lYnVmZmVyIiwgIkZSQU1FQlVGRkVSX0JJTkRJTkciXSwKLSAgICAgICAgICAgIFJF
TkRFUkJVRkZFUjogWyJiaW5kUmVuZGVyYnVmZmVyIiwgIlJFTkRFUkJVRkZFUl9CSU5ESU5HIl0K
LSAgICAgICAgfTsKLSAgICAgICAgdmFyIG9yaWdpbmFsQmluZGluZ3MgPSB7fTsKLSAgICAgICAg
T2JqZWN0LmtleXMoYmluZGluZ3NEYXRhKS5mb3JFYWNoKGZ1bmN0aW9uKGJpbmRpbmdUYXJnZXQp
IHsKLSAgICAgICAgICAgIHZhciBiaW5kaW5nUGFyYW1ldGVyID0gYmluZGluZ3NEYXRhW2JpbmRp
bmdUYXJnZXRdWzFdOwotICAgICAgICAgICAgb3JpZ2luYWxCaW5kaW5nc1tiaW5kaW5nVGFyZ2V0
XSA9IGdsLmdldFBhcmFtZXRlcihnbFtiaW5kaW5nUGFyYW1ldGVyXSk7Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5fZG9SZXBsYXlDYWxscy5jYWxsKHRoaXMsIGRh
dGEsIGNhY2hlKTsKLQotICAgICAgICBPYmplY3Qua2V5cyhiaW5kaW5nc0RhdGEpLmZvckVhY2go
ZnVuY3Rpb24oYmluZGluZ1RhcmdldCkgewotICAgICAgICAgICAgdmFyIGJpbmRNZXRob2ROYW1l
ID0gYmluZGluZ3NEYXRhW2JpbmRpbmdUYXJnZXRdWzBdOwotICAgICAgICAgICAgZ2xbYmluZE1l
dGhvZE5hbWVdLmNhbGwoZ2wsIGdsW2JpbmRpbmdUYXJnZXRdLCBvcmlnaW5hbEJpbmRpbmdzW2Jp
bmRpbmdUYXJnZXRdKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIF9yZXBsYXlDb250ZXh0
UmVzb3VyY2U6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIGNhbGxz
ID0gZGF0YS5jYWxsczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBjYWxscy5sZW5ndGg7
IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IFJlcGxheWFibGVSZXNv
dXJjZS5yZXBsYXkoY2FsbHNbaV0ucmVzb3VyY2UoKSwgY2FjaGUpOwotICAgICAgICAgICAgdmFy
IGNvbnRleHRSZXNvdXJjZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9iamVj
dChyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dFJlc291cmNlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0UmVzb3VyY2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXQK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmluZE1ldGhvZE5hbWUKLSAgICAgKi8KLSAgICBwdXNo
QmluZGluZzogZnVuY3Rpb24odGFyZ2V0LCBiaW5kTWV0aG9kTmFtZSkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9zdGF0ZS5CSU5ESU5HICE9PSB0YXJnZXQpIHsKLSAgICAgICAgICAgIHRoaXMu
X3N0YXRlLkJJTkRJTkcgPSB0YXJnZXQ7Ci0gICAgICAgICAgICB0aGlzLnB1c2hDYWxsKG5ldyBD
YWxsKFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9iamVjdCh0aGlzKSwgYmluZE1l
dGhvZE5hbWUsIFt0YXJnZXQsIHRoaXNdKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkdM
Qm91bmRSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gUmVzb3VyY2UucHJvdG90eXBlOwot
Ci0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkdMQm91bmRSZXNvdXJjZX0K
LSAqLwotZnVuY3Rpb24gV2ViR0xUZXh0dXJlUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKLXsKLSAg
ICBXZWJHTEJvdW5kUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKLX0KLQotV2Vi
R0xUZXh0dXJlUmVzb3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlk
ZQotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2Fj
aGUKLSAgICAgKi8KLSAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0g
ICAgewotICAgICAgICB2YXIgZ2wgPSB0aGlzLl9yZXBsYXlDb250ZXh0UmVzb3VyY2UoZGF0YSwg
Y2FjaGUpLndyYXBwZWRPYmplY3QoKTsKLQotICAgICAgICB2YXIgc3RhdGUgPSB7fTsKLSAgICAg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMuZm9y
RWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgIHN0YXRlW3BhcmFtZXRlcl0g
PSBnbC5nZXRQYXJhbWV0ZXIoZ2xbcGFyYW1ldGVyXSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBk
YXRhLCBjYWNoZSk7Ci0KLSAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4
ZWxTdG9yZVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKLSAgICAgICAg
ICAgIGdsLnBpeGVsU3RvcmVpKGdsW3BhcmFtZXRlcl0sIHN0YXRlW3BhcmFtZXRlcl0pOwotICAg
ICAgICB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBh
cmFtIHtDYWxsfSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0g
ICAgewotICAgICAgICB2YXIgZ2wgPSBjYWxsLnJlc291cmNlKCkud3JhcHBlZE9iamVjdCgpOwot
ICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVy
cy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgewotICAgICAgICAgICAgdmFyIHZhbHVlID0g
Z2wuZ2V0UGFyYW1ldGVyKGdsW3BhcmFtZXRlcl0pOwotICAgICAgICAgICAgaWYgKHRoaXMuX3N0
YXRlW3BhcmFtZXRlcl0gIT09IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVb
cGFyYW1ldGVyXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIHZhciBwaXhlbFN0b3JlQ2FsbCA9
IG5ldyBDYWxsKGdsLCAicGl4ZWxTdG9yZWkiLCBbZ2xbcGFyYW1ldGVyXSwgdmFsdWVdKTsKLSAg
ICAgICAgICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwo
dGhpcywgcGl4ZWxTdG9yZUNhbGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9LCB0aGlzKTsK
LQotICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdl
ciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KLSAgICAgICAgLy8gRklYTUU6IG9w
dGltaXplIG1lbW9yeSB1c2FnZTogbWF5YmUgaXQncyBtb3JlIGVmZmljaWVudCB0byBzdG9yZSBv
bmUgdGV4SW1hZ2UyRCBjYWxsIGluc3RlYWQgb2YgbWFueSB0ZXhTdWJJbWFnZTJELgotICAgICAg
ICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAotICAgICAqLwot
ICAgIHB1c2hDYWxsX3RleFBhcmFtZXRlcmY6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAg
ICB2YXIgYXJncyA9IGNhbGwuYXJncygpOwotICAgICAgICB2YXIgcG5hbWUgPSBhcmdzWzFdOwot
ICAgICAgICB2YXIgcGFyYW0gPSBhcmdzWzJdOwotICAgICAgICBpZiAodGhpcy5fc3RhdGVbcG5h
bWVdICE9PSBwYXJhbSkgewotICAgICAgICAgICAgdGhpcy5fc3RhdGVbcG5hbWVdID0gcGFyYW07
Ci0gICAgICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwo
dGhpcywgY2FsbCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogY29weVRl
eEltYWdlMkQgYW5kIGNvcHlUZXhTdWJJbWFnZTJEIGRlZmluZSBhIHRleHR1cmUgaW1hZ2Ugd2l0
aCBwaXhlbHMgZnJvbSB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlci4KLSAgICAgKiBAcGFyYW0ge0Nh
bGx9IGNhbGwKLSAgICAgKi8KLSAgICBwdXNoQ2FsbF9jb3B5VGV4SW1hZ2UyRDogZnVuY3Rpb24o
Y2FsbCkKLSAgICB7Ci0gICAgICAgIHZhciBnbFJlc291cmNlID0gY2FsbC5yZXNvdXJjZSgpOwot
ICAgICAgICB2YXIgZ2wgPSBnbFJlc291cmNlLndyYXBwZWRPYmplY3QoKTsKLSAgICAgICAgdmFy
IGZyYW1lYnVmZmVyUmVzb3VyY2UgPSBnbFJlc291cmNlLmN1cnJlbnRCaW5kaW5nKGdsLkZSQU1F
QlVGRkVSKTsKLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyUmVzb3VyY2UpCi0gICAgICAgICAgICB0
aGlzLnB1c2hDYWxsKG5ldyBDYWxsKGdsUmVzb3VyY2UsICJiaW5kRnJhbWVidWZmZXIiLCBbZ2wu
RlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyUmVzb3VyY2VdKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogTm8gRlJBTUVCVUZGRVIg
Ym91bmQgd2hpbGUgY2FsbGluZyBnbC4iICsgY2FsbC5mdW5jdGlvbk5hbWUoKSk7Ci0gICAgICAg
IHRoaXMucHVzaENhbGwoY2FsbCk7Ci0gICAgfQotfQotCi1XZWJHTFRleHR1cmVSZXNvdXJjZS5w
cm90b3R5cGUucHVzaENhbGxfdGV4UGFyYW1ldGVyaSA9IFdlYkdMVGV4dHVyZVJlc291cmNlLnBy
b3RvdHlwZS5wdXNoQ2FsbF90ZXhQYXJhbWV0ZXJmOwotV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJv
dG90eXBlLnB1c2hDYWxsX2NvcHlUZXhTdWJJbWFnZTJEID0gV2ViR0xUZXh0dXJlUmVzb3VyY2Uu
cHJvdG90eXBlLnB1c2hDYWxsX2NvcHlUZXhJbWFnZTJEOwotCi1XZWJHTFRleHR1cmVSZXNvdXJj
ZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtSZXNvdXJjZX0KLSAqLwotZnVuY3Rp
b24gV2ViR0xQcm9ncmFtUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKLXsKLSAgICBSZXNvdXJjZS5j
YWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOwotfQotCi1XZWJHTFByb2dyYW1SZXNvdXJjZS5wcm90
b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtPYmpl
Y3R9IGRhdGEKLSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQotICAgICAqLwotICAgIF9wb3B1
bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAg
IHZhciBnbFJlc291cmNlID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuZm9yT2JqZWN0
KHRoaXMpOwotICAgICAgICB2YXIgZ2wgPSBnbFJlc291cmNlLndyYXBwZWRPYmplY3QoKTsKLSAg
ICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKLQotICAgICAgICB2YXIg
b3JpZ2luYWxFcnJvcnMgPSBnbFJlc291cmNlLmdldEFsbEVycm9ycygpOwotCi0gICAgICAgIHZh
ciB1bmlmb3JtcyA9IFtdOwotICAgICAgICB2YXIgdW5pZm9ybXNDb3VudCA9IGdsLmdldFByb2dy
YW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB1bmlmb3Jtc0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBhY3Rp
dmVJbmZvID0gZ2wuZ2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpKTsKLSAgICAgICAgICAgIGlm
ICghYWN0aXZlSW5mbykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZh
ciB1bmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgYWN0aXZl
SW5mby5uYW1lKTsKLSAgICAgICAgICAgIGlmICghdW5pZm9ybUxvY2F0aW9uKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2wuZ2V0VW5pZm9ybShw
cm9ncmFtLCB1bmlmb3JtTG9jYXRpb24pOwotICAgICAgICAgICAgdW5pZm9ybXMucHVzaCh7Ci0g
ICAgICAgICAgICAgICAgbmFtZTogYWN0aXZlSW5mby5uYW1lLAotICAgICAgICAgICAgICAgIHR5
cGU6IGFjdGl2ZUluZm8udHlwZSwKLSAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIGRhdGEudW5pZm9ybXMgPSB1bmlmb3JtczsK
LQotICAgICAgICBnbFJlc291cmNlLnJlc3RvcmVFcnJvcnMob3JpZ2luYWxFcnJvcnMpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0g
ZGF0YQotICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCi0gICAgICovCi0gICAgX2RvUmVwbGF5
Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgUmVzb3VyY2UucHJv
dG90eXBlLl9kb1JlcGxheUNhbGxzLmNhbGwodGhpcywgZGF0YSwgY2FjaGUpOwotICAgICAgICB2
YXIgZ2wgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5mb3JPYmplY3QodGhpcykud3Jh
cHBlZE9iamVjdCgpOwotICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMud3JhcHBlZE9iamVjdCgp
OwotCi0gICAgICAgIHZhciBvcmlnaW5hbFByb2dyYW0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ1VS
UkVOVF9QUk9HUkFNKTsKLSAgICAgICAgdmFyIGN1cnJlbnRQcm9ncmFtID0gb3JpZ2luYWxQcm9n
cmFtOwotICAgICAgICAKLSAgICAgICAgZGF0YS51bmlmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uKHVu
aWZvcm0pIHsKLSAgICAgICAgICAgIHZhciB1bmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybS5uYW1lKTsKLSAgICAgICAgICAgIGlmICghdW5pZm9y
bUxvY2F0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChjdXJy
ZW50UHJvZ3JhbSAhPT0gcHJvZ3JhbSkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9ncmFt
ID0gcHJvZ3JhbTsKLSAgICAgICAgICAgICAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSB0aGlzLl91bmlmb3JtTWV0
aG9kTmFtZUJ5VHlwZShnbCwgdW5pZm9ybS50eXBlKTsKLSAgICAgICAgICAgIGlmIChtZXRob2RO
YW1lLmluZGV4T2YoIk1hdHJpeCIpID09PSAtMSkKLSAgICAgICAgICAgICAgICBnbFttZXRob2RO
YW1lXS5jYWxsKGdsLCB1bmlmb3JtTG9jYXRpb24sIHVuaWZvcm0udmFsdWUpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGdsW21ldGhvZE5hbWVdLmNhbGwoZ2wsIHVuaWZvcm1M
b2NhdGlvbiwgZmFsc2UsIHVuaWZvcm0udmFsdWUpOwotICAgICAgICB9LmJpbmQodGhpcykpOwot
Ci0gICAgICAgIGlmIChjdXJyZW50UHJvZ3JhbSAhPT0gb3JpZ2luYWxQcm9ncmFtKQotICAgICAg
ICAgICAgZ2wudXNlUHJvZ3JhbShvcmlnaW5hbFByb2dyYW0pOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gdHlwZQotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBfdW5p
Zm9ybU1ldGhvZE5hbWVCeVR5cGU6IGZ1bmN0aW9uKGdsLCB0eXBlKQotICAgIHsKLSAgICAgICAg
dmFyIHVuaWZvcm1NZXRob2ROYW1lcyA9IFdlYkdMUHJvZ3JhbVJlc291cmNlLl91bmlmb3JtTWV0
aG9kTmFtZXM7Ci0gICAgICAgIGlmICghdW5pZm9ybU1ldGhvZE5hbWVzKSB7Ci0gICAgICAgICAg
ICB1bmlmb3JtTWV0aG9kTmFtZXMgPSB7fTsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1l
c1tnbC5GTE9BVF0gPSAidW5pZm9ybTFmIjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1l
c1tnbC5GTE9BVF9WRUMyXSA9ICJ1bmlmb3JtMmZ2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRo
b2ROYW1lc1tnbC5GTE9BVF9WRUMzXSA9ICJ1bmlmb3JtM2Z2IjsKLSAgICAgICAgICAgIHVuaWZv
cm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUM0XSA9ICJ1bmlmb3JtNGZ2IjsKLSAgICAgICAgICAg
IHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRdID0gInVuaWZvcm0xaSI7Ci0gICAgICAgICAgICB1
bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF0gPSAidW5pZm9ybTFpIjsKLSAgICAgICAgICAgIHVu
aWZvcm1NZXRob2ROYW1lc1tnbC5TQU1QTEVSXzJEXSA9ICJ1bmlmb3JtMWkiOwotICAgICAgICAg
ICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLlNBTVBMRVJfQ1VCRV0gPSAidW5pZm9ybTFpIjsKLSAg
ICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDMl0gPSAidW5pZm9ybTJpdiI7
Ci0gICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMyXSA9ICJ1bmlmb3Jt
Mml2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDM10gPSAidW5p
Zm9ybTNpdiI7Ci0gICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMzXSA9
ICJ1bmlmb3JtM2l2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVD
NF0gPSAidW5pZm9ybTRpdiI7Ci0gICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9P
TF9WRUM0XSA9ICJ1bmlmb3JtNGl2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tn
bC5GTE9BVF9NQVQyXSA9ICJ1bmlmb3JtTWF0cml4MmZ2IjsKLSAgICAgICAgICAgIHVuaWZvcm1N
ZXRob2ROYW1lc1tnbC5GTE9BVF9NQVQzXSA9ICJ1bmlmb3JtTWF0cml4M2Z2IjsKLSAgICAgICAg
ICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9NQVQ0XSA9ICJ1bmlmb3JtTWF0cml4NGZ2
IjsKLSAgICAgICAgICAgIFdlYkdMUHJvZ3JhbVJlc291cmNlLl91bmlmb3JtTWV0aG9kTmFtZXMg
PSB1bmlmb3JtTWV0aG9kTmFtZXM7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc29sZS5hc3NlcnQo
dW5pZm9ybU1ldGhvZE5hbWVzW3R5cGVdLCAiVW5rbm93biB1bmlmb3JtIHR5cGUgIiArIHR5cGUp
OwotICAgICAgICByZXR1cm4gdW5pZm9ybU1ldGhvZE5hbWVzW3R5cGVdOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKLSAgICAg
Ki8KLSAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiByZW1vdmUgYW55IG9sZGVyIGNhbGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhl
IHJlc291cmNlIHN0YXRlLgotICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG11bHRpcGxlIGF0dGFj
aFNoYWRlciAmJiBkZXRhY2hTaGFkZXIuCi0gICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5wdXNo
Q2FsbC5jYWxsKHRoaXMsIGNhbGwpOwotICAgIH0KLX0KLQotV2ViR0xQcm9ncmFtUmVzb3VyY2Uu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFJlc291cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBleHRlbmRzIHtSZXNvdXJjZX0KLSAqLwotZnVuY3Rpb24gV2ViR0xTaGFk
ZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQotewotICAgIFJlc291cmNlLmNhbGwodGhpcywgd3Jh
cHBlZE9iamVjdCk7Ci19Ci0KLVdlYkdMU2hhZGVyUmVzb3VyY2UucHJvdG90eXBlID0gewotICAg
IC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAotICAgICAq
LwotICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBubyBsb25nZXIgY29udHJpYnV0ZSB0byB0aGUg
cmVzb3VyY2Ugc3RhdGUuCi0gICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGlwbGUgc2hhZGVy
U291cmNlIGNhbGxzLgotICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0
aGlzLCBjYWxsKTsKLSAgICB9Ci19Ci0KLVdlYkdMU2hhZGVyUmVzb3VyY2UucHJvdG90eXBlLl9f
cHJvdG9fXyA9IFJlc291cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9Ci0gKi8KLWZ1bmN0aW9uIFdlYkdMQnVmZmVy
UmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKLXsKLSAgICBXZWJHTEJvdW5kUmVzb3VyY2UuY2FsbCh0
aGlzLCB3cmFwcGVkT2JqZWN0KTsKLX0KLQotV2ViR0xCdWZmZXJSZXNvdXJjZS5wcm90b3R5cGUg
PSB7Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtDYWxsfSBjYWxs
Ci0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAgICAv
LyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRl
IHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KLSAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIG1lbW9y
eSBmb3IgYnVmZmVyU3ViRGF0YS4KLSAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlw
ZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOwotICAgIH0KLX0KLQotV2ViR0xCdWZmZXJSZXNv
dXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsK
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9
Ci0gKi8KLWZ1bmN0aW9uIFdlYkdMRnJhbWVidWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQot
ewotICAgIFdlYkdMQm91bmRSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOwotfQot
Ci1XZWJHTEZyYW1lYnVmZmVyUmVzb3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAq
IEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAotICAgICAqLwotICAgIHB1c2hD
YWxsOiBmdW5jdGlvbihjYWxsKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkg
b2xkZXIgY2FsbHMgdGhhdCBubyBsb25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3Rh
dGUuCi0gICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0
aGlzLCBjYWxsKTsKLSAgICB9Ci19Ci0KLVdlYkdMRnJhbWVidWZmZXJSZXNvdXJjZS5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9Ci0gKi8KLWZ1bmN0
aW9uIFdlYkdMUmVuZGVyYnVmZmVyUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKLXsKLSAgICBXZWJH
TEJvdW5kUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKLX0KLQotV2ViR0xSZW5k
ZXJidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRl
Ci0gICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0
aW9uKGNhbGwpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxs
cyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KLSAgICAg
ICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwp
OwotICAgIH0KLX0KLQotV2ViR0xSZW5kZXJidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtSZXNvdXJjZX0KLSAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbENvbnRleHQKLSAqIEBwYXJhbSB7RnVuY3Rpb259IHJlcGxheUNvbnRleHRDYWxsYmFj
awotICovCi1mdW5jdGlvbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQs
IHJlcGxheUNvbnRleHRDYWxsYmFjaykKLXsKLSAgICBSZXNvdXJjZS5jYWxsKHRoaXMsIGdsQ29u
dGV4dCk7Ci0gICAgdGhpcy5fcmVwbGF5Q29udGV4dENhbGxiYWNrID0gcmVwbGF5Q29udGV4dENh
bGxiYWNrOwotICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxudW1iZXIsIGJvb2xlYW4+fSAqLwotICAg
IHRoaXMuX2N1c3RvbUVycm9ycyA9IG51bGw7Ci19Ci0KLS8qKgotICogQGNvbnN0Ci0gKiBAdHlw
ZSB7QXJyYXkuPHN0cmluZz59Ci0gKi8KLVdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLkdM
Q2FwYWJpbGl0aWVzID0gWwotICAgICJCTEVORCIsCi0gICAgIkNVTExfRkFDRSIsCi0gICAgIkRF
UFRIX1RFU1QiLAotICAgICJESVRIRVIiLAotICAgICJQT0xZR09OX09GRlNFVF9GSUxMIiwKLSAg
ICAiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwKLSAgICAiU0FNUExFX0NPVkVSQUdFIiwKLSAg
ICAiU0NJU1NPUl9URVNUIiwKLSAgICAiU1RFTkNJTF9URVNUIgotXTsKLQotLyoqCi0gKiBAY29u
c3QKLSAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn0KLSAqLwotV2ViR0xSZW5kZXJpbmdDb250ZXh0
UmVzb3VyY2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMgPSBbCi0gICAgIlBBQ0tfQUxJR05NRU5UIiwK
LSAgICAiVU5QQUNLX0FMSUdOTUVOVCIsCi0gICAgIlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJ
T05fV0VCR0wiLAotICAgICJVTlBBQ0tfRkxJUF9ZX1dFQkdMIiwKLSAgICAiVU5QQUNLX1BSRU1V
TFRJUExZX0FMUEhBX1dFQkdMIgotXTsKLQotLyoqCi0gKiBAY29uc3QKLSAqIEB0eXBlIHtBcnJh
eS48c3RyaW5nPn0KLSAqLwotV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuU3RhdGVQYXJh
bWV0ZXJzID0gWwotICAgICJBQ1RJVkVfVEVYVFVSRSIsCi0gICAgIkFSUkFZX0JVRkZFUl9CSU5E
SU5HIiwKLSAgICAiQkxFTkRfQ09MT1IiLAotICAgICJCTEVORF9EU1RfQUxQSEEiLAotICAgICJC
TEVORF9EU1RfUkdCIiwKLSAgICAiQkxFTkRfRVFVQVRJT05fQUxQSEEiLAotICAgICJCTEVORF9F
UVVBVElPTl9SR0IiLAotICAgICJCTEVORF9TUkNfQUxQSEEiLAotICAgICJCTEVORF9TUkNfUkdC
IiwKLSAgICAiQ09MT1JfQ0xFQVJfVkFMVUUiLAotICAgICJDT0xPUl9XUklURU1BU0siLAotICAg
ICJDVUxMX0ZBQ0VfTU9ERSIsCi0gICAgIkNVUlJFTlRfUFJPR1JBTSIsCi0gICAgIkRFUFRIX0NM
RUFSX1ZBTFVFIiwKLSAgICAiREVQVEhfRlVOQyIsCi0gICAgIkRFUFRIX1JBTkdFIiwKLSAgICAi
REVQVEhfV1JJVEVNQVNLIiwKLSAgICAiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIsCi0g
ICAgIkZSQU1FQlVGRkVSX0JJTkRJTkciLAotICAgICJGUk9OVF9GQUNFIiwKLSAgICAiR0VORVJB
VEVfTUlQTUFQX0hJTlQiLAotICAgICJMSU5FX1dJRFRIIiwKLSAgICAiUEFDS19BTElHTk1FTlQi
LAotICAgICJQT0xZR09OX09GRlNFVF9GQUNUT1IiLAotICAgICJQT0xZR09OX09GRlNFVF9VTklU
UyIsCi0gICAgIlJFTkRFUkJVRkZFUl9CSU5ESU5HIiwKLSAgICAiU0FNUExFX0NPVkVSQUdFX0lO
VkVSVCIsCi0gICAgIlNBTVBMRV9DT1ZFUkFHRV9WQUxVRSIsCi0gICAgIlNDSVNTT1JfQk9YIiwK
LSAgICAiU1RFTkNJTF9CQUNLX0ZBSUwiLAotICAgICJTVEVOQ0lMX0JBQ0tfRlVOQyIsCi0gICAg
IlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwiLAotICAgICJTVEVOQ0lMX0JBQ0tfUEFTU19E
RVBUSF9QQVNTIiwKLSAgICAiU1RFTkNJTF9CQUNLX1JFRiIsCi0gICAgIlNURU5DSUxfQkFDS19W
QUxVRV9NQVNLIiwKLSAgICAiU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyIsCi0gICAgIlNURU5DSUxf
Q0xFQVJfVkFMVUUiLAotICAgICJTVEVOQ0lMX0ZBSUwiLAotICAgICJTVEVOQ0lMX0ZVTkMiLAot
ICAgICJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIsCi0gICAgIlNURU5DSUxfUEFTU19ERVBUSF9Q
QVNTIiwKLSAgICAiU1RFTkNJTF9SRUYiLAotICAgICJTVEVOQ0lMX1ZBTFVFX01BU0siLAotICAg
ICJTVEVOQ0lMX1dSSVRFTUFTSyIsCi0gICAgIlVOUEFDS19BTElHTk1FTlQiLAotICAgICJVTlBB
Q0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwKLSAgICAiVU5QQUNLX0ZMSVBfWV9XRUJH
TCIsCi0gICAgIlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCIsCi0gICAgIlZJRVdQT1JU
IgotXTsKLQotLyoqCi0gKiBAcGFyYW0geyp9IG9iagotICogQHJldHVybiB7V2ViR0xSZW5kZXJp
bmdDb250ZXh0UmVzb3VyY2V9Ci0gKi8KLVdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZv
ck9iamVjdCA9IGZ1bmN0aW9uKG9iaikKLXsKLSAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5m
b3JPYmplY3Qob2JqKTsKLSAgICBpZiAoIXJlc291cmNlIHx8IHJlc291cmNlIGluc3RhbmNlb2Yg
V2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UpCi0gICAgICAgIHJldHVybiByZXNvdXJjZTsK
LSAgICB2YXIgY2FsbCA9IHJlc291cmNlLmNhbGxzKCk7Ci0gICAgaWYgKCFjYWxsIHx8ICFjYWxs
Lmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmVzb3VyY2UgPSBjYWxsWzBdLnJl
c291cmNlKCk7Ci0gICAgcmV0dXJuIChyZXNvdXJjZSBpbnN0YW5jZW9mIFdlYkdMUmVuZGVyaW5n
Q29udGV4dFJlc291cmNlKSA/IHJlc291cmNlIDogbnVsbDsKLX0KLQotV2ViR0xSZW5kZXJpbmdD
b250ZXh0UmVzb3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0Fy
cmF5LjxudW1iZXI+fQotICAgICAqLwotICAgIGdldEFsbEVycm9yczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIGVycm9ycyA9IFtdOwotICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBw
ZWRPYmplY3QoKTsKLSAgICAgICAgaWYgKGdsKSB7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGdsLmdldEVycm9yKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGVycm9yID09PSBnbC5OT19FUlJPUikKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgdGhpcy5jbGVhckVycm9yKGVycm9yKTsKLSAgICAgICAgICAg
ICAgICBlcnJvcnMucHVzaChlcnJvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHRoaXMuX2N1c3RvbUVycm9ycykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGlu
IHRoaXMuX2N1c3RvbUVycm9ycykgewotICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IE51bWJl
cihrZXkpOwotICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXN0b21FcnJvcnM7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGVycm9yczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtB
cnJheS48bnVtYmVyPn0gZXJyb3JzCi0gICAgICovCi0gICAgcmVzdG9yZUVycm9yczogZnVuY3Rp
b24oZXJyb3JzKQotICAgIHsKLSAgICAgICAgdmFyIGdsID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7
Ci0gICAgICAgIGlmIChnbCkgewotICAgICAgICAgICAgdmFyIHdhc0Vycm9yID0gZmFsc2U7Ci0g
ICAgICAgICAgICB3aGlsZSAoZ2wuZ2V0RXJyb3IoKSAhPT0gZ2wuTk9fRVJST1IpCi0gICAgICAg
ICAgICAgICAgd2FzRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIXdh
c0Vycm9yLCAiRXJyb3Iocykgd2hpbGUgY2FwdHVyaW5nIGN1cnJlbnQgV2ViR0wgc3RhdGUuIik7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFlcnJvcnMubGVuZ3RoKQotICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2N1c3RvbUVycm9yczsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aGlz
Ll9jdXN0b21FcnJvcnMgPSB7fTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gZXJy
b3JzLmxlbmd0aDsgaSA8IG47ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9jdXN0b21FcnJv
cnNbZXJyb3JzW2ldXSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IGVycm9yCi0gICAgICovCi0gICAgY2xlYXJFcnJvcjogZnVuY3Rp
b24oZXJyb3IpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY3VzdG9tRXJyb3JzKQotICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yc1tlcnJvcl07Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBuZXh0RXJyb3I6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jdXN0b21FcnJvcnMpIHsKLSAgICAgICAg
ICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9jdXN0b21FcnJvcnMpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgZXJyb3IgPSBOdW1iZXIoa2V5KTsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5f
Y3VzdG9tRXJyb3JzW2Vycm9yXTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yczsK
LSAgICAgICAgdmFyIGdsID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiBn
bCA/IGdsLk5PX0VSUk9SIDogMDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRl
Ci0gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNo
ZQotICAgICAqLwotICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBj
YWNoZSkKLSAgICB7Ci0gICAgICAgIHZhciBnbCA9IHRoaXMud3JhcHBlZE9iamVjdCgpOwotICAg
ICAgICBkYXRhLnJlcGxheUNvbnRleHRDYWxsYmFjayA9IHRoaXMuX3JlcGxheUNvbnRleHRDYWxs
YmFjazsKLQotICAgICAgICB2YXIgb3JpZ2luYWxFcnJvcnMgPSB0aGlzLmdldEFsbEVycm9ycygp
OwotCi0gICAgICAgIC8vIFRha2UgYSBmdWxsIEdMIHN0YXRlIHNuYXBzaG90LgotICAgICAgICB2
YXIgZ2xTdGF0ZSA9IHt9OwotICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5H
TENhcGFiaWxpdGllcy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgewotICAgICAgICAgICAg
Z2xTdGF0ZVtwYXJhbWV0ZXJdID0gZ2wuaXNFbmFibGVkKGdsW3BhcmFtZXRlcl0pOwotICAgICAg
ICB9KTsKLSAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuU3RhdGVQYXJhbWV0
ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7Ci0gICAgICAgICAgICBnbFN0YXRlW3Bh
cmFtZXRlcl0gPSBSZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0UGFyYW1ldGVyKGdsW3BhcmFt
ZXRlcl0pLCBjYWNoZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIFZFUlRFWF9BVFRSSUJf
QVJSQVlTCi0gICAgICAgIHZhciBtYXhWZXJ0ZXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGds
Lk1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgICAgIHZhciB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJz
ID0gWyJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwgIlZFUlRFWF9BVFRSSUJf
QVJSQVlfRU5BQkxFRCIsICJWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUiLCAiVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9TVFJJREUiLCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwgIlZFUlRFWF9BVFRS
SUJfQVJSQVlfTk9STUFMSVpFRCIsICJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIiXTsKLSAgICAgICAg
dmFyIHZlcnRleEF0dHJpYlN0YXRlcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG1heFZlcnRleEF0dHJpYnM7ICsraSkgewotICAgICAgICAgICAgdmFyIHN0YXRlID0ge307Ci0g
ICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24oYXR0cmli
UGFyYW1ldGVyKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGVbYXR0cmliUGFyYW1ldGVyXSA9IFJl
c291cmNlLnRvUmVwbGF5YWJsZShnbC5nZXRWZXJ0ZXhBdHRyaWIoaSwgZ2xbYXR0cmliUGFyYW1l
dGVyXSksIGNhY2hlKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgc3RhdGUuVkVSVEVY
X0FUVFJJQl9BUlJBWV9QT0lOVEVSID0gZ2wuZ2V0VmVydGV4QXR0cmliT2Zmc2V0KGksIGdsLlZF
UlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7Ci0gICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJTdGF0
ZXMucHVzaChzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ2xTdGF0ZS52ZXJ0ZXhBdHRyaWJT
dGF0ZXMgPSB2ZXJ0ZXhBdHRyaWJTdGF0ZXM7Ci0KLSAgICAgICAgLy8gVEVYVFVSRVMKLSAgICAg
ICAgdmFyIGN1cnJlbnRUZXh0dXJlQmluZGluZyA9IGdsLmdldFBhcmFtZXRlcihnbC5BQ1RJVkVf
VEVYVFVSRSk7Ci0gICAgICAgIHZhciBtYXhUZXh0dXJlSW1hZ2VVbml0cyA9IGdsLmdldFBhcmFt
ZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgICAgIHZhciB0ZXh0dXJlQmlu
ZGluZ3MgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1hZ2VV
bml0czsgKytpKSB7Ci0gICAgICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsg
aSk7Ci0gICAgICAgICAgICB2YXIgc3RhdGUgPSB7Ci0gICAgICAgICAgICAgICAgVEVYVFVSRV8y
RDogUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJ
TkdfMkQpLCBjYWNoZSksCi0gICAgICAgICAgICAgICAgVEVYVFVSRV9DVUJFX01BUDogUmVzb3Vy
Y2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJTkdfQ1VCRV9N
QVApLCBjYWNoZSkKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB0ZXh0dXJlQmluZGluZ3Mu
cHVzaChzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ2xTdGF0ZS50ZXh0dXJlQmluZGluZ3Mg
PSB0ZXh0dXJlQmluZGluZ3M7Ci0gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoY3VycmVudFRleHR1
cmVCaW5kaW5nKTsKLQotICAgICAgICBkYXRhLmdsU3RhdGUgPSBnbFN0YXRlOwotCi0gICAgICAg
IHRoaXMucmVzdG9yZUVycm9ycyhvcmlnaW5hbEVycm9ycyk7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCi0gICAgICogQHBh
cmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKi8KLSAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24o
ZGF0YSwgY2FjaGUpCi0gICAgewotICAgICAgICB0aGlzLl9yZXBsYXlDb250ZXh0Q2FsbGJhY2sg
PSBkYXRhLnJlcGxheUNvbnRleHRDYWxsYmFjazsKLSAgICAgICAgdGhpcy5fY3VzdG9tRXJyb3Jz
ID0gbnVsbDsKLQotICAgICAgICB2YXIgZ2wgPSBSZXNvdXJjZS53cmFwcGVkT2JqZWN0KHRoaXMu
X3JlcGxheUNvbnRleHRDYWxsYmFjaygpKTsKLSAgICAgICAgdGhpcy5zZXRXcmFwcGVkT2JqZWN0
KGdsKTsKLQotICAgICAgICB2YXIgZ2xTdGF0ZSA9IGRhdGEuZ2xTdGF0ZTsKLSAgICAgICAgZ2wu
YmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5
KGdsU3RhdGUuRlJBTUVCVUZGRVJfQklORElORywgY2FjaGUpKTsKLSAgICAgICAgZ2wuYmluZFJl
bmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xT
dGF0ZS5SRU5ERVJCVUZGRVJfQklORElORywgY2FjaGUpKTsKLQotICAgICAgICAvLyBFbmFibGUg
b3IgZGlzYWJsZSBzZXJ2ZXItc2lkZSBHTCBjYXBhYmlsaXRpZXMuCi0gICAgICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dFJlc291cmNlLkdMQ2FwYWJpbGl0aWVzLmZvckVhY2goZnVuY3Rpb24ocGFy
YW1ldGVyKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChwYXJhbWV0ZXIgaW4gZ2xTdGF0
ZSk7Ci0gICAgICAgICAgICBpZiAoZ2xTdGF0ZVtwYXJhbWV0ZXJdKQotICAgICAgICAgICAgICAg
IGdsLmVuYWJsZShnbFtwYXJhbWV0ZXJdKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBnbC5kaXNhYmxlKGdsW3BhcmFtZXRlcl0pOwotICAgICAgICB9KTsKLQotICAgICAgICBn
bC5ibGVuZENvbG9yKGdsU3RhdGUuQkxFTkRfQ09MT1JbMF0sIGdsU3RhdGUuQkxFTkRfQ09MT1Jb
MV0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbMl0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbM10pOwotICAg
ICAgICBnbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoZ2xTdGF0ZS5CTEVORF9FUVVBVElPTl9SR0Is
IGdsU3RhdGUuQkxFTkRfRVFVQVRJT05fQUxQSEEpOwotICAgICAgICBnbC5ibGVuZEZ1bmNTZXBh
cmF0ZShnbFN0YXRlLkJMRU5EX1NSQ19SR0IsIGdsU3RhdGUuQkxFTkRfRFNUX1JHQiwgZ2xTdGF0
ZS5CTEVORF9TUkNfQUxQSEEsIGdsU3RhdGUuQkxFTkRfRFNUX0FMUEhBKTsKLSAgICAgICAgZ2wu
Y2xlYXJDb2xvcihnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzBdLCBnbFN0YXRlLkNPTE9SX0NM
RUFSX1ZBTFVFWzFdLCBnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzJdLCBnbFN0YXRlLkNPTE9S
X0NMRUFSX1ZBTFVFWzNdKTsKLSAgICAgICAgZ2wuY2xlYXJEZXB0aChnbFN0YXRlLkRFUFRIX0NM
RUFSX1ZBTFVFKTsKLSAgICAgICAgZ2wuY2xlYXJTdGVuY2lsKGdsU3RhdGUuU1RFTkNJTF9DTEVB
Ul9WQUxVRSk7Ci0gICAgICAgIGdsLmNvbG9yTWFzayhnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1sw
XSwgZ2xTdGF0ZS5DT0xPUl9XUklURU1BU0tbMV0sIGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzJd
LCBnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1szXSk7Ci0gICAgICAgIGdsLmN1bGxGYWNlKGdsU3Rh
dGUuQ1VMTF9GQUNFX01PREUpOwotICAgICAgICBnbC5kZXB0aEZ1bmMoZ2xTdGF0ZS5ERVBUSF9G
VU5DKTsKLSAgICAgICAgZ2wuZGVwdGhNYXNrKGdsU3RhdGUuREVQVEhfV1JJVEVNQVNLKTsKLSAg
ICAgICAgZ2wuZGVwdGhSYW5nZShnbFN0YXRlLkRFUFRIX1JBTkdFWzBdLCBnbFN0YXRlLkRFUFRI
X1JBTkdFWzFdKTsKLSAgICAgICAgZ2wuZnJvbnRGYWNlKGdsU3RhdGUuRlJPTlRfRkFDRSk7Ci0g
ICAgICAgIGdsLmhpbnQoZ2wuR0VORVJBVEVfTUlQTUFQX0hJTlQsIGdsU3RhdGUuR0VORVJBVEVf
TUlQTUFQX0hJTlQpOwotICAgICAgICBnbC5saW5lV2lkdGgoZ2xTdGF0ZS5MSU5FX1dJRFRIKTsK
LQotICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1l
dGVycy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgewotICAgICAgICAgICAgZ2wucGl4ZWxT
dG9yZWkoZ2xbcGFyYW1ldGVyXSwgZ2xTdGF0ZVtwYXJhbWV0ZXJdKTsKLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgZ2wucG9seWdvbk9mZnNldChnbFN0YXRlLlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiwg
Z2xTdGF0ZS5QT0xZR09OX09GRlNFVF9VTklUUyk7Ci0gICAgICAgIGdsLnNhbXBsZUNvdmVyYWdl
KGdsU3RhdGUuU0FNUExFX0NPVkVSQUdFX1ZBTFVFLCBnbFN0YXRlLlNBTVBMRV9DT1ZFUkFHRV9J
TlZFUlQpOwotICAgICAgICBnbC5zdGVuY2lsRnVuY1NlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRl
LlNURU5DSUxfRlVOQywgZ2xTdGF0ZS5TVEVOQ0lMX1JFRiwgZ2xTdGF0ZS5TVEVOQ0lMX1ZBTFVF
X01BU0spOwotICAgICAgICBnbC5zdGVuY2lsRnVuY1NlcGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUu
U1RFTkNJTF9CQUNLX0ZVTkMsIGdsU3RhdGUuU1RFTkNJTF9CQUNLX1JFRiwgZ2xTdGF0ZS5TVEVO
Q0lMX0JBQ0tfVkFMVUVfTUFTSyk7Ci0gICAgICAgIGdsLnN0ZW5jaWxPcFNlcGFyYXRlKGdsLkZS
T05ULCBnbFN0YXRlLlNURU5DSUxfRkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX1BBU1NfREVQVEhfRkFJ
TCwgZ2xTdGF0ZS5TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyk7Ci0gICAgICAgIGdsLnN0ZW5jaWxP
cFNlcGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUuU1RFTkNJTF9CQUNLX0ZBSUwsIGdsU3RhdGUuU1RF
TkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9QQVNTKTsKLSAgICAgICAgZ2wuc3RlbmNpbE1hc2tTZXBhcmF0ZShnbC5GUk9OVCwgZ2xTdGF0
ZS5TVEVOQ0lMX1dSSVRFTUFTSyk7Ci0gICAgICAgIGdsLnN0ZW5jaWxNYXNrU2VwYXJhdGUoZ2wu
QkFDSywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLKTsKLQotICAgICAgICBnbC5zY2lz
c29yKGdsU3RhdGUuU0NJU1NPUl9CT1hbMF0sIGdsU3RhdGUuU0NJU1NPUl9CT1hbMV0sIGdsU3Rh
dGUuU0NJU1NPUl9CT1hbMl0sIGdsU3RhdGUuU0NJU1NPUl9CT1hbM10pOwotICAgICAgICBnbC52
aWV3cG9ydChnbFN0YXRlLlZJRVdQT1JUWzBdLCBnbFN0YXRlLlZJRVdQT1JUWzFdLCBnbFN0YXRl
LlZJRVdQT1JUWzJdLCBnbFN0YXRlLlZJRVdQT1JUWzNdKTsKLQotICAgICAgICBnbC51c2VQcm9n
cmFtKFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5DVVJSRU5UX1BST0dSQU0sIGNh
Y2hlKSk7Ci0KLSAgICAgICAgLy8gVkVSVEVYX0FUVFJJQl9BUlJBWVMKLSAgICAgICAgdmFyIG1h
eFZlcnRleEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKLSAg
ICAgICAgICAgIHZhciBzdGF0ZSA9IGdsU3RhdGUudmVydGV4QXR0cmliU3RhdGVzW2ldIHx8IHt9
OwotICAgICAgICAgICAgaWYgKHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCkKLSAg
ICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7Ci0g
ICAgICAgICAgICBpZiAoc3RhdGUuQ1VSUkVOVF9WRVJURVhfQVRUUklCKQotICAgICAgICAgICAg
ICAgIGdsLnZlcnRleEF0dHJpYjRmdihpLCBzdGF0ZS5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpOwot
ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUu
VkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORywgY2FjaGUpOwotICAgICAgICAgICAg
aWYgKGJ1ZmZlcikgewotICAgICAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVG
RkVSLCBidWZmZXIpOwotICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoaSwg
c3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFLCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZ
X1RZUEUsIHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCwgc3RhdGUuVkVSVEVY
X0FUVFJJQl9BUlJBWV9TVFJJREUsIHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJB
WV9CVUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5BUlJBWV9CVUZGRVJf
QklORElORywgY2FjaGUpKTsKLSAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZ
X0JVRkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRlLkVMRU1FTlRfQVJSQVlf
QlVGRkVSX0JJTkRJTkcsIGNhY2hlKSk7Ci0KLSAgICAgICAgLy8gVEVYVFVSRVMKLSAgICAgICAg
dmFyIG1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1h
Z2VVbml0czsgKytpKSB7Ci0gICAgICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUw
ICsgaSk7Ci0gICAgICAgICAgICB2YXIgc3RhdGUgPSBnbFN0YXRlLnRleHR1cmVCaW5kaW5nc1tp
XSB8fCB7fTsKLSAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIFJlcGxh
eWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVEVYVFVSRV8yRCwgY2FjaGUpKTsKLSAgICAgICAg
ICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIFJlcGxheWFibGVSZXNvdXJj
ZS5yZXBsYXkoc3RhdGUuVEVYVFVSRV9DVUJFX01BUCwgY2FjaGUpKTsKLSAgICAgICAgfQotICAg
ICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsU3RhdGUuQUNUSVZFX1RFWFRVUkUpOwotCi0gICAgICAg
IHJldHVybiBSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRh
LCBjYWNoZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJl
cn0gdGFyZ2V0Ci0gICAgICogQHJldHVybiB7UmVzb3VyY2V9Ci0gICAgICovCi0gICAgY3VycmVu
dEJpbmRpbmc6IGZ1bmN0aW9uKHRhcmdldCkKLSAgICB7Ci0gICAgICAgIHZhciByZXNvdXJjZSA9
IFJlc291cmNlLmZvck9iamVjdCh0YXJnZXQpOwotICAgICAgICBpZiAocmVzb3VyY2UpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzb3VyY2U7Ci0gICAgICAgIHZhciBnbCA9IHRoaXMud3JhcHBlZE9i
amVjdCgpOwotICAgICAgICB2YXIgYmluZGluZ1BhcmFtZXRlcjsKLSAgICAgICAgdmFyIGJpbmRN
ZXRob2ROYW1lOwotICAgICAgICB2YXIgYmluZE1ldGhvZFRhcmdldCA9IHRhcmdldDsKLSAgICAg
ICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICAgICAgY2FzZSBnbC5BUlJBWV9CVUZGRVI6Ci0gICAg
ICAgICAgICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wuQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAg
ICAgICAgICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kQnVmZmVyIjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgYmlu
ZGluZ1BhcmFtZXRlciA9IGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgICAg
ICAgICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kQnVmZmVyIjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIGdsLlRFWFRVUkVfMkQ6Ci0gICAgICAgICAgICBiaW5kaW5nUGFyYW1ldGVy
ID0gZ2wuVEVYVFVSRV9CSU5ESU5HXzJEOwotICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAi
YmluZFRleHR1cmUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZ2wuVEVYVFVS
RV9DVUJFX01BUDoKLSAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6
Ci0gICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICBj
YXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgY2FzZSBnbC5URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgotICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKLSAgICAgICAgICAgIGJpbmRpbmdQYXJhbWV0ZXIgPSBnbC5URVhUVVJFX0JJTkRJTkdfQ1VC
RV9NQVA7Ci0gICAgICAgICAgICBiaW5kTWV0aG9kVGFyZ2V0ID0gZ2wuVEVYVFVSRV9DVUJFX01B
UDsKLSAgICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRUZXh0dXJlIjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIGdsLkZSQU1FQlVGRkVSOgotICAgICAgICAgICAgYmlu
ZGluZ1BhcmFtZXRlciA9IGdsLkZSQU1FQlVGRkVSX0JJTkRJTkc7Ci0gICAgICAgICAgICBiaW5k
TWV0aG9kTmFtZSA9ICJiaW5kRnJhbWVidWZmZXIiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgZ2wuUkVOREVSQlVGRkVSOgotICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9
IGdsLlJFTkRFUkJVRkZFUl9CSU5ESU5HOwotICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAi
YmluZFJlbmRlcmJ1ZmZlciI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogdW5rbm93biBi
aW5kaW5nIHRhcmdldCAiICsgdGFyZ2V0KTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAg
ICAgICB9Ci0gICAgICAgIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KGdsLmdldFBhcmFt
ZXRlcihiaW5kaW5nUGFyYW1ldGVyKSk7Ci0gICAgICAgIGlmIChyZXNvdXJjZSkKLSAgICAgICAg
ICAgIHJlc291cmNlLnB1c2hCaW5kaW5nKGJpbmRNZXRob2RUYXJnZXQsIGJpbmRNZXRob2ROYW1l
KTsKLSAgICAgICAgcmV0dXJuIHJlc291cmNlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
b3ZlcnJpZGUKLSAgICAgKiBAcmV0dXJuIHtPYmplY3QuPHN0cmluZywgRnVuY3Rpb24+fQotICAg
ICAqLwotICAgIF9jdXN0b21XcmFwRnVuY3Rpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgd3JhcEZ1bmN0aW9ucyA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLl93cmFw
RnVuY3Rpb25zOwotICAgICAgICBpZiAoIXdyYXBGdW5jdGlvbnMpIHsKLSAgICAgICAgICAgIHdy
YXBGdW5jdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lCi0gICAgICAgICAgICAgKiBA
cGFyYW0ge0Z1bmN0aW9ufSByZXNvdXJjZUNvbnN0cnVjdG9yCi0gICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKG1ldGhvZE5hbWUs
IHJlc291cmNlQ29uc3RydWN0b3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyoq
IEB0aGlzIFJlc291cmNlLldyYXBGdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgIHdyYXBGdW5j
dGlvbnNbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgd3JhcHBlZE9iamVjdCA9IHRoaXMucmVzdWx0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghd3JhcHBlZE9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlID0gbmV3IHJlc291cmNl
Q29uc3RydWN0b3Iod3JhcHBlZE9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYW5h
Z2VyID0gdGhpcy5fcmVzb3VyY2UubWFuYWdlcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
bWFuYWdlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXIucmVnaXN0ZXJSZXNvdXJj
ZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVSZXN1bHQocmVz
b3VyY2UucHJveHlPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnB1c2hD
YWxsKHRoaXMuY2FsbCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjcmVhdGVSZXNvdXJjZVdyYXBGdW5jdGlvbigiY3JlYXRlQnVmZmVyIiwgV2ViR0xC
dWZmZXJSZXNvdXJjZSk7Ci0gICAgICAgICAgICBjcmVhdGVSZXNvdXJjZVdyYXBGdW5jdGlvbigi
Y3JlYXRlU2hhZGVyIiwgV2ViR0xTaGFkZXJSZXNvdXJjZSk7Ci0gICAgICAgICAgICBjcmVhdGVS
ZXNvdXJjZVdyYXBGdW5jdGlvbigiY3JlYXRlUHJvZ3JhbSIsIFdlYkdMUHJvZ3JhbVJlc291cmNl
KTsKLSAgICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVUZXh0dXJl
IiwgV2ViR0xUZXh0dXJlUmVzb3VyY2UpOwotICAgICAgICAgICAgY3JlYXRlUmVzb3VyY2VXcmFw
RnVuY3Rpb24oImNyZWF0ZUZyYW1lYnVmZmVyIiwgV2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlKTsK
LSAgICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVSZW5kZXJidWZm
ZXIiLCBXZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNlKTsKLSAgICAgICAgICAgIGNyZWF0ZVJlc291
cmNlV3JhcEZ1bmN0aW9uKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBSZXNvdXJjZSk7Ci0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUKLSAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgZnVuY3Rpb24gY3VzdG9tV3JhcEZ1bmN0aW9uKG1l
dGhvZE5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGN1c3RvbVB1c2hD
YWxsID0gInB1c2hDYWxsXyIgKyBtZXRob2ROYW1lOwotICAgICAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gdGFyZ2V0Ci0gICAgICAgICAg
ICAgICAgICogQHRoaXMgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICAgICAgd3JhcEZ1bmN0aW9uc1ttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKHRh
cmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXNvdXJj
ZSA9IHRoaXMuX3Jlc291cmNlLmN1cnJlbnRCaW5kaW5nKHRhcmdldCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZVtjdXN0b21QdXNoQ2FsbF0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXNvdXJjZVtjdXN0b21QdXNoQ2FsbF0uY2FsbChyZXNvdXJjZSwg
dGhpcy5jYWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXNvdXJjZS5wdXNoQ2FsbCh0aGlzLmNhbGwoKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJhdHRhY2hT
aGFkZXIiKTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiYmluZEF0dHJpYkxvY2F0
aW9uIik7Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oImNvbXBpbGVTaGFkZXIiKTsK
LSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiZGV0YWNoU2hhZGVyIik7Ci0gICAgICAg
ICAgICBjdXN0b21XcmFwRnVuY3Rpb24oImxpbmtQcm9ncmFtIik7Ci0gICAgICAgICAgICBjdXN0
b21XcmFwRnVuY3Rpb24oInNoYWRlclNvdXJjZSIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1
bmN0aW9uKCJidWZmZXJEYXRhIik7Ci0gICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oImJ1
ZmZlclN1YkRhdGEiKTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29tcHJlc3Nl
ZFRleEltYWdlMkQiKTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQiKTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29weVRl
eEltYWdlMkQiKTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29weVRleFN1Yklt
YWdlMkQiKTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiZ2VuZXJhdGVNaXBtYXAi
KTsKLSAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigidGV4SW1hZ2UyRCIpOwotICAgICAg
ICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJ0ZXhTdWJJbWFnZTJEIik7Ci0gICAgICAgICAgICBj
dXN0b21XcmFwRnVuY3Rpb24oInRleFBhcmFtZXRlcmYiKTsKLSAgICAgICAgICAgIGN1c3RvbVdy
YXBGdW5jdGlvbigidGV4UGFyYW1ldGVyaSIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0
aW9uKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1
bmN0aW9uKCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIpOwotICAgICAgICAgICAgY3VzdG9tV3JhcEZ1
bmN0aW9uKCJyZW5kZXJidWZmZXJTdG9yYWdlIik7Ci0KLSAgICAgICAgICAgIC8qKiBAdGhpcyBS
ZXNvdXJjZS5XcmFwRnVuY3Rpb24gKi8KLSAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbImdldEVy
cm9yIl0gPSBmdW5jdGlvbigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGds
ID0gdGhpcy5fb3JpZ2luYWxPYmplY3Q7Ci0gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdGhp
cy5yZXN1bHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IGdsLk5PX0VSUk9SKQot
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZS5jbGVhckVycm9yKGVycm9yKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLl9y
ZXNvdXJjZS5uZXh0RXJyb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSBn
bC5OT19FUlJPUikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVSZXN1bHQo
ZXJyb3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuX3dyYXBGdW5jdGlvbnMgPSB3cmFwRnVuY3Rp
b25zOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB3cmFwRnVuY3Rpb25zOwotICAgIH0KLX0K
LQotV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UucHJvdG90eXBlLl9fcHJvdG9fXyA9IFJl
c291cmNlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24g
VHJhY2VMb2coKQotewotICAgIHRoaXMuX3JlcGxheWFibGVDYWxscyA9IFtdOwotICAgIHRoaXMu
X3JlcGxheWFibGVzQ2FjaGUgPSBuZXcgQ2FjaGUoKTsKLX0KLQotVHJhY2VMb2cucHJvdG90eXBl
ID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBzaXpl
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcmVwbGF5YWJsZUNhbGxz
Lmxlbmd0aDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7QXJyYXkuPFJlcGxh
eWFibGVDYWxsPn0KLSAgICAgKi8KLSAgICByZXBsYXlhYmxlQ2FsbHM6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXBsYXlhYmxlQ2FsbHM7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNlCi0gICAgICovCi0gICAgY2Fw
dHVyZVJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJlc291cmNl
LnRvUmVwbGF5YWJsZSh0aGlzLl9yZXBsYXlhYmxlc0NhY2hlKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCi0gICAgICovCi0gICAgYWRkQ2FsbDogZnVuY3Rp
b24oY2FsbCkKLSAgICB7Ci0gICAgICAgIHZhciByZXMgPSBSZXNvdXJjZS5mb3JPYmplY3QoY2Fs
bC5yZXN1bHQoKSk7Ci0gICAgICAgIGlmIChyZXMpCi0gICAgICAgICAgICB0aGlzLmNhcHR1cmVS
ZXNvdXJjZShyZXMpOwotICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX3JlcGxheWFibGVzQ2FjaGUu
c2l6ZSgpOwotICAgICAgICB0aGlzLl9yZXBsYXlhYmxlQ2FsbHMucHVzaChjYWxsLnRvUmVwbGF5
YWJsZSh0aGlzLl9yZXBsYXlhYmxlc0NhY2hlKSk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRo
aXMuX3JlcGxheWFibGVzQ2FjaGUuc2l6ZSgpID09PSBzaXplLCAiSW50ZXJuYWwgZXJyb3I6IFdl
IHNob3VsZCBoYXZlIGNhcHR1cmVkIGFsbCB0aGUgcmVzb3VyY2VzIGFscmVhZHkgYnkgdGhpcyB0
aW1lLiIpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7VHJh
Y2VMb2d9IHRyYWNlTG9nCi0gKi8KLWZ1bmN0aW9uIFRyYWNlTG9nUGxheWVyKHRyYWNlTG9nKQot
ewotICAgIHRoaXMuX3RyYWNlTG9nID0gdHJhY2VMb2c7Ci0gICAgdGhpcy5fbmV4dFJlcGxheVN0
ZXAgPSAwOwotICAgIHRoaXMuX3JlcGxheVdvcmxkQ2FjaGUgPSBuZXcgQ2FjaGUoKTsKLX0KLQot
VHJhY2VMb2dQbGF5ZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1Ry
YWNlTG9nfQotICAgICAqLwotICAgIHRyYWNlTG9nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fdHJhY2VMb2c7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBuZXh0UmVwbGF5U3RlcDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25leHRSZXBsYXlTdGVwOwotICAgIH0sCi0KLSAgICBy
ZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFByZXZlbnQgbWVtb3J5
IGxlYWtzOiBkZXRhY2ggYW5kIGRlbGV0ZSBhbGwgb2xkIHJlc291cmNlcyBPUiByZXVzZSB0aGVt
IE9SIGNyZWF0ZSBhIG5ldyByZXBsYXkgY2FudmFzIGV2ZXJ5IHRpbWUuCi0gICAgICAgIHRoaXMu
X25leHRSZXBsYXlTdGVwID0gMDsKLSAgICAgICAgdGhpcy5fcmVwbGF5V29ybGRDYWNoZS5yZXNl
dCgpOwotICAgIH0sCi0KLSAgICBzdGVwOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
LnN0ZXBUbyh0aGlzLl9uZXh0UmVwbGF5U3RlcCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBzdGVwTnVtCi0gICAgICovCi0gICAgc3RlcFRvOiBmdW5jdGlvbihz
dGVwTnVtKQotICAgIHsKLSAgICAgICAgc3RlcE51bSA9IE1hdGgubWluKHN0ZXBOdW0sIHRoaXMu
X3RyYWNlTG9nLnNpemUoKSAtIDEpOwotICAgICAgICBjb25zb2xlLmFzc2VydChzdGVwTnVtID49
IDApOwotICAgICAgICBpZiAodGhpcy5fbmV4dFJlcGxheVN0ZXAgPiBzdGVwTnVtKQotICAgICAg
ICAgICAgdGhpcy5yZXNldCgpOwotICAgICAgICAvLyBGSVhNRTogUmVwbGF5IGFsbCB0aGUgY2Fj
aGVkIHJlc291cmNlcyBmaXJzdCB0byB3YXJtLXVwLgotICAgICAgICB2YXIgcmVwbGF5YWJsZUNh
bGxzID0gdGhpcy5fdHJhY2VMb2cucmVwbGF5YWJsZUNhbGxzKCk7Ci0gICAgICAgIHdoaWxlICh0
aGlzLl9uZXh0UmVwbGF5U3RlcCA8PSBzdGVwTnVtKQotICAgICAgICAgICAgcmVwbGF5YWJsZUNh
bGxzW3RoaXMuX25leHRSZXBsYXlTdGVwKytdLnJlcGxheSh0aGlzLl9yZXBsYXlXb3JsZENhY2hl
KTsKLSAgICB9LAotCi0gICAgcmVwbGF5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
LnN0ZXBUbyh0aGlzLl90cmFjZUxvZy5zaXplKCkgLSAxKTsKLSAgICB9Ci19Ci0KLS8qKgotICog
QGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCkKLXsK
LSAgICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKLSAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25G
cmFtZUVuZCA9IGZhbHNlOwotICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG51bGw7Ci19Ci0KLVJl
c291cmNlVHJhY2tpbmdNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGNhcHR1cmluZzogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmluZzsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7VHJhY2VMb2d9Ci0gICAgICovCi0gICAgbGFzdFRyYWNlTG9nOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFRyYWNlTG9nOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1Jlc291cmNlfSByZXNvdXJjZQotICAgICAqLwotICAg
IHJlZ2lzdGVyUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQotICAgIHsKLSAgICAgICAgcmVz
b3VyY2Uuc2V0TWFuYWdlcih0aGlzKTsKLSAgICB9LAotCi0gICAgc3RhcnRDYXB0dXJpbmc6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQotICAgICAgICAg
ICAgdGhpcy5fbGFzdFRyYWNlTG9nID0gbmV3IFRyYWNlTG9nKCk7Ci0gICAgICAgIHRoaXMuX2Nh
cHR1cmluZyA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0g
ZmFsc2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7VHJhY2VMb2c9fSB0cmFj
ZUxvZwotICAgICAqLwotICAgIHN0b3BDYXB0dXJpbmc6IGZ1bmN0aW9uKHRyYWNlTG9nKQotICAg
IHsKLSAgICAgICAgaWYgKHRyYWNlTG9nICYmIHRoaXMuX2xhc3RUcmFjZUxvZyAhPT0gdHJhY2VM
b2cpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IGZhbHNl
OwotICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOwotICAgIH0s
Ci0KLSAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xh
c3RUcmFjZUxvZyA9IG5ldyBUcmFjZUxvZygpOwotICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0
cnVlOwotICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IHRydWU7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNlCi0gICAgICog
QHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IGFyZ3MKLSAgICAgKi8KLSAgICBjYXB0dXJlQXJndW1l
bnRzOiBmdW5jdGlvbihyZXNvdXJjZSwgYXJncykKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
Y2FwdHVyaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9sYXN0VHJhY2VM
b2cuY2FwdHVyZVJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4g
PSBhcmdzLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgdmFyIHJlcyA9IFJlc291
cmNlLmZvck9iamVjdChhcmdzW2ldKTsKLSAgICAgICAgICAgIGlmIChyZXMpCi0gICAgICAgICAg
ICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nLmNhcHR1cmVSZXNvdXJjZShyZXMpOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAotICAgICAqLwot
ICAgIHJlcG9ydENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMu
X2NhcHR1cmluZykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fbGFzdFRyYWNl
TG9nLmFkZENhbGwoY2FsbCk7Ci0gICAgICAgIGlmICh0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFt
ZUVuZCAmJiB0aGlzLl9sYXN0VHJhY2VMb2cuc2l6ZSgpID09PSAxKSB7Ci0gICAgICAgICAgICB0
aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5f
c2V0WmVyb1RpbWVvdXRzKHRoaXMuc3RvcENhcHR1cmluZy5iaW5kKHRoaXMsIHRoaXMuX2xhc3RU
cmFjZUxvZykpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgICovCi0gICAgX3NldFplcm9UaW1lb3V0czogZnVuY3Rp
b24oY2FsbGJhY2spCi0gICAgewotICAgICAgICAvLyBXZSBuZWVkIGEgZmFzdGVzdCBhc3luYyBj
YWxsYmFjaywgd2hhdGV2ZXIgZmlyZXMgZmlyc3QuCi0gICAgICAgIC8vIFVzdWFsbHkgYSBwb3N0
TWVzc2FnZSBzaG91bGQgYmUgZmFzdGVyIHRoYW4gYSBzZXRUaW1lb3V0KDApLgotICAgICAgICB2
YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwotICAgICAgICBjaGFubmVsLnBvcnQx
Lm9ubWVzc2FnZSA9IGNhbGxiYWNrOwotICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdl
KCIiKTsKLSAgICAgICAgaW5zcGVjdGVkV2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDApOwot
ICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotdmFyIEluamVjdGVkU2NyaXB0
ID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuX21hbmFnZXIgPSBuZXcgUmVzb3VyY2VUcmFja2lu
Z01hbmFnZXIoKTsKLSAgICB0aGlzLl9sYXN0VHJhY2VMb2dJZCA9IDA7Ci0gICAgdGhpcy5fdHJh
Y2VMb2dzID0ge307Ci0gICAgdGhpcy5fdHJhY2VMb2dQbGF5ZXIgPSBudWxsOwotICAgIHRoaXMu
X3JlcGxheUNvbnRleHQgPSBudWxsOwotfQotCi1JbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsQ29udGV4
dAotICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICB3cmFwV2ViR0xDb250ZXh0
OiBmdW5jdGlvbihnbENvbnRleHQpCi0gICAgewotICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXNv
dXJjZS5mb3JPYmplY3QoZ2xDb250ZXh0KSB8fCBuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
b3VyY2UoZ2xDb250ZXh0LCB0aGlzLl9jb25zdHJ1Y3RXZWJHTFJlcGxheUNvbnRleHQuYmluZCh0
aGlzLCBnbENvbnRleHQpKTsKLSAgICAgICAgdGhpcy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNl
KHJlc291cmNlKTsKLSAgICAgICAgdmFyIHByb3h5ID0gcmVzb3VyY2UucHJveHlPYmplY3QoKTsK
LSAgICAgICAgcmV0dXJuIHByb3h5OwotICAgIH0sCi0KLSAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBpZCA9IHRoaXMuX21ha2VUcmFjZUxvZ0lkKCk7Ci0g
ICAgICAgIHRoaXMuX21hbmFnZXIuY2FwdHVyZUZyYW1lKCk7Ci0gICAgICAgIHRoaXMuX3RyYWNl
TG9nc1tpZF0gPSB0aGlzLl9tYW5hZ2VyLmxhc3RUcmFjZUxvZygpOwotICAgICAgICByZXR1cm4g
aWQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAotICAgICAq
LwotICAgIGRyb3BUcmFjZUxvZzogZnVuY3Rpb24oaWQpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fdHJhY2VMb2dQbGF5ZXIgJiYgdGhpcy5fdHJhY2VMb2dQbGF5ZXIudHJhY2VMb2coKSA9PT0g
dGhpcy5fdHJhY2VMb2dzW2lkXSkKLSAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nUGxheWVyID0g
bnVsbDsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3RyYWNlTG9nc1tpZF07Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAotICAgICAqIEByZXR1cm4ge09iamVjdHxz
dHJpbmd9Ci0gICAgICovCi0gICAgdHJhY2VMb2c6IGZ1bmN0aW9uKGlkKQotICAgIHsKLSAgICAg
ICAgdmFyIHRyYWNlTG9nID0gdGhpcy5fdHJhY2VMb2dzW2lkXTsKLSAgICAgICAgaWYgKCF0cmFj
ZUxvZykKLSAgICAgICAgICAgIHJldHVybiAiRXJyb3I6IFRyYWNlIGxvZyB3aXRoIHRoaXMgSUQg
bm90IGZvdW5kLiI7Ci0gICAgICAgIHZhciByZXN1bHQgPSB7Ci0gICAgICAgICAgICBpZDogaWQs
Ci0gICAgICAgICAgICBjYWxsczogW10KLSAgICAgICAgfTsKLSAgICAgICAgdmFyIGNhbGxzID0g
dHJhY2VMb2cucmVwbGF5YWJsZUNhbGxzKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0g
Y2FsbHMubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY2FsbCA9IGNhbGxz
W2ldOwotICAgICAgICAgICAgdmFyIGFyZ3MgPSBjYWxsLmFyZ3MoKS5tYXAoZnVuY3Rpb24oYXJn
dW1lbnQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQgKyAiIjsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgdmFyIHN0YWNrVHJhY2UgPSBjYWxsLnN0YWNrVHJhY2UoKTsK
LSAgICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBzdGFja1RyYWNlID8gc3RhY2tUcmFjZS5jYWxs
RnJhbWUoMCkgfHwge30gOiB7fTsKLSAgICAgICAgICAgIHZhciB0cmFjZUxvZ0l0ZW0gPSB7Ci0g
ICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBjYWxsLmZ1bmN0aW9uTmFtZSgpLAotICAgICAg
ICAgICAgICAgIGFyZ3VtZW50czogYXJncywKLSAgICAgICAgICAgICAgICBzb3VyY2VVUkw6IGNh
bGxGcmFtZS5zb3VyY2VVUkwsCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogY2FsbEZyYW1l
LmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBjYWxsRnJhbWUuY29s
dW1uTnVtYmVyCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgaWYgKGNhbGwucmVzdWx0KCkp
Ci0gICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLnJlc3VsdCA9IGNhbGwucmVzdWx0KCkgKyAi
IjsKLSAgICAgICAgICAgIHJlc3VsdC5jYWxscy5wdXNoKHRyYWNlTG9nSXRlbSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtzdHJpbmd9IGlkCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBObwotICAgICAqIEBy
ZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICByZXBsYXlUcmFjZUxvZzogZnVuY3Rpb24oaWQs
IHN0ZXBObykKLSAgICB7Ci0gICAgICAgIHZhciB0cmFjZUxvZyA9IHRoaXMuX3RyYWNlTG9nc1tp
ZF07Ci0gICAgICAgIGlmICghdHJhY2VMb2cpCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAg
ICAgIGlmICghdGhpcy5fdHJhY2VMb2dQbGF5ZXIgfHwgdGhpcy5fdHJhY2VMb2dQbGF5ZXIudHJh
Y2VMb2coKSAhPT0gdHJhY2VMb2cpCi0gICAgICAgICAgICB0aGlzLl90cmFjZUxvZ1BsYXllciA9
IG5ldyBUcmFjZUxvZ1BsYXllcih0cmFjZUxvZyk7Ci0gICAgICAgIHRoaXMuX3RyYWNlTG9nUGxh
eWVyLnN0ZXBUbyhzdGVwTm8pOwotICAgICAgICBpZiAoIXRoaXMuX3JlcGxheUNvbnRleHQpIHsK
LSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogcmVwbGF5VHJh
Y2VMb2cgZmFpbGVkIHRvIGNyZWF0ZSBhIHJlcGxheSBjYW52YXM/ISIpOwotICAgICAgICAgICAg
cmV0dXJuICIiOwotICAgICAgICB9Ci0gICAgICAgIC8vIFJldHVybiBjdXJyZW50IHNjcmVlbnNo
b3QuCi0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IHJlcGxheWluZyBzZXZlcmFsIGNhbnZhc2Vz
IHNpbXVsdGFuZW91c2x5LgotICAgICAgICByZXR1cm4gdGhpcy5fcmVwbGF5Q29udGV4dC5jYW52
YXMudG9EYXRhVVJMKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmlu
Z30KLSAgICAgKi8KLSAgICBfbWFrZVRyYWNlTG9nSWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsg
IixcInRyYWNlTG9nSWRcIjoiICsgKCsrdGhpcy5fbGFzdFRyYWNlTG9nSWQpICsgIn0iOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gb3Jp
Z2luYWxHbENvbnRleHQKLSAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9Ci0g
ICAgICovCi0gICAgX2NvbnN0cnVjdFdlYkdMUmVwbGF5Q29udGV4dDogZnVuY3Rpb24ob3JpZ2lu
YWxHbENvbnRleHQpCi0gICAgewotICAgICAgICB2YXIgcmVwbGF5Q29udGV4dCA9IG9yaWdpbmFs
R2xDb250ZXh0WyJfX3JlcGxheUNvbnRleHQiXTsKLSAgICAgICAgaWYgKCFyZXBsYXlDb250ZXh0
KSB7Ci0gICAgICAgICAgICB2YXIgY2FudmFzID0gb3JpZ2luYWxHbENvbnRleHQuY2FudmFzLmNs
b25lTm9kZSh0cnVlKTsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gb3JpZ2luYWxHbENv
bnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgIHZhciBjb250ZXh0SWRz
ID0gWyJleHBlcmltZW50YWwtd2ViZ2wiLCAid2Via2l0LTNkIiwgIjNkIl07Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMCwgY29udGV4dElkOyBjb250ZXh0SWQgPSBjb250ZXh0SWRzW2ldOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICByZXBsYXlDb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQo
Y29udGV4dElkLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGF5Q29udGV4
dCkgewotICAgICAgICAgICAgICAgICAgICByZXBsYXlDb250ZXh0ID0gLyoqIEB0eXBlIHtXZWJH
TFJlbmRlcmluZ0NvbnRleHR9ICovIFJlc291cmNlLndyYXBwZWRPYmplY3QocmVwbGF5Q29udGV4
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcmlnaW5hbEdsQ29u
dGV4dCwgIl9fcmVwbGF5Q29udGV4dCIsIHsKLSAgICAgICAgICAgICAgICB2YWx1ZTogcmVwbGF5
Q29udGV4dCwKLSAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCi0gICAgICAgICAgICAg
ICAgZW51bWVyYWJsZTogZmFsc2UsCi0gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHRoaXMuX3JlcGxheUNvbnRleHQgPSByZXBs
YXlDb250ZXh0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IFJlc2V0
IHRoZSByZXBsYXkgR0wgc3RhdGUgYW5kIGNsZWFyIHRoZSBjYW52YXMuCi0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHJlcGxheUNvbnRleHQ7Ci0gICAgfQotfQotCi12YXIgaW5qZWN0ZWRTY3Jp
cHQgPSBuZXcgSW5qZWN0ZWRTY3JpcHQoKTsKLXJldHVybiBpbmplY3RlZFNjcmlwdDsKLQotfSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdM
TW9kdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdM
TW9kdWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTNiZTkyMTQ0ZmJkN2U3Y2Y0YTBiZGI0MGI5OWE0ZGYw
NGE0ZDAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGUuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVk
ZSAiSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oIgorCisjaW5jbHVkZSAiSW5qZWN0ZWRTY3Jp
cHQuaCIKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKKyNpbmNsdWRlICJJbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25D
YWxsLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZTo6SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSgp
CisgICAgOiBJbmplY3RlZFNjcmlwdE1vZHVsZSgiSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSIp
Cit7Cit9CisKK0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUgSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZTo6bW9kdWxlRm9yU3RhdGUoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlw
dE1hbmFnZXIsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKK3sKKyAgICBJbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlIHJlc3VsdDsKKyAgICByZXN1bHQuZW5zdXJlSW5qZWN0ZWQoaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLCBzY3JpcHRTdGF0ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3Ry
aW5nIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGU6OnNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihJbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlU291cmNlX2pzKSwgc2l6ZW9mKEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2VfanMpKTsKK30KKworU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGU6Ondy
YXBXZWJHTENvbnRleHQoY29uc3QgU2NyaXB0T2JqZWN0JiBnbENvbnRleHQpCit7CisgICAgU2Ny
aXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJ3cmFwV2Vi
R0xDb250ZXh0Iik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZ2xDb250ZXh0KTsKKyAg
ICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOworICAgIFNjcmlwdFZhbHVlIHJlc3VsdFZhbHVl
ID0gY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRFeGNlcHRpb24pOwor
ICAgIGlmIChoYWRFeGNlcHRpb24gfHwgcmVzdWx0VmFsdWUuaGFzTm9WYWx1ZSgpIHx8ICFyZXN1
bHRWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CisgICAgfQorICAgIHJldHVybiBTY3JpcHRPYmpl
Y3QoZ2xDb250ZXh0LnNjcmlwdFN0YXRlKCksIHJlc3VsdFZhbHVlKTsKK30KKwordm9pZCBJbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlOjpjYXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBTdHJpbmcqIHRyYWNlTG9nSWQpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0
aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJjYXB0dXJlRnJhbWUiKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHJlc3VsdFZhbHVlOworICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVz
dWx0VmFsdWUpOworICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAh
PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZVN0cmluZyB8fCAhcmVzdWx0VmFsdWUtPmFzU3RyaW5nKHRy
YWNlTG9nSWQpKQorICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGNhcHR1
cmVGcmFtZSI7Cit9CisKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZTo6ZHJvcFRyYWNl
TG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkKQor
eworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgp
LCAiZHJvcFRyYWNlTG9nIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodHJhY2VMb2dJ
ZCk7CisgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBjYWxsRnVuY3Rpb25XaXRo
RXZhbEVuYWJsZWQoZnVuY3Rpb24sIGhhZEV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFoYWRFeGNl
cHRpb24pOworICAgIGlmIChoYWRFeGNlcHRpb24pCisgICAgICAgICplcnJvclN0cmluZyA9ICJJ
bnRlcm5hbCBlcnJvcjogZHJvcFRyYWNlTG9nIjsKK30KKwordm9pZCBJbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlOjp0cmFjZUxvZyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdHJhY2VMb2dJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpXZWJHTDo6VHJhY2VMb2c+KiB0cmFj
ZUxvZykKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRP
YmplY3QoKSwgInRyYWNlTG9nIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodHJhY2VM
b2dJZCk7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsKKyAgICBtYWtl
Q2FsbChmdW5jdGlvbiwgJnJlc3VsdFZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJl
c3VsdFZhbHVlLT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3QpIHsKKyAgICAg
ICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpKQorICAgICAgICAgICAg
KmVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiB0cmFjZUxvZyI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgKnRyYWNlTG9nID0gVHlwZUJ1aWxkZXI6OldlYkdMOjpUcmFjZUxvZzo6
cnVudGltZUNhc3QocmVzdWx0VmFsdWUpOworfQorCit2b2lkIEluamVjdGVkU2NyaXB0V2ViR0xN
b2R1bGU6OnJlcGxheVRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB0cmFjZUxvZ0lkLCBpbnQgc3RlcE5vLCBTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICBTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgInJlcGxheVRy
YWNlTG9nIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodHJhY2VMb2dJZCk7CisgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3RlcE5vKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHJlc3VsdFZhbHVlOworICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0VmFsdWUpOwor
ICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBJbnNwZWN0b3JW
YWx1ZTo6VHlwZVN0cmluZyB8fCAhcmVzdWx0VmFsdWUtPmFzU3RyaW5nKHJlc3VsdCkpCisgICAg
ICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVwbGF5VHJhY2VMb2ciOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSAm
JiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0V2ViR0xNb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmY4NTdmZDg5OWZjMzkwZTBjZTc5
YzMxNWEwZTBkNDBjYmUxMGE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUuaApAQCAtMCwwICsxLDY0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlX2gKKyNkZWZpbmUgSW5qZWN0ZWRTY3JpcHRXZWJH
TE1vZHVsZV9oCisKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1vZHVsZS5oIgorI2luY2x1ZGUg
IlNjcmlwdFN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOworY2xhc3MgU2Ny
aXB0T2JqZWN0OworCisjaWYgRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKFdFQkdMKQorCitj
bGFzcyBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlIDogcHVibGljIEluamVjdGVkU2NyaXB0TW9k
dWxlIHsKK3B1YmxpYzoKKyAgICBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlKCk7CisgICAgCisg
ICAgdmlydHVhbCBTdHJpbmcgc291cmNlKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZSBtb2R1bGVGb3JTdGF0ZShJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBT
Y3JpcHRTdGF0ZSopOworCisgICAgU2NyaXB0T2JqZWN0IHdyYXBXZWJHTENvbnRleHQoY29uc3Qg
U2NyaXB0T2JqZWN0JiBnbENvbnRleHQpOworICAgIHZvaWQgY2FwdHVyZUZyYW1lKEVycm9yU3Ry
aW5nKiwgU3RyaW5nKik7CisgICAgdm9pZCBkcm9wVHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHRyYWNlTG9nKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpXZWJHTDo6VHJhY2VMb2c+Kik7CisgICAgdm9pZCByZXBs
YXlUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYsIGludCwgU3RyaW5nKik7Cit9
OworCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291
cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1
bGVTb3VyY2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjc4MGFmM2M0MTUyNWM5OGU3NmJkYjgwMzU3MGVlYzNi
OGNiNzdiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzCkBAIC0wLDAgKzEsMjExMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICog
QHBhcmFtIHtJbmplY3RlZFNjcmlwdEhvc3R9IEluamVjdGVkU2NyaXB0SG9zdAorICogQHBhcmFt
IHtXaW5kb3d9IGluc3BlY3RlZFdpbmRvdworICogQHBhcmFtIHtudW1iZXJ9IGluamVjdGVkU2Ny
aXB0SWQKKyAqLworKGZ1bmN0aW9uIChJbmplY3RlZFNjcmlwdEhvc3QsIGluc3BlY3RlZFdpbmRv
dywgaW5qZWN0ZWRTY3JpcHRJZCkgeworCit2YXIgVHlwZVV0aWxzID0geworICAgIC8qKgorICAg
ICAqIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvdHlwZWRhcnJheS9zcGVjcy9sYXRl
c3QvIzcKKyAgICAgKiBAdHlwZSB7QXJyYXkuPEZ1bmN0aW9uPn0KKyAgICAgKi8KKyAgICBfdHlw
ZWRBcnJheUNsYXNzZXM6IChmdW5jdGlvbih0eXBlTmFtZXMpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGVOYW1lcy5sZW5ndGg7IGkg
PCBuOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpbnNwZWN0ZWRXaW5kb3dbdHlwZU5hbWVzW2ld
XSkKKyAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbnNwZWN0ZWRXaW5kb3dbdHlwZU5hbWVz
W2ldXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9KShbIkludDhB
cnJheSIsICJVaW50OEFycmF5IiwgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgIkludDE2QXJyYXkiLCAi
VWludDE2QXJyYXkiLCAiSW50MzJBcnJheSIsICJVaW50MzJBcnJheSIsICJGbG9hdDMyQXJyYXki
LCAiRmxvYXQ2NEFycmF5Il0pLAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHsqfSBhcnJheQor
ICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufQorICAgICAqLworICAgIHR5cGVkQXJyYXlDbGFzczog
ZnVuY3Rpb24oYXJyYXkpCisgICAgeworICAgICAgICB2YXIgY2xhc3NlcyA9IFR5cGVVdGlscy5f
dHlwZWRBcnJheUNsYXNzZXM7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2xhc3Nlcy5s
ZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhcnJheSBpbnN0YW5jZW9mIGNs
YXNzZXNbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzZXNbaV07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
Kn0gb2JqCisgICAgICogQHJldHVybiB7Kn0KKyAgICAgKiBGSVhNRTogc3VwcHJlc3MgY2hlY2tU
eXBlcyBkdWUgdG8gb3V0ZGF0ZWQgYnVpbHRpbiBleHRlcm5zIGZvciBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQgYW5kIEltYWdlRGF0YQorICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30KKyAg
ICAgKi8KKyAgICBjbG9uZTogZnVuY3Rpb24ob2JqKQorICAgIHsKKyAgICAgICAgaWYgKCFvYmop
CisgICAgICAgICAgICByZXR1cm4gb2JqOworCisgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9i
ajsKKyAgICAgICAgaWYgKHR5cGUgIT09ICJvYmplY3QiICYmIHR5cGUgIT09ICJmdW5jdGlvbiIp
CisgICAgICAgICAgICByZXR1cm4gb2JqOworCisgICAgICAgIC8vIEhhbmRsZSBBcnJheSBhbmQg
QXJyYXlCdWZmZXIgaW5zdGFuY2VzLgorICAgICAgICBpZiAodHlwZW9mIG9iai5zbGljZSA9PT0g
ImZ1bmN0aW9uIikgeworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQob2JqIGluc3RhbmNlb2Yg
QXJyYXkgfHwgb2JqIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgcmV0dXJu
IG9iai5zbGljZSgwKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0eXBlZEFycmF5Q2xhc3Mg
PSBUeXBlVXRpbHMudHlwZWRBcnJheUNsYXNzKG9iaik7CisgICAgICAgIGlmICh0eXBlZEFycmF5
Q2xhc3MpCisgICAgICAgICAgICByZXR1cm4gbmV3IHR5cGVkQXJyYXlDbGFzcyhvYmopOworCisg
ICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuIG9iai5jbG9uZU5vZGUodHJ1ZSk7CisKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9m
IEhUTUxDYW52YXNFbGVtZW50KSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JqLmNsb25l
Tm9kZSh0cnVlKTsKKyAgICAgICAgICAgIHZhciBjb250ZXh0ID0gUmVzb3VyY2Uud3JhcHBlZE9i
amVjdChyZXN1bHQuZ2V0Q29udGV4dCgiMmQiKSk7CisgICAgICAgICAgICBjb250ZXh0LmRyYXdJ
bWFnZShvYmosIDAsIDApOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7CisgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gb2JqLmNsb25lTm9kZSh0cnVlKTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBDb3B5IEhUTUxWaWRlb0VsZW1lbnQncyBjdXJyZW50IGltYWdlIGludG8gYSAyZCBjYW52
YXMuCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG9iaiBpbnN0YW5jZW9mIEltYWdlRGF0YSkgeworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBU
eXBlVXRpbHMuX2R1bW15Q2FudmFzMmRDb250ZXh0KCk7CisgICAgICAgICAgICB2YXIgcmVzdWx0
ID0gY29udGV4dC5jcmVhdGVJbWFnZURhdGEob2JqKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwLCBuID0gb2JqLmRhdGEubGVuZ3RoOyBpIDwgbjsgKytpKQorICAgICAgICAgICAgICByZXN1
bHQuZGF0YVtpXSA9IG9iai5kYXRhW2ldOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogZmFp
bGVkIHRvIGNsb25lIG9iamVjdDogIiwgb2JqKTsKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfQor
ICAgICAqLworICAgIF9kdW1teUNhbnZhczJkQ29udGV4dDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGNvbnRleHQgPSBUeXBlVXRpbHMuX2R1bW15Q2FudmFzMmRDb250ZXh0SW5zdGFu
Y2U7CisgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGlu
c3BlY3RlZFdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQgPSAvKiogQHR5cGUge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gKi8gUmVz
b3VyY2Uud3JhcHBlZE9iamVjdChjYW52YXMuZ2V0Q29udGV4dCgiMmQiKSk7CisgICAgICAgICAg
ICBUeXBlVXRpbHMuX2R1bW15Q2FudmFzMmRDb250ZXh0SW5zdGFuY2UgPSBjb250ZXh0OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBjb250ZXh0OworICAgIH0KK30KKworLyoqCisgKiBAaW50
ZXJmYWNlCisgKi8KK2Z1bmN0aW9uIFN0YWNrVHJhY2UoKQoreworfQorCitTdGFja1RyYWNlLnBy
b3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKKyAgICAg
KiBAcmV0dXJuIHt7c291cmNlVVJMOiBzdHJpbmcsIGxpbmVOdW1iZXI6IG51bWJlciwgY29sdW1u
TnVtYmVyOiBudW1iZXJ9fQorICAgICAqLworICAgIGNhbGxGcmFtZTogZnVuY3Rpb24oaW5kZXgp
CisgICAgeworICAgIH0KK30KKworLyoqCisgKiBAcGFyYW0ge251bWJlcj19IHN0YWNrVHJhY2VM
aW1pdAorICogQHBhcmFtIHtGdW5jdGlvbj19IHRvcE1vc3RGdW5jdGlvblRvSWdub3JlCisgKiBA
cmV0dXJuIHtTdGFja1RyYWNlfQorICovCitTdGFja1RyYWNlLmNyZWF0ZSA9IGZ1bmN0aW9uKHN0
YWNrVHJhY2VMaW1pdCwgdG9wTW9zdEZ1bmN0aW9uVG9JZ25vcmUpCit7CisgICAgaWYgKHR5cGVv
ZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgcmV0dXJu
IG5ldyBTdGFja1RyYWNlVjgoc3RhY2tUcmFjZUxpbWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9y
ZSB8fCBhcmd1bWVudHMuY2FsbGVlKTsKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBKU0MsIGFuZCBt
YXliZSBvdGhlciBicm93c2Vycy4KKyAgICByZXR1cm4gbnVsbDsKK30KKworLyoqCisgKiBAY29u
c3RydWN0b3IKKyAqIEBpbXBsZW1lbnRzIHtTdGFja1RyYWNlfQorICogQHBhcmFtIHtudW1iZXI9
fSBzdGFja1RyYWNlTGltaXQKKyAqIEBwYXJhbSB7RnVuY3Rpb249fSB0b3BNb3N0RnVuY3Rpb25U
b0lnbm9yZQorICogQHNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3Avdjgvd2lraS9KYXZhU2Ny
aXB0U3RhY2tUcmFjZUFwaQorICovCitmdW5jdGlvbiBTdGFja1RyYWNlVjgoc3RhY2tUcmFjZUxp
bWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9yZSkKK3sKKyAgICBTdGFja1RyYWNlLmNhbGwodGhp
cyk7CisgICAgdmFyIG9sZFN0YWNrVHJhY2VMaW1pdCA9IEVycm9yLnN0YWNrVHJhY2VMaW1pdDsK
KyAgICBpZiAodHlwZW9mIHN0YWNrVHJhY2VMaW1pdCA9PT0gIm51bWJlciIpCisgICAgICAgIEVy
cm9yLnN0YWNrVHJhY2VMaW1pdCA9IHN0YWNrVHJhY2VMaW1pdDsKKworICAgIHRoaXMuX2Vycm9y
ID0gLyoqIEB0eXBlIHt7c3RhY2s6IEFycmF5fX0gKi8ge307CisgICAgRXJyb3IuY2FwdHVyZVN0
YWNrVHJhY2UodGhpcy5fZXJyb3IsIHRvcE1vc3RGdW5jdGlvblRvSWdub3JlIHx8IGFyZ3VtZW50
cy5jYWxsZWUpOworCisgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gb2xkU3RhY2tUcmFjZUxp
bWl0OworfQorCitTdGFja1RyYWNlVjgucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBv
dmVycmlkZQorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAorICAgICAqIEByZXR1cm4ge3tz
b3VyY2VVUkw6IHN0cmluZywgbGluZU51bWJlcjogbnVtYmVyLCBjb2x1bW5OdW1iZXI6IG51bWJl
cn19CisgICAgICovCisgICAgY2FsbEZyYW1lOiBmdW5jdGlvbihpbmRleCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fc3RhY2tUcmFjZSkKKyAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTdGFj
a1RyYWNlKCk7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGFja1RyYWNlW2luZGV4XTsKKyAgICB9
LAorCisgICAgX3ByZXBhcmVTdGFja1RyYWNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2
YXIgb2xkUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlcnJvcgorICAgICAgICAgKiBAcGFy
YW0ge0FycmF5LjxDYWxsU2l0ZT59IHN0cnVjdHVyZWRTdGFja1RyYWNlCisgICAgICAgICAqIEBy
ZXR1cm4ge0FycmF5Ljx7c291cmNlVVJMOiBzdHJpbmcsIGxpbmVOdW1iZXI6IG51bWJlciwgY29s
dW1uTnVtYmVyOiBudW1iZXJ9Pn0KKyAgICAgICAgICovCisgICAgICAgIEVycm9yLnByZXBhcmVT
dGFja1RyYWNlID0gZnVuY3Rpb24oZXJyb3IsIHN0cnVjdHVyZWRTdGFja1RyYWNlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlZFN0YWNrVHJhY2UubWFwKGZ1bmN0aW9u
KGNhbGxTaXRlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg
ICAgc291cmNlVVJMOiBjYWxsU2l0ZS5nZXRGaWxlTmFtZSgpLAorICAgICAgICAgICAgICAgICAg
ICBsaW5lTnVtYmVyOiBjYWxsU2l0ZS5nZXRMaW5lTnVtYmVyKCksCisgICAgICAgICAgICAgICAg
ICAgIGNvbHVtbk51bWJlcjogY2FsbFNpdGUuZ2V0Q29sdW1uTnVtYmVyKCkKKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc3RhY2tU
cmFjZSA9IHRoaXMuX2Vycm9yLnN0YWNrOworICAgICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFj
ZSA9IG9sZFByZXBhcmVTdGFja1RyYWNlOworICAgICAgICBkZWxldGUgdGhpcy5fZXJyb3I7IC8v
IE5vIGxvbmdlciBuZWVkZWQsIGZyZWUgbWVtb3J5LgorICAgIH0KK30KKworU3RhY2tUcmFjZVY4
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBTdGFja1RyYWNlLnByb3RvdHlwZTsKKworLyoqCisgKiBA
Y29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gQ2FjaGUoKQoreworICAgIHRoaXMucmVzZXQoKTsK
K30KKworQ2FjaGUucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJl
cn0KKyAgICAgKi8KKyAgICBzaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fc2l6ZTsKKyAgICB9LAorCisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2l0ZW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKyAgICAgICAgdGhpcy5fc2l6
ZSA9IDA7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkKKyAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIGhhczogZnVuY3Rpb24oa2V5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtleSBpbiB0aGlzLl9pdGVtczsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGtleQorICAgICAqIEByZXR1cm4ge09iamVjdH0K
KyAgICAgKi8KKyAgICBnZXQ6IGZ1bmN0aW9uKGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9pdGVtc1trZXldOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJl
cn0ga2V5CisgICAgICogQHBhcmFtIHtPYmplY3R9IGl0ZW0KKyAgICAgKi8KKyAgICBwdXQ6IGZ1
bmN0aW9uKGtleSwgaXRlbSkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5oYXMoa2V5KSkKKyAg
ICAgICAgICAgICsrdGhpcy5fc2l6ZTsKKyAgICAgICAgdGhpcy5faXRlbXNba2V5XSA9IGl0ZW07
CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtSZXNvdXJjZXxP
YmplY3R9IHRoaXNPYmplY3QKKyAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKKyAqIEBw
YXJhbSB7QXJyYXl8QXJndW1lbnRzfSBhcmdzCisgKiBAcGFyYW0ge1Jlc291cmNlfCo9fSByZXN1
bHQKKyAqIEBwYXJhbSB7U3RhY2tUcmFjZT19IHN0YWNrVHJhY2UKKyAqLworZnVuY3Rpb24gQ2Fs
bCh0aGlzT2JqZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3MsIHJlc3VsdCwgc3RhY2tUcmFjZSkKK3sK
KyAgICB0aGlzLl90aGlzT2JqZWN0ID0gdGhpc09iamVjdDsKKyAgICB0aGlzLl9mdW5jdGlvbk5h
bWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGFyZ3MsIDApOworICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsKKyAgICB0aGlzLl9z
dGFja1RyYWNlID0gc3RhY2tUcmFjZSB8fCBudWxsOworfQorCitDYWxsLnByb3RvdHlwZSA9IHsK
KyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KKyAgICAgKi8KKyAgICByZXNvdXJj
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlLmZvck9iamVjdCh0
aGlzLl90aGlzT2JqZWN0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7c3Ry
aW5nfQorICAgICAqLworICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uTmFtZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHJldHVybiB7QXJyYXl9CisgICAgICovCisgICAgYXJnczogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2FyZ3M7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1
cm4geyp9CisgICAgICovCisgICAgcmVzdWx0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fcmVzdWx0OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtT
dGFja1RyYWNlfQorICAgICAqLworICAgIHN0YWNrVHJhY2U6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9zdGFja1RyYWNlOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge1N0YWNrVHJhY2V9IHN0YWNrVHJhY2UKKyAgICAgKi8KKyAgICBzZXRTdGFja1Ry
YWNlOiBmdW5jdGlvbihzdGFja1RyYWNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fc3RhY2tUcmFj
ZSA9IHN0YWNrVHJhY2U7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7Kn0gcmVz
dWx0CisgICAgICovCisgICAgc2V0UmVzdWx0OiBmdW5jdGlvbihyZXN1bHQpCisgICAgeworICAg
ICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7CisgICAgfSwKKworICAgIGZyZWV6ZTogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2ZyZWV6ZWQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHRoaXMuX2ZyZWV6ZWQgPSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0g
MCwgbiA9IHRoaXMuX2FyZ3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogZnJlZXplIHRoZSBSZXNvdXJjZXMgYWxzbyEKKyAgICAgICAgICAgIGlmICghUmVzb3Vy
Y2UuZm9yT2JqZWN0KHRoaXMuX2FyZ3NbaV0pKQorICAgICAgICAgICAgICAgIHRoaXMuX2FyZ3Nb
aV0gPSBUeXBlVXRpbHMuY2xvbmUodGhpcy5fYXJnc1tpXSk7CisgICAgICAgIH0KKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJuIHtS
ZXBsYXlhYmxlQ2FsbH0KKyAgICAgKi8KKyAgICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hl
KQorICAgIHsKKyAgICAgICAgdGhpcy5mcmVlemUoKTsKKyAgICAgICAgdmFyIHRoaXNPYmplY3Qg
PSAvKiogQHR5cGUge1JlcGxheWFibGVSZXNvdXJjZX0gKi8gUmVzb3VyY2UudG9SZXBsYXlhYmxl
KHRoaXMuX3RoaXNPYmplY3QsIGNhY2hlKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFJlc291cmNl
LnRvUmVwbGF5YWJsZSh0aGlzLl9yZXN1bHQsIGNhY2hlKTsKKyAgICAgICAgdmFyIGFyZ3MgPSB0
aGlzLl9hcmdzLm1hcChmdW5jdGlvbihvYmopIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNvdXJj
ZS50b1JlcGxheWFibGUob2JqLCBjYWNoZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
bmV3IFJlcGxheWFibGVDYWxsKHRoaXNPYmplY3QsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgYXJncywg
cmVzdWx0LCB0aGlzLl9zdGFja1RyYWNlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtSZXBsYXlhYmxlQ2FsbH0gcmVwbGF5YWJsZUNhbGwKKyAgICAgKiBAcGFyYW0ge0NhY2hl
fSBjYWNoZQorICAgICAqIEByZXR1cm4ge0NhbGx9CisgICAgICovCisgICAgcmVwbGF5OiBmdW5j
dGlvbihyZXBsYXlhYmxlQ2FsbCwgY2FjaGUpCisgICAgeworICAgICAgICB2YXIgcmVwbGF5T2Jq
ZWN0ID0gUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShyZXBsYXlhYmxlQ2FsbC5yZXNvdXJjZSgp
LCBjYWNoZSk7CisgICAgICAgIHZhciByZXBsYXlGdW5jdGlvbiA9IHJlcGxheU9iamVjdFtyZXBs
YXlhYmxlQ2FsbC5mdW5jdGlvbk5hbWUoKV07CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGVv
ZiByZXBsYXlGdW5jdGlvbiA9PT0gImZ1bmN0aW9uIiwgIkV4cGVjdGVkIGEgZnVuY3Rpb24gdG8g
cmVwbGF5Iik7CisgICAgICAgIHZhciByZXBsYXlBcmdzID0gcmVwbGF5YWJsZUNhbGwuYXJncygp
Lm1hcChmdW5jdGlvbihvYmopIHsKKyAgICAgICAgICAgIHJldHVybiBSZXBsYXlhYmxlUmVzb3Vy
Y2UucmVwbGF5KG9iaiwgY2FjaGUpOworICAgICAgICB9KTsKKyAgICAgICAgdmFyIHJlcGxheVJl
c3VsdCA9IHJlcGxheUZ1bmN0aW9uLmFwcGx5KHJlcGxheU9iamVjdCwgcmVwbGF5QXJncyk7Cisg
ICAgICAgIGlmIChyZXBsYXlhYmxlQ2FsbC5yZXN1bHQoKSBpbnN0YW5jZW9mIFJlcGxheWFibGVS
ZXNvdXJjZSkgeworICAgICAgICAgICAgdmFyIHJlc291cmNlID0gcmVwbGF5YWJsZUNhbGwucmVz
dWx0KCkucmVwbGF5KGNhY2hlKTsKKyAgICAgICAgICAgIGlmICghcmVzb3VyY2Uud3JhcHBlZE9i
amVjdCgpKQorICAgICAgICAgICAgICAgIHJlc291cmNlLnNldFdyYXBwZWRPYmplY3QocmVwbGF5
UmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3RoaXNPYmplY3QgPSByZXBsYXlP
YmplY3Q7CisgICAgICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IHJlcGxheWFibGVDYWxsLmZ1bmN0
aW9uTmFtZSgpOworICAgICAgICB0aGlzLl9hcmdzID0gcmVwbGF5QXJnczsKKyAgICAgICAgdGhp
cy5fcmVzdWx0ID0gcmVwbGF5UmVzdWx0OworICAgICAgICB0aGlzLl9zdGFja1RyYWNlID0gcmVw
bGF5YWJsZUNhbGwuc3RhY2tUcmFjZSgpOworICAgICAgICB0aGlzLl9mcmVlemVkID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3Rvcgor
ICogQHBhcmFtIHtSZXBsYXlhYmxlUmVzb3VyY2V9IHRoaXNPYmplY3QKKyAqIEBwYXJhbSB7c3Ry
aW5nfSBmdW5jdGlvbk5hbWUKKyAqIEBwYXJhbSB7QXJyYXkuPFJlcGxheWFibGVSZXNvdXJjZXwq
Pn0gYXJncworICogQHBhcmFtIHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0gcmVzdWx0CisgKiBAcGFy
YW0ge1N0YWNrVHJhY2V9IHN0YWNrVHJhY2UKKyAqLworZnVuY3Rpb24gUmVwbGF5YWJsZUNhbGwo
dGhpc09iamVjdCwgZnVuY3Rpb25OYW1lLCBhcmdzLCByZXN1bHQsIHN0YWNrVHJhY2UpCit7Cisg
ICAgdGhpcy5fdGhpc09iamVjdCA9IHRoaXNPYmplY3Q7CisgICAgdGhpcy5fZnVuY3Rpb25OYW1l
ID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMuX2FyZ3MgPSBhcmdzOworICAgIHRoaXMuX3Jlc3Vs
dCA9IHJlc3VsdDsKKyAgICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKK30KKworUmVw
bGF5YWJsZUNhbGwucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge1JlcGxh
eWFibGVSZXNvdXJjZX0KKyAgICAgKi8KKyAgICByZXNvdXJjZTogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3RoaXNPYmplY3Q7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbk5hbWU7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAqIEByZXR1cm4ge0FycmF5LjxSZXBsYXlhYmxlUmVzb3VyY2V8Kj59Cisg
ICAgICovCisgICAgYXJnczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2FyZ3M7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNv
dXJjZXwqfQorICAgICAqLworICAgIHJlc3VsdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3Jlc3VsdDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7
U3RhY2tUcmFjZX0KKyAgICAgKi8KKyAgICBzdGFja1RyYWNlOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2tUcmFjZTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJuIHtDYWxsfQorICAgICAqLwor
ICAgIHJlcGxheTogZnVuY3Rpb24oY2FjaGUpCisgICAgeworICAgICAgICB2YXIgY2FsbCA9IE9i
amVjdC5jcmVhdGUoQ2FsbC5wcm90b3R5cGUpOworICAgICAgICByZXR1cm4gY2FsbC5yZXBsYXko
dGhpcywgY2FjaGUpOworICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJh
bSB7T2JqZWN0fSB3cmFwcGVkT2JqZWN0CisgKi8KK2Z1bmN0aW9uIFJlc291cmNlKHdyYXBwZWRP
YmplY3QpCit7CisgICAgdGhpcy5faWQgPSArK1Jlc291cmNlLl91bmlxdWVJZDsKKyAgICB0aGlz
Ll9yZXNvdXJjZU1hbmFnZXIgPSBudWxsOworICAgIHRoaXMuX2NhbGxzID0gW107CisgICAgdGhp
cy5zZXRXcmFwcGVkT2JqZWN0KHdyYXBwZWRPYmplY3QpOworfQorCisvKioKKyAqIEB0eXBlIHtu
dW1iZXJ9CisgKi8KK1Jlc291cmNlLl91bmlxdWVJZCA9IDA7CisKKy8qKgorICogQHBhcmFtIHsq
fSBvYmoKKyAqIEByZXR1cm4ge1Jlc291cmNlfQorICovCitSZXNvdXJjZS5mb3JPYmplY3QgPSBm
dW5jdGlvbihvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiBudWxsOworICAg
IGlmIChvYmogaW5zdGFuY2VvZiBSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICBp
ZiAodHlwZW9mIG9iaiA9PT0gIm9iamVjdCIpCisgICAgICAgIHJldHVybiBvYmpbIl9fcmVzb3Vy
Y2VPYmplY3QiXTsKKyAgICByZXR1cm4gbnVsbDsKK30KKworLyoqCisgKiBAcGFyYW0ge1Jlc291
cmNlfCp9IG9iagorICogQHJldHVybiB7Kn0KKyAqLworUmVzb3VyY2Uud3JhcHBlZE9iamVjdCA9
IGZ1bmN0aW9uKG9iaikKK3sKKyAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qo
b2JqKTsKKyAgICByZXR1cm4gcmVzb3VyY2UgPyByZXNvdXJjZS53cmFwcGVkT2JqZWN0KCkgOiBv
Ymo7Cit9CisKKy8qKgorICogQHBhcmFtIHtSZXNvdXJjZXwqfSBvYmoKKyAqIEBwYXJhbSB7Q2Fj
aGV9IGNhY2hlCisgKiBAcmV0dXJuIHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0KKyAqLworUmVzb3Vy
Y2UudG9SZXBsYXlhYmxlID0gZnVuY3Rpb24ob2JqLCBjYWNoZSkKK3sKKyAgICB2YXIgcmVzb3Vy
Y2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob2JqKTsKKyAgICByZXR1cm4gcmVzb3VyY2UgPyByZXNv
dXJjZS50b1JlcGxheWFibGUoY2FjaGUpIDogb2JqOworfQorCitSZXNvdXJjZS5wcm90b3R5cGUg
PSB7CisgICAgLyoqCisgICAgICogQHJldHVybiB7bnVtYmVyfQorICAgICAqLworICAgIGlkOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5faWQ7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICB3cmFwcGVkT2JqZWN0
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fd3JhcHBlZE9iamVjdDsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlCisgICAgICov
CisgICAgc2V0V3JhcHBlZE9iamVjdDogZnVuY3Rpb24odmFsdWUpCisgICAgeworICAgICAgICBj
b25zb2xlLmFzc2VydCh2YWx1ZSwgIndyYXBwZWRPYmplY3Qgc2hvdWxkIG5vdCBiZSBOVUxMIik7
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCEodmFsdWUgaW5zdGFuY2VvZiBSZXNvdXJjZSksICJC
aW5kaW5nIGEgUmVzb3VyY2Ugb2JqZWN0IHRvIGFub3RoZXIgUmVzb3VyY2Ugb2JqZWN0PyIpOwor
ICAgICAgICB0aGlzLl93cmFwcGVkT2JqZWN0ID0gdmFsdWU7CisgICAgICAgIHRoaXMuX2JpbmRP
YmplY3RUb1Jlc291cmNlKHZhbHVlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVy
biB7T2JqZWN0fQorICAgICAqLworICAgIHByb3h5T2JqZWN0OiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMuX3Byb3h5T2JqZWN0KQorICAgICAgICAgICAgdGhpcy5fcHJveHlP
YmplY3QgPSB0aGlzLl93cmFwT2JqZWN0KCk7CisgICAgICAgIHJldHVybiB0aGlzLl9wcm94eU9i
amVjdDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7UmVzb3VyY2VUcmFja2lu
Z01hbmFnZXJ9CisgICAgICovCisgICAgbWFuYWdlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlTWFuYWdlcjsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHBhcmFtIHtSZXNvdXJjZVRyYWNraW5nTWFuYWdlcn0gdmFsdWUKKyAgICAgKi8KKyAgICBz
ZXRNYW5hZ2VyOiBmdW5jdGlvbih2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Jlc291cmNl
TWFuYWdlciA9IHZhbHVlOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJh
eS48Q2FsbD59CisgICAgICovCisgICAgY2FsbHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9jYWxsczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtD
YWNoZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJuIHtSZXBsYXlhYmxlUmVzb3VyY2V9CisgICAgICov
CisgICAgdG9SZXBsYXlhYmxlOiBmdW5jdGlvbihjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBjYWNoZS5nZXQodGhpcy5faWQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAgICBp
ZDogdGhpcy5faWQKKyAgICAgICAgfTsKKyAgICAgICAgcmVzdWx0ID0gbmV3IFJlcGxheWFibGVS
ZXNvdXJjZSh0aGlzLCBkYXRhKTsKKyAgICAgICAgY2FjaGUucHV0KHRoaXMuX2lkLCByZXN1bHQp
OyAvLyBQdXQgaW50byB0aGUgY2FjaGUgZWFybHkgdG8gYXZvaWQgbG9vcHMuCisgICAgICAgIGRh
dGEuY2FsbHMgPSB0aGlzLl9jYWxscy5tYXAoZnVuY3Rpb24oY2FsbCkgeworICAgICAgICAgICAg
cmV0dXJuIGNhbGwudG9SZXBsYXlhYmxlKGNhY2hlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMuX3BvcHVsYXRlUmVwbGF5YWJsZURhdGEoZGF0YSwgY2FjaGUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQor
ICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisgICAgX3BvcHVsYXRlUmVwbGF5
YWJsZURhdGE6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgLy8gRG8gbm90
aGluZy4gU2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBj
YWNoZQorICAgICAqIEByZXR1cm4ge1Jlc291cmNlfQorICAgICAqLworICAgIHJlcGxheTogZnVu
Y3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSBjYWNoZS5n
ZXQoZGF0YS5pZCk7CisgICAgICAgIGlmIChyZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXNvdXJjZTsKKyAgICAgICAgdGhpcy5faWQgPSBkYXRhLmlkOworICAgICAgICB0aGlzLl9yZXNv
dXJjZU1hbmFnZXIgPSBudWxsOworICAgICAgICB0aGlzLl9jYWxscyA9IFtdOworICAgICAgICB0
aGlzLl93cmFwcGVkT2JqZWN0ID0gbnVsbDsKKyAgICAgICAgY2FjaGUucHV0KGRhdGEuaWQsIHRo
aXMpOyAvLyBQdXQgaW50byB0aGUgY2FjaGUgZWFybHkgdG8gYXZvaWQgbG9vcHMuCisgICAgICAg
IHRoaXMuX2RvUmVwbGF5Q2FsbHMoZGF0YSwgY2FjaGUpOworICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0aGlzLl93cmFwcGVkT2JqZWN0LCAiUmVzb3VyY2Ugc2hvdWxkIGJlIHJlY29uc3RydWN0ZWQh
Iik7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFy
YW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisg
ICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIG4gPSBkYXRhLmNhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkKKyAgICAg
ICAgICAgIHRoaXMuX2NhbGxzLnB1c2goZGF0YS5jYWxsc1tpXS5yZXBsYXkoY2FjaGUpKTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisgICAgICovCisgICAg
cHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICBjYWxsLmZyZWV6ZSgpOwor
ICAgICAgICB0aGlzLl9jYWxscy5wdXNoKGNhbGwpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0geyFPYmplY3R9IG9iamVjdAorICAgICAqLworICAgIF9iaW5kT2JqZWN0VG9SZXNv
dXJjZTogZnVuY3Rpb24ob2JqZWN0KQorICAgIHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KG9iamVjdCwgIl9fcmVzb3VyY2VPYmplY3QiLCB7CisgICAgICAgICAgICB2YWx1ZTogdGhp
cywKKyAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSwKKyAgICAgICAgICAgIGVudW1lcmFibGU6
IGZhbHNlLAorICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgICAgIH0pOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovCisgICAgX3dy
YXBPYmplY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB3cmFwcGVkT2JqZWN0ID0g
dGhpcy53cmFwcGVkT2JqZWN0KCk7CisgICAgICAgIGlmICghd3JhcHBlZE9iamVjdCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICB2YXIgcHJveHkgPSBPYmplY3QuY3JlYXRlKHdy
YXBwZWRPYmplY3QuX19wcm90b19fKTsgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSAiaW5zdGFuY2Vv
ZiIuCisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgY3VzdG9tV3JhcEZ1
bmN0aW9ucyA9IHRoaXMuX2N1c3RvbVdyYXBGdW5jdGlvbnMoKTsKKyAgICAgICAgZnVuY3Rpb24g
cHJvY2Vzc1Byb3BlcnR5KHByb3BlcnR5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlw
ZW9mIHdyYXBwZWRPYmplY3RbcHJvcGVydHldID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGN1c3RvbVdyYXBGdW5jdGlvbiA9IGN1c3RvbVdyYXBGdW5jdGlvbnNbcHJvcGVy
dHldOworICAgICAgICAgICAgICAgIGlmIChjdXN0b21XcmFwRnVuY3Rpb24pCisgICAgICAgICAg
ICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IHNlbGYuX3dyYXBDdXN0b21GdW5jdGlvbihzZWxm
LCB3cmFwcGVkT2JqZWN0LCB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XSwgcHJvcGVydHksIGN1c3Rv
bVdyYXBGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBwcm94eVtwcm9wZXJ0eV0gPSBzZWxmLl93cmFwRnVuY3Rpb24oc2VsZiwgd3JhcHBlZE9iamVj
dCwgd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV0sIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoL15bQS1aMC05X10rJC8udGVzdChwcm9wZXJ0eSkgJiYgdHlwZW9mIHdyYXBwZWRPYmpl
Y3RbcHJvcGVydHldID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgICAgIC8vIEZhc3QgYWNj
ZXNzIHRvIGVudW1zIGFuZCBjb25zdGFudHMuCisgICAgICAgICAgICAgICAgcHJveHlbcHJvcGVy
dHldID0gd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV07CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgcHJvcGVydHksIHsKKyAg
ICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XTsK
KyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlv
bih2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IExvZyB0aGUgc2V0dGVyIGNhbGxzLgorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiRklYTUU6IFNldHRpbmcgYW4gYXR0cmlidXRlICVzIHdhcyBub3QgbG9n
Z2VkLiIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZWRPYmplY3Rb
cHJvcGVydHldID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgICAgIGVudW1lcmFibGU6IHRydWUKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciBpc0VtcHR5ID0gdHJ1ZTsKKyAgICAgICAgZm9y
ICh2YXIgcHJvcGVydHkgaW4gd3JhcHBlZE9iamVjdCkgeworICAgICAgICAgICAgaXNFbXB0eSA9
IGZhbHNlOworICAgICAgICAgICAgcHJvY2Vzc1Byb3BlcnR5KHByb3BlcnR5KTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVkT2JqZWN0
OyAvLyBOb3RoaW5nIHRvIHByb3h5LgorCisgICAgICAgIHRoaXMuX2JpbmRPYmplY3RUb1Jlc291
cmNlKHByb3h5KTsKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1Jlc291cmNlfSByZXNvdXJjZQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBv
cmlnaW5hbE9iamVjdAorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdpbmFsRnVuY3Rpb24K
KyAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lCisgICAgICogQHBhcmFtIHtGdW5j
dGlvbn0gY3VzdG9tV3JhcEZ1bmN0aW9uCisgICAgICogQHJldHVybiB7RnVuY3Rpb259CisgICAg
ICovCisgICAgX3dyYXBDdXN0b21GdW5jdGlvbjogZnVuY3Rpb24ocmVzb3VyY2UsIG9yaWdpbmFs
T2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGN1c3RvbVdyYXBGdW5jdGlv
bikKKyAgICB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHZhciBtYW5hZ2VyID0gcmVzb3VyY2UubWFuYWdlcigpOworICAgICAgICAgICAgdmFyIGlz
Q2FwdHVyaW5nID0gbWFuYWdlciAmJiBtYW5hZ2VyLmNhcHR1cmluZygpOworICAgICAgICAgICAg
aWYgKGlzQ2FwdHVyaW5nKQorICAgICAgICAgICAgICAgIG1hbmFnZXIuY2FwdHVyZUFyZ3VtZW50
cyhyZXNvdXJjZSwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHZhciB3cmFwRnVuY3Rpb24gPSBu
ZXcgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uKG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9u
LCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rp
b24uYXBwbHkod3JhcEZ1bmN0aW9uLCBhcmd1bWVudHMpOworICAgICAgICAgICAgaWYgKGlzQ2Fw
dHVyaW5nKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGwgPSB3cmFwRnVuY3Rpb24uY2FsbCgp
OworICAgICAgICAgICAgICAgIGNhbGwuc2V0U3RhY2tUcmFjZShTdGFja1RyYWNlLmNyZWF0ZSgx
LCBhcmd1bWVudHMuY2FsbGVlKSk7CisgICAgICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRDYWxs
KGNhbGwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHdyYXBGdW5jdGlvbi5y
ZXN1bHQoKTsKKyAgICAgICAgfTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtS
ZXNvdXJjZX0gcmVzb3VyY2UKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gb3JpZ2luYWxPYmplY3QK
KyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcmlnaW5hbEZ1bmN0aW9uCisgICAgICogQHBhcmFt
IHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQorICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufQorICAgICAq
LworICAgIF93cmFwRnVuY3Rpb246IGZ1bmN0aW9uKHJlc291cmNlLCBvcmlnaW5hbE9iamVjdCwg
b3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rpb25OYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5t
YW5hZ2VyKCk7CisgICAgICAgICAgICBpZiAoIW1hbmFnZXIgfHwgIW1hbmFnZXIuY2FwdHVyaW5n
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob3JpZ2lu
YWxPYmplY3QsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICBtYW5hZ2VyLmNhcHR1cmVBcmd1bWVu
dHMocmVzb3VyY2UsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZ2lu
YWxGdW5jdGlvbi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAg
IHZhciBzdGFja1RyYWNlID0gU3RhY2tUcmFjZS5jcmVhdGUoMSwgYXJndW1lbnRzLmNhbGxlZSk7
CisgICAgICAgICAgICB2YXIgY2FsbCA9IG5ldyBDYWxsKHJlc291cmNlLCBmdW5jdGlvbk5hbWUs
IGFyZ3VtZW50cywgcmVzdWx0LCBzdGFja1RyYWNlKTsKKyAgICAgICAgICAgIG1hbmFnZXIucmVw
b3J0Q2FsbChjYWxsKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge09iamVjdC48c3RyaW5nLCBGdW5jdGlv
bj59CisgICAgICovCisgICAgX2N1c3RvbVdyYXBGdW5jdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB7fTsgLy8gTWF5IGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4K
KyAgICB9Cit9CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge09iamVjdH0gb3Jp
Z2luYWxPYmplY3QKKyAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdpbmFsRnVuY3Rpb24KKyAqIEBw
YXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKKyAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBh
cmdzCisgKi8KK1Jlc291cmNlLldyYXBGdW5jdGlvbiA9IGZ1bmN0aW9uKG9yaWdpbmFsT2JqZWN0
LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGFyZ3MpCit7CisgICAgdGhpcy5fb3Jp
Z2luYWxPYmplY3QgPSBvcmlnaW5hbE9iamVjdDsKKyAgICB0aGlzLl9vcmlnaW5hbEZ1bmN0aW9u
ID0gb3JpZ2luYWxGdW5jdGlvbjsKKyAgICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5h
bWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7CisgICAgdGhpcy5fcmVzb3VyY2UgPSBSZXNvdXJj
ZS5mb3JPYmplY3Qob3JpZ2luYWxPYmplY3QpOworICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3Jl
c291cmNlLCAiRXhwZWN0ZWQgYSB3cmFwcGVkIGNhbGwgb24gYSBSZXNvdXJjZSBvYmplY3QuIik7
Cit9CisKK1Jlc291cmNlLldyYXBGdW5jdGlvbi5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAg
ICogQHJldHVybiB7Kn0KKyAgICAgKi8KKyAgICByZXN1bHQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fZXhlY3V0ZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX29yaWdpbmFsRnVuY3Rp
b24uYXBwbHkodGhpcy5fb3JpZ2luYWxPYmplY3QsIHRoaXMuX2FyZ3MpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBy
ZXR1cm4ge0NhbGx9CisgICAgICovCisgICAgY2FsbDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgaWYgKCF0aGlzLl9jYWxsKQorICAgICAgICAgICAgdGhpcy5fY2FsbCA9IG5ldyBDYWxsKHRo
aXMuX3Jlc291cmNlLCB0aGlzLl9mdW5jdGlvbk5hbWUsIHRoaXMuX2FyZ3MsIHRoaXMucmVzdWx0
KCkpOworICAgICAgICByZXR1cm4gdGhpcy5fY2FsbDsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHBhcmFtIHsqfSByZXN1bHQKKyAgICAgKi8KKyAgICBvdmVycmlkZVJlc3VsdDogZnVuY3Rp
b24ocmVzdWx0KQorICAgIHsKKyAgICAgICAgdmFyIGNhbGwgPSB0aGlzLmNhbGwoKTsKKyAgICAg
ICAgY2FsbC5zZXRSZXN1bHQocmVzdWx0KTsKKyAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0
OworICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7UmVzb3VyY2V9
IG9yaWdpbmFsUmVzb3VyY2UKKyAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgKi8KK2Z1bmN0aW9u
IFJlcGxheWFibGVSZXNvdXJjZShvcmlnaW5hbFJlc291cmNlLCBkYXRhKQoreworICAgIHRoaXMu
X3Byb3RvID0gb3JpZ2luYWxSZXNvdXJjZS5fX3Byb3RvX187CisgICAgdGhpcy5fZGF0YSA9IGRh
dGE7Cit9CisKK1JlcGxheWFibGVSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAg
ICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KKyAgICAg
Ki8KKyAgICByZXBsYXk6IGZ1bmN0aW9uKGNhY2hlKQorICAgIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IE9iamVjdC5jcmVhdGUodGhpcy5fcHJvdG8pOworICAgICAgICByZXN1bHQgPSByZXN1bHQu
cmVwbGF5KHRoaXMuX2RhdGEsIGNhY2hlKQorICAgICAgICBjb25zb2xlLmFzc2VydChyZXN1bHQu
X19wcm90b19fID09PSB0aGlzLl9wcm90bywgIldyb25nIHR5cGUgb2YgYSByZXBsYXkgcmVzdWx0
Iik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCisvKioKKyAqIEBwYXJhbSB7
UmVwbGF5YWJsZVJlc291cmNlfCp9IG9iagorICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAqIEBy
ZXR1cm4geyp9CisgKi8KK1JlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkgPSBmdW5jdGlvbihvYmos
IGNhY2hlKQoreworICAgIHJldHVybiAob2JqIGluc3RhbmNlb2YgUmVwbGF5YWJsZVJlc291cmNl
KSA/IG9iai5yZXBsYXkoY2FjaGUpLndyYXBwZWRPYmplY3QoKSA6IG9iajsKK30KKworLyoqCisg
KiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtSZXNvdXJjZX0KKyAqLworZnVuY3Rpb24gV2Vi
R0xCb3VuZFJlc291cmNlKHdyYXBwZWRPYmplY3QpCit7CisgICAgUmVzb3VyY2UuY2FsbCh0aGlz
LCB3cmFwcGVkT2JqZWN0KTsKKyAgICB0aGlzLl9zdGF0ZSA9IHt9OworfQorCitXZWJHTEJvdW5k
UmVzb3VyY2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAg
Ki8KKyAgICBfcG9wdWxhdGVSZXBsYXlhYmxlRGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisg
ICAgeworICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9zdGF0ZTsKKyAgICAgICAgZGF0YS5zdGF0
ZSA9IHt9OworICAgICAgICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbihwYXJh
bWV0ZXIpIHsKKyAgICAgICAgICAgIGRhdGEuc3RhdGVbcGFyYW1ldGVyXSA9IFJlc291cmNlLnRv
UmVwbGF5YWJsZShzdGF0ZVtwYXJhbWV0ZXJdLCBjYWNoZSk7CisgICAgICAgIH0pOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0
YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisgICAgX2RvUmVwbGF5Q2Fs
bHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgdmFyIHN0YXRlID0ge307
CisgICAgICAgIE9iamVjdC5rZXlzKGRhdGEuc3RhdGUpLmZvckVhY2goZnVuY3Rpb24ocGFyYW1l
dGVyKSB7CisgICAgICAgICAgICBzdGF0ZVtwYXJhbWV0ZXJdID0gUmVwbGF5YWJsZVJlc291cmNl
LnJlcGxheShkYXRhLnN0YXRlW3BhcmFtZXRlcl0sIGNhY2hlKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7CisKKyAgICAgICAgdmFyIGdsID0gdGhpcy5fcmVwbGF5
Q29udGV4dFJlc291cmNlKGRhdGEsIGNhY2hlKS53cmFwcGVkT2JqZWN0KCk7CisKKyAgICAgICAg
dmFyIGJpbmRpbmdzRGF0YSA9IHsKKyAgICAgICAgICAgIFRFWFRVUkVfMkQ6IFsiYmluZFRleHR1
cmUiLCAiVEVYVFVSRV9CSU5ESU5HXzJEIl0sCisgICAgICAgICAgICBURVhUVVJFX0NVQkVfTUFQ
OiBbImJpbmRUZXh0dXJlIiwgIlRFWFRVUkVfQklORElOR19DVUJFX01BUCJdLAorICAgICAgICAg
ICAgQVJSQVlfQlVGRkVSOiBbImJpbmRCdWZmZXIiLCAiQVJSQVlfQlVGRkVSX0JJTkRJTkciXSwK
KyAgICAgICAgICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSOiBbImJpbmRCdWZmZXIiLCAiRUxFTUVO
VF9BUlJBWV9CVUZGRVJfQklORElORyJdLAorICAgICAgICAgICAgRlJBTUVCVUZGRVI6IFsiYmlu
ZEZyYW1lYnVmZmVyIiwgIkZSQU1FQlVGRkVSX0JJTkRJTkciXSwKKyAgICAgICAgICAgIFJFTkRF
UkJVRkZFUjogWyJiaW5kUmVuZGVyYnVmZmVyIiwgIlJFTkRFUkJVRkZFUl9CSU5ESU5HIl0KKyAg
ICAgICAgfTsKKyAgICAgICAgdmFyIG9yaWdpbmFsQmluZGluZ3MgPSB7fTsKKyAgICAgICAgT2Jq
ZWN0LmtleXMoYmluZGluZ3NEYXRhKS5mb3JFYWNoKGZ1bmN0aW9uKGJpbmRpbmdUYXJnZXQpIHsK
KyAgICAgICAgICAgIHZhciBiaW5kaW5nUGFyYW1ldGVyID0gYmluZGluZ3NEYXRhW2JpbmRpbmdU
YXJnZXRdWzFdOworICAgICAgICAgICAgb3JpZ2luYWxCaW5kaW5nc1tiaW5kaW5nVGFyZ2V0XSA9
IGdsLmdldFBhcmFtZXRlcihnbFtiaW5kaW5nUGFyYW1ldGVyXSk7CisgICAgICAgIH0pOworCisg
ICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5fZG9SZXBsYXlDYWxscy5jYWxsKHRoaXMsIGRhdGEs
IGNhY2hlKTsKKworICAgICAgICBPYmplY3Qua2V5cyhiaW5kaW5nc0RhdGEpLmZvckVhY2goZnVu
Y3Rpb24oYmluZGluZ1RhcmdldCkgeworICAgICAgICAgICAgdmFyIGJpbmRNZXRob2ROYW1lID0g
YmluZGluZ3NEYXRhW2JpbmRpbmdUYXJnZXRdWzBdOworICAgICAgICAgICAgZ2xbYmluZE1ldGhv
ZE5hbWVdLmNhbGwoZ2wsIGdsW2JpbmRpbmdUYXJnZXRdLCBvcmlnaW5hbEJpbmRpbmdzW2JpbmRp
bmdUYXJnZXRdKTsKKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIF9yZXBsYXlDb250ZXh0UmVz
b3VyY2U6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgdmFyIGNhbGxzID0g
ZGF0YS5jYWxsczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBjYWxscy5sZW5ndGg7IGkg
PCBuOyArK2kpIHsKKyAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IFJlcGxheWFibGVSZXNvdXJj
ZS5yZXBsYXkoY2FsbHNbaV0ucmVzb3VyY2UoKSwgY2FjaGUpOworICAgICAgICAgICAgdmFyIGNv
bnRleHRSZXNvdXJjZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9iamVjdChy
ZXNvdXJjZSk7CisgICAgICAgICAgICBpZiAoY29udGV4dFJlc291cmNlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBjb250ZXh0UmVzb3VyY2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXQKKyAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gYmluZE1ldGhvZE5hbWUKKyAgICAgKi8KKyAgICBwdXNoQmlu
ZGluZzogZnVuY3Rpb24odGFyZ2V0LCBiaW5kTWV0aG9kTmFtZSkKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLl9zdGF0ZS5CSU5ESU5HICE9PSB0YXJnZXQpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0
YXRlLkJJTkRJTkcgPSB0YXJnZXQ7CisgICAgICAgICAgICB0aGlzLnB1c2hDYWxsKG5ldyBDYWxs
KFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9iamVjdCh0aGlzKSwgYmluZE1ldGhv
ZE5hbWUsIFt0YXJnZXQsIHRoaXNdKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkdMQm91
bmRSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gUmVzb3VyY2UucHJvdG90eXBlOworCisv
KioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1dlYkdMQm91bmRSZXNvdXJjZX0KKyAq
LworZnVuY3Rpb24gV2ViR0xUZXh0dXJlUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKK3sKKyAgICBX
ZWJHTEJvdW5kUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKK30KKworV2ViR0xU
ZXh0dXJlUmVzb3VyY2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQor
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUK
KyAgICAgKi8KKyAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAg
eworICAgICAgICB2YXIgZ2wgPSB0aGlzLl9yZXBsYXlDb250ZXh0UmVzb3VyY2UoZGF0YSwgY2Fj
aGUpLndyYXBwZWRPYmplY3QoKTsKKworICAgICAgICB2YXIgc3RhdGUgPSB7fTsKKyAgICAgICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMuZm9yRWFj
aChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIHN0YXRlW3BhcmFtZXRlcl0gPSBn
bC5nZXRQYXJhbWV0ZXIoZ2xbcGFyYW1ldGVyXSk7CisgICAgICAgIH0pOworCisgICAgICAgIFdl
YkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRh
LCBjYWNoZSk7CisKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxT
dG9yZVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAg
IGdsLnBpeGVsU3RvcmVpKGdsW3BhcmFtZXRlcl0sIHN0YXRlW3BhcmFtZXRlcl0pOworICAgICAg
ICB9KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFt
IHtDYWxsfSBjYWxsCisgICAgICovCisgICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAg
eworICAgICAgICB2YXIgZ2wgPSBjYWxsLnJlc291cmNlKCkud3JhcHBlZE9iamVjdCgpOworICAg
ICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycy5m
b3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgeworICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2wu
Z2V0UGFyYW1ldGVyKGdsW3BhcmFtZXRlcl0pOworICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRl
W3BhcmFtZXRlcl0gIT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVbcGFy
YW1ldGVyXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHZhciBwaXhlbFN0b3JlQ2FsbCA9IG5l
dyBDYWxsKGdsLCAicGl4ZWxTdG9yZWkiLCBbZ2xbcGFyYW1ldGVyXSwgdmFsdWVdKTsKKyAgICAg
ICAgICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhp
cywgcGl4ZWxTdG9yZUNhbGwpOworICAgICAgICAgICAgfQorICAgICAgICB9LCB0aGlzKTsKKwor
ICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBj
b250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KKyAgICAgICAgLy8gRklYTUU6IG9wdGlt
aXplIG1lbW9yeSB1c2FnZTogbWF5YmUgaXQncyBtb3JlIGVmZmljaWVudCB0byBzdG9yZSBvbmUg
dGV4SW1hZ2UyRCBjYWxsIGluc3RlYWQgb2YgbWFueSB0ZXhTdWJJbWFnZTJELgorICAgICAgICBX
ZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLworICAg
IHB1c2hDYWxsX3RleFBhcmFtZXRlcmY6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICB2
YXIgYXJncyA9IGNhbGwuYXJncygpOworICAgICAgICB2YXIgcG5hbWUgPSBhcmdzWzFdOworICAg
ICAgICB2YXIgcGFyYW0gPSBhcmdzWzJdOworICAgICAgICBpZiAodGhpcy5fc3RhdGVbcG5hbWVd
ICE9PSBwYXJhbSkgeworICAgICAgICAgICAgdGhpcy5fc3RhdGVbcG5hbWVdID0gcGFyYW07Cisg
ICAgICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhp
cywgY2FsbCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogY29weVRleElt
YWdlMkQgYW5kIGNvcHlUZXhTdWJJbWFnZTJEIGRlZmluZSBhIHRleHR1cmUgaW1hZ2Ugd2l0aCBw
aXhlbHMgZnJvbSB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlci4KKyAgICAgKiBAcGFyYW0ge0NhbGx9
IGNhbGwKKyAgICAgKi8KKyAgICBwdXNoQ2FsbF9jb3B5VGV4SW1hZ2UyRDogZnVuY3Rpb24oY2Fs
bCkKKyAgICB7CisgICAgICAgIHZhciBnbFJlc291cmNlID0gY2FsbC5yZXNvdXJjZSgpOworICAg
ICAgICB2YXIgZ2wgPSBnbFJlc291cmNlLndyYXBwZWRPYmplY3QoKTsKKyAgICAgICAgdmFyIGZy
YW1lYnVmZmVyUmVzb3VyY2UgPSBnbFJlc291cmNlLmN1cnJlbnRCaW5kaW5nKGdsLkZSQU1FQlVG
RkVSKTsKKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyUmVzb3VyY2UpCisgICAgICAgICAgICB0aGlz
LnB1c2hDYWxsKG5ldyBDYWxsKGdsUmVzb3VyY2UsICJiaW5kRnJhbWVidWZmZXIiLCBbZ2wuRlJB
TUVCVUZGRVIsIGZyYW1lYnVmZmVyUmVzb3VyY2VdKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogTm8gRlJBTUVCVUZGRVIgYm91
bmQgd2hpbGUgY2FsbGluZyBnbC4iICsgY2FsbC5mdW5jdGlvbk5hbWUoKSk7CisgICAgICAgIHRo
aXMucHVzaENhbGwoY2FsbCk7CisgICAgfQorfQorCitXZWJHTFRleHR1cmVSZXNvdXJjZS5wcm90
b3R5cGUucHVzaENhbGxfdGV4UGFyYW1ldGVyaSA9IFdlYkdMVGV4dHVyZVJlc291cmNlLnByb3Rv
dHlwZS5wdXNoQ2FsbF90ZXhQYXJhbWV0ZXJmOworV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJvdG90
eXBlLnB1c2hDYWxsX2NvcHlUZXhTdWJJbWFnZTJEID0gV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJv
dG90eXBlLnB1c2hDYWxsX2NvcHlUZXhJbWFnZTJEOworCitXZWJHTFRleHR1cmVSZXNvdXJjZS5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKKworLyoq
CisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtSZXNvdXJjZX0KKyAqLworZnVuY3Rpb24g
V2ViR0xQcm9ncmFtUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKK3sKKyAgICBSZXNvdXJjZS5jYWxs
KHRoaXMsIHdyYXBwZWRPYmplY3QpOworfQorCitXZWJHTFByb2dyYW1SZXNvdXJjZS5wcm90b3R5
cGUgPSB7CisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtPYmplY3R9
IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqLworICAgIF9wb3B1bGF0
ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZh
ciBnbFJlc291cmNlID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuZm9yT2JqZWN0KHRo
aXMpOworICAgICAgICB2YXIgZ2wgPSBnbFJlc291cmNlLndyYXBwZWRPYmplY3QoKTsKKyAgICAg
ICAgdmFyIHByb2dyYW0gPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKKworICAgICAgICB2YXIgb3Jp
Z2luYWxFcnJvcnMgPSBnbFJlc291cmNlLmdldEFsbEVycm9ycygpOworCisgICAgICAgIHZhciB1
bmlmb3JtcyA9IFtdOworICAgICAgICB2YXIgdW5pZm9ybXNDb3VudCA9IGdsLmdldFByb2dyYW1Q
YXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB1bmlmb3Jtc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHZhciBhY3RpdmVJ
bmZvID0gZ2wuZ2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpKTsKKyAgICAgICAgICAgIGlmICgh
YWN0aXZlSW5mbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHZhciB1
bmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgYWN0aXZlSW5m
by5uYW1lKTsKKyAgICAgICAgICAgIGlmICghdW5pZm9ybUxvY2F0aW9uKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2wuZ2V0VW5pZm9ybShwcm9n
cmFtLCB1bmlmb3JtTG9jYXRpb24pOworICAgICAgICAgICAgdW5pZm9ybXMucHVzaCh7CisgICAg
ICAgICAgICAgICAgbmFtZTogYWN0aXZlSW5mby5uYW1lLAorICAgICAgICAgICAgICAgIHR5cGU6
IGFjdGl2ZUluZm8udHlwZSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIGRhdGEudW5pZm9ybXMgPSB1bmlmb3JtczsKKwor
ICAgICAgICBnbFJlc291cmNlLnJlc3RvcmVFcnJvcnMob3JpZ2luYWxFcnJvcnMpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0
YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisgICAgX2RvUmVwbGF5Q2Fs
bHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgUmVzb3VyY2UucHJvdG90
eXBlLl9kb1JlcGxheUNhbGxzLmNhbGwodGhpcywgZGF0YSwgY2FjaGUpOworICAgICAgICB2YXIg
Z2wgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5mb3JPYmplY3QodGhpcykud3JhcHBl
ZE9iamVjdCgpOworICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMud3JhcHBlZE9iamVjdCgpOwor
CisgICAgICAgIHZhciBvcmlnaW5hbFByb2dyYW0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ1VSUkVO
VF9QUk9HUkFNKTsKKyAgICAgICAgdmFyIGN1cnJlbnRQcm9ncmFtID0gb3JpZ2luYWxQcm9ncmFt
OworICAgICAgICAKKyAgICAgICAgZGF0YS51bmlmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uKHVuaWZv
cm0pIHsKKyAgICAgICAgICAgIHZhciB1bmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbSwgdW5pZm9ybS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghdW5pZm9ybUxv
Y2F0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChjdXJyZW50
UHJvZ3JhbSAhPT0gcHJvZ3JhbSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9ncmFtID0g
cHJvZ3JhbTsKKyAgICAgICAgICAgICAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSB0aGlzLl91bmlmb3JtTWV0aG9k
TmFtZUJ5VHlwZShnbCwgdW5pZm9ybS50eXBlKTsKKyAgICAgICAgICAgIGlmIChtZXRob2ROYW1l
LmluZGV4T2YoIk1hdHJpeCIpID09PSAtMSkKKyAgICAgICAgICAgICAgICBnbFttZXRob2ROYW1l
XS5jYWxsKGdsLCB1bmlmb3JtTG9jYXRpb24sIHVuaWZvcm0udmFsdWUpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGdsW21ldGhvZE5hbWVdLmNhbGwoZ2wsIHVuaWZvcm1Mb2Nh
dGlvbiwgZmFsc2UsIHVuaWZvcm0udmFsdWUpOworICAgICAgICB9LmJpbmQodGhpcykpOworCisg
ICAgICAgIGlmIChjdXJyZW50UHJvZ3JhbSAhPT0gb3JpZ2luYWxQcm9ncmFtKQorICAgICAgICAg
ICAgZ2wudXNlUHJvZ3JhbShvcmlnaW5hbFByb2dyYW0pOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wKKyAgICAgKiBAcGFyYW0ge251
bWJlcn0gdHlwZQorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBfdW5pZm9y
bU1ldGhvZE5hbWVCeVR5cGU6IGZ1bmN0aW9uKGdsLCB0eXBlKQorICAgIHsKKyAgICAgICAgdmFy
IHVuaWZvcm1NZXRob2ROYW1lcyA9IFdlYkdMUHJvZ3JhbVJlc291cmNlLl91bmlmb3JtTWV0aG9k
TmFtZXM7CisgICAgICAgIGlmICghdW5pZm9ybU1ldGhvZE5hbWVzKSB7CisgICAgICAgICAgICB1
bmlmb3JtTWV0aG9kTmFtZXMgPSB7fTsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tn
bC5GTE9BVF0gPSAidW5pZm9ybTFmIjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tn
bC5GTE9BVF9WRUMyXSA9ICJ1bmlmb3JtMmZ2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2RO
YW1lc1tnbC5GTE9BVF9WRUMzXSA9ICJ1bmlmb3JtM2Z2IjsKKyAgICAgICAgICAgIHVuaWZvcm1N
ZXRob2ROYW1lc1tnbC5GTE9BVF9WRUM0XSA9ICJ1bmlmb3JtNGZ2IjsKKyAgICAgICAgICAgIHVu
aWZvcm1NZXRob2ROYW1lc1tnbC5JTlRdID0gInVuaWZvcm0xaSI7CisgICAgICAgICAgICB1bmlm
b3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF0gPSAidW5pZm9ybTFpIjsKKyAgICAgICAgICAgIHVuaWZv
cm1NZXRob2ROYW1lc1tnbC5TQU1QTEVSXzJEXSA9ICJ1bmlmb3JtMWkiOworICAgICAgICAgICAg
dW5pZm9ybU1ldGhvZE5hbWVzW2dsLlNBTVBMRVJfQ1VCRV0gPSAidW5pZm9ybTFpIjsKKyAgICAg
ICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDMl0gPSAidW5pZm9ybTJpdiI7Cisg
ICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMyXSA9ICJ1bmlmb3JtMml2
IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDM10gPSAidW5pZm9y
bTNpdiI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMzXSA9ICJ1
bmlmb3JtM2l2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDNF0g
PSAidW5pZm9ybTRpdiI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9W
RUM0XSA9ICJ1bmlmb3JtNGl2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5G
TE9BVF9NQVQyXSA9ICJ1bmlmb3JtTWF0cml4MmZ2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRo
b2ROYW1lc1tnbC5GTE9BVF9NQVQzXSA9ICJ1bmlmb3JtTWF0cml4M2Z2IjsKKyAgICAgICAgICAg
IHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9NQVQ0XSA9ICJ1bmlmb3JtTWF0cml4NGZ2IjsK
KyAgICAgICAgICAgIFdlYkdMUHJvZ3JhbVJlc291cmNlLl91bmlmb3JtTWV0aG9kTmFtZXMgPSB1
bmlmb3JtTWV0aG9kTmFtZXM7CisgICAgICAgIH0KKyAgICAgICAgY29uc29sZS5hc3NlcnQodW5p
Zm9ybU1ldGhvZE5hbWVzW3R5cGVdLCAiVW5rbm93biB1bmlmb3JtIHR5cGUgIiArIHR5cGUpOwor
ICAgICAgICByZXR1cm4gdW5pZm9ybU1ldGhvZE5hbWVzW3R5cGVdOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8K
KyAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBy
ZW1vdmUgYW55IG9sZGVyIGNhbGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJl
c291cmNlIHN0YXRlLgorICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG11bHRpcGxlIGF0dGFjaFNo
YWRlciAmJiBkZXRhY2hTaGFkZXIuCisgICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2Fs
bC5jYWxsKHRoaXMsIGNhbGwpOworICAgIH0KK30KKworV2ViR0xQcm9ncmFtUmVzb3VyY2UucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFJlc291cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3Ry
dWN0b3IKKyAqIEBleHRlbmRzIHtSZXNvdXJjZX0KKyAqLworZnVuY3Rpb24gV2ViR0xTaGFkZXJS
ZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQoreworICAgIFJlc291cmNlLmNhbGwodGhpcywgd3JhcHBl
ZE9iamVjdCk7Cit9CisKK1dlYkdMU2hhZGVyUmVzb3VyY2UucHJvdG90eXBlID0geworICAgIC8q
KgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLwor
ICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHJl
bW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBubyBsb25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVz
b3VyY2Ugc3RhdGUuCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGlwbGUgc2hhZGVyU291
cmNlIGNhbGxzLgorICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0aGlz
LCBjYWxsKTsKKyAgICB9Cit9CisKK1dlYkdMU2hhZGVyUmVzb3VyY2UucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFJlc291cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBl
eHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9CisgKi8KK2Z1bmN0aW9uIFdlYkdMQnVmZmVyUmVz
b3VyY2Uod3JhcHBlZE9iamVjdCkKK3sKKyAgICBXZWJHTEJvdW5kUmVzb3VyY2UuY2FsbCh0aGlz
LCB3cmFwcGVkT2JqZWN0KTsKK30KKworV2ViR0xCdWZmZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7
CisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisg
ICAgICovCisgICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRv
IHRoZSByZXNvdXJjZSBzdGF0ZS4KKyAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIG1lbW9yeSBm
b3IgYnVmZmVyU3ViRGF0YS4KKyAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5w
dXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOworICAgIH0KK30KKworV2ViR0xCdWZmZXJSZXNvdXJj
ZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKKwor
LyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9Cisg
Ki8KK2Z1bmN0aW9uIFdlYkdMRnJhbWVidWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQorewor
ICAgIFdlYkdMQm91bmRSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QpOworfQorCitX
ZWJHTEZyYW1lYnVmZmVyUmVzb3VyY2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBv
dmVycmlkZQorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLworICAgIHB1c2hDYWxs
OiBmdW5jdGlvbihjYWxsKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xk
ZXIgY2FsbHMgdGhhdCBubyBsb25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUu
CisgICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0aGlz
LCBjYWxsKTsKKyAgICB9Cit9CisKK1dlYkdMRnJhbWVidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUu
X19wcm90b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29u
c3RydWN0b3IKKyAqIEBleHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9CisgKi8KK2Z1bmN0aW9u
IFdlYkdMUmVuZGVyYnVmZmVyUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKK3sKKyAgICBXZWJHTEJv
dW5kUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKK30KKworV2ViR0xSZW5kZXJi
dWZmZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisg
ICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisgICAgICovCisgICAgcHVzaENhbGw6IGZ1bmN0aW9u
KGNhbGwpCisgICAgeworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0
aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KKyAgICAgICAg
V2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOwor
ICAgIH0KK30KKworV2ViR0xSZW5kZXJidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IK
KyAqIEBleHRlbmRzIHtSZXNvdXJjZX0KKyAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbENvbnRleHQKKyAqIEBwYXJhbSB7RnVuY3Rpb259IHJlcGxheUNvbnRleHRDYWxsYmFjawor
ICovCitmdW5jdGlvbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQsIHJl
cGxheUNvbnRleHRDYWxsYmFjaykKK3sKKyAgICBSZXNvdXJjZS5jYWxsKHRoaXMsIGdsQ29udGV4
dCk7CisgICAgdGhpcy5fcmVwbGF5Q29udGV4dENhbGxiYWNrID0gcmVwbGF5Q29udGV4dENhbGxi
YWNrOworICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxudW1iZXIsIGJvb2xlYW4+fSAqLworICAgIHRo
aXMuX2N1c3RvbUVycm9ycyA9IG51bGw7Cit9CisKKy8qKgorICogQGNvbnN0CisgKiBAdHlwZSB7
QXJyYXkuPHN0cmluZz59CisgKi8KK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLkdMQ2Fw
YWJpbGl0aWVzID0gWworICAgICJCTEVORCIsCisgICAgIkNVTExfRkFDRSIsCisgICAgIkRFUFRI
X1RFU1QiLAorICAgICJESVRIRVIiLAorICAgICJQT0xZR09OX09GRlNFVF9GSUxMIiwKKyAgICAi
U0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwKKyAgICAiU0FNUExFX0NPVkVSQUdFIiwKKyAgICAi
U0NJU1NPUl9URVNUIiwKKyAgICAiU1RFTkNJTF9URVNUIgorXTsKKworLyoqCisgKiBAY29uc3QK
KyAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn0KKyAqLworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
b3VyY2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMgPSBbCisgICAgIlBBQ0tfQUxJR05NRU5UIiwKKyAg
ICAiVU5QQUNLX0FMSUdOTUVOVCIsCisgICAgIlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05f
V0VCR0wiLAorICAgICJVTlBBQ0tfRkxJUF9ZX1dFQkdMIiwKKyAgICAiVU5QQUNLX1BSRU1VTFRJ
UExZX0FMUEhBX1dFQkdMIgorXTsKKworLyoqCisgKiBAY29uc3QKKyAqIEB0eXBlIHtBcnJheS48
c3RyaW5nPn0KKyAqLworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuU3RhdGVQYXJhbWV0
ZXJzID0gWworICAgICJBQ1RJVkVfVEVYVFVSRSIsCisgICAgIkFSUkFZX0JVRkZFUl9CSU5ESU5H
IiwKKyAgICAiQkxFTkRfQ09MT1IiLAorICAgICJCTEVORF9EU1RfQUxQSEEiLAorICAgICJCTEVO
RF9EU1RfUkdCIiwKKyAgICAiQkxFTkRfRVFVQVRJT05fQUxQSEEiLAorICAgICJCTEVORF9FUVVB
VElPTl9SR0IiLAorICAgICJCTEVORF9TUkNfQUxQSEEiLAorICAgICJCTEVORF9TUkNfUkdCIiwK
KyAgICAiQ09MT1JfQ0xFQVJfVkFMVUUiLAorICAgICJDT0xPUl9XUklURU1BU0siLAorICAgICJD
VUxMX0ZBQ0VfTU9ERSIsCisgICAgIkNVUlJFTlRfUFJPR1JBTSIsCisgICAgIkRFUFRIX0NMRUFS
X1ZBTFVFIiwKKyAgICAiREVQVEhfRlVOQyIsCisgICAgIkRFUFRIX1JBTkdFIiwKKyAgICAiREVQ
VEhfV1JJVEVNQVNLIiwKKyAgICAiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIsCisgICAg
IkZSQU1FQlVGRkVSX0JJTkRJTkciLAorICAgICJGUk9OVF9GQUNFIiwKKyAgICAiR0VORVJBVEVf
TUlQTUFQX0hJTlQiLAorICAgICJMSU5FX1dJRFRIIiwKKyAgICAiUEFDS19BTElHTk1FTlQiLAor
ICAgICJQT0xZR09OX09GRlNFVF9GQUNUT1IiLAorICAgICJQT0xZR09OX09GRlNFVF9VTklUUyIs
CisgICAgIlJFTkRFUkJVRkZFUl9CSU5ESU5HIiwKKyAgICAiU0FNUExFX0NPVkVSQUdFX0lOVkVS
VCIsCisgICAgIlNBTVBMRV9DT1ZFUkFHRV9WQUxVRSIsCisgICAgIlNDSVNTT1JfQk9YIiwKKyAg
ICAiU1RFTkNJTF9CQUNLX0ZBSUwiLAorICAgICJTVEVOQ0lMX0JBQ0tfRlVOQyIsCisgICAgIlNU
RU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwiLAorICAgICJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9QQVNTIiwKKyAgICAiU1RFTkNJTF9CQUNLX1JFRiIsCisgICAgIlNURU5DSUxfQkFDS19WQUxV
RV9NQVNLIiwKKyAgICAiU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyIsCisgICAgIlNURU5DSUxfQ0xF
QVJfVkFMVUUiLAorICAgICJTVEVOQ0lMX0ZBSUwiLAorICAgICJTVEVOQ0lMX0ZVTkMiLAorICAg
ICJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIsCisgICAgIlNURU5DSUxfUEFTU19ERVBUSF9QQVNT
IiwKKyAgICAiU1RFTkNJTF9SRUYiLAorICAgICJTVEVOQ0lMX1ZBTFVFX01BU0siLAorICAgICJT
VEVOQ0lMX1dSSVRFTUFTSyIsCisgICAgIlVOUEFDS19BTElHTk1FTlQiLAorICAgICJVTlBBQ0tf
Q09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwKKyAgICAiVU5QQUNLX0ZMSVBfWV9XRUJHTCIs
CisgICAgIlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCIsCisgICAgIlZJRVdQT1JUIgor
XTsKKworLyoqCisgKiBAcGFyYW0geyp9IG9iagorICogQHJldHVybiB7V2ViR0xSZW5kZXJpbmdD
b250ZXh0UmVzb3VyY2V9CisgKi8KK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9i
amVjdCA9IGZ1bmN0aW9uKG9iaikKK3sKKyAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JP
YmplY3Qob2JqKTsKKyAgICBpZiAoIXJlc291cmNlIHx8IHJlc291cmNlIGluc3RhbmNlb2YgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UpCisgICAgICAgIHJldHVybiByZXNvdXJjZTsKKyAg
ICB2YXIgY2FsbCA9IHJlc291cmNlLmNhbGxzKCk7CisgICAgaWYgKCFjYWxsIHx8ICFjYWxsLmxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgcmVzb3VyY2UgPSBjYWxsWzBdLnJlc291
cmNlKCk7CisgICAgcmV0dXJuIChyZXNvdXJjZSBpbnN0YW5jZW9mIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dFJlc291cmNlKSA/IHJlc291cmNlIDogbnVsbDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250
ZXh0UmVzb3VyY2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0FycmF5
LjxudW1iZXI+fQorICAgICAqLworICAgIGdldEFsbEVycm9yczogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIGVycm9ycyA9IFtdOworICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBwZWRP
YmplY3QoKTsKKyAgICAgICAgaWYgKGdsKSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGdsLmdldEVycm9yKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGVycm9yID09PSBnbC5OT19FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgdGhpcy5jbGVhckVycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAg
ICBlcnJvcnMucHVzaChlcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2N1c3RvbUVycm9ycykgeworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRo
aXMuX2N1c3RvbUVycm9ycykgeworICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IE51bWJlcihr
ZXkpOworICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXN0b21FcnJvcnM7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGVycm9yczsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBcnJh
eS48bnVtYmVyPn0gZXJyb3JzCisgICAgICovCisgICAgcmVzdG9yZUVycm9yczogZnVuY3Rpb24o
ZXJyb3JzKQorICAgIHsKKyAgICAgICAgdmFyIGdsID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7Cisg
ICAgICAgIGlmIChnbCkgeworICAgICAgICAgICAgdmFyIHdhc0Vycm9yID0gZmFsc2U7CisgICAg
ICAgICAgICB3aGlsZSAoZ2wuZ2V0RXJyb3IoKSAhPT0gZ2wuTk9fRVJST1IpCisgICAgICAgICAg
ICAgICAgd2FzRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIXdhc0Vy
cm9yLCAiRXJyb3Iocykgd2hpbGUgY2FwdHVyaW5nIGN1cnJlbnQgV2ViR0wgc3RhdGUuIik7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFlcnJvcnMubGVuZ3RoKQorICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2N1c3RvbUVycm9yczsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9j
dXN0b21FcnJvcnMgPSB7fTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gZXJyb3Jz
Lmxlbmd0aDsgaSA8IG47ICsraSkKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXN0b21FcnJvcnNb
ZXJyb3JzW2ldXSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHBhcmFtIHtudW1iZXJ9IGVycm9yCisgICAgICovCisgICAgY2xlYXJFcnJvcjogZnVuY3Rpb24o
ZXJyb3IpCisgICAgeworICAgICAgICBpZiAodGhpcy5fY3VzdG9tRXJyb3JzKQorICAgICAgICAg
ICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yc1tlcnJvcl07CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAgKi8KKyAgICBuZXh0RXJyb3I6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9jdXN0b21FcnJvcnMpIHsKKyAgICAgICAgICAg
IGZvciAodmFyIGtleSBpbiB0aGlzLl9jdXN0b21FcnJvcnMpIHsKKyAgICAgICAgICAgICAgICB2
YXIgZXJyb3IgPSBOdW1iZXIoa2V5KTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY3Vz
dG9tRXJyb3JzW2Vycm9yXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yczsKKyAg
ICAgICAgdmFyIGdsID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7CisgICAgICAgIHJldHVybiBnbCA/
IGdsLk5PX0VSUk9SIDogMDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisg
ICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQor
ICAgICAqLworICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBjYWNo
ZSkKKyAgICB7CisgICAgICAgIHZhciBnbCA9IHRoaXMud3JhcHBlZE9iamVjdCgpOworICAgICAg
ICBkYXRhLnJlcGxheUNvbnRleHRDYWxsYmFjayA9IHRoaXMuX3JlcGxheUNvbnRleHRDYWxsYmFj
azsKKworICAgICAgICB2YXIgb3JpZ2luYWxFcnJvcnMgPSB0aGlzLmdldEFsbEVycm9ycygpOwor
CisgICAgICAgIC8vIFRha2UgYSBmdWxsIEdMIHN0YXRlIHNuYXBzaG90LgorICAgICAgICB2YXIg
Z2xTdGF0ZSA9IHt9OworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5HTENh
cGFiaWxpdGllcy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgeworICAgICAgICAgICAgZ2xT
dGF0ZVtwYXJhbWV0ZXJdID0gZ2wuaXNFbmFibGVkKGdsW3BhcmFtZXRlcl0pOworICAgICAgICB9
KTsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuU3RhdGVQYXJhbWV0ZXJz
LmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBnbFN0YXRlW3BhcmFt
ZXRlcl0gPSBSZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0UGFyYW1ldGVyKGdsW3BhcmFtZXRl
cl0pLCBjYWNoZSk7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFZFUlRFWF9BVFRSSUJfQVJS
QVlTCisgICAgICAgIHZhciBtYXhWZXJ0ZXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1B
WF9WRVJURVhfQVRUUklCUyk7CisgICAgICAgIHZhciB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzID0g
WyJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwgIlZFUlRFWF9BVFRSSUJfQVJS
QVlfRU5BQkxFRCIsICJWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUiLCAiVkVSVEVYX0FUVFJJQl9B
UlJBWV9TVFJJREUiLCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwgIlZFUlRFWF9BVFRSSUJf
QVJSQVlfTk9STUFMSVpFRCIsICJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIiXTsKKyAgICAgICAgdmFy
IHZlcnRleEF0dHJpYlN0YXRlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1h
eFZlcnRleEF0dHJpYnM7ICsraSkgeworICAgICAgICAgICAgdmFyIHN0YXRlID0ge307CisgICAg
ICAgICAgICB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24oYXR0cmliUGFy
YW1ldGVyKSB7CisgICAgICAgICAgICAgICAgc3RhdGVbYXR0cmliUGFyYW1ldGVyXSA9IFJlc291
cmNlLnRvUmVwbGF5YWJsZShnbC5nZXRWZXJ0ZXhBdHRyaWIoaSwgZ2xbYXR0cmliUGFyYW1ldGVy
XSksIGNhY2hlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc3RhdGUuVkVSVEVYX0FU
VFJJQl9BUlJBWV9QT0lOVEVSID0gZ2wuZ2V0VmVydGV4QXR0cmliT2Zmc2V0KGksIGdsLlZFUlRF
WF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7CisgICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJTdGF0ZXMu
cHVzaChzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZ2xTdGF0ZS52ZXJ0ZXhBdHRyaWJTdGF0
ZXMgPSB2ZXJ0ZXhBdHRyaWJTdGF0ZXM7CisKKyAgICAgICAgLy8gVEVYVFVSRVMKKyAgICAgICAg
dmFyIGN1cnJlbnRUZXh0dXJlQmluZGluZyA9IGdsLmdldFBhcmFtZXRlcihnbC5BQ1RJVkVfVEVY
VFVSRSk7CisgICAgICAgIHZhciBtYXhUZXh0dXJlSW1hZ2VVbml0cyA9IGdsLmdldFBhcmFtZXRl
cihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgICAgIHZhciB0ZXh0dXJlQmluZGlu
Z3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1hZ2VVbml0
czsgKytpKSB7CisgICAgICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaSk7
CisgICAgICAgICAgICB2YXIgc3RhdGUgPSB7CisgICAgICAgICAgICAgICAgVEVYVFVSRV8yRDog
UmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJTkdf
MkQpLCBjYWNoZSksCisgICAgICAgICAgICAgICAgVEVYVFVSRV9DVUJFX01BUDogUmVzb3VyY2Uu
dG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAp
LCBjYWNoZSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB0ZXh0dXJlQmluZGluZ3MucHVz
aChzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZ2xTdGF0ZS50ZXh0dXJlQmluZGluZ3MgPSB0
ZXh0dXJlQmluZGluZ3M7CisgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoY3VycmVudFRleHR1cmVC
aW5kaW5nKTsKKworICAgICAgICBkYXRhLmdsU3RhdGUgPSBnbFN0YXRlOworCisgICAgICAgIHRo
aXMucmVzdG9yZUVycm9ycyhvcmlnaW5hbEVycm9ycyk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFt
IHtDYWNoZX0gY2FjaGUKKyAgICAgKi8KKyAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0
YSwgY2FjaGUpCisgICAgeworICAgICAgICB0aGlzLl9yZXBsYXlDb250ZXh0Q2FsbGJhY2sgPSBk
YXRhLnJlcGxheUNvbnRleHRDYWxsYmFjazsKKyAgICAgICAgdGhpcy5fY3VzdG9tRXJyb3JzID0g
bnVsbDsKKworICAgICAgICB2YXIgZ2wgPSBSZXNvdXJjZS53cmFwcGVkT2JqZWN0KHRoaXMuX3Jl
cGxheUNvbnRleHRDYWxsYmFjaygpKTsKKyAgICAgICAgdGhpcy5zZXRXcmFwcGVkT2JqZWN0KGds
KTsKKworICAgICAgICB2YXIgZ2xTdGF0ZSA9IGRhdGEuZ2xTdGF0ZTsKKyAgICAgICAgZ2wuYmlu
ZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGds
U3RhdGUuRlJBTUVCVUZGRVJfQklORElORywgY2FjaGUpKTsKKyAgICAgICAgZ2wuYmluZFJlbmRl
cmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xTdGF0
ZS5SRU5ERVJCVUZGRVJfQklORElORywgY2FjaGUpKTsKKworICAgICAgICAvLyBFbmFibGUgb3Ig
ZGlzYWJsZSBzZXJ2ZXItc2lkZSBHTCBjYXBhYmlsaXRpZXMuCisgICAgICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dFJlc291cmNlLkdMQ2FwYWJpbGl0aWVzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1l
dGVyKSB7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChwYXJhbWV0ZXIgaW4gZ2xTdGF0ZSk7
CisgICAgICAgICAgICBpZiAoZ2xTdGF0ZVtwYXJhbWV0ZXJdKQorICAgICAgICAgICAgICAgIGds
LmVuYWJsZShnbFtwYXJhbWV0ZXJdKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBnbC5kaXNhYmxlKGdsW3BhcmFtZXRlcl0pOworICAgICAgICB9KTsKKworICAgICAgICBnbC5i
bGVuZENvbG9yKGdsU3RhdGUuQkxFTkRfQ09MT1JbMF0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbMV0s
IGdsU3RhdGUuQkxFTkRfQ09MT1JbMl0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbM10pOworICAgICAg
ICBnbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoZ2xTdGF0ZS5CTEVORF9FUVVBVElPTl9SR0IsIGds
U3RhdGUuQkxFTkRfRVFVQVRJT05fQUxQSEEpOworICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0
ZShnbFN0YXRlLkJMRU5EX1NSQ19SR0IsIGdsU3RhdGUuQkxFTkRfRFNUX1JHQiwgZ2xTdGF0ZS5C
TEVORF9TUkNfQUxQSEEsIGdsU3RhdGUuQkxFTkRfRFNUX0FMUEhBKTsKKyAgICAgICAgZ2wuY2xl
YXJDb2xvcihnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzBdLCBnbFN0YXRlLkNPTE9SX0NMRUFS
X1ZBTFVFWzFdLCBnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzJdLCBnbFN0YXRlLkNPTE9SX0NM
RUFSX1ZBTFVFWzNdKTsKKyAgICAgICAgZ2wuY2xlYXJEZXB0aChnbFN0YXRlLkRFUFRIX0NMRUFS
X1ZBTFVFKTsKKyAgICAgICAgZ2wuY2xlYXJTdGVuY2lsKGdsU3RhdGUuU1RFTkNJTF9DTEVBUl9W
QUxVRSk7CisgICAgICAgIGdsLmNvbG9yTWFzayhnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1swXSwg
Z2xTdGF0ZS5DT0xPUl9XUklURU1BU0tbMV0sIGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzJdLCBn
bFN0YXRlLkNPTE9SX1dSSVRFTUFTS1szXSk7CisgICAgICAgIGdsLmN1bGxGYWNlKGdsU3RhdGUu
Q1VMTF9GQUNFX01PREUpOworICAgICAgICBnbC5kZXB0aEZ1bmMoZ2xTdGF0ZS5ERVBUSF9GVU5D
KTsKKyAgICAgICAgZ2wuZGVwdGhNYXNrKGdsU3RhdGUuREVQVEhfV1JJVEVNQVNLKTsKKyAgICAg
ICAgZ2wuZGVwdGhSYW5nZShnbFN0YXRlLkRFUFRIX1JBTkdFWzBdLCBnbFN0YXRlLkRFUFRIX1JB
TkdFWzFdKTsKKyAgICAgICAgZ2wuZnJvbnRGYWNlKGdsU3RhdGUuRlJPTlRfRkFDRSk7CisgICAg
ICAgIGdsLmhpbnQoZ2wuR0VORVJBVEVfTUlQTUFQX0hJTlQsIGdsU3RhdGUuR0VORVJBVEVfTUlQ
TUFQX0hJTlQpOworICAgICAgICBnbC5saW5lV2lkdGgoZ2xTdGF0ZS5MSU5FX1dJRFRIKTsKKwor
ICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVy
cy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgeworICAgICAgICAgICAgZ2wucGl4ZWxTdG9y
ZWkoZ2xbcGFyYW1ldGVyXSwgZ2xTdGF0ZVtwYXJhbWV0ZXJdKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZ2wucG9seWdvbk9mZnNldChnbFN0YXRlLlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiwgZ2xT
dGF0ZS5QT0xZR09OX09GRlNFVF9VTklUUyk7CisgICAgICAgIGdsLnNhbXBsZUNvdmVyYWdlKGds
U3RhdGUuU0FNUExFX0NPVkVSQUdFX1ZBTFVFLCBnbFN0YXRlLlNBTVBMRV9DT1ZFUkFHRV9JTlZF
UlQpOworICAgICAgICBnbC5zdGVuY2lsRnVuY1NlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRlLlNU
RU5DSUxfRlVOQywgZ2xTdGF0ZS5TVEVOQ0lMX1JFRiwgZ2xTdGF0ZS5TVEVOQ0lMX1ZBTFVFX01B
U0spOworICAgICAgICBnbC5zdGVuY2lsRnVuY1NlcGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUuU1RF
TkNJTF9CQUNLX0ZVTkMsIGdsU3RhdGUuU1RFTkNJTF9CQUNLX1JFRiwgZ2xTdGF0ZS5TVEVOQ0lM
X0JBQ0tfVkFMVUVfTUFTSyk7CisgICAgICAgIGdsLnN0ZW5jaWxPcFNlcGFyYXRlKGdsLkZST05U
LCBnbFN0YXRlLlNURU5DSUxfRkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCwg
Z2xTdGF0ZS5TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyk7CisgICAgICAgIGdsLnN0ZW5jaWxPcFNl
cGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUuU1RFTkNJTF9CQUNLX0ZBSUwsIGdsU3RhdGUuU1RFTkNJ
TF9CQUNLX1BBU1NfREVQVEhfRkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9Q
QVNTKTsKKyAgICAgICAgZ2wuc3RlbmNpbE1hc2tTZXBhcmF0ZShnbC5GUk9OVCwgZ2xTdGF0ZS5T
VEVOQ0lMX1dSSVRFTUFTSyk7CisgICAgICAgIGdsLnN0ZW5jaWxNYXNrU2VwYXJhdGUoZ2wuQkFD
SywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLKTsKKworICAgICAgICBnbC5zY2lzc29y
KGdsU3RhdGUuU0NJU1NPUl9CT1hbMF0sIGdsU3RhdGUuU0NJU1NPUl9CT1hbMV0sIGdsU3RhdGUu
U0NJU1NPUl9CT1hbMl0sIGdsU3RhdGUuU0NJU1NPUl9CT1hbM10pOworICAgICAgICBnbC52aWV3
cG9ydChnbFN0YXRlLlZJRVdQT1JUWzBdLCBnbFN0YXRlLlZJRVdQT1JUWzFdLCBnbFN0YXRlLlZJ
RVdQT1JUWzJdLCBnbFN0YXRlLlZJRVdQT1JUWzNdKTsKKworICAgICAgICBnbC51c2VQcm9ncmFt
KFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5DVVJSRU5UX1BST0dSQU0sIGNhY2hl
KSk7CisKKyAgICAgICAgLy8gVkVSVEVYX0FUVFJJQl9BUlJBWVMKKyAgICAgICAgdmFyIG1heFZl
cnRleEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAg
ICAgICAgIHZhciBzdGF0ZSA9IGdsU3RhdGUudmVydGV4QXR0cmliU3RhdGVzW2ldIHx8IHt9Owor
ICAgICAgICAgICAgaWYgKHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCkKKyAgICAg
ICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7CisgICAg
ICAgICAgICBpZiAoc3RhdGUuQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAgICAgICAgICAgICAg
IGdsLnZlcnRleEF0dHJpYjRmdihpLCBzdGF0ZS5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpOworICAg
ICAgICAgICAgdmFyIGJ1ZmZlciA9IFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVkVS
VEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORywgY2FjaGUpOworICAgICAgICAgICAgaWYg
KGJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVS
LCBidWZmZXIpOworICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoaSwgc3Rh
dGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFLCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1RZ
UEUsIHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCwgc3RhdGUuVkVSVEVYX0FU
VFJJQl9BUlJBWV9TVFJJREUsIHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9C
VUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5BUlJBWV9CVUZGRVJfQklO
RElORywgY2FjaGUpKTsKKyAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JV
RkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRlLkVMRU1FTlRfQVJSQVlfQlVG
RkVSX0JJTkRJTkcsIGNhY2hlKSk7CisKKyAgICAgICAgLy8gVEVYVFVSRVMKKyAgICAgICAgdmFy
IG1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1hZ2VV
bml0czsgKytpKSB7CisgICAgICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsg
aSk7CisgICAgICAgICAgICB2YXIgc3RhdGUgPSBnbFN0YXRlLnRleHR1cmVCaW5kaW5nc1tpXSB8
fCB7fTsKKyAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIFJlcGxheWFi
bGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVEVYVFVSRV8yRCwgY2FjaGUpKTsKKyAgICAgICAgICAg
IGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIFJlcGxheWFibGVSZXNvdXJjZS5y
ZXBsYXkoc3RhdGUuVEVYVFVSRV9DVUJFX01BUCwgY2FjaGUpKTsKKyAgICAgICAgfQorICAgICAg
ICBnbC5hY3RpdmVUZXh0dXJlKGdsU3RhdGUuQUNUSVZFX1RFWFRVUkUpOworCisgICAgICAgIHJl
dHVybiBSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBj
YWNoZSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0g
dGFyZ2V0CisgICAgICogQHJldHVybiB7UmVzb3VyY2V9CisgICAgICovCisgICAgY3VycmVudEJp
bmRpbmc6IGZ1bmN0aW9uKHRhcmdldCkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IFJl
c291cmNlLmZvck9iamVjdCh0YXJnZXQpOworICAgICAgICBpZiAocmVzb3VyY2UpCisgICAgICAg
ICAgICByZXR1cm4gcmVzb3VyY2U7CisgICAgICAgIHZhciBnbCA9IHRoaXMud3JhcHBlZE9iamVj
dCgpOworICAgICAgICB2YXIgYmluZGluZ1BhcmFtZXRlcjsKKyAgICAgICAgdmFyIGJpbmRNZXRo
b2ROYW1lOworICAgICAgICB2YXIgYmluZE1ldGhvZFRhcmdldCA9IHRhcmdldDsKKyAgICAgICAg
c3dpdGNoICh0YXJnZXQpIHsKKyAgICAgICAgY2FzZSBnbC5BUlJBWV9CVUZGRVI6CisgICAgICAg
ICAgICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wuQVJSQVlfQlVGRkVSX0JJTkRJTkc7CisgICAgICAg
ICAgICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kQnVmZmVyIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgYmluZGlu
Z1BhcmFtZXRlciA9IGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc7CisgICAgICAgICAg
ICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kQnVmZmVyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIGdsLlRFWFRVUkVfMkQ6CisgICAgICAgICAgICBiaW5kaW5nUGFyYW1ldGVyID0g
Z2wuVEVYVFVSRV9CSU5ESU5HXzJEOworICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmlu
ZFRleHR1cmUiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9D
VUJFX01BUDoKKyAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICBjYXNl
IGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgY2FzZSBnbC5URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9aOgorICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoK
KyAgICAgICAgICAgIGJpbmRpbmdQYXJhbWV0ZXIgPSBnbC5URVhUVVJFX0JJTkRJTkdfQ1VCRV9N
QVA7CisgICAgICAgICAgICBiaW5kTWV0aG9kVGFyZ2V0ID0gZ2wuVEVYVFVSRV9DVUJFX01BUDsK
KyAgICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRUZXh0dXJlIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIGdsLkZSQU1FQlVGRkVSOgorICAgICAgICAgICAgYmluZGlu
Z1BhcmFtZXRlciA9IGdsLkZSQU1FQlVGRkVSX0JJTkRJTkc7CisgICAgICAgICAgICBiaW5kTWV0
aG9kTmFtZSA9ICJiaW5kRnJhbWVidWZmZXIiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgZ2wuUkVOREVSQlVGRkVSOgorICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGds
LlJFTkRFUkJVRkZFUl9CSU5ESU5HOworICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmlu
ZFJlbmRlcmJ1ZmZlciI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogdW5rbm93biBiaW5k
aW5nIHRhcmdldCAiICsgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICB9CisgICAgICAgIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KGdsLmdldFBhcmFtZXRl
cihiaW5kaW5nUGFyYW1ldGVyKSk7CisgICAgICAgIGlmIChyZXNvdXJjZSkKKyAgICAgICAgICAg
IHJlc291cmNlLnB1c2hCaW5kaW5nKGJpbmRNZXRob2RUYXJnZXQsIGJpbmRNZXRob2ROYW1lKTsK
KyAgICAgICAgcmV0dXJuIHJlc291cmNlOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3Zl
cnJpZGUKKyAgICAgKiBAcmV0dXJuIHtPYmplY3QuPHN0cmluZywgRnVuY3Rpb24+fQorICAgICAq
LworICAgIF9jdXN0b21XcmFwRnVuY3Rpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2
YXIgd3JhcEZ1bmN0aW9ucyA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLl93cmFwRnVu
Y3Rpb25zOworICAgICAgICBpZiAoIXdyYXBGdW5jdGlvbnMpIHsKKyAgICAgICAgICAgIHdyYXBG
dW5jdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworCisgICAgICAgICAgICAvKioKKyAgICAg
ICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lCisgICAgICAgICAgICAgKiBAcGFy
YW0ge0Z1bmN0aW9ufSByZXNvdXJjZUNvbnN0cnVjdG9yCisgICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKG1ldGhvZE5hbWUsIHJl
c291cmNlQ29uc3RydWN0b3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyoqIEB0
aGlzIFJlc291cmNlLldyYXBGdW5jdGlvbiAqLworICAgICAgICAgICAgICAgIHdyYXBGdW5jdGlv
bnNbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgd3JhcHBlZE9iamVjdCA9IHRoaXMucmVzdWx0KCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghd3JhcHBlZE9iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlID0gbmV3IHJlc291cmNlQ29u
c3RydWN0b3Iod3JhcHBlZE9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYW5hZ2Vy
ID0gdGhpcy5fcmVzb3VyY2UubWFuYWdlcigpOworICAgICAgICAgICAgICAgICAgICBpZiAobWFu
YWdlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXIucmVnaXN0ZXJSZXNvdXJjZShy
ZXNvdXJjZSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVSZXN1bHQocmVzb3Vy
Y2UucHJveHlPYmplY3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnB1c2hDYWxs
KHRoaXMuY2FsbCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjcmVhdGVSZXNvdXJjZVdyYXBGdW5jdGlvbigiY3JlYXRlQnVmZmVyIiwgV2ViR0xCdWZm
ZXJSZXNvdXJjZSk7CisgICAgICAgICAgICBjcmVhdGVSZXNvdXJjZVdyYXBGdW5jdGlvbigiY3Jl
YXRlU2hhZGVyIiwgV2ViR0xTaGFkZXJSZXNvdXJjZSk7CisgICAgICAgICAgICBjcmVhdGVSZXNv
dXJjZVdyYXBGdW5jdGlvbigiY3JlYXRlUHJvZ3JhbSIsIFdlYkdMUHJvZ3JhbVJlc291cmNlKTsK
KyAgICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVUZXh0dXJlIiwg
V2ViR0xUZXh0dXJlUmVzb3VyY2UpOworICAgICAgICAgICAgY3JlYXRlUmVzb3VyY2VXcmFwRnVu
Y3Rpb24oImNyZWF0ZUZyYW1lYnVmZmVyIiwgV2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlKTsKKyAg
ICAgICAgICAgIGNyZWF0ZVJlc291cmNlV3JhcEZ1bmN0aW9uKCJjcmVhdGVSZW5kZXJidWZmZXIi
LCBXZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNlKTsKKyAgICAgICAgICAgIGNyZWF0ZVJlc291cmNl
V3JhcEZ1bmN0aW9uKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBSZXNvdXJjZSk7CisKKyAgICAgICAg
ICAgIC8qKgorICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUKKyAgICAg
ICAgICAgICAqLworICAgICAgICAgICAgZnVuY3Rpb24gY3VzdG9tV3JhcEZ1bmN0aW9uKG1ldGhv
ZE5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGN1c3RvbVB1c2hDYWxs
ID0gInB1c2hDYWxsXyIgKyBtZXRob2ROYW1lOworICAgICAgICAgICAgICAgIC8qKgorICAgICAg
ICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gdGFyZ2V0CisgICAgICAgICAgICAg
ICAgICogQHRoaXMgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICovCisg
ICAgICAgICAgICAgICAgd3JhcEZ1bmN0aW9uc1ttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKHRhcmdl
dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9
IHRoaXMuX3Jlc291cmNlLmN1cnJlbnRCaW5kaW5nKHRhcmdldCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghcmVzb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZVtjdXN0b21QdXNoQ2FsbF0pCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXNvdXJjZVtjdXN0b21QdXNoQ2FsbF0uY2FsbChyZXNvdXJjZSwgdGhp
cy5jYWxsKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXNvdXJjZS5wdXNoQ2FsbCh0aGlzLmNhbGwoKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJhdHRhY2hTaGFk
ZXIiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiYmluZEF0dHJpYkxvY2F0aW9u
Iik7CisgICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oImNvbXBpbGVTaGFkZXIiKTsKKyAg
ICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiZGV0YWNoU2hhZGVyIik7CisgICAgICAgICAg
ICBjdXN0b21XcmFwRnVuY3Rpb24oImxpbmtQcm9ncmFtIik7CisgICAgICAgICAgICBjdXN0b21X
cmFwRnVuY3Rpb24oInNoYWRlclNvdXJjZSIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0
aW9uKCJidWZmZXJEYXRhIik7CisgICAgICAgICAgICBjdXN0b21XcmFwRnVuY3Rpb24oImJ1ZmZl
clN1YkRhdGEiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29tcHJlc3NlZFRl
eEltYWdlMkQiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29tcHJlc3NlZFRl
eFN1YkltYWdlMkQiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29weVRleElt
YWdlMkQiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiY29weVRleFN1YkltYWdl
MkQiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigiZ2VuZXJhdGVNaXBtYXAiKTsK
KyAgICAgICAgICAgIGN1c3RvbVdyYXBGdW5jdGlvbigidGV4SW1hZ2UyRCIpOworICAgICAgICAg
ICAgY3VzdG9tV3JhcEZ1bmN0aW9uKCJ0ZXhTdWJJbWFnZTJEIik7CisgICAgICAgICAgICBjdXN0
b21XcmFwRnVuY3Rpb24oInRleFBhcmFtZXRlcmYiKTsKKyAgICAgICAgICAgIGN1c3RvbVdyYXBG
dW5jdGlvbigidGV4UGFyYW1ldGVyaSIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9u
KCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0
aW9uKCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0
aW9uKCJyZW5kZXJidWZmZXJTdG9yYWdlIik7CisKKyAgICAgICAgICAgIC8qKiBAdGhpcyBSZXNv
dXJjZS5XcmFwRnVuY3Rpb24gKi8KKyAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbImdldEVycm9y
Il0gPSBmdW5jdGlvbigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGdsID0g
dGhpcy5fb3JpZ2luYWxPYmplY3Q7CisgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdGhpcy5y
ZXN1bHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IGdsLk5PX0VSUk9SKQorICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZS5jbGVhckVycm9yKGVycm9yKTsKKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLl9yZXNv
dXJjZS5uZXh0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSBnbC5O
T19FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVSZXN1bHQoZXJy
b3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuX3dyYXBGdW5jdGlvbnMgPSB3cmFwRnVuY3Rpb25z
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB3cmFwRnVuY3Rpb25zOworICAgIH0KK30KKwor
V2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UucHJvdG90eXBlLl9fcHJvdG9fXyA9IFJlc291
cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gVHJh
Y2VMb2coKQoreworICAgIHRoaXMuX3JlcGxheWFibGVDYWxscyA9IFtdOworICAgIHRoaXMuX3Jl
cGxheWFibGVzQ2FjaGUgPSBuZXcgQ2FjaGUoKTsKK30KKworVHJhY2VMb2cucHJvdG90eXBlID0g
eworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAgKi8KKyAgICBzaXplOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVwbGF5YWJsZUNhbGxzLmxl
bmd0aDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7QXJyYXkuPFJlcGxheWFi
bGVDYWxsPn0KKyAgICAgKi8KKyAgICByZXBsYXlhYmxlQ2FsbHM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9yZXBsYXlhYmxlQ2FsbHM7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNlCisgICAgICovCisgICAgY2FwdHVy
ZVJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJlc291cmNlLnRv
UmVwbGF5YWJsZSh0aGlzLl9yZXBsYXlhYmxlc0NhY2hlKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisgICAgICovCisgICAgYWRkQ2FsbDogZnVuY3Rpb24o
Y2FsbCkKKyAgICB7CisgICAgICAgIHZhciByZXMgPSBSZXNvdXJjZS5mb3JPYmplY3QoY2FsbC5y
ZXN1bHQoKSk7CisgICAgICAgIGlmIChyZXMpCisgICAgICAgICAgICB0aGlzLmNhcHR1cmVSZXNv
dXJjZShyZXMpOworICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX3JlcGxheWFibGVzQ2FjaGUuc2l6
ZSgpOworICAgICAgICB0aGlzLl9yZXBsYXlhYmxlQ2FsbHMucHVzaChjYWxsLnRvUmVwbGF5YWJs
ZSh0aGlzLl9yZXBsYXlhYmxlc0NhY2hlKSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
X3JlcGxheWFibGVzQ2FjaGUuc2l6ZSgpID09PSBzaXplLCAiSW50ZXJuYWwgZXJyb3I6IFdlIHNo
b3VsZCBoYXZlIGNhcHR1cmVkIGFsbCB0aGUgcmVzb3VyY2VzIGFscmVhZHkgYnkgdGhpcyB0aW1l
LiIpOworICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7VHJhY2VM
b2d9IHRyYWNlTG9nCisgKi8KK2Z1bmN0aW9uIFRyYWNlTG9nUGxheWVyKHRyYWNlTG9nKQorewor
ICAgIHRoaXMuX3RyYWNlTG9nID0gdHJhY2VMb2c7CisgICAgdGhpcy5fbmV4dFJlcGxheVN0ZXAg
PSAwOworICAgIHRoaXMuX3JlcGxheVdvcmxkQ2FjaGUgPSBuZXcgQ2FjaGUoKTsKK30KKworVHJh
Y2VMb2dQbGF5ZXIucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge1RyYWNl
TG9nfQorICAgICAqLworICAgIHRyYWNlTG9nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fdHJhY2VMb2c7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4g
e251bWJlcn0KKyAgICAgKi8KKyAgICBuZXh0UmVwbGF5U3RlcDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX25leHRSZXBsYXlTdGVwOworICAgIH0sCisKKyAgICByZXNl
dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFByZXZlbnQgbWVtb3J5IGxl
YWtzOiBkZXRhY2ggYW5kIGRlbGV0ZSBhbGwgb2xkIHJlc291cmNlcyBPUiByZXVzZSB0aGVtIE9S
IGNyZWF0ZSBhIG5ldyByZXBsYXkgY2FudmFzIGV2ZXJ5IHRpbWUuCisgICAgICAgIHRoaXMuX25l
eHRSZXBsYXlTdGVwID0gMDsKKyAgICAgICAgdGhpcy5fcmVwbGF5V29ybGRDYWNoZS5yZXNldCgp
OworICAgIH0sCisKKyAgICBzdGVwOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLnN0
ZXBUbyh0aGlzLl9uZXh0UmVwbGF5U3RlcCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBzdGVwTnVtCisgICAgICovCisgICAgc3RlcFRvOiBmdW5jdGlvbihzdGVw
TnVtKQorICAgIHsKKyAgICAgICAgc3RlcE51bSA9IE1hdGgubWluKHN0ZXBOdW0sIHRoaXMuX3Ry
YWNlTG9nLnNpemUoKSAtIDEpOworICAgICAgICBjb25zb2xlLmFzc2VydChzdGVwTnVtID49IDAp
OworICAgICAgICBpZiAodGhpcy5fbmV4dFJlcGxheVN0ZXAgPiBzdGVwTnVtKQorICAgICAgICAg
ICAgdGhpcy5yZXNldCgpOworICAgICAgICAvLyBGSVhNRTogUmVwbGF5IGFsbCB0aGUgY2FjaGVk
IHJlc291cmNlcyBmaXJzdCB0byB3YXJtLXVwLgorICAgICAgICB2YXIgcmVwbGF5YWJsZUNhbGxz
ID0gdGhpcy5fdHJhY2VMb2cucmVwbGF5YWJsZUNhbGxzKCk7CisgICAgICAgIHdoaWxlICh0aGlz
Ll9uZXh0UmVwbGF5U3RlcCA8PSBzdGVwTnVtKQorICAgICAgICAgICAgcmVwbGF5YWJsZUNhbGxz
W3RoaXMuX25leHRSZXBsYXlTdGVwKytdLnJlcGxheSh0aGlzLl9yZXBsYXlXb3JsZENhY2hlKTsK
KyAgICB9LAorCisgICAgcmVwbGF5OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLnN0
ZXBUbyh0aGlzLl90cmFjZUxvZy5zaXplKCkgLSAxKTsKKyAgICB9Cit9CisKKy8qKgorICogQGNv
bnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCkKK3sKKyAg
ICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFt
ZUVuZCA9IGZhbHNlOworICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG51bGw7Cit9CisKK1Jlc291
cmNlVHJhY2tpbmdNYW5hZ2VyLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJu
IHtib29sZWFufQorICAgICAqLworICAgIGNhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmluZzsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHJldHVybiB7VHJhY2VMb2d9CisgICAgICovCisgICAgbGFzdFRyYWNlTG9nOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFRyYWNlTG9nOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge1Jlc291cmNlfSByZXNvdXJjZQorICAgICAqLworICAgIHJl
Z2lzdGVyUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsKKyAgICAgICAgcmVzb3Vy
Y2Uuc2V0TWFuYWdlcih0aGlzKTsKKyAgICB9LAorCisgICAgc3RhcnRDYXB0dXJpbmc6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQorICAgICAgICAgICAg
dGhpcy5fbGFzdFRyYWNlTG9nID0gbmV3IFRyYWNlTG9nKCk7CisgICAgICAgIHRoaXMuX2NhcHR1
cmluZyA9IHRydWU7CisgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFs
c2U7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7VHJhY2VMb2c9fSB0cmFjZUxv
ZworICAgICAqLworICAgIHN0b3BDYXB0dXJpbmc6IGZ1bmN0aW9uKHRyYWNlTG9nKQorICAgIHsK
KyAgICAgICAgaWYgKHRyYWNlTG9nICYmIHRoaXMuX2xhc3RUcmFjZUxvZyAhPT0gdHJhY2VMb2cp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOworICAgIH0sCisK
KyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xhc3RU
cmFjZUxvZyA9IG5ldyBUcmFjZUxvZygpOworICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVl
OworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IHRydWU7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNlCisgICAgICogQHBh
cmFtIHtBcnJheXxBcmd1bWVudHN9IGFyZ3MKKyAgICAgKi8KKyAgICBjYXB0dXJlQXJndW1lbnRz
OiBmdW5jdGlvbihyZXNvdXJjZSwgYXJncykKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY2Fw
dHVyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cu
Y2FwdHVyZVJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBh
cmdzLmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgdmFyIHJlcyA9IFJlc291cmNl
LmZvck9iamVjdChhcmdzW2ldKTsKKyAgICAgICAgICAgIGlmIChyZXMpCisgICAgICAgICAgICAg
ICAgdGhpcy5fbGFzdFRyYWNlTG9nLmNhcHR1cmVSZXNvdXJjZShyZXMpOworICAgICAgICB9Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLworICAg
IHJlcG9ydENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2Nh
cHR1cmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fbGFzdFRyYWNlTG9n
LmFkZENhbGwoY2FsbCk7CisgICAgICAgIGlmICh0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVu
ZCAmJiB0aGlzLl9sYXN0VHJhY2VMb2cuc2l6ZSgpID09PSAxKSB7CisgICAgICAgICAgICB0aGlz
Ll9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fc2V0
WmVyb1RpbWVvdXRzKHRoaXMuc3RvcENhcHR1cmluZy5iaW5kKHRoaXMsIHRoaXMuX2xhc3RUcmFj
ZUxvZykpOworICAgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RnVu
Y3Rpb259IGNhbGxiYWNrCisgICAgICovCisgICAgX3NldFplcm9UaW1lb3V0czogZnVuY3Rpb24o
Y2FsbGJhY2spCisgICAgeworICAgICAgICAvLyBXZSBuZWVkIGEgZmFzdGVzdCBhc3luYyBjYWxs
YmFjaywgd2hhdGV2ZXIgZmlyZXMgZmlyc3QuCisgICAgICAgIC8vIFVzdWFsbHkgYSBwb3N0TWVz
c2FnZSBzaG91bGQgYmUgZmFzdGVyIHRoYW4gYSBzZXRUaW1lb3V0KDApLgorICAgICAgICB2YXIg
Y2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworICAgICAgICBjaGFubmVsLnBvcnQxLm9u
bWVzc2FnZSA9IGNhbGxiYWNrOworICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKCIi
KTsKKyAgICAgICAgaW5zcGVjdGVkV2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDApOworICAg
IH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIEluamVjdGVkU2NyaXB0ID0g
ZnVuY3Rpb24oKQoreworICAgIHRoaXMuX21hbmFnZXIgPSBuZXcgUmVzb3VyY2VUcmFja2luZ01h
bmFnZXIoKTsKKyAgICB0aGlzLl9sYXN0VHJhY2VMb2dJZCA9IDA7CisgICAgdGhpcy5fdHJhY2VM
b2dzID0ge307CisgICAgdGhpcy5fdHJhY2VMb2dQbGF5ZXIgPSBudWxsOworICAgIHRoaXMuX3Jl
cGxheUNvbnRleHQgPSBudWxsOworfQorCitJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7Cisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsQ29udGV4dAor
ICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICB3cmFwV2ViR0xDb250ZXh0OiBm
dW5jdGlvbihnbENvbnRleHQpCisgICAgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJj
ZS5mb3JPYmplY3QoZ2xDb250ZXh0KSB8fCBuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3Vy
Y2UoZ2xDb250ZXh0LCB0aGlzLl9jb25zdHJ1Y3RXZWJHTFJlcGxheUNvbnRleHQuYmluZCh0aGlz
LCBnbENvbnRleHQpKTsKKyAgICAgICAgdGhpcy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNlKHJl
c291cmNlKTsKKyAgICAgICAgdmFyIHByb3h5ID0gcmVzb3VyY2UucHJveHlPYmplY3QoKTsKKyAg
ICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBpZCA9IHRoaXMuX21ha2VUcmFjZUxvZ0lkKCk7CisgICAg
ICAgIHRoaXMuX21hbmFnZXIuY2FwdHVyZUZyYW1lKCk7CisgICAgICAgIHRoaXMuX3RyYWNlTG9n
c1tpZF0gPSB0aGlzLl9tYW5hZ2VyLmxhc3RUcmFjZUxvZygpOworICAgICAgICByZXR1cm4gaWQ7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAorICAgICAqLwor
ICAgIGRyb3BUcmFjZUxvZzogZnVuY3Rpb24oaWQpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
dHJhY2VMb2dQbGF5ZXIgJiYgdGhpcy5fdHJhY2VMb2dQbGF5ZXIudHJhY2VMb2coKSA9PT0gdGhp
cy5fdHJhY2VMb2dzW2lkXSkKKyAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nUGxheWVyID0gbnVs
bDsKKyAgICAgICAgZGVsZXRlIHRoaXMuX3RyYWNlTG9nc1tpZF07CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAorICAgICAqIEByZXR1cm4ge09iamVjdHxzdHJp
bmd9CisgICAgICovCisgICAgdHJhY2VMb2c6IGZ1bmN0aW9uKGlkKQorICAgIHsKKyAgICAgICAg
dmFyIHRyYWNlTG9nID0gdGhpcy5fdHJhY2VMb2dzW2lkXTsKKyAgICAgICAgaWYgKCF0cmFjZUxv
ZykKKyAgICAgICAgICAgIHJldHVybiAiRXJyb3I6IFRyYWNlIGxvZyB3aXRoIHRoaXMgSUQgbm90
IGZvdW5kLiI7CisgICAgICAgIHZhciByZXN1bHQgPSB7CisgICAgICAgICAgICBpZDogaWQsCisg
ICAgICAgICAgICBjYWxsczogW10KKyAgICAgICAgfTsKKyAgICAgICAgdmFyIGNhbGxzID0gdHJh
Y2VMb2cucmVwbGF5YWJsZUNhbGxzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2Fs
bHMubGVuZ3RoOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICB2YXIgY2FsbCA9IGNhbGxzW2ld
OworICAgICAgICAgICAgdmFyIGFyZ3MgPSBjYWxsLmFyZ3MoKS5tYXAoZnVuY3Rpb24oYXJndW1l
bnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQgKyAiIjsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgdmFyIHN0YWNrVHJhY2UgPSBjYWxsLnN0YWNrVHJhY2UoKTsKKyAg
ICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBzdGFja1RyYWNlID8gc3RhY2tUcmFjZS5jYWxsRnJh
bWUoMCkgfHwge30gOiB7fTsKKyAgICAgICAgICAgIHZhciB0cmFjZUxvZ0l0ZW0gPSB7CisgICAg
ICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBjYWxsLmZ1bmN0aW9uTmFtZSgpLAorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50czogYXJncywKKyAgICAgICAgICAgICAgICBzb3VyY2VVUkw6IGNhbGxG
cmFtZS5zb3VyY2VVUkwsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogY2FsbEZyYW1lLmxp
bmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBjYWxsRnJhbWUuY29sdW1u
TnVtYmVyCisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKGNhbGwucmVzdWx0KCkpCisg
ICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLnJlc3VsdCA9IGNhbGwucmVzdWx0KCkgKyAiIjsK
KyAgICAgICAgICAgIHJlc3VsdC5jYWxscy5wdXNoKHRyYWNlTG9nSXRlbSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtzdHJpbmd9IGlkCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBObworICAgICAqIEByZXR1
cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICByZXBsYXlUcmFjZUxvZzogZnVuY3Rpb24oaWQsIHN0
ZXBObykKKyAgICB7CisgICAgICAgIHZhciB0cmFjZUxvZyA9IHRoaXMuX3RyYWNlTG9nc1tpZF07
CisgICAgICAgIGlmICghdHJhY2VMb2cpCisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAg
IGlmICghdGhpcy5fdHJhY2VMb2dQbGF5ZXIgfHwgdGhpcy5fdHJhY2VMb2dQbGF5ZXIudHJhY2VM
b2coKSAhPT0gdHJhY2VMb2cpCisgICAgICAgICAgICB0aGlzLl90cmFjZUxvZ1BsYXllciA9IG5l
dyBUcmFjZUxvZ1BsYXllcih0cmFjZUxvZyk7CisgICAgICAgIHRoaXMuX3RyYWNlTG9nUGxheWVy
LnN0ZXBUbyhzdGVwTm8pOworICAgICAgICBpZiAoIXRoaXMuX3JlcGxheUNvbnRleHQpIHsKKyAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogcmVwbGF5VHJhY2VM
b2cgZmFpbGVkIHRvIGNyZWF0ZSBhIHJlcGxheSBjYW52YXM/ISIpOworICAgICAgICAgICAgcmV0
dXJuICIiOworICAgICAgICB9CisgICAgICAgIC8vIFJldHVybiBjdXJyZW50IHNjcmVlbnNob3Qu
CisgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IHJlcGxheWluZyBzZXZlcmFsIGNhbnZhc2VzIHNp
bXVsdGFuZW91c2x5LgorICAgICAgICByZXR1cm4gdGhpcy5fcmVwbGF5Q29udGV4dC5jYW52YXMu
dG9EYXRhVVJMKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ30K
KyAgICAgKi8KKyAgICBfbWFrZVRyYWNlTG9nSWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIixc
InRyYWNlTG9nSWRcIjoiICsgKCsrdGhpcy5fbGFzdFRyYWNlTG9nSWQpICsgIn0iOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gb3JpZ2lu
YWxHbENvbnRleHQKKyAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9CisgICAg
ICovCisgICAgX2NvbnN0cnVjdFdlYkdMUmVwbGF5Q29udGV4dDogZnVuY3Rpb24ob3JpZ2luYWxH
bENvbnRleHQpCisgICAgeworICAgICAgICB2YXIgcmVwbGF5Q29udGV4dCA9IG9yaWdpbmFsR2xD
b250ZXh0WyJfX3JlcGxheUNvbnRleHQiXTsKKyAgICAgICAgaWYgKCFyZXBsYXlDb250ZXh0KSB7
CisgICAgICAgICAgICB2YXIgY2FudmFzID0gb3JpZ2luYWxHbENvbnRleHQuY2FudmFzLmNsb25l
Tm9kZSh0cnVlKTsKKyAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gb3JpZ2luYWxHbENvbnRl
eHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIHZhciBjb250ZXh0SWRzID0g
WyJleHBlcmltZW50YWwtd2ViZ2wiLCAid2Via2l0LTNkIiwgIjNkIl07CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgY29udGV4dElkOyBjb250ZXh0SWQgPSBjb250ZXh0SWRzW2ldOyArK2kp
IHsKKyAgICAgICAgICAgICAgICByZXBsYXlDb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoY29u
dGV4dElkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICBpZiAocmVwbGF5Q29udGV4dCkg
eworICAgICAgICAgICAgICAgICAgICByZXBsYXlDb250ZXh0ID0gLyoqIEB0eXBlIHtXZWJHTFJl
bmRlcmluZ0NvbnRleHR9ICovIFJlc291cmNlLndyYXBwZWRPYmplY3QocmVwbGF5Q29udGV4dCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcmlnaW5hbEdsQ29udGV4
dCwgIl9fcmVwbGF5Q29udGV4dCIsIHsKKyAgICAgICAgICAgICAgICB2YWx1ZTogcmVwbGF5Q29u
dGV4dCwKKyAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAgICAgICAgICAg
ZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuX3JlcGxheUNvbnRleHQgPSByZXBsYXlD
b250ZXh0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IFJlc2V0IHRo
ZSByZXBsYXkgR0wgc3RhdGUgYW5kIGNsZWFyIHRoZSBjYW52YXMuCisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlcGxheUNvbnRleHQ7CisgICAgfQorfQorCit2YXIgaW5qZWN0ZWRTY3JpcHQg
PSBuZXcgSW5qZWN0ZWRTY3JpcHQoKTsKK3JldHVybiBpbmplY3RlZFNjcmlwdDsKKworfSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCA0ZmU1OGJkZjZiNmFiYTA2
NzQ2OTU5ODA2NGI3NTM1OTEwMTFhZWRkLi5mMTEzN2M3OGQwNjY5MDM4MjhmMWVmODVhMTExMjEx
MWIxYzc2ZmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Lmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0z
MDY4LDcgKzMwNjgsNyBAQAogICAgICAgICBdCiAgICAgfSwKICAgICB7Ci0gICAgICAgICJkb21h
aW4iOiAiQ2FudmFzIiwKKyAgICAgICAgImRvbWFpbiI6ICJXZWJHTCIsCiAgICAgICAgICJoaWRk
ZW4iOiB0cnVlLAogICAgICAgICAidHlwZXMiOiBbCiAgICAgICAgICAgICB7CkBAIC0zMTAwLDEx
ICszMTAwLDExIEBACiAgICAgICAgICJjb21tYW5kcyI6IFsKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiLAotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJFbmFibGVzIENhbnZhcyBpbnNwZWN0aW9uLiIKKyAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiRW5hYmxlcyBXZWJHTCBpbnNwZWN0aW9uLiIKICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIm5hbWUiOiAiZGlzYWJsZSIsCi0gICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkRpc2FibGVzIENhbnZhcyBpbnNwZWN0aW9uLiIKKyAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGlzYWJsZXMgV2ViR0wgaW5zcGVjdGlvbi4iCiAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogImRy
b3BUcmFjZUxvZyIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbElu
T25lLmNwcAppbmRleCAxOGNmOWQwZmMyZDhkM2E4YmZjNzJmZDA5ZjM4ODM5YzY4MjQwYmI1Li5k
YjNmODJjYmU5YWJmODI3YTk3YWFlOGMwODRhOGZkNmIxMjA5MmI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAKQEAgLTMyLDE0ICszMiwxMiBA
QAogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5jcHAiCiAjaW5jbHVkZSAiSW5qZWN0ZWRT
Y3JpcHQuY3BwIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0QmFzZS5jcHAiCi0jaW5jbHVkZSAi
SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3BwIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0
SG9zdC5jcHAiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYXNlQWdlbnQuY3BwIgogI2luY2x1ZGUg
Ikluc3BlY3RvckNTU0FnZW50LmNwcCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDYW52YXNBZ2VudC5j
cHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JD
b25zb2xlQWdlbnQuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuY3BwIgpAQCAt
NjgsNiArNjYsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvclN0eWxlVGV4dEVkaXRvci5jcHAiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
VmFsdWVzLmNwcCIKKyNpbmNsdWRlICJJbnNwZWN0b3JXZWJHTEFnZW50LmNwcCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50
cy5jcHAiCiAjaW5jbHVkZSAiTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5jcHAiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZmMjkzODQ1ZDRlNDMxZDc5MDYxOGUzNmYwOTY4NzVi
NmI5MTg5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCIKLQotI2luY2x1
ZGUgIkluamVjdGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGUuaCIKLSNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCi0jaW5jbHVkZSAi
SW5zdHJ1bWVudGluZ0FnZW50cy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTY3Jp
cHRPYmplY3QuaCIKLSNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLW5hbWVzcGFjZSBDYW52YXNBZ2VudFN0YXRlIHsKLXN0YXRpYyBjb25zdCBjaGFyIGNh
bnZhc0FnZW50RW5hYmxlZFtdID0gImNhbnZhc0FnZW50RW5hYmxlZCI7Ci19OwotCi1JbnNwZWN0
b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBQYWdlKiBwYWdlLCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3Bl
Y3RvckJhc2VBZ2VudDxJbnNwZWN0b3JDYW52YXNBZ2VudD4oIkNhbnZhcyIsIGluc3RydW1lbnRp
bmdBZ2VudHMsIHN0YXRlKQotICAgICwgbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCi0gICAgLCBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgLCBtX2Zyb250
ZW5kKDApCi0gICAgLCBtX2VuYWJsZWQoZmFsc2UpCi17Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLT5zZXRJbnNwZWN0b3JDYW52YXNBZ2VudCh0aGlzKTsKLX0KLQotSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6On5JbnNwZWN0b3JDYW52YXNBZ2VudCgpCi17Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLT5zZXRJbnNwZWN0b3JDYW52YXNBZ2VudCgwKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQotewotICAg
IEFTU0VSVChmcm9udGVuZCk7Ci0gICAgbV9mcm9udGVuZCA9IGZyb250ZW5kLT5jYW52YXMoKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2xlYXJGcm9udGVuZCgpCi17Ci0gICAg
bV9mcm9udGVuZCA9IDA7Ci0gICAgZGlzYWJsZSgwKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6cmVzdG9yZSgpCi17Ci0gICAgbV9lbmFibGVkID0gbV9zdGF0ZS0+Z2V0Qm9vbGVh
bihDYW52YXNBZ2VudFN0YXRlOjpjYW52YXNBZ2VudEVuYWJsZWQpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcqKQotewotICAgIGlmIChtX2VuYWJs
ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2VuYWJsZWQgPSB0cnVlOwotICAgIG1fc3RhdGUt
PnNldEJvb2xlYW4oQ2FudmFzQWdlbnRTdGF0ZTo6Y2FudmFzQWdlbnRFbmFibGVkLCBtX2VuYWJs
ZWQpOwotfQotCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
KikKLXsKLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oQ2FudmFzQWdlbnRTdGF0ZTo6Y2Fu
dmFzQWdlbnRFbmFibGVkLCBtX2VuYWJsZWQpOwotfQotCi12b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50Ojpkcm9wVHJhY2VMb2coRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHRyYWNlTG9nSWQpCi17Ci0gICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0g
aW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxvZ0lkKGVycm9yU3RyaW5nLCB0cmFj
ZUxvZ0lkKTsKLSAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIG1vZHVsZS5k
cm9wVHJhY2VMb2coZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpjYXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTdHJp
bmcqIHRyYWNlTG9nSWQpCi17Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbWFpbldv
cmxkU2NyaXB0U3RhdGUobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSk7Ci0gICAgSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6
Om1vZHVsZUZvclN0YXRlKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBzY3JpcHRTdGF0ZSk7Ci0g
ICAgaWYgKG1vZHVsZS5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgKmVycm9yU3RyaW5nID0gIklu
c3BlY3RlZCBmcmFtZSBoYXMgZ29uZSI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbW9k
dWxlLmNhcHR1cmVGcmFtZShlcnJvclN0cmluZywgdHJhY2VMb2dJZCk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmdldFRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNhbnZhczo6VHJh
Y2VMb2c+JiB0cmFjZUxvZykKLXsKLSAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1
bGUgPSBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZUZvclRyYWNlTG9nSWQoZXJyb3JTdHJpbmcs
IHRyYWNlTG9nSWQpOwotICAgIGlmICghbW9kdWxlLmhhc05vVmFsdWUoKSkKLSAgICAgICAgbW9k
dWxlLnRyYWNlTG9nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkLCAmdHJhY2VMb2cpOwotfQotCi12
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXBsYXlUcmFjZUxvZyhFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCwgaW50IHN0ZXBObywgU3RyaW5nKiBy
ZXN1bHQpCi17Ci0gICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxvZ0lkKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lk
KTsKLSAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIG1vZHVsZS5yZXBsYXlU
cmFjZUxvZyhlcnJvclN0cmluZywgdHJhY2VMb2dJZCwgc3RlcE5vLCByZXN1bHQpOwotfQotCi0j
aWYgRU5BQkxFKFdFQkdMKQotU2NyaXB0T2JqZWN0IEluc3BlY3RvckNhbnZhc0FnZW50Ojp3cmFw
V2ViR0xSZW5kZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKGNvbnN0IFNjcmlwdE9iamVj
dCYgZ2xDb250ZXh0KQotewotICAgIGlmIChnbENvbnRleHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7
Ci0gICAgfQotICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IEluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlOjptb2R1bGVGb3JTdGF0ZShtX2luamVjdGVkU2NyaXB0TWFuYWdl
ciwgZ2xDb250ZXh0LnNjcmlwdFN0YXRlKCkpOwotICAgIGlmIChtb2R1bGUuaGFzTm9WYWx1ZSgp
KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gU2NyaXB0
T2JqZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiBtb2R1bGUud3JhcFdlYkdMQ29udGV4dChnbENv
bnRleHQpOwotfQotI2VuZGlmCi0KLUluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjppbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZUZvclRyYWNlTG9nSWQoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQpCi17Ci0gICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+
aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZCh0cmFjZUxvZ0lkKTsKLSAgICBpZiAoaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgICplcnJvclN0cmluZyA9ICJJbnNwZWN0ZWQg
ZnJhbWUgaGFzIGdvbmUiOwotICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGUoKTsKLSAgICB9Ci0gICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6Om1vZHVsZUZvclN0YXRlKG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLCBpbmplY3RlZFNjcmlwdC5zY3JpcHRTdGF0ZSgpKTsKLSAgICBpZiAobW9kdWxlLmhh
c05vVmFsdWUoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgKmVy
cm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiBubyBDYW52YXMgbW9kdWxlIjsKLSAgICAgICAg
cmV0dXJuIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBt
b2R1bGU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNB
Z2VudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDYwYzY0MTAwMjE5MDA2NzA4
MGZkYmYyMDRmOWFmZWQ5NWQ5YmM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2Vu
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEluc3BlY3RvckNhbnZh
c0FnZW50X2gKLSNkZWZpbmUgSW5zcGVjdG9yQ2FudmFzQWdlbnRfaAotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUikKLQotI2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2VudC5oIgotI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaCIKLSNp
bmNsdWRlICJTY3JpcHRTdGF0ZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVs
ZTsKLWNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLWNsYXNzIEluc3BlY3RvclN0YXRlOwot
Y2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKLWNsYXNzIFBhZ2U7Ci1jbGFzcyBTY3JpcHRPYmpl
Y3Q7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi1jbGFzcyBJbnNwZWN0b3JDYW52
YXNBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+
LCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbnZhc0NvbW1hbmRIYW5kbGVy
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JDYW52YXNBZ2VudD4g
Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3Rv
clN0YXRlKiBzdGF0ZSwgUGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3Bl
Y3RvckNhbnZhc0FnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHN0YXRlLCBwYWdlLCBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIpKTsKLSAgICB9Ci0gICAgfkluc3BlY3RvckNhbnZhc0FnZW50KCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJGcm9udGVuZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7
Ci0KLSAgICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7IH0KLQotI2lmIEVOQUJM
RShXRUJHTCkKLSAgICBTY3JpcHRPYmplY3Qgd3JhcFdlYkdMUmVuZGVyaW5nQ29udGV4dEZvcklu
c3RydW1lbnRhdGlvbihjb25zdCBTY3JpcHRPYmplY3QmKTsKLSNlbmRpZgotCi0gICAgLy8gQ2Fs
bGVkIGZyb20gdGhlIGZyb250LWVuZC4KLSAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3Ry
aW5nKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZHJvcFRyYWNlTG9nKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJik7Ci0gICAg
dmlydHVhbCB2b2lkIGNhcHR1cmVGcmFtZShFcnJvclN0cmluZyosIFN0cmluZyopOwotICAgIHZp
cnR1YWwgdm9pZCBnZXRUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYsIFJlZlB0
cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpUcmFjZUxvZz4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVw
bGF5VHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBpbnQsIFN0cmluZyopOwot
Ci0gICAgLy8gQ2FsbGVkIGZyb20gdGhlIGluamVjdGVkIHNjcmlwdC4KLQotICAgIC8vIENhbGxl
ZCBmcm9tIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgotCi1wcml2YXRlOgotICAgIEluc3BlY3Rv
ckNhbnZhc0FnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2Uq
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKLQotICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlIGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlRm9yVHJhY2VMb2dJZChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYpOwotCi0gICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOwotICAgIEluamVj
dGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci0gICAgSW5zcGVjdG9y
RnJvbnRlbmQ6OkNhbnZhcyogbV9mcm9udGVuZDsKLSAgICBib29sIG1fZW5hYmxlZDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0K
LSNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JDYW52YXNBZ2VudF9oKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0luc3RydW1lbnRhdGlv
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTA0Yjg3ODk0MmMzYzIzZTkwNTAy
N2NjMGY1MWI3NjIxNTQyOTUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNJbnN0cnVt
ZW50YXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEluc3BlY3Rv
ckNhbnZhc0luc3RydW1lbnRhdGlvbl9oCi0jZGVmaW5lIEluc3BlY3RvckNhbnZhc0luc3RydW1l
bnRhdGlvbl9oCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JDYW52YXNBZ2VudC5oIgotI2luY2x1ZGUg
Ikluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2Vu
dHMuaCIKLSNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci0jaWYgRU5BQkxFKFdFQkdMKQotU2NyaXB0T2JqZWN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d3JhcFdlYkdMUmVuZGVyaW5nQ29udGV4dEZvckluc3RydW1lbnRhdGlvbihEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IFNjcmlwdE9iamVjdCYgZ2xDb250ZXh0KQotewotI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKSB7Ci0gICAgICAg
IEluc3BlY3RvckNhbnZhc0FnZW50KiBjYW52YXNBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvckNhbnZhc0FnZW50KCk7Ci0gICAgICAgIGlmIChjYW52YXNBZ2VudCAmJiBjYW52
YXNBZ2VudC0+ZW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNhbnZhc0FnZW50LT53cmFw
V2ViR0xSZW5kZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKGdsQ29udGV4dCk7Ci0gICAg
fQotI2VuZGlmCi0gICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwotfQotI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yQ2FudmFzSW5zdHJ1bWVudGF0aW9uX2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggOWJkNDMzMTFmOTJiNmU5MDc2
YmQ0MjAxZjVhMWZkODUwZGFlYmRiMS4uYzg1ZjRkNGNhODUxZDM5ZDNjMjAwYjI2MjI2NTU5MDg3
MWIzZmQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFzZUFnZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ1NTQWdlbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDYW52YXNBZ2VudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIgpAQCAtNjMsNiArNjIs
NyBAQAogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JXZWJHTEFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV29ya2VyQWdl
bnQuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCiAjaW5jbHVkZSAiUGFnZUNv
bnNvbGVBZ2VudC5oIgpAQCAtMTQ3LDcgKzE0Nyw5IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Oklu
c3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JD
CiAgICAgbV9hZ2VudHMuYXBwZW5kKEluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGUobV9pbnN0
cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpKSk7CiAjZW5kaWYKIAotICAgIG1f
YWdlbnRzLmFwcGVuZChJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuZ2V0KCkpKTsKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgbV9hZ2VudHMuYXBwZW5kKEluc3Bl
Y3RvcldlYkdMQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3Rh
dGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7CisjZW5kaWYK
IAogICAgIEFTU0VSVF9BUkcoaW5zcGVjdG9yQ2xpZW50LCBpbnNwZWN0b3JDbGllbnQpOwogICAg
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+aW5pdChtX2lu
c3BlY3RvckFnZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV2ViR0xBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2Vi
R0xBZ2VudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZmZmJjZmE0MDlhM2FmMjJmODEyNThhYjBjYTgwNzFh
MWQ4NTM1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JXZWJHTEFnZW50LmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIklu
c3BlY3RvcldlYkdMQWdlbnQuaCIKKworI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCisjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZS5oIiAKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclN0YXRlLmgiCisjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTY3Jp
cHRTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXZWJHTEFnZW50
U3RhdGUgeworc3RhdGljIGNvbnN0IGNoYXIgd2ViR0xBZ2VudEVuYWJsZWRbXSA9ICJ3ZWJHTEFn
ZW50RW5hYmxlZCI7Cit9OworCitJbnNwZWN0b3JXZWJHTEFnZW50OjpJbnNwZWN0b3JXZWJHTEFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0
YXRlKiBzdGF0ZSwgUGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIpCisgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yV2ViR0xBZ2Vu
dD4oIldlYkdMIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgc3RhdGUpCisgICAgLCBtX2luc3BlY3Rl
ZFBhZ2UocGFnZSkKKyAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0
TWFuYWdlcikKKyAgICAsIG1fZnJvbnRlbmQoMCkKKyAgICAsIG1fZW5hYmxlZChmYWxzZSkKK3sK
KyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvcldlYkdMQWdlbnQodGhpcyk7
Cit9CisKK0luc3BlY3RvcldlYkdMQWdlbnQ6On5JbnNwZWN0b3JXZWJHTEFnZW50KCkKK3sKKyAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvcldlYkdMQWdlbnQoMCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yV2ViR0xBZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQq
IGZyb250ZW5kKQoreworICAgIEFTU0VSVChmcm9udGVuZCk7CisgICAgbV9mcm9udGVuZCA9IGZy
b250ZW5kLT53ZWJnbCgpOworfQorCit2b2lkIEluc3BlY3RvcldlYkdMQWdlbnQ6OmNsZWFyRnJv
bnRlbmQoKQoreworICAgIG1fZnJvbnRlbmQgPSAwOworICAgIGRpc2FibGUoMCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yV2ViR0xBZ2VudDo6cmVzdG9yZSgpCit7CisgICAgbV9lbmFibGVkID0gbV9z
dGF0ZS0+Z2V0Qm9vbGVhbihXZWJHTEFnZW50U3RhdGU6OndlYkdMQWdlbnRFbmFibGVkKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JXZWJHTEFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcqKQoreworICAg
IGlmIChtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2VuYWJsZWQgPSB0cnVlOwor
ICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oV2ViR0xBZ2VudFN0YXRlOjp3ZWJHTEFnZW50RW5hYmxl
ZCwgbV9lbmFibGVkKTsKK30KKwordm9pZCBJbnNwZWN0b3JXZWJHTEFnZW50OjpkaXNhYmxlKEVy
cm9yU3RyaW5nKikKK3sKKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fZW5hYmxlZCA9IGZhbHNlOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oV2ViR0xBZ2VudFN0
YXRlOjp3ZWJHTEFnZW50RW5hYmxlZCwgbV9lbmFibGVkKTsKK30KKwordm9pZCBJbnNwZWN0b3JX
ZWJHTEFnZW50Ojpkcm9wVHJhY2VMb2coRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHRyYWNlTG9nSWQpCit7CisgICAgSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSBtb2R1
bGUgPSBpbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlRm9yVHJhY2VMb2dJZChlcnJvclN0cmluZywg
dHJhY2VMb2dJZCk7CisgICAgaWYgKCFtb2R1bGUuaGFzTm9WYWx1ZSgpKQorICAgICAgICBtb2R1
bGUuZHJvcFRyYWNlTG9nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JXZWJHTEFnZW50OjpjYXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBT
dHJpbmcqIHRyYWNlTG9nSWQpCit7CisgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbWFp
bldvcmxkU2NyaXB0U3RhdGUobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSk7CisgICAgSW5q
ZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSBtb2R1bGUgPSBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
Ojptb2R1bGVGb3JTdGF0ZShtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgc2NyaXB0U3RhdGUpOwor
ICAgIGlmIChtb2R1bGUuaGFzTm9WYWx1ZSgpKSB7CisgICAgICAgICplcnJvclN0cmluZyA9ICJJ
bnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1v
ZHVsZS5jYXB0dXJlRnJhbWUoZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQpOworfQorCit2b2lkIElu
c3BlY3RvcldlYkdMQWdlbnQ6OmdldFRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OldlYkdMOjpUcmFj
ZUxvZz4mIHRyYWNlTG9nKQoreworICAgIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGUgbW9kdWxl
ID0gaW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZUZvclRyYWNlTG9nSWQoZXJyb3JTdHJpbmcsIHRy
YWNlTG9nSWQpOworICAgIGlmICghbW9kdWxlLmhhc05vVmFsdWUoKSkKKyAgICAgICAgbW9kdWxl
LnRyYWNlTG9nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkLCAmdHJhY2VMb2cpOworfQorCit2b2lk
IEluc3BlY3RvcldlYkdMQWdlbnQ6OnJlcGxheVRyYWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBpbnQgc3RlcE5vLCBTdHJpbmcqIHJlc3Vs
dCkKK3sKKyAgICBJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2Ny
aXB0V2ViR0xNb2R1bGVGb3JUcmFjZUxvZ0lkKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKKyAg
ICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkpCisgICAgICAgIG1vZHVsZS5yZXBsYXlUcmFjZUxv
ZyhlcnJvclN0cmluZywgdHJhY2VMb2dJZCwgc3RlcE5vLCByZXN1bHQpOworfQorCitTY3JpcHRP
YmplY3QgSW5zcGVjdG9yV2ViR0xBZ2VudDo6d3JhcFdlYkdMUmVuZGVyaW5nQ29udGV4dEZvcklu
c3RydW1lbnRhdGlvbihjb25zdCBTY3JpcHRPYmplY3QmIGdsQ29udGV4dCkKK3sKKyAgICBpZiAo
Z2xDb250ZXh0Lmhhc05vVmFsdWUoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOworICAgIH0KKyAgICBJbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlIG1vZHVsZSA9IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGU6Om1vZHVsZUZv
clN0YXRlKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBnbENvbnRleHQuc2NyaXB0U3RhdGUoKSk7
CisgICAgaWYgKG1vZHVsZS5oYXNOb1ZhbHVlKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBTY3JpcHRPYmplY3QoKTsKKyAgICB9CisgICAgcmV0dXJu
IG1vZHVsZS53cmFwV2ViR0xDb250ZXh0KGdsQ29udGV4dCk7Cit9CisKK0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGUgSW5zcGVjdG9yV2ViR0xBZ2VudDo6aW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZUZvclRyYWNlTG9nSWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRy
YWNlTG9nSWQpCit7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZCh0cmFjZUxvZ0lkKTsK
KyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CisgICAgICAgICplcnJvclN0
cmluZyA9ICJJbnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOworICAgICAgICByZXR1cm4gSW5qZWN0
ZWRTY3JpcHRXZWJHTE1vZHVsZSgpOworICAgIH0KKyAgICBJbmplY3RlZFNjcmlwdFdlYkdMTW9k
dWxlIG1vZHVsZSA9IEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGU6Om1vZHVsZUZvclN0YXRlKG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBpbmplY3RlZFNjcmlwdC5zY3JpcHRTdGF0ZSgpKTsKKyAg
ICBpZiAobW9kdWxlLmhhc05vVmFsdWUoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiBubyBXZWJHTCBtb2R1
bGUiOworICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZSgpOworICAgIH0K
KyAgICByZXR1cm4gbW9kdWxlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWI3YWZjZjMz
OGNhNzFlYWVhMjg0MWFiOTkzNDZkYWE5ZmNlOGEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuaApAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJbnNwZWN0b3JXZWJHTEFnZW50X2gKKyNkZWZpbmUgSW5zcGVjdG9yV2ViR0xBZ2Vu
dF9oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRl
ICJJbnNwZWN0b3JCYXNlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOworY2xhc3MgSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZTsKK2NsYXNzIEluc3BlY3RvclN0YXRlOworY2xhc3MgSW5zdHJ1bWVudGluZ0Fn
ZW50czsKK2NsYXNzIFBhZ2U7CitjbGFzcyBTY3JpcHRPYmplY3Q7CisKK3R5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JXZWJHTEFnZW50IDogcHVibGljIEluc3Bl
Y3RvckJhc2VBZ2VudDxJbnNwZWN0b3JXZWJHTEFnZW50PiwgcHVibGljIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpXZWJHTENvbW1hbmRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJbnNwZWN0b3JXZWJHTEFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBQYWdlKiBwYWdl
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yV2ViR0xBZ2VudChpbnN0cnVtZW50
aW5nQWdlbnRzLCBzdGF0ZSwgcGFnZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CisgICAgfQor
ICAgIH5JbnNwZWN0b3JXZWJHTEFnZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbnRl
bmQoSW5zcGVjdG9yRnJvbnRlbmQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcm9udGVuZCgp
OworICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CisKKyAgICBib29sIGVuYWJsZWQoKSB7IHJl
dHVybiBtX2VuYWJsZWQ7IH0KKworICAgIFNjcmlwdE9iamVjdCB3cmFwV2ViR0xSZW5kZXJpbmdD
b250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKGNvbnN0IFNjcmlwdE9iamVjdCYpOworCisgICAgLy8g
Q2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nKik7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJvcFRyYWNlTG9nKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJik7Cisg
ICAgdmlydHVhbCB2b2lkIGNhcHR1cmVGcmFtZShFcnJvclN0cmluZyosIFN0cmluZyopOworICAg
IHZpcnR1YWwgdm9pZCBnZXRUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYsIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6V2ViR0w6OlRyYWNlTG9nPiYpOworICAgIHZpcnR1YWwgdm9pZCBy
ZXBsYXlUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYsIGludCwgU3RyaW5nKik7
CisKKyAgICAvLyBDYWxsZWQgZnJvbSB0aGUgaW5qZWN0ZWQgc2NyaXB0LgorCisgICAgLy8gQ2Fs
bGVkIGZyb20gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCisKK3ByaXZhdGU6CisgICAgSW5zcGVj
dG9yV2ViR0xBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdl
KiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisKKyAgICBJbmplY3RlZFNjcmlwdFdlYkdMTW9k
dWxlIGluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVGb3JUcmFjZUxvZ0lkKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJik7CisKKyAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CisgICAgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKKyAgICBJbnNwZWN0b3JG
cm9udGVuZDo6V2ViR0wqIG1fZnJvbnRlbmQ7CisgICAgYm9vbCBtX2VuYWJsZWQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSAmJiBF
TkFCTEUoV0VCR0wpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JXZWJHTEFnZW50X2gp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xJbnN0
cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTElu
c3RydW1lbnRhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1Njc1MjI0YjY3YzgyMzU2Y2U2NDhmMWQ2NDgz
MGI5YmI0MzVmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yV2ViR0xJbnN0cnVtZW50YXRpb24uaApAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
bnNwZWN0b3JXZWJHTEluc3RydW1lbnRhdGlvbl9oCisjZGVmaW5lIEluc3BlY3RvcldlYkdMSW5z
dHJ1bWVudGF0aW9uX2gKKworI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgor
I2luY2x1ZGUgIkluc3BlY3RvcldlYkdMQWdlbnQuaCIKKyNpbmNsdWRlICJJbnN0cnVtZW50aW5n
QWdlbnRzLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworI2lmIEVOQUJMRShXRUJHTCkKK1NjcmlwdE9iamVjdCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndyYXBXZWJHTFJlbmRlcmluZ0NvbnRleHRGb3JJbnN0cnVtZW50YXRpb24oRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBTY3JpcHRPYmplY3QmIGdsQ29udGV4dCkKK3sKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkgeworICAg
ICAgICBJbnNwZWN0b3JXZWJHTEFnZW50KiB3ZWJHTEFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy0+aW5zcGVjdG9yV2ViR0xBZ2VudCgpOworICAgICAgICBpZiAod2ViR0xBZ2VudCAmJiB3ZWJH
TEFnZW50LT5lbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gd2ViR0xBZ2VudC0+d3JhcFdl
YkdMUmVuZGVyaW5nQ29udGV4dEZvckluc3RydW1lbnRhdGlvbihnbENvbnRleHQpOworICAgIH0K
KyNlbmRpZgorICAgIHJldHVybiBTY3JpcHRPYmplY3QoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvcldlYkdMSW5zdHJ1bWVudGF0aW9uX2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaAppbmRleCAyMzA2ZTdhMWU4YTA1NzBhMzAzMjU1ZDYy
MjZhMzdlNDQyNmExYWY2Li4xMzM0ZGM3ZDZkYjdlZGIzOTA4NmI5NmUzYzc4NjRjYTE3OGYzNDFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmgK
QEAgLTM4LDIxICszOCwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3Rv
ckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OworY2xhc3MgSW5z
cGVjdG9yUGFnZUFnZW50OworY2xhc3MgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDsKIGNsYXNz
IEluc3BlY3RvckNTU0FnZW50OwotY2xhc3MgSW5zcGVjdG9yQ2FudmFzQWdlbnQ7CiBjbGFzcyBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKLWNsYXNzIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDsKIGNsYXNzIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDsKLWNsYXNzIEluc3BlY3RvclBh
Z2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yUnVudGltZUFnZW50OwogY2xhc3MgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDsKIGNsYXNzIEluc3BlY3RvcldvcmtlckFnZW50OworY2xhc3MgSW5z
cGVjdG9yV2ViR0xBZ2VudDsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBQYWdlUnVudGltZUFnZW50Owog
Y2xhc3MgV29ya2VyQ29udGV4dDsKQEAgLTg3LDcgKzg3LDkgQEAgcHVibGljOgogI2lmIEVOQUJM
RShXT1JLRVJTKQogICAgICAgICAsIG1faW5zcGVjdG9yV29ya2VyQWdlbnQoMCkKICNlbmRpZgot
ICAgICAgICAsIG1faW5zcGVjdG9yQ2FudmFzQWdlbnQoMCkKKyNpZiBFTkFCTEUoV0VCR0wpCisg
ICAgICAgICwgbV9pbnNwZWN0b3JXZWJHTEFnZW50KDApCisjZW5kaWYKICAgICB7IH0KICAgICB+
SW5zdHJ1bWVudGluZ0FnZW50cygpIHsgfQogCkBAIC0xNTAsOCArMTUyLDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEluc3BlY3RvcldvcmtlckFnZW50KEluc3BlY3RvcldvcmtlckFnZW50KiBh
Z2VudCkgeyBtX2luc3BlY3RvcldvcmtlckFnZW50ID0gYWdlbnQ7IH0KICNlbmRpZgogCi0gICAg
SW5zcGVjdG9yQ2FudmFzQWdlbnQqIGluc3BlY3RvckNhbnZhc0FnZW50KCkgY29uc3QgeyByZXR1
cm4gbV9pbnNwZWN0b3JDYW52YXNBZ2VudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yQ2FudmFz
QWdlbnQoSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yQ2FudmFzQWdl
bnQgPSBhZ2VudDsgfQorI2lmIEVOQUJMRShXRUJHTCkKKyAgICBJbnNwZWN0b3JXZWJHTEFnZW50
KiBpbnNwZWN0b3JXZWJHTEFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JXZWJHTEFn
ZW50OyB9CisgICAgdm9pZCBzZXRJbnNwZWN0b3JXZWJHTEFnZW50KEluc3BlY3RvcldlYkdMQWdl
bnQqIGFnZW50KSB7IG1faW5zcGVjdG9yV2ViR0xBZ2VudCA9IGFnZW50OyB9CisjZW5kaWYKIAog
cHJpdmF0ZToKICAgICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKQEAgLTE3OSw3
ICsxODMsOSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIEluc3BlY3Rvcldv
cmtlckFnZW50KiBtX2luc3BlY3RvcldvcmtlckFnZW50OwogI2VuZGlmCi0gICAgSW5zcGVjdG9y
Q2FudmFzQWdlbnQqIG1faW5zcGVjdG9yQ2FudmFzQWdlbnQ7CisjaWYgRU5BQkxFKFdFQkdMKQor
ICAgIEluc3BlY3RvcldlYkdMQWdlbnQqIG1faW5zcGVjdG9yV2ViR0xBZ2VudDsKKyNlbmRpZgog
fTsKIAogSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGF0aW9uRm9yUGFnZShQYWdlKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQu
cHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKaW5kZXgg
NzZkY2FlZjM0NTE5NGFhNTlhY2E4M2JkMGI0OTFkZjIzY2ZjZTRjYi4uMDNlYWVlZTFiY2JiNDdl
NGE2MDlmMjkzMDM2Y2Y4YTcxMmZmODBmMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9jb21waWxlLWZyb250LWVuZC5weQpAQCAtMzMyLDcgKzMzMiw3IEBAIG1vZHVsZXMgPSBbCiAg
ICAgICAgICAgICAiUHJvZmlsZXNQYW5lbC5qcyIsCiAgICAgICAgICAgICAiUHJvZmlsZUxhdW5j
aGVyVmlldy5qcyIsCiAgICAgICAgICAgICAiVG9wRG93blByb2ZpbGVEYXRhR3JpZFRyZWUuanMi
LAotICAgICAgICAgICAgIkNhbnZhc1Byb2ZpbGVWaWV3LmpzIiwKKyAgICAgICAgICAgICJXZWJH
TFByb2ZpbGVWaWV3LmpzIiwKICAgICAgICAgXQogICAgIH0sCiAgICAgewpAQCAtNDA3LDE1ICs0
MDcsMTUgQEAgaWYgbm90IHByb2Nlc3NfcmVjdXJzaXZlbHk6CiAgICAgb3Muc3lzdGVtKGNvbW1h
bmQpCiAgICAgb3Muc3lzdGVtKCJybSAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0
ZWRTY3JpcHRTb3VyY2VUbXAuanMiKQogCi0gICAgcHJpbnQgIkNvbXBpbGluZyBJbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcy4uLiIKLSAgICBvcy5zeXN0ZW0oImVjaG8gXCJ2YXIg
aW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVWYWx1ZSA9IFwiID4gIiArIGluc3BlY3Rvcl9wYXRo
ICsgIi8iICsgIkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlVG1wLmpzIikKLSAgICBv
cy5zeXN0ZW0oImNhdCAgIiArIGluc3BlY3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlU291cmNlLmpzIiArICIgPj4gIiArIGluc3BlY3Rvcl9wYXRoICsgIi8iICsg
IkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlVG1wLmpzIikKKyAgICBwcmludCAiQ29t
cGlsaW5nIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMuLi4iCisgICAgb3Muc3lz
dGVtKCJlY2hvIFwidmFyIGluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVWYWx1ZSA9IFwiID4gIiAr
IGluc3BlY3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2VU
bXAuanMiKQorICAgIG9zLnN5c3RlbSgiY2F0ICAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAi
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcyIgKyAiID4+ICIgKyBpbnNwZWN0b3Jf
cGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlVG1wLmpzIikKICAg
ICBjb21tYW5kID0gY29tcGlsZXJfY29tbWFuZAogICAgIGNvbW1hbmQgKz0gIiAgICAtLWV4dGVy
bnMgIiArIGluc3BlY3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0RXh0ZXJucy5qcyIg
KyAiIFxcXG4iCiAgICAgY29tbWFuZCArPSAiICAgIC0tbW9kdWxlICIgKyBqc21vZHVsZV9uYW1l
X3ByZWZpeCArICJpbmplY3RlZF9zY3JpcHQiICsgIjoiICsgIjEiICsgIiBcXFxuIgotICAgIGNv
bW1hbmQgKz0gIiAgICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2VUbXAuanMiICsgIiBcXFxuIgorICAgIGNvbW1hbmQg
Kz0gIiAgICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3Jp
cHRXZWJHTE1vZHVsZVNvdXJjZVRtcC5qcyIgKyAiIFxcXG4iCiAgICAgY29tbWFuZCArPSAiXG4i
CiAgICAgb3Muc3lzdGVtKGNvbW1hbmQpCi0gICAgb3Muc3lzdGVtKCJybSAiICsgaW5zcGVjdG9y
X3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2VUbXAuanMiKQor
ICAgIG9zLnN5c3RlbSgicm0gIiArIGluc3BlY3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2Ny
aXB0V2ViR0xNb2R1bGVTb3VyY2VUbXAuanMiKQogCiBzaHV0aWwucm10cmVlKG1vZHVsZXNfZGly
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYW52YXNQ
cm9maWxlVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FudmFz
UHJvZmlsZVZpZXcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MWFkOGEzNzM5
MjNkODg1MGE3ZDc0MWJkNzVlMTM0ODE3ZTMxZTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
YW52YXNQcm9maWxlVmlldy5qcworKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqLwotV2Vi
SW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVWaWV3ID0gZnVuY3Rpb24ocHJvZmlsZSkKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENT
UygiY2FudmFzUHJvZmlsZXIuY3NzIik7Ci0gICAgdGhpcy5fcHJvZmlsZSA9IHByb2ZpbGU7Ci0g
ICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNhbnZhcy1wcm9maWxlLXZpZXciKTsKLQot
ICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudC5jbGFzc05hbWUgPSAiY2FudmFzLXRyYWNlLWxv
ZyI7Ci0gICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
dGhpcy5fb25UcmFjZUxvZ0l0ZW1DbGljay5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5l
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3RyYWNlTG9nRWxlbWVudCk7Ci0KLSAgICB2YXIgcmVw
bGF5SW1hZ2VDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBy
ZXBsYXlJbWFnZUNvbnRhaW5lci5pZCA9ICJjYW52YXMtcmVwbGF5LWltYWdlLWNvbnRhaW5lciI7
Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJlcGxheUltYWdlQ29udGFpbmVyKTsKLQot
ICAgIHRoaXMuX3JlcGxheUltYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlt
YWdlIik7Ci0gICAgdGhpcy5fcmVwbGF5SW1hZ2VFbGVtZW50LmlkID0gImNhbnZhcy1yZXBsYXkt
aW1hZ2UiOwotICAgIHJlcGxheUltYWdlQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JlcGxh
eUltYWdlRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9kZWJ1Z0luZm9FbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgcmVwbGF5SW1hZ2VDb250YWluZXIuYXBwZW5kQ2hp
bGQodGhpcy5fZGVidWdJbmZvRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9saW5raWZpZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLkxpbmtpZmllcigpOwotCi0gICAgdGhpcy5fc2hvd1RyYWNlTG9nKCk7Ci19
Ci0KLVdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVmlldy5wcm90b3R5cGUgPSB7Ci0gICAgZGlz
cG9zZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbGlua2lmaWVyLnJlc2V0KCk7
Ci0gICAgICAgIENhbnZhc0FnZW50LmRyb3BUcmFjZUxvZyh0aGlzLl9wcm9maWxlLnRyYWNlTG9n
SWQoKSk7Ci0gICAgfSwKLQotICAgIGdldCBzdGF0dXNCYXJJdGVtcygpCi0gICAgewotICAgICAg
ICByZXR1cm4gW107Ci0gICAgfSwKLQotICAgIGdldCBwcm9maWxlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9wcm9maWxlOwotICAgIH0sCi0KLSAgICB3YXNTaG93bjogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIHNjcm9sbFBvc2l0aW9uID0gdGhpcy5fdHJhY2VMb2dFbGVt
ZW50U2Nyb2xsUG9zaXRpb247Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl90cmFjZUxvZ0VsZW1lbnRT
Y3JvbGxQb3NpdGlvbjsKLSAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uKSB7Ci0gICAgICAgICAg
ICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zaXRpb24udG9wOwot
ICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2dFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxQb3Np
dGlvbi5sZWZ0OwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHdpbGxIaWRlOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnRTY3JvbGxQb3NpdGlvbiA9IHsK
LSAgICAgICAgICAgIHRvcDogdGhpcy5fdHJhY2VMb2dFbGVtZW50LnNjcm9sbFRvcCwKLSAgICAg
ICAgICAgIGxlZnQ6IHRoaXMuX3RyYWNlTG9nRWxlbWVudC5zY3JvbGxMZWZ0Ci0gICAgICAgIH07
Ci0gICAgfSwKLQotICAgIF9zaG93VHJhY2VMb2c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGZ1bmN0aW9uIGRpZFJlY2VpdmVUcmFjZUxvZyhlcnJvciwgdHJhY2VMb2cpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nRWxlbWVudC50ZXh0Q29udGVudCA9ICIiOwotICAg
ICAgICAgICAgaWYgKCF0cmFjZUxvZykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB2YXIgY2FsbHMgPSB0cmFjZUxvZy5jYWxsczsKLSAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwLCBuID0gY2FsbHMubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGNhbGwgPSBjYWxsc1tpXTsKLSAgICAgICAgICAgICAgICB2YXIgdHJhY2VMb2dJdGVtID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVt
LnRyYWNlTG9nSWQgPSB0cmFjZUxvZy5pZDsKLSAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0u
c3RlcE5vID0gaTsKLSAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0uYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoIigiICsgKGkrMSkgKyAiKSAiKSk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoY2FsbC5zb3VyY2VVUkwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUo
NjI3MjUpOiBzdGFjayB0cmFjZSBsaW5lL2NvbHVtbiBudW1iZXJzIGFyZSBvbmUtYmFzZWQuCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gTWF0aC5tYXgoMCwgY2FsbC5saW5l
TnVtYmVyIC0gMSkgfHwgMDsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9
IE1hdGgubWF4KDAsIGNhbGwuY29sdW1uTnVtYmVyIC0gMSkgfHwgMDsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGxpbmtFbGVtZW50ID0gdGhpcy5fbGlua2lmaWVyLmxpbmtpZnlMb2NhdGlvbihj
YWxsLnNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAg
ICAgICAgbGlua0VsZW1lbnQudGV4dENvbnRlbnQgPSBjYWxsLmZ1bmN0aW9uTmFtZTsKLSAgICAg
ICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFwcGVuZENoaWxkKGxpbmtFbGVtZW50KTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNhbGwuZnVuY3Rpb25OYW1lKSk7Ci0K
LSAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIigiICsgY2FsbC5hcmd1bWVudHMuam9pbigiLCAiKSArICIpIikpOwotICAgICAg
ICAgICAgICAgIGlmICh0eXBlb2YgY2FsbC5yZXN1bHQgIT09ICJ1bmRlZmluZWQiKQotICAgICAg
ICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIiA9PiAiICsgY2FsbC5yZXN1bHQpKTsKLSAgICAgICAgICAgICAgICB0aGlzLl90cmFj
ZUxvZ0VsZW1lbnQuYXBwZW5kQ2hpbGQodHJhY2VMb2dJdGVtKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBDYW52YXNBZ2VudC5nZXRUcmFjZUxvZyh0aGlzLl9wcm9maWxlLnRy
YWNlTG9nSWQoKSwgZGlkUmVjZWl2ZVRyYWNlTG9nLmJpbmQodGhpcykpOwotICAgIH0sCi0KLSAg
ICBfb25UcmFjZUxvZ0l0ZW1DbGljazogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHZhciBp
dGVtID0gZS50YXJnZXQ7Ci0gICAgICAgIGlmICghaXRlbSB8fCAhaXRlbS50cmFjZUxvZ0lkKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCk7Ci0gICAg
ICAgIGZ1bmN0aW9uIGRpZFJlcGxheVRyYWNlTG9nKGVycm9yLCBkYXRhVVJMKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0aGlzLl9kZWJ1Z0luZm9FbGVtZW50LnRleHRDb250ZW50ID0gIlJlcGxh
eSB0aW1lOiAiICsgKERhdGUubm93KCkgLSB0aW1lKSArICJtcyI7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5fYWN0aXZlVHJhY2VMb2dJdGVtKQotICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVRy
YWNlTG9nSXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiIjsKLSAgICAgICAgICAgIHRoaXMu
X2FjdGl2ZVRyYWNlTG9nSXRlbSA9IGl0ZW07Ci0gICAgICAgICAgICB0aGlzLl9hY3RpdmVUcmFj
ZUxvZ0l0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gInllbGxvdyI7Ci0gICAgICAgICAgICB0
aGlzLl9yZXBsYXlJbWFnZUVsZW1lbnQuc3JjID0gZGF0YVVSTDsKLSAgICAgICAgfQotICAgICAg
ICBDYW52YXNBZ2VudC5yZXBsYXlUcmFjZUxvZyhpdGVtLnRyYWNlTG9nSWQsIGl0ZW0uc3RlcE5v
LCBkaWRSZXBsYXlUcmFjZUxvZy5iaW5kKHRoaXMpKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rv
ci5DYW52YXNQcm9maWxlVmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZp
ZXcucHJvdG90eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5Qcm9maWxlVHlwZX0KLSAqLwotV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBl
ID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5jYWxsKHRoaXMs
IFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5UeXBlSWQsIFdlYkluc3BlY3Rvci5VSVN0
cmluZygiQ2FwdHVyZSBDYW52YXMgRnJhbWUiKSk7Ci0gICAgdGhpcy5fbmV4dFByb2ZpbGVVaWQg
PSAxOwotICAgIC8vIEZJWE1FOiBlbmFibGUvZGlzYWJsZSBieSBhIFVJIGFjdGlvbj8KLSAgICBD
YW52YXNBZ2VudC5lbmFibGUoKTsKLX0KLQotV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBl
LlR5cGVJZCA9ICJDQU5WQVNfUFJPRklMRSI7Ci0KLVdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxl
VHlwZS5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IGJ1dHRvblRvb2x0aXAoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2FwdHVyZSBDYW52YXMgRnJhbWUuIik7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKLSAgICAgKiBAcmV0dXJuIHti
b29sZWFufQotICAgICAqLwotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHByb2ZpbGVzUGFu
ZWwpCi0gICAgewotICAgICAgICB2YXIgcHJvZmlsZUhlYWRlciA9IG5ldyBXZWJJbnNwZWN0b3Iu
Q2FudmFzUHJvZmlsZUhlYWRlcih0aGlzLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRyYWNlIExv
ZyAlZCIsIHRoaXMuX25leHRQcm9maWxlVWlkKSwgdGhpcy5fbmV4dFByb2ZpbGVVaWQpOwotICAg
ICAgICArK3RoaXMuX25leHRQcm9maWxlVWlkOwotICAgICAgICBwcm9maWxlSGVhZGVyLmlzVGVt
cG9yYXJ5ID0gdHJ1ZTsKLSAgICAgICAgcHJvZmlsZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHBy
b2ZpbGVIZWFkZXIpOwotICAgICAgICBmdW5jdGlvbiBkaWRTdGFydENhcHR1cmluZ0ZyYW1lKGVy
cm9yLCB0cmFjZUxvZ0lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9maWxlSGVhZGVyLl90
cmFjZUxvZ0lkID0gdHJhY2VMb2dJZDsKLSAgICAgICAgICAgIHByb2ZpbGVIZWFkZXIuaXNUZW1w
b3JhcnkgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBDYW52YXNBZ2VudC5jYXB0dXJlRnJh
bWUoZGlkU3RhcnRDYXB0dXJpbmdGcmFtZS5iaW5kKHRoaXMpKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0sCi0KLSAgICBnZXQgdHJlZUl0ZW1UaXRsZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDQU5WQVMgUFJPRklMRSIpOwotICAgIH0sCi0K
LSAgICBnZXQgZGVzY3JpcHRpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ2FudmFzIGNhbGxzIGluc3RydW1lbnRhdGlvbiIpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICByZXNldDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fbmV4dFByb2ZpbGVVaWQgPSAxOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRpdGxlCi0gICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9Ci0gICAgICovCi0gICAgY3Jl
YXRlVGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24odGl0bGUpCi0gICAgewotICAgICAgICB0aXRs
ZSA9IHRpdGxlIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2FwdHVyaW5nXHUyMDI2Iik7Ci0g
ICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVIZWFkZXIodGhpcywg
dGl0bGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFy
YW0ge1Byb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQotICAgICAqIEByZXR1cm4g
e1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQotICAgICAqLwotICAgIGNyZWF0ZVByb2ZpbGU6
IGZ1bmN0aW9uKHByb2ZpbGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5DYW52YXNQcm9maWxlSGVhZGVyKHRoaXMsIHByb2ZpbGUudGl0bGUsIC0xKTsKLSAgICB9Ci19
Ci0KLVdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlfSB0eXBlCi0gKiBAcGFyYW0ge3N0cmluZ30g
dGl0bGUKLSAqIEBwYXJhbSB7bnVtYmVyPX0gdWlkCi0gKi8KLVdlYkluc3BlY3Rvci5DYW52YXNQ
cm9maWxlSGVhZGVyID0gZnVuY3Rpb24odHlwZSwgdGl0bGUsIHVpZCkKLXsKLSAgICBXZWJJbnNw
ZWN0b3IuUHJvZmlsZUhlYWRlci5jYWxsKHRoaXMsIHR5cGUsIHRpdGxlLCB1aWQpOwotCi0gICAg
LyoqCi0gICAgICogQHR5cGUge3N0cmluZz99Ci0gICAgICovCi0gICAgdGhpcy5fdHJhY2VMb2dJ
ZCA9IG51bGw7Ci19Ci0KLVdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlSGVhZGVyLnByb3RvdHlw
ZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmc/fQotICAgICAqLwotICAgIHRy
YWNlTG9nSWQ6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2VMb2dJZDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICovCi0gICAgY3JlYXRl
U2lkZWJhclRyZWVFbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3
IFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVFbGVtZW50KHRoaXMsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiVHJhY2UgTG9nICVkIiksICJwcm9maWxlLXNpZGViYXItdHJlZS1pdGVtIik7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKLSAgICAgKi8KLSAgICBjcmVh
dGVWaWV3OiBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVZpZXcodGhpcyk7Ci0gICAgfQotfQotCi1XZWJJ
bnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXIucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCmluZGV4IGQwZDIwYWE2OWFjZWRk
ZTZkNTU5ZjA3MWQ4ZTZmYTI0MTUyYjA1YWUuLjZhOGI0ZDg5ZjUzZDY5M2EwNWFlM2E0ZTZmMDcx
MmQwOTM1YTE4ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvUHJvZmlsZXNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Byb2ZpbGVzUGFuZWwuanMKQEAgLTI0OCw4ICsyNDgsOCBAQCBXZWJJbnNwZWN0b3IuUHJv
ZmlsZXNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICAgICAgdGhpcy5fcmVnaXN0ZXJQcm9maWxlVHlw
ZShuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlKCkpOwogICAgIGlmIChX
ZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5uYXRpdmVNZW1vcnlTbmFwc2hvdHMuaXNF
bmFibGVkKCkpCiAgICAgICAgIHRoaXMuX3JlZ2lzdGVyUHJvZmlsZVR5cGUobmV3IFdlYkluc3Bl
Y3Rvci5OYXRpdmVNZW1vcnlQcm9maWxlVHlwZSgpKTsKLSAgICBpZiAoV2ViSW5zcGVjdG9yLmV4
cGVyaW1lbnRzU2V0dGluZ3MuY2FudmFzSW5zcGVjdGlvbi5pc0VuYWJsZWQoKSkKLSAgICAgICAg
dGhpcy5fcmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVU
eXBlKCkpOworICAgIGlmIChXZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy53ZWJHTElu
c3BlY3Rpb24uaXNFbmFibGVkKCkpCisgICAgICAgIHRoaXMuX3JlZ2lzdGVyUHJvZmlsZVR5cGUo
bmV3IFdlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVUeXBlKCkpOwogCiAgICAgSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlclByb2ZpbGVyRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVy
RGlzcGF0Y2hlcih0aGlzKSk7CiAKQEAgLTEzMTksNCArMTMxOSw0IEBAIGltcG9ydFNjcmlwdCgi
SGVhcFNuYXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcyIpOwogaW1wb3J0U2NyaXB0KCJOYXRpdmVN
ZW1vcnlTbmFwc2hvdFZpZXcuanMiKTsKIGltcG9ydFNjcmlwdCgiUHJvZmlsZUxhdW5jaGVyVmll
dy5qcyIpOwogaW1wb3J0U2NyaXB0KCJUb3BEb3duUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIpOwot
aW1wb3J0U2NyaXB0KCJDYW52YXNQcm9maWxlVmlldy5qcyIpOworaW1wb3J0U2NyaXB0KCJXZWJH
TFByb2ZpbGVWaWV3LmpzIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NldHRpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TZXR0aW5ncy5qcwppbmRleCBhMTM4Y2I2NTg1MTU1NTQ5MWEyNjU1ZGY0MDg3OGU1MjM5NTc5
NTYyLi5lMzUzODRiMDRlMmMwM2U0NTJmZDExMDRiM2U0MDI0ZDIwMGNjMDdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKQEAgLTE5MSw3ICsx
OTEsNyBAQCBXZWJJbnNwZWN0b3IuRXhwZXJpbWVudHNTZXR0aW5ncyA9IGZ1bmN0aW9uKCkKICAg
ICB0aGlzLm5hdGl2ZU1lbW9yeVNuYXBzaG90cyA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoIm5h
dGl2ZU1lbW9yeVNuYXBzaG90cyIsICJOYXRpdmUgbWVtb3J5IHByb2ZpbGluZyIpOwogICAgIHRo
aXMubGl2ZU5hdGl2ZU1lbW9yeUNoYXJ0ID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVudCgibGl2ZU5h
dGl2ZU1lbW9yeUNoYXJ0IiwgIkxpdmUgbmF0aXZlIG1lbW9yeSBjaGFydCIpOwogICAgIHRoaXMu
ZmlsZVN5c3RlbUluc3BlY3Rpb24gPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJmaWxlU3lzdGVt
SW5zcGVjdGlvbiIsICJGaWxlU3lzdGVtIGluc3BlY3Rpb24iKTsKLSAgICB0aGlzLmNhbnZhc0lu
c3BlY3Rpb24gPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJjYW52YXNJbnNwZWN0aW9uICIsICJD
YW52YXMgaW5zcGVjdGlvbiIpOworICAgIHRoaXMud2ViR0xJbnNwZWN0aW9uID0gdGhpcy5fY3Jl
YXRlRXhwZXJpbWVudCgid2ViR0xJbnNwZWN0aW9uICIsICJXZWJHTCBpbnNwZWN0aW9uIik7CiAg
ICAgdGhpcy5tYWluVGhyZWFkTW9uaXRvcmluZyA9IHRoaXMuX2NyZWF0ZUV4cGVyaW1lbnQoIm1h
aW5UaHJlYWRNb25pdG9yaW5nIiwgIlNob3cgQ1BVIGFjdGl2aXR5IGluIFRpbWVsaW5lIik7CiAg
ICAgdGhpcy5nZW9sb2NhdGlvbk92ZXJyaWRlID0gdGhpcy5fY3JlYXRlRXhwZXJpbWVudCgiZ2Vv
bG9jYXRpb25PdmVycmlkZSIsICJPdmVycmlkZSBEZXZpY2UgR2VvbG9jYXRpb24iKTsKICAgICB0
aGlzLmRldmljZU9yaWVudGF0aW9uT3ZlcnJpZGUgPSB0aGlzLl9jcmVhdGVFeHBlcmltZW50KCJk
ZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlIiwgIk92ZXJyaWRlIERldmljZSBPcmllbnRhdGlvbiIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJHTFBy
b2ZpbGVWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJHTFBy
b2ZpbGVWaWV3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMjg1MzZjODgyMTE0MzBlYmE4OTc5YWRjNmNhMzU4
ZmM2MDAyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYkdMUHJvZmlsZVZpZXcuanMKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBjb25z
dHJ1Y3RvcgorICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQorICovCitXZWJJbnNwZWN0
b3IuV2ViR0xQcm9maWxlVmlldyA9IGZ1bmN0aW9uKHByb2ZpbGUpCit7CisgICAgV2ViSW5zcGVj
dG9yLlZpZXcuY2FsbCh0aGlzKTsKKyAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1MoIndlYkdM
UHJvZmlsZXIuY3NzIik7CisgICAgdGhpcy5fcHJvZmlsZSA9IHByb2ZpbGU7CisgICAgdGhpcy5l
bGVtZW50LmFkZFN0eWxlQ2xhc3MoIndlYmdsLXByb2ZpbGUtdmlldyIpOworCisgICAgdGhpcy5f
dHJhY2VMb2dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhp
cy5fdHJhY2VMb2dFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJnbC10cmFjZS1sb2ciOworICAgIHRo
aXMuX3RyYWNlTG9nRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX29uVHJh
Y2VMb2dJdGVtQ2xpY2suYmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLl90cmFjZUxvZ0VsZW1lbnQpOworCisgICAgdmFyIHJlcGxheUltYWdlQ29u
dGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgcmVwbGF5SW1hZ2VD
b250YWluZXIuaWQgPSAid2ViZ2wtcmVwbGF5LWltYWdlLWNvbnRhaW5lciI7CisgICAgdGhpcy5l
bGVtZW50LmFwcGVuZENoaWxkKHJlcGxheUltYWdlQ29udGFpbmVyKTsKKworICAgIHRoaXMuX3Jl
cGxheUltYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltYWdlIik7CisgICAg
dGhpcy5fcmVwbGF5SW1hZ2VFbGVtZW50LmlkID0gIndlYmdsLXJlcGxheS1pbWFnZSI7CisgICAg
cmVwbGF5SW1hZ2VDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmVwbGF5SW1hZ2VFbGVtZW50
KTsKKworICAgIHRoaXMuX2RlYnVnSW5mb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICByZXBsYXlJbWFnZUNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9kZWJ1
Z0luZm9FbGVtZW50KTsKKworICAgIHRoaXMuX2xpbmtpZmllciA9IG5ldyBXZWJJbnNwZWN0b3Iu
TGlua2lmaWVyKCk7CisKKyAgICB0aGlzLl9zaG93VHJhY2VMb2coKTsKK30KKworV2ViSW5zcGVj
dG9yLldlYkdMUHJvZmlsZVZpZXcucHJvdG90eXBlID0geworICAgIGRpc3Bvc2U6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xpbmtpZmllci5yZXNldCgpOworICAgICAgICBXZWJH
TEFnZW50LmRyb3BUcmFjZUxvZyh0aGlzLl9wcm9maWxlLnRyYWNlTG9nSWQoKSk7CisgICAgfSwK
KworICAgIGdldCBzdGF0dXNCYXJJdGVtcygpCisgICAgeworICAgICAgICByZXR1cm4gW107Cisg
ICAgfSwKKworICAgIGdldCBwcm9maWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9w
cm9maWxlOworICAgIH0sCisKKyAgICB3YXNTaG93bjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdmFyIHNjcm9sbFBvc2l0aW9uID0gdGhpcy5fdHJhY2VMb2dFbGVtZW50U2Nyb2xsUG9zaXRp
b247CisgICAgICAgIGRlbGV0ZSB0aGlzLl90cmFjZUxvZ0VsZW1lbnRTY3JvbGxQb3NpdGlvbjsK
KyAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl90cmFjZUxv
Z0VsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zaXRpb24udG9wOworICAgICAgICAgICAgdGhp
cy5fdHJhY2VMb2dFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxQb3NpdGlvbi5sZWZ0OworICAg
ICAgICB9CisgICAgfSwKKworICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl90cmFjZUxvZ0VsZW1lbnRTY3JvbGxQb3NpdGlvbiA9IHsKKyAgICAgICAgICAgIHRv
cDogdGhpcy5fdHJhY2VMb2dFbGVtZW50LnNjcm9sbFRvcCwKKyAgICAgICAgICAgIGxlZnQ6IHRo
aXMuX3RyYWNlTG9nRWxlbWVudC5zY3JvbGxMZWZ0CisgICAgICAgIH07CisgICAgfSwKKworICAg
IF9zaG93VHJhY2VMb2c6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGRpZFJl
Y2VpdmVUcmFjZUxvZyhlcnJvciwgdHJhY2VMb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRo
aXMuX3RyYWNlTG9nRWxlbWVudC50ZXh0Q29udGVudCA9ICIiOworICAgICAgICAgICAgaWYgKCF0
cmFjZUxvZykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB2YXIgY2FsbHMg
PSB0cmFjZUxvZy5jYWxsczsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2FsbHMu
bGVuZ3RoOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGwgPSBjYWxsc1tp
XTsKKyAgICAgICAgICAgICAgICB2YXIgdHJhY2VMb2dJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLnRyYWNlTG9nSWQgPSB0
cmFjZUxvZy5pZDsKKyAgICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0uc3RlcE5vID0gaTsKKyAg
ICAgICAgICAgICAgICB0cmFjZUxvZ0l0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIigiICsgKGkrMSkgKyAiKSAiKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2FsbC5z
b3VyY2VVUkwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUoNjI3MjUpOiBzdGFjayB0
cmFjZSBsaW5lL2NvbHVtbiBudW1iZXJzIGFyZSBvbmUtYmFzZWQuCisgICAgICAgICAgICAgICAg
ICAgIHZhciBsaW5lTnVtYmVyID0gTWF0aC5tYXgoMCwgY2FsbC5saW5lTnVtYmVyIC0gMSkgfHwg
MDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IE1hdGgubWF4KDAsIGNh
bGwuY29sdW1uTnVtYmVyIC0gMSkgfHwgMDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmtF
bGVtZW50ID0gdGhpcy5fbGlua2lmaWVyLmxpbmtpZnlMb2NhdGlvbihjYWxsLnNvdXJjZVVSTCwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgbGlua0VsZW1l
bnQudGV4dENvbnRlbnQgPSBjYWxsLmZ1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgICAgICAgICAg
dHJhY2VMb2dJdGVtLmFwcGVuZENoaWxkKGxpbmtFbGVtZW50KTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdHJhY2VMb2dJdGVtLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKGNhbGwuZnVuY3Rpb25OYW1lKSk7CisKKyAgICAgICAgICAgICAg
ICB0cmFjZUxvZ0l0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIigiICsg
Y2FsbC5hcmd1bWVudHMuam9pbigiLCAiKSArICIpIikpOworICAgICAgICAgICAgICAgIGlmICh0
eXBlb2YgY2FsbC5yZXN1bHQgIT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAgICAgICB0
cmFjZUxvZ0l0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiA9PiAiICsg
Y2FsbC5yZXN1bHQpKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90cmFjZUxvZ0VsZW1lbnQuYXBw
ZW5kQ2hpbGQodHJhY2VMb2dJdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBXZWJHTEFnZW50LmdldFRyYWNlTG9nKHRoaXMuX3Byb2ZpbGUudHJhY2VMb2dJZCgpLCBkaWRS
ZWNlaXZlVHJhY2VMb2cuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIF9vblRyYWNlTG9nSXRl
bUNsaWNrOiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgdmFyIGl0ZW0gPSBlLnRhcmdldDsK
KyAgICAgICAgaWYgKCFpdGVtIHx8ICFpdGVtLnRyYWNlTG9nSWQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKTsKKyAgICAgICAgZnVuY3Rpb24gZGlk
UmVwbGF5VHJhY2VMb2coZXJyb3IsIGRhdGFVUkwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRo
aXMuX2RlYnVnSW5mb0VsZW1lbnQudGV4dENvbnRlbnQgPSAiUmVwbGF5IHRpbWU6ICIgKyAoRGF0
ZS5ub3coKSAtIHRpbWUpICsgIm1zIjsKKyAgICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmVUcmFj
ZUxvZ0l0ZW0pCisgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlVHJhY2VMb2dJdGVtLnN0eWxl
LmJhY2tncm91bmRDb2xvciA9ICIiOworICAgICAgICAgICAgdGhpcy5fYWN0aXZlVHJhY2VMb2dJ
dGVtID0gaXRlbTsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVRyYWNlTG9nSXRlbS5zdHlsZS5i
YWNrZ3JvdW5kQ29sb3IgPSAieWVsbG93IjsKKyAgICAgICAgICAgIHRoaXMuX3JlcGxheUltYWdl
RWxlbWVudC5zcmMgPSBkYXRhVVJMOworICAgICAgICB9CisgICAgICAgIFdlYkdMQWdlbnQucmVw
bGF5VHJhY2VMb2coaXRlbS50cmFjZUxvZ0lkLCBpdGVtLnN0ZXBObywgZGlkUmVwbGF5VHJhY2VM
b2cuYmluZCh0aGlzKSk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlVmll
dy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlOworCisv
KioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Qcm9maWxlVHlw
ZX0KKyAqLworV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZVR5cGUgPSBmdW5jdGlvbigpCit7Cisg
ICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLldlYkdM
UHJvZmlsZVR5cGUuVHlwZUlkLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhcHR1cmUgV2ViR0wg
RnJhbWUiKSk7CisgICAgdGhpcy5fbmV4dFByb2ZpbGVVaWQgPSAxOworICAgIC8vIEZJWE1FOiBl
bmFibGUvZGlzYWJsZSBieSBhIFVJIGFjdGlvbj8KKyAgICBXZWJHTEFnZW50LmVuYWJsZSgpOwor
fQorCitXZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlVHlwZS5UeXBlSWQgPSAiV0VCR0xfUFJPRklM
RSI7CisKK1dlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKKyAgICBn
ZXQgYnV0dG9uVG9vbHRpcCgpCisgICAgeworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJDYXB0dXJlIFdlYkdMIGZyYW1lLiIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBw
cm9maWxlc1BhbmVsCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBidXR0
b25DbGlja2VkOiBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQorICAgIHsKKyAgICAgICAgdmFyIHBy
b2ZpbGVIZWFkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZUhlYWRlcih0aGlzLCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRyYWNlIExvZyAlZCIsIHRoaXMuX25leHRQcm9maWxlVWlk
KSwgdGhpcy5fbmV4dFByb2ZpbGVVaWQpOworICAgICAgICArK3RoaXMuX25leHRQcm9maWxlVWlk
OworICAgICAgICBwcm9maWxlSGVhZGVyLmlzVGVtcG9yYXJ5ID0gdHJ1ZTsKKyAgICAgICAgcHJv
ZmlsZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVIZWFkZXIpOworICAgICAgICBmdW5j
dGlvbiBkaWRTdGFydENhcHR1cmluZ0ZyYW1lKGVycm9yLCB0cmFjZUxvZ0lkKQorICAgICAgICB7
CisgICAgICAgICAgICBwcm9maWxlSGVhZGVyLl90cmFjZUxvZ0lkID0gdHJhY2VMb2dJZDsKKyAg
ICAgICAgICAgIHByb2ZpbGVIZWFkZXIuaXNUZW1wb3JhcnkgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBXZWJHTEFnZW50LmNhcHR1cmVGcmFtZShkaWRTdGFydENhcHR1cmluZ0ZyYW1lLmJp
bmQodGhpcykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIGdldCB0cmVl
SXRlbVRpdGxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IldFQkdMIFBST0ZJTEUiKTsKKyAgICB9LAorCisgICAgZ2V0IGRlc2NyaXB0aW9uKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIldlYkdMIGNhbGxzIGluc3Ry
dW1lbnRhdGlvbiIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAg
Ki8KKyAgICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbmV4dFByb2Zp
bGVVaWQgPSAxOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBA
cGFyYW0ge3N0cmluZz19IHRpdGxlCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2Zp
bGVIZWFkZXJ9CisgICAgICovCisgICAgY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24o
dGl0bGUpCisgICAgeworICAgICAgICB0aXRsZSA9IHRpdGxlIHx8IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiQ2FwdHVyaW5nXHUyMDI2Iik7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LldlYkdMUHJvZmlsZUhlYWRlcih0aGlzLCB0aXRsZSk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7UHJvZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVy
fSBwcm9maWxlCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9Cisg
ICAgICovCisgICAgY3JlYXRlUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZUhlYWRlcih0aGlzLCBwcm9m
aWxlLnRpdGxlLCAtMSk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlVHlw
ZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlw
ZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJv
ZmlsZUhlYWRlcn0KKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZVR5cGV9IHR5
cGUKKyAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZQorICogQHBhcmFtIHtudW1iZXI9fSB1aWQKKyAq
LworV2ViSW5zcGVjdG9yLldlYkdMUHJvZmlsZUhlYWRlciA9IGZ1bmN0aW9uKHR5cGUsIHRpdGxl
LCB1aWQpCit7CisgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIuY2FsbCh0aGlzLCB0eXBl
LCB0aXRsZSwgdWlkKTsKKworICAgIC8qKgorICAgICAqIEB0eXBlIHtzdHJpbmc/fQorICAgICAq
LworICAgIHRoaXMuX3RyYWNlTG9nSWQgPSBudWxsOworfQorCitXZWJJbnNwZWN0b3IuV2ViR0xQ
cm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtzdHJp
bmc/fQorICAgICAqLworICAgIHRyYWNlTG9nSWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5fdHJhY2VMb2dJZDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRl
CisgICAgICovCisgICAgY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVFbGVt
ZW50KHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVHJhY2UgTG9nICVkIiksICJwcm9maWxl
LXNpZGViYXItdHJlZS1pdGVtIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlk
ZQorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFu
ZWwKKyAgICAgKi8KKyAgICBjcmVhdGVWaWV3OiBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuV2ViR0xQcm9maWxlVmlldyh0aGlz
KTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5XZWJHTFByb2ZpbGVIZWFkZXIucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyLnByb3RvdHlwZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCBhYzY0OTQ3
YTMxOWIxOTM5MTE1OGYyYzVlZTg0MTUyOWM5NDgwMWNmLi5jZmViMTk0ZTRjMzE1ZjdiZGFjMWQ0
ODJmMmQ3YWE0NDgxMDgxMzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9XZWJLaXQucXJjCkBAIC0xNCw3ICsxNCw2IEBACiAgICAgPGZpbGU+QnJlYWtwb2ludE1h
bmFnZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczwvZmls
ZT4KICAgICA8ZmlsZT5DYWxsU3RhY2tTaWRlYmFyUGFuZS5qczwvZmlsZT4KLSAgICA8ZmlsZT5D
YW52YXNQcm9maWxlVmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5DaGVja2JveC5qczwvZmlsZT4K
ICAgICA8ZmlsZT5Db2RlTWlycm9yVGV4dEVkaXRvci5qczwvZmlsZT4KICAgICA8ZmlsZT5Db2xv
ci5qczwvZmlsZT4KQEAgLTIxMSwxMyArMjEwLDEzIEBACiAgICAgPGZpbGU+dXRpbGl0aWVzLmpz
PC9maWxlPgogICAgIDxmaWxlPlZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+V2F0Y2hFeHByZXNz
aW9uc1NpZGViYXJQYW5lLmpzPC9maWxlPgorICAgIDxmaWxlPldlYkdMUHJvZmlsZVZpZXcuanM8
L2ZpbGU+CiAgICAgPGZpbGU+V29ya2VyTWFuYWdlci5qczwvZmlsZT4KICAgICA8ZmlsZT5Xb3Jr
ZXJzU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+V29ya3NwYWNlLmpzPC9maWxlPgog
ICAgIDxmaWxlPlVnbGlmeUpTL3BhcnNlLWpzLmpzPC9maWxlPgogICAgIDxmaWxlPmF1ZGl0c1Bh
bmVsLmNzczwvZmlsZT4KICAgICA8ZmlsZT5icmVhZGNydW1iTGlzdC5jc3M8L2ZpbGU+Ci0gICAg
PGZpbGU+Y2FudmFzUHJvZmlsZXIuY3NzPC9maWxlPgogICAgIDxmaWxlPmNzc05hbWVkRmxvd3Mu
Y3NzPC9maWxlPgogICAgIDxmaWxlPmRhdGFHcmlkLmNzczwvZmlsZT4KICAgICA8ZmlsZT5jbWRl
dnRvb2xzLmNzczwvZmlsZT4KQEAgLTI0Niw2ICsyNDUsNyBAQAogICAgIDxmaWxlPnRleHRFZGl0
b3IuY3NzPC9maWxlPgogICAgIDxmaWxlPnRleHRQcm9tcHQuY3NzPC9maWxlPgogICAgIDxmaWxl
PnRpbWVsaW5lUGFuZWwuY3NzPC9maWxlPgorICAgIDxmaWxlPndlYkdMUHJvZmlsZXIuY3NzPC9m
aWxlPgogICAgIDxmaWxlPkltYWdlcy9hcHBsaWNhdGlvbkNhY2hlLnBuZzwvZmlsZT4KICAgICA8
ZmlsZT5JbWFnZXMvYmFjay5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2JyZWFrcG9pbnRC
b3JkZXIucG5nPC9maWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9jYW52YXNQcm9maWxlci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2NhbnZhc1Byb2ZpbGVyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2I0YjRhNTMwZDBlYzY5NGNiMWI4NTFiMGMxZjA2MDI0MDhiYmE5ZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2NhbnZhc1Byb2ZpbGVyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0uY2FudmFzLXByb2ZpbGUtdmlldyB7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBwb3Np
dGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7
Ci0gICAgYm90dG9tOiAwOwotfQotCi0uY2FudmFzLXRyYWNlLWxvZyB7Ci0gICAgcG9zaXRpb246
IGFic29sdXRlOwotICAgIHRvcDogMTBweDsKLSAgICBsZWZ0OiAwOwotICAgIGJvdHRvbTogMTBw
eDsKLSAgICBmb250LXNpemU6IDEzcHg7Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci0gICAgd2hpdGUt
c3BhY2U6IG5vd3JhcDsKLSAgICBwYWRkaW5nOiAwIDIwcHg7Ci19Ci0KLS5jYW52YXMtdHJhY2Ut
bG9nIGRpdiB7Ci0gICAgcGFkZGluZy1ib3R0b206IDRweDsKLX0KLQotI2NhbnZhcy1yZXBsYXkt
aW1hZ2UtY29udGFpbmVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7
Ci0gICAgdG9wOiAwOwotICAgIHBhZGRpbmc6IDEwcHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjog
d2hpdGU7Ci19Ci0KLSNjYW52YXMtcmVwbGF5LWltYWdlIHsKLSAgICB3aWR0aDogNDAwcHg7Ci0g
ICAgaGVpZ2h0OiA0MDBweDsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvd2ViR0xQcm9maWxlci5jc3MgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3dlYkdMUHJvZmlsZXIuY3NzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJhMTY4MWE2M2M0MzhjYWVhZGIyMzFlMjUzNjczZjYwYzhkNmIxOGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3dlYkdMUHJvZmlsZXIu
Y3NzCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisud2ViZ2wtcHJvZmlsZS12aWV3IHsKKyAgICBvdmVyZmxvdzog
aGlkZGVuOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVmdDog
MDsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7Cit9CisKKy53ZWJnbC10cmFjZS1sb2cg
eworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDEwcHg7CisgICAgbGVmdDogMDsK
KyAgICBib3R0b206IDEwcHg7CisgICAgZm9udC1zaXplOiAxM3B4OworICAgIG92ZXJmbG93OiBh
dXRvOworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgcGFkZGluZzogMCAyMHB4OworfQor
Cisud2ViZ2wtdHJhY2UtbG9nIGRpdiB7CisgICAgcGFkZGluZy1ib3R0b206IDRweDsKK30KKwor
I3dlYmdsLXJlcGxheS1pbWFnZS1jb250YWluZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICByaWdodDogMDsKKyAgICB0b3A6IDA7CisgICAgcGFkZGluZzogMTBweDsKKyAgICBiYWNr
Z3JvdW5kLWNvbG9yOiB3aGl0ZTsKK30KKworI3dlYmdsLXJlcGxheS1pbWFnZSB7CisgICAgd2lk
dGg6IDQwMHB4OworICAgIGhlaWdodDogNDAwcHg7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggNDY5OTQwM2JiOTFkNjlmZGU2NDA5ZjJjMjMwMjM0MjM0OTNlYmFhNC4uNTc1MzEzN2I3
MWJjY2EzZjIxYTBjZjU2Njk4MTI3NjgyNmQ5ZjYxOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDEyLTA5LTE5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KKwor
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI4OTc2LgorICAgICAgICBodHRwOi8v
dHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMjg5NzYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MDgzCisKKyAgICAgICAgQnJlYWtzIGNvbXBpbGF0
aW9uIG9uIFFULCBBcHBsZSBXSW4gKFJlcXVlc3RlZCBieSB2c2V2aWsgb24KKyAgICAgICAgI3dl
YmtpdCkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvd2ViZ2wvd2ViZ2wtcHJvZmls
ZXItZ2V0LWVycm9yLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmdsL3dl
YmdsLXByb2ZpbGVyLXRlc3QuanM6CisgICAgICAgIChpbml0aWFsaXplX1dlYkdMUHJvZmlsZXJU
ZXN0Lkluc3BlY3RvclRlc3QuZW5hYmxlV2ViR0xBZ2VudCk6CisgICAgICAgIChpbml0aWFsaXpl
X1dlYkdMUHJvZmlsZXJUZXN0KToKKwogMjAxMi0wOS0xOSAgQW5kcmV5IEFkYWlraW4gIDxhYW5k
cmV5QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbV2ViR0xdIC0+IFtD
YW52YXNdIFJlbmFtZSBXZWJHTEFnZW50IHRvIENhbnZhc0FnZW50CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvd2ViZ2wvd2ViZ2wtcHJvZmlsZXItZ2V0LWVycm9y
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvd2ViZ2wvd2ViZ2wtcHJvZmls
ZXItZ2V0LWVycm9yLmh0bWwKaW5kZXggNWRkMjU5NzdkYjlkZjIwMjBkN2FhOWEzOGE0NmQ2MWU4
MWU3Mjc5Zi4uOWI2NTg1NjRiZGIzNTkxMDFlMmRlZjE4ZjMzMjI5NWZkN2E5MmM5MCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3dlYmdsL3dlYmdsLXByb2ZpbGVy
LWdldC1lcnJvci5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci93ZWJn
bC93ZWJnbC1wcm9maWxlci1nZXQtZXJyb3IuaHRtbApAQCAtMTE3LDcgKzExNyw3IEBAIGZ1bmN0
aW9uIGNyZWF0ZUFuZFJ1bldlYkdMUHJvZ3JhbSgpCiAKIGZ1bmN0aW9uIHRlc3QoKQogewotICAg
IEluc3BlY3RvclRlc3QuZW5hYmxlQ2FudmFzQWdlbnQoc3RlcDEpOworICAgIEluc3BlY3RvclRl
c3QuZW5hYmxlV2ViR0xBZ2VudChzdGVwMSk7CiAgICAgZnVuY3Rpb24gc3RlcDEoKQogICAgIHsK
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluQ29uc29sZSgiY3JlYXRlQW5kUnVuV2Vi
R0xQcm9ncmFtKCkiLCBzdGVwMik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cHJvZmlsZXIvd2ViZ2wvd2ViZ2wtcHJvZmlsZXItdGVzdC5qcyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9wcm9maWxlci93ZWJnbC93ZWJnbC1wcm9maWxlci10ZXN0LmpzCmluZGV4IDUwZjNmNWVi
Yjg0MmE0OTU4NDg0YTVkNWI5N2ZiZjBlYTU3MWI3ZGIuLjk3YmY1NjBmMTkwNzRkODI2NzUzYjVi
MzRkYjM1YTAyYTk4ZjIwZjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9m
aWxlci93ZWJnbC93ZWJnbC1wcm9maWxlci10ZXN0LmpzCisrKyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9wcm9maWxlci93ZWJnbC93ZWJnbC1wcm9maWxlci10ZXN0LmpzCkBAIC0xLDIwICsxLDIw
IEBACi12YXIgaW5pdGlhbGl6ZV9DYW52YXNXZWJHTFByb2ZpbGVyVGVzdCA9IGZ1bmN0aW9uKCkg
ewordmFyIGluaXRpYWxpemVfV2ViR0xQcm9maWxlclRlc3QgPSBmdW5jdGlvbigpIHsKIAotSW5z
cGVjdG9yVGVzdC5lbmFibGVDYW52YXNBZ2VudCA9IGZ1bmN0aW9uKGNhbGxiYWNrKQorSW5zcGVj
dG9yVGVzdC5lbmFibGVXZWJHTEFnZW50ID0gZnVuY3Rpb24oY2FsbGJhY2spCiB7Ci0gICAgZnVu
Y3Rpb24gY2FudmFzQWdlbnRFbmFibGVkKGVycm9yKQorICAgIGZ1bmN0aW9uIHdlYkdMQWdlbnRF
bmFibGVkKGVycm9yKQogICAgIHsKICAgICAgICAgaWYgKCFlcnJvcikKICAgICAgICAgICAgIElu
c3BlY3RvclRlc3Quc2FmZVdyYXAoY2FsbGJhY2spKCk7CiAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkZBSUxFRCB0byBlbmFibGUgQ2FudmFzQWdl
bnQ6ICIgKyBlcnJvcik7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiRkFJ
TEVEIHRvIGVuYWJsZSBXZWJHTEFnZW50OiAiICsgZXJyb3IpOwogICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKICAgICAgICAgfQogICAgIH0KICAgICB0cnkgewotICAg
ICAgICBDYW52YXNBZ2VudC5lbmFibGUoY2FudmFzQWdlbnRFbmFibGVkKTsKKyAgICAgICAgV2Vi
R0xBZ2VudC5lbmFibGUod2ViR0xBZ2VudEVuYWJsZWQpOwogICAgIH0gY2F0Y2ggKGUpIHsKLSAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkV4Y2VwdGlvbiB3aGlsZSBlbmFibGluZyBD
YW52YXNBZ2VudCIsIGUpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiRXhjZXB0
aW9uIHdoaWxlIGVuYWJsaW5nIFdlYkdMQWdlbnQiLCBlKTsKICAgICAgICAgSW5zcGVjdG9yVGVz
dC5jb21wbGV0ZVRlc3QoKTsKICAgICB9CiB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>