<?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>136032</bug_id>
          
          <creation_ts>2014-08-17 15:04:32 -0700</creation_ts>
          <short_desc>Web Inspector: check and cast InspectorObjects before passing to InspectorAgents</short_desc>
          <delta_ts>2026-01-12 09:01:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>147067</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>graouts</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1029687</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-17 15:04:32 -0700</bug_when>
    <thetext>All in parameters for commands use raw InspectorObjects and do ad-hoc shape checking.

I think we can just generate assertValueHasExpectedType for all types and add accessors to the checked InspectorObject wrappers. Inside the dispatcher functions, all the argument shapes are asserted and casted in debug builds.

-- Original code from InspectorDebuggerAgent::setBreakpoint --

    RefPtr&lt;InspectorObject&gt; options = ...;
    String condition = emptyString();
    bool autoContinue = false;
    RefPtr&lt;InspectorArray&gt; actions;
    if (options) {
        (*options)-&gt;getString(ASCIILiteral(&quot;condition&quot;), &amp;condition);
        (*options)-&gt;getBoolean(ASCIILiteral(&quot;autoContinue&quot;), &amp;autoContinue);
        actions = (*options)-&gt;getArray(ASCIILiteral(&quot;actions&quot;));
    }

-- Proposed refactor --

    RefPtr&lt;Protocol::Debugger::Options&gt; options = ...;
    String condition = emptyString();
    bool autoContinue = false;
    RefPtr&lt;Protocol::Array&lt;Protocol::Debugger::BreakpointAction&gt;&gt; actions;
    if (options) {
        options-&gt;getCondition(condition);
        options-&gt;getAutoContinue(autoContinue);
        options-&gt;getActions(actions);
    }


This would require the getters to take the argument by reference if the parameter is optional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048240</commentid>
    <comment_count>1</comment_count>
      <attachid>241438</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-12 13:32:55 -0800</bug_when>
    <thetext>Created attachment 241438
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048241</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-11-12 13:33:10 -0800</bug_when>
    <thetext>&lt;rdar://problem/18960076&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048242</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-11-12 13:33:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/18960075&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241438</attachid>
            <date>2014-11-12 13:32:55 -0800</date>
            <delta_ts>2014-11-12 13:32:55 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-136032-20141112133300.patch</filename>
            <type>text/plain</type>
            <size>540402</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZTY3NTMzMmI3MzQwMzBmZGEzYzMxNTQ1ODkwOGIyNDc2ODY5ZWU3Li5jMTE1YTVlZWRlMjZlZGU2
YzZhMmVjNWRjOTk0M2YzZjQwYWVmYjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNjYgQEAKKzIwMTQtMTEtMDEgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHN0YW5kYXJkaXplIGxhbmd1YWdlLXNw
ZWNpZmljIHByb3RvY29sIGdlbmVyYXRvciBmaWxlLCBjbGFzcywgYW5kIG1ldGhvZCBwcmVmaXhl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MjM3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2V0dGxl
IG9uIGNwcC9vYmpjL2pzIGZpbGUgcHJlZml4ZXMgYW5kIENwcC9PYmpDL0pTIGNsYXNzIHByZWZp
eGVzIGZvciBnZW5lcmF0b3JzLgorICAgICAgICBNb3ZlIEMrKy1zcGVjaWZpYyBzdGF0aWMgbWV0
aG9kcyBpbnRvIENwcEdlbmVyYXRvciBhbmQgYWRkIGNwcF8gcHJlZml4ZXMgd2hlcmUgcmVsZXZh
bnQuCisgICAgICAgIFNwbGl0IHRoZSB0ZW1wbGF0ZXMgZmlsZSBpbnRvIGxhbmd1YWdlLXNwZWNp
ZmljIHRlbXBsYXRlIGZpbGVzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL19faW5pdF9fLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vY3BwX2dlbmVyYXRvci5weTogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5LgorICAgICAgICAoQ3BwR2VuZXJh
dG9yKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZSk6
CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAg
ICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAg
KENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIpOgorICAgICAg
ICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRl
cik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2
ZW50X3BhcmFtZXRlcik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVf
bWVtYmVyKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25h
bWUpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFt
ZXRlcik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19w
YXJhbWV0ZXIpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9w
YXJhbWV0ZXIpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRf
cGFyYW1ldGVyKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0
aG9kX2Zvcl90eXBlX21lbWJlci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAg
KENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkuCisgICAgICAgIChDcHBHZW5lcmF0b3JUZW1wbGF0ZXMpOgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkuCisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChDcHBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAg
ICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJh
dGVfb3V0cHV0KToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAg
ICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5l
cmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weS4KKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChD
cHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToK
KyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291
dHB1dCk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5l
cmF0ZV9vdXRwdXQuZm9yKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19m
b3JfZG9tYWlucyk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfYWx0ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbnMuQWx0ZXJuYXRlSW5zcGVjdG9yKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21t
YW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkuCisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAg
ICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1
Y3Rvcl9mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9k
b21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9y
X2RvbWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbik6Cisg
ICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weTogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Lgor
ICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAg
KENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToK
KyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5zX3Rv
X2dlbmVyYXRlKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKToKKyAgICAg
ICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBGcm9udGVuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9y
X2V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weS4KKyAgICAgICAgKENwcEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKENwcEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKENw
cEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFt
ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlci5weS4KKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvci5fX2luaXRf
Xyk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxl
bmFtZSk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9nZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChfZ2VuZXJhdGVfdHlwZWRlZnMp
OgorICAgICAgICAoX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dl
bmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zv
cl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51
bV9kZWNsYXJhdGlvbik6CisgICAgICAgIChfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNf
ZW51bV9tZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRlX3N0cnVjdF9mb3JfYW5vbnltb3VzX2Vu
dW1fbWVtYmVyLmFwcGx5X2luZGVudGF0aW9uKToKKyAgICAgICAgKF9nZW5lcmF0ZV9zdHJ1Y3Rf
Zm9yX2VudW1fdHlwZSk6CisgICAgICAgIChfZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKToK
KyAgICAgICAgKF9nZW5lcmF0ZV9idWlsZGVyX3NldHRlcl9mb3JfbWVtYmVyKToKKyAgICAgICAg
KF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIpOgorICAgICAgICAoX2dlbmVy
YXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1w
bGVtZW50YXRpb24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weS4KKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6
CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0
X18pOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91
dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nKToKKyAgICAgICAgKENw
cFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVs
ZF9uYW1lcyk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29i
amVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKToK
KyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2NvbW1hbmRzLnB5LgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoSlNC
YWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEpTQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoSlNC
YWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZS5zaG91bGRfZ2VuZXJh
dGVfZG9tYWluKToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9k
b21haW4pOgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9t
YWluLmlzX2Fub255bW91c19lbnVtX21lbWJlcik6CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5k
c0dlbmVyYXRvci5nZW5lcmF0ZV9kb21haW4uZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5LgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0Jh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVj
bGFyYXRpb25zKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyk6CisgICAg
ICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNf
aGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChPYmpDQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weS4KKyAg
ICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOgorICAgICAg
ICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6Cisg
ICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9m
aWxlbmFtZSk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1h
bmQpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZCk6CisgICAgICAgIChPYmpDQ29uZmln
dXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb252ZXJzaW9uc19mb3Jf
Y29tbWFuZCk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHk6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weS4KKyAgICAg
ICAgKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNDb25m
aWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKE9iakNDb25maWd1
cmF0aW9uSGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmpDQ29u
ZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2Jq
Q0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW50
ZXJmYWNlX2Zvcl9kb21haW5zKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9wcm9wZXJ0aWVzX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVu
dGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1l
bnRhdGlvbi5weS4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAg
ICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVy
YXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMpOgorICAgICAgICAo
T2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2l2
YXJzKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9kZWFsbG9jKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWlu
KToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKToKKyAgICAgICAg
KE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl92YXJpYWJsZV9u
YW1lX3ByZWZpeF9mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5OiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5LgorICAgICAgICAoYWRkX25ld2xpbmUpOgor
ICAgICAgICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakND
b252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmpDQ29udmVy
c2lvbkhlbHBlcnNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iakNDb252
ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9i
akNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAo
T2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25f
ZnVuY3Rpb25zKToKKyAgICAgICAgKE9iakNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24pOgorICAgICAg
ICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIpOgorICAgICAgICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJz
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0
ZXIpOgorICAgICAgICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9l
bnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKToKKyAgICAgICAgKE9iakNDb252ZXJzaW9uSGVs
cGVyc0dlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5LgorICAgICAgICAoT2JqQ0Zyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNGcm9udGVu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChP
YmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iub3V0cHV0X2ZpbGVu
YW1lKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2Jq
Q0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVu
dF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucyk6CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50KToKKyAgICAgICAg
KE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVf
ZXZlbnRfc2lnbmF0dXJlKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHk6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkuCisgICAgICAgIChhZGRfbmV3bGluZSk6
CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5l
cmF0b3IuX19pbml0X18pOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5vdXRwdXRfZmls
ZW5hbWUpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgor
ICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlv
bnMpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bXMpOgorICAg
ICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfdHlwZXMpOgorICAgICAgICAoT2Jq
Q0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9u
KToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2Zvcl9tZW1iZXIpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcik6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9lbnVtKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X2VudW0uTlNfRU5VTSk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV90
eXBlX2ludGVyZmFjZSk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9p
bml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyk6CisgICAgICAgIChPYmpDSGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkpOgorICAgICAgICAoT2JqQ0hlYWRlckdl
bmVyYXRvci5fZ2VuZXJhdGVfY29tbWFuZF9wcm90b2NvbHMpOgorICAgICAgICAoT2JqQ0hlYWRl
ckdlbmVyYXRvci5fZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2wpOgorICAgICAgICAo
T2JqQ0hlYWRlckdlbmVyYXRvci5fY2FsbGJhY2tfYmxvY2tfZm9yX2NvbW1hbmQpOgorICAgICAg
ICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfaW50ZXJmYWNlcyk6CisgICAg
ICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNl
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50
ZXJuYWxfaGVhZGVyLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVy
LnB5LgorICAgICAgICAoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9i
akNJbnRlcm5hbEhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmpDSW50ZXJu
YWxIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iakNJbnRlcm5h
bEhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0ludGVybmFs
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJm
YWNlcyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkuCisgICAgICAgIChhZGRfbmV3bGluZSk6CisgICAg
ICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAg
KE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAg
ICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmls
ZW5hbWUpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlv
bnMpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5n
ZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJl
ZF9tZW1iZXJzKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX3NldHRlcl9mb3JfbWVtYmVyKToKKyAgICAgICAgKE9iakNQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVy
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weToKKyAg
ICAgICAgKEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3Iua2V5ZWRfc2V0
X21ldGhvZF9mb3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3IucHJvdG9jb2xf
dHlwZV9zdHJpbmdfZm9yX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLnByb3Rv
Y29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxf
ZXZlbnRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmlu
Z19mb3JfdHlwZV9tZW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3Ry
aW5nX2Zvcl90eXBlX3dpdGhfbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdl
bmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQu
CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9w
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2Rf
Zm9yX3R5cGVfbWVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdlbmVyYXRvci5hc3NlcnRpb25f
bWV0aG9kX2Zvcl90eXBlX21lbWJlci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUpOiBEZWxl
dGVkLgorICAgICAgICAoR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5
cGUpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9y
X3JldHVybl90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6CisgICAgICAgIChBbHRlcm5hdGVJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcik6IERlbGV0ZWQuCisgICAgICAgIChBbHRlcm5hdGVJbnNwZWN0b3Ip
OiBEZWxldGVkLgorICAgICAgICAodm9pZCk6IERlbGV0ZWQuCisgICAgICAgIChIYXNoTWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKEJ1aWxkZXIpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNJbnNwZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHk6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmplY3RpdmVfYy5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTogQWRkZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9y
VGVtcGxhdGVzKToKKyAgICAgICAgKEFsdGVybmF0ZUluc3BlY3Rvcik6CisgICAgICAgIChPYmpD
SW5zcGVjdG9yKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHk6CisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24pOgorCiAyMDE0LTExLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKENNYWtlKTogTWFrZSBpdCBwb3NzaWJsZSB0
byBidWlsZCB3aXRob3V0IGludHJvc3BlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCA4Mjg3ZTdlZjA0NTMwZDc5ZTE1ZmZkMTYwMWZjZmFiN2JhYmExMzE2Li5mYWJm
ODg3YjA4NGM0NzEyMTQyYmFlZGYwZTIyM2VkOGYxNGI3MzZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CkBAIC05OTIsMTMgKzk5MiwxNSBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
SU5TUEVDVE9SX1NDUklQVFNfRElSICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Nj
cmlwdAogCiBzZXQoSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFMKICAg
ICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0gICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1Jf
U0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQotICAgICR7
SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RP
Ul9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0v
Y29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQotICAgICR7SmF2
YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFk
ZXIucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdl
bi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNj
cmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkK
KyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcy5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1ND
UklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2NvbW1hbmRzLnB5CisgICAg
JHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NS
SVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAk
e0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9j
cHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNU
T1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9
L2NvZGVnZW4vZ2VuZXJhdG9yLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NS
SVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQogICAgICR7SmF2YVNjcmlw
dENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL19faW5pdF9fLnB5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGZhMWMyMGU5MDlmYjI4NmI3
YjQ4MTZjYzAxMmEyZjc0ZjUyZTA4N2UuLmRjODA5NmMwNDc4MWE2YzBmZmEzYWRmMDQ4ODgyNzlh
NjI1NzFmZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC0xNDQsMTMgKzE0NCwxNSBAQCBlbmRpZgogCiBJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMg
PSBcCiAJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRf
Xy5weSBcCi0JJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAot
CSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAotCSQoSmF2YVNj
cmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IFwKKwkkKEphdmFT
Y3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2Nw
cF9nZW5lcmF0b3IucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAorCSQoSmF2
YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAorCSQo
SmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2hlYWRlci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfanNfYmFja2VuZF9jb21tYW5kcy5weSBcCiAJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKIAkkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBcCiAJJChKYXZhU2Ny
aXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgXApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggMTIxZDc3MzE5NDk5ZDZmMDRhZTViYzhi
M2M4MGQ3NTlkY2Y3MmE3OS4uOWRmNzUyYTlkMGE2Yjg0MjIyMmEwOWE4NDRlZjMxMzZhMDdjMmIw
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC0xNjU4LDEzICsx
NjU4LDE1IEBACiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGlzdC5qc29uIiAvPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5w
eSIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkiIC8+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9wcm90b2NvbF90
eXBlc19oZWFkZXIucHkiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlw
dHNcY29kZWdlblxnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSIgLz4K
KyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGNwcF9nZW5l
cmF0b3IucHkiIC8+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29k
ZWdlblxjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRz
XGNvZGVnZW5cZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eSIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdl
bmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSIgLz4KKyAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9mcm9udGVu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hl
YWRlci5weSIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2Rl
Z2VuXGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSIgLz4KKyAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2pz
X2JhY2tlbmRfY29tbWFuZHMucHkiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XHNjcmlwdHNcY29kZWdlblxnZW5lcmF0b3IucHkiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IiAvPgogICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cbW9kZWxzLnB5IiAv
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmlu
ZGV4IGRiN2M0ZTA5MzViYzgwY2QwNjYyZGI0NDY3NWE4NTdjNTRkMDExYTUuLjUyZjBmMjA2ZGYw
N2UzZjNmZWZhZjg3YjQ1ZmMzNjMxNDA4MmEyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVycworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTQxOTcsMjUgKzQxOTcsMzEgQEAg77u/
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KICAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXF9faW5pdF9fLnB5Ij4KICAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2JhY2tl
bmRfY29tbWFuZHMucHkiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRz
XGNvZGVnZW5cY3BwX2dlbmVyYXRvci5weSI+CiAgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3Jp
cHRzXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5Ij4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2Vu
XGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Ij4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNj
cmlwdHNcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSI+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlw
dHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSI+CiAg
ICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSI+CisgICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5Ij4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNc
Y29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNv
ZGVnZW5cZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Ij4KICAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRl
X3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSI+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weSI+CiAgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW48
L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNj
cmlwdHNcY29kZWdlblxnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSI+
CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0
ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5Ij4KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
XHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgorICAgIDwvTm9uZT4KKyAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weSI+CisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNv
ZGVnZW48L0ZpbHRlcj4KKyAgICA8L05vbmU+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5Ij4KICAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9u
ZT4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVy
YXRvci5weSI+CkBAIC00MzUwLDQgKzQzNTYsNCBAQCDvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVu
Y29kaW5nPSJ1dGYtOCI/PgogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L01BU00+
CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
KzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGQyMmEyYjg3NjVh
MWM2Njk4NjY1NmY1Zjc5YThjNjcwYThiZTFlYi4uY2U4ZjM3YmQ2ZTRjYmRkMTQwNGZkZGQ3ZWIy
YTllNDE0MzljZWUzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExODgsMTgg
KzExODgsMTcgQEAKIAkJQTVFQTcwRTcxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVFQTcwRTQxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE1RUE3MEU4MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1RUE3MEU1MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1RUE3MEU2MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3
MEVDMTlGNUIzRUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE1RUE3MEVBMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlBNUVBNzBFQzE5RjVCM0VBMDA5OEY1RUMgLyogZ2VuZXJhdGVfY3Bw
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8q
IGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNUVBNzBFRTE5
RjVCNUM0MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRUQxOUY1QjVDNDAw
OThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNUVBNzEwMzE5RjZERTZGMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEVGMTlG
NkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUE1RUE3MTA0MTlGNkRFNzIwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTA1MTlG
NkRFNzQwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRl
ci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3
MEYxMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9u
X2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlBNUVBNzEwNjE5RjZERTc2MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29u
ZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYyMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmplY3RpdmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTA3MTlGNkRFNzgwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMzE5RjZERTVB
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5ICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTA4
MTlGNkRFN0EwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTVFQTcwRjQxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2
ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMDkxOUY2REU3QzAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY1MTlGNkRFNUEwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMEExOUY2REU3RTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5l
cmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMEIxOUY2REU4MDAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjcxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTBDMTlG
NkRFODIwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfYy5weSBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY4MTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmplY3RpdmVfYy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwMzE5RjZERTZGMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRUYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwNDE5RjZERTcyMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMDE5RjZE
RTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQTVFQTcxMDUxOUY2REU3NDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlv
bl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNUVBNzBGMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9u
X2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlBNUVBNzEwNjE5RjZERTc2MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0
aW9uX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29u
ZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwNzE5RjZERTc4MDA5OEY1RUMgLyogZ2VuZXJh
dGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMzE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcxMDgxOUY2REU3QTAwOThGNUVDIC8qIGdlbmVyYXRl
X29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY0MTlGNkRFNUEwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcx
MDkxOUY2REU3QzAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfaGVhZGVyLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjUxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamNfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1RUE3MTBBMTlGNkRFN0UwMDk4RjVFQyAvKiBnZW5l
cmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmpjX2ludGVybmFsX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlBNUVBNzEwQzE5RjZERTgyMDA5OEY1RUMgLyogb2JqY19nZW5lcmF0
b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVB
NzBGODE5RjZERTVBMDA5OEY1RUMgLyogb2JqY19nZW5lcmF0b3IucHkgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTVFQTcxMEUxOUY2REY4MTAwOThG
NUVDIC8qIEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcxMEQxOUY2REY4MTAwOThG
NUVDIC8qIEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1RkQwMDY3MTg5QUZFOUMw
MDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTVGRDAwNjUxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFy
Z3VtZW50cy5jcHAgKi87IH07CiAJCUE1RkQwMDY4MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRB
cmd1bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1RkQwMDY2MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTU2NiwxNiArMTU2NSwz
MyBAQAogCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZD
QUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGRTE4QTQxNkJB
RUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3Ry
dWN0dXJlUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlDNDcwM0NDMDE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzQ3MDNDQkYxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQlDNDcwM0NDRTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFj
a2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1h
bmRzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUM0NzAzQ0NGMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzQ3MDNDQzQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQzQ3MDNDRDAxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzQ3MDNDRDExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUM0NzAzQ0QyMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzcxOTI4NDRDQzAwMTNGQkVB
IC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDQ0UxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDMzE5Mjg0NENDMDAx
M0ZCRUEgLyogZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUM0NzAzQ0Q2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQjE5Mjg0NENDMDAx
M0ZCRUEgLyogZ2VuZXJhdG9yLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUM0NzAzQ0Q3MTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQzE5Mjg0
NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCUM0OUZFNEFCMTlBQUM4NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9w
cm90b2NvbF90eXBlc19oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNDlGRTRBNzE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9j
b2xfdHlwZXNfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCUM0OUZFNEFDMTlBQUM4NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM0OUZFNEE4MTlBQUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90
b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDNEY0QjZEOTFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM0RjRCNkNGMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weSAqLzsgfTsKKwkJQzRGNEI2REExQTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5l
cmF0b3IucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM0RjRCNkQwMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5ICovOyB9OworCQlD
NEY0QjZFMTFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19p
bXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzRGNEI2RDcxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87IH07CisJCUM0RjRCNkUyMUEwNUM3NkYwMDVD
QUI3NiAvKiBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RjRCNkQ4MUEwNUM3NkYwMDVDQUI3NiAvKiBv
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi87IH07CisJCUM0RjRCNkUzMUEwNUM4MTAwMDVD
QUI3NiAvKiBfX2luaXRfXy5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzQ3MDNDQzIxOTI4NDRDQzAwMTNGQkVBIC8qIF9faW5pdF9fLnB5ICovOyB9
OworCQlDNEY0QjZFNDFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBFQTE5RjVCM0Q1MDA5OEY1RUMgLyogZ2VuZXJhdGVf
Y3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovOyB9OworCQlDNEY0
QjZFNjFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNUVBNzBFRjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5ICovOyB9OworCQlDNEY0QjZFNzFBMDVDODExMDA1Q0FCNzYgLyogZ2Vu
ZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYwMTlGNkRFNUEw
MDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSAqLzsgfTsKKwkJQzRGNEI2RTgxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNf
Y29uZmlndXJhdGlvbl9oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYxMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpj
X2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5ICovOyB9OworCQlDNEY0QjZFOTFBMDVDODExMDA1Q0FC
NzYgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMjE5RjZE
RTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
LnB5ICovOyB9OworCQlDNEY0QjZFQTFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19j
b252ZXJzaW9uX2hlbHBlcnMucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1RUE3MEYzMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2Nv
bnZlcnNpb25faGVscGVycy5weSAqLzsgfTsKKwkJQzRGNEI2RUIxQTA1QzgxMTAwNUNBQjc2IC8q
IGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjQxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLzsgfTsKKwkJQzRGNEI2RUMxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRl
X29iamNfaGVhZGVyLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19oZWFkZXIu
cHkgKi87IH07CisJCUM0RjRCNkVEMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2lu
dGVybmFsX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfaW50ZXJu
YWxfaGVhZGVyLnB5ICovOyB9OworCQlDNEY0QjZFRTFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzQ3MDNDQ0ExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMu
cHkgKi87IH07CisJCUM0RjRCNkVGMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0b3IucHkgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0NCMTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi87IH07CisJCUM0RjRCNkYwMUEwNUM4MTEw
MDVDQUI3NiAvKiBtb2RlbHMucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi87IH07
CisJCUM0RjRCNkYxMUEwNUM4MTEwMDVDQUI3NiAvKiBvYmpjX2dlbmVyYXRvci5weSBpbiBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjgxOUY2REU1
QTAwOThGNUVDIC8qIG9iamNfZ2VuZXJhdG9yLnB5ICovOyB9OworCQlDNEY0QjZGMjFBMDVDOEFD
MDA1Q0FCNzYgLyogZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weSBpbiBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzMxOTI4NDRDQzAwMTNG
QkVBIC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgKi87IH07CisJCUM0RjRCNkYz
MUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RjRCNkNGMUEwNUM3NkYwMDVD
QUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLzsgfTsKKwkJQzRGNEI2RjQxQTA1
Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY0QjZEMDFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dl
bmVyYXRvci5weSAqLzsgfTsKKwkJQzRGNEI2RjUxQTA1Qzk4NDAwNUNBQjc2IC8qIGdlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY0QjZENzFBMDVDNzZGMDA1Q0FCNzYgLyog
Z2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsgfTsKKwkJ
QzRGNEI2RjYxQTA1Qzk4NDAwNUNBQjc2IC8qIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RjRCNkQ4MUEw
NUM3NkYwMDVDQUI3NiAvKiBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi87IH07CiAJCURD
MDAwMzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzAwMDM5MDE5RDhC
RTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURDMDAwMzk4MTlEQkE3MDYwMDAy
M0VCMCAvKiBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzAwMDM5NjE5REJBNzA2MDAwMjNFQjAgLyogREZH
UHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwICovOyB9OwogCQlEQzAwMDM5OTE5REJBNzA2MDAwMjNF
QjAgLyogREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMDAwMzk3MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQdXRM
b2NhbFNpbmtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yODcxLDE4ICsyODg3LDE3IEBACiAJCUE1RUE3MEU0MTlGNUIxMDEwMDk4
RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1RUE3MEU1MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1RUE3MEU2MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBNUVBNzBFQTE5RjVCM0Q1MDA5OEY1RUMgLyogZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBh
dGggPSBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8qIGdl
bmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTVFQTcwRUQxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDb250ZXh0UmVmSW5zcGVjdG9y
U3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNUVBNzBFRjE5RjZERTVB
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVj
dGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE1RUE3MEYwMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3
MEYxMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9u
X2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRl
X29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBNUVBNzBGMjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0
LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVt
ZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3MEYzMTlGNkRF
NUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19jb252ZXJzaW9uX2hlbHBlcnMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1
RUE3MEY0MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjUxOUY2REU1
QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRl
ci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjcxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlw
ZXNfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3
MEY4MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfYy5weSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBFRjE5RjZERTVBMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBGMDE5RjZERTVBMDA5
OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmpjX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTVFQTcwRjExOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBn
ZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBNUVBNzBGMjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBGMzE5RjZERTVBMDA5OEY1RUMgLyog
Z2VuZXJhdGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycy5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjQxOUY2REU1QTAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTVFQTcwRjUxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfaGVhZGVyLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqY19oZWFkZXIucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0
LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBGODE5RjZERTVBMDA5OEY1RUMgLyogb2JqY19n
ZW5lcmF0b3IucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBvYmpjX2dl
bmVyYXRvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVFQTcxMEQxOUY2REY4
MTAwOThGNUVDIC8qIEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVGRDAwNjUxODlBRkU5
QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTY3JpcHRBcmd1bWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNUZEMDA2NjE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEFyZ3VtZW50cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzI0MywxNiArMzI1OCwyMCBAQAogCQlDMkZFMThBMzE2
QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzQ3MDNDQkYxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9
ICJnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDNDcwM0NDMjE5Mjg0NENDMDAxM0ZCRUEgLyogX19pbml0X18ucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBfX2luaXRfXy5weTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRlX2JhY2tlbmRfY29tbWFuZHMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBh
dGggPSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDNDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IHBhdGggPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2Ny
aXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDcwM0NDNzE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAz
Q0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfanNfYmFja2VuZF9j
b21tYW5kcy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzQ3MDNDQ0ExOTI4NDRD
QzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5weXRob247IHBhdGggPSBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDNDcwM0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdG9yLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDNDcwM0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxz
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gbW9kZWxzLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDlGRTRBNzE5QUFDODNFMDBGNDBDRTkgLyogZ2Vu
ZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBwYXRoID0gZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlDNDlGRTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5w
eXRob247IHBhdGggPSBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2Q0YxQTA1Qzc2RjAwNUNBQjc2IC8q
IGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUM0RjRCNkQwMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gY3BwX2dlbmVyYXRvci5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2RDExQTA1Qzc2RjAwNUNBQjc2IC8qIGdl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0RjRCNkQyMUEwNUM3NkYwMDVD
QUI3NiAvKiBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzRGNEI2RDMxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9k
aXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9
IGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2RDQxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0RjRCNkQ1MUEw
NUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2RDYx
QTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2Nw
cF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzRGNEI2RDcxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IHBhdGggPSBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNEY0QjZEODFBMDVDNzZGMDA1Q0FCNzYgLyog
b2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2
IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
YXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzAwMDM5MDE5
RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHBhdGgg
PSBkZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTI4MywyNyArNTMwMiwzMCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKIAkJCQlDNDcwM0NDMjE5Mjg0NENDMDAxM0ZCRUEgLyogX19pbml0X18ucHkgKi8s
Ci0JCQkJQTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAotCQkJCUM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5ICovLAotCQkJCUM0NzAzQ0M0MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAot
CQkJCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCi0JCQkJQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAotCQkJCUM0NzAzQ0M3
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5ICovLAotCQkJCUE1RUE3MEVGMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAotCQkJCUE1RUE3MEYw
MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCi0JCQkJQTVFQTcwRjExOUY2REU1QTAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5ICovLAotCQkJCUE1
RUE3MEYyMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0
aW9uX2ltcGxlbWVudGF0aW9uLnB5ICovLAotCQkJCUE1RUE3MEYzMTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi8sCi0JCQkJQTVF
QTcwRjQxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCi0JCQkJQTVFQTcwRjUxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSAqLywKLQkJCQlBNUVBNzBGNjE5
RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5
ICovLAotCQkJCUE1RUE3MEY3MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVf
Y190eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLywKLQkJCQlBNUVBNzBGODE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgKi8sCi0JCQkJQzQ5RkU0QTcxOUFBQzgzRTAw
RjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSAqLywKLQkJCQlDNDlG
RTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkgKi8sCisJCQkJQzRGNEI2Q0YxQTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5ICovLAorCQkJCUM0RjRCNkQwMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBf
Z2VuZXJhdG9yLnB5ICovLAorCQkJCUE1RUE3MEVBMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0
ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8sCisJCQkJQzRG
NEI2RDExQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5ICovLAorCQkJCUM0RjRCNkQyMUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9j
cHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0RjRCNkQz
MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkgKi8sCisJCQkJQzRGNEI2RDQxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0RjRCNkQ1MUEw
NUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICov
LAorCQkJCUM0RjRCNkQ2MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVB
IC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgKi8sCisJCQkJQTVFQTcwRUYxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eSAqLywKKwkJCQlBNUVBNzBGMDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQTVFQTcwRjExOUY2REU1
QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkgKi8sCisJ
CQkJQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlv
bl9pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlBNUVBNzBGMzE5RjZERTVBMDA5OEY1RUMgLyog
Z2VuZXJhdGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi8sCisJCQkJQTVFQTcwRjQxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLywKKwkJCQlBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqY19oZWFkZXIucHkgKi8sCisJCQkJQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5ICovLAorCQkJCUM0RjRCNkQ3MUEwNUM3NkYwMDVD
QUI3NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICov
LAogCQkJCUM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5
ICovLAogCQkJCUM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi8sCiAJ
CQkJQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLywKKwkJCQlDNEY0QjZE
ODFBMDVDNzZGMDA1Q0FCNzYgLyogb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovLAorCQkJ
CUE1RUE3MEY4MTlGNkRFNUEwMDk4RjVFQyAvKiBvYmpjX2dlbmVyYXRvci5weSAqLywKIAkJCSk7
CiAJCQlwYXRoID0gY29kZWdlbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01MzUz
LDEwICs1Mzc1LDggQEAKIAkJCQlBMUEwMDlDMTE4MzFBMjZFMDBDRjg3MTEgLyogQVJNNjRBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBB
Uk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTBFMTlGNkRGODEwMDk4RjVF
QyAvKiBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICov
LAotCQkJCUM0OUZFNEFCMTlBQUM4NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBl
c19oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzBFQzE5RjVCM0VBMDA5OEY1RUMg
LyogZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVh
ZGVycyAqLywKKwkJCQlBNUVBNzBFQzE5RjVCM0VBMDA5OEY1RUMgLyogZ2VuZXJhdGVfY3BwX2Fs
dGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJ
NkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUM0OUZFNEFDMTlBQUM4NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQzQTU2MTk2
MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUQy
RURGQjE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNTM2NywyNSArNTM4NywyMCBAQAogCQkJCUMyREE3Nzgz
MThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUz
MjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29u
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21p
bi5weSBpbiBIZWFkZXJzICovLAotCQkJCUM0NzAzQ0QyMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8s
Ci0JCQkJQTVFQTcxMDQxOUY2REU3MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAotCQkJCUM0
NzAzQ0QxMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3MTA0MTlGNkRFNzIwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovLAogCQkJCUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxh
dGVzLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcxMDUxOUY2REU3NDAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGluIEhlYWRlcnMgKi8s
Ci0JCQkJQTVFQTcxMDYxOUY2REU3NjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Nv
bmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzEw
NzE5RjZERTc4MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxw
ZXJzLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcxMDgxOUY2REU3QTAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
aW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzEwQTE5RjZERTdFMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcx
MEIxOUY2REU4MDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVu
dGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcxMEMxOUY2REU4MjAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcxMDkxOUY2
REU3QzAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSBpbiBIZWFkZXJz
ICovLAorCQkJCUE1RUE3MTA1MTlGNkRFNzQwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZp
Z3VyYXRpb25faGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMDYxOUY2REU3NjAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBp
biBIZWFkZXJzICovLAorCQkJCUE1RUE3MTA3MTlGNkRFNzgwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmpjX2NvbnZlcnNpb25faGVscGVycy5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3MTA4MTlG
NkRFN0EwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwQTE5RjZERTdFMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlB
NUVBNzEwQzE5RjZERTgyMDA5OEY1RUMgLyogb2JqY19nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAq
LywKKwkJCQlBNUVBNzEwOTE5RjZERTdDMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19oZWFkZXIu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dG9yLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQzQ3MDNDQ0YxOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQlD
NDcwM0NDMDE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQzQ3MDNDRDAxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJz
ICovLAotCQkJCUM0NzAzQ0NFMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Nv
bW1hbmRzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDQ0UxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNDcw
M0NENzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVF
QTcxMDMxOUY2REU2RjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwMzE5RjZERTZGMDA5
OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVk
ZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTJBODM2MzhBMThEN0Qw
RkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTYxMDcsNiArNjEyMiwxMCBAQAogCQkJCUE1N0QyM0VFMTg5MUI1NTQwMDMxQzdGQSAvKiBSZWd1
bGFyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2ODJGQjMxOUJDQjM2NDAwRkEz
QkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlEMTVF
RDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUM0RjRCNkY1MUEw
NUM5ODQwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzRGNEI2RjYxQTA1Qzk4NDAwNUNBQjc2IC8qIG9i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0RjRCNkYzMUEw
NUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICov
LAorCQkJCUM0RjRCNkY0MUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyRDRERUExOTgzMkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUlu
c3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8q
IFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDIyLDcgKzY0
NDEsMjYgQEAKIAkJCWlzYSA9IFBCWFJlc291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlv
bk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJQzRGNEI2RjIxQTA1QzhBQzAw
NUNBQjc2IC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gUmVzb3VyY2VzICov
LAogCQkJCUE1M0YxQUMwMThDOTBGOEYwMDcyRUI2RCAvKiBmcmFtZXdvcmsuc2IgaW4gUmVzb3Vy
Y2VzICovLAorCQkJCUM0RjRCNkUzMUEwNUM4MTAwMDVDQUI3NiAvKiBfX2luaXRfXy5weSBpbiBS
ZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RDkxQTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZEQTFBMDVDNzZGMDA1
Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RTQx
QTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RTYxQTA1QzgxMTAwNUNB
Qjc2IC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBSZXNv
dXJjZXMgKi8sCisJCQkJQzRGNEI2RTcxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLywKKwkJ
CQlDNEY0QjZFODFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9u
X2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RTkxQTA1QzgxMTAwNUNBQjc2
IC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBpbiBSZXNv
dXJjZXMgKi8sCisJCQkJQzRGNEI2RUExQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNf
Y29udmVyc2lvbl9oZWxwZXJzLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFQjFBMDVD
ODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFQzFBMDVDODExMDA1Q0FCNzYg
LyogZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkVE
MUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSBpbiBS
ZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RTExQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3VyY2VzICovLAorCQkJ
CUM0RjRCNkVFMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIFJl
c291cmNlcyAqLywKKwkJCQlDNEY0QjZFRjFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdG9yLnB5
IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZGMDFBMDVDODExMDA1Q0FCNzYgLyogbW9kZWxz
LnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFMjFBMDVDNzZGMDA1Q0FCNzYgLyogb2Jq
Y19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZGMTFB
MDVDODExMDA1Q0FCNzYgLyogb2JqY19nZW5lcmF0b3IucHkgaW4gUmVzb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
X19pbml0X18ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9fX2luaXRfXy5weQppbmRleCBlOWM2N2I1ZmQ0ZGNhOWYzMzJhOWFhZTBmMmJkMDA2MWE5
ZDNlMzY0Li42MDc3ZmE5N2E5N2Y4YzIxN2NiMGFiNjM3MGE4NTY0ZjZhNDljNjdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2lu
aXRfXy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9fX2luaXRfXy5weQpAQCAtMiwyMSArMiwyMyBAQAogCiBmcm9tIG1vZGVscyBpbXBvcnQg
KgogZnJvbSBnZW5lcmF0b3IgaW1wb3J0ICoKK2Zyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgKgor
ZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgKgogCi1mcm9tIGdlbmVyYXRlX2FsdGVybmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX2JhY2tlbmRf
Y29tbWFuZHMgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1w
b3J0ICoKLWZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBp
bXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25m
aWd1cmF0aW9uX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbnZlcnNpb25faGVscGVycyBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19pbnRlcm5hbF9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlw
ZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNf
aGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRj
aGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzIGlt
cG9ydCAqCitmcm9tIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBv
cnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
biBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyIGltcG9y
dCAqCitmcm9tIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbiBpbXBv
cnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycyBpbXBvcnQgKgorZnJv
bSBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0
ICoKK2Zyb20gZ2VuZXJhdGVfb2JqY19oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2Jq
Y19pbnRlcm5hbF9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Iu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDY2YTczMmYxMDBhZWJiZjA1NmU0ZjM1OTYzNTQ4ZjIyNGRiMjZmMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAgLTAsMCArMSwzMDUgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKKworZnJv
bSBnZW5lcmF0b3IgaW1wb3J0IHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVU
eXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3
b3JrcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworX1BSSU1JVElWRV9U
T19DUFBfTkFNRV9NQVAgPSB7CisgICAgJ2Jvb2xlYW4nOiAnYm9vbCcsCisgICAgJ2ludGVnZXIn
OiAnaW50JywKKyAgICAnbnVtYmVyJzogJ2RvdWJsZScsCisgICAgJ3N0cmluZyc6ICdTdHJpbmcn
LAorICAgICdvYmplY3QnOiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnLAorICAgICdhbnkn
OiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZScKK30KKworIyBUaGlzIGNsYXNzIGNvbnRhaW5z
IGV4dHJhIHN0YXRpYyBtZXRob2RzIHVzZWQgZm9yIGdlbmVyYXRpb24sIGJ1dCBkb2VzCisjIG5v
dCBwYXJ0aWNpcGF0ZSBpbiBhbnkgaW5oZXJpdGFuY2UgaGllcmFyY2h5LiBGaWxlIGdlbmVyYXRv
cnMgc2hvdWxkCisjIGV4dGVuZCB0aGUgZ2VuZXJpYyAiR2VuZXJhdG9yIiBjbGFzcyBpbnN0ZWFk
LgorY2xhc3MgQ3BwR2VuZXJhdG9yOgorCisgICAgIyBNaXNjZWxsYW5lb3VzIHRleHQgbWFuaXB1
bGF0aW9uIHJvdXRpbmVzLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX2dldHRlcl9t
ZXRob2RfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmpl
Y3RUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JworICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdnZXRBcnJheScK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAg
ICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ2dldEludGVnZXInCisgICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ251
bWJlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXREb3VibGUnCisgICAgICAgICAgICBl
bGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ2FueSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdn
ZXRWYWx1ZScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXQn
ICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0
ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5j
cHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJl
dHVybiAnc2V0T2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUp
OgorICAgICAgICAgICAgcmV0dXJuICdzZXRBcnJheScKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlz
ICdpbnRlZ2VyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldEludGVnZXInCisgICAgICAg
ICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ251bWJlcic6CisgICAgICAgICAgICAgICAg
cmV0dXJuICdzZXREb3VibGUnCisgICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaXMg
J2FueSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFt
ZSgpKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBl
LmFsaWFzZWRfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgor
ICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlw
ZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKworICAgICMgR2VuZXJhdGUgdHlwZSByZXByZXNlbnRh
dGlvbnMgZm9yIHZhcmlvdXMgc2l0dWF0aW9ucy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkgYW5kIGxlbihfdHlwZS5tZW1iZXJzKSA9PSAwOgorICAgICAg
ICAgICAgcmV0dXJuICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZSkpOgorICAg
ICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5
cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBjcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9k
ZWNsYXJhdGlvbik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51
bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgIHJl
dHVybiAnOjonLmpvaW4oW0NwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShv
YmplY3RfZGVjbGFyYXRpb24udHlwZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUp
XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKHBh
cmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5h
bGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0g
X3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KKworICAg
ICAgICBzaWdpbCA9ICcqJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAnJicKKyAgICAg
ICAgIyBUaGlzIGhhbmRsZXMgdGhlICdhbnknIHR5cGUgYW5kIG9iamVjdHMgd2l0aCBkZWZpbmVk
IHByb3BlcnRpZXMuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9y
IF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaXMgJ29iamVjdCc6CisgICAgICAgICAgICByZXR1cm4g
J2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nICsgc2lnaWwKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JyArIHNpZ2lsCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25h
bWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVy
biAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1l
KCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBj
cHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25h
bWUKKworICAgICAgICByZXR1cm4gInVua25vd25fdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0
ZXJfdHlwZSIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2NoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICByZXR1cm4gQ3BwR2Vu
ZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhfbmFtZShwYXJhbWV0ZXIudHlwZSwgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0
ZXIocGFyYW1ldGVyKToKKyAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dHlwZV93aXRoX25hbWUocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
cGFyYW1ldGVyLmlzX29wdGlvbmFsKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXIobWVtYmVyKToKKyAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJf
bmFtZSwgRmFsc2UpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl90
eXBlX3dpdGhfbmFtZShfdHlwZSwgdHlwZV9uYW1lLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAg
IHJldHVybiAnUGFzc1JlZlB0cjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlw
ZSk6CisgICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29s
X3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBidWlsZGVyX3R5cGUKKyAgICAg
ICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRl
Z2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3Bw
X25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAg
IGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToK
KyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBidWlsZGVyX3R5cGUKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJfdHlwZQorICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9u
YW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAg
ICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JworICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55J106Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+JworICAgICAgICAgICAgZWxpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxpZiBfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICdj
b25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNwcF9uYW1lCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICBlbnVt
X3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9uYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMn
ICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisK
KyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMq
JyAlIGVudW1fdHlwZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnJXMnICUgZW51bV90eXBlX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
Y3BwX3R5cGVfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90
eXBlID0gcGFyYW1ldGVyLnR5cGUKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxs
IHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFy
cmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JicgJSBDcHBHZW5lcmF0
b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PCVzPioiICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuICclcyonICUgY3BwX25hbWUKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnlt
b3VzOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJz
dChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcyonICUgKF90eXBlLnR5
cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigidW5rbm93biBmb3JtYWwgb3V0IHBhcmFtZXRlciB0eXBlLiIpCisKKyAg
ICAjIEZJWE1FOiB0aGlzIGlzIG9ubHkgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gb3V0IHBhcmFt
ZXRlcnM7IHRoZXkgY291bGQgYmUgdW5pZmllZC4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGNwcF90eXBlX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAg
IF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxp
YXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFs
bCB0aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUpKToK
KyAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9w
cm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNw
cF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDwlcz4qIiAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAg
IHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQor
ICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisKKyAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiVW5rbm93biBmb3JtYWwgYXN5bmMgcGFyYW1ldGVyIHR5cGUuIikKKworICAg
ICMgSW4tcGFyYW1ldGVycyBkb24ndCB1c2UgYnVpbGRlciB0eXBlcywgYmVjYXVzZSB0aGV5IGNv
dWxkIGJlIHBhc3NlZAorICAgICMgIm9wZW4gdHlwZXMiIHRoYXQgYXJlIG1hbnVhbGx5IGNvbnN0
cnVjdGVkIG91dCBvZiBJbnNwZWN0b3JPYmplY3RzLgorCisgICAgIyBGSVhNRTogT25seSBwYXJh
bWV0ZXJzIHRoYXQgYXJlIGFjdHVhbGx5IG9wZW4gdHlwZXMgc2hvdWxkIG5lZWQgbm9uLWJ1aWxk
ZXIgcGFyYW1ldGVyIHR5cGVzLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3R5cGVf
Zm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICBfdHlwZSA9IHBhcmFt
ZXRlci50eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KKwor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBfdHlw
ZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAiUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+IgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkg
aW4gWydhbnknLCAnb2JqZWN0J106CisgICAgICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8JXM+
IiAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAg
ICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgX3R5cGUucXVhbGlmaWVkX25h
bWUoKSBub3QgaW4gWydib29sZWFuJywgJ3N0cmluZycsICdpbnRlZ2VyJ106CisgICAgICAgICAg
ICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8JXM+IiAlIGNwcF9u
YW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBfdHlwZV9mb3Jfc3RhY2tfb3V0X3BhcmFt
ZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDwlcz4iICUgYnVpbGRlcl90eXBlCisgICAgICAgICAgICByZXR1cm4gJyVzJyAlIGJ1aWxkZXJf
dHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAg
ICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlw
ZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDwlcz4iICUgY3Bw
X25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1l
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGlm
IF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3RvciVz
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21h
aW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjol
cycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5
cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgorCisgICAgICAgIGRl
ZiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAgICAgIHJldHVybiAn
QmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlJyAlIENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKworICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIHJldHVy
biBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUuYWxpYXNlZF90eXBl
KQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
dHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICByZXR1cm4gJ0JpbmRp
bmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVj
bGFyYXRpb24pCisKKyAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlw
ZV9tZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX25hbWVfZm9y
X3ByaW1pdGl2ZV90eXBlKF90eXBlKToKKyAgICAgICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQ
X05BTUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQorCisgICAgIyBEZWNpZGUgd2hldGhlciBj
ZXJ0YWluIGhlbHBlcnMgYXJlIG5lY2Vzc2FyeSBpbiBhIHNpdHVhdGlvbi4KKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3R5cGUp
OgorICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVj
dFR5cGUpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfcGFzc19ieV9jb3B5
X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKF90eXBl
LCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlzaW5zdGFuY2UoX3R5cGUsIChQcmltaXRp
dmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gIm9iamVjdCIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUw
NDg4NDJiZmM1YjZjZDgyYmQ1NDg5Njc2MzI4NzdiZDA5ZWFlMTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtMCwwICsxLDI3NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisjIEdlbmVyYXRvciB0ZW1wbGF0ZXMsIHdoaWNoIGNhbiBiZSBmaWxsZWQgd2l0aCBzdHJpbmcu
VGVtcGxhdGUuCisjIEZvbGxvd2luZyBhcmUgY2xhc3NlcyB0aGF0IGZpbGwgdGhlIHRlbXBsYXRl
cyBmcm9tIHRoZSB0eXBlY2hlY2tlZCBtb2RlbC4KKworY2xhc3MgQ3BwR2VuZXJhdG9yVGVtcGxh
dGVzOgorCisgICAgSGVhZGVyUHJlbHVkZSA9ICgKKyAgICAiIiIjaWZuZGVmICR7aGVhZGVyR3Vh
cmRTdHJpbmd9CisjZGVmaW5lICR7aGVhZGVyR3VhcmRTdHJpbmd9CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCiske2luY2x1ZGVzfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworJHt0eXBl
ZGVmc30iIiIpCisKKyAgICBIZWFkZXJQb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAh
ZGVmaW5lZCgke2hlYWRlckd1YXJkU3RyaW5nfSkiIiIpCisKKyAgICBJbXBsZW1lbnRhdGlvblBy
ZWx1ZGUgPSAoCisgICAgIiIiI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgJHtwcmltYXJ5
SW5jbHVkZX0KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyR7c2Vjb25kYXJ5SW5jbHVkZXN9
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKKworICAgIEltcGxlbWVudGF0aW9uUG9zdGx1
ZGUgPSAoCisgICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorIiIiKQorCisgICAgQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQcmVs
dWRlID0gKAorICAgICIiIiNpZm5kZWYgJHtoZWFkZXJHdWFyZFN0cmluZ30KKyNkZWZpbmUgJHto
ZWFkZXJHdWFyZFN0cmluZ30KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCiske2luY2x1ZGVzfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
QWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQorICAg
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRy
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKyIi
IikKKworICAgIEFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIi
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworI2VuZGlmIC8vICFkZWZpbmVkKCR7aGVhZGVyR3VhcmRT
dHJpbmd9KSIiIikKKworICAgIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWlu
SGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9uID0gKAorICAgICIiImNsYXNzIEFsdGVybmF0ZUlu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJu
YXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ciske2NvbW1h
bmREZWNsYXJhdGlvbnN9Cit9OyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9t
YWluSGFuZGxlckRlY2xhcmF0aW9uID0gKAorICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30g
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6
Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsiIiIpCisKKyAg
ICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgK
KyAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworJHtjb21tYW5kRGVjbGFyYXRpb25zfQorcHJp
dmF0ZToKKyAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0
Y2hlcihBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIqIGFs
dGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlz
cGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcjsKKyNlbmRpZgorfTsiIiIp
CisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uID0g
KAorICAgICIiIiAgICAke2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7Y2FsbGJhY2tOYW1lfSA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Ug
eworICAgIHB1YmxpYzoKKyAgICAgICAgJHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAgIHZvaWQg
c2VuZFN1Y2Nlc3MoJHtvdXRQYXJhbWV0ZXJzfSk7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
JHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRlcnN9KSA9IDA7IiIiKQorCisgICAgQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoID0gKAorICAgICIiInZvaWQgSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
KQoreworICAgIFJlZjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QoKnRoaXMpOworCiske2Rpc3BhdGNoQ2FzZXN9CisgICAgZWxzZQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywgIiR7ZG9t
YWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKK30iIiIpCisKKyAg
ICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCisiIiJ2b2lk
IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKKyAgICBpZiAo
ZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0
aG9kVGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENh
bGxIYW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyR7ZGlzcGF0Y2hD
YXNlc30KKyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5H
VEgoY29tbWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRz
W2ldLmhhbmRsZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46
Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBk
aXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwg
Iicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRo
aXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworfSIiIikKKworICAgIEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3RvciA9ICgKKyAgICAi
IiJQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gSW5z
cGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjpJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChh
Z2VudCkKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICAs
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcihudWxscHRyKQorI2VuZGlmCit7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiJHtk
b21haW5OYW1lfSIpLCB0aGlzKTsKK30iIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMgPSAoCisiIiIgICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyR7aW5QYXJhbWV0
ZXJEZWNsYXJhdGlvbnN9CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAg
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtj
b21tYW5kTmFtZX0iKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorIiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFz
eW5jQ29tbWFuZCA9ICgKKyIiIkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmRE
aXNwYXRjaGVyLCBpZCkgeyB9CisKK3ZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBh
cmFtZXRlcnN9KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9Cisg
ICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30iIiIpCisKKyAg
ICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCisiIiIk
e2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IH0KKyR7ZXZlbnREZWNsYXJhdGlvbnN9Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Cit9OyIiIikKKworICAgIFByb3Rv
Y29sT2JqZWN0QnVpbGRlckRlY2xhcmF0aW9uUHJlbHVkZSA9ICgKKyIiIiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyAke29iamVjdFR5cGV9OworICAg
IHB1YmxpYzoiIiIpCisKKyAgICBQcm90b2NvbE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlvblBvc3Rs
dWRlID0gKAorIiIiCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjwke29iamVjdFR5cGV9PiYgKCkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPCR7b2JqZWN0VHlwZX0+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBh
c3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8JHtvYmplY3RUeXBlfT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyR7Y29u
c3RydWN0b3JFeGFtcGxlfQorICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYg
SW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOyIiIikKKwor
ICAgIFByb3RvY29sT2JqZWN0UnVudGltZUNhc3QgPSAoCisiIiJQYXNzUmVmUHRyPCR7b2JqZWN0
VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVk
LCBjYXN0U3VjY2VlZGVkKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgQmluZGluZ1RyYWl0
czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgp
KTsKKyNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAorICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
Zigke29iamVjdFR5cGV9KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNl
KSwgdHlwZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDwke29iamVjdFR5
cGV9Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0
LmdldCgpKSk7Cit9CisiIiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhNzZhMjBjNDU2NGNkMjk4YTg2ZDVhMmE5MmI2
OTM0ZDNjMmVkOWViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyAvZGV2L251bGwK
QEAgLTEsOTEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAo
YykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1p
bXBvcnQgc3RyaW5nCi1pbXBvcnQgcmUKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1m
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiAnSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgnCi0KLSAg
ICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBoZWFkZXJzID0gWwotICAgICAg
ICAgICAgJyJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiJywKLSAgICAgICAgICAgICc8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4nLAotICAgICAgICBdCi0KLSAg
ICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiBy
ZS5zdWIoJ1xXKycsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCi0gICAgICAgICAgICAn
aW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4g
aGVhZGVyc10pLAotICAgICAgICB9Ci0KLSAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190
b19nZW5lcmF0ZSgpCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUHJlbHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicu
am9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4sIGRvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rp
b25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
KHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGlmIG5vdCBkb21haW4uY29tbWFuZHM6Ci0gICAgICAg
ICAgICByZXR1cm4gJycKLQotICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAg
ICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIGNvbW1hbmRf
ZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zv
cl9jb21tYW5kKGNvbW1hbmQpKQotCi0gICAgICAgIGhhbmRsZXJfYXJncyA9IHsKLSAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2NvbW1h
bmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpLAotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJE
b21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5k
bGVyX2FyZ3MpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFt
ZXRlcnMgPSBbJ2xvbmcgY2FsbElkJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFu
ZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5f
JXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJh
bWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAg
IGNvbW1hbmRfYXJncyA9IHsKLSAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29t
bWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVy
cyksCi0gICAgICAgIH0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUo
Y29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRz
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDhmYmI0NzMwMmZkYmExYzllZmZmZmU5ZWJmOWVlODU4ODViMTFmNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5CisrKyAv
ZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBD
b3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5
cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQg
bG9nZ2luZwotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZy
b20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9yX3Rl
bXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2Rl
bHMgaW1wb3J0IEVudW1UeXBlCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQot
Ci0KLWNsYXNzIEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3Iu
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMiCi0KLSAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgZGVmIHNo
b3VsZF9nZW5lcmF0ZV9kb21haW4oZG9tYWluKToKLSAgICAgICAgICAgIGRvbWFpbl9lbnVtX3R5
cGVzID0gZmlsdGVyKGxhbWJkYSBkZWNsYXJhdGlvbjogaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50
eXBlLCBFbnVtVHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKLSAgICAgICAgICAgIHJl
dHVybiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAgb3IgbGVuKGRvbWFpbi5ldmVudHMpID4gMCBv
ciBsZW4oZG9tYWluX2VudW1fdHlwZXMpID4gMAotCi0gICAgICAgIHJldHVybiBmaWx0ZXIoc2hv
dWxkX2dlbmVyYXRlX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikp
Ci0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBzZWN0aW9ucyA9IFtd
Ci0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAg
ICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLmdlbmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5z
X3RvX2dlbmVyYXRlKCkpKQotICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0K
LSAgICBkZWYgZ2VuZXJhdGVfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWlu
X25hbWUKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnLy8gJShkb21haW4pcy4n
ICUgYXJncykKLQotICAgICAgICBoYXNfYXN5bmNfY29tbWFuZHMgPSBhbnkobWFwKGxhbWJkYSBj
b21tYW5kOiBjb21tYW5kLmlzX2FzeW5jLCBkb21haW4uY29tbWFuZHMpKQotICAgICAgICBpZiBs
ZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGhhc19hc3luY19jb21tYW5kczoKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlciUoZG9tYWluKXNEaXNwYXRj
aGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNw
ZWN0b3JCYWNrZW5kLCAiJShkb21haW4pcyIpOycgJSBhcmdzKQotCi0gICAgICAgIGZvciBkZWNs
YXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6Ci0gICAgICAgICAgICBpZiBkZWNs
YXJhdGlvbi50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICdlbnVtTmFtZSc6IGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJhdG9y
LnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUpIGZv
ciBlbnVtX3ZhbHVlIGluIGRlY2xhcmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKV0pCi0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckVudW0oIiUoZG9tYWluKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7
JyAlIGVudW1fYXJncykKLQotICAgICAgICAgICAgZGVmIGlzX2Fub255bW91c19lbnVtX21lbWJl
cih0eXBlX21lbWJlcik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9t
ZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cwot
Ci0gICAgICAgICAgICBmb3IgX21lbWJlciBpbiBmaWx0ZXIoaXNfYW5vbnltb3VzX2VudW1fbWVt
YmVyLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpOgotICAgICAgICAgICAgICAgIGVudW1fYXJn
cyA9IHsKLSAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgJ2VudW1OYW1lJzogJyVzJXMnICUgKGRlY2xhcmF0aW9uLnR5
cGVfbmFtZSwgdWNmaXJzdChfbWVtYmVyLm1lbWJlcl9uYW1lKSksCi0gICAgICAgICAgICAgICAg
ICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXpl
ZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92
YWx1ZSBpbiBfbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKV0pCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIiUoZG9tYWluKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJn
cykKLQotICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKLSAgICAgICAgICAgIGV2
ZW50X2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFt
ZSwKLSAgICAgICAgICAgICAgICAnZXZlbnROYW1lJzogZXZlbnQuZXZlbnRfbmFtZSwKLSAgICAg
ICAgICAgICAgICAncGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzXSkKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckV2ZW50KCIlKGRvbWFpbilzLiUoZXZlbnROYW1lKXMiLCBbJShwYXJhbXMpc10pOycgJSBl
dmVudF9hcmdzKQotCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLQot
ICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QocGFyYW1ldGVyKToKLSAg
ICAgICAgICAgICAgICBvcHRpb25hbF9zdHJpbmcgPSAidHJ1ZSIgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsIGVsc2UgImZhbHNlIgotICAgICAgICAgICAgICAgIHBhaXJzID0gW10KLSAgICAgICAg
ICAgICAgICBwYWlycy5hcHBlbmQoJyJuYW1lIjogIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpCi0gICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCcidHlwZSI6ICIlcyInICUgR2Vu
ZXJhdG9yLmpzX25hbWVfZm9yX3BhcmFtZXRlcl90eXBlKHBhcmFtZXRlci50eXBlKSkKLSAgICAg
ICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJvcHRpb25hbCI6ICVzJyAlIG9wdGlvbmFsX3N0cmlu
ZykKLSAgICAgICAgICAgICAgICByZXR1cm4gInslc30iICUgIiwgIi5qb2luKHBhaXJzKQotCi0g
ICAgICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRv
bWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5k
LmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICAgICAnY2FsbFBhcmFtcyc6ICIsICIuam9pbihb
Z2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4gY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnNdKSwKLSAgICAgICAgICAgICAgICAncmV0dXJuUGFyYW1zJzog
IiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRl
ciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSksCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCIlKGRv
bWFpbilzLiUoY29tbWFuZE5hbWUpcyIsIFslKGNhbGxQYXJhbXMpc10sIFslKHJldHVyblBhcmFt
cylzXSk7JyAlIGNvbW1hbmRfYXJncykKLQotICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgb3Ig
ZG9tYWluLmV2ZW50czoKLSAgICAgICAgICAgIGFjdGl2YXRlX2FyZ3MgPSB7Ci0gICAgICAgICAg
ICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAnYXZh
aWxhYmlsaXR5JzogZG9tYWluLmF2YWlsYWJpbGl0eSwKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIGRvbWFpbi5hdmFpbGFiaWxpdHk6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCIlKGRvbWFpbilzIiwgIiUoYXZhaWxh
YmlsaXR5KXMiKTsnICUgYWN0aXZhdGVfYXJncykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCIl
KGRvbWFpbilzIik7JyAlIGFjdGl2YXRlX2FyZ3MpCi0KLSAgICAgICAgcmV0dXJuICJcbiIuam9p
bihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5
YTA4ZTYxMDg4ZWYzZTA0MzkxYzUyOGJmODUzNTgzMGZhYTg0MjljLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
Ci0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0K
LWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLWltcG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGlt
cG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0
Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBU
ZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQotCi1sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJu
ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotICAgIGRlZiBkb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihk
b21haW4uY29tbWFuZHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikp
Ci0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBoZWFkZXJzID0gWwot
ICAgICAgICAgICAgJyJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCInLAotICAgICAgICAgICAg
JzxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4nLAotICAgICAgICAgICAg
Jzx3dGYvUGFzc1JlZlB0ci5oPicsCi0gICAgICAgICAgICAnPHd0Zi90ZXh0L1dURlN0cmluZy5o
PiddCi0KLSAgICAgICAgdHlwZWRlZnMgPSBbKCdTdHJpbmcnLCAnRXJyb3JTdHJpbmcnKV0KLQot
ICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6
IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKLSAgICAgICAgICAg
ICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBp
biBoZWFkZXJzXSksCi0gICAgICAgICAgICAndHlwZWRlZnMnOiAnXG4nLmpvaW4oWyd0eXBlZGVm
ICVzICVzOycgJSB0eXBlZGVmIGZvciB0eXBlZGVmIGluIHR5cGVkZWZzXSksCi0gICAgICAgIH0K
LQotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLQotICAgICAg
ICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xp
Y2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBI
ZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYWx0ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMoZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVu
ZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9t
YWlucykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9u
cykKLQotICAgICMgUHJpdmF0ZSBtZXRob2RzLgotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbHRlcm5h
dGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhzZWxmLCBkb21haW5z
KToKLSAgICAgICAgaWYgbm90IGRvbWFpbnM6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCi0gICAgICAgIGZvciBkb21haW4gaW4gZG9tYWlu
czoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9t
YWluKGRvbWFpbiwgJ2NsYXNzIEFsdGVybmF0ZUluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXI7
JyAlIGRvbWFpbi5kb21haW5fbmFtZSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRp
b25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgY2xhc3NDb21wb25lbnRzID0g
WydjbGFzcyddCi0gICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5z
ZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBu
b3QgTm9uZToKLSAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8p
Ci0KLSAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKLQotICAgICAgICBjb21tYW5kX2Rl
Y2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoK
LSAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9o
YW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcykp
Ci0KLSAgICAgICAgaGFuZGxlcl9hcmdzID0gewotICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0
TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAotICAgICAgICAgICAgJ2RvbWFpbk5h
bWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9u
cyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUo
VGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9u
KS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVf
YW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgot
ICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQu
Y29tbWFuZF9uYW1lCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFt
ZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUg
ZW51bV9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUg
dWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICBmb3IgZW51bV92YWx1
ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgICVzID0gJWQsJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51
bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3Zh
bHVlKSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUg
dWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKHNlbGYsIGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcyk6Ci0gICAgICAgIGlmIGNvbW1h
bmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFu
ZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kKQotCi0gICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnRXJyb3JTdHJpbmcmJ10KLSAgICAgICAgZm9yIF9w
YXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVj
a2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQotCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51
bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFt
ZXM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwgY29tbWFuZCkpCi0gICAgICAgICAgICAg
ICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotCi0gICAg
ICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvdXRfJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUK
LSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
cGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1h
bF9vdXRfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBwYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKLSAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRl
cihfcGFyYW1ldGVyLCBjb21tYW5kKSkKLSAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMu
YWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0KLSAgICAgICAgY29tbWFuZF9hcmdzID0g
ewotICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAg
ICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJzKQotICAgICAgICB9Ci0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShw
YXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9u
X2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICBjYWxsYmFja05hbWUgPSAiJXND
YWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKQotCi0gICAgICAgIGluX3Bh
cmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNv
bW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQo
IiVzIGluXyVzIiAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxf
aW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAg
ICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNh
bGxiYWNrTmFtZSkKLQotICAgICAgICBvdXRfcGFyYW1ldGVycyA9IFtdCi0gICAgICAgIGZvciBf
cGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBvdXRf
cGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zv
cm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQotCi0gICAgICAgIGNsYXNzX2NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KLSAgICAgICAgZXhw
b3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8n
LCBOb25lKQotICAgICAgICBpZiBleHBvcnRfbWFjcm86Ci0gICAgICAgICAgICBjbGFzc19jb21w
b25lbnRzLmFwcGVuZChleHBvcnRfbWFjcm8pCi0KLSAgICAgICAgY29tbWFuZF9hcmdzID0gewot
ICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAnICcuam9pbihjbGFzc19jb21wb25l
bnRzKSwKLSAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiBjYWxsYmFja05hbWUsCi0gICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdp
blBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFyYW1ldGVycyksCi0gICAgICAgICAgICAnb3V0
UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVycyksCi0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5
bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpCi0K
LSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2Vs
ZiwgZG9tYWluKToKLSAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCi0gICAgICAg
IGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFj
cm8nLCBOb25lKQotICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCi0KLSAgICAgICAgZGVjbGFy
YXRpb25zID0gW10KLSAgICAgICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwOgotICAgICAg
ICAgICAgZGVjbGFyYXRpb25zLmFwcGVuZCgncHJpdmF0ZTonKQotICAgICAgICBkZWNsYXJhdGlv
bnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kLCBkb21haW4uY29tbWFuZHMpKQotCi0gICAgICAgIGhhbmRsZXJfYXJncyA9IHsKLSAg
ICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRz
KSwKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAg
ICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZGVjbGFyYXRpb25zKQotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4o
ZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5E
aXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQot
Ci0gICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNl
bGYsIGNvbW1hbmQpOgotICAgICAgICByZXR1cm4gIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7IiAlIGNvbW1hbmQuY29t
bWFuZF9uYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDliZWM1NTc0NGU3ZWVjMjBmYmVjNzUxMThjNDQxNTk5NGUwYzQwMDEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAg
QEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN0cmluZwot
ZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5l
cmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFy
cmF5VHlwZQotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5jcHAiCi0KLSAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAg
ICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAs
IEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQotCi0gICAgZGVmIGdlbmVyYXRl
X291dHB1dChzZWxmKToKLSAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCi0gICAgICAgICAg
ICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAotICAgICAgICAgICAg
JzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKLSAgICAgICAgICAgICc8d3RmL3RleHQv
Q1N0cmluZy5oPiddCi0KLSAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzID0gWycjaW5jbHVkZSAl
cycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10KLSAgICAgICAgc2Vj
b25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnJykKLSAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFw
cGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCi0gICAg
ICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNpbmNsdWRlICJJbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCInKQotICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBw
ZW5kKCcjZW5kaWYnKQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ3By
aW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCInLAotICAgICAg
ICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKHNlY29uZGFyeV9pbmNsdWRlcyks
Ci0gICAgICAgIH0KLQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9u
ZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgiXG4iLmpvaW4obWFw
KHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3JfZG9tYWluLCBzZWxm
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNl
bGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4sIHNlbGYu
ZG9tYWluc190b19nZW5lcmF0ZSgpKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAg
ICAjIFByaXZhdGUgbWV0aG9kcy4KLQotICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19k
ZXN0cnVjdG9yX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgZGVzdHJ1Y3Rvcl9h
cmdzID0gewotICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUKLSAg
ICAgICAgfQotICAgICAgICBkZXN0cnVjdG9yID0gJ0luc3BlY3RvciUoZG9tYWluTmFtZSlzQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVzdHJ1Y3Rvcl9hcmdzCi0gICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgZGVzdHJ1Y3RvcikKLQotICAg
IGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxm
LCBkb21haW4pOgotICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQotCi0gICAgICAgIGNvbnN0
cnVjdG9yX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5f
bmFtZSwKLSAgICAgICAgfQotICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0
b3IpLnN1YnN0aXR1dGUoTm9uZSwgKipjb25zdHJ1Y3Rvcl9hcmdzKSkKLQotICAgICAgICBpZiBs
ZW4oZG9tYWluLmNvbW1hbmRzKSA8PSA1OgotICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlv
bl9mb3JfZG9tYWluKGRvbWFpbikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpbXBsZW1l
bnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2lt
cGxlbWVudGF0aW9uX2Zvcl9kb21haW4oZG9tYWluKSkKLQotICAgICAgICBmb3IgY29tbWFuZCBp
biBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgotICAg
ICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXN5bmNf
ZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKGNvbW1hbmQsIGRvbWFpbikpCi0gICAgICAgICAg
ICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCwgZG9tYWluKSkKLQotICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcblxuJy5qb2luKGltcGxl
bWVudGF0aW9ucykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNo
X2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgY2FzZXMg
PSBbXQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAlIGRv
bWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCi0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAg
ICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsnICUgZG9tYWluLmNvbW1hbmRzWzBdLmNv
bW1hbmRfbmFtZSkKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzWzE6XToK
LSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScg
JSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAg
ICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUpCi0K
LSAgICAgICAgc3dpdGNoX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFp
bi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdkaXNwYXRjaENhc2VzJzogIlxuIi5qb2luKGNh
c2VzKQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwg
Kipzd2l0Y2hfYXJncykKLQotICAgIGRlZiBfZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9zd2l0
Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBjYXNl
cyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAg
ICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCi0gICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25h
bWUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAgICAg
eyAiJShjb21tYW5kTmFtZSlzIiwgJkluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBhcmdzKQotCi0gICAgICAgIHN3aXRjaF9hcmdz
ID0gewotICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAg
ICAgICAgICAnZGlzcGF0Y2hDYXNlcyc6ICJcbiIuam9pbihjYXNlcykKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkxhcmdlU3dpdGNoKS5zdWJzdGl0dXRlKE5vbmUsICoqc3dpdGNoX2FyZ3MpCi0KLSAg
ICBkZWYgX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihzZWxmLCBj
b21tYW5kLCBkb21haW4pOgotICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10K
LSAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQotCi0gICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7
Ci0gICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX3NldF9t
ZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAotICAgICAgICAgICAgICAgICdwYXJhbWV0
ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICdwYXJh
bWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIo
cGFyYW1ldGVyKSwKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRl
cnMuYXBwZW5kKCclcyAlcycgJSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfYXN5
bmNfcGFyYW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0KLSAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBpZiBH
ZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlw
ZSk6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzLmlzQXNzaWduZWQoKSknICUgcGFyYW1fYXJncykK
LSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAg
ICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFy
YW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFtZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9h
cmdzKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9wYXJh
bWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBw
YXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0
ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9h
cmdzKQotICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Ci0gICAgICAg
ICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2Fn
ZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJShwYXJhbWV0ZXJOYW1l
KXMpKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXll
ZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0
ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQotCi0gICAgICAgIGFzeW5jX2FyZ3MgPSB7Ci0gICAg
ICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdj
YWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycs
Ci0gICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1l
dGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVyQXNzaWdubWVudHMnOiAiXG4iLmpvaW4o
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVGVt
cGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1h
bmQpLnN1YnN0aXR1dGUoTm9uZSwgKiphc3luY19hcmdzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFp
bik6Ci0gICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBvdXRf
cGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMgPSBbXQotICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVy
cyA9IFsnY2FsbElkJ10KLSAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbJ2Vycm9yJ10KLQot
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAg
ICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnbnVsbHB0cicKLSAgICAgICAgICAgIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVu
dCA9ICcmJXNfdmFsdWVGb3VuZCcgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAg
ICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgIGJvb2wgJXNfdmFs
dWVGb3VuZCA9IGZhbHNlOycgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0KLSAgICAgICAg
ICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAg
ICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAot
ICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9nZXRfbWV0
aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKLSAgICAgICAgICAgICAgICAnc3VjY2Vzc091
dFBhcmFtJzogb3V0X3N1Y2Nlc3NfYXJndW1lbnQKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUp
cyBpbl8lKHBhcmFtZXRlck5hbWUpcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjolKGtl
eWVkR2V0TWV0aG9kKXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIiUocGFyYW1l
dGVyTmFtZSlzIiksICUoc3VjY2Vzc091dFBhcmFtKXMsIHByb3RvY29sRXJyb3JzUHRyKTsnICUg
cGFyYW1fYXJncykKLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAg
ICAgICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJO
YW1lKXNfdmFsdWVGb3VuZCA/ICZpbl8lKHBhcmFtZXRlck5hbWUpcyA6IG51bGxwdHInICUgcGFy
YW1fYXJncwotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJh
bWV0ZXJzLmFwcGVuZChvcHRpb25hbF9pbl9wYXJhbWV0ZXJfc3RyaW5nKQotICAgICAgICAgICAg
ICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChvcHRpb25hbF9pbl9wYXJhbWV0ZXJfc3RyaW5n
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hl
cl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2luXycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCi0gICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdpbl8nICsgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotCi0gICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0g
ICAgICAgICAgICBhc3luY19hcmdzID0gewotICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2Zp
cnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgY2Fs
bGJhY2stPmRpc2FibGUoKTsnKQotICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cigmY2FsbElkLCBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOycpCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFw
cGVuZCgnY2FsbGJhY2snKQotCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgcGFyYW1f
YXJncyA9IHsKLSAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3Iu
dHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKLSAgICAgICAg
ICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9zZXRf
bWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKLQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUo
cGFyYW1ldGVyVHlwZSlzIG91dF8lKHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKLSAg
ICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFt
ZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25l
ZCgpKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhv
ZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFt
ZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFy
YW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0g
ICAgICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Ci0gICAgICAgICAg
ICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJlc3Vs
dC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0XyUocGFyYW1ldGVy
TmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVz
dWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIp
LCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQotCi0gICAgICAgICAgICAg
ICAgaWYgR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFt
ZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5k
KCdvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyAr
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAg
ICdjYWxsYmFja05hbWUnOiAnJXNDYWxsYmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9u
YW1lKSwKLSAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAot
ICAgICAgICAgICAgJ2luUGFyYW1ldGVyRGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGluX3BhcmFt
ZXRlcl9kZWNsYXJhdGlvbnMpLAotICAgICAgICAgICAgJ2ludm9jYXRpb25QYXJhbWV0ZXJzJzog
JywgJy5qb2luKG1ldGhvZF9wYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICdhbHRlcm5hdGVJbnZv
Y2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9pbihhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2Rf
cGFyYW1ldGVycyksCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlm
IGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPT0gMDoKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNv
bW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpJyAlIGNvbW1h
bmRfYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJ
bnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSknICUgY29tbWFuZF9h
cmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQotCi0gICAgICAgIGlmIGxlbihjb21tYW5k
LmNhbGxfcGFyYW1ldGVycykgPiAwOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRB
cmd1bWVudHMpLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQotCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsn
KQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT4l
KGNvbW1hbmROYW1lKXMoJShhbHRlcm5hdGVJbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29t
bWFuZF9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBF
cnJvclN0cmluZyBlcnJvcjsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCi0gICAg
ICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWZQdHI8SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUo
Y2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3RvciUoZG9tYWlu
TmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2Vu
ZERpc3BhdGNoZXIsY2FsbElkKSk7JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgaWYgbGVuKGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMDoKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChv
dXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9h
Z2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1h
bmRfYXJncykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBpZiBjb21tYW5kLmlz
X2FzeW5jOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGVycm9yLmxlbmd0aCgp
KSB7JykKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
KQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCi0gICAgICAgIGVsaWYgbGVuKGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsnKQotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9
JykKLSAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPT0gMToKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpJykKLSAgICAg
ICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOycpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnfScpCi0gICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJu
YXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDRhOGQ1YWZlZWQ0
NDUyZWU5ZmJmNzhlYTUyYjk0MzNmYWIyMzY3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMCwwICsxLDkyIEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBy
ZQorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gY3BwX2dlbmVyYXRvciBpbXBv
cnQgQ3BwR2VuZXJhdG9yCitmcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNz
IENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAg
IEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBk
ZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJ0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oJworCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKKyAgICAgICAgaGVhZGVycyA9IFsKKyAgICAgICAgICAgICciSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oIicsCisgICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+JywKKyAgICAgICAgXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAg
ICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0
cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2lu
Y2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgfQorCisg
ICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWN0
aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5h
dGVEaXNwYXRjaGVyc0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChz
ZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkp
KQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0
ZURpc3BhdGNoZXJzSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAg
ICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAg
ICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBmb3IgY29tbWFuZCBpbiBk
b21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kKSkK
KworICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRv
bWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogJ1xu
Jy5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKSwKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVt
cGxhdGVzLkFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckludGVy
ZmFjZURlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKworICAg
IGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21t
YW5kKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIGNh
bGxJZCddCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJz
OgorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzIGluXyVzJyAlIChDcHBHZW5lcmF0
b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIp
LCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7
CisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAg
ICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAorICAgICAgICB9Cisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShw
YXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGIxMTNlOGYz
MTRiZTUzZjQ0MjY1MDI3ZTY2NmQyOTdiYmIwZjRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwyMDkgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitmcm9t
IHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBH
ZW5lcmF0b3IKK2Zyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0
b3IsIHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQorCitsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5w
dXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAg
cmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworICAgIGRlZiBkb21haW5z
X3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46
IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJz
ID0gWworICAgICAgICAgICAgJyJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCInLAorICAgICAg
ICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4nLAorICAgICAg
ICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCisgICAgICAgICAgICAnPHd0Zi90ZXh0L1dURlN0
cmluZy5oPiddCisKKyAgICAgICAgdHlwZWRlZnMgPSBbKCdTdHJpbmcnLCAnRXJyb3JTdHJpbmcn
KV0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0
cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAg
ICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhl
YWRlciBpbiBoZWFkZXJzXSksCisgICAgICAgICAgICAndHlwZWRlZnMnOiAnXG4nLmpvaW4oWyd0
eXBlZGVmICVzICVzOycgJSB0eXBlZGVmIGZvciB0eXBlZGVmIGluIHR5cGVkZWZzXSksCisgICAg
ICAgIH0KKworICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKwor
ICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBs
YXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYWx0ZXJuYXRlX2hhbmRsZXJfZm9y
d2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMoZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25z
LmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFp
biwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVf
ZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0
aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihz
ZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9h
bHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhzZWxmLCBk
b21haW5zKToKKyAgICAgICAgaWYgbm90IGRvbWFpbnM6CisgICAgICAgICAgICByZXR1cm4gJycK
KworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCisgICAgICAgIGZvciBkb21haW4gaW4g
ZG9tYWluczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgJ2NsYXNzIEFsdGVybmF0ZUluc3BlY3RvciVzQmFja2VuZERpc3Bh
dGNoZXI7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25l
bnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1l
d29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNy
byBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0
TWFjcm8pCisKKyAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKKworICAgICAgICBjb21t
YW5kX2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21t
YW5kczoKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIHVzZWRfZW51bV9u
YW1lcykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5k
RXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2Rv
bWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERlY2xh
cmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVt
cGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRl
Y2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBf
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNv
bW1hbmQpOgorICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAncGFyYW1ldGVyTmFt
ZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6
IGNvbW1hbmQuY29tbWFuZF9uYW1lCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBcJyUocGFy
YW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50ICUoY29tbWFuZE5h
bWUpcy4nICUgZW51bV9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBlbnVtIGNsYXNz
ICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBmb3Ig
ZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFt
ZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5lbmNvZGluZ19mb3JfZW51bV92YWx1
ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH07IC8vIGVudW0gY2xh
c3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0
aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcyk6CisgICAgICAg
IGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVf
YXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kKQorCisgICAgICAg
IGNwcF90eXBlX2Zvcl9pbl9wYXJhbWV0ZXIgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3Vu
Y2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyCisgICAgICAgIGlmIGNvbW1hbmQuZG9tYWluLmNo
ZWNrX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBjcHBfdHlwZV9mb3JfaW5fcGFyYW1ldGVyID0g
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIKKwor
ICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJidd
CisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChjcHBfdHlwZV9mb3JfaW5f
cGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAg
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgX3Bh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgorICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFy
YW1ldGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQorICAgICAgICAgICAgICAgIHVzZWRfZW51bV9u
YW1lcy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBmb3IgX3BhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSAnb3V0XycgKyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBp
ZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1l
ID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KCIlcyAlcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRl
cihfcGFyYW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwg
Y29tbWFuZCkpCisgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycykKKyAgICAgICAgfQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICB2aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9
IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChz
ZWxmLCBjb21tYW5kKToKKyAgICAgICAgY2FsbGJhY2tOYW1lID0gIiVzQ2FsbGJhY2siICUgdWNm
aXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkKKworICAgICAgICBjcHBfdHlwZV9mb3JfaW5fcGFy
YW1ldGVyID0gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3Bh
cmFtZXRlcgorICAgICAgICBpZiBjb21tYW5kLmRvbWFpbi5jaGVja19wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgY3BwX3R5cGVfZm9yX2luX3BhcmFtZXRlciA9IENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3JfY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyCisKKyAgICAgICAgaW5fcGFyYW1ldGVy
cyA9IFsnRXJyb3JTdHJpbmcmJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5j
YWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5f
JXMiICUgKGNwcF90eXBlX2Zvcl9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpKQorICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUGFzc1JlZlB0
cjwlcz4gY2FsbGJhY2siICUgY2FsbGJhY2tOYW1lKQorCisgICAgICAgIG91dF9wYXJhbWV0ZXJz
ID0gW10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVy
czoKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3Bh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgY2xhc3NfY29tcG9uZW50cyA9IFsn
Y2xhc3MnXQorICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNl
dHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9ydF9tYWNybzoKKyAg
ICAgICAgICAgIGNsYXNzX2NvbXBvbmVudHMuYXBwZW5kKGV4cG9ydF9tYWNybykKKworICAgICAg
ICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICcg
Jy5qb2luKGNsYXNzX2NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IGNh
bGxiYWNrTmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9u
YW1lLAorICAgICAgICAgICAgJ2luUGFyYW1ldGVycyc6ICIsICIuam9pbihpbl9wYXJhbWV0ZXJz
KSwKKyAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5qb2luKG91dF9wYXJhbWV0ZXJz
KSwKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShO
b25lLCAqKmNvbW1hbmRfYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjbGFzc0NvbXBvbmVu
dHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9ydE1hY3Jv
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBvcnRN
YWNybykKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBpZiBsZW4oZG9tYWlu
LmNvbW1hbmRzKSA+IDA6CisgICAgICAgICAgICBkZWNsYXJhdGlvbnMuYXBwZW5kKCdwcml2YXRl
OicpCisgICAgICAgIGRlY2xhcmF0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQsIGRvbWFpbi5jb21tYW5kcykpCisKKyAgICAg
ICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAi
ICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21h
aW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIu
am9pbihkZWNsYXJhdGlvbnMpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0
ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiAi
ICAgIHZvaWQgJXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0NjE1ZGQxMzQ1OWMxZjMxMjdiNWZiNTE5
YjU2YmI5ZWE0MDhjMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMjg3IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1w
bGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSBjcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBt
b2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKKworCitjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwg
aW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAg
ICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5jcHAiCisKKyAgICBkZWYgZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9t
YWluOiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vj
b25kYXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPiddCisKKyAgICAgICAgc2Vj
b25kYXJ5X2luY2x1ZGVzID0gWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBz
ZWNvbmRhcnlfaGVhZGVyc10KKyAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnJykK
KyAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKScpCisgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBl
bmQoJyNpbmNsdWRlICJJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCInKQor
ICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjZW5kaWYnKQorCisgICAgICAgIGhl
YWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuaCInLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzog
J1xuJy5qb2luKHNlY29uZGFyeV9pbmNsdWRlcyksCisgICAgICAgIH0KKworICAgICAgICBzZWN0
aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1l
bnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZCgiXG4iLmpvaW4obWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfY2xh
c3NfZGVzdHJ1Y3Rvcl9mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpKQor
ICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb25zX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlv
blBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1
cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAg
IGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4oc2VsZiwg
ZG9tYWluKToKKyAgICAgICAgZGVzdHJ1Y3Rvcl9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFp
bk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUKKyAgICAgICAgfQorICAgICAgICBkZXN0cnVjdG9y
ID0gJ0luc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5z
cGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVz
dHJ1Y3Rvcl9hcmdzCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9t
YWluKGRvbWFpbiwgZGVzdHJ1Y3RvcikKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBpbXBsZW1l
bnRhdGlvbnMgPSBbXQorCisgICAgICAgIGNvbnN0cnVjdG9yX2FyZ3MgPSB7CisgICAgICAgICAg
ICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgfQorICAgICAgICBp
bXBsZW1lbnRhdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IpLnN1YnN0aXR1dGUoTm9uZSwgKipj
b25zdHJ1Y3Rvcl9hcmdzKSkKKworICAgICAgICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA8PSA1
OgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zbWFs
bF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKGRvbWFpbikpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4o
ZG9tYWluKSkKKworICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAg
ICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgICAgIGltcGxlbWVudGF0
aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9t
YWluKGNvbW1hbmQsIGRvbWFpbikpCisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoY29t
bWFuZCwgZG9tYWluKSkKKworICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2RvbWFpbihkb21haW4sICdcblxuJy5qb2luKGltcGxlbWVudGF0aW9ucykpCisKKyAgICBkZWYg
X2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21h
aW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2FzZXMgPSBbXQorICAgICAgICBjYXNlcy5hcHBl
bmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5k
X25hbWUpCisgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdl
LmdldCgpKTsnICUgZG9tYWluLmNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9y
IGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzWzE6XToKKyAgICAgICAgICAgIGNhc2VzLmFwcGVu
ZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkK
KyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdl
dCgpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUpCisKKyAgICAgICAgc3dpdGNoX2FyZ3MgPSB7
CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAg
ICAgICdkaXNwYXRjaENhc2VzJzogIlxuIi5qb2luKGNhc2VzKQorICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uU21hbGxTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKKworICAg
IGRlZiBfZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjYXNlcyA9IFtdCisgICAgICAgIGZvciBj
b21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAg
ICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAg
ICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlzIiwg
Jkluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUp
cyB9LCcgJSBhcmdzKQorCisgICAgICAgIHN3aXRjaF9hcmdzID0geworICAgICAgICAgICAgJ2Rv
bWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnZGlzcGF0Y2hDYXNl
cyc6ICJcbiIuam9pbihjYXNlcykKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1wbGF0
ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNo
KS5zdWJzdGl0dXRlKE5vbmUsICoqc3dpdGNoX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fz
eW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihzZWxmLCBjb21tYW5kLCBkb21haW4pOgor
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KKyAgICAgICAgZm9ybWFsX3Bh
cmFtZXRlcnMgPSBbXQorCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAg
J2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBl
KHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMg
JXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihw
YXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNo
b3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgorICAgICAg
ICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICgl
KHBhcmFtZXRlck5hbWUpcy5pc0Fzc2lnbmVkKCkpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAg
ICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25N
ZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUp
cyIpLCAlKHBhcmFtZXRlck5hbWUpcy5nZXRWYWx1ZSgpKTsnICUgcGFyYW1fYXJncykKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2ln
bm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykK
KyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAg
ICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFy
YW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKyAgICAg
ICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRT
ZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBh
cmFtX2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2Qp
cyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFtZSlzKTsn
ICUgcGFyYW1fYXJncykKKworICAgICAgICBhc3luY19hcmdzID0geworICAgICAgICAgICAgJ2Rv
bWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY2FsbGJhY2tOYW1l
JzogdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2snLAorICAgICAgICAg
ICAgJ2Zvcm1hbFBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpLAorICAg
ICAgICAgICAgJ291dFBhcmFtZXRlckFzc2lnbm1lbnRzJzogIlxuIi5qb2luKG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMpCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRl
bXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kKS5zdWJz
dGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kLCBkb21haW4pOgorICAg
ICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgb3V0X3BhcmFtZXRl
cl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0g
W10KKyAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMgPSBbJ2Nh
bGxJZCddCisgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzID0gWydlcnJvciddCisKKyAgICAgICAg
Zm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIG91
dF9zdWNjZXNzX2FyZ3VtZW50ID0gJ251bGxwdHInCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnJiVz
X3ZhbHVlRm91bmQnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAg
aW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQg
PSBmYWxzZTsnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgICAgICBwYXJh
bV9hcmdzID0geworICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9y
LmNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAg
ICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAg
ICAgICAgICAna2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2Rf
Zm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdzdWNjZXNzT3V0UGFy
YW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVudAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
bl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIGlu
XyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiUoa2V5ZWRH
ZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJO
YW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9jb2xFcnJvcnNQdHIpOycgJSBwYXJh
bV9hcmdzKQorCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAg
ICAgICAgICAgb3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUp
c192YWx1ZUZvdW5kID8gJmluXyUocGFyYW1ldGVyTmFtZSlzIDogbnVsbHB0cicgJSBwYXJhbV9h
cmdzCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRl
cnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCisgICAgICAgICAgICAgICAg
bWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21l
dGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkK
KyAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2luXycgKyBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAg
ICAgICAgIGFzeW5jX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21h
aW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3Qo
Y29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFj
ay0+ZGlzYWJsZSgpOycpCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7JykKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5k
KCdjYWxsYmFjaycpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBwYXJhbV9hcmdz
ID0geworICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5j
cHBfdHlwZV9mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAg
ICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJf
bWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUo
cGFyYW1ldGVyVHlwZSlzIG91dF8lKHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAg
ICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAg
ICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBh
cmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3Np
Z25lZCgpKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFt
ZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1l
dGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVy
TmFtZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUo
cGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3Mp
CisgICAgICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJl
c3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMi
KSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0XyUocGFyYW1l
dGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
cmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUp
cyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgICAg
ICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBl
KHBhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMu
YXBwZW5kKCdvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZv
dXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBjb21tYW5kX2FyZ3Mg
PSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAg
ICAgICAgICdjYWxsYmFja05hbWUnOiAnJXNDYWxsYmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29t
bWFuZF9uYW1lKSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9u
YW1lLAorICAgICAgICAgICAgJ2luUGFyYW1ldGVyRGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGlu
X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAorICAgICAgICAgICAgJ2ludm9jYXRpb25QYXJhbWV0
ZXJzJzogJywgJy5qb2luKG1ldGhvZF9wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdhbHRlcm5h
dGVJbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9pbihhbHRlcm5hdGVfZGlzcGF0Y2hlcl9t
ZXRob2RfcGFyYW1ldGVycyksCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPT0gMDoKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVy
OjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpJyAl
IGNvbW1hbmRfYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
dm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmRO
YW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSknICUgY29t
bWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorCisgICAgICAgIGlmIGxlbihj
b21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFy
ZUNvbW1hbmRBcmd1bWVudHMpLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQorCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT4lKGNvbW1hbmROYW1lKXMoJShhbHRlcm5hdGVJbnZvY2F0aW9uUGFyYW1ldGVycylz
KTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJu
OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyNlbmRpZicpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OycpCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3Rv
ciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlz
KG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAg
aWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMDoKKyAgICAgICAgICAgIGxpbmVz
LmV4dGVuZChvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgbV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7
JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBpZiBj
b21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGVycm9y
Lmxlbmd0aCgpKSB7JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIGVs
aWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMToKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsnKQorICAgICAgICAgICAgbGluZXMu
ZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9JykKKyAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykg
PT0gMToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorCisgICAgICAgIGlmIG5vdCBjb21tYW5kLmlz
X2FzeW5jOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWUwNGFkZjY4NDlkOGE2NzU5M2Vm
YWFjZGEwNWJjY2JkYThkZjI2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQpAQCAtMCwwICsxLDExOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGlt
cG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgor
ZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVz
IGFzIENwcFRlbXBsYXRlcworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJz
dAorZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQorCisKK2NsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVw
YXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJ
bnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyAgICBkZWYgZG9tYWluc190b19nZW5l
cmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9t
YWluLmV2ZW50cykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKwor
ICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAg
ICAgICAgICAnIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIicsCisgICAgICAgICAgICAnPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIu
aD4nLAorICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4nXQorCisgICAgICAgIGhl
YWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdc
VysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1ZGVz
JzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNd
KSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAorICAgICAgICB9CisKKyAgICAgICAgc2Vj
dGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNl
KCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVy
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlv
bnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3Jf
ZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9u
ZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykK
KworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgZXZlbnQpOgorICAgICAgICBlbnVt
X2FyZ3MgPSB7CisgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSwKKyAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5ldmVudF9uYW1lCisgICAg
ICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRlck5hbWUpc1wnIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCAlKGV2ZW50TmFtZSlzLicgJSBlbnVtX2FyZ3MpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0
ZXIudHlwZS5lbnVtX3ZhbHVlcygpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
ICAgICAlcyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUo
ZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2Zp
cnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4o
bGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcydd
CisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdl
eHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAg
ICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KFtdKQorCisgICAgICAgIGV2ZW50X2RlY2xhcmF0aW9u
cyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAg
ZXZlbnRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xh
cmF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpKQorCisgICAg
ICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzog
IiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9t
YWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5q
b2luKGV2ZW50X2RlY2xhcmF0aW9ucykKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVz
LkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0
ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1l
cyk6CisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgbGluZXMgPSBbXQor
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVz
ZWRfZW51bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihwYXJhbWV0ZXIsIGV2ZW50KSkKKyAgICAg
ICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkK
KworICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB2b2lkICVzKCVzKTsiICUgKGV2ZW50LmV2ZW50
X25hbWUsICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykpKQorICAgICAgICByZXR1cm4gIlxu
Ii5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40MjcwYjNiNTkwZjRiNzMzYjdkNzRhZThhYzFmNzFlODJmYWU5ODYyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkK
QEAgLTAsMCArMSwxMjEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQg
KGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gY3BwX2dl
bmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0
VHlwZSwgQXJyYXlUeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisK
K2NsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Cisg
ICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisK
KyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3Rv
ckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIgorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5l
dmVudHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBk
ZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsn
PHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAg
ICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgi
JywKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICJcbiIuam9pbihbJyNpbmNsdWRl
ICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAg
IH0KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENw
cFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVy
YXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLklt
cGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisg
ICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRo
b2RzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3Jf
ZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtdCisgICAg
ICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgaW1wbGVtZW50YXRp
b25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9l
dmVudChldmVudCwgZG9tYWluKSkKKworICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2RvbWFpbihkb21haW4sICdcblxuJy5qb2luKGltcGxlbWVudGF0aW9ucykpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KHNlbGYs
IGV2ZW50LCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFtZXRlcl9h
c3NpZ25tZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKworICAgICAg
ICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisKKyAgICAgICAgICAg
IHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAg
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNz
X2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgIGlm
IHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFs
dWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIHBh
cmFtZXRlcl92YWx1ZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJfYXJncyA9IHsKKyAgICAgICAg
ICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tf
b3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1l
JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJW
YWx1ZSc6IHBhcmFtZXRlcl92YWx1ZSwKKyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2Qn
OiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUp
LAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6
CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICgl
KHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICAgICAgcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRT
ZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVy
VmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4l
KGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBh
cmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKworICAgICAgICAgICAgZm9ybWFs
X3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9j
aGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKKworICAgICAgICBldmVudF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFp
bk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnZXZlbnROYW1lJzogZXZl
bnQuZXZlbnRfbmFtZSwKKyAgICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2lu
KGZvcm1hbF9wYXJhbWV0ZXJzKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2
b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlzRnJvbnRlbmREaXNwYXRjaGVyOjolKGV2ZW50TmFt
ZSlzKCUoZm9ybWFsUGFyYW1ldGVycylzKScgJSBldmVudF9hcmdzKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1l
dGhvZCIpLCBBU0NJSUxpdGVyYWwoIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiKSk7JyAl
IGV2ZW50X2FyZ3MpCisKKyAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9hc3NpZ25tZW50cykgPiAw
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAg
bGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwg
cGFyYW1zT2JqZWN0KTsnKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnfScpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kNjBjNmFkOGYyOTYyMmRiMTYyOGE1MGZhOTE2ZTFiNWRlNzg1MjY2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtMCwwICsx
LDM0MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUK
K2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9n
ZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRl
cyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSBnZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1U
eXBlLCBPYmplY3RUeXBlLCBQcmltaXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBG
cmFtZXdvcmtzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNz
IENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmls
ZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgi
CisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBkb21haW5zID0gc2Vs
Zi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVx
dWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKworICAgICAgICBoZWFkZXJzID0gc2V0
KFsKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4nLAor
ICAgICAgICAgICAgJzx3dGYvQXNzZXJ0aW9ucy5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNz
UmVmUHRyLmg+JworICAgICAgICBdKQorCisgICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9k
ZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKKworICAgICAgICBo
ZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1Yign
XFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAgICAgICAgICdpbmNsdWRl
cyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQo
aGVhZGVycyldKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAorICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuX3R5cGUgPSAnU3RyaW5nJworICAgICAgICByZXR1cm5fdHlwZV93aXRoX2V4
cG9ydF9tYWNybyA9IFtyZXR1cm5fdHlwZV0KKyAgICAgICAgaWYgZXhwb3J0X21hY3JvIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgcmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm9bOjBdID0g
W2V4cG9ydF9tYWNyb10KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ25hbWVzcGFjZSBQcm90b2Nv
bCB7JykKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVj
bGFyYXRpb25zKGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfdHlwZWRlZnMoZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnJXMgZ2V0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOycgJSAnICcuam9pbihyZXR1cm5fdHlwZV93aXRoX2V4
cG9ydF9tYWNybykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oWworICAgICAg
ICAgICAgJ3RlbXBsYXRlPHR5cGVuYW1lIFQ+ICVzIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51
bVZhbHVlKScgJSByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICd7JywKKyAgICAgICAgICAgICcg
ICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVl
KSk7JywKKyAgICAgICAgICAgICd9J10pKQorCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBt
YXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAgICAgICAg
c2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwg
YnVpbGRlcl9zZWN0aW9ucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoKSkKKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2NvbCcpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9u
cykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgIyBGSVhNRTogbW92ZSBidWlsZGVy
cyBvdXQgb2YgY2xhc3NlcywgdW5jb21tZW50IGZvcndhcmQgZGVjbGFyYXRpb24KKworICAgIGRl
ZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoc2VsZiwgZG9tYWlucyk6CisgICAgICAg
IHNlY3Rpb25zID0gW10KKworICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAg
ICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5
cGVfZGVjbGFyYXRpb25zXQorICAgICAgICAgICAgb2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJk
YSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVz
KQorICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFu
Y2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAgICAgICAgICBpZiBs
ZW4ob2JqZWN0X3R5cGVzKSArIGxlbihlbnVtX3R5cGVzKSA9PSAwOgorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAgICAgICBk
b21haW5fbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUp
CisKKyAgICAgICAgICAgIG9iamVjdF90eXBlX25hbWVzID0gW190eXBlLnJhd19uYW1lKCkgZm9y
IF90eXBlIGluIG9iamVjdF90eXBlc10KKyAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lcyA9IFtf
dHlwZS5yYXdfbmFtZSgpIGZvciBfdHlwZSBpbiBlbnVtX3R5cGVzXQorCisgICAgICAgICAgICAj
IEZvcndhcmQtZGVjbGFyZSBhbGwgY2xhc3NlcyBzbyB0aGUgdHlwZSBidWlsZGVycyB3b24ndCBi
cmVhayBpZiByZWFycmFuZ2VkLgorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnY2xh
c3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVkKG9iamVjdF90eXBlX25hbWVzKSkKKyAg
ICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRlbmQoJ2VudW0gY2xhc3MgJXM7JyAlIG5hbWUgZm9y
IG5hbWUgaW4gc29ydGVkKGVudW1fdHlwZV9uYW1lcykpCisgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xu
Jy5qb2luKGRvbWFpbl9saW5lcykpKQorCisgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoK
KyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJu
ICIiIi8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorJXMKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xh
cmF0aW9ucy4KKyIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0
ZV90eXBlZGVmcyhzZWxmLCBkb21haW5zKToKKyAgICAgICAgc2VjdGlvbnMgPSBtYXAoc2VsZi5f
Z2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAgICAgICAgc2VjdGlvbnMg
PSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxlbih0ZXh0KSA+IDAsIHNlY3Rpb25zKQorCisgICAgICAg
IGlmIGxlbihzZWN0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcmV0dXJuICIiIi8vIFR5cGVkZWZzLgorJXMKKy8vIEVuZCBvZiB0
eXBlZGVmcy4iIiIgJSAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVf
dHlwZWRlZnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBwcmltaXRpdmVfZGVj
bGFyYXRpb25zID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2luc3RhbmNlKGRlY2wudHlwZSwgQWxp
YXNlZFR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisgICAgICAgIGlmIGxlbihwcmlt
aXRpdmVfZGVjbGFyYXRpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAg
ICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gcHJpbWl0aXZlX2Rl
Y2xhcmF0aW9uczoKKyAgICAgICAgICAgIHByaW1pdGl2ZV9uYW1lID0gQ3BwR2VuZXJhdG9yLmNw
cF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShkZWNsYXJhdGlvbi50eXBlLmFsaWFzZWRfdHlwZSkK
KyAgICAgICAgICAgIHR5cGVkZWZfbGluZXMgPSBbXQorICAgICAgICAgICAgaWYgbGVuKGRlY2xh
cmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CisgICAgICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5h
cHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQorICAgICAgICAgICAg
dHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgJXMgJXM7JyAlIChwcmltaXRpdmVfbmFtZSwg
ZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4n
LmpvaW4odHlwZWRlZl9saW5lcykpCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKCdcblxuJy5qb2luKHNlY3Rpb25zKSkKKyAgICAgICAgbGluZXMuYXBwZW5k
KCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAg
IHNlY3Rpb25zID0gW10KKworICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4u
dHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFy
YXRpb24udHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlv
bikpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4p
KQorCisgICAgICAgIHNlY3Rpb25zID0gZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlv
bikgPiAwLCBzZWN0aW9ucykKKyAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgorICAgICAg
ICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKCdcbicuam9pbihzZWN0aW9ucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAl
cycgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCB0eXBlX2RlY2xhcmF0aW9u
LCBkb21haW4pOgorICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMp
ID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBlbnVtX21lbWJlcnMgPSBm
aWx0ZXIobGFtYmRhIG1lbWJlcjogaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFu
ZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
KQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBt
ZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAg
ICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRp
b25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIG9iamVjdF9uYW1l
ID0gdHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUKKworICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24p
CisgICAgICAgIGJhc2VfY2xhc3MgPSAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAg
ICAgIGlmIG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlv
bi50eXBlKToKKyAgICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25h
bWUsIGJhc2VfY2xhc3MpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3B1YmxpYzonKQorICAgICAg
ICBmb3IgZW51bV9tZW1iZXIgaW4gZW51bV9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSBcJyVzXCcgd2hpbGUgZ2VuZXJh
dGluZyAlcy4nICUgKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBvYmplY3RfbmFtZSkpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNf
ZW51bV9tZW1iZXIoZW51bV9tZW1iZXIpKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHR5cGVfZGVjbGFyYXRpb24pKQorCisgICAgICAgIGNv
bnN0cnVjdG9yX2V4YW1wbGUgPSBbXQorICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVu
ZCgnICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgpJyAlIChvYmplY3RfbmFt
ZSwgb2JqZWN0X25hbWUpKQorICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6
CisgICAgICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqICAgICAuc2V0
JXMoLi4uKScgJSB1Y2ZpcnN0KG1lbWJlci5tZW1iZXJfbmFtZSkpCisKKyAgICAgICAgYnVpbGRl
cl9hcmdzID0geworICAgICAgICAgICAgJ29iamVjdFR5cGUnOiBvYmplY3RfbmFtZSwKKyAgICAg
ICAgICAgICdjb25zdHJ1Y3RvckV4YW1wbGUnOiAnXG4nLmpvaW4oY29uc3RydWN0b3JfZXhhbXBs
ZSkgKyAnOycsCisgICAgICAgIH0KKworICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLlByb3RvY29sT2JqZWN0QnVpbGRlckRlY2xhcmF0aW9uUHJlbHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCisgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBy
ZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIodHlwZV9tZW1iZXIsIGRvbWFpbikpCisgICAgICAg
IGxpbmVzLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuUHJvdG9jb2xPYmplY3RCdWlsZGVy
RGVjbGFyYXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCisg
ICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIobWVtYmVy
LCBkb21haW4pKQorCisgICAgICAgIGlmIEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyh0
eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gUHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2Vu
ZXJhdGVkIGFzIG9wZW4uJykKKyAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAgICBleHBvcnRfbWFjcm8gPSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMgc3RhdGljIGNvbnN0IGNoYXIqICVzOycg
JSAoZXhwb3J0X21hY3JvLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpCisKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zv
cl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRpb24pOgorICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZW51bV9kZWNsYXJhdGlv
bi5kZXNjcmlwdGlvbikKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVj
dF9mb3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9uYW1lLCBlbnVtX2RlY2xhcmF0
aW9uLnR5cGUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9n
ZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihzZWxmLCBlbnVtX21lbWJl
cik6CisgICAgICAgIGRlZiBhcHBseV9pbmRlbnRhdGlvbihsaW5lKToKKyAgICAgICAgICAgIGlm
IGxpbmUuc3RhcnRzd2l0aCgoJyMnLCAnLyonLCAnKi8nLCAnLy8nKSkgb3IgbGVuKGxpbmUpIGlz
IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUKKworICAgICAgICBpbmRlbnRlZF9saW5l
cyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVt
X3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVudW1fbWVtYmVyLnR5cGUpKQorICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGluZGVudGVkX2xpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9z
dHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxmLCBlbnVtX25hbWUsIGVudW1fdHlwZSk6CisgICAgICAg
IGxpbmVzID0gW10KKyAgICAgICAgZW51bV9uYW1lID0gdWNmaXJzdChlbnVtX25hbWUpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnZW51bSBjbGFzcyAlcyB7JyAlIGVudW1fbmFtZSkKKyAgICAgICAg
Zm9yIGVudW1fdmFsdWUgaW4gZW51bV90eXBlLmVudW1fdmFsdWVzKCk6CisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9y
X2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51
bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ307IC8vIGVudW0gY2xhc3MgJXMnICUg
ZW51bV9uYW1lKQorICAgICAgICByZXR1cm4gbGluZXMgICMgVGhlIGNhbGxlciBtYXkgd2FudCB0
byBhZGp1c3QgaW5kZW50YXRpb24sIHNvIGRvbid0IGpvaW4gdGhlc2UgbGluZXMuCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bShzZWxmLCB0eXBlX2RlY2xhcmF0aW9uKToK
KyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxh
bWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzKQorICAgICAgICBlbnVtX3ZhbHVlcyA9IFtdCisKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgZW51bSB7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwnKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVxdWlyZWRfbWVtYmVycykp
OgorICAgICAgICAgICAgZW51bV92YWx1ZSA9ICIlc1NldCIgJSB1Y2ZpcnN0KHJlcXVpcmVkX21l
bWJlcnNbaV0ubWVtYmVyX25hbWUpCisgICAgICAgICAgICBlbnVtX3ZhbHVlcy5hcHBlbmQoZW51
bV92YWx1ZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9IDEgPDwgJWQs
JyAlIChlbnVtX3ZhbHVlLCBpKSkKKyAgICAgICAgaWYgbGVuKGVudW1fdmFsdWVzKSA+IDA6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQWxsRmllbGRzU2V0ID0gKCVzKScgJSAn
IHwgJy5qb2luKGVudW1fdmFsdWVzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICBBbGxGaWVsZHNTZXQgPSAwJykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgfTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1i
ZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIHNldHRlcl9hcmdzID0gewor
ICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUp
LAorICAgICAgICAgICAgJ2tleWVkU2V0JzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9k
X2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21l
bWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlcikKKyAgICAgICAgfQorCisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQl
KGNhbWVsTmFtZSlzKCUocGFyYW1ldGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJv
cGVydHlfJShuYW1lKXNfYWxyZWFkeV9zZXQpOycgJSBzZXR0ZXJfYXJncykKKworICAgICAgICBp
ZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVy
YWwoIiUobmFtZSlzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShrZXll
ZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUpOycgJSBzZXR0ZXJfYXJncykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPCUoY2Ft
ZWxOYW1lKXNTZXQ+KCk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21lbWJlciwgZG9t
YWluKToKKyAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2FtZWxOYW1lJzog
dWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAgICAna2V5ZWRTZXQn
OiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlw
ZSksCisgICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAg
ICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVt
YmVyKHR5cGVfbWVtYmVyKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShj
YW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHsnKQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVt
YmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJ
bnNwZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIp
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxp
bnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMo
QVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
KworICAgIGRlZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJh
aXRzKHNlbGYpOgorICAgICAgICAjIEEgbGlzdCBvZiAoYnVpbGRlcl90eXBlLCBuZWVkc19ydW50
aW1lX2Nhc3QpCisgICAgICAgIHR5cGVfYXJndW1lbnRzID0gW10KKworICAgICAgICBmb3IgZG9t
YWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgorICAgICAgICAgICAgZGVjbGFyYXRp
b25zX3RvX2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hh
cGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisKKyAg
ICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0
ZToKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50
eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1i
ZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVu
dHMuYXBwZW5kKChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVy
KHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSwgRmFsc2UpKQorCisgICAgICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAg
ICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKENwcEdlbmVyYXRvci5jcHBf
cHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpLCBHZW5lcmF0b3Iu
dHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpKQorCisgICAg
ICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3RydWN0J10KKyAgICAgICAgZnVuY3Rpb25fa2V5d29y
ZHMgPSBbJ3N0YXRpYyB2b2lkJ10KKyAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgp
LmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBv
cnRfbWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMuYXBwZW5k
KGV4cG9ydF9tYWNybykKKyAgICAgICAgICAgICNmdW5jdGlvbl9rZXl3b3Jkc1sxOjFdID0gW2V4
cG9ydF9tYWNyb10KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBhcmd1bWVudCBp
biB0eXBlX2FyZ3VtZW50czoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8PiAl
cyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAlICgnICcuam9pbihzdHJ1Y3Rfa2V5d29yZHMpLCBhcmd1
bWVudFswXSkpCisgICAgICAgICAgICBpZiBhcmd1bWVudFsxXToKKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3N0YXRpYyBQYXNzUmVmUHRyPCVzPiBydW50aW1lQ2FzdChQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3b3JkcykpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxZWY0OTQxMmRhYjlj
MDNiNzJmMDMzM2VjYmYzYmYwYzg5ZTM5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwxODEgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCisKK2Zyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitm
cm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgQ3BwVGVtcGxhdGVzCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0
Citmcm9tIG1vZGVscyBpbXBvcnQgQWxpYXNlZFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIE9i
amVjdFR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3Mg
Q3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvclByb3RvY29sT2Jq
ZWN0cy5jcHAiCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBkb21h
aW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VsZi5jYWxjdWxhdGVf
dHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKworICAgICAgICBzZWNv
bmRhcnlfaGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRl
cl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JQcm90
b2NvbE9iamVjdHMuaCInLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxuIi5q
b2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRl
cnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3Bh
Y2UgUHJvdG9jb2wgeycpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9l
bnVtX21hcHBpbmcoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX29w
ZW5fZmllbGRfbmFtZXMoKSkKKyAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9n
ZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKQorICAgICAgICBzZWN0aW9ucy5l
eHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3Nl
Y3Rpb25zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bCcpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSW1wbGVt
ZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKworICAg
ICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9k
cy4KKworICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgorICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7JykKKyAgICAgICAgbGluZXMuZXh0ZW5kKFsnICAgICIl
cyIsJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gc2VsZi5hc3NpZ25lZF9lbnVtX3Zh
bHVlcygpXSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpIHsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gZW51bV9jb25z
dGFudF92YWx1ZXNbY29kZV07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfb3Blbl9maWVsZF9u
YW1lcyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZG9tYWluIGluIHNl
bGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgorICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRp
b24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMo
ZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKToKKyAgICAgICAgICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzLCBr
ZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1lKToKKyAgICAgICAgICAgICAgICAg
ICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFp
bi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmly
c3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSkpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAg
IGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAg
ICBzZWN0aW9ucyA9IFtdCisgICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRl
cihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBl
KSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorCisgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKKyAgICAgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0
eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFy
YXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnR5
cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgorICAgICAgICAg
ICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zv
cl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisKKyAgICAgICAgcmV0dXJu
ICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ydW50aW1lX2Nhc3Rf
Zm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCBvYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAg
ICBhcmdzID0geworICAgICAgICAgICAgJ29iamVjdFR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpCisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5Qcm90b2NvbE9iamVjdFJ1bnRp
bWVDYXN0KS5zdWJzdGl0dXRlKE5vbmUsICoqYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfYXNz
ZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0aW9uKToK
KyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVt
YmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAg
ICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRp
b25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgc2hvdWxkX2Nv
dW50X3Byb3BlcnRpZXMgPSBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKG9iamVj
dF9kZWNsYXJhdGlvbi50eXBlKQorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9p
ZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5
cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCIiInsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBj
YXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsiIiIpCisgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgYXJncyA9IHsKKyAgICAgICAg
ICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAg
ICAgICAgICdhc3NlcnRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2Rf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgeworICAgICAgICBJbnNw
ZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICUobWVtYmVyTmFtZSlzUG9zID0gb2JqZWN0LT5maW5kKEFT
Q0lJTGl0ZXJhbCgiJShtZW1iZXJOYW1lKXMiKSk7CisgICAgICAgIEFTU0VSVCglKG1lbWJlck5h
bWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1l
bWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0iIiIgJSBhcmdzKQorCisgICAgICAg
IGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcn
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50
ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKKworICAgICAgICBmb3IgdHlwZV9tZW1i
ZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAg
ICAgICAgJ21lbWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAg
ICAgICAnYXNzZXJ0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zv
cl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKKyAgICAgICAgSW5zcGVj
dG9yT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZChBU0NJ
SUxpdGVyYWwoIiUobWVtYmVyTmFtZSlzIikpOworICAgICAgICBpZiAoJShtZW1iZXJOYW1lKXNQ
b3MgIT0gb2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1l
bWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOyIiIiAlIGFyZ3MpCisKKyAgICAgICAgICAgIGlm
IHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIH0nKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisK
KyAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpJykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9w
ZXJ0aWVzIGluIG9iamVjdDogJXNcXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHNlbGYsIGVu
dW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJ3ZvaWQgJXMoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIENwcEdl
bmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIs
IG9iamVjdF9kZWNsYXJhdGlvbikpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIFN0cmluZyByZXN1bHQ7JykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCisKKyAgICAg
ICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcgfHwgJy5qb2luKFsncmVzdWx0ID09ICIlcyInICUgZW51
bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX21lbWJlci50eXBlLmVudW1fdmFsdWVzKCld
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRfY29uZGl0
aW9uKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzNm
ZjdiMGZjZDcyMjUyMmQ2MGIyZWNmNGE0Nzk1N2U2MGRkMmYyOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24K
LSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQot
aW1wb3J0IGxvZ2dpbmcKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCi0KLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQotZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJu
ICJJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSAgICBkZWYgZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4o
ZG9tYWluLmV2ZW50cykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkK
LQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBbCi0g
ICAgICAgICAgICAnIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIicsCi0gICAgICAgICAgICAn
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAotICAgICAgICAgICAgJzxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKLSAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQ
dHIuaD4nLAotICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4nXQotCi0gICAgICAg
IGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3Vi
KCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAotICAgICAgICAgICAgJ2luY2x1
ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRl
cnNdKSwKLSAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAotICAgICAgICB9Ci0KLSAgICAgICAg
c2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNl
bnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVh
ZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2Vj
dGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19m
b3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9u
cykKLQotICAgICMgUHJpdmF0ZSBtZXRob2RzLgotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgZXZlbnQpOgotICAgICAgICBl
bnVtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSwKLSAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5ldmVudF9uYW1lCi0g
ICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRlck5hbWUpc1wnIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCAlKGV2ZW50TmFtZSlzLicgJSBlbnVtX2FyZ3MpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJh
bWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
ICAgICAgICAlcyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFs
dWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkp
KQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1
Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgIHJldHVybiAiXG4iLmpv
aW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFz
cyddCi0gICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5n
KCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9u
ZToKLSAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCi0KLSAg
ICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KFtdKQotCi0gICAgICAgIGV2ZW50X2RlY2xhcmF0
aW9ucyA9IFtdCi0gICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgotICAgICAgICAg
ICAgZXZlbnRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2Rl
Y2xhcmF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpKQotCi0g
ICAgICAgIGhhbmRsZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3Jv
JzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKLSAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxu
Ii5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVz
LkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0
ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1l
cyk6Ci0gICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9z
dHJpbmdfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVz
ZWRfZW51bV9uYW1lczoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihwYXJhbWV0ZXIsIGV2ZW50KSkKLSAgICAg
ICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkK
LQotICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB2b2lkICVzKCVzKTsiICUgKGV2ZW50LmV2ZW50
X25hbWUsICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykpKQotICAgICAgICByZXR1cm4gIlxu
Ii5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDBkNTUxODM2MGIwMGUxNTg5ZGU1YWMyMDk4ZTQ5NGFhZmM2
NjhlNWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDEy
MCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBz
dHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRvciBpbXBv
cnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RU
eXBlLCBBcnJheVR5cGUKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQot
Y2xhc3MgRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9y
KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAg
ICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAg
IGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAiSW5zcGVjdG9yRnJv
bnRlbmREaXNwYXRjaGVycy5jcHAiCi0KLSAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50
cykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBn
ZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWyc8d3Rm
L3RleHQvQ1N0cmluZy5oPiddCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAg
ICAncHJpbWFyeUluY2x1ZGUnOiAnIkluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuaCInLAot
ICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMn
ICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKLSAgICAgICAgfQot
Ci0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxh
dGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
KSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVt
ZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAg
ICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQotCi0gICAgIyBQcml2YXRlIG1ldGhvZHMu
Ci0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21h
aW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KLSAgICAgICAg
Zm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6Ci0gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50
KGV2ZW50LCBkb21haW4pKQotCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKLQotICAgIGRl
ZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZl
bnQsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVyX2Fzc2ln
bm1lbnRzID0gW10KLSAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQotCi0gICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKLQotICAgICAgICAgICAgcGFy
YW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIG5vdCBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlfY29w
eV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92YWx1ZQotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdJ
bnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgcGFyYW1ldGVy
X3ZhbHVlCi0KLSAgICAgICAgICAgIHBhcmFtZXRlcl9hcmdzID0gewotICAgICAgICAgICAgICAg
ICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFy
YW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzog
cGFyYW1ldGVyX3ZhbHVlLAotICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdlbmVy
YXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJO
YW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3Np
Z25tZW50cy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMo
QVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlclZhbHVlKXMpOycg
JSBwYXJhbWV0ZXJfYXJncykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1l
dGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1
ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCi0KLSAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJz
LmFwcGVuZCgnJXMgJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3Jt
YWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkp
Ci0KLSAgICAgICAgZXZlbnRfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9t
YWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25h
bWUsCi0gICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFy
YW1ldGVycykKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0
b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1h
bFBhcmFtZXRlcnMpcyknICUgZXZlbnRfYXJncykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVND
SUlMaXRlcmFsKCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIikpOycgJSBldmVudF9hcmdz
KQotCi0gICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMpID4gMDoKLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgICAgIGxpbmVzLmV4dGVu
ZChwYXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVj
dCk7JykKLQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQot
ICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9j
b21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzFkZjIyMWQ2
NTIzM2U5ZmFiYWYyODQ3YmU4MjFlNTQ0Y2Q5YzZjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2Jh
Y2tlbmRfY29tbWFuZHMucHkKQEAgLTAsMCArMSwxMjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBs
YXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwor
ZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQorCisKK2NsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAg
IEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBk
ZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcyIKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAg
ICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgZG9t
YWluX2VudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIGRlY2xhcmF0aW9uOiBpc2luc3RhbmNlKGRl
Y2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAg
ICAgICAgICAgcmV0dXJuIGxlbihkb21haW4uY29tbWFuZHMpID4gMCBvciBsZW4oZG9tYWluLmV2
ZW50cykgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBlcykgPiAwCisKKyAgICAgICAgcmV0dXJu
IGZpbHRlcihzaG91bGRfZ2VuZXJhdGVfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5l
cmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHNl
Y3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5z
ZSgpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuZ2VuZXJhdGVfZG9tYWluLCBz
ZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihz
ZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbic6IGRv
bWFpbi5kb21haW5fbmFtZQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcvLyAl
KGRvbWFpbilzLicgJSBhcmdzKQorCisgICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueSht
YXAobGFtYmRhIGNvbW1hbmQ6IGNvbW1hbmQuaXNfYXN5bmMsIGRvbWFpbi5jb21tYW5kcykpCisg
ICAgICAgIGlmIGxlbihkb21haW4uZXZlbnRzKSA+IDAgb3IgaGFzX2FzeW5jX2NvbW1hbmRzOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyJShkb21h
aW4pc0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hl
ci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICIlKGRvbWFpbilzIik7JyAlIGFyZ3MpCisKKyAgICAg
ICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAg
ICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGVudW1f
YXJncyA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1OYW1lJzogZGVjbGFyYXRpb24udHlwZV9uYW1l
LAorICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAl
IChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgZW51
bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gZGVjbGFyYXRpb24udHlwZS5lbnVtX3ZhbHVlcygp
XSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShl
bnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorCisgICAgICAgICAgICBkZWYgaXNfYW5vbnltb3Vz
X2VudW1fbWVtYmVyKHR5cGVfbWVtYmVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXNpbnN0
YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNf
YW5vbnltb3VzCisKKyAgICAgICAgICAgIGZvciBfbWVtYmVyIGluIGZpbHRlcihpc19hbm9ueW1v
dXNfZW51bV9tZW1iZXIsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyk6CisgICAgICAgICAgICAg
ICAgZW51bV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRv
bWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiAnJXMlcycgJSAoZGVj
bGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KF9tZW1iZXIubWVtYmVyX25hbWUpKSwKKyAgICAg
ICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJh
dG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUp
IGZvciBlbnVtX3ZhbHVlIGluIF9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsn
ICUgZW51bV9hcmdzKQorCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAg
ICAgICAgICAgZXZlbnRfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWlu
LmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5ldmVudF9u
YW1lLAorICAgICAgICAgICAgICAgICdwYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRl
cnNdKQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRXZlbnQoIiUoZG9tYWluKXMuJShldmVudE5hbWUpcyIsIFslKHBhcmFt
cylzXSk7JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNv
bW1hbmRzOgorCisgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJh
bWV0ZXIpOgorICAgICAgICAgICAgICAgIG9wdGlvbmFsX3N0cmluZyA9ICJ0cnVlIiBpZiBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAiZmFsc2UiCisgICAgICAgICAgICAgICAgcGFpcnMgPSBb
XQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnIm5hbWUiOiAiJXMiJyAlIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJ0eXBlIjog
IiVzIicgJSBHZW5lcmF0b3IuanNfbmFtZV9mb3JfcGFyYW1ldGVyX3R5cGUocGFyYW1ldGVyLnR5
cGUpKQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnIm9wdGlvbmFsIjogJXMnICUgb3B0
aW9uYWxfc3RyaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiAieyVzfSIgJSAiLCAiLmpvaW4o
cGFpcnMpCisKKyAgICAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAn
ZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjb21tYW5kTmFt
ZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICdjYWxsUGFyYW1zJzog
IiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRlcikgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyc10pLAorICAgICAgICAgICAgICAgICdyZXR1
cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBm
b3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnNdKSwKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIiUoZG9tYWluKXMuJShjb21tYW5kTmFtZSlzIiwgWyUoY2FsbFBhcmFtcylzXSwgWyUo
cmV0dXJuUGFyYW1zKXNdKTsnICUgY29tbWFuZF9hcmdzKQorCisgICAgICAgIGlmIGRvbWFpbi5j
b21tYW5kcyBvciBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgYWN0aXZhdGVfYXJncyA9IHsK
KyAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAg
ICAgICAgICdhdmFpbGFiaWxpdHknOiBkb21haW4uYXZhaWxhYmlsaXR5LAorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgZG9tYWluLmF2YWlsYWJpbGl0eToKKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluKXMi
LCAiJShhdmFpbGFiaWxpdHkpcyIpOycgJSBhY3RpdmF0ZV9hcmdzKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZh
dGVEb21haW4oIiUoZG9tYWluKXMiKTsnICUgYWN0aXZhdGVfYXJncykKKworICAgICAgICByZXR1
cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI5NjQ1YzdkODkzYWQwOTE3MGYzZTcxNGY3YzcyYWY1YTEzYjQ3MDYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwxMDkgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisj
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworaW1w
b3J0IHJlCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBjcHBfZ2VuZXJhdG9y
IGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zy
b20gbW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCitmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBP
YmpDR2VuZXJhdG9yCitmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dl
bmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICclc0JhY2tlbmREaXNwYXRjaGVycy5oJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKKwor
ICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gZmlsdGVy
KE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmls
dGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQor
CisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVycyA9IFsKKyAg
ICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+JywKKyAgICAgICAgICAgICc8d3RmL1JldGFpblB0ci5oPicsCisgICAgICAgIF0K
KworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmlu
Zyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAgICAg
ICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRl
ciBpbiBoZWFkZXJzXSksCisgICAgICAgICAgICAnZm9yd2FyZERlY2xhcmF0aW9ucyc6IHNlbGYu
X2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnMoKSwKKyAgICAgICAgfQorCisgICAg
ICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWN0aW9u
cyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQor
ICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyUG9zdGx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAnXG5cbicu
am9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0
aW9ucyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbJ0Bwcm90b2NvbCAlcyVzRG9tYWluSGFuZGxl
cjsnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkgZm9y
IGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKV0KKyAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKKyAgICAgICAgbGluZXMgPSBbXQorICAg
ICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bj
bGFzcyAlcyVzRG9tYWluSGFuZGxlcjsnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRv
bWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxm
LCBkb21haW4pOgorICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAg
cmV0dXJuICcnCisKKyAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBm
b3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBjb21tYW5kX2RlY2xh
cmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zv
cl9jb21tYW5kKGNvbW1hbmQpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2NvbW1h
bmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpLAorICAgICAg
ICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFu
ZGxlck9iakNEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisK
KyAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChz
ZWxmLCBjb21tYW5kKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBwYXJhbWV0ZXJzID0g
Wydsb25nIGNhbGxJZCddCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9w
YXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzIGluXyVzJyAlIChD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9w
YXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICBjb21tYW5k
X2FyZ3MgPSB7CisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFt
ZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAorICAg
ICAgICB9CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmRO
YW1lKXMoJShwYXJhbWV0ZXJzKXMpIG92ZXJyaWRlOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlOWE2N2NhZjNkYzRjYzc4YzQ0MzYxZjdmMzFjOTIzOWJh
ZGYyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQpAQCAtMCwwICsxLDE2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisj
IENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgcmUKK2Zyb20gc3RyaW5nIGltcG9ydCBU
ZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBtb2RlbHMgaW1wb3J0IEZyYW1ld29ya3MK
K2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0
b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQorZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworCitsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBPYmpDQ29uZmlndXJhdGlvbkltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1v
ZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBt
b2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgor
ICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJzLm1tJyAlIE9iakNHZW5lcmF0b3Iu
T0JKQ19QUkVGSVgKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAg
ICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21t
YW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAg
c2Vjb25kYXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAnIiVzSW50ZXJuYWwuaCInICUgT2Jq
Q0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICciJXNFbnVtQ29udmVyc2lvbkhl
bHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICc8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKKyAgICAgICAgICAgICc8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgXQorCisgICAgICAg
IGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyIlc0JhY2tl
bmREaXNwYXRjaGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAg
ICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVy
IGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgfQorCisgICAgICAg
IGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWN0aW9ucyA9
IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9p
bXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
blBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1
cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1w
bGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBpZiBub3QgZG9t
YWluLmNvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgY29tbWFuZF9k
ZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6
CisgICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
aGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpKQorCisg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWlu
LCBjb21tYW5kKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBwYXJhbWV0ZXJzID0gWyds
b25nIGNhbGxJZCddCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFt
ZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1l
dGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICBjb21tYW5kX2FyZ3Mg
PSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAg
ICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAg
J3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCisgICAgICAgICAgICAnc3VjY2Vz
c0NhbGxiYWNrJzogc2VsZi5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZChkb21h
aW4sIGNvbW1hbmQpLAorICAgICAgICAgICAgJ2NvbnZlcnNpb25zJzogc2VsZi5fZ2VuZXJhdGVf
Y29udmVyc2lvbnNfZm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSwKKyAgICAgICAgICAgICdp
bnZvY2F0aW9uJzogc2VsZi5fZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3JfY29tbWFuZChkb21haW4s
IGNvbW1hbmQpLAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUs
ICoqY29tbWFuZF9hcmdzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3Jf
Y29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAgICAgICBsaW5lcyA9IFtdCisKKyAg
ICAgICAgIyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzODIyMT4gV2ViIEluc3BlY3Rv
cjogT2JqQyBQcm90b2NvbCBJbnRlcmZhY2VzIHNob3VsZCB0aHJvdyBleGNlcHRpb25zIGZvciBu
aWwgYXJndW1lbnRzCisKKyAgICAgICAgaWYgY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAg
ICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycyA9IFtdCisgICAgICAgICAgICBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAg
b2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29t
bWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKKyAgICAgICAgICAgICAgICB2YXJfbmFtZSA9
IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycy5h
cHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgdmFyX25hbWUpKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXiglcykgeycgJSAnLCAn
LmpvaW4oc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57JykKKworICAgICAg
ICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0g
Q3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQor
ICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29i
amNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICAgICAg
dmFyX2V4cHJlc3Npb24gPSAnKiVzJyAlIHZhcl9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bCBlbHNlIHZhcl9uYW1lCisgICAgICAgICAgICAgICAgZXhwb3J0X2V4cHJlc3Npb24gPSBPYmpD
R2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBh
cmFtZXRlci50eXBlLCB2YXJfZXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICBpZiBub3QgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgcmVzdWx0T2JqZWN0LT4lcyhBU0NJSUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVk
X3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24p
KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICBpZiAoJXMpJyAlIHZhcl9uYW1lKQorICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+JXMoQVNDSUlMaXRlcmFsKCIlcyIp
LCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4
cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHRPYmplY3QucmVsZWFz
ZSgpLCBTdHJpbmcoKSk7JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBTdHJpbmcoKSk7JykKKworICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9OycpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6
CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAn
aW5fJXMnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBvYmpjX2luX3Bh
cmFtX25hbWUgPSAnb18lcycgJSBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBvYmpjX3R5cGUg
PSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1h
bmRfbmFtZSwgcGFyYW1ldGVyLCBGYWxzZSkKKyAgICAgICAgICAgIGluX3BhcmFtX29wdGlvbmFs
X3NhZmVfbmFtZSA9ICcqJXMnICUgaW5fcGFyYW1fbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbXBvcnRfZXhwcmVzc2lvbiA9IE9i
akNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfcGFyYW1ldGVy
KGluX3BhcmFtX29wdGlvbmFsX3NhZmVfbmFtZSwgZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFt
ZSwgcGFyYW1ldGVyKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzOycgJSAoam9pbl90eXBl
X2FuZF9uYW1lKG9iamNfdHlwZSwgb2JqY19pbl9wYXJhbV9uYW1lKSwgaW1wb3J0X2V4cHJlc3Np
b24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAlczsnICUgam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgb2JqY19pbl9wYXJhbV9uYW1l
KSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMpJyAlIGluX3BhcmFt
X25hbWUpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJXM7JyAl
IChvYmpjX2luX3BhcmFtX25hbWUsIGltcG9ydF9leHByZXNzaW9uKSkKKworICAgICAgICBpZiBs
aW5lczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3JfY29tbWFuZChz
ZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAgICAgICBwYWlycyA9IFtdCisgICAgICAgIHBhaXJz
LmFwcGVuZCgnV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjaycpCisgICAgICAgIHBhaXJz
LmFwcGVuZCgnc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjaycpCisgICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBpbl9wYXJh
bV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAg
b2JqY19pbl9wYXJhbV9uYW1lID0gJ29fJXMnICUgaW5fcGFyYW1fbmFtZQorICAgICAgICAgICAg
aWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYWlycy5hcHBl
bmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIG9iamNfaW5fcGFyYW1fbmFt
ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9wdGlvbmFsX2V4cHJlc3Np
b24gPSAnKCVzID8gJiVzIDogbmlsKScgJSAoaW5fcGFyYW1fbmFtZSwgb2JqY19pbl9wYXJhbV9u
YW1lKQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6JXMnICUgKHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSwgb3B0aW9uYWxfZXhwcmVzc2lvbikpCisgICAgICAgIHJldHVybiAnICAg
IFttX2RlbGVnYXRlICVzJXNdOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2luKHBh
aXJzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Nv
bmZpZ3VyYXRpb25faGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyMmNmOGY0MTFiODIyZmY1MDc2MjJk
MGZmYjI2OTJkYzI3NmZmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25f
aGVhZGVyLnB5CkBAIC0wLDAgKzEsODYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBD
b3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQg
bG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zy
b20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0
IE9iakNHZW5lcmF0b3IKK2Zyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpD
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0
b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVw
YXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxl
cGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAn
JXNDb25maWd1cmF0aW9uLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVm
IGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVycyA9IFsKKyAgICAgICAgICAg
ICciJXMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgXQorCisgICAg
ICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsn
I2ltcG9ydCAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAorICAgICAgICB9CisK
KyAgICAgICAgc2VsZi5fY29tbWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5l
cmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisgICAgICAg
IHNlbGYuX2V2ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisKKyAgICAgICAgZG9tYWlu
cyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5HZW5lcmljSGVhZGVyUHJlbHVk
ZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW50ZXJmYWNlX2Zvcl9kb21haW5zKGRv
bWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5H
ZW5lcmljSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisg
ICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVf
Y29uZmlndXJhdGlvbl9pbnRlcmZhY2VfZm9yX2RvbWFpbnMoc2VsZiwgZG9tYWlucyk6CisgICAg
ICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlIFJXSVByb3Rv
Y29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0JykKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21h
aW5zOgorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3Byb3BlcnRpZXNf
Zm9yX2RvbWFpbihkb21haW4pKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9wcm9wZXJ0aWVz
X2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgcHJvcGVydHlfYXJncyA9IHsKKyAg
ICAgICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAg
ICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ3Zh
cmlhYmxlTmFtZVByZWZpeCc6IE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9y
X2RvbWFpbihkb21haW4pLAorICAgICAgICB9CisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5Db25maWd1cmF0
aW9uQ29tbWFuZFByb3BlcnR5KS5zdWJzdGl0dXRlKE5vbmUsICoqcHJvcGVydHlfYXJncykpCisg
ICAgICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4pOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQ29uZmlndXJh
dGlvbkV2ZW50UHJvcGVydHkpLnN1YnN0aXR1dGUoTm9uZSwgKipwcm9wZXJ0eV9hcmdzKSkKKyAg
ICAgICAgcmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVt
ZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTMyMDVjYjlkY2U3Mzg3Yzk0ZTVhYzI2ZGFhNTFiYjA2ODQzODlmMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsx
LDE1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3Ry
aW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0
IEdlbmVyYXRvcgorZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJv
bSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgT2JqQ1RlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKwor
CitjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5l
cmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgor
ICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQor
CisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICclc0NvbmZp
Z3VyYXRpb24ubW0nICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGdlbmVy
YXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCisgICAgICAg
ICAgICAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAg
ICAgICAgICciJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BS
RUZJWCwKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4nLAorICAgICAgICBdCisKKyAg
ICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVz
Q29uZmlndXJhdGlvbi5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAg
ICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAlcycgJSBoZWFkZXIg
Zm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAgICAgICB9CisKKyAgICAgICAg
c2VsZi5fY29tbWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisgICAgICAgIHNlbGYuX2V2
ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9k
aXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYu
ZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0
aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW5zKGRvbWFp
bnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBs
ZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAg
ICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Nv
bmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMoc2VsZiwgZG9tYWlucyk6Cisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCdAaW1wbGVtZW50YXRpb24g
UldJUHJvdG9jb2xDb25maWd1cmF0aW9uJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsnKQorICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfaXZhcnMo
ZG9tYWlucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXInKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghc2VsZiknKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuIG5pbDsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBBU1NFUlQoY29udHJvbGxlcik7JykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHJldHVybiBzZWxmOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2RlYWxs
b2MoZG9tYWlucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgZm9yIGRvbWFp
biBpbiBkb21haW5zOgorICAgICAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzIGFuZCBzZWxmLl9j
b21tYW5kX2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWluKGRvbWFpbikpCisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgaWYgZG9tYWluLmV2ZW50cyBhbmQg
c2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfZ2V0dGVyX2Zvcl9kb21haW4oZG9tYWlu
KSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2l2YXJzKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBh
bmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAgICAgICBvYmpjX2Ns
YXNzX25hbWUgPSAnJXMlc0RvbWFpbkhhbmRsZXInICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVG
SVgsIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICBpdmFyX25hbWUgPSAnXyVz
SGFuZGxlcicgJSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4o
ZG9tYWluKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkPCVzPiAlczsnICUg
KG9iamNfY2xhc3NfbmFtZSwgaXZhcl9uYW1lKSkKKyAgICAgICAgICAgIGlmIGRvbWFpbi5ldmVu
dHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAgICAgIG9iamNf
Y2xhc3NfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVyJyAlIChPYmpDR2VuZXJhdG9y
Lk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgICAgICAgICAgaXZhcl9u
YW1lID0gJ18lc0V2ZW50RGlzcGF0Y2hlcicgJSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVf
cHJlZml4X2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICVzIColczsnICUgKG9iamNfY2xhc3NfbmFtZSwgaXZhcl9uYW1lKSkKKyAgICAgICAgcmV0
dXJuIGxpbmVzCisKKyAgICBkZWYgX2dlbmVyYXRlX2RlYWxsb2Moc2VsZiwgZG9tYWlucyk6Cisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCctICh2b2lkKWRlYWxsb2Mn
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFp
bnM6CisgICAgICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmls
dGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgW18lc0hhbmRs
ZXIgcmVsZWFzZV07JyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2Rv
bWFpbihkb21haW4pKQorICAgICAgICAgICAgaWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZl
bnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgW18l
c0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsnICUgT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1l
X3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFtz
dXBlciBkZWFsbG9jXTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1
cm4gbGluZXMKKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9zZXR0ZXJfZm9yX2RvbWFpbihz
ZWxmLCBkb21haW4pOgorICAgICAgICBzZXR0ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdvYmpj
UHJlZml4JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICdkb21haW5O
YW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ3ZhcmlhYmxlTmFtZVByZWZp
eCc6IE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4p
LAorICAgICAgICB9CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkNvbmZp
Z3VyYXRpb25Db21tYW5kUHJvcGVydHlJbXBsZW1lbnRhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAq
KnNldHRlcl9hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2dldHRl
cl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGdldHRlcl9hcmdzID0geworICAg
ICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAndmFy
aWFibGVOYW1lUHJlZml4JzogT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3Jf
ZG9tYWluKGRvbWFpbiksCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKE9iakNU
ZW1wbGF0ZXMuQ29uZmlndXJhdGlvbkdldHRlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5v
bmUsICoqZ2V0dGVyX2FyZ3MpCisKKyAgICBkZWYgX3ZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgZG9tYWluX25hbWUgPSBkb21haW4uZG9tYWlu
X25hbWUKKyAgICAgICAgaWYgZG9tYWluX25hbWUuc3RhcnRzd2l0aCgnRE9NJyk6CisgICAgICAg
ICAgICByZXR1cm4gJ2RvbScgKyBkb21haW5fbmFtZVszOl0KKyAgICAgICAgaWYgZG9tYWluX25h
bWUuc3RhcnRzd2l0aCgnQ1NTJyk6CisgICAgICAgICAgICByZXR1cm4gJ2NzcycgKyBkb21haW5f
bmFtZVszOl0KKyAgICAgICAgcmV0dXJuIGRvbWFpbl9uYW1lWzoxXS5sb3dlcigpICsgZG9tYWlu
X25hbWVbMTpdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycy5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
Y29udmVyc2lvbl9oZWxwZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiZDVhYjNmNWE5ZWJiNGM4ZjE2M2Nk
YTFlMzY4NzYzZDIyMjM3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVs
cGVycy5weQpAQCAtMCwwICsxLDE1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENv
cHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJv
bSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBl
Citmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIG9iamNfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVt
cGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2RlZiBhZGRf
bmV3bGluZShsaW5lcyk6CisgICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9PSAnJzoKKyAgICAg
ICAgcmV0dXJuCisgICAgbGluZXMuYXBwZW5kKCcnKQorCisKK2NsYXNzIE9iakNDb252ZXJzaW9u
SGVscGVyc0dlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuICclc0VudW1Db252ZXJzaW9uSGVscGVycy5oJyAlIE9iakNHZW5lcmF0b3Iu
T0JKQ19QUkVGSVgKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAg
ICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBl
c19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
ZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJzID0g
WworICAgICAgICAgICAgJyIlc0FycmF5Q29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0gewor
ICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZv
ciBoZWFkZXIgaW4gaGVhZGVyc10pLAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9IHNl
bGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5Db252ZXJzaW9uSGVscGVyc1ByZWx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkNvbnZlcnNpb25IZWxwZXJzU3RhbmRhcmQpLnN1YnN0
aXR1dGUoTm9uZSkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVf
ZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkNvbnZlcnNpb25IZWxwZXJzUG9zdGx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9p
bihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9u
cyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAgIyBUeXBlIGVu
dW1zIGFuZCBtZW1iZXIgZW51bXMuCisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4u
dHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9u
LnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1f
Y29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShtZW1iZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3Jf
bWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisKKyAgICAgICAgIyBBbm9ueW1v
dXMgY29tbWFuZCBlbnVtcy4KKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRz
OgorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoK
KyAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUp
IGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgorICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4s
IGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIChp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlz
X2Fub255bW91cyk6CisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAg
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUs
IHBhcmFtZXRlcikpCisKKyAgICAgICAgIyBBbm9ueW1vdXMgZXZlbnQgZW51bXMuCisgICAgICAg
IGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNl
KHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91
cyk6CisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVy
c2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkK
KworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4sIGRl
Y2xhcmF0aW9uKToKKyAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNf
ZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikKKyAg
ICAgICAgZW51bV92YWx1ZXMgPSBkZWNsYXJhdGlvbi50eXBlLmVudW1fdmFsdWVzKCkKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9v
YmpjX3RvX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmlu
ZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpv
aW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25f
Zm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBv
YmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91
c19lbnVtX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICBlbnVtX3ZhbHVlcyA9
IG1lbWJlci50eXBlLmVudW1fdmFsdWVzKCkKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhv
YmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92
YWx1ZXMpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihzZWxmLCBkb21h
aW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAgICAgb2JqY19lbnVt
X25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9w
YXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKKyAgICAg
ICAgZW51bV92YWx1ZXMgPSBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpCisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fb2JqY190
b19wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2NvbF9zdHJpbmcob2Jq
Y19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKGxp
bmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKHNl
bGYsIG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcyk6CisgICAgICAgIGxpbmVzID0gW10KKyAg
ICAgICAgbGluZXMuYXBwZW5kKCdpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoJXMgdmFs
dWUpJyAlIG9iamNfZW51bV9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBzd2l0Y2godmFsdWUpIHsnKQorICAgICAgICBmb3IgZW51bV92
YWx1ZSBpbiBlbnVtX3ZhbHVlczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGNhc2Ug
JXMlczonICUgKG9iamNfZW51bV9uYW1lLCBHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51
bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgiJXMiKTsnICUgZW51bV92YWx1ZSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgfScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2Nv
bF9zdHJpbmcoc2VsZiwgb2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKToKKyAgICAgICAgbGlu
ZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ2lubGluZSAlcyBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKScgJSBv
YmpjX2VudW1fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgZm9yIGVu
dW1fdmFsdWUgaW4gZW51bV92YWx1ZXM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBp
ZiAodmFsdWUgPT0gIiVzIiknICUgZW51bV92YWx1ZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICByZXR1cm4gJXMlczsnICUgKG9iamNfZW51bV9uYW1lLCBHZW5lcmF0b3Iuc3R5
bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHJldHVybiAlcyVzOycgJSAob2JqY19lbnVtX25hbWUsIEdlbmVyYXRvci5zdHlsaXplZF9u
YW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWVzWzBdKSkpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhlMDg1MjU5NzQ1NGZhMjY1
MzA2ZTkxNjZhYWU5OGRkMjY3ZWJlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDEzNyBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKKworZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IK
K2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gb2JqY19nZW5l
cmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKKworbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzRXZlbnREaXNwYXRjaGVycy5tbScgJSBPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgor
ICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKKyAgICAgICAgICAgICciJXNFbnVtQ29udmVy
c2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAg
ICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKKyAgICAgICAg
ICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgXQorCisg
ICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyIl
c0ludGVybmFsLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAn
c2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICVzJyAlIGhlYWRlciBmb3Ig
aGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAgIH0KKworICAgICAgICBkb21h
aW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VjdGlvbnMgPSBbXQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUHJl
bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
cywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxh
dGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnMoc2VsZiwgZG9tYWluKToKKyAg
ICAgICAgaWYgbm90IGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAg
ICAgICBsaW5lcyA9IFtdCisgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNw
YXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzJyAlIG9iamNfbmFtZSkK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICByZXR1cm4gbmlsOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChj
b250cm9sbGVyKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAg
ICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9ldmVudChkb21haW4sIGV2ZW50KSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnQoc2VsZiwgZG9tYWluLCBl
dmVudCk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2V2ZW50X3NpZ25hdHVyZShkb21haW4sIGV2ZW50KSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBmcm9udGVuZENoYW5uZWwgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRDaGFubmVsKCk7JykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFmcm9udGVuZENoYW5uZWwpJykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpz
b25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiks
IEFTQ0lJTGl0ZXJhbCgiJXMuJXMiKSk7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2
ZW50X25hbWUpKQorICAgICAgICBpZiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKGRvbWFp
biwgZXZlbnQpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBmcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X3NpZ25hdHVyZShzZWxmLCBkb21haW4sIGV2ZW50KToK
KyAgICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICByZXR1
cm4gJy0gKHZvaWQpJXMnICUgZXZlbnQuZXZlbnRfbmFtZQorICAgICAgICBwYWlycyA9IFtdCisg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAg
ICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBh
aXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBPYmpDR2VuZXJhdG9yLm9iamNf
dHlwZV9mb3JfcGFyYW0oZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJh
bV9uYW1lKSkKKyAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQorICAgICAgICBy
ZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXMnICUgKGV2ZW50LmV2ZW50X25hbWUsICcgJy5qb2luKHBh
aXJzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMoc2VsZiwgZG9t
YWluLCBldmVudCk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsnKQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFt
ZXRlcnM6CisgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQorICAgICAgICAgICAgdmFyX25h
bWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHNhZmVfdmFyX25hbWUg
PSAnKColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgdmFyX25h
bWUKKyAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gT2JqQ0dlbmVyYXRvci5vYmpjX3By
b3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgc2Fm
ZV92YXJfbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lcyhBU0NJSUxp
dGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMpJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBwYXJhbXNPYmpl
Y3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMi
KSwgcGFyYW1zT2JqZWN0KTsnKQorICAgICAgICByZXR1cm4gbGluZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU1NmY0MmU5ZDEzZjhm
N2ZmZDhjYjI0OWZmNzVlMWNhZGVhZDk1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVy
LnB5CkBAIC0wLDAgKzEsMjI3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJp
Z2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0
IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIG1vZGVscyBpbXBvcnQgT2Jq
ZWN0VHlwZSwgRW51bVR5cGUKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0
b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQorZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworCitsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitkZWYgYWRkX25ld2xpbmUobGluZXMpOgorICAg
IGlmIGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgICAgIHJldHVybgorICAgIGxpbmVz
LmFwcGVuZCgnJykKKworCitjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdl
bmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYg
b3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzLmgnICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAg
ICAgaGVhZGVycyA9IHNldChbCisgICAgICAgICAgICAnPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4nLAorICAgICAgICBdKQorCisgICAgICAgIGhlYWRlcl9hcmdzID0gewor
ICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZv
ciBoZWFkZXIgaW4gc29ydGVkKGhlYWRlcnMpXSksCisgICAgICAgIH0KKworICAgICAgICBkb21h
aW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgdHlwZV9kb21haW5zID0g
ZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIo
c2VsZi5tb2RlbCgpKSwgZG9tYWlucykKKyAgICAgICAgY29tbWFuZF9kb21haW5zID0gZmlsdGVy
KE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmls
dGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCisgICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0
ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJf
ZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCisKKyAgICAgICAgIyBGSVhNRTogPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzEzODIyMj4gV2ViIEluc3BlY3RvcjogUmVkdWNlIHVubmVjZXNzYXJ5
IGVudW1zL3R5cGVzIGdlbmVyYXRlZCBpbiBPYmpDIFByb3RvY29sIEludGVyZmFjZXMKKyAgICAg
ICAgIyBDdXJyZW50bHkgd2UgZ2VuZXJhdGUgZW51bXMvdHlwZXMgZm9yIGFsbCB0eXBlcyBpbiB0
aGUgdHlwZV9kb21haW5zLiBGb3IgdGhlIGJ1aWx0LWluCisgICAgICAgICMgSlNDIGRvbWFpbnMg
KERlYnVnZ2VyLCBSdW50aW1lKSB0aGlzIHByb2R1Y2VzIGV4dHJhIHVudXNlZCB0eXBlcy4gV2Ug
b25seSBuZWVkIHRvCisgICAgICAgICMgZ2VuZXJhdGUgdGhlc2UgdHlwZXMgaWYgdGhleSBhcmUg
cmVmZXJlbmNlZCBieSB0aGUgY29tbWFuZF9kb21haW5zIG9yIGV2ZW50X2RvbWFpbnMuCisKKyAg
ICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0
ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxh
dGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucywgdHlwZV9kb21haW5zKSkpKQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZW51
bXMsIHR5cGVfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihm
aWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpKSkpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYu
X2dlbmVyYXRlX2NvbW1hbmRfcHJvdG9jb2xzLCBjb21tYW5kX2RvbWFpbnMpKSkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVy
YXRlX2V2ZW50X2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRl
KE5vbmUpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0
aW9uczoKKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVj
dFR5cGUpKToKKyAgICAgICAgICAgICAgICBvYmpjX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNf
bmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKQorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW1zKHNlbGYsIGRvbWFpbik6CisgICAgICAg
IGxpbmVzID0gW10KKworICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KKyAg
ICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgorICAgICAg
ICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBk
ZWNsYXJhdGlvbikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBtZW1i
ZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255
bW91czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19l
bnVtX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKworICAgICAgICAj
IEFub255bW91cyBjb21tYW5kIGVudW1zLgorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4u
Y29tbWFuZHM6CisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJh
bWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAg
ICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21t
YW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255
bW91czoKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3Jf
cGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisKKyAg
ICAgICAgIyBBbm9ueW1vdXMgZXZlbnQgZW51bXMuCisgICAgICAgIGZvciBldmVudCBpbiBkb21h
aW4uZXZlbnRzOgorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJh
bWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAg
ICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVu
dC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3R5cGVzKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgIyBUeXBlIGludGVyZmFjZXMuCisgICAgICAgIGZvciBkZWNsYXJh
dGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV90eXBlX2ludGVyZmFjZShkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2Rl
Y2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgorICAgICAgICBvYmpjX2VudW1f
bmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX2Rl
Y2xhcmF0aW9uKGRlY2xhcmF0aW9uKQorICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfZW51
bShvYmpjX2VudW1fbmFtZSwgZGVjbGFyYXRpb24udHlwZS5lbnVtX3ZhbHVlcygpKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwgZGVj
bGFyYXRpb24sIG1lbWJlcik6CisgICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBt
ZW1iZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9lbnVtKG9iamNfZW51bV9uYW1l
LCBtZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1l
LCBwYXJhbWV0ZXIpOgorICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2Jq
Y19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29y
X2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQorICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVf
ZW51bShvYmpjX2VudW1fbmFtZSwgcGFyYW1ldGVyLnR5cGUuZW51bV92YWx1ZXMoKSkKKworICAg
IGRlZiBfZ2VuZXJhdGVfZW51bShzZWxmLCBlbnVtX25hbWUsIGVudW1fdmFsdWVzKToKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3R5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsICVzKSB7JyAlIGVudW1fbmFtZSkKKyAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51
bV92YWx1ZXM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyVzLCcgJSAoZW51bV9u
YW1lLCBHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZShzZWxmLCBkb21haW4sIGRl
Y2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBvYmpjX25hbWUgPSBPYmpD
R2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgOiAlcycgJSAob2JqY19uYW1lLCBPYmpDR2VuZXJh
dG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFTRSkpCisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBm
aWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBt
ZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAg
ICAgICBpZiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKGRvbWFpbiwgZGVjbGFy
YXRpb24sIHJlcXVpcmVkX21lbWJlcnMpKQorICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVk
X21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qIHJlcXVpcmVkICovICcgKyBz
ZWxmLl9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkoZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAg
ICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnLyogb3B0aW9uYWwgKi8gJyArIHNlbGYuX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eShk
ZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfaW5pdF9tZXRo
b2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWly
ZWRfbWVtYmVycyk6CisgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAgZm9yIG1lbWJlciBpbiBy
ZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5v
YmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICAgICAgdmFy
X25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJl
ci5tZW1iZXJfbmFtZSkKKyAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlICh2
YXJfbmFtZSwgb2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIHBhaXJzWzBdID0gdWNmaXJz
dChwYWlyc1swXSkKKyAgICAgICAgcmV0dXJuICctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGglczsn
ICUgJyAnLmpvaW4ocGFpcnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eShz
ZWxmLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgYWNjZXNzb3JfdHlwZSA9IE9iakNH
ZW5lcmF0b3Iub2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXIobWVtYmVyKQorICAgICAgICBv
YmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9u
LCBtZW1iZXIpCisgICAgICAgIHJldHVybiAnQHByb3BlcnR5IChub25hdG9taWMsICVzKSAlczsn
ICUgKGFjY2Vzc29yX3R5cGUsIGpvaW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIE9iakNHZW5l
cmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKSkp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2NvbW1hbmRfcHJvdG9jb2xzKHNlbGYsIGRvbWFpbik6Cisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAg
ICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5IYW5kbGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bw
cm90b2NvbCAlcyA8TlNPYmplY3Q+JyAlIG9iamNfbmFtZSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnQHJlcXVpcmVkJykKKyAgICAgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21t
YW5kczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2luZ2xl
X2NvbW1hbmRfcHJvdG9jb2woZG9tYWluLCBjb21tYW5kKSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYg
X2dlbmVyYXRlX3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6
CisgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAgcGFpcnMuYXBwZW5kKCdFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjaycpCisgICAgICAgIHBhaXJz
LmFwcGVuZCgnc3VjY2Vzc0NhbGxiYWNrOiglcylzdWNjZXNzQ2FsbGJhY2snICUgc2VsZi5fY2Fs
bGJhY2tfYmxvY2tfZm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSkKKyAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtX25h
bWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgn
JXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFy
YW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkp
CisgICAgICAgIHJldHVybiAnLSAodm9pZCklc1dpdGglczsnICUgKGNvbW1hbmQuY29tbWFuZF9u
YW1lLCAnICcuam9pbihwYWlycykpCisKKyAgICBkZWYgX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21t
YW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CisgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAg
Zm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAg
cGFpcnMuYXBwZW5kKGpvaW5fdHlwZV9hbmRfbmFtZShPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9m
b3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgcmV0dXJuICd2b2lkKF4pKCVzKScgJSAnLCAn
LmpvaW4ocGFpcnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMoc2VsZiwg
ZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBpZiBkb21haW4uZXZlbnRzOgor
ICAgICAgICAgICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNoZXInICUgKE9i
akNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSAlcyA6IE5TT2JqZWN0JyAlIG9iamNfbmFtZSkKKyAg
ICAgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNlKGRvbWFpbiwg
ZXZlbnQpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVy
ZmFjZShzZWxmLCBkb21haW4sIGV2ZW50KToKKyAgICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXM7JyAlIGV2ZW50LmV2ZW50
X25hbWUKKyAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFy
YW1fbmFtZSwgT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgZXZlbnQu
ZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCisgICAgICAgIHBhaXJzWzBdID0g
dWNmaXJzdChwYWlyc1swXSkKKyAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAo
ZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRl
cm5hbF9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTAx
YWQzMjQyYmRhNWEzYWNhMGUyNmJjNzg2ZDQ0YmEwMjE0MDAyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19pbnRlcm5hbF9oZWFkZXIucHkKQEAgLTAsMCArMSw3NSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJv
bSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSBvYmpjX2dlbmVyYXRv
cl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRl
cworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBPYmpDSW50
ZXJuYWxIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYs
IG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiAnJXNJbnRlcm5hbC5oJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVG
SVgKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBz
ZXQoWworICAgICAgICAgICAgJyIlcy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAor
ICAgICAgICAgICAgJyJSV0lQcm90b2NvbEpTT05PYmplY3RJbnRlcm5hbC5oIicsCisgICAgICAg
ICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPicsCisgICAgICAgICAgICAn
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPicsCisgICAg
ICAgIF0pCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaW5jbHVkZXMn
OiAnXG4nLmpvaW4oWycjaW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVh
ZGVycyldKSwKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoKQorICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iu
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVs
KCkpLCBkb21haW5zKQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5HZW5lcmljSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2lu
KGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRl
X2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkdlbmVyaWNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25z
KQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNl
cyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGlmIGRvbWFpbi5l
dmVudHM6CisgICAgICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2ZW50RGlzcGF0Y2hl
cicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzIChQcml2YXRlKScgJSBvYmpjX25h
bWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjVhNTI3YWMzNzAwNTQwNmVmMmYzZTdmZDI4OTllNzEwY2RiMTcwOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAs
MCArMSwxNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlCitm
cm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIG9iamNfZ2VuZXJh
dG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxh
dGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2RlZiBhZGRfbmV3
bGluZShsaW5lcyk6CisgICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9PSAnJzoKKyAgICAgICAg
cmV0dXJuCisgICAgbGluZXMuYXBwZW5kKCcnKQorCisKK2NsYXNzIE9iakNQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2Vs
Zik6CisgICAgICAgIHJldHVybiAnJXNUeXBlcy5tbScgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJF
RklYCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVy
KHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisg
ICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMg
PSBbCisgICAgICAgICAgICAnIiVzRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNHZW5l
cmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPicsCisgICAgICAgICAgICAnPHd0Zi9Bc3NlcnRpb25zLmg+JywKKyAgICAgICAg
ICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAorICAgICAgICBdCisKKyAgICAgICAgaGVhZGVyX2Fy
Z3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzSW50ZXJuYWwuaCInICUg
T2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRl
cyc6ICdcbicuam9pbihbJyNpbXBvcnQgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25k
YXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYu
Z2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpv
aW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMoc2Vs
ZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZGVjbGFyYXRpb24g
aW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2Uo
ZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgICAgIGFkZF9uZXds
aW5lKGxpbmVzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX3R5
cGVfaW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbihz
ZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBs
aW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlcycgJSBPYmpDR2VuZXJhdG9yLm9iamNfbmFt
ZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKSkKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9
IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBkZWNsYXJhdGlv
bi50eXBlX21lbWJlcnMpCisgICAgICAgIGlmIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoZG9tYWluLCBkZWNsYXJhdGlvbiwg
cmVxdWlyZWRfbWVtYmVycykpCisgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NldHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFy
YXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZ2V0dGVyX2Zvcl9tZW1iZXIoZG9tYWluLCBk
ZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhzZWxmLCBk
b21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKToKKyAgICAgICAgcGFpcnMgPSBb
XQorICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBv
YmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9u
LCBtZW1iZXIpCisgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmll
cl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQorICAgICAgICAgICAgcGFp
cnMuYXBwZW5kKCclczooJXMpJXMnICUgKHZhcl9uYW1lLCBvYmpjX3R5cGUsIHZhcl9uYW1lKSkK
KyAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQorICAgICAgICAjIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4MjIxPiBXZWIgSW5zcGVjdG9yOiBPYmpDIFByb3RvY29s
IEludGVyZmFjZXMgc2hvdWxkIHRocm93IGV4Y2VwdGlvbnMgZm9yIG5pbCBhcmd1bWVudHMKKyAg
ICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aCVzOycgJSAnICcuam9pbihwYWlycykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICByZXR1cm4gbmlsOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAg
Zm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgdmFyX25hbWUgPSBP
YmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJf
bmFtZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYuJXMgPSAlczsnICUgKHZh
cl9uYW1lLCB2YXJfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykK
KyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc2V0
dGVyX2Zvcl9tZW1iZXIoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAg
ICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJh
dGlvbiwgbWVtYmVyKQorICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmll
cl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQorICAgICAgICBzZXR0ZXJf
bWV0aG9kID0gT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJlcihkZWNs
YXJhdGlvbiwgbWVtYmVyKQorICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpDR2Vu
ZXJhdG9yLm9iamNfdG9fcHJvdG9jb2xfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9u
LCBtZW1iZXIsIHZhcl9uYW1lKQorICAgICAgICAjIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTM4MjIxPiBXZWIgSW5zcGVjdG9yOiBPYmpDIFByb3RvY29sIEludGVyZmFjZXMgc2hvdWxk
IHRocm93IGV4Y2VwdGlvbnMgZm9yIG5pbCBhcmd1bWVudHMKKyAgICAgICAgbGluZXMgPSBbXQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKHZvaWQpc2V0JXM6KCVzKSVzJyAlICh1Y2ZpcnN0KHZh
cl9uYW1lKSwgb2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFtzdXBlciAlczolcyBmb3JLZXk6QCIlcyJdOycg
JSAoc2V0dGVyX21ldGhvZCwgY29udmVyc2lvbl9leHByZXNzaW9uLCBtZW1iZXIubWVtYmVyX25h
bWUpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJlcihzZWxmLCBkb21h
aW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJh
dG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgIHZh
cl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1i
ZXIubWVtYmVyX25hbWUpCisgICAgICAgIGdldHRlcl9tZXRob2QgPSBPYmpDR2VuZXJhdG9yLm9i
amNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAg
IGJhc2ljX2V4cHJlc3Npb24gPSAnW3N1cGVyICVzOkAiJXMiXScgJSAoZ2V0dGVyX21ldGhvZCwg
bWVtYmVyLm1lbWJlcl9uYW1lKQorICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpD
R2VuZXJhdG9yLnByb3RvY29sX3RvX29iamNfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0
aW9uLCBtZW1iZXIsIGJhc2ljX2V4cHJlc3Npb24pCisgICAgICAgIGxpbmVzID0gW10KKyAgICAg
ICAgbGluZXMuYXBwZW5kKCctICglcyklcycgJSAob2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiAl
czsnICUgY29udmVyc2lvbl9leHByZXNzaW9uKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQor
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2Mu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmplY3RpdmVfYy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMGE4MDM5
MjZhZDVhYWUxZDRlODZlYzMzYjZiMzBjNmEwOTFhZDU0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfYy5weQorKysgL2Rldi9udWxsCkBA
IC0xLDQ5NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChj
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi1mcm9tIGdlbmVyYXRvciBp
bXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlw
ZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29y
a3MKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotZGVmIGpvaW5fdHlw
ZV9hbmRfbmFtZSh0eXBlX3N0ciwgbmFtZV9zdHIpOgotICAgIGlmIHR5cGVfc3RyLmVuZHN3aXRo
KCcqJyk6Ci0gICAgICAgIHJldHVybiB0eXBlX3N0ciArIG5hbWVfc3RyCi0gICAgcmV0dXJuIHR5
cGVfc3RyICsgJyAnICsgbmFtZV9zdHIKLQotCi1kZWYgc3RyaXBfYmxvY2tfY29tbWVudF9tYXJr
ZXJzKHN0cik6Ci0gICAgcmV0dXJuIHN0ci5yZXBsYWNlKCcvKicsICcnKS5yZXBsYWNlKCcqLycs
ICcnKQotCi0KLWRlZiByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKHN0ciwgcG9zc2libGVfZHVw
bGljYXRlKToKLSAgICByZXR1cm4gc3RyLnJlcGxhY2UocG9zc2libGVfZHVwbGljYXRlICsgcG9z
c2libGVfZHVwbGljYXRlLCBwb3NzaWJsZV9kdXBsaWNhdGUpCi0KLQotX09CSkNfSURFTlRJRklF
Ul9SRU5BTUVfTUFQID0gewotICAgICd0aGlzJzogJ3RoaXNPYmplY3QnLCAgIyBEZWJ1Z2dlci5D
YWxsRnJhbWUudGhpcwotICAgICdkZXNjcmlwdGlvbic6ICdzdHJpbmdSZXByZXNlbnRhdGlvbics
ICAjIFJ1bnRpbWUuUmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uCi0gICAgJ2lkJzogJ2lkZW50aWZp
ZXInLCAgIyBQYWdlLkZyYW1lLmlkLCBSdW50aW1lLkV4ZWN1dGlvbkNvbnRleHREZXNjcmlwdGlv
bi5pZCwgRGVidWdnZXIuQnJlYWtwb2ludEFjdGlvbi5pZAotfQotCi1fT0JKQ19JREVOVElGSUVS
X1JFVkVSU0VfUkVOQU1FX01BUCA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGluIF9PQkpDX0lERU5U
SUZJRVJfUkVOQU1FX01BUC5pdGVyaXRlbXMoKSkKLQotCi1jbGFzcyBPYmpDVHlwZUNhdGVnb3J5
OgotICAgIFNpbXBsZSA9IDAKLSAgICBTdHJpbmcgPSAxCi0gICAgT2JqZWN0ID0gMgotICAgIEFy
cmF5ID0gMwotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjYXRlZ29yeV9mb3JfdHlwZShf
dHlwZSk6Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6Ci0g
ICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdzdHJpbmcnOgotICAgICAgICAgICAg
ICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZwotICAgICAgICAgICAgaWYgIF90eXBl
LnJhd19uYW1lKCkgaW4gWydvYmplY3QnLCAnYW55J106Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgp
IGlzICdhcnJheSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuQXJy
YXkKLSAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZQotICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9i
akNUeXBlQ2F0ZWdvcnkuT2JqZWN0Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJh
eVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LkFycmF5Ci0gICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgotICAgICAgICAgICAgcmV0
dXJuIE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBl
KQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAg
IHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKF90eXBlLnByaW1pdGl2
ZV90eXBlKQotICAgICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIE9iakNHZW5lcmF0b3I6Ci0g
ICAgT0JKQ19QUkVGSVggPSAnUldJUHJvdG9jb2wnCi0gICAgT0JKQ19KU09OX09CSkVDVF9CQVNF
ID0gJyVzSlNPTk9iamVjdCcgJSBPQkpDX1BSRUZJWAotCi0gICAgIyBBZGp1c3QgaWRlbnRpZmll
ciBuYW1lcyB0aGF0IGNvbGxpZGUgd2l0aCBPYmpDIGtleXdvcmRzLgotCi0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBpZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihuYW1lKToKLSAgICAg
ICAgcmV0dXJuIF9PQkpDX0lERU5USUZJRVJfUkVOQU1FX01BUC5nZXQobmFtZSwgbmFtZSkKLQot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19pZGVudGlmaWVyX3RvX2lkZW50aWZpZXIo
bmFtZSk6Ci0gICAgICAgIHJldHVybiBfT0JKQ19JREVOVElGSUVSX1JFVkVSU0VfUkVOQU1FX01B
UC5nZXQobmFtZSwgbmFtZSkKLQotICAgICMgR2VuZXJhdGUgT2JqQyB0eXBlcywgY29tbWFuZCBo
YW5kbGVycywgYW5kIGV2ZW50IGRpc3BhdGNoZXJzIGZvciBhIHN1YnNldCBvZiBkb21haW5zLgot
Ci0gICAgRE9NQUlOU19UT19HRU5FUkFURSA9IFsnQ1NTJywgJ0RPTScsICdET01TdG9yYWdlJywg
J05ldHdvcmsnLCAnUGFnZSddCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKG1vZGVsKToKLSAgICAgICAgZGVmIHNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fdHlwZXMoZG9tYWluKToKLSAgICAgICAgICAgIGlmIG1vZGVsLmZyYW1l
d29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAg
ICAgICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJTlNfVE9fR0VORVJB
VEUpCi0gICAgICAgICAgICB3aGl0ZWxpc3QudXBkYXRlKHNldChbJ0NvbnNvbGUnLCAnRGVidWdn
ZXInLCAnUnVudGltZSddKSkKLSAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUg
aW4gd2hpdGVsaXN0Ci0gICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVz
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29t
bWFuZF9oYW5kbGVyX2ZpbHRlcihtb2RlbCk6Ci0gICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVf
ZG9tYWluX2NvbW1hbmRfaGFuZGxlcihkb21haW4pOgotICAgICAgICAgICAgaWYgbW9kZWwuZnJh
bWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQot
ICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5F
UkFURSkKLSAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0
Ci0gICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcgot
Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50
X2Rpc3BhdGNoZXJfZmlsdGVyKG1vZGVsKToKLSAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9k
b21haW5fZXZlbnRfZGlzcGF0Y2hlcihkb21haW4pOgotICAgICAgICAgICAgaWYgbW9kZWwuZnJh
bWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQot
ICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5F
UkFURSkKLSAgICAgICAgICAgIHdoaXRlbGlzdC5hZGQoJ0NvbnNvbGUnKQotICAgICAgICAgICAg
cmV0dXJuIGRvbWFpbi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QKLSAgICAgICAgcmV0dXJuIHNo
b3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcgotCi0gICAgIyBPYmpDIGVudW0g
YW5kIHR5cGUgbmFtZXMuCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfbmFtZV9m
b3JfdHlwZSh0eXBlKToKLSAgICAgICAgbmFtZSA9IHR5cGUucXVhbGlmaWVkX25hbWUoKS5yZXBs
YWNlKCcuJywgJycpCi0gICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5h
bWUsIHR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuICclcyVz
JyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQotCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24o
ZGVjbGFyYXRpb24pOgotICAgICAgICBkb21haW5fbmFtZSA9IGRlY2xhcmF0aW9uLnR5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZQotICAgICAgICBuYW1lID0gJyVzJXMnICUgKGRvbWFpbl9u
YW1lLCBkZWNsYXJhdGlvbi50eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIG5hbWUgPSByZW1vdmVf
ZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUsIGRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gJyVz
JXMnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUpCi0KLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIG9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0gbWVtYmVyLnR5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZQotICAgICAgICBuYW1lID0gJyVzJXMlcycgJSAoZG9tYWlu
X25hbWUsIGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSwgdWNmaXJzdChtZW1iZXIubWVtYmVy
X25hbWUpKQotICAgICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBk
b21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLCBuYW1lKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2VudW1fbmFt
ZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9u
YW1lLCBwYXJhbWV0ZXIpOgotICAgICAgICBkb21haW5fbmFtZSA9IGRvbWFpbi5kb21haW5fbmFt
ZQotICAgICAgICBuYW1lID0gJyVzJXMlcycgJSAoZG9tYWluX25hbWUsIHVjZmlyc3QoZXZlbnRf
b3JfY29tbWFuZF9uYW1lKSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAg
ICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBkb21haW5fbmFtZSkK
LSAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1l
KQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fu
b255bW91c19lbnVtKF90eXBlKToKLSAgICAgICAgZG9tYWluX25hbWUgPSBfdHlwZS50eXBlX2Rv
bWFpbigpLmRvbWFpbl9uYW1lCi0gICAgICAgIG5hbWUgPSBfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
LnJlcGxhY2UoJy4nLCAnJykKLSAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9z
dHIobmFtZSwgZG9tYWluX25hbWUpCi0gICAgICAgIHJldHVybiAnJXMlcycgJSAoT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKLQotICAgICMgTWlzY2VsbGFuZW91cyBuYW1lIGhhbmRs
aW5nLgotICAgIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdmFyaWFibGVfbmFtZV9wcmVm
aXhfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICBkb21haW5fbmFtZSA9IGRvbWFpbi5kb21h
aW5fbmFtZQotICAgICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdET00nKToKLSAgICAg
ICAgICAgIHJldHVybiAnZG9tJyArIGRvbWFpbl9uYW1lWzM6XQotICAgICAgICBpZiBkb21haW5f
bmFtZS5zdGFydHN3aXRoKCdDU1MnKToKLSAgICAgICAgICAgIHJldHVybiAnY3NzJyArIGRvbWFp
bl9uYW1lWzM6XQotICAgICAgICByZXR1cm4gZG9tYWluX25hbWVbOjFdLmxvd2VyKCkgKyBkb21h
aW5fbmFtZVsxOl0KLQotICAgICMgVHlwZSBiYXNpY3MuCi0KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIG9iamNfYWNjZXNzb3JfdHlwZV9mb3JfcmF3X25hbWUocmF3X25hbWUpOgotICAgICAg
ICBpZiByYXdfbmFtZSBpbiBbJ3N0cmluZycsICdhcnJheSddOgotICAgICAgICAgICAgcmV0dXJu
ICdjb3B5JwotICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJywgJ2Jv
b2xlYW4nXToKLSAgICAgICAgICAgIHJldHVybiAnYXNzaWduJwotICAgICAgICBpZiByYXdfbmFt
ZSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgIHJldHVybiAncmV0YWluJwotICAg
ICAgICByZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX3R5cGVf
Zm9yX3Jhd19uYW1lKHJhd19uYW1lKToKLSAgICAgICAgaWYgcmF3X25hbWUgaXMgJ3N0cmluZyc6
Ci0gICAgICAgICAgICByZXR1cm4gJ05TU3RyaW5nIConCi0gICAgICAgIGlmIHJhd19uYW1lIGlz
ICdhcnJheSc6Ci0gICAgICAgICAgICByZXR1cm4gJ05TQXJyYXkgKicKLSAgICAgICAgaWYgcmF3
X25hbWUgaXMgJ2ludGVnZXInOgotICAgICAgICAgICAgcmV0dXJuICdOU0ludGVnZXInCi0gICAg
ICAgIGlmIHJhd19uYW1lIGlzICdudW1iZXInOgotICAgICAgICAgICAgcmV0dXJuICdkb3VibGUn
Ci0gICAgICAgIGlmIHJhd19uYW1lIGlzICdib29sZWFuJzoKLSAgICAgICAgICAgIHJldHVybiAn
Qk9PTCcKLSAgICAgICAgaWYgcmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAg
ICAgICByZXR1cm4gJyVzIConICUgT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNUX0JBU0UK
LSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19j
bGFzc19mb3JfcmF3X25hbWUocmF3X25hbWUpOgotICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3Ry
aW5nJzoKLSAgICAgICAgICAgIHJldHVybiAnTlNTdHJpbmcnCi0gICAgICAgIGlmIHJhd19uYW1l
IGlzICdhcnJheSc6Ci0gICAgICAgICAgICByZXR1cm4gJ05TQXJyYXknCi0gICAgICAgIGlmIHJh
d19uYW1lIGluIFsnaW50ZWdlcicsICdudW1iZXInLCAnYm9vbGVhbiddOgotICAgICAgICAgICAg
cmV0dXJuICdOU051bWJlcicKLSAgICAgICAgaWYgcmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0
J106Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNUX0JB
U0UKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMgRklYTUU6IENhbiB0aGVzZSBwcm90b2Nv
bF90eXBlIGZ1bmN0aW9ucyBiZSByZW1vdmVkIGluIGZhdm9yIG9mIEMrKyBnZW5lcmF0b3JzIGZ1
bmN0aW9ucz8KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcHJvdG9jb2xfdHlwZV9mb3Jf
cmF3X25hbWUocmF3X25hbWUpOgotICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3RyaW5nJzoKLSAg
ICAgICAgICAgIHJldHVybiAnU3RyaW5nJwotICAgICAgICBpZiByYXdfbmFtZSBpcyAnaW50ZWdl
cic6Ci0gICAgICAgICAgICByZXR1cm4gJ2ludCcKLSAgICAgICAgaWYgcmF3X25hbWUgaXMgJ251
bWJlcic6Ci0gICAgICAgICAgICByZXR1cm4gJ2RvdWJsZScKLSAgICAgICAgaWYgcmF3X25hbWUg
aXMgJ2Jvb2xlYW4nOgotICAgICAgICAgICAgcmV0dXJuICdib29sJwotICAgICAgICBpZiByYXdf
bmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9y
T2JqZWN0JwotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiBwcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYgKGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRf
dHlwZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgotICAg
ICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfcmF3X25hbWUo
X3R5cGUucmF3X25hbWUoKSkKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KSk6Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90
eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAg
ICAgIHN1Yl90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBl
LmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8JXM+JyAlIHN1Yl90eXBlCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIG9iamNfY2xhc3NfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiAo
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5
cGUuYWxpYXNlZF90eXBlCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVU
eXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl9y
YXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
RW51bVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3Nf
Zm9yX3Jhd19uYW1lKF90eXBlLnByaW1pdGl2ZV90eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIGlm
IChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gT2Jq
Q0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIChpc2luc3Rh
bmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHN1Yl90eXBlID0gc3RyaXBfYmxv
Y2tfY29tbWVudF9tYXJrZXJzKE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShfdHlw
ZS5lbGVtZW50X3R5cGUpKQotICAgICAgICAgICAgcmV0dXJuICdOU0FycmF5Lyo8JXM+Ki8nICUg
c3ViX3R5cGUKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXIobWVtYmVyKToKLSAgICAgICAgcmV0dXJu
IE9iakNHZW5lcmF0b3Iub2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXJfaW50ZXJuYWwobWVt
YmVyLnR5cGUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfYWNjZXNzb3JfdHlw
ZV9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBlKToKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5
cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlw
ZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgotICAgICAg
ICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9yYXdfbmFt
ZShfdHlwZS5yYXdfbmFtZSgpKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnYXNzaWduJwotICAgICAgICBpZiAoaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdyZXRhaW4nCi0gICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVy
biAnY29weScKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgb2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIHJl
dHVybiBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKG1lbWJlci50
eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBv
YmpjX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbChfdHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcik6
Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgotICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5
cGUsIFByaW1pdGl2ZVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9i
amNfdHlwZV9mb3JfcmF3X25hbWUoX3R5cGUucmF3X25hbWUoKSkKLSAgICAgICAgaWYgKGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6Ci0gICAgICAgICAgICBpZiAoX3R5cGUuaXNfYW5vbnlt
b3VzKToKLSAgICAgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFt
ZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAg
ICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91
c19lbnVtKF90eXBlKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkp
OgotICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90eXBlKF90
eXBlKSArICcgKicKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgot
ICAgICAgICAgICAgc3ViX3R5cGUgPSBzdHJpcF9ibG9ja19jb21tZW50X21hcmtlcnMoT2JqQ0dl
bmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkpCi0gICAgICAg
ICAgICByZXR1cm4gJ05TQXJyYXkvKjwlcz4qLyAqJyAlIHN1Yl90eXBlCi0gICAgICAgIHJldHVy
biBOb25lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfdHlwZV9mb3JfcGFyYW0o
ZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlciwgcmVzcGVjdF9vcHRpb25h
bD1UcnVlKToKLSAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9y
X3BhcmFtX2ludGVybmFsKHBhcmFtZXRlci50eXBlLCBkb21haW4sIGV2ZW50X29yX2NvbW1hbmRf
bmFtZSwgcGFyYW1ldGVyKQotICAgICAgICBpZiByZXNwZWN0X29wdGlvbmFsIGFuZCBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICBpZiBvYmpjX3R5cGUuZW5kc3dpdGgoJyonKToK
LSAgICAgICAgICAgICAgICByZXR1cm4gb2JqY190eXBlICsgJyonCi0gICAgICAgICAgICByZXR1
cm4gb2JqY190eXBlICsgJyAqJwotICAgICAgICByZXR1cm4gb2JqY190eXBlCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIG9iamNfdHlwZV9mb3JfcGFyYW1faW50ZXJuYWwoX3R5cGUsIGRv
bWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgotICAgICAgICBpZiAoaXNp
bnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUu
YWxpYXNlZF90eXBlCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KSk6Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3Jhd19u
YW1lKF90eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSkpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAg
ICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51
bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKLSAg
ICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5v
bnltb3VzX2VudW0oX3R5cGUpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5
cGUoX3R5cGUpICsgJyAqJwotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBl
KSk6Ci0gICAgICAgICAgICBzdWJfdHlwZSA9IHN0cmlwX2Jsb2NrX2NvbW1lbnRfbWFya2VycyhP
YmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKSkKLSAg
ICAgICAgICAgIHJldHVybiAnTlNBcnJheS8qPCVzPiovIConICUgc3ViX3R5cGUKLSAgICAgICAg
cmV0dXJuIE5vbmUKLQotICAgICMgT2JqQyA8LT4gUHJvdG9jb2wgY29udmVyc2lvbiBmb3IgY29t
bWFuZHMgYW5kIGV2ZW50cy4KLSAgICAjICAgLSBjb252ZXJ0IGEgY29tbWFuZCBjYWxsIHBhcmFt
ZXRlciByZWNlaXZlZCBmcm9tIFByb3RvY29sIHRvIE9iakMgZm9yIGhhbmRsZXIKLSAgICAjICAg
LSBjb252ZXJ0IGEgY29tbWFuZCByZXR1cm4gcGFyYW1ldGVyIGluIGNhbGxiYWNrIGJsb2NrIGZy
b20gT2JqQyB0byBQcm90b2NvbCB0byBzZW5kCi0gICAgIyAgIC0gY29udmVydCBhbiBldmVudCBw
YXJhbWV0ZXIgZnJvbSBPYmpDIEFQSSB0byBQcm90b2NvbCB0byBzZW5kCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIG9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25fZm9yX3Zhcmlh
YmxlKHZhcl90eXBlLCB2YXJfbmFtZSk6Ci0gICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5cGVDYXRl
Z29yeS5jYXRlZ29yeV9mb3JfdHlwZSh2YXJfdHlwZSkKLSAgICAgICAgaWYgY2F0ZWdvcnkgaW4g
W09iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZ106Ci0gICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKHZhcl90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICd0b1Byb3RvY29sU3RyaW5nKCVzKScgJSB2YXJfbmFtZQotICAgICAgICAgICAg
cmV0dXJuIHZhcl9uYW1lCi0gICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnku
T2JqZWN0OgotICAgICAgICAgICAgcmV0dXJuICdbJXMgdG9JbnNwZWN0b3JPYmplY3RdJyAlIHZh
cl9uYW1lCi0gICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXk6Ci0g
ICAgICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zv
cl90eXBlKHZhcl90eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgIG9iamNfY2xhc3MgPSBP
YmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUodmFyX3R5cGUuZWxlbWVudF90eXBlKQot
ICAgICAgICAgICAgaWYgcHJvdG9jb2xfdHlwZSBpcyAnSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JTdHJpbmdBcnJh
eUFycmF5KCVzKScgJSB2YXJfbmFtZQotICAgICAgICAgICAgaWYgcHJvdG9jb2xfdHlwZSBpcyAn
U3RyaW5nJyBhbmQgb2JqY19jbGFzcyBpcyAnTlNTdHJpbmcnOgotICAgICAgICAgICAgICAgIHJl
dHVybiAnaW5zcGVjdG9yU3RyaW5nQXJyYXkoJXMpJyAlIHZhcl9uYW1lCi0gICAgICAgICAgICBp
ZiBwcm90b2NvbF90eXBlIGlzICdpbnQnIGFuZCBvYmpjX2NsYXNzIGlzICdOU051bWJlcic6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JJbnRlZ2VyQXJyYXkoJXMpJyAlIHZhcl9u
YW1lCi0gICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdkb3VibGUnIGFuZCBvYmpjX2Ns
YXNzIGlzICdOU051bWJlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JEb3Vi
bGVBcnJheSglcyknICUgdmFyX25hbWUKLSAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yT2Jq
ZWN0QXJyYXkoJXMpJyAlIHZhcl9uYW1lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX21lbWJlcihuYW1lLCBkZWNsYXJhdGlv
biwgbWVtYmVyKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUp
OgotICAgICAgICAgICAgaWYgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAg
ICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iu
b2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihkZWNsYXJhdGlvbiwgbWVt
YmVyKSwgbmFtZSkKLSAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPigl
cyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51
bShtZW1iZXIudHlwZSksIG5hbWUpCi0gICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNf
cHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKG1lbWJlci50eXBlLCBuYW1l
KQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9leHBy
ZXNzaW9uX2Zvcl9wYXJhbWV0ZXIobmFtZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUs
IHBhcmFtZXRlcik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKToKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2Vu
ZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWlu
LCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIG5hbWUpCi0gICAgICAgICAgICBy
ZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJhdG9yLm9iamNf
ZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0ocGFyYW1ldGVyLnR5cGUpLCBuYW1lKQot
ICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNz
aW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgbmFtZSkKLQotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgb2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUo
dmFyX3R5cGUsIHZhcl9uYW1lKToKLSAgICAgICAgY2F0ZWdvcnkgPSBPYmpDVHlwZUNhdGVnb3J5
LmNhdGVnb3J5X2Zvcl90eXBlKHZhcl90eXBlKQotICAgICAgICBpZiBjYXRlZ29yeSBpbiBbT2Jq
Q1R5cGVDYXRlZ29yeS5TaW1wbGUsIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nXToKLSAgICAgICAg
ICAgIHJldHVybiB2YXJfbmFtZQotICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVn
b3J5Lk9iamVjdDoKLSAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9iamNf
Y2xhc3NfZm9yX3R5cGUodmFyX3R5cGUpCi0gICAgICAgICAgICByZXR1cm4gJ1tbWyVzIGFsbG9j
XSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDolc10gYXV0b3JlbGVhc2VdJyAlIChvYmpjX2NsYXNz
LCB2YXJfbmFtZSkKLSAgICAgICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5BcnJh
eToKLSAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9y
X3R5cGUodmFyX3R5cGUuZWxlbWVudF90eXBlKQotICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBp
cyAnTlNTdHJpbmcnOgotICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY1N0cmluZ0FycmF5KCVz
KScgJSB2YXJfbmFtZQotICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNOdW1iZXInOiAg
IyBGSVhNRTogSW50ZWdlciBvciBEb3VibGU/Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdvYmpj
SW50ZWdlckFycmF5KCVzKScgJSB2YXJfbmFtZQotICAgICAgICAgICAgcmV0dXJuICdvYmpjQXJy
YXk8JXM+KCVzKScgJSAob2JqY19jbGFzcywgdmFyX25hbWUpCi0KLSAgICAjIE9iakMgPC0+IEpT
T04gb2JqZWN0IGNvbnZlcnNpb24gZm9yIHR5cGVzIGdldHRlcnMvc2V0dGVycy4KLSAgICAjICAg
LSBjb252ZXJ0IGEgbWVtYmVyIHNldHRlciBmcm9tIE9iakMgQVBJIHRvIEpTT04gb2JqZWN0IHNl
dHRlcgotICAgICMgICAtIGNvbnZlcnQgYSBtZW1iZXIgZ2V0dGVyIGZyb20gSlNPTiBvYmplY3Qg
dG8gT2JqQyBBUEkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY190b19wcm90b2Nv
bF9leHByZXNzaW9uX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciwgc3ViX2V4cHJlc3Np
b24pOgotICAgICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5
cGUobWVtYmVyLnR5cGUpCi0gICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpDVHlwZUNhdGVnb3J5
LlNpbXBsZSwgT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmddOgotICAgICAgICAgICAgaWYgaXNpbnN0
YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIHJldHVybiAndG9Q
cm90b2NvbFN0cmluZyglcyknICUgc3ViX2V4cHJlc3Npb24KLSAgICAgICAgICAgIHJldHVybiBz
dWJfZXhwcmVzc2lvbgotICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5Lk9i
amVjdDoKLSAgICAgICAgICAgIHJldHVybiBzdWJfZXhwcmVzc2lvbgotICAgICAgICBpZiBjYXRl
Z29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgotICAgICAgICAgICAgb2JqY19jbGFzcyA9
IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShtZW1iZXIudHlwZS5lbGVtZW50X3R5
cGUpCi0gICAgICAgICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU1N0cmluZyc6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdpbnNwZWN0b3JTdHJpbmdBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24K
LSAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKLSAgICAgICAgICAgICAg
ICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1l
bWJlci50eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBl
IGlzICdkb3VibGUnOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvckRvdWJs
ZUFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgotICAgICAgICAgICAgICAgIHJldHVybiAnaW5z
cGVjdG9ySW50ZWdlckFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgotICAgICAgICAgICAgcmV0
dXJuICdpbnNwZWN0b3JPYmplY3RBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KLQotICAgIEBz
dGF0aWNtZXRob2QKLSAgICBkZWYgcHJvdG9jb2xfdG9fb2JqY19leHByZXNzaW9uX2Zvcl9tZW1i
ZXIoZGVjbGFyYXRpb24sIG1lbWJlciwgc3ViX2V4cHJlc3Npb24pOgotICAgICAgICBjYXRlZ29y
eSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUobWVtYmVyLnR5cGUpCi0gICAg
ICAgIGlmIGNhdGVnb3J5IGluIFtPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZSwgT2JqQ1R5cGVDYXRl
Z29yeS5TdHJpbmddOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51
bVR5cGUpOgotICAgICAgICAgICAgICAgIGlmIG1lbWJlci50eXBlLmlzX2Fub255bW91czoKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAo
T2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRl
Y2xhcmF0aW9uLCBtZW1iZXIpLCBzdWJfZXhwcmVzc2lvbikKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJhdG9yLm9iamNfZW51
bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0obWVtYmVyLnR5cGUpLCBzdWJfZXhwcmVzc2lv
bikKLSAgICAgICAgICAgIHJldHVybiBzdWJfZXhwcmVzc2lvbgotICAgICAgICBpZiBjYXRlZ29y
eSBpcyBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdDoKLSAgICAgICAgICAgIG9iamNfdHlwZSA9IE9i
akNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKLSAg
ICAgICAgICAgIHJldHVybiAnKCVzKSVzJyAlIChvYmpjX3R5cGUsIHN1Yl9leHByZXNzaW9uKQot
ICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgotICAgICAgICAg
ICAgcHJvdG9jb2xfdHlwZSA9IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZSht
ZW1iZXIudHlwZS5lbGVtZW50X3R5cGUpCi0gICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dl
bmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKLSAg
ICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TU3RyaW5nJzoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ29iamNTdHJpbmdBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KLSAgICAgICAgICAg
IGlmIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKLSAgICAgICAgICAgICAgICBwcm90b2NvbF90
eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1lbWJlci50eXBlLmVs
ZW1lbnRfdHlwZSkKLSAgICAgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdkb3VibGUn
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNEb3VibGVBcnJheSglcyknICUgc3Vi
X2V4cHJlc3Npb24KLSAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNJbnRlZ2VyQXJyYXkoJXMp
JyAlIHN1Yl9leHByZXNzaW9uCi0gICAgICAgICAgICByZXR1cm4gJ29iamNBcnJheTwlcz4oJXMp
JyAlIChvYmpjX2NsYXNzLCBzdWJfZXhwcmVzc2lvbikKLQotICAgICMgSlNPTiBvYmplY3Qgc2V0
dGVyL2dldHRlciBzZWxlY3RvcnMgZm9yIHR5cGVzLgotCi0gICAgQHN0YXRpY21ldGhvZAotICAg
IGRlZiBvYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKToK
LSAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19zZXR0ZXJfbWV0aG9kX2Zvcl9tZW1i
ZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIG9iamNfc2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyX2ludGVybmFs
KF90eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5
cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlw
ZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgotICAgICAg
ICAgICAgcmF3X25hbWUgPSBfdHlwZS5yYXdfbmFtZSgpCi0gICAgICAgICAgICBpZiByYXdfbmFt
ZSBpcyAnYm9vbGVhbic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRCb29sJwotICAgICAg
ICAgICAgaWYgcmF3X25hbWUgaXMgJ2ludGVnZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAn
c2V0SW50ZWdlcicKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdudW1iZXInOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnc2V0RG91YmxlJwotICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMg
J3N0cmluZyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRTdHJpbmcnCi0gICAgICAgICAg
ICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ3NldE9iamVjdCcKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdhcnJheSc6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICdzZXRJbnNwZWN0b3JBcnJheScKLSAgICAgICAgICAgIHJldHVy
biBOb25lCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAg
ICAgICAgcmV0dXJuICdzZXRTdHJpbmcnCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldE9iamVjdCcKLSAgICAgICAgaWYg
KGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdzZXRJ
bnNwZWN0b3JBcnJheScKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgb2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJl
cik6Ci0gICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZ2V0dGVyX21ldGhvZF9mb3Jf
bWVtYmVyX2ludGVybmFsKG1lbWJlci50eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKQotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2dldHRlcl9tZXRob2RfZm9yX21lbWJlcl9pbnRl
cm5hbChfdHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIGlmIChpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSkpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKLSAg
ICAgICAgICAgIHJhd19uYW1lID0gX3R5cGUucmF3X25hbWUoKQotICAgICAgICAgICAgaWYgcmF3
X25hbWUgaXMgJ2Jvb2xlYW4nOgotICAgICAgICAgICAgICAgIHJldHVybiAnYm9vbEZvcktleScK
LSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdpbnRlZ2VyJzoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ2ludGVnZXJGb3JLZXknCi0gICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnbnVtYmVy
JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2RvdWJsZUZvcktleScKLSAgICAgICAgICAgIGlm
IHJhd19uYW1lIGlzICdzdHJpbmcnOgotICAgICAgICAgICAgICAgIHJldHVybiAnc3RyaW5nRm9y
S2V5JwotICAgICAgICAgICAgaWYgcmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICdvYmplY3RGb3JLZXknCi0gICAgICAgICAgICBpZiByYXdfbmFt
ZSBpcyAnYXJyYXknOgotICAgICAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yQXJyYXlGb3JL
ZXknCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnc3RyaW5nRm9yS2V5JwotICAgICAg
ICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJu
ICdvYmplY3RGb3JLZXknCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUp
KToKLSAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yQXJyYXlGb3JLZXknCi0gICAgICAgIHJl
dHVybiBOb25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGJiZDBmZjU1NTBhOWVkMzI3ZDA2MmJlMWY0ODY5OThh
ZGZhOWZkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyAvZGV2L251bGwKQEAg
LTEsMTA4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0j
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1w
b3J0IHN0cmluZwotaW1wb3J0IHJlCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJv
bSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3b3Jr
cwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBPYmplY3Rp
dmVDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9y
Ll9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRf
ZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCcg
JSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCi0KLSAgICBkZWYgZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5l
cmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQo
c2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPicsCi0gICAgICAgICAgICAn
PHd0Zi9SZXRhaW5QdHIuaD4nLAotICAgICAgICBdCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7
Ci0gICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiByZS5zdWIoJ1xXKycsICdfJywgc2Vs
Zi5vdXRwdXRfZmlsZW5hbWUoKSksCi0gICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4o
WycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAotICAgICAgICAg
ICAgJ2ZvcndhcmREZWNsYXJhdGlvbnMnOiBzZWxmLl9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVj
bGFyYXRpb25zKCksCi0gICAgICAgIH0KLQotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5z
X3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyUHJlbHVkZSkuc3Vi
c3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1h
cChzZWxmLl9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRv
bWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYg
X2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnMoc2VsZik6Ci0gICAgICAgIGxpbmVz
ID0gWydAcHJvdG9jb2wgJXMlc0RvbWFpbkhhbmRsZXI7JyAlIChPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCldCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYg
X2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMoc2VsZiwgZG9t
YWlucyk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5z
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAY2xhc3MgJXMlc0RvbWFpbkhhbmRsZXI7JyAl
IChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpKQotICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hhbmRs
ZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgaWYgbm90
IGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIHJldHVybiAnJwotCi0gICAgICAgIGNvbW1h
bmRfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1h
bmRzOgotICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kKSkKLQotICAg
ICAgICBoYW5kbGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5k
b21haW5fbmFtZSwKLSAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogJ1xuJy5qb2lu
KGNvbW1hbmRfZGVjbGFyYXRpb25zKSwKLSAgICAgICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dl
bmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJPYmpDRGVjbGFyYXRpb24pLnN1YnN0
aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hh
bmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIGxp
bmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBjYWxsSWQnXQotICAgICAgICBm
b3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91
bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgY29tbWFuZF9hcmdzID0gewotICAgICAgICAgICAgJ2Nv
bW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAncGFyYW1ldGVy
cyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwKLSAgICAgICAgfQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB2aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSBvdmVy
cmlkZTsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxNWU5Nzc2M2JhMTRjY2UzOWMzZGZkNjAzMTQx
OTc3ODQ3YTEwNzRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysg
L2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMg
Q29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29w
eXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0
IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWltcG9ydCByZQotZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCi0KLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNUeXBlQ2F0ZWdv
cnksIE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQotZnJvbSBnZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JU
ZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcwotCi1s
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBPYmplY3RpdmVDQ29u
ZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5f
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2Zp
bGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJzLm1tJyAl
IE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKLQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChz
ZWxmKToKLSAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCi0gICAgICAgICAgICAnIiVzSW50
ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgICAgICciJXNF
bnVtQ29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAg
ICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywK
LSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKLSAgICAg
ICAgXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ3ByaW1hcnlJbmNs
dWRlJzogJyIlc0JhY2tlbmREaXNwYXRjaGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJF
RklYLAotICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1
ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKLSAgICAg
ICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAg
ICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5P
YmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9u
ZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2Vu
ZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluLCBkb21haW5zKSkKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVy
YXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAg
ICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgcmV0dXJuICcnCi0KLSAg
ICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBmb3IgY29tbWFuZCBpbiBk
b21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChkb21haW4s
IGNvbW1hbmQpKQotCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlv
bnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1h
bmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBw
YXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCi0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMg
aW5fJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9w
YXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLQotICAgICAg
ICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21h
aW5fbmFtZSwKLSAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1l
LAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCi0gICAg
ICAgICAgICAnc3VjY2Vzc0NhbGxiYWNrJzogc2VsZi5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19m
b3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpLAotICAgICAgICAgICAgJ2NvbnZlcnNpb25zJzog
c2VsZi5fZ2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSwK
LSAgICAgICAgICAgICdpbnZvY2F0aW9uJzogc2VsZi5fZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3Jf
Y29tbWFuZChkb21haW4sIGNvbW1hbmQpLAotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMu
T2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5z
dWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfc3Vj
Y2Vzc19ibG9ja19mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgotICAgICAgICBs
aW5lcyA9IFtdCi0KLSAgICAgICAgIyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzODIy
MT4gV2ViIEluc3BlY3RvcjogT2JqQyBQcm90b2NvbCBJbnRlcmZhY2VzIHNob3VsZCB0aHJvdyBl
eGNlcHRpb25zIGZvciBuaWwgYXJndW1lbnRzCi0KLSAgICAgICAgaWYgY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVyczoKLSAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycyA9IFtdCi0g
ICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3Bh
cmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKLSAgICAgICAgICAg
ICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZp
ZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIHN1Y2Nlc3NfYmxv
Y2tfcGFyYW1ldGVycy5hcHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgdmFyX25h
bWUpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XiglcykgeycgJSAnLCAnLmpvaW4oc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzKSkKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF57JykKLQotICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBrZXll
ZF9zZXRfbWV0aG9kID0gR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUocGFyYW1l
dGVyLnR5cGUpCi0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50
aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAg
ICAgICAgICAgICB2YXJfZXhwcmVzc2lvbiA9ICcqJXMnICUgdmFyX25hbWUgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsIGVsc2UgdmFyX25hbWUKLSAgICAgICAgICAgICAgICBleHBvcnRfZXhwcmVz
c2lvbiA9IE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3Jf
dmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHZhcl9leHByZXNzaW9uKQotICAgICAgICAgICAgICAg
IGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICByZXN1bHRPYmplY3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMp
OycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRf
ZXhwcmVzc2lvbikpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIGlmICglcyknICUgdmFyX25hbWUpCi0gICAgICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT4lcyhBU0NJSUxp
dGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdE9i
amVjdC5yZWxlYXNlKCksIFN0cmluZygpKTsnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShj
YWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsnKQotCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIH07JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
LQotICAgIGRlZiBfZ2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWlu
LCBjb21tYW5kKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBpZiBjb21tYW5kLmNhbGxf
cGFyYW1ldGVyczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQotICAgICAgICBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgaW5fcGFy
YW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAg
IG9iamNfaW5fcGFyYW1fbmFtZSA9ICdvXyVzJyAlIGluX3BhcmFtX25hbWUKLSAgICAgICAgICAg
IG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGNv
bW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIsIEZhbHNlKQotICAgICAgICAgICAgaW5fcGFy
YW1fb3B0aW9uYWxfc2FmZV9uYW1lID0gJyolcycgJSBpbl9wYXJhbV9uYW1lIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBlbHNlIGluX3BhcmFtX25hbWUKLSAgICAgICAgICAgIGltcG9ydF9leHBy
ZXNzaW9uID0gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zv
cl9wYXJhbWV0ZXIoaW5fcGFyYW1fb3B0aW9uYWxfc2FmZV9uYW1lLCBkb21haW4sIGNvbW1hbmQu
Y29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCi0gICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzID0gJXM7JyAl
IChqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvYmpjX2luX3BhcmFtX25hbWUpLCBpbXBv
cnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICVzOycgJSBqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvYmpjX2lu
X3BhcmFtX25hbWUpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICglcykn
ICUgaW5fcGFyYW1fbmFtZSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
JXMgPSAlczsnICUgKG9iamNfaW5fcGFyYW1fbmFtZSwgaW1wb3J0X2V4cHJlc3Npb24pKQotCi0g
ICAgICAgIGlmIGxpbmVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zv
cl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6Ci0gICAgICAgIHBhaXJzID0gW10KLSAg
ICAgICAgcGFpcnMuYXBwZW5kKCdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrJykKLSAg
ICAgICAgcGFpcnMuYXBwZW5kKCdzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrJykKLSAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAg
ICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJXMnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0g
ICAgICAgICAgICBvYmpjX2luX3BhcmFtX25hbWUgPSAnb18lcycgJSBpbl9wYXJhbV9uYW1lCi0g
ICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAg
IHBhaXJzLmFwcGVuZCgnJXM6JXMnICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgb2JqY19p
bl9wYXJhbV9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3B0aW9u
YWxfZXhwcmVzc2lvbiA9ICcoJXMgPyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpj
X2luX3BhcmFtX25hbWUpCi0gICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycgJSAo
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBvcHRpb25hbF9leHByZXNzaW9uKSkKLSAgICAgICAg
cmV0dXJuICcgICAgW21fZGVsZWdhdGUgJXMlc107JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwg
JyAnLmpvaW4ocGFpcnMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9o
ZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggZGZhZjk3ZmYyMDk5NmYxMjcyMzlmYTZhNGY2MDExMmZiZWIz
MWYxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpl
Y3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICsw
LDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
IyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN0cmlu
ZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZl
X2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IK
LWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRl
bXBsYXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBP
YmplY3RpdmVDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc0NvbmZpZ3VyYXRpb24uaCcgJSBP
YmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYp
OgotICAgICAgICBoZWFkZXJzID0gWwotICAgICAgICAgICAgJyIlcy5oIicgJSBPYmpDR2VuZXJh
dG9yLk9CSkNfUFJFRklYLAotICAgICAgICBdCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICcgKyBoZWFkZXIgZm9y
IGhlYWRlciBpbiBoZWFkZXJzXSksCi0gICAgICAgIH0KLQotICAgICAgICBzZWxmLl9jb21tYW5k
X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hh
bmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKLSAgICAgICAgc2VsZi5fZXZlbnRfZmlsdGVyID0g
T2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmls
dGVyKHNlbGYubW9kZWwoKSkKLQotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dl
bmVyYXRlKCkKLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY29u
ZmlndXJhdGlvbl9pbnRlcmZhY2VfZm9yX2RvbWFpbnMoZG9tYWlucykpCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNIZWFkZXJQb3N0bHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgcmV0dXJuICdcblxuJy5q
b2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ludGVyZmFj
ZV9mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgUldJUHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QnKQotICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBsaW5l
cy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfcHJvcGVydGllc19mb3JfZG9tYWluKGRvbWFpbikpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3Byb3BlcnRpZXNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgotICAgICAgICBwcm9wZXJ0eV9hcmdzID0gewotICAgICAgICAgICAgJ29iamNQcmVmaXgn
OiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBk
b21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAndmFyaWFibGVOYW1lUHJlZml4JzogT2Jq
Q0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbiksCi0gICAg
ICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBh
bmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0NvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHkpLnN1
YnN0aXR1dGUoTm9uZSwgKipwcm9wZXJ0eV9hcmdzKSkKLSAgICAgICAgaWYgZG9tYWluLmV2ZW50
cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNDb25maWd1cmF0aW9uRXZlbnRQcm9wZXJ0eSkuc3Vi
c3RpdHV0ZShOb25lLCAqKnByb3BlcnR5X2FyZ3MpKQotICAgICAgICByZXR1cm4gbGluZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmplY3RpdmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCA1Njg5OTRjNGMyZGVkNzU1MTg3NzliOWNjNmNlYjA1ZjA3ZTFjYmEy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwx
NTAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0j
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQg
c3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmpl
Y3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVy
YXRvcgotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgVGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNs
YXNzIE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdl
bmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6
Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgp
Ci0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzQ29u
ZmlndXJhdGlvbi5tbScgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCi0KLSAgICBkZWYgZ2Vu
ZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKLSAgICAg
ICAgICAgICciJXNJbnRlcm5hbC5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAg
ICAgICAgICAgJyIlc0JhY2tlbmREaXNwYXRjaGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLAotICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudC5oPicsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPicsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPicsCi0gICAgICAgICAgICAnPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPicsCi0gICAgICAgIF0KLQot
ICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICci
JXNDb25maWd1cmF0aW9uLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0gICAgICAg
ICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICVzJyAlIGhlYWRl
ciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCi0gICAgICAgIH0KLQotICAgICAg
ICBzZWxmLl9jb21tYW5kX2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKLSAgICAgICAgc2VsZi5f
ZXZlbnRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50
X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKLQotICAgICAgICBkb21haW5zID0gc2Vs
Zi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0ltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vi
c3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMoZG9t
YWlucykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0lt
cGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0g
ICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVf
Y29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToK
LSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlv
biBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24nKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOycpCi0gICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9pdmFy
cyhkb21haW5zKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcicpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIEFTU0VSVChjb250cm9sbGVyKTsnKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgcmV0dXJuIHNlbGY7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAg
bGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfZGVh
bGxvYyhkb21haW5zKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBmb3IgZG9t
YWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYu
X2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2hhbmRsZXJfc2V0dGVyX2Zvcl9kb21haW4oZG9tYWluKSkKLSAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBpZiBkb21haW4uZXZlbnRzIGFu
ZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9nZXR0ZXJfZm9yX2RvbWFpbihkb21h
aW4pKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBf
Z2VuZXJhdGVfaXZhcnMoc2VsZiwgZG9tYWlucyk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRz
IGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgotICAgICAgICAgICAgICAgIG9iamNf
Y2xhc3NfbmFtZSA9ICclcyVzRG9tYWluSGFuZGxlcicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BS
RUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgICAgIGl2YXJfbmFtZSA9ICdf
JXNIYW5kbGVyJyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFp
bihkb21haW4pCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQ8JXM+ICVzOycg
JSAob2JqY19jbGFzc19uYW1lLCBpdmFyX25hbWUpKQotICAgICAgICAgICAgaWYgZG9tYWluLmV2
ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6Ci0gICAgICAgICAgICAgICAgb2Jq
Y19jbGFzc19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNoZXInICUgKE9iakNHZW5lcmF0
b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgICAgICAgICBpdmFy
X25hbWUgPSAnXyVzRXZlbnREaXNwYXRjaGVyJyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFt
ZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgJXMgKiVzOycgJSAob2JqY19jbGFzc19uYW1lLCBpdmFyX25hbWUpKQotICAgICAgICBy
ZXR1cm4gbGluZXMKLQotICAgIGRlZiBfZ2VuZXJhdGVfZGVhbGxvYyhzZWxmLCBkb21haW5zKToK
LSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKHZvaWQpZGVhbGxv
YycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGZvciBkb21haW4gaW4gZG9t
YWluczoKLSAgICAgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9m
aWx0ZXIoZG9tYWluKToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBbXyVzSGFu
ZGxlciByZWxlYXNlXTsnICUgT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3Jf
ZG9tYWluKGRvbWFpbikpCi0gICAgICAgICAgICBpZiBkb21haW4uZXZlbnRzIGFuZCBzZWxmLl9l
dmVudF9maWx0ZXIoZG9tYWluKToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBb
XyVzRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOycgJSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25h
bWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
W3N1cGVyIGRlYWxsb2NdOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIHJl
dHVybiBsaW5lcwotCi0gICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWlu
KHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHNldHRlcl9hcmdzID0gewotICAgICAgICAgICAgJ29i
amNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJ2RvbWFp
bk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAndmFyaWFibGVOYW1lUHJl
Zml4JzogT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFp
biksCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29u
ZmlndXJhdGlvbkNvbW1hbmRQcm9wZXJ0eUltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUs
ICoqc2V0dGVyX2FyZ3MpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfZ2V0
dGVyX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgZ2V0dGVyX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAnb2JqY1ByZWZpeCc6IE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0gICAg
ICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICd2
YXJpYWJsZU5hbWVQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zv
cl9kb21haW4oZG9tYWluKSwKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVt
cGxhdGVzLk9iakNDb25maWd1cmF0aW9uR2V0dGVySW1wbGVtZW50YXRpb24pLnN1YnN0aXR1dGUo
Tm9uZSwgKipnZXR0ZXJfYXJncykKLQotICAgIGRlZiBfdmFyaWFibGVfbmFtZV9wcmVmaXhfZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBkb21haW5fbmFtZSA9IGRvbWFpbi5kb21h
aW5fbmFtZQotICAgICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdET00nKToKLSAgICAg
ICAgICAgIHJldHVybiAnZG9tJyArIGRvbWFpbl9uYW1lWzM6XQotICAgICAgICBpZiBkb21haW5f
bmFtZS5zdGFydHN3aXRoKCdDU1MnKToKLSAgICAgICAgICAgIHJldHVybiAnY3NzJyArIGRvbWFp
bl9uYW1lWzM6XQotICAgICAgICByZXR1cm4gZG9tYWluX25hbWVbOjFdLmxvd2VyKCkgKyBkb21h
aW5fbmFtZVsxOl0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggY2Y3NTIxYWRkMTkxMGM1YWIxNThlMjUyNWVmMWY1ZjExMTk0YzE4Ny4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19j
b252ZXJzaW9uX2hlbHBlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQg
T2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBnZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1m
cm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ds
b2JhbCcpCi0KLQotZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKLSAgICBpZiBsaW5lcyBhbmQgbGlu
ZXNbLTFdID09ICcnOgotICAgICAgICByZXR1cm4KLSAgICBsaW5lcy5hcHBlbmQoJycpCi0KLQot
Y2xhc3MgT2JqZWN0aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdl
bmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBkZWYg
b3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzRW51bUNvbnZlcnNpb25I
ZWxwZXJzLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAotCi0gICAgZGVmIGRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5z
aG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQo
c2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAnIiVzQXJyYXlDb252ZXJz
aW9uSGVscGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICBdCi0K
LSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpv
aW4oWycjaW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCi0gICAgICAg
IH0KLQotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAg
ICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9s
aWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2Jq
Q0NvbnZlcnNpb25IZWxwZXJzUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdz
KSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29udmVy
c2lvbkhlbHBlcnNTdGFuZGFyZCkuc3Vic3RpdHV0ZShOb25lKSkKLSAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zLCBkb21h
aW5zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29u
dmVyc2lvbkhlbHBlcnNQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
LSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0
ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVz
ID0gW10KLQotICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KLSAgICAgICAg
Zm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKLSAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAg
ICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21h
aW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9y
IG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlz
X2Fub255bW91cyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVt
YmVyKSkKLQotICAgICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgotICAgICAgICBmb3Ig
Y29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNl
KHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91
cyk6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVy
c2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRl
cikpCi0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICAg
ICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9t
YWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKLQotICAgICAgICAjIEFub255
bW91cyBldmVudCBlbnVtcy4KLSAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6Ci0g
ICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
cGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICAgICAgYWRkX25l
d2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVu
dC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQotCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX2Rl
Y2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgotICAgICAgICBvYmpjX2VudW1f
bmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX2Rl
Y2xhcmF0aW9uKGRlY2xhcmF0aW9uKQotICAgICAgICBlbnVtX3ZhbHVlcyA9IGRlY2xhcmF0aW9u
LnR5cGUuZW51bV92YWx1ZXMoKQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51
bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykp
Ci0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVf
YW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwgZGVjbGFy
YXRpb24sIG1lbWJlcik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5v
YmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1i
ZXIpCi0gICAgICAgIGVudW1fdmFsdWVzID0gbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKQotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVt
X29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3Ry
aW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIHJldHVybiAnXG5cbicu
am9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lv
bl9mb3JfcGFyYW1ldGVyKHNlbGYsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJh
bWV0ZXIpOgotICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVt
X25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1h
bmRfbmFtZSwgcGFyYW1ldGVyKQotICAgICAgICBlbnVtX3ZhbHVlcyA9IHBhcmFtZXRlci50eXBl
LmVudW1fdmFsdWVzKCkKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFt
ZSwgZW51bV92YWx1ZXMpKQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51
bV9mcm9tX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQotICAg
ICAgICByZXR1cm4gJ1xuXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2VudW1f
b2JqY190b19wcm90b2NvbF9zdHJpbmcoc2VsZiwgb2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVz
KToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ2lubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyglcyB2YWx1ZSknICUgb2JqY19lbnVtX25hbWUpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHN3aXRjaCh2YWx1
ZSkgeycpCi0gICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdmFsdWVzOgotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgY2FzZSAlcyVzOicgJSAob2JqY19lbnVtX25hbWUsIEdlbmVy
YXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIlcyIpOycgJSBl
bnVtX3ZhbHVlKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgbGluZXMu
YXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBf
Z2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhzZWxmLCBvYmpjX2VudW1fbmFtZSwg
ZW51bV92YWx1ZXMpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
dGVtcGxhdGU8PicpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnaW5saW5lICVzIGZyb21Qcm90b2Nv
bFN0cmluZyhTdHJpbmcgdmFsdWUpJyAlIG9iamNfZW51bV9uYW1lKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJ3snKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX3ZhbHVlczoKLSAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICh2YWx1ZSA9PSAiJXMiKScgJSBlbnVtX3ZhbHVl
KQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiAlcyVzOycgJSAob2Jq
Y19lbnVtX25hbWUsIEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1f
dmFsdWUpKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuICVzJXM7JyAlIChvYmpjX2VudW1f
bmFtZSwgR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZXNb
MF0pKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmMTNhZjJmODEyMzA4MzI4
OTg5ZjE0ZmI3OTExNWZiMjlkN2VmOGEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1l
dDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0j
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRv
cgotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBnZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIE9iamVjdGl2ZUNGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc0V2ZW50RGlzcGF0Y2hlcnMubW0n
ICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAotCi0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJh
dGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVy
YXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1
dChzZWxmKToKLSAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCi0gICAgICAgICAgICAnIiVz
RW51bUNvbnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0g
ICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPics
Ci0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPicsCi0gICAg
ICAgIF0KLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdwcmltYXJ5SW5j
bHVkZSc6ICciJXNJbnRlcm5hbC5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAg
ICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAlcycgJSBo
ZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAotICAgICAgICB9Ci0KLSAg
ICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0gICAgICAgIHNlY3Rp
b25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNJbXBsZW1l
bnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAg
IHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
VGVtcGxhdGVzLk9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAg
ICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zKHNlbGYsIGRv
bWFpbik6Ci0gICAgICAgIGlmIG5vdCBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgcmV0dXJu
ICcnCi0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFp
bkV2ZW50RGlzcGF0Y2hlcicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRv
bWFpbl9uYW1lKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlcycgJSBv
YmpjX25hbWUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7JykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJ3snKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzZWxmID0gW3N1cGVyIGluaXRd
OycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghc2VsZiknKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuIG5pbDsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBBU1NFUlQoY29udHJvbGxlcik7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiBz
ZWxmOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKLSAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnQoZG9tYWluLCBldmVudCkpCi0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50KHNlbGYs
IGRvbWFpbiwgZXZlbnQpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9zaWduYXR1cmUoZG9tYWluLCBldmVudCkpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsID0gX2NvbnRyb2xsZXItPmZyb250ZW5kQ2hh
bm5lbCgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZnJvbnRlbmRDaGFubmVs
KScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIiVzLiVzIikpOycgJSAoZG9tYWluLmRvbWFpbl9uYW1l
LCBldmVudC5ldmVudF9uYW1lKSkKLSAgICAgICAgaWYgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoK
LSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1l
dGVycyhkb21haW4sIGV2ZW50KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgZnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9zaWduYXR1cmUoc2VsZiwgZG9tYWlu
LCBldmVudCk6Ci0gICAgICAgIGlmIG5vdCBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgotICAgICAg
ICAgICAgcmV0dXJuICctICh2b2lkKSVzJyAlIGV2ZW50LmV2ZW50X25hbWUKLSAgICAgICAgcGFp
cnMgPSBbXQotICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6
Ci0gICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAg
ICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFtZSwgT2JqQ0dlbmVy
YXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1l
dGVyKSwgcGFyYW1fbmFtZSkpCi0gICAgICAgIHBhaXJzWzBdID0gdWNmaXJzdChwYWlyc1swXSkK
LSAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzJyAlIChldmVudC5ldmVudF9uYW1lLCAn
ICcuam9pbihwYWlycykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJz
KHNlbGYsIGRvbWFpbiwgZXZlbnQpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5l
dmVudF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAga2V5ZWRfc2V0X21ldGhvZCA9IEdlbmVyYXRv
ci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQotICAgICAgICAgICAg
dmFyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIHNhZmVfdmFy
X25hbWUgPSAnKColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2Ug
dmFyX25hbWUKLSAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gT2JqQ0dlbmVyYXRvci5v
YmpjX3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlw
ZSwgc2FmZV92YXJfbmFtZSkKLSAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWw6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lcyhB
U0NJSUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMpJyAlIChwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBwYXJh
bXNPYmplY3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhv
ZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJw
YXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsnKQotICAgICAgICByZXR1cm4gbGluZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZGJjZTU1ZjhmOTNjNGEyZTVjMDAzYTBlNTcwNGQ4OWE3
MzFlMzc2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmplY3RpdmVfY19oZWFkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQg
T2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBl
LCBFbnVtVHlwZQotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1kZWYg
YWRkX25ld2xpbmUobGluZXMpOgotICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6Ci0g
ICAgICAgIHJldHVybgotICAgIGxpbmVzLmFwcGVuZCgnJykKLQotCi1jbGFzcyBPYmplY3RpdmVD
SGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAg
ICAgICByZXR1cm4gJyVzLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAotCi0gICAgZGVm
IGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgaGVhZGVycyA9IHNldChbCi0gICAgICAg
ICAgICAnPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4nLAotICAgICAgICBd
KQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xu
Jy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gc29ydGVkKGhlYWRlcnMp
XSksCi0gICAgICAgIH0KLQotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVy
YXRlKCkKLSAgICAgICAgdHlwZV9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxk
X2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgZG9tYWlucykKLSAg
ICAgICAgY29tbWFuZF9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMp
Ci0gICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFp
bnMpCi0KLSAgICAgICAgIyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzODIyMj4gV2Vi
IEluc3BlY3RvcjogUmVkdWNlIHVubmVjZXNzYXJ5IGVudW1zL3R5cGVzIGdlbmVyYXRlZCBpbiBP
YmpDIFByb3RvY29sIEludGVyZmFjZXMKLSAgICAgICAgIyBDdXJyZW50bHkgd2UgZ2VuZXJhdGUg
ZW51bXMvdHlwZXMgZm9yIGFsbCB0eXBlcyBpbiB0aGUgdHlwZV9kb21haW5zLiBGb3IgdGhlIGJ1
aWx0LWluCi0gICAgICAgICMgSlNDIGRvbWFpbnMgKERlYnVnZ2VyLCBSdW50aW1lKSB0aGlzIHBy
b2R1Y2VzIGV4dHJhIHVudXNlZCB0eXBlcy4gV2Ugb25seSBuZWVkIHRvCi0gICAgICAgICMgZ2Vu
ZXJhdGUgdGhlc2UgdHlwZXMgaWYgdGhleSBhcmUgcmVmZXJlbmNlZCBieSB0aGUgY29tbWFuZF9k
b21haW5zIG9yIGV2ZW50X2RvbWFpbnMuCi0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1
dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpv
aW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucywg
dHlwZV9kb21haW5zKSkpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRl
cihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bXMsIHR5cGVfZG9tYWlucykpKSkKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVy
YXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5c
bicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2NvbW1hbmRfcHJvdG9jb2xz
LCBjb21tYW5kX2RvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9p
bihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMsIGV2ZW50
X2RvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMu
T2JqQ0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUpKQotICAgICAgICByZXR1cm4gJ1xu
XG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRp
b25zKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIGRlY2xh
cmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKLSAgICAgICAgICAgIGlmIChpc2lu
c3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgICAgICBv
YmpjX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50
eXBlKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGNsYXNzICVzOycgJSBvYmpjX25h
bWUpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRl
X2VudW1zKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLQotICAgICAgICAjIFR5
cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KLSAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRv
bWFpbi50eXBlX2RlY2xhcmF0aW9uczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFy
YXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVz
KQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1i
ZXJzOgotICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVt
VHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNs
YXJhdGlvbiwgbWVtYmVyKSkKLQotICAgICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgot
ICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUu
aXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAg
ICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19l
bnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVy
KSkKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVy
czoKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlw
ZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5j
b21tYW5kX25hbWUsIHBhcmFtZXRlcikpCi0KLSAgICAgICAgIyBBbm9ueW1vdXMgZXZlbnQgZW51
bXMuCi0gICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUu
aXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAg
ICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19l
bnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQot
Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3R5
cGVzKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgIyBUeXBlIGlu
dGVyZmFjZXMuCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJh
dGlvbnM6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVj
dFR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZShkb21haW4sIGRl
Y2xhcmF0aW9uKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBf
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVj
bGFyYXRpb24pOgotICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19l
bnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKQotICAg
ICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfZW51bShvYmpjX2VudW1fbmFtZSwgZGVjbGFyYXRp
b24udHlwZS5lbnVtX3ZhbHVlcygpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9mb3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAg
IG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnlt
b3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAgIHJldHVybiBzZWxm
Ll9nZW5lcmF0ZV9lbnVtKG9iamNfZW51bV9uYW1lLCBtZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygp
KQotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYs
IGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgotICAgICAgICBvYmpj
X2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19l
bnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQot
ICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfZW51bShvYmpjX2VudW1fbmFtZSwgcGFyYW1l
dGVyLnR5cGUuZW51bV92YWx1ZXMoKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bShzZWxmLCBl
bnVtX25hbWUsIGVudW1fdmFsdWVzKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5l
cy5hcHBlbmQoJ3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsICVzKSB7JyAlIGVudW1fbmFtZSkK
LSAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV92YWx1ZXM6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAlcyVzLCcgJSAoZW51bV9uYW1lLCBHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFt
ZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfTsn
KQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV90
eXBlX2ludGVyZmFjZShzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKLSAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBvYmpjX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlw
ZShkZWNsYXJhdGlvbi50eXBlKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMg
OiAlcycgJSAob2JqY19uYW1lLCBPYmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFTRSkp
Ci0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1l
bWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRp
b25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwg
ZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBpZiByZXF1aXJlZF9tZW1iZXJzOgot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9y
ZXF1aXJlZF9tZW1iZXJzKGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpKQot
ICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJy8qIHJlcXVpcmVkICovICcgKyBzZWxmLl9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVy
dHkoZGVjbGFyYXRpb24sIG1lbWJlcikpCi0gICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxf
bWVtYmVyczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogb3B0aW9uYWwgKi8gJyArIHNl
bGYuX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eShkZWNsYXJhdGlvbiwgbWVtYmVyKSkKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
LQotICAgIGRlZiBfZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoc2Vs
ZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycyk6Ci0gICAgICAgIHBhaXJz
ID0gW10KLSAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgotICAgICAgICAg
ICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJh
dGlvbiwgbWVtYmVyKQotICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50
aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKLSAgICAgICAgICAg
IHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlICh2YXJfbmFtZSwgb2JqY190eXBlLCB2YXJfbmFt
ZSkpCi0gICAgICAgIHBhaXJzWzBdID0gdWNmaXJzdChwYWlyc1swXSkKLSAgICAgICAgcmV0dXJu
ICctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGglczsnICUgJyAnLmpvaW4ocGFpcnMpCi0KLSAgICBk
ZWYgX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eShzZWxmLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToK
LSAgICAgICAgYWNjZXNzb3JfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY19hY2Nlc3Nvcl90eXBl
X2Zvcl9tZW1iZXIobWVtYmVyKQotICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9i
amNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAgIHJldHVybiAn
QHByb3BlcnR5IChub25hdG9taWMsICVzKSAlczsnICUgKGFjY2Vzc29yX3R5cGUsIGpvaW5fdHlw
ZV9hbmRfbmFtZShvYmpjX3R5cGUsIE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lk
ZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKSkpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2NvbW1h
bmRfcHJvdG9jb2xzKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAg
aWYgZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5I
YW5kbGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUp
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bwcm90b2NvbCAlcyA8TlNPYmplY3Q+JyAlIG9i
amNfbmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQHJlcXVpcmVkJykKLSAgICAgICAg
ICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woZG9tYWluLCBj
b21tYW5kKSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3NpbmdsZV9jb21tYW5kX3By
b3RvY29sKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6Ci0gICAgICAgIHBhaXJzID0gW10KLSAgICAg
ICAgcGFpcnMuYXBwZW5kKCdFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjaycpCi0gICAgICAgIHBhaXJzLmFwcGVuZCgnc3VjY2Vzc0NhbGxiYWNrOigl
cylzdWNjZXNzQ2FsbGJhY2snICUgc2VsZi5fY2FsbGJhY2tfYmxvY2tfZm9yX2NvbW1hbmQoZG9t
YWluLCBjb21tYW5kKSkKLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFy
YW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKLSAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBP
YmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRf
bmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCi0gICAgICAgIHJldHVybiAnLSAodm9pZCkl
c1dpdGglczsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCi0KLSAg
ICBkZWYgX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6
Ci0gICAgICAgIHBhaXJzID0gW10KLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFpcnMuYXBwZW5kKGpvaW5fdHlwZV9hbmRf
bmFtZShPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNv
bW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAg
ICAgcmV0dXJuICd2b2lkKF4pKCVzKScgJSAnLCAnLmpvaW4ocGFpcnMpCi0KLSAgICBkZWYgX2dl
bmVyYXRlX2V2ZW50X2ludGVyZmFjZXMoc2VsZiwgZG9tYWluKToKLSAgICAgICAgbGluZXMgPSBb
XQotICAgICAgICBpZiBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgb2JqY19uYW1lID0gJyVz
JXNEb21haW5FdmVudERpc3BhdGNoZXInICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRv
bWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSAl
cyA6IE5TT2JqZWN0JyAlIG9iamNfbmFtZSkKLSAgICAgICAgICAgIGZvciBldmVudCBpbiBkb21h
aW4uZXZlbnRzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9z
aW5nbGVfZXZlbnRfaW50ZXJmYWNlKGRvbWFpbiwgZXZlbnQpKQotICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRl
ZiBfZ2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShzZWxmLCBkb21haW4sIGV2ZW50KToK
LSAgICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICByZXR1
cm4gJy0gKHZvaWQpJXM7JyAlIGV2ZW50LmV2ZW50X25hbWUKLSAgICAgICAgcGFpcnMgPSBbXQot
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBw
YWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFtZSwgT2JqQ0dlbmVyYXRvci5vYmpj
X3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSwgcGFy
YW1fbmFtZSkpCi0gICAgICAgIHBhaXJzWzBdID0gdWNmaXJzdChwYWlyc1swXSkKLSAgICAgICAg
cmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAoZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4o
cGFpcnMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCBiYWRjOGMyYjY2NWFiNDY4OWJjYjVkNGRiZTkwNTZjYzI1MDY3NjdkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hl
YWRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5
dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6
Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCi0KLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IK
LWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9y
X3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotCi1sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBPYmplY3RpdmVDVHlwZXNJ
bnRlcm5hbEhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2Vs
ZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxm
KToKLSAgICAgICAgcmV0dXJuICclc0ludGVybmFsLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BS
RUZJWAotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgaGVhZGVycyA9
IHNldChbCi0gICAgICAgICAgICAnIiVzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgs
Ci0gICAgICAgICAgICAnIlJXSVByb3RvY29sSlNPTk9iamVjdEludGVybmFsLmgiJywKLSAgICAg
ICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKLSAgICAgICAgICAg
ICc8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+JywKLSAg
ICAgICAgXSkKLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdpbmNsdWRl
cyc6ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZCho
ZWFkZXJzKV0pLAotICAgICAgICB9Ci0KLSAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190
b19nZW5lcmF0ZSgpCi0gICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRv
ci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9k
ZWwoKSksIGRvbWFpbnMpCi0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpv
aW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZh
dGVfaW50ZXJmYWNlcywgZXZlbnRfZG9tYWlucykpKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDR2VuZXJpY0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlv
bnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJpdmF0ZV9pbnRlcmZh
Y2VzKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgaWYgZG9tYWlu
LmV2ZW50czoKLSAgICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNwYXRj
aGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCi0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgKFByaXZhdGUpJyAlIG9iamNf
bmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXI7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBs
ZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjNmQ1MDExYWEzODMxMWJmZTE0YzgyMmFmMzY2Mjg3
N2QzOGY2OGZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEs
MTQ4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0
IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5l
cmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUKLQot
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotZGVmIGFkZF9uZXdsaW5lKGxp
bmVzKToKLSAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgotICAgICAgICByZXR1cm4K
LSAgICBsaW5lcy5hcHBlbmQoJycpCi0KLQotY2xhc3MgT2JqZWN0aXZlQ1R5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiAnJXNUeXBlcy5tbScgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCi0KLSAg
ICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihP
YmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKHNlbGYubW9k
ZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQotCi0gICAgZGVmIGdl
bmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCi0gICAg
ICAgICAgICAnIiVzRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5o
PicsCi0gICAgICAgICAgICAnPHd0Zi9Bc3NlcnRpb25zLmg+JywKLSAgICAgICAgICAgICc8d3Rm
L1Bhc3NSZWZQdHIuaD4nLAotICAgICAgICBdCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICdcbicu
am9pbihbJyNpbXBvcnQgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRl
cnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoKQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5PYmpDSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuZ2VuZXJhdGVf
dHlwZV9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLk9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlv
bnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMoc2VsZiwgZG9tYWlu
KToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWlu
LnR5cGVfZGVjbGFyYXRpb25zOgotICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UoZGVjbGFyYXRp
b24udHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVz
KQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX3R5cGVfaW1wbGVt
ZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbihzZWxmLCBkb21h
aW4sIGRlY2xhcmF0aW9uKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBl
bmQoJ0BpbXBsZW1lbnRhdGlvbiAlcycgJSBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlw
ZShkZWNsYXJhdGlvbi50eXBlKSkKLSAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihs
YW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBkZWNsYXJhdGlvbi50eXBlX21l
bWJlcnMpCi0gICAgICAgIGlmIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9t
ZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRf
bWVtYmVycykpCi0gICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX3NldHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1l
bWJlcikpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfZ2V0dGVyX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlv
biwgbWVtYmVyKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9n
ZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhzZWxmLCBkb21haW4sIGRl
Y2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKToKLSAgICAgICAgcGFpcnMgPSBbXQotICAgICAg
ICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAgICBvYmpjX3R5cGUg
PSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIp
Ci0gICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpj
X2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQotICAgICAgICAgICAgcGFpcnMuYXBwZW5k
KCclczooJXMpJXMnICUgKHZhcl9uYW1lLCBvYmpjX3R5cGUsIHZhcl9uYW1lKSkKLSAgICAgICAg
cGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQotICAgICAgICAjIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTM4MjIxPiBXZWIgSW5zcGVjdG9yOiBPYmpDIFByb3RvY29sIEludGVyZmFj
ZXMgc2hvdWxkIHRocm93IGV4Y2VwdGlvbnMgZm9yIG5pbCBhcmd1bWVudHMKLSAgICAgICAgbGlu
ZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aCVz
OycgJSAnICcuam9pbihwYWlycykpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07JykKLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgaWYgKCFzZWxmKScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBy
ZXR1cm4gbmlsOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgZm9yIG1lbWJl
ciBpbiByZXF1aXJlZF9tZW1iZXJzOgotICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJh
dG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYuJXMgPSAlczsnICUgKHZhcl9uYW1lLCB2
YXJfbmFtZSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgcmV0dXJuIHNlbGY7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfc2V0dGVyX2Zvcl9t
ZW1iZXIoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgb2JqY190
eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVt
YmVyKQotICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpj
X2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQotICAgICAgICBzZXR0ZXJfbWV0aG9kID0g
T2JqQ0dlbmVyYXRvci5vYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwg
bWVtYmVyKQotICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLm9i
amNfdG9fcHJvdG9jb2xfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIs
IHZhcl9uYW1lKQotICAgICAgICAjIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4MjIx
PiBXZWIgSW5zcGVjdG9yOiBPYmpDIFByb3RvY29sIEludGVyZmFjZXMgc2hvdWxkIHRocm93IGV4
Y2VwdGlvbnMgZm9yIG5pbCBhcmd1bWVudHMKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBs
aW5lcy5hcHBlbmQoJy0gKHZvaWQpc2V0JXM6KCVzKSVzJyAlICh1Y2ZpcnN0KHZhcl9uYW1lKSwg
b2JqY190eXBlLCB2YXJfbmFtZSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIFtzdXBlciAlczolcyBmb3JLZXk6QCIlcyJdOycgJSAoc2V0dGVy
X21ldGhvZCwgY29udmVyc2lvbl9leHByZXNzaW9uLCBtZW1iZXIubWVtYmVyX25hbWUpKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQot
Ci0gICAgZGVmIF9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRlY2xh
cmF0aW9uLCBtZW1iZXIpOgotICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNf
dHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAgIHZhcl9uYW1lID0g
T2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVy
X25hbWUpCi0gICAgICAgIGdldHRlcl9tZXRob2QgPSBPYmpDR2VuZXJhdG9yLm9iamNfZ2V0dGVy
X21ldGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAgIGJhc2ljX2V4
cHJlc3Npb24gPSAnW3N1cGVyICVzOkAiJXMiXScgJSAoZ2V0dGVyX21ldGhvZCwgbWVtYmVyLm1l
bWJlcl9uYW1lKQotICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9y
LnByb3RvY29sX3RvX29iamNfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1i
ZXIsIGJhc2ljX2V4cHJlc3Npb24pCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMu
YXBwZW5kKCctICglcyklcycgJSAob2JqY190eXBlLCB2YXJfbmFtZSkpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiAlczsnICUgY29u
dmVyc2lvbl9leHByZXNzaW9uKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCA0N2I0MzgyM2IzMTYxMjI1MDFmMzBlZmRhMDZmMzdkYjgxOGZmZjBiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRl
ci5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRo
b24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0Ogot
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcg
aW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmly
c3QKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IFRlbXBsYXRlcwotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBPYmplY3RUeXBlLCBQcmlt
aXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBGcmFtZXdvcmtzCi0KLWxvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIFByb3RvY29sVHlwZXNIZWFkZXJH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJl
dHVybiAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0
cHV0KHNlbGYpOgotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkK
LSAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMo
ZG9tYWlucykKLQotICAgICAgICBoZWFkZXJzID0gc2V0KFsKLSAgICAgICAgICAgICc8aW5zcGVj
dG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4nLAotICAgICAgICAgICAgJzx3dGYvQXNzZXJ0
aW9ucy5oPicsCi0gICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JwotICAgICAgICBdKQot
Ci0gICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
ZXhwb3J0X21hY3JvJywgTm9uZSkKLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAg
ICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9m
aWxlbmFtZSgpKSwKLSAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRl
ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKLSAgICAgICAgICAg
ICd0eXBlZGVmcyc6ICcnLAotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuX3R5cGUgPSAnU3Ry
aW5nJwotICAgICAgICByZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyA9IFtyZXR1cm5fdHlw
ZV0KLSAgICAgICAgaWYgZXhwb3J0X21hY3JvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0
dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm9bOjBdID0gW2V4cG9ydF9tYWNyb10KLQotICAgICAg
ICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xp
Y2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBI
ZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoJ25hbWVzcGFjZSBQcm90b2NvbCB7JykKLSAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKGRvbWFpbnMpKQotICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnMoZG9tYWlucykpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnJXMgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
OycgJSAnICcuam9pbihyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybykpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oWwotICAgICAgICAgICAgJ3RlbXBsYXRlPHR5cGVuYW1l
IFQ+ICVzIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKScgJSByZXR1cm5fdHlwZSwK
LSAgICAgICAgICAgICd7JywKLSAgICAgICAgICAgICcgICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7JywKLSAgICAgICAgICAgICd9J10p
KQotCi0gICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRl
cnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihs
YW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0aW9ucykpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19m
b3JfYmluZGluZ190cmFpdHMoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbCcpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0g
ICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgICMgUHJpdmF0ZSBtZXRo
b2RzLgotCi0gICAgIyBGSVhNRTogbW92ZSBidWlsZGVycyBvdXQgb2YgY2xhc3NlcywgdW5jb21t
ZW50IGZvcndhcmQgZGVjbGFyYXRpb24KLQotICAgIGRlZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNs
YXJhdGlvbnMoc2VsZiwgZG9tYWlucyk6Ci0gICAgICAgIHNlY3Rpb25zID0gW10KLQotICAgICAg
ICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9
IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zXQotICAgICAg
ICAgICAgb2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlw
ZSwgT2JqZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQotICAgICAgICAgICAgZW51bV90eXBl
cyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVj
bGFyYXRpb25fdHlwZXMpCi0gICAgICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVzKSArIGxlbihl
bnVtX3R5cGVzKSA9PSAwOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAg
IGRvbWFpbl9saW5lcyA9IFtdCi0gICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCduYW1l
c3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCi0KLSAgICAgICAgICAgIG9iamVjdF90
eXBlX25hbWVzID0gW190eXBlLnJhd19uYW1lKCkgZm9yIF90eXBlIGluIG9iamVjdF90eXBlc10K
LSAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lcyA9IFtfdHlwZS5yYXdfbmFtZSgpIGZvciBfdHlw
ZSBpbiBlbnVtX3R5cGVzXQotCi0gICAgICAgICAgICAjIEZvcndhcmQtZGVjbGFyZSBhbGwgY2xh
c3NlcyBzbyB0aGUgdHlwZSBidWlsZGVycyB3b24ndCBicmVhayBpZiByZWFycmFuZ2VkLgotICAg
ICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUg
aW4gc29ydGVkKG9iamVjdF90eXBlX25hbWVzKSkKLSAgICAgICAgICAgIGRvbWFpbl9saW5lcy5l
eHRlbmQoJ2VudW0gY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVkKGVudW1fdHlw
ZV9uYW1lcykpCi0gICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRv
bWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQot
Ci0gICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJwot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICIiIi8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgotJXMKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLSIiIiAlICdcblxuJy5q
b2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmcyhzZWxmLCBkb21haW5z
KToKLSAgICAgICAgc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2Rv
bWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxl
bih0ZXh0KSA+IDAsIHNlY3Rpb25zKQotCi0gICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoK
LSAgICAgICAgICAgIHJldHVybiAnJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJu
ICIiIi8vIFR5cGVkZWZzLgotJXMKLS8vIEVuZCBvZiB0eXBlZGVmcy4iIiIgJSAnXG5cbicuam9p
bihzZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbihzZWxm
LCBkb21haW4pOgotICAgICAgICBwcmltaXRpdmVfZGVjbGFyYXRpb25zID0gZmlsdGVyKGxhbWJk
YSBkZWNsOiBpc2luc3RhbmNlKGRlY2wudHlwZSwgQWxpYXNlZFR5cGUpLCBkb21haW4udHlwZV9k
ZWNsYXJhdGlvbnMpCi0gICAgICAgIGlmIGxlbihwcmltaXRpdmVfZGVjbGFyYXRpb25zKSA9PSAw
OgotICAgICAgICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAg
ICBmb3IgZGVjbGFyYXRpb24gaW4gcHJpbWl0aXZlX2RlY2xhcmF0aW9uczoKLSAgICAgICAgICAg
IHByaW1pdGl2ZV9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShk
ZWNsYXJhdGlvbi50eXBlLmFsaWFzZWRfdHlwZSkKLSAgICAgICAgICAgIHR5cGVkZWZfbGluZXMg
PSBbXQotICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6Ci0g
ICAgICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0
aW9uLmRlc2NyaXB0aW9uKQotICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVk
ZWYgJXMgJXM7JyAlIChwcmltaXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKLSAg
ICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCi0KLSAg
ICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAl
IGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJy5qb2luKHNl
Y3Rpb25zKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5f
bmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCAnXG4nLmpvaW4obGluZXMpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3Jf
ZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHNlY3Rpb25zID0gW10KLQotICAgICAgICBm
b3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6Ci0gICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAg
ICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Vu
dW1fZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCi0gICAgICAgICAgICBlbGlmIGlzaW5z
dGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJh
dGlvbih0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pKQotCi0gICAgICAgIHNlY3Rpb25zID0gZmls
dGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBzZWN0aW9ucykKLSAgICAgICAg
aWYgbGVuKHNlY3Rpb25zKSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAg
bGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFp
bi5kb21haW5fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9pbihzZWN0aW9ucykp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCi0g
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xu
Jy5qb2luKGxpbmVzKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNs
YXJhdGlvbihzZWxmLCB0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pOgotICAgICAgICBpZiBsZW4o
dHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4g
JycKLQotICAgICAgICBlbnVtX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogaXNpbnN0
YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMs
IHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICByZXF1aXJlZF9tZW1iZXJz
ID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVy
KGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnMpCi0gICAgICAgIG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJhdGlvbi50eXBlX25h
bWUKLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9u
LmRlc2NyaXB0aW9uKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAl
IHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCi0gICAgICAgIGJhc2VfY2xhc3MgPSAnSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCi0gICAgICAgIGlmIG5vdCBHZW5lcmF0b3IudHlwZV9o
YXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKLSAgICAgICAgICAgIGJhc2Vf
Y2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnY2xhc3Mg
JXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3MpKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJ3B1YmxpYzonKQotICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZW51bV9t
ZW1iZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSBcJyVzXCcgd2hpbGUgZ2VuZXJhdGluZyAlcy4nICUgKGVudW1fbWVtYmVyLm1l
bWJlcl9uYW1lLCBvYmplY3RfbmFtZSkpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZW51bV9tZW1iZXIpKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHR5
cGVfZGVjbGFyYXRpb24pKQotCi0gICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUgPSBbXQotICAg
ICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0
ID0gJXM6OmNyZWF0ZSgpJyAlIChvYmplY3RfbmFtZSwgb2JqZWN0X25hbWUpKQotICAgICAgICBm
b3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAgICBjb25zdHJ1Y3Rvcl9l
eGFtcGxlLmFwcGVuZCgnICAgICAqICAgICAuc2V0JXMoLi4uKScgJSB1Y2ZpcnN0KG1lbWJlci5t
ZW1iZXJfbmFtZSkpCi0KLSAgICAgICAgYnVpbGRlcl9hcmdzID0gewotICAgICAgICAgICAgJ29i
amVjdFR5cGUnOiBvYmplY3RfbmFtZSwKLSAgICAgICAgICAgICdjb25zdHJ1Y3RvckV4YW1wbGUn
OiAnXG4nLmpvaW4oY29uc3RydWN0b3JfZXhhbXBsZSkgKyAnOycsCi0gICAgICAgIH0KLQotICAg
ICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLlByb3RvY29sT2JqZWN0QnVpbGRl
ckRlY2xhcmF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCi0g
ICAgICAgIGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIodHlw
ZV9tZW1iZXIsIGRvbWFpbikpCi0gICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuUHJvdG9jb2xPYmplY3RCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmJ1aWxkZXJfYXJncykpCi0gICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVt
YmVyczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV91bmNoZWNrZWRf
c2V0dGVyX2Zvcl9tZW1iZXIobWVtYmVyLCBkb21haW4pKQotCi0gICAgICAgIGlmIEdlbmVyYXRv
ci50eXBlX2hhc19vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gUHJv
cGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uJykKLSAgICAgICAgICAgIGZv
ciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKLSAgICAgICAg
ICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4
cG9ydF9tYWNybycsIE5vbmUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMg
c3RhdGljIGNvbnN0IGNoYXIqICVzOycgJSAoZXhwb3J0X21hY3JvLCB1Y2ZpcnN0KHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKSkpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAg
IGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVj
bGFyYXRpb24pOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnLyog
JXMgKi8nICUgZW51bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKLSAgICAgICAgbGluZXMuZXh0
ZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24u
dHlwZV9uYW1lLCBlbnVtX2RlY2xhcmF0aW9uLnR5cGUpKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVt
X21lbWJlcihzZWxmLCBlbnVtX21lbWJlcik6Ci0gICAgICAgIGRlZiBhcHBseV9pbmRlbnRhdGlv
bihsaW5lKToKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgoJyMnLCAnLyonLCAnKi8n
LCAnLy8nKSkgb3IgbGVuKGxpbmUpIGlzIDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUK
LQotICAgICAgICBpbmRlbnRlZF9saW5lcyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5f
Z2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVu
dW1fbWVtYmVyLnR5cGUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGluZGVudGVkX2xpbmVz
KQotCi0gICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxmLCBlbnVtX25h
bWUsIGVudW1fdHlwZSk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZW51bV9uYW1lID0g
dWNmaXJzdChlbnVtX25hbWUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnZW51bSBjbGFzcyAlcyB7
JyAlIGVudW1fbmFtZSkKLSAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV90eXBlLmVudW1f
dmFsdWVzKCk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzLCcgJSAoR2Vu
ZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5j
b2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
J307IC8vIGVudW0gY2xhc3MgJXMnICUgZW51bV9uYW1lKQotICAgICAgICByZXR1cm4gbGluZXMg
ICMgVGhlIGNhbGxlciBtYXkgd2FudCB0byBhZGp1c3QgaW5kZW50YXRpb24sIHNvIGRvbid0IGpv
aW4gdGhlc2UgbGluZXMuCi0KLSAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bShz
ZWxmLCB0eXBlX2RlY2xhcmF0aW9uKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICByZXF1
aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9u
YWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBlbnVtX3ZhbHVlcyA9
IFtdCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSB7JykKLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIE5vRmllbGRzU2V0ID0gMCwnKQotICAgICAgICBmb3IgaSBpbiByYW5n
ZShsZW4ocmVxdWlyZWRfbWVtYmVycykpOgotICAgICAgICAgICAgZW51bV92YWx1ZSA9ICIlc1Nl
dCIgJSB1Y2ZpcnN0KHJlcXVpcmVkX21lbWJlcnNbaV0ubWVtYmVyX25hbWUpCi0gICAgICAgICAg
ICBlbnVtX3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1ZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICAlcyA9IDEgPDwgJWQsJyAlIChlbnVtX3ZhbHVlLCBpKSkKLSAgICAgICAgaWYg
bGVuKGVudW1fdmFsdWVzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
QWxsRmllbGRzU2V0ID0gKCVzKScgJSAnIHwgJy5qb2luKGVudW1fdmFsdWVzKSkKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBbGxGaWVsZHNTZXQgPSAw
JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRl
X2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6Ci0g
ICAgICAgIHNldHRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3Qo
dHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAotICAgICAgICAgICAgJ2tleWVkU2V0JzogR2VuZXJh
dG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAg
ICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVt
YmVyKQotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShj
YW1lbE5hbWUpc1NldD4mIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUp
JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgeycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICUo
Y2FtZWxOYW1lKXNTZXQpLCBwcm9wZXJ0eV8lKG5hbWUpc19hbHJlYWR5X3NldCk7JyAlIHNldHRl
cl9hcmdzKQotCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5
cGUpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShr
ZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVy
X2FyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
ICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1
ZSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8JShjYW1lbE5hbWUpc1NldD4oKTsnICUgc2V0dGVyX2FyZ3MpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVyKHNl
bGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgotICAgICAgICBzZXR0ZXJfYXJncyA9IHsKLSAgICAg
ICAgICAgICdjYW1lbE5hbWUnOiB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSwKLSAg
ICAgICAgICAgICdrZXllZFNldCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBl
KHR5cGVfbWVtYmVyLnR5cGUpLAotICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5tZW1i
ZXJfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3Ry
aW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlcikKLSAgICAgICAgfQotCi0gICAgICAgIGxp
bmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICB2b2lkIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNl
dHRlcl9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB7JykKLSAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6JShrZXllZFNldClzKEFTQ0lJTGl0
ZXJhbCgiJShuYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFs
dWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUpOycgJSBzZXR0
ZXJfYXJncykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25z
X2Zvcl9iaW5kaW5nX3RyYWl0cyhzZWxmKToKLSAgICAgICAgIyBBIGxpc3Qgb2YgKGJ1aWxkZXJf
dHlwZSwgbmVlZHNfcnVudGltZV9jYXN0KQotICAgICAgICB0eXBlX2FyZ3VtZW50cyA9IFtdCi0K
LSAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKLSAgICAg
ICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2Vs
Zi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVj
bGFyYXRpb25zKQotCi0gICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJh
dGlvbnNfdG9fZ2VuZXJhdGU6Ci0gICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5
cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgotICAgICAgICAgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5n
X2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkK
LQotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChH
ZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUodHlwZV9kZWNsYXJhdGlvbi50
eXBlKSwgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9u
LnR5cGUpKSkKLQotICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMgPSBbJ3N0cnVjdCddCi0gICAgICAg
IGZ1bmN0aW9uX2tleXdvcmRzID0gWydzdGF0aWMgdm9pZCddCi0gICAgICAgIGV4cG9ydF9tYWNy
byA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkK
LSAgICAgICAgaWYgZXhwb3J0X21hY3JvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc3RydWN0
X2tleXdvcmRzLmFwcGVuZChleHBvcnRfbWFjcm8pCi0gICAgICAgICAgICAjZnVuY3Rpb25fa2V5
d29yZHNbMToxXSA9IFtleHBvcnRfbWFjcm9dCi0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpvaW4oc3RydWN0
X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQotICAgICAgICAgICAgaWYgYXJndW1lbnRbMV06Ci0g
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUGFzc1JlZlB0cjwlcz4gcnVudGlt
ZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSk7JyAlIGFy
Z3VtZW50WzBdKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxF
RCcpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5
d29yZHMpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRCcpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKLSAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9u
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IGQ4M2JhMTI0Yjg0OGZhOGZiYmYzY2YxMmI1Y2VmNzQyN2E4ZDZlZWMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlw
ZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgQWxpYXNlZFR5cGUsIEFycmF5VHlw
ZSwgRW51bVR5cGUsIE9iamVjdFR5cGUKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCi0KLQotY2xhc3MgUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0g
ICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0K
LSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIkluc3BlY3Rv
clByb3RvY29sT2JqZWN0cy5jcHAiCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgot
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2Vs
Zi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKLQot
ICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQotCi0g
ICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJ
bnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCInLAotICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1
ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vj
b25kYXJ5X2hlYWRlcnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVk
ZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKCduYW1lc3BhY2UgUHJvdG9jb2wgeycpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMoKSkKLSAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9
IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKQotICAgICAg
ICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAw
LCBidWlsZGVyX3NlY3Rpb25zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbCcpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKLQotICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICAjIFBy
aXZhdGUgbWV0aG9kcy4KLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgot
ICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7JykKLSAgICAgICAgbGluZXMuZXh0
ZW5kKFsnICAgICIlcyIsJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gc2VsZi5hc3Np
Z25lZF9lbnVtX3ZhbHVlcygpXSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCdTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1
cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVf
b3Blbl9maWVsZF9uYW1lcyhzZWxmKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3Ig
ZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgotICAgICAgICAgICAgZm9yIHR5
cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBHZW5lcmF0b3IudHlwZV9oYXNf
b3Blbl9maWVsZHMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKToKLSAgICAg
ICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1lKToKLSAgICAg
ICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0luc3BlY3RvcicsICdQcm90
b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkKLSAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1l
LCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCi0KLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5l
cmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlv
bnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQotCi0gICAgICAgIGZvciB0
eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKLSAgICAgICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKLSAgICAg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAg
ICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCi0KLSAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAg
ICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9v
YmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCi0gICAgICAgICAgICAgICAgaWYg
R2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUp
OgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfcnVu
dGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCi0KLSAg
ICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9y
dW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCBvYmplY3RfZGVjbGFyYXRp
b24pOgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ29iamVjdFR5cGUnOiBHZW5lcmF0
b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUp
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Qcm90b2NvbE9i
amVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0dXRlKE5vbmUsICoqYXJncykKLQotICAgIGRlZiBfZ2Vu
ZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xh
cmF0aW9uKToKLSAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVy
OiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
KQotICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJl
ci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKLSAgICAgICAg
c2hvdWxkX2NvdW50X3Byb3BlcnRpZXMgPSBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmll
bGRzKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKQotICAgICAgICBsaW5lcyA9IFtdCi0KLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIChHZW5lcmF0b3IucHJvdG9jb2xf
dHlwZV9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKLSAgICAgICAg
bGluZXMuYXBwZW5kKCIiInsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7Ci0g
ICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNT
RVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsiIiIpCi0gICAgICAgIGZv
ciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgotICAgICAgICAgICAgYXJncyA9IHsK
LSAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAot
ICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhv
ZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7Ci0gICAgICAgIElu
c3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQo
QVNDSUlMaXRlcmFsKCIlKG1lbWJlck5hbWUpcyIpKTsKLSAgICAgICAgQVNTRVJUKCUobWVtYmVy
TmFtZSlzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICAlKGFzc2VydE1ldGhvZClzKCUo
bWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfSIiIiAlIGFyZ3MpCi0KLSAgICAg
ICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291
bnQgPSAlczsnICUgbGVuKHJlcXVpcmVkX21lbWJlcnMpKQotCi0gICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiBvcHRpb25hbF9tZW1iZXJzOgotICAgICAgICAgICAgYXJncyA9IHsKLSAgICAgICAg
ICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAg
ICAgICAgICdhc3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlw
ZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9i
amVjdDo6aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRl
cmFsKCIlKG1lbWJlck5hbWUpcyIpKTsKLSAgICAgICAgaWYgKCUobWVtYmVyTmFtZSlzUG9zICE9
IG9iamVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJO
YW1lKXNQb3MtPnZhbHVlLmdldCgpKTsiIiIgJSBhcmdzKQotCi0gICAgICAgICAgICBpZiBzaG91
bGRfY291bnRfcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICB9JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQotCi0gICAg
ICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKScpCi0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGll
cyBpbiBvYmplY3Q6ICVzXFxuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcj
ZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21l
bWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBs
aW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCd2b2lkICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSBHZW5lcmF0b3Iu
YXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNs
YXJhdGlvbikpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIFN0cmluZyByZXN1bHQ7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYm9vbCBj
YXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCi0KLSAgICAgICAgYXNzZXJ0X2Nv
bmRpdGlvbiA9ICcgfHwgJy5qb2luKFsncmVzdWx0ID09ICIlcyInICUgZW51bV92YWx1ZSBmb3Ig
ZW51bV92YWx1ZSBpbiBlbnVtX21lbWJlci50eXBlLmVudW1fdmFsdWVzKCldKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRfY29uZGl0aW9uKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVEJykKLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdG9yLnB5CmluZGV4IGI5YzQzOGZmN2FhOTA4ZGU5ZjNmYzI0ODRjZDFkMTQ2MTJk
NTAwNDcuLjQwOGQzN2NmMmFlZDFkNTVmYzhjNDA5Mjk5ZDVhMTQyMDQ4ODIxOWEgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0b3IucHkKQEAgLTM4LDE1ICszOCw2IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQogZGVmIHVjZmlyc3Qoc3RyKToKICAgICByZXR1cm4gc3RyWzoxXS51cHBl
cigpICsgc3RyWzE6XQogCi1fUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUCA9IHsKLSAgICAnYm9v
bGVhbic6ICdib29sJywKLSAgICAnaW50ZWdlcic6ICdpbnQnLAotICAgICdudW1iZXInOiAnZG91
YmxlJywKLSAgICAnc3RyaW5nJzogJ1N0cmluZycsCi0gICAgJ29iamVjdCc6ICdJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCcsCi0gICAgJ2FueSc6ICdJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
JwotfQotCiBfQUxXQVlTX1VQUEVSQ0FTRURfRU5VTV9WQUxVRV9TVUJTVFJJTkdTID0gc2V0KFsn
QVBJJywgJ0NTUycsICdET00nLCAnSFRNTCcsICdYSFInLCAnWE1MJ10pCiAKICMgVGhlc2Ugb2Jq
ZWN0cyBhcmUgYnVpbHQgbWFudWFsbHkgYnkgY3JlYXRpbmcgYW5kIHNldHRpbmcgSW5zcGVjdG9y
VmFsdWVzLgpAQCAtMjI4LDI0OSArMjE5LDYgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICBy
ZXR1cm4gcmUuc3ViKHJlLmNvbXBpbGUocmVnZXgsIHJlLklHTk9SRUNBU0UpLCByZXBsYWNlQ2Fs
bGJhY2ssICIiLmpvaW4oc3Vid29yZHMpKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBr
ZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ2dldE9iamVjdCcKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAn
Z2V0QXJyYXknCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgot
ICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyAnaW50ZWdlcic6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdnZXRJbnRlZ2VyJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFt
ZSgpIGlzICdudW1iZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0RG91YmxlJwotICAg
ICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdhbnknOgotICAgICAgICAgICAgICAg
IHJldHVybiAnZ2V0VmFsdWUnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
dHVybiAnZ2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5r
ZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRv
ci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBrZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlKToK
LSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ3NldE9iamVjdCcKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBl
KToKLSAgICAgICAgICAgIHJldHVybiAnc2V0QXJyYXknCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBp
cyAnaW50ZWdlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnRlZ2VyJwotICAgICAg
ICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdudW1iZXInOgotICAgICAgICAgICAgICAg
IHJldHVybiAnc2V0RG91YmxlJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGlz
ICdhbnknOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25h
bWUoKSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFs
aWFzZWRfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBl
LnByaW1pdGl2ZV90eXBlKQotCi0gICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0aW9ucyBm
b3IgdmFyaW91cyBzaXR1YXRpb25zLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcHJvdG9j
b2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBPYmplY3RUeXBlKSBhbmQgbGVuKF90eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAg
ICByZXR1cm4gJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JwotICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQWxpYXNlZFR5cGUsIEVudW1UeXBlKSk6Ci0gICAgICAg
ICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8JXM+JyAlIEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3Jf
dHlwZShfdHlwZS5lbGVtZW50X3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb3Rv
Y29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xh
cmF0aW9uKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlw
ZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJu
ICc6Oicuam9pbihbR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKG9iamVj
dF9kZWNsYXJhdGlvbi50eXBlKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5wcm90b2NvbF90eXBl
X3N0cmluZ19mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQotCi0gICAgQHN0YXRpY21ldGhvZAot
ICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFy
YW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFs
aWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCi0KLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0aXZlLgotCi0gICAg
ICAgIHNpZ2lsID0gJyonIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICcmJwotICAgICAg
ICAjIFRoaXMgaGFuZGxlcyB0aGUgJ2FueScgdHlwZSBhbmQgb2JqZWN0cyB3aXRoIGRlZmluZWQg
cHJvcGVydGllcy4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3Ig
X3R5cGUucXVhbGlmaWVkX25hbWUoKSBpcyAnb2JqZWN0JzoKLSAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicgKyBzaWdpbAotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4nICsgc2lnaWwKLSAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFt
ZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdj
b25zdCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBp
biBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9u
YW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQot
Ci0gICAgICAgIHJldHVybiAidW5rbm93bl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcl90
eXBlIgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfY2hlY2tl
ZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIHJldHVybiBHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKHBhcmFtZXRlci50eXBlLCBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlci5pc19vcHRpb25hbCkKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKG1lbWJlcik6Ci0g
ICAgICAgIHJldHVybiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKG1l
bWJlci50eXBlLCBtZW1iZXIubWVtYmVyX25hbWUsIEZhbHNlKQotCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfdHlwZV93aXRoX25hbWUoX3R5cGUsIHR5cGVfbmFt
ZSwgaXNfb3B0aW9uYWwpOgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBl
LCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIEdl
bmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgYnVpbGRlcl90eXBl
ID0gR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQotICAgICAg
ICAgICAgaWYgaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyog
Y29uc3QnICUgYnVpbGRlcl90eXBlCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZS5h
bGlhc2VkX3R5cGUpCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAl
cyYnICUgYnVpbGRlcl90eXBlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBidWlsZGVyX3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJp
bWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
IGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSBpbiBbJ2FueSddOgotICAgICAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPicKLSAgICAgICAgICAgIGVsaWYgaXNfb3B0aW9uYWw6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3QnICUgY3BwX25hbWUKLSAg
ICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6
Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSB1Y2ZpcnN0KHR5cGVfbmFtZSkKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSAnSW5zcGVj
dG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1l
LCBfdHlwZS5yYXdfbmFtZSgpKQotCi0gICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJyVzKicgJSBlbnVtX3R5cGVfbmFtZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzJyAlIGVudW1fdHlwZV9uYW1lCi0KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRl
cihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0KLSAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAn
UmVmUHRyPCVzPiYnICUgR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90
eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAg
ICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShf
dHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIkluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDwlcz4qIiAlIGNwcF9u
YW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGNw
cF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAg
ICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3Bl
Y3RvciVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWlu
KCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29s
Ojolczo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdf
bmFtZSgpKQotCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZm9ybWFsIG91dCBw
YXJhbWV0ZXIgdHlwZS4iKQotCi0gICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5IHNsaWdodGx5IGRp
ZmZlcmVudCBmcm9tIG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVuaWZpZWQuCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFt
ZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0gICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBlID0g
X3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2
ZV90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAo
T2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8
JXM+JyAlIEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKLSAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBj
cHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0g
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICJJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFtZQotICAg
ICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1i
ZXInXToKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFt
ZQotCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFt
ZXRlciB0eXBlLiIpCi0KLSAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNlIGJ1aWxkZXIgdHlw
ZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKLSAgICAjICJvcGVuIHR5cGVzIiB0aGF0
IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2JqZWN0cy4KLQotICAg
ICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBvcGVuIHR5cGVzIHNo
b3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KLSAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToK
LSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlw
ZSAgIyBGYWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRo
cm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAg
ICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4iCi0gICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4g
IlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiIKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRv
ci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAg
IHJldHVybiAiUmVmUHRyPCVzPiIgJSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90
eXBlKF90eXBlKQotICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdl
ciddOgotICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PCVzPiIgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY3BwX25hbWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdHlwZV9zdHJpbmdf
Zm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJh
bWV0ZXIudHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnBy
b3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBHZW5lcmF0
b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8JXM+IiAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgcmV0
dXJuICclcycgJSBidWlsZGVyX3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJp
bWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9m
b3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHJldHVybiBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6
Ci0gICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICdJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUgKF90eXBlLnR5
cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6
OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGFzc2VydGlvbl9t
ZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgot
Ci0gICAgICAgIGRlZiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAg
ICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
JyAlIEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKLQotICAg
ICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAg
ICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUu
YWxpYXNlZF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVu
dW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBH
ZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVy
LCBvYmplY3RfZGVjbGFyYXRpb24pCi0KLSAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2Rf
Zm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYg
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIF9QUklN
SVRJVkVfVE9fQ1BQX05BTUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQotCi0gICAgQHN0YXRp
Y21ldGhvZAogICAgIGRlZiBqc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZShfdHlwZSk6CiAgICAg
ICAgIF90eXBlID0gX3R5cGUKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5
cGUpOgpAQCAtNDg3LDEyICsyMzUsMyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuICdudW1iZXInCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJl
dHVybiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpCi0KLSAgICAjIERlY2lkZSB3aGV0aGVyIGNlcnRh
aW4gaGVscGVycyBhcmUgbmVjZXNzYXJ5IGluIGEgc2l0dWF0aW9uLgotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6Ci0g
ICAgICAgIHJldHVybiBub3QgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlw
ZSkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9wYXNzX2J5X2NvcHlfZm9y
X3JldHVybl90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoX3R5cGUsIChB
cnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZShfdHlwZSwgKFByaW1pdGl2ZVR5
cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAib2JqZWN0IikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAx
MDA2NDQKaW5kZXggZmU4ZWQ1OWViNzZhNWZhNzQ4ODVkYTczNDFkZDU4NmI3ZWJkMzdhZS4uZjJl
MzMwYTcyODkyNjg5NmI2YTJmOGUxNjI0OGRmZmEzODFmODhiOAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTU5LDM3NCArNTksMyBAQCBjbGFzcyBHZW5lcmF0b3JU
ZW1wbGF0ZXM6CiAKIC8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSAke2lucHV0RmlsZW5hbWV9CiAvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5IiIiKQotCi0gICAgQ3BwSGVhZGVyUHJlbHVkZSA9ICgKLSAgICAi
IiIjaWZuZGVmICR7aGVhZGVyR3VhcmRTdHJpbmd9Ci0jZGVmaW5lICR7aGVhZGVyR3VhcmRTdHJp
bmd9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0ke2luY2x1ZGVzfQotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotJHt0eXBlZGVmc30iIiIpCi0KLSAgICBDcHBIZWFkZXJQb3N0bHVkZSA9
ICgKLSAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCi0KLSNlbmRpZiAvLyAhZGVmaW5lZCgke2hlYWRlckd1YXJkU3RyaW5nfSkiIiIp
Ci0KLSAgICBDcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUgPSAoCi0gICAgIiIiI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgJHtwcmltYXJ5SW5jbHVkZX0KLQotI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0KLSR7c2Vjb25kYXJ5SW5jbHVkZXN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikK
LQotICAgIENwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQotIiIiKQotCi0gICAg
QWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQcmVsdWRlID0gKAotICAgICIiIiNpZm5kZWYgJHto
ZWFkZXJHdWFyZFN0cmluZ30KLSNkZWZpbmUgJHtoZWFkZXJHdWFyZFN0cmluZ30KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0ke2luY2x1ZGVzfQotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIu
Z2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLSIiIikKLQotICAgIEFsdGVybmF0ZURpc3BhdGNo
ZXJzSGVhZGVyUG9zdGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2Vu
ZGlmIC8vICFkZWZpbmVkKCR7aGVhZGVyR3VhcmRTdHJpbmd9KSIiIikKLQotICAgIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9u
ID0gKAotICAgICIiImNsYXNzIEFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0ke2NvbW1hbmREZWNsYXJhdGlvbnN9Ci19OyIiIikKLQot
ICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uID0gKAot
ICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0ke2NvbW1hbmREZWNsYXJhdGlvbnN9Ci1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOwotfTsiIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRv
bWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKLSAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFj
cm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRl
OwotJHtjb21tYW5kRGVjbGFyYXRpb25zfQotcHJpdmF0ZToKLSAgICBJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciosIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50OwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGlj
OgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBB
bHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsKLSNlbmRpZgotfTsiIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uID0gKAotICAgICIiIiAgICAke2NsYXNzQW5kRXhw
b3J0TWFjcm99ICR7Y2FsbGJhY2tOYW1lfSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgJHtj
YWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4sIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtvdXRQYXJhbWV0ZXJz
fSk7Ci0gICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRl
cnN9KSA9IDA7IiIiKQotCi0gICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxs
U3dpdGNoID0gKAotICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQotewotICAgIFJlZjxJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0ke2Rpc3BhdGNo
Q2FzZXN9Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgbWFrZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicg
d2FzIG5vdCBmb3VuZCIpKTsKLX0iIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKLXsKLSAgICBSZWY8SW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAg
IHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoq
Q2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERp
c3BhdGNoTWFwOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1h
cCwgZGlzcGF0Y2hNYXAsICgpKTsKLSAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgewotICAgICAgICAgICAgY29u
c3QgY2hhciogbmFtZTsKLSAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7Ci0gICAgICAg
IH0gY29tbWFuZHNbXSA9IHsKLSR7ZGlzcGF0Y2hDYXNlc30KLSAgICAgICAgfTsKLSAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwotICAgIH0KLQotICAg
IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAu
ZmluZChtZXRob2QpOwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywg
IiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1l
c3NhZ2UuZ2V0KCkpOwotfSIiIikKLQotICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25Eb21haW5Db25zdHJ1Y3RvciA9ICgKLSAgICAiIiJQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKLSAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICAsIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcihudWxs
cHRyKQotI2VuZGlmCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0aGlzKTsKLX0iIiIp
Ci0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1
bWVudHMgPSAoCi0iIiIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIp
KTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKLSR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9Ci0gICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0g
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotIiIiKQotCi0gICAgQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKLSIiIkluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6
JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJh
Y2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9Ci0KLXZvaWQg
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFj
a05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQotewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
LSR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9Ci0gICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdl
LCBFcnJvclN0cmluZygpKTsKLX0iIiIpCi0KLSAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5E
aXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCi0iIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KLSR7ZXZlbnREZWNsYXJhdGlvbnN9Ci1w
cml2YXRlOgotICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7Ci19OyIiIikKLQotICAgIFByb3RvY29sT2JqZWN0QnVpbGRlckRlY2xhcmF0aW9u
UHJlbHVkZSA9ICgKLSIiIiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRl
ciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gcHRyKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwotICAgICAgICB9Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyAke29iamVjdFR5cGV9OwotICAgIHB1YmxpYzoiIiIpCi0KLSAgICBQcm90b2Nv
bE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlvblBvc3RsdWRlID0gKAotIiIiCi0gICAgICAgIG9wZXJh
dG9yIFJlZlB0cjwke29iamVjdFR5cGV9PiYgKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXpl
b2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPCR7b2JqZWN0VHlwZX0+Kj4oJm1fcmVz
dWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFBhc3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gcmVs
ZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZWZQdHI8JHtvYmplY3RUeXBl
fT4oKnRoaXMpLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSR7Y29uc3RydWN0b3JFeGFtcGxlfQotICAgICAqLwot
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7Ci0gICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0
SXRlbVRyYWl0cyBJdGVtVHJhaXRzOyIiIikKLQotICAgIFByb3RvY29sT2JqZWN0UnVudGltZUNh
c3QgPSAoCi0iIiJQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmpl
Y3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSNlbmRpZiAgLy8gIUFTU0VSVF9ESVNB
QkxFRAotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2Yo
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7Ci19Ci0iIiIpCi0KLSAgICBP
YmpDSGVhZGVyUHJlbHVkZSA9ICgKLSAgICAiIiIjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KLQotJHtpbmNsdWRlc30KLSIiIikKLQotICAgIE9iakNIZWFkZXJQb3N0bHVkZSA9ICgK
LSAgICAiIiIiIiIpCi0KLSAgICBPYmpDQ29udmVyc2lvbkhlbHBlcnNQcmVsdWRlID0gKAotICAg
ICIiIiR7aW5jbHVkZXN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKLQotICAgIE9iakND
b252ZXJzaW9uSGVscGVyc1Bvc3RsdWRlID0gKAotICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIiIiKQotCi0gICAgT2JqQ0dlbmVyaWNIZWFkZXJQcmVsdWRlID0gKAotICAgICIiIiR7
aW5jbHVkZXN9IiIiKQotCi0gICAgT2JqQ0dlbmVyaWNIZWFkZXJQb3N0bHVkZSA9ICgKLSAgICAi
IiIiIiIpCi0KLSAgICBPYmpDQ29udmVyc2lvbkhlbHBlcnNTdGFuZGFyZCA9ICgKLSAgICAiIiJ0
ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5cGUgZnJvbVByb3RvY29s
U3RyaW5nKFN0cmluZyB2YWx1ZSk7IiIiKQotCi0gICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVh
ZGVyUHJlbHVkZSA9ICgKLSAgICAiIiIke2luY2x1ZGVzfQotCi0ke2ZvcndhcmREZWNsYXJhdGlv
bnN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotIiIiKQotCi0gICAgT2JqQ0JhY2tlbmREaXNw
YXRjaGVySGVhZGVyUG9zdGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0iIiIpCi0KLSAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1ZGUg
PSAoCi0gICAgIiIiI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICR7cHJpbWFyeUluY2x1ZGV9
Ci0KLSR7c2Vjb25kYXJ5SW5jbHVkZXN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKLQot
ICAgIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCi0gICAg
IiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0iIiIpCi0KLSAgICBPYmpDSW1wbGVtZW50YXRp
b25QcmVsdWRlID0gKAotICAgICIiIiNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAke3ByaW1h
cnlJbmNsdWRlfQotCi0ke3NlY29uZGFyeUluY2x1ZGVzfQotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOyIiIikKLQotICAgIE9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRlID0gKAotICAgICIi
IiIiIikKLQotICAgIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRl
cmZhY2VEZWNsYXJhdGlvbiA9ICgKLSAgICAiIiJjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZUluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotJHtjb21tYW5kRGVjbGFyYXRp
b25zfQotfTsiIiIpCi0KLSAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5k
bGVyT2JqQ0RlY2xhcmF0aW9uID0gKAotICAgICIiImNsYXNzIE9iakNJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFp
bk5hbWV9RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQot
JHtjb21tYW5kRGVjbGFyYXRpb25zfQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8JHtvYmpj
UHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07IiIiKQot
Ci0gICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0
aW9uID0gKAotICAgICIiInZvaWQgT2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlcjo6JHtjb21tYW5kTmFtZX0oJHtwYXJhbWV0ZXJzfSkKLXsKLSAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3Ip
OwotICAgIH07Ci0KLSR7c3VjY2Vzc0NhbGxiYWNrfQotJHtjb252ZXJzaW9uc30KLSR7aW52b2Nh
dGlvbn0KLX0KLSIiIikKLQotICAgIE9iakNDb25maWd1cmF0aW9uQ29tbWFuZFByb3BlcnR5ID0g
KAotICAgICIiIkBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXQke2RvbWFp
bk5hbWV9SGFuZGxlcjopIGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxl
cj4gJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcjsiIiIpCi0KLSAgICBPYmpDQ29uZmlndXJh
dGlvbkV2ZW50UHJvcGVydHkgPSAoCi0gICAgIiIiQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSAke29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqJHt2
YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyOyIiIikKLQotICAgIE9iakNDb25maWd1
cmF0aW9uQ29tbWFuZFByb3BlcnR5SW1wbGVtZW50YXRpb24gPSAoCi0gICAgIiIiLSAodm9pZClz
ZXQke2RvbWFpbk5hbWV9SGFuZGxlcjooaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21h
aW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gXyR7dmFyaWFibGVOYW1l
UHJlZml4fUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfJHt2YXJpYWJsZU5hbWVQ
cmVmaXh9SGFuZGxlciByZWxlYXNlXTsKLSAgICBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxl
ciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVl
PEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlciwgQWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyPj4oQVNDSUlMaXRlcmFsKCIke2RvbWFpbk5hbWV9IiksIFdURjo6bW92ZShhbHRlcm5hdGVE
aXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFnZW50UmVnaXN0cnkoKS5hcHBlbmQoV1RG
Ojptb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFp
bk5hbWV9RG9tYWluSGFuZGxlcj4pJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcgotewotICAg
IHJldHVybiBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcjsKLX0iIiIpCi0KLSAgICBPYmpD
Q29uZmlndXJhdGlvbkdldHRlckltcGxlbWVudGF0aW9uID0gKAotICAgICIiIi0gKCR7b2JqY1By
ZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluRXZlbnREaXNwYXRjaGVyICopJHt2YXJpYWJsZU5hbWVQ
cmVmaXh9RXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfJHt2YXJpYWJsZU5hbWVQcmVmaXh9
RXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNw
YXRjaGVyID0gW1ske29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkV2ZW50RGlzcGF0Y2hl
ciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gXyR7
dmFyaWFibGVOYW1lUHJlZml4fUV2ZW50RGlzcGF0Y2hlcjsKLX0iIiIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMu
cHkKaW5kZXggOGVhOGE3ODQ0Mjc3M2VjYTc5NDNjZWZkZWY0NzFiZWUyMWViODU4OS4uZjQwMDk1
MWU1YzFkNDg0ZTU4YjI3YTVmYTU2OTNkNzYwNTFhNTFhNyAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQpA
QCAtMzEzLDcgKzMxMyw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgaWYganNvblsn
YXZhaWxhYmlsaXR5J10gbm90IGluIGFsbG93ZWRfYWN0aXZhdGlvbl9zdHJpbmdzOgogICAgICAg
ICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCdNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmlj
YXRpb246IGF2YWlsYWJpbGl0eSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIiVzIiwg
QWxsb3dlZCB2YWx1ZXM6ICVzJyAlIChqc29uWydhdmFpbGFiaWxpdHknXSwgJywgJy5qb2luKGFs
bG93ZWRfYWN0aXZhdGlvbl9zdHJpbmdzKSkpCiAKLSAgICAgICAgc2VsZi5kb21haW5zLmFwcGVu
ZChEb21haW4oanNvblsnZG9tYWluJ10sIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICcnKSwganNv
bi5nZXQoJ2ZlYXR1cmVHdWFyZCcpLCBqc29uLmdldCgnYXZhaWxhYmlsaXR5JyksIGlzU3VwcGxl
bWVudGFsLCB0eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCisgICAgICAgIHNlbGYuZG9tYWlucy5h
cHBlbmQoRG9tYWluKGpzb25bJ2RvbWFpbiddLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAnJyks
IGpzb24uZ2V0KCdmZWF0dXJlR3VhcmQnKSwganNvbi5nZXQoJ2F2YWlsYWJpbGl0eScpLCBqc29u
LmdldCgnY2hlY2tQYXJhbWV0ZXJzJyksIGlzU3VwcGxlbWVudGFsLCB0eXBlcywgY29tbWFuZHMs
IGV2ZW50cykpCiAKICAgICBkZWYgcGFyc2VfdHlwZV9kZWNsYXJhdGlvbihzZWxmLCBqc29uKToK
ICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWydpZCcsICd0eXBlJ10sIGpz
b24sICJ0eXBlIikKQEAgLTQ2NCwxMiArNDY0LDEzIEBAIGNsYXNzIFByb3RvY29sOgogCiAKIGNs
YXNzIERvbWFpbjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluX25hbWUsIGRlc2NyaXB0
aW9uLCBmZWF0dXJlX2d1YXJkLCBhdmFpbGFiaWxpdHksIGlzU3VwcGxlbWVudGFsLCB0eXBlX2Rl
Y2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRv
bWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwgZmVhdHVyZV9ndWFyZCwgYXZhaWxhYmlsaXR5LCBjaGVj
a19wYXJhbWV0ZXJzLCBpc1N1cHBsZW1lbnRhbCwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRz
LCBldmVudHMpOgogICAgICAgICBzZWxmLmRvbWFpbl9uYW1lID0gZG9tYWluX25hbWUKICAgICAg
ICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCiAgICAgICAgIHNlbGYuZmVhdHVyZV9n
dWFyZCA9IGZlYXR1cmVfZ3VhcmQKICAgICAgICAgc2VsZi5hdmFpbGFiaWxpdHkgPSBhdmFpbGFi
aWxpdHkKICAgICAgICAgc2VsZi5pc19zdXBwbGVtZW50YWwgPSBpc1N1cHBsZW1lbnRhbAorICAg
ICAgICBzZWxmLmNoZWNrX3BhcmFtZXRlcnMgPSBjaGVja19wYXJhbWV0ZXJzCiAgICAgICAgIHNl
bGYudHlwZV9kZWNsYXJhdGlvbnMgPSB0eXBlX2RlY2xhcmF0aW9ucwogICAgICAgICBzZWxmLmNv
bW1hbmRzID0gY29tbWFuZHMKICAgICAgICAgc2VsZi5ldmVudHMgPSBldmVudHMKQEAgLTQ4OSw3
ICs0OTAsNyBAQCBjbGFzcyBEb21haW46CiAKIAogY2xhc3MgRG9tYWluczoKLSAgICBHTE9CQUwg
PSBEb21haW4oIiIsICJUaGUgZ2xvYmFsIGRvbWFpbiwgaW4gd2hpY2ggcHJpbWl0aXZlIHR5cGVz
IGFyZSBpbXBsaWNpdGx5IGRlY2xhcmVkLiIsIE5vbmUsIE5vbmUsIFRydWUsIFtdLCBbXSwgW10p
CisgICAgR0xPQkFMID0gRG9tYWluKCIiLCAiVGhlIGdsb2JhbCBkb21haW4sIGluIHdoaWNoIHBy
aW1pdGl2ZSB0eXBlcyBhcmUgaW1wbGljaXRseSBkZWNsYXJlZC4iLCBOb25lLCBOb25lLCBOb25l
LCBUcnVlLCBbXSwgW10sIFtdKQogCiAKIGNsYXNzIFR5cGVEZWNsYXJhdGlvbjoKQEAgLTUwNSw2
ICs1MDYsNyBAQCBjbGFzcyBUeXBlRGVjbGFyYXRpb246CiAgICAgZGVmIHJlc29sdmVfdHlwZV9y
ZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgogICAgICAgICBsb2cuZGVidWcoIj4+
IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHR5cGUgZGVjbGFyYXRpb246ICVzIiAlIHNl
bGYudHlwZV9uYW1lKQogICAgICAgICBzZWxmLnR5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9m
b3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluKQorICAgICAgICBzZWxmLmRvbWFpbiA9IGRvbWFp
bgogICAgICAgICBmb3IgbWVtYmVyIGluIHNlbGYudHlwZV9tZW1iZXJzOgogICAgICAgICAgICAg
bWVtYmVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21haW4pCiAKQEAgLTUy
Miw2ICs1MjQsNyBAQCBjbGFzcyBUeXBlTWVtYmVyOgogICAgIGRlZiByZXNvbHZlX3R5cGVfcmVm
ZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKICAgICAgICAgbG9nLmRlYnVnKCI+Pj4g
UmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgdHlwZSBtZW1iZXI6ICVzIiAlIHNlbGYubWVt
YmVyX25hbWUpCiAgICAgICAgIHNlbGYudHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVy
ZW5jZShzZWxmLnR5cGVfcmVmLCBkb21haW4pCisgICAgICAgIHNlbGYuZG9tYWluID0gZG9tYWlu
CiAKIAogY2xhc3MgUGFyYW1ldGVyOgpAQCAtNTQ4LDYgKzU1MSw4IEBAIGNsYXNzIENvbW1hbmQ6
CiAgICAgICAgIHNlbGYuaXNfYXN5bmMgPSBpc19hc3luYwogCiAgICAgZGVmIHJlc29sdmVfdHlw
ZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBzZWxmLmRvbWFp
biA9IGRvbWFpbgorCiAgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJl
bmNlcyBmb3IgY2FsbCBwYXJhbWV0ZXJzIGluIGNvbW1hbmQ6ICVzIiAlIHNlbGYuY29tbWFuZF9u
YW1lKQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHNlbGYuY2FsbF9wYXJhbWV0ZXJzOgogICAg
ICAgICAgICAgcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21h
aW4pCkBAIC01NjQsNiArNTY5LDggQEAgY2xhc3MgRXZlbnQ6CiAgICAgICAgIHNlbGYuZGVzY3Jp
cHRpb24gPSBkZXNjcmlwdGlvbgogCiAgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNl
bGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBzZWxmLmRvbWFpbiA9IGRvbWFpbgorCiAg
ICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1l
dGVycyBpbiBldmVudDogJXMiICUgc2VsZi5ldmVudF9uYW1lKQogICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIHNlbGYuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgIHBhcmFtZXRlci5yZXNv
bHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3Iu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpj
X2dlbmVyYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Yzc1NGJlMzE0MTIxMWNkY2QzNzEyY2E3N2UwYWIz
NjI2Yjk3MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkKQEAgLTAsMCArMSw1MDEgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3Is
IHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcworCitsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitkZWYgam9pbl90eXBlX2FuZF9uYW1lKHR5cGVf
c3RyLCBuYW1lX3N0cik6CisgICAgaWYgdHlwZV9zdHIuZW5kc3dpdGgoJyonKToKKyAgICAgICAg
cmV0dXJuIHR5cGVfc3RyICsgbmFtZV9zdHIKKyAgICByZXR1cm4gdHlwZV9zdHIgKyAnICcgKyBu
YW1lX3N0cgorCisKK2RlZiBzdHJpcF9ibG9ja19jb21tZW50X21hcmtlcnMoc3RyKToKKyAgICBy
ZXR1cm4gc3RyLnJlcGxhY2UoJy8qJywgJycpLnJlcGxhY2UoJyovJywgJycpCisKKworZGVmIHJl
bW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIoc3RyLCBwb3NzaWJsZV9kdXBsaWNhdGUpOgorICAgIHJl
dHVybiBzdHIucmVwbGFjZShwb3NzaWJsZV9kdXBsaWNhdGUgKyBwb3NzaWJsZV9kdXBsaWNhdGUs
IHBvc3NpYmxlX2R1cGxpY2F0ZSkKKworCitfT0JKQ19JREVOVElGSUVSX1JFTkFNRV9NQVAgPSB7
CisgICAgJ3RoaXMnOiAndGhpc09iamVjdCcsICAjIERlYnVnZ2VyLkNhbGxGcmFtZS50aGlzCisg
ICAgJ2Rlc2NyaXB0aW9uJzogJ3N0cmluZ1JlcHJlc2VudGF0aW9uJywgICMgUnVudGltZS5SZW1v
dGVPYmplY3QuZGVzY3JpcHRpb24KKyAgICAnaWQnOiAnaWRlbnRpZmllcicsICAjIFBhZ2UuRnJh
bWUuaWQsIFJ1bnRpbWUuRXhlY3V0aW9uQ29udGV4dERlc2NyaXB0aW9uLmlkLCBEZWJ1Z2dlci5C
cmVha3BvaW50QWN0aW9uLmlkCit9CisKK19PQkpDX0lERU5USUZJRVJfUkVWRVJTRV9SRU5BTUVf
TUFQID0gZGljdCgodiwgaykgZm9yIGssIHYgaW4gX09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQ
Lml0ZXJpdGVtcygpKQorCisKK2NsYXNzIE9iakNUeXBlQ2F0ZWdvcnk6CisgICAgU2ltcGxlID0g
MAorICAgIFN0cmluZyA9IDEKKyAgICBPYmplY3QgPSAyCisgICAgQXJyYXkgPSAzCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNhdGVnb3J5X2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAg
aWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKKyAgICAgICAgICAgIGlmIF90
eXBlLnJhd19uYW1lKCkgaXMgJ3N0cmluZyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9iakNU
eXBlQ2F0ZWdvcnkuU3RyaW5nCisgICAgICAgICAgICBpZiAgX3R5cGUucmF3X25hbWUoKSBpbiBb
J29iamVjdCcsICdhbnknXToKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29y
eS5PYmplY3QKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ2FycmF5JzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5BcnJheQorICAgICAgICAgICAg
cmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90
eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5P
YmplY3QKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAg
ICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXkKKyAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRl
Z29yeS5jYXRlZ29yeV9mb3JfdHlwZShfdHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGlmIChp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBl
Q2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisgICAgICAg
IHJldHVybiBOb25lCisKKworCisjIFRoaXMgY2xhc3MgY29udGFpbnMgZXh0cmEgc3RhdGljIG1l
dGhvZHMgdXNlZCBmb3IgZ2VuZXJhdGlvbiwgYnV0IGRvZXMKKyMgbm90IHBhcnRpY2lwYXRlIGlu
IGFueSBpbmhlcml0YW5jZSBoaWVyYXJjaHkuIEZpbGUgZ2VuZXJhdG9ycyBzaG91bGQKKyMgZXh0
ZW5kIHRoZSBnZW5lcmljICJHZW5lcmF0b3IiIGNsYXNzIGluc3RlYWQuCitjbGFzcyBPYmpDR2Vu
ZXJhdG9yOgorICAgIE9CSkNfUFJFRklYID0gJ1JXSVByb3RvY29sJworICAgIE9CSkNfSlNPTl9P
QkpFQ1RfQkFTRSA9ICclc0pTT05PYmplY3QnICUgT0JKQ19QUkVGSVgKKworICAgICMgQWRqdXN0
IGlkZW50aWZpZXIgbmFtZXMgdGhhdCBjb2xsaWRlIHdpdGggT2JqQyBrZXl3b3Jkcy4KKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobmFt
ZSk6CisgICAgICAgIHJldHVybiBfT0JKQ19JREVOVElGSUVSX1JFTkFNRV9NQVAuZ2V0KG5hbWUs
IG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfaWRlbnRpZmllcl90b19p
ZGVudGlmaWVyKG5hbWUpOgorICAgICAgICByZXR1cm4gX09CSkNfSURFTlRJRklFUl9SRVZFUlNF
X1JFTkFNRV9NQVAuZ2V0KG5hbWUsIG5hbWUpCisKKyAgICAjIEdlbmVyYXRlIE9iakMgdHlwZXMs
IGNvbW1hbmQgaGFuZGxlcnMsIGFuZCBldmVudCBkaXNwYXRjaGVycyBmb3IgYSBzdWJzZXQgb2Yg
ZG9tYWlucy4KKworICAgIERPTUFJTlNfVE9fR0VORVJBVEUgPSBbJ0NTUycsICdET00nLCAnRE9N
U3RvcmFnZScsICdOZXR3b3JrJywgJ1BhZ2UnXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihtb2RlbCk6CisgICAgICAgIGRl
ZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzKGRvbWFpbik6CisgICAgICAgICAgICBpZiBt
b2RlbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgorICAgICAgICAgICAgICAgIHJldHVy
biBUcnVlCisgICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5ET01BSU5T
X1RPX0dFTkVSQVRFKQorICAgICAgICAgICAgd2hpdGVsaXN0LnVwZGF0ZShzZXQoWydDb25zb2xl
JywgJ0RlYnVnZ2VyJywgJ1J1bnRpbWUnXSkpCisgICAgICAgICAgICByZXR1cm4gZG9tYWluLmRv
bWFpbl9uYW1lIGluIHdoaXRlbGlzdAorICAgICAgICByZXR1cm4gc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl90eXBlcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVf
ZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIobW9kZWwpOgorICAgICAgICBkZWYgc2hvdWxk
X2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXIoZG9tYWluKToKKyAgICAgICAgICAgIGlm
IG1vZGVsLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6CisgICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKKyAgICAgICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJ
TlNfVE9fR0VORVJBVEUpCisgICAgICAgICAgICByZXR1cm4gZG9tYWluLmRvbWFpbl9uYW1lIGlu
IHdoaXRlbGlzdAorICAgICAgICByZXR1cm4gc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5k
X2hhbmRsZXIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihtb2RlbCk6CisgICAgICAgIGRlZiBzaG91bGRf
Z2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXIoZG9tYWluKToKKyAgICAgICAgICAgIGlm
IG1vZGVsLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6CisgICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKKyAgICAgICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJ
TlNfVE9fR0VORVJBVEUpCisgICAgICAgICAgICB3aGl0ZWxpc3QuYWRkKCdDb25zb2xlJykKKyAg
ICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0CisgICAgICAg
IHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXIKKworICAgICMg
T2JqQyBlbnVtIGFuZCB0eXBlIG5hbWVzLgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBv
YmpjX25hbWVfZm9yX3R5cGUodHlwZSk6CisgICAgICAgIG5hbWUgPSB0eXBlLnF1YWxpZmllZF9u
YW1lKCkucmVwbGFjZSgnLicsICcnKQorICAgICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9m
cm9tX3N0cihuYW1lLCB0eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUpCisgICAgICAgIHJl
dHVybiAnJXMlcycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX2Rl
Y2xhcmF0aW9uKGRlY2xhcmF0aW9uKToKKyAgICAgICAgZG9tYWluX25hbWUgPSBkZWNsYXJhdGlv
bi50eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUKKyAgICAgICAgbmFtZSA9ICclcyVzJyAl
IChkb21haW5fbmFtZSwgZGVjbGFyYXRpb24udHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBuYW1l
ID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBkb21haW5fbmFtZSkKKyAgICAgICAg
cmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1f
bWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBkb21haW5fbmFtZSA9IG1lbWJl
ci50eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUKKyAgICAgICAgbmFtZSA9ICclcyVzJXMn
ICUgKGRvbWFpbl9uYW1lLCBkZWNsYXJhdGlvbi50eXBlLnJhd19uYW1lKCksIHVjZmlyc3QobWVt
YmVyLm1lbWJlcl9uYW1lKSkKKyAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9z
dHIobmFtZSwgZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiAnJXMlcycgJSAoT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2Jq
Y19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29y
X2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAgICAgZG9tYWluX25hbWUgPSBkb21haW4u
ZG9tYWluX25hbWUKKyAgICAgICAgbmFtZSA9ICclcyVzJXMnICUgKGRvbWFpbl9uYW1lLCB1Y2Zp
cnN0KGV2ZW50X29yX2NvbW1hbmRfbmFtZSksIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lKSkKKyAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIobmFtZSwgZG9t
YWluX25hbWUpCisgICAgICAgIHJldHVybiAnJXMlcycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BS
RUZJWCwgbmFtZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19lbnVtX25hbWVf
Zm9yX25vbl9hbm9ueW1vdXNfZW51bShfdHlwZSk6CisgICAgICAgIGRvbWFpbl9uYW1lID0gX3R5
cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZQorICAgICAgICBuYW1lID0gX3R5cGUucXVhbGlm
aWVkX25hbWUoKS5yZXBsYWNlKCcuJywgJycpCisgICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGlj
YXRlX2Zyb21fc3RyKG5hbWUsIGRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gJyVzJXMnICUg
KE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUpCisKKyAgICAjIE1pc2NlbGxhbmVvdXMg
bmFtZSBoYW5kbGluZy4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdmFyaWFibGVfbmFt
ZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICBkb21haW5fbmFtZSA9IGRvbWFp
bi5kb21haW5fbmFtZQorICAgICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdET00nKToK
KyAgICAgICAgICAgIHJldHVybiAnZG9tJyArIGRvbWFpbl9uYW1lWzM6XQorICAgICAgICBpZiBk
b21haW5fbmFtZS5zdGFydHN3aXRoKCdDU1MnKToKKyAgICAgICAgICAgIHJldHVybiAnY3NzJyAr
IGRvbWFpbl9uYW1lWzM6XQorICAgICAgICByZXR1cm4gZG9tYWluX25hbWVbOjFdLmxvd2VyKCkg
KyBkb21haW5fbmFtZVsxOl0KKworICAgICMgVHlwZSBiYXNpY3MuCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIG9iamNfYWNjZXNzb3JfdHlwZV9mb3JfcmF3X25hbWUocmF3X25hbWUpOgor
ICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ3N0cmluZycsICdhcnJheSddOgorICAgICAgICAgICAg
cmV0dXJuICdjb3B5JworICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2ludGVnZXInLCAnbnVtYmVy
JywgJ2Jvb2xlYW4nXToKKyAgICAgICAgICAgIHJldHVybiAnYXNzaWduJworICAgICAgICBpZiBy
YXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAncmV0YWlu
JworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpj
X3R5cGVfZm9yX3Jhd19uYW1lKHJhd19uYW1lKToKKyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ3N0
cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ05TU3RyaW5nIConCisgICAgICAgIGlmIHJhd19u
YW1lIGlzICdhcnJheSc6CisgICAgICAgICAgICByZXR1cm4gJ05TQXJyYXkgKicKKyAgICAgICAg
aWYgcmF3X25hbWUgaXMgJ2ludGVnZXInOgorICAgICAgICAgICAgcmV0dXJuICdOU0ludGVnZXIn
CisgICAgICAgIGlmIHJhd19uYW1lIGlzICdudW1iZXInOgorICAgICAgICAgICAgcmV0dXJuICdk
b3VibGUnCisgICAgICAgIGlmIHJhd19uYW1lIGlzICdib29sZWFuJzoKKyAgICAgICAgICAgIHJl
dHVybiAnQk9PTCcKKyAgICAgICAgaWYgcmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0J106Cisg
ICAgICAgICAgICByZXR1cm4gJyVzIConICUgT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNU
X0JBU0UKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
b2JqY19jbGFzc19mb3JfcmF3X25hbWUocmF3X25hbWUpOgorICAgICAgICBpZiByYXdfbmFtZSBp
cyAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiAnTlNTdHJpbmcnCisgICAgICAgIGlmIHJh
d19uYW1lIGlzICdhcnJheSc6CisgICAgICAgICAgICByZXR1cm4gJ05TQXJyYXknCisgICAgICAg
IGlmIHJhd19uYW1lIGluIFsnaW50ZWdlcicsICdudW1iZXInLCAnYm9vbGVhbiddOgorICAgICAg
ICAgICAgcmV0dXJuICdOU051bWJlcicKKyAgICAgICAgaWYgcmF3X25hbWUgaW4gWydhbnknLCAn
b2JqZWN0J106CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05fT0JK
RUNUX0JBU0UKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgRklYTUU6IENhbiB0aGVzZSBw
cm90b2NvbF90eXBlIGZ1bmN0aW9ucyBiZSByZW1vdmVkIGluIGZhdm9yIG9mIEMrKyBnZW5lcmF0
b3JzIGZ1bmN0aW9ucz8KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvdG9jb2xfdHlw
ZV9mb3JfcmF3X25hbWUocmF3X25hbWUpOgorICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3RyaW5n
JzoKKyAgICAgICAgICAgIHJldHVybiAnU3RyaW5nJworICAgICAgICBpZiByYXdfbmFtZSBpcyAn
aW50ZWdlcic6CisgICAgICAgICAgICByZXR1cm4gJ2ludCcKKyAgICAgICAgaWYgcmF3X25hbWUg
aXMgJ251bWJlcic6CisgICAgICAgICAgICByZXR1cm4gJ2RvdWJsZScKKyAgICAgICAgaWYgcmF3
X25hbWUgaXMgJ2Jvb2xlYW4nOgorICAgICAgICAgICAgcmV0dXJuICdib29sJworICAgICAgICBp
ZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAnSW5z
cGVjdG9yT2JqZWN0JworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBwcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAgaWYgKGlzaW5z
dGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFs
aWFzZWRfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkp
OgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfcmF3
X25hbWUoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVu
dW1UeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBl
X2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3Rv
Y29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJh
d19uYW1lKCkpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKKyAg
ICAgICAgICAgIHN1Yl90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBl
KF90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8JXM+JyAlIHN1Yl90eXBlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfY2xhc3NfZm9yX3R5cGUoX3R5cGUpOgorICAgICAg
ICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmlt
aXRpdmVUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNz
X2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNf
Y2xhc3NfZm9yX3Jhd19uYW1lKF90eXBlLnByaW1pdGl2ZV90eXBlLnJhd19uYW1lKCkpCisgICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1
cm4gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIChp
c2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHN1Yl90eXBlID0gc3Ry
aXBfYmxvY2tfY29tbWVudF9tYXJrZXJzKE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlw
ZShfdHlwZS5lbGVtZW50X3R5cGUpKQorICAgICAgICAgICAgcmV0dXJuICdOU0FycmF5Lyo8JXM+
Ki8nICUgc3ViX3R5cGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXIobWVtYmVyKToKKyAgICAgICAg
cmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXJfaW50ZXJu
YWwobWVtYmVyLnR5cGUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfYWNjZXNz
b3JfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBlKToKKyAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgor
ICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9y
YXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
RW51bVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnYXNzaWduJworICAgICAgICBpZiAoaXNp
bnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdyZXRhaW4n
CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAg
IHJldHVybiAnY29weScKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgb2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcik6CisgICAg
ICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKG1l
bWJlci50eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBvYmpjX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbChfdHlwZSwgZGVjbGFyYXRpb24sIG1l
bWJlcik6CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgorICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJh
dG9yLm9iamNfdHlwZV9mb3JfcmF3X25hbWUoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYg
KGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICBpZiAoX3R5cGUuaXNf
YW5vbnltb3VzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2Vu
dW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisg
ICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fu
b255bW91c19lbnVtKF90eXBlKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0
VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90
eXBlKF90eXBlKSArICcgKicKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlw
ZSkpOgorICAgICAgICAgICAgc3ViX3R5cGUgPSBzdHJpcF9ibG9ja19jb21tZW50X21hcmtlcnMo
T2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gJ05TQXJyYXkvKjwlcz4qLyAqJyAlIHN1Yl90eXBlCisgICAgICAg
IHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfdHlwZV9mb3Jf
cGFyYW0oZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlciwgcmVzcGVjdF9v
cHRpb25hbD1UcnVlKToKKyAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5
cGVfZm9yX3BhcmFtX2ludGVybmFsKHBhcmFtZXRlci50eXBlLCBkb21haW4sIGV2ZW50X29yX2Nv
bW1hbmRfbmFtZSwgcGFyYW1ldGVyKQorICAgICAgICBpZiByZXNwZWN0X29wdGlvbmFsIGFuZCBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBpZiBvYmpjX3R5cGUuZW5kc3dpdGgo
JyonKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqY190eXBlICsgJyonCisgICAgICAgICAg
ICByZXR1cm4gb2JqY190eXBlICsgJyAqJworICAgICAgICByZXR1cm4gb2JqY190eXBlCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfdHlwZV9mb3JfcGFyYW1faW50ZXJuYWwoX3R5
cGUsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgorICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIF90eXBlID0g
X3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRp
dmVUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9y
X3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAg
ICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1v
dXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRl
cikKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9u
b25fYW5vbnltb3VzX2VudW0oX3R5cGUpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVf
Zm9yX3R5cGUoX3R5cGUpICsgJyAqJworICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJy
YXlUeXBlKSk6CisgICAgICAgICAgICBzdWJfdHlwZSA9IHN0cmlwX2Jsb2NrX2NvbW1lbnRfbWFy
a2VycyhPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBl
KSkKKyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheS8qPCVzPiovIConICUgc3ViX3R5cGUKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgT2JqQyA8LT4gUHJvdG9jb2wgY29udmVyc2lvbiBm
b3IgY29tbWFuZHMgYW5kIGV2ZW50cy4KKyAgICAjICAgLSBjb252ZXJ0IGEgY29tbWFuZCBjYWxs
IHBhcmFtZXRlciByZWNlaXZlZCBmcm9tIFByb3RvY29sIHRvIE9iakMgZm9yIGhhbmRsZXIKKyAg
ICAjICAgLSBjb252ZXJ0IGEgY29tbWFuZCByZXR1cm4gcGFyYW1ldGVyIGluIGNhbGxiYWNrIGJs
b2NrIGZyb20gT2JqQyB0byBQcm90b2NvbCB0byBzZW5kCisgICAgIyAgIC0gY29udmVydCBhbiBl
dmVudCBwYXJhbWV0ZXIgZnJvbSBPYmpDIEFQSSB0byBQcm90b2NvbCB0byBzZW5kCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25fZm9y
X3ZhcmlhYmxlKHZhcl90eXBlLCB2YXJfbmFtZSk6CisgICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5
cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZSh2YXJfdHlwZSkKKyAgICAgICAgaWYgY2F0ZWdv
cnkgaW4gW09iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZ106
CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICd0b1Byb3RvY29sU3RyaW5nKCVzKScgJSB2YXJfbmFtZQorICAgICAg
ICAgICAgcmV0dXJuIHZhcl9uYW1lCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0
ZWdvcnkuT2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuICdbJXMgdG9JbnNwZWN0b3JPYmplY3Rd
JyAlIHZhcl9uYW1lCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuQXJy
YXk6CisgICAgICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90
eXBlX2Zvcl90eXBlKHZhcl90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgIG9iamNfY2xh
c3MgPSBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUodmFyX3R5cGUuZWxlbWVudF90
eXBlKQorICAgICAgICAgICAgaWYgcHJvdG9jb2xfdHlwZSBpcyAnSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JTdHJp
bmdBcnJheUFycmF5KCVzKScgJSB2YXJfbmFtZQorICAgICAgICAgICAgaWYgcHJvdG9jb2xfdHlw
ZSBpcyAnU3RyaW5nJyBhbmQgb2JqY19jbGFzcyBpcyAnTlNTdHJpbmcnOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnaW5zcGVjdG9yU3RyaW5nQXJyYXkoJXMpJyAlIHZhcl9uYW1lCisgICAgICAg
ICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdpbnQnIGFuZCBvYmpjX2NsYXNzIGlzICdOU051bWJl
cic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JJbnRlZ2VyQXJyYXkoJXMpJyAl
IHZhcl9uYW1lCisgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdkb3VibGUnIGFuZCBv
YmpjX2NsYXNzIGlzICdOU051bWJlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0
b3JEb3VibGVBcnJheSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIHJldHVybiAnaW5zcGVj
dG9yT2JqZWN0QXJyYXkoJXMpJyAlIHZhcl9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIG9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX21lbWJlcihuYW1lLCBkZWNs
YXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51
bVR5cGUpOgorICAgICAgICAgICAgaWYgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5l
cmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihkZWNsYXJhdGlv
biwgbWVtYmVyKSwgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5n
PCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1v
dXNfZW51bShtZW1iZXIudHlwZSksIG5hbWUpCisgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9y
Lm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKG1lbWJlci50eXBl
LCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3Byb3RvY29sX2ltcG9y
dF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0ZXIobmFtZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5k
X25hbWUsIHBhcmFtZXRlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUs
IEVudW1UeXBlKToKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoK
KyAgICAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChP
YmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIo
ZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIG5hbWUpCisgICAgICAg
ICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJhdG9y
Lm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0ocGFyYW1ldGVyLnR5cGUpLCBu
YW1lKQorICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2ltcG9ydF9l
eHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgbmFtZSkKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgb2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFy
aWFibGUodmFyX3R5cGUsIHZhcl9uYW1lKToKKyAgICAgICAgY2F0ZWdvcnkgPSBPYmpDVHlwZUNh
dGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKHZhcl90eXBlKQorICAgICAgICBpZiBjYXRlZ29yeSBp
biBbT2JqQ1R5cGVDYXRlZ29yeS5TaW1wbGUsIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nXToKKyAg
ICAgICAgICAgIHJldHVybiB2YXJfbmFtZQorICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlw
ZUNhdGVnb3J5Lk9iamVjdDoKKyAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2VuZXJhdG9y
Lm9iamNfY2xhc3NfZm9yX3R5cGUodmFyX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1tbWyVz
IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDolc10gYXV0b3JlbGVhc2VdJyAlIChvYmpj
X2NsYXNzLCB2YXJfbmFtZSkKKyAgICAgICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29y
eS5BcnJheToKKyAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9iamNfY2xh
c3NfZm9yX3R5cGUodmFyX3R5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgaWYgb2JqY19j
bGFzcyBpcyAnTlNTdHJpbmcnOgorICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY1N0cmluZ0Fy
cmF5KCVzKScgJSB2YXJfbmFtZQorICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNOdW1i
ZXInOiAgIyBGSVhNRTogSW50ZWdlciBvciBEb3VibGU/CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdvYmpjSW50ZWdlckFycmF5KCVzKScgJSB2YXJfbmFtZQorICAgICAgICAgICAgcmV0dXJuICdv
YmpjQXJyYXk8JXM+KCVzKScgJSAob2JqY19jbGFzcywgdmFyX25hbWUpCisKKyAgICAjIE9iakMg
PC0+IEpTT04gb2JqZWN0IGNvbnZlcnNpb24gZm9yIHR5cGVzIGdldHRlcnMvc2V0dGVycy4KKyAg
ICAjICAgLSBjb252ZXJ0IGEgbWVtYmVyIHNldHRlciBmcm9tIE9iakMgQVBJIHRvIEpTT04gb2Jq
ZWN0IHNldHRlcgorICAgICMgICAtIGNvbnZlcnQgYSBtZW1iZXIgZ2V0dGVyIGZyb20gSlNPTiBv
YmplY3QgdG8gT2JqQyBBUEkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY190b19w
cm90b2NvbF9leHByZXNzaW9uX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciwgc3ViX2V4
cHJlc3Npb24pOgorICAgICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlf
Zm9yX3R5cGUobWVtYmVyLnR5cGUpCisgICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpDVHlwZUNh
dGVnb3J5LlNpbXBsZSwgT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmddOgorICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHJldHVy
biAndG9Qcm90b2NvbFN0cmluZyglcyknICUgc3ViX2V4cHJlc3Npb24KKyAgICAgICAgICAgIHJl
dHVybiBzdWJfZXhwcmVzc2lvbgorICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVn
b3J5Lk9iamVjdDoKKyAgICAgICAgICAgIHJldHVybiBzdWJfZXhwcmVzc2lvbgorICAgICAgICBp
ZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgorICAgICAgICAgICAgb2JqY19j
bGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShtZW1iZXIudHlwZS5lbGVt
ZW50X3R5cGUpCisgICAgICAgICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU1N0cmluZyc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JTdHJpbmdBcnJheSglcyknICUgc3ViX2V4cHJl
c3Npb24KKyAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKKyAgICAgICAg
ICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90
eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgICAgICBpZiBwcm90b2Nv
bF90eXBlIGlzICdkb3VibGUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3Rv
ckRvdWJsZUFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgIHJldHVy
biAnaW5zcGVjdG9ySW50ZWdlckFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAg
ICAgcmV0dXJuICdpbnNwZWN0b3JPYmplY3RBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvdG9jb2xfdG9fb2JqY19leHByZXNzaW9uX2Zv
cl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciwgc3ViX2V4cHJlc3Npb24pOgorICAgICAgICBj
YXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUobWVtYmVyLnR5cGUp
CisgICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZSwgT2JqQ1R5
cGVDYXRlZ29yeS5TdHJpbmddOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIGlmIG1lbWJlci50eXBlLmlzX2Fub255bW91
czoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVz
KScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVt
YmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpLCBzdWJfZXhwcmVzc2lvbikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJhdG9yLm9i
amNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0obWVtYmVyLnR5cGUpLCBzdWJfZXhw
cmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBzdWJfZXhwcmVzc2lvbgorICAgICAgICBpZiBj
YXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdDoKKyAgICAgICAgICAgIG9iamNfdHlw
ZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJl
cikKKyAgICAgICAgICAgIHJldHVybiAnKCVzKSVzJyAlIChvYmpjX3R5cGUsIHN1Yl9leHByZXNz
aW9uKQorICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgorICAg
ICAgICAgICAgcHJvdG9jb2xfdHlwZSA9IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShtZW1iZXIudHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICBvYmpjX2NsYXNzID0g
T2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlw
ZSkKKyAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TU3RyaW5nJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ29iamNTdHJpbmdBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KKyAgICAg
ICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKKyAgICAgICAgICAgICAgICBwcm90
b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1lbWJlci50
eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdk
b3VibGUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNEb3VibGVBcnJheSglcykn
ICUgc3ViX2V4cHJlc3Npb24KKyAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNJbnRlZ2VyQXJy
YXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCisgICAgICAgICAgICByZXR1cm4gJ29iamNBcnJheTwl
cz4oJXMpJyAlIChvYmpjX2NsYXNzLCBzdWJfZXhwcmVzc2lvbikKKworICAgICMgSlNPTiBvYmpl
Y3Qgc2V0dGVyL2dldHRlciBzZWxlY3RvcnMgZm9yIHR5cGVzLgorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBvYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVt
YmVyKToKKyAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19zZXR0ZXJfbWV0aG9kX2Zv
cl9tZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfc2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyX2lu
dGVybmFsKF90eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgor
ICAgICAgICAgICAgcmF3X25hbWUgPSBfdHlwZS5yYXdfbmFtZSgpCisgICAgICAgICAgICBpZiBy
YXdfbmFtZSBpcyAnYm9vbGVhbic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRCb29sJwor
ICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2ludGVnZXInOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnc2V0SW50ZWdlcicKKyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdudW1iZXInOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnc2V0RG91YmxlJworICAgICAgICAgICAgaWYgcmF3X25h
bWUgaXMgJ3N0cmluZyc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRTdHJpbmcnCisgICAg
ICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ3NldE9iamVjdCcKKyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdhcnJheSc6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnNwZWN0b3JBcnJheScKKyAgICAgICAgICAg
IHJldHVybiBOb25lCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgor
ICAgICAgICAgICAgcmV0dXJuICdzZXRTdHJpbmcnCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90
eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ3NldE9iamVjdCcKKyAgICAg
ICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJu
ICdzZXRJbnNwZWN0b3JBcnJheScKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgb2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24s
IG1lbWJlcik6CisgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZ2V0dGVyX21ldGhv
ZF9mb3JfbWVtYmVyX2ludGVybmFsKG1lbWJlci50eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2dldHRlcl9tZXRob2RfZm9yX21lbWJl
cl9pbnRlcm5hbChfdHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcik6CisgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5h
bGlhc2VkX3R5cGUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
KToKKyAgICAgICAgICAgIHJhd19uYW1lID0gX3R5cGUucmF3X25hbWUoKQorICAgICAgICAgICAg
aWYgcmF3X25hbWUgaXMgJ2Jvb2xlYW4nOgorICAgICAgICAgICAgICAgIHJldHVybiAnYm9vbEZv
cktleScKKyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ2ludGVnZXJGb3JLZXknCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAn
bnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2RvdWJsZUZvcktleScKKyAgICAgICAg
ICAgIGlmIHJhd19uYW1lIGlzICdzdHJpbmcnOgorICAgICAgICAgICAgICAgIHJldHVybiAnc3Ry
aW5nRm9yS2V5JworICAgICAgICAgICAgaWYgcmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0J106
CisgICAgICAgICAgICAgICAgcmV0dXJuICdvYmplY3RGb3JLZXknCisgICAgICAgICAgICBpZiBy
YXdfbmFtZSBpcyAnYXJyYXknOgorICAgICAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yQXJy
YXlGb3JLZXknCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiAoaXNpbnN0YW5j
ZShfdHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnc3RyaW5nRm9yS2V5Jwor
ICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAg
cmV0dXJuICdvYmplY3RGb3JLZXknCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJh
eVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yQXJyYXlGb3JLZXknCisgICAg
ICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvcl90
ZW1wbGF0ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTczNWU2ZDk1NTAxMGE4NDAyMzUwNDQyMTc4ODIzMDQy
NzA5OGQzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtMCwwICsx
LDE1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIEdlbmVyYXRvciB0ZW1wbGF0ZXMsIHdoaWNo
IGNhbiBiZSBmaWxsZWQgd2l0aCBzdHJpbmcuVGVtcGxhdGUuCisjIEZvbGxvd2luZyBhcmUgY2xh
c3NlcyB0aGF0IGZpbGwgdGhlIHRlbXBsYXRlcyBmcm9tIHRoZSB0eXBlY2hlY2tlZCBtb2RlbC4K
KworY2xhc3MgT2JqQ0dlbmVyYXRvclRlbXBsYXRlczoKKworICAgIEhlYWRlclByZWx1ZGUgPSAo
CisgICAgIiIiI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyR7aW5jbHVkZXN9
CisiIiIpCisKKyAgICBIZWFkZXJQb3N0bHVkZSA9ICgKKyAgICAiIiIiIiIpCisKKyAgICBDb252
ZXJzaW9uSGVscGVyc1ByZWx1ZGUgPSAoCisgICAgIiIiJHtpbmNsdWRlc30KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7IiIiKQorCisgICAgQ29udmVyc2lvbkhlbHBlcnNQb3N0bHVkZSA9ICgKKyAg
ICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyIiIikKKworICAgIEdlbmVyaWNIZWFkZXJQ
cmVsdWRlID0gKAorICAgICIiIiR7aW5jbHVkZXN9IiIiKQorCisgICAgR2VuZXJpY0hlYWRlclBv
c3RsdWRlID0gKAorICAgICIiIiIiIikKKworICAgIENvbnZlcnNpb25IZWxwZXJzU3RhbmRhcmQg
PSAoCisgICAgIiIidGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBl
IGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpOyIiIikKKworICAgIEJhY2tlbmREaXNw
YXRjaGVySGVhZGVyUHJlbHVkZSA9ICgKKyAgICAiIiIke2luY2x1ZGVzfQorCiske2ZvcndhcmRE
ZWNsYXJhdGlvbnN9CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworIiIiKQorCisgICAgQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJQb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVsdWRl
ID0gKAorICAgICIiIiNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAke3ByaW1hcnlJbmNsdWRl
fQorCiske3NlY29uZGFyeUluY2x1ZGVzfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsiIiIpCisK
KyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCisgICAgIiIi
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisiIiIpCisKKyAgICBJbXBsZW1lbnRhdGlvblByZWx1
ZGUgPSAoCisgICAgIiIiI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICR7cHJpbWFyeUluY2x1
ZGV9CisKKyR7c2Vjb25kYXJ5SW5jbHVkZXN9CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
IiIiKQorCisgICAgSW1wbGVtZW50YXRpb25Qb3N0bHVkZSA9ICgKKyAgICAiIiIiIiIpCisKKyAg
ICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlv
biA9ICgKKyAgICAiIiJjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorJHtjb21tYW5kRGVjbGFyYXRpb25zfQorfTsiIiIpCisK
KyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJPYmpDRGVjbGFyYXRpb24g
PSAoCisgICAgIiIiY2xhc3MgT2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXIoaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVy
PiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ciske2NvbW1hbmREZWNsYXJhdGlv
bnN9Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDwke29iamNQcmVmaXh9JHtkb21haW5OYW1l
fURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbXBsZW1lbnRhdGlvbiA9ICgKKyAgICAiIiJ2b2lkIE9i
akNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OiR7Y29tbWFuZE5hbWV9
KCR7cGFyYW1ldGVyc30pCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQs
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIGVycm9yKTsKKyAgICB9OworCiske3N1Y2Nlc3ND
YWxsYmFja30KKyR7Y29udmVyc2lvbnN9Ciske2ludm9jYXRpb259Cit9CisiIiIpCisKKyAgICBD
b25maWd1cmF0aW9uQ29tbWFuZFByb3BlcnR5ID0gKAorICAgICIiIkBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4sIHNldHRlcj1zZXQke2RvbWFpbk5hbWV9SGFuZGxlcjopIGlkPCR7b2JqY1By
ZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxlcj4gJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFu
ZGxlcjsiIiIpCisKKyAgICBDb25maWd1cmF0aW9uRXZlbnRQcm9wZXJ0eSA9ICgKKyAgICAiIiJA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpICR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9
RG9tYWluRXZlbnREaXNwYXRjaGVyICoke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNo
ZXI7IiIiKQorCisgICAgQ29uZmlndXJhdGlvbkNvbW1hbmRQcm9wZXJ0eUltcGxlbWVudGF0aW9u
ID0gKAorICAgICIiIi0gKHZvaWQpc2V0JHtkb21haW5OYW1lfUhhbmRsZXI6KGlkPCR7b2JqY1By
ZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5k
bGVyID09IF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBbXyR7dmFyaWFibGVOYW1lUHJlZml4fUhhbmRsZXIgcmVsZWFzZV07CisgICAgXyR7dmFy
aWFibGVOYW1lUHJlZml4fUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBh
bHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFn
ZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZUluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIp
LCBXVEY6Om1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hZ2Vu
dFJlZ2lzdHJ5KCkuYXBwZW5kKFdURjo6bW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChp
ZDwke29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkhhbmRsZXI+KSR7dmFyaWFibGVOYW1l
UHJlZml4fUhhbmRsZXIKK3sKKyAgICByZXR1cm4gXyR7dmFyaWFibGVOYW1lUHJlZml4fUhhbmRs
ZXI7Cit9IiIiKQorCisgICAgQ29uZmlndXJhdGlvbkdldHRlckltcGxlbWVudGF0aW9uID0gKAor
ICAgICIiIi0gKCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluRXZlbnREaXNwYXRjaGVy
ICopJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfJHt2
YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfJHt2YXJpYWJsZU5h
bWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyID0gW1ske29iamNQcmVmaXh9JHtkb21haW5OYW1lfURv
bWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVy
XTsKKyAgICByZXR1cm4gXyR7dmFyaWFibGVOYW1lUHJlZml4fUV2ZW50RGlzcGF0Y2hlcjsKK30i
IiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQppbmRleCBiMGM3MmIwYjU5YTA0NmU4ZDMzYjQ2YTU3OWE0N2Q0MDAyYjE1NmJmLi45
ZDkzMWNmZDkxZjU3YmI5NGNiOGExMTI1ZDlmZWRhZDhhNTNhNjgzIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKQEAgLTI0LDcg
KzI0LDcgQEAKICMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAKLSMgVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIEpTIGFuZCBDKysgYmluZGluZ3MgZm9yIHRo
ZSBpbnNwZWN0b3IgcHJvdG9jb2wuCisjIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyBKUywgT2JqZWN0
aXZlIEMsIGFuZCBDKysgYmluZGluZ3MgZm9yIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wuCiAjIEdl
bmVyYXRvcnMgZm9yIGluZGl2aWR1YWwgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGNvZGVnZW4v
IGRpcmVjdG9yeS4KIAogaW1wb3J0IG9zLnBhdGgKQEAgLTQwLDM3ICs0MCwzOSBAQCB0cnk6CiBl
eGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgogCitsb2dn
aW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnLCBsZXZl
bD1sb2dnaW5nLkVSUk9SKQorbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKIHRy
eToKICAgICBmcm9tIGNvZGVnZW4gaW1wb3J0ICoKIAogIyBXaGVuIGNvcHlpbmcgZ2VuZXJhdG9y
IGZpbGVzIHRvIEphdmFTY3JpcHRDb3JlJ3MgcHJpdmF0ZSBoZWFkZXJzIG9uIE1hYywKICMgdGhl
IGNvZGVnZW4vIG1vZHVsZSBkaXJlY3RvcnkgaXMgZmxhdHRlbmVkLiBTbywgaW1wb3J0IGRpcmVj
dGx5LgotZXhjZXB0IEltcG9ydEVycm9yOgorZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgICMg
bG9nLmVycm9yKGUpICMgVW5jb21tZW50IHRoaXMgdG8gZGVidWcgZWFybHkgaW1wb3J0IGVycm9y
cy4KICAgICBpbXBvcnQgbW9kZWxzCiAgICAgZnJvbSBtb2RlbHMgaW1wb3J0ICoKICAgICBmcm9t
IGdlbmVyYXRvciBpbXBvcnQgKgotCi0gICAgZnJvbSBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfYmFja2VuZF9j
b21tYW5kcyBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlciBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlciBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi0gICAgZnJv
bSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlciBpbXBvcnQgKgotICAg
IGZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbiBp
bXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJz
IGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19oZWFkZXIgaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFs
X2hlYWRlciBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1w
bGVtZW50YXRpb24gaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hl
YWRlciBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24gaW1wb3J0ICoKLQotCi1sb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5h
bWUpczogJShtZXNzYWdlKXMnLCBsZXZlbD1sb2dnaW5nLkVSUk9SKQotbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCisgICAgZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCAqCisgICAg
ZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgKgorCisgICAgZnJvbSBnZW5lcmF0ZV9jcHBfYWx0
ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVy
YXRlX2NwcF9iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9jcHBf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorICAgIGZyb20gZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBn
ZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgor
ICAgIGZyb20gZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlciBpbXBvcnQgKgorICAg
IGZyb20gZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uIGltcG9ydCAq
CisgICAgZnJvbSBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0
ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVy
IGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50
YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJz
IGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfaGVhZGVyIGltcG9y
dCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlciBpbXBvcnQgKgorICAg
IGZyb20gZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQg
KgogCiAKICMgQSB3cml0ZXIgdGhhdCBvbmx5IHVwZGF0ZXMgZmlsZSBpZiBpdCBhY3R1YWxseSBj
aGFuZ2VkLgpAQCAtMTMwLDI0ICsxMzIsMjQgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNh
dGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKICAgICBnZW5lcmF0b3Jz
ID0gW10KICAgICBpc190ZXN0ID0gcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVz
dAogICAgIGlmIGlzX3Rlc3Qgb3IgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIG5vdCBGcmFtZXdvcmtz
LldlYkluc3BlY3RvcjoKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlv
bl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tlbmRDb21tYW5kc0dl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJv
bnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKFByb3Rv
Y29sVHlwZXNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9y
KHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmlt
YXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChD
cHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJp
bWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
Q3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZp
Y2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGgpKQogICAgIGlmIGlzX3Rlc3Qgb3IgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZy
YW1ld29ya3MuV2ViSW5zcGVjdG9yOgotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3Rp
dmVDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2
ZUNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmlt
YXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChP
YmplY3RpdmVDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqZWN0
aXZlQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2Jq
ZWN0aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVD
RnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1h
cnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9i
amVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDVHlwZXNJbnRlcm5hbEhl
YWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
KyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKE9iakNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5
X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpD
SGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgp
KQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0
aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQor
ICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCiAKICAgICBzaW5nbGVfb3V0
cHV0X2ZpbGVfY29udGVudHMgPSBbXQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1jaGVja2VkLWluLXBhcmFt
ZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9jb21tYW5kcy13aXRoLWNoZWNrZWQtaW4tcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFj
ODBiMzVkNzFmZTMwYjRkZWNmMDlkODQ0MTc3ZDllYTdiNjAyNGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMt
d2l0aC1jaGVja2VkLWluLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDYxIEBACit7CisgICAg
ImRvbWFpbiI6ICJDaGVja2VkRGF0YWJhc2UiLAorICAgICJjaGVja1BhcmFtZXRlcnMiOiB0cnVl
LAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNl
SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3Jl
ZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJF
cnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2Rl
LiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJv
dGhlckVycm9ycyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJFcnJvciIg
fSwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVu
Q29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6
IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFz
ZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJp
bmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm90aGVyRXJyb3JzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICIkcmVmIjogIkVycm9yIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1jaGVja2VkLWluLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1jaGVja2VkLWluLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTMxMWVjN2I2MjI5NTE5YjU3YmIxYzkyOTZhYmY5MGNmM2EyM2Fm
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWNoZWNrZWQtaW4tcGFyYW1ldGVycy5q
c29uLXJlc3VsdApAQCAtMCwwICsxLDEzNTggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWNoZWNrZWQtaW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBkaXNwYXRjaGVyOyB9CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorcHJpdmF0ZToKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZUluc3BlY3RvckNoZWNrZWRE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVJbnNwZWN0b3JD
aGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBpbnQq
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyogaW5fcXVlcnksIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5f
bm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiogaW5fb3RoZXJFcnJvcnMsIGNvbnN0IFN0cmluZyog
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBp
bl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGlu
X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3Fs
RXJyb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgaW5fb3RoZXJF
cnJvcnMsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgaW5fcHJp
bnRDb2xvcikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtY2hlY2tlZC1pbi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gQ2hlY2tlZERhdGFi
YXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkNoZWNrZWREYXRhYmFzZS5Qcmlt
YXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDaGVja2VkRGF0YWJhc2UuZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0
eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInBheWxvYWQiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQi
LCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNxbEVycm9y
IiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJvdGhlckVy
cm9ycyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic2Ny
ZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjog
InByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0sIFtdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDaGVja2VkRGF0YWJhc2UuZXhlY3V0
ZVNRTFN5bmMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0
aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRp
b25hbCI6IGZhbHNlfSwgeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0Iiwg
Im9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAi
b3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51
bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAi
b2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAib3RoZXJFcnJvcnMiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInByaW50Q29s
b3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbXSk7CitJbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDaGVja2VkRGF0YWJhc2UiKTsKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLWNoZWNrZWQtaW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMu
aCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFs
dGVybmF0ZUluc3BlY3RvckNoZWNrZWREYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBJbnNw
ZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgor
ICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAnc2NyZWVuQ29sb3InIHdoaWxlIGdlbmVyYXRp
bmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgorICAg
IGVudW0gY2xhc3MgU2NyZWVuQ29sb3IgeworICAgICAgICBSZWQgPSAwLAorICAgICAgICBHcmVl
biA9IDEsCisgICAgICAgIEJsdWUgPSAyLAorICAgIH07IC8vIGVudW0gY2xhc3MgU2NyZWVuQ29s
b3IKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVy
YXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgor
ICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBN
YWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAg
IH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcqIGluX3F1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JBcnJheT4qIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBj
b25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBp
bl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3NxbEVycm9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheT4qIGluX290aGVyRXJyb3JzLCBjb25zdCBTdHJpbmcqIGluX3NjcmVl
bkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+
JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVz
dGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVz
LCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9vdGhlckVycm9ycywg
Y29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9y
KSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yQ2hlY2tlZERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBJbnNwZWN0b3JDaGVja2Vk
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JDaGVj
a2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6Cisg
ICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVj
dXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVj
dG9yQ2hlY2tlZERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVj
dG9yQ2hlY2tlZERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZv
aWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVJbnNwZWN0b3JDaGVja2VkRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0
ZUluc3BlY3RvckNoZWNrZWREYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURp
c3BhdGNoZXI7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWNoZWNr
ZWQtaW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIkluc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitJbnNwZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5JbnNwZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7
IH0KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4gSW5zcGVjdG9yQ2hlY2tlZERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckNoZWNr
ZWREYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihi
YWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yQ2hlY2tlZERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckNoZWNrZWREYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVj
dG9yQ2hlY2tlZERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6
IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
KQorICAgICwgbV9hZ2VudChhZ2VudCkKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyAgICAsIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcihudWxscHRyKQorI2VuZGlm
Cit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KEFTQ0lJTGl0ZXJhbCgiQ2hlY2tlZERhdGFiYXNlIiksIHRoaXMpOworfQorCit2b2lkIEluc3Bl
Y3RvckNoZWNrZWREYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzIikKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0g
ImV4ZWN1dGVTUUxTeW5jIikKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCAqbWVzc2Fn
ZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiQ2hlY2tlZERhdGFiYXNlIiwgJy4nLCBtZXRob2Qs
ICInIHdhcyBub3QgZm91bmQiKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2hlY2tlZERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGJv
b2wgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgaW50IGluX2RhdGFiYXNlSWQg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAmZGF0YWJhc2VJZF92YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBxdWVyeV92YWx1ZUZvdW5kID0gZmFsc2U7Cisg
ICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgJnF1ZXJ5X3ZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIGNvbHVtbk5hbWVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29s
dW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksICZjb2x1bW5OYW1lc192YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBub3Rlc192YWx1ZUZvdW5kID0g
ZmFsc2U7CisgICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm5v
dGVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIHRpbWVzdGFtcF92
YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRv
dWJsZT4gaW5fdGltZXN0YW1wID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJs
ZShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICZ0aW1lc3Rh
bXBfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgdmFsdWVzX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGlu
X3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmdmFsdWVzX3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIHBheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2FkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKKyAgICBib29sIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIGludCBpbl9k
YXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgJmRhdGFiYXNlSWRfdmFs
dWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgc3FsRXJyb3JfdmFsdWVGb3Vu
ZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3Fs
RXJyb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmc3FsRXJyb3JfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgb3RoZXJFcnJvcnNfdmFsdWVGb3VuZCA9IGZh
bHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9vdGhlckVycm9y
cyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgib3RoZXJFcnJvcnMiKSwgJm90aGVyRXJyb3JzX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIHNjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBm
YWxzZTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3JlZW5D
b2xvciIpLCAmc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAg
IGJvb2wgcHJpbnRDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIGluX3ByaW50
Q29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksICZwcmludENvbG9yX3ZhbHVlRm91
bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNoZWNrZWREYXRh
YmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmluX2RhdGFi
YXNlSWQgOiBudWxscHRyLCBxdWVyeV92YWx1ZUZvdW5kID8gJmluX3F1ZXJ5IDogbnVsbHB0ciwg
Y29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/ICZpbl9jb2x1bW5OYW1lcyA6IG51bGxwdHIsIG5vdGVz
X3ZhbHVlRm91bmQgPyAmaW5fbm90ZXMgOiBudWxscHRyLCB0aW1lc3RhbXBfdmFsdWVGb3VuZCA/
ICZpbl90aW1lc3RhbXAgOiBudWxscHRyLCB2YWx1ZXNfdmFsdWVGb3VuZCA/ICZpbl92YWx1ZXMg
OiBudWxscHRyLCBwYXlsb2FkX3ZhbHVlRm91bmQgPyAmaW5fcGF5bG9hZCA6IG51bGxwdHIsIGRh
dGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZpbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgc3FsRXJyb3Jf
dmFsdWVGb3VuZCA/ICZpbl9zcWxFcnJvciA6IG51bGxwdHIsIG90aGVyRXJyb3JzX3ZhbHVlRm91
bmQgPyAmaW5fb3RoZXJFcnJvcnMgOiBudWxscHRyLCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8g
JmluX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJmluX3By
aW50Q29sb3IgOiBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBkYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmaW5f
ZGF0YWJhc2VJZCA6IG51bGxwdHIsIHF1ZXJ5X3ZhbHVlRm91bmQgPyAmaW5fcXVlcnkgOiBudWxs
cHRyLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gJmluX2NvbHVtbk5hbWVzIDogbnVsbHB0ciwg
bm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6IG51bGxwdHIsIHRpbWVzdGFtcF92YWx1ZUZv
dW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxwdHIsIHZhbHVlc192YWx1ZUZvdW5kID8gJmluX3Zh
bHVlcyA6IG51bGxwdHIsIHBheWxvYWRfdmFsdWVGb3VuZCA/ICZpbl9wYXlsb2FkIDogbnVsbHB0
ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmluX2RhdGFiYXNlSWQgOiBudWxscHRyLCBzcWxF
cnJvcl92YWx1ZUZvdW5kID8gJmluX3NxbEVycm9yIDogbnVsbHB0ciwgb3RoZXJFcnJvcnNfdmFs
dWVGb3VuZCA/ICZpbl9vdGhlckVycm9ycyA6IG51bGxwdHIsIHNjcmVlbkNvbG9yX3ZhbHVlRm91
bmQgPyAmaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBwcmludENvbG9yX3ZhbHVlRm91bmQgPyAm
aW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIElu
c3BlY3RvckNoZWNrZWREYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2Fn
ZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAg
aW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdl
cihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29s
dW1uTmFtZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9u
b3RlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKKyAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldERvdWJsZShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRP
YmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+IGluX3BheWxvYWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUocGFy
YW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRh
dGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3FsRXJyb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzcWxF
cnJvciIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXk+IGluX290aGVyRXJyb3JzID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJvdGhlckVy
cm9ycyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3NjcmVl
bkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJp
bnRDb2xvciIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJDaGVja2VkRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMiKTsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jKGNhbGxJZCwg
aW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCBpbl92YWx1ZXMsIGluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9y
LCBpbl9vdGhlckVycm9ycywgaW5fc2NyZWVuQ29sb3IsIGluX3ByaW50Q29sb3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9x
dWVyeSwgaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVlcywg
aW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IsIGluX290aGVyRXJyb3JzLCBp
bl9zY3JlZW5Db2xvciwgaW5fcHJpbnRDb2xvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1jaGVja2VkLWluLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIElu
c3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZERp
c3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yRnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtY2hlY2tlZC1pbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtY2hlY2tlZC1pbi1wYXJhbWV0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNw
ZWN0b3JQcm90b2NvbE9iamVjdHNfaAorI2RlZmluZSBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHNf
aAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVz
cGFjZSBQcm90b2NvbCB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIENo
ZWNrZWREYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsK
K30gLy8gQ2hlY2tlZERhdGFiYXNlCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisK
KworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgQ2hlY2tlZERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBp
ZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7
Cit9IC8vIENoZWNrZWREYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVz
cGFjZSBDaGVja2VkRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMg
eworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51
bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9y
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciov
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQor
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNl
dCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2Rl
X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0
ZXJhbCgiY29kZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9y
Pio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPEVycm9yPiBy
ZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4oKnRo
aXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpj
cmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2Rl
KC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6
OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCit9IC8vIENoZWNr
ZWREYXRhYmFzZQorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8g
IWRlZmluZWQoSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzX2gpCisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtY2hlY2tlZC1pbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclByb3RvY29sT2JqZWN0cy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVz
cGFjZSBQcm90b2NvbCB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tdID0geworICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAgImJsdWUiLAorICAg
ICJjeWFuIiwKKyAgICAibWFnZW50YSIsCisgICAgInllbGxvdyIsCisgICAgImJsYWNrIiwKK307
CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtY2hlY2tlZC1pbi1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFJXSVByb3RvY29s
Q2hlY2tlZERhdGFiYXNlRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworY2xhc3MgT2JqQ0luc3BlY3RvckNoZWNrZWREYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3RvckNoZWNrZWREYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyIHsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yQ2hlY2tlZERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIoaWQ8UldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VEb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IGludCogaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nKiBpbl9xdWVyeSwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXk+KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3Rl
cywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxFcnJvciwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBpbl9vdGhlckVycm9ycywgY29uc3QgU3RyaW5nKiBpbl9z
Y3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheT4mIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUg
aW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBp
bl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3Nx
bEVycm9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGluX290aGVy
RXJyb3JzLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3By
aW50Q29sb3IpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8UldJUHJvdG9j
b2xDaGVja2VkRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWNoZWNr
ZWQtaW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUldJUHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCisKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlJX
SVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xDb25maWd1cmF0aW9uCit7
CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBp
ZDxSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9jaGVja2VkRGF0YWJh
c2VIYW5kbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NF
UlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2NoZWNrZWREYXRhYmFzZUhh
bmRsZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldENo
ZWNrZWREYXRhYmFzZUhhbmRsZXI6KGlkPFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9jaGVja2VkRGF0YWJhc2VI
YW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2NoZWNrZWREYXRhYmFzZUhhbmRsZXIg
cmVsZWFzZV07CisgICAgX2NoZWNrZWREYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5d
OworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpD
SW5zcGVjdG9yQ2hlY2tlZERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50PEluc3BlY3RvckNoZWNrZWREYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRl
cm5hdGVJbnNwZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0
ZXJhbCgiQ2hlY2tlZERhdGFiYXNlIiksIFdURjo6bW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7
CisgICAgX2NvbnRyb2xsZXItPmFnZW50UmVnaXN0cnkoKS5hcHBlbmQoV1RGOjptb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4pY2hlY2tlZERhdGFiYXNlSGFuZGxlcgoreworICAgIHJldHVybiBfY2hlY2tlZERh
dGFiYXNlSGFuZGxlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWNo
ZWNrZWQtaW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisKK0BpbnRlcmZhY2UgUldJUHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4sIHNldHRlcj1zZXRDaGVja2VkRGF0YWJhc2VIYW5kbGVyOikgaWQ8UldJUHJvdG9jb2xDaGVj
a2VkRGF0YWJhc2VEb21haW5IYW5kbGVyPiBjaGVja2VkRGF0YWJhc2VIYW5kbGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtY2hlY2tlZC1pbi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlJXSVByb3RvY29sRW51
bUNvbnZlcnNpb25IZWxwZXJzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JDaGVj
a2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcqIGluX3F1ZXJ5LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIGlu
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3Rp
bWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fdmFs
dWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBp
bnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4qIGluX3NxbEVycm9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4q
IGluX290aGVyRXJyb3JzLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJp
bmcqIGluX3ByaW50Q29sb3IpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxs
SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIGVycm9yKTsKKyAgICB9OworCisgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgU3RyaW5nKCkpOworICAg
IH07CisKKyAgICBOU0ludGVnZXIgb19pbl9kYXRhYmFzZUlkOworICAgIGlmIChpbl9kYXRhYmFz
ZUlkKQorICAgICAgICBvX2luX2RhdGFiYXNlSWQgPSAqaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0
cmluZyAqb19pbl9xdWVyeTsKKyAgICBpZiAoaW5fcXVlcnkpCisgICAgICAgIG9faW5fcXVlcnkg
PSAqaW5fcXVlcnk7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVz
OworICAgIGlmIChpbl9jb2x1bW5OYW1lcykKKyAgICAgICAgb19pbl9jb2x1bW5OYW1lcyA9IG9i
amNTdHJpbmdBcnJheSgqaW5fY29sdW1uTmFtZXMpOworICAgIE5TU3RyaW5nICpvX2luX25vdGVz
OworICAgIGlmIChpbl9ub3RlcykKKyAgICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKKyAg
ICBkb3VibGUgb19pbl90aW1lc3RhbXA7CisgICAgaWYgKGluX3RpbWVzdGFtcCkKKyAgICAgICAg
b19pbl90aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb19pbl92YWx1ZXM7CisgICAgaWYgKGluX3ZhbHVlcykKKyAgICAgICAgb19pbl92YWx1ZXMg
PSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0
Oippbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9f
aW5fcGF5bG9hZDsKKyAgICBpZiAoaW5fcGF5bG9hZCkKKyAgICAgICAgb19pbl9wYXlsb2FkID0g
W1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDoq
aW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAgIE5TSW50ZWdlciBvX2luX2RhdGFiYXNlSWQ7
CisgICAgaWYgKGluX2RhdGFiYXNlSWQpCisgICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9k
YXRhYmFzZUlkOworICAgIFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXJyb3IgKm9faW5fc3Fs
RXJyb3I7CisgICAgaWYgKGluX3NxbEVycm9yKQorICAgICAgICBvX2luX3NxbEVycm9yID0gW1tb
UldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JP
YmplY3Q6KmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07CisgICAgTlNBcnJheS8qPFJXSVByb3Rv
Y29sQ2hlY2tlZERhdGFiYXNlRXJyb3I+Ki8gKm9faW5fb3RoZXJFcnJvcnM7CisgICAgaWYgKGlu
X290aGVyRXJyb3JzKQorICAgICAgICBvX2luX290aGVyRXJyb3JzID0gb2JqY0FycmF5PFJXSVBy
b3RvY29sQ2hlY2tlZERhdGFiYXNlRXJyb3I+KCppbl9vdGhlckVycm9ycyk7CisgICAgUldJUHJv
dG9jb2xDaGVja2VkRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG9faW5fc2NyZWVuQ29sb3I7CisgICAg
aWYgKGluX3NjcmVlbkNvbG9yKQorICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3Rv
Y29sU3RyaW5nPFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3Nj
cmVlbkNvbG9yKTsKKyAgICBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIG9faW5fcHJpbnRDb2xvcjsKKyAgICBpZiAo
aW5fcHJpbnRDb2xvcikKKyAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3Ry
aW5nPFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKKworICAgIFttX2RlbGVnYXRlIGV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW5fZGF0
YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHF1ZXJ5Oihpbl9xdWVyeSA/ICZvX2lu
X3F1ZXJ5IDogbmlsKSBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5O
YW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFt
cDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVl
cyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxv
YWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDog
bmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgb3RoZXJF
cnJvcnM6KGluX290aGVyRXJyb3JzID8gJm9faW5fb3RoZXJFcnJvcnMgOiBuaWwpIHNjcmVlbkNv
bG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNvbG9yIDogbmlsKSBwcmludENvbG9y
Oihpbl9wcmludENvbG9yID8gJm9faW5fcHJpbnRDb2xvciA6IG5pbCldOworfQorCit2b2lkIE9i
akNJbnNwZWN0b3JDaGVja2VkRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5
bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGluX2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3NxbEVycm9yLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGluX290aGVyRXJyb3JzLCBjb25zdCBTdHJpbmcmIGlu
X3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCit7CisgICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIGVy
cm9yKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSwgU3RyaW5nKCkpOworICAgIH07CisKKyAgICBOU0ludGVnZXIgb19pbl9kYXRhYmFz
ZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5
OworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IG9iamNTdHJp
bmdBcnJheShpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBpbl9u
b3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7CisgICAgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07
CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2Nv
bEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OmluX3BheWxvYWRdIGF1
dG9yZWxlYXNlXTsKKyAgICBOU0ludGVnZXIgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJ
ZDsKKyAgICBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0g
W1tbUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0
b3JPYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAgICBOU0FycmF5Lyo8UldJUHJv
dG9jb2xDaGVja2VkRGF0YWJhc2VFcnJvcj4qLyAqb19pbl9vdGhlckVycm9ycyA9IG9iamNBcnJh
eTxSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUVycm9yPihpbl9vdGhlckVycm9ycyk7CisgICAg
UldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG9faW5fc2NyZWVuQ29sb3Ig
PSBmcm9tUHJvdG9jb2xTdHJpbmc8UldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VQcmltYXJ5Q29s
b3JzPihpbl9zY3JlZW5Db2xvcik7CisgICAgUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VFeGVj
dXRlU1FMU3luY1ByaW50Q29sb3Igb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yPihpbl9w
cmludENvbG9yKTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFi
YXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnkgY29sdW1uTmFtZXM6b19pbl9j
b2x1bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpvX2luX3RpbWVzdGFtcCB2YWx1
ZXM6b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0YWJhc2VJZDpvX2luX2RhdGFi
YXNlSWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBvdGhlckVycm9yczpvX2luX290aGVyRXJyb3Jz
IHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29sb3Jd
OworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2Nv
bEVudW1Db252ZXJzaW9uSGVscGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtY2hlY2tlZC1pbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25IZWxwZXJzLmgiCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5n
KFN0cmluZyB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFJXSVBy
b3RvY29sQ2hlY2tlZERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2go
dmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlUHJpbWFyeUNvbG9y
c1JlZDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicmVkIik7CisgICAgY2FzZSBSV0lQ
cm90b2NvbENoZWNrZWREYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKKyAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiZ3JlZW4iKTsKKyAgICBjYXNlIFJXSVByb3RvY29sQ2hlY2tlZERhdGFi
YXNlUHJpbWFyeUNvbG9yc0JsdWU6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsdWUi
KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBSV0lQcm90b2NvbENoZWNrZWREYXRh
YmFzZVByaW1hcnlDb2xvcnMgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbENoZWNrZWRE
YXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAg
ICAgIHJldHVybiBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsK
KyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xDaGVj
a2VkRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwor
fQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9jb2xDaGVja2VkRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3RvY29sQ2hlY2tlZERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgorICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBSV0lQcm90b2NvbENo
ZWNrZWREYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
TWFnZW50YToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOworICAgIGNh
c2UgUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVs
bG93Iik7CisgICAgY2FzZSBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoImJsYWNrIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgUldJUHJv
dG9jb2xDaGVja2VkRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAo
dmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xDaGVja2VkRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7
CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xD
aGVja2VkRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
clllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFJXSVBy
b3RvY29sQ2hlY2tlZERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JCbGFjazsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUldJ
UHJvdG9jb2xDaGVja2VkRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvckN5YW47Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhSV0lQ
cm90b2NvbENoZWNrZWREYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiY3lhbiIpOworICAgIGNhc2UgUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdl
bnRhIik7CisgICAgY2FzZSBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7
CisgICAgY2FzZSBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvckJsYWNrOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOworICAgIH0K
K30KKwordGVtcGxhdGU8PgoraW5saW5lIFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sQ2hlY2tl
ZERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0g
Im1hZ2VudGEiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VFeGVj
dXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikK
KyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQ
cmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1
cm4gUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFj
azsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUldJUHJvdG9jb2xDaGVj
a2VkRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9u
SGVscGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1jaGVj
a2VkLWluLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtY2hlY2tlZC1pbi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VF
cnJvcjsKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBSV0lQcm90b2NvbENoZWNrZWRE
YXRhYmFzZVByaW1hcnlDb2xvcnMpIHsKKyAgICBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZVBy
aW1hcnlDb2xvcnNSZWQsCisgICAgUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VQcmltYXJ5Q29s
b3JzR3JlZW4sCisgICAgUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1
ZSwKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29sQ2hlY2tlZERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKKyAg
ICBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yQ3lhbiwKKyAgICBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKKyAgICBSV0lQ
cm90b2NvbENoZWNrZWREYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yWWVsbG93LAorICAgIFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yKSB7CisgICAgUldJUHJvdG9jb2xDaGVja2VkRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JDeWFuLAorICAgIFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YSwKKyAgICBSV0lQcm90b2NvbENoZWNrZWREYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdywKKyAgICBSV0lQcm90b2NvbENoZWNrZWRE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrLAorfTsKKworCitAaW50ZXJmYWNl
IFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2Rl
OihOU0ludGVnZXIpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIE5TSW50ZWdlciBjb2RlOworQGVuZAorCitAcHJvdG9jb2wgUldJUHJvdG9j
b2xDaGVja2VkRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAo
dm9pZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihOU0ludGVnZXIgKilkYXRhYmFz
ZUlkIHF1ZXJ5OihOU1N0cmluZyAqKilxdWVyeSBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6
KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1
ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDoo
TlNJbnRlZ2VyICopZGF0YWJhc2VJZCBzcWxFcnJvcjooUldJUHJvdG9jb2xDaGVja2VkRGF0YWJh
c2VFcnJvciAqKilzcWxFcnJvciBvdGhlckVycm9yczooTlNBcnJheS8qPFJXSVByb3RvY29sQ2hl
Y2tlZERhdGFiYXNlRXJyb3I+Ki8gKiopb3RoZXJFcnJvcnMgc2NyZWVuQ29sb3I6KFJXSVByb3Rv
Y29sQ2hlY2tlZERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIHByaW50Q29sb3I6
KFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3IgKilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlU1FMU3luY1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooTlNJbnRl
Z2VyKWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnkgY29sdW1uTmFtZXM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRp
bWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGRhdGFiYXNl
SWQ6KE5TSW50ZWdlcilkYXRhYmFzZUlkIHNxbEVycm9yOihSV0lQcm90b2NvbENoZWNrZWREYXRh
YmFzZUVycm9yICopc3FsRXJyb3Igb3RoZXJFcnJvcnM6KE5TQXJyYXkvKjxSV0lQcm90b2NvbENo
ZWNrZWREYXRhYmFzZUVycm9yPiovICopb3RoZXJFcnJvcnMgc2NyZWVuQ29sb3I6KFJXSVByb3Rv
Y29sQ2hlY2tlZERhdGFiYXNlUHJpbWFyeUNvbG9ycylzY3JlZW5Db2xvciBwcmludENvbG9yOihS
V0lQcm90b2NvbENoZWNrZWREYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcilwcmludENv
bG9yOworQGVuZAorCisKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sLmgKKworIyMjIEJl
Z2luIEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1jaGVja2VkLWluLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlJXSVByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiUldJUHJvdG9jb2xF
bnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0
aW9uIFJXSVByb3RvY29sQ2hlY2tlZERhdGFiYXNlRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KE5TSW50ZWdlciljb2RlOwor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBj
b2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1l
c3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooTlNJbnRl
Z2VyKWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsK
K30KKworLSAoTlNJbnRlZ2VyKWNvZGUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JL
ZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sVHlw
ZXMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWNoZWNrZWQtaW4tcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlJXSVByb3RvY29sLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEpTT05PYmplY3RJbnRl
cm5hbC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwor
CisKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgK
</data>

          </attachment>
      

    </bug>

</bugzilla>