<?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>145069</bug_id>
          
          <creation_ts>2015-05-15 13:19:44 -0700</creation_ts>
          <short_desc>[Content Extensions] Relax restrictions on triggers that match everything.</short_desc>
          <delta_ts>2015-05-26 14:27:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1095213</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-15 13:19:44 -0700</bug_when>
    <thetext>Right now we have restrictions on rules with triggers that match everything such as .*
We do not allow them after ignore-previous-rules.
We do not allow them with if-domain or unless-domain.

There are simple workarounds for these restrictions such as using [a-zA-Z]* which would have effectively the same behavior but kill performance by matching on almost every character.  We should just compile the right thing and let people be able to use .* everywhere and encourage them to put their css at the beginning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095219</commentid>
    <comment_count>1</comment_count>
      <attachid>253219</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-15 13:31:53 -0700</bug_when>
    <thetext>Created attachment 253219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095221</commentid>
    <comment_count>2</comment_count>
      <attachid>253219</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-15 13:34:26 -0700</bug_when>
    <thetext>Comment on attachment 253219
Patch

I need to increment the version number and rebase this after https://bugs.webkit.org/show_bug.cgi?id=145027 but please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095233</commentid>
    <comment_count>3</comment_count>
      <attachid>253221</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-15 13:57:59 -0700</bug_when>
    <thetext>Created attachment 253221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095402</commentid>
    <comment_count>4</comment_count>
      <attachid>253221</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-15 22:53:29 -0700</bug_when>
    <thetext>Comment on attachment 253221
Patch

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

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:122
&gt;                  if (instruction == DFABytecodeInstruction::AppendAction)

this should be else if</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095689</commentid>
    <comment_count>5</comment_count>
      <attachid>253221</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-18 14:45:28 -0700</bug_when>
    <thetext>Comment on attachment 253221
Patch

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

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:53
&gt; +    // High bits are used to store flags. Booleans are stored in the 48th and 49th bit. See compileRuleList.

Describing the format here guarantees your comment will get out of sync.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:66
&gt; +        if (action &amp; DisplayNoneStyleSheetFlag) {
&gt; +            RELEASE_ASSERT(!(action &amp; IfDomainFlag));
&gt; +            append&lt;DFABytecodeInstruction&gt;(m_bytecode, DFABytecodeInstruction::AppendActionDefaultStylesheet);
&gt; +        } else if (action &amp; IfDomainFlag)

How do you get into those cases?

not(action &amp; 0xFFFF00000000)  is a superset of those two tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096285</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-20 10:42:19 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; not(action &amp; 0xFFFF00000000)  is a superset of those two tests.
That code is correct. not(action &amp; 0x3000000000000) is a superset of those two tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096287</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-20 10:57:18 -0700</bug_when>
    <thetext>I added a test using backend5 and fixed the else if.
http://trac.webkit.org/changeset/184644</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096321</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-20 12:41:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; not(action &amp; 0xFFFF00000000)  is a superset of those two tests.
&gt; That code is correct. not(action &amp; 0x3000000000000) is a superset of those
&gt; two tests.

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097450</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-26 14:27:47 -0700</bug_when>
    <thetext>rdar://problem/20937620</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253219</attachid>
            <date>2015-05-15 13:31:53 -0700</date>
            <delta_ts>2015-05-15 13:57:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145069-20150515133029.patch</filename>
            <type>text/plain</type>
            <size>41491</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDM5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE1LTA1LTE1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gUmVsYXggcmVzdHJpY3Rpb25zIG9uIHRyaWdnZXJzIHRoYXQgbWF0Y2ggZXZl
cnl0aGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTA2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIEFQSSB0ZXN0cyB0aGF0IGNvdmVyIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgdGVz
dCBmb3IgY29ycmVjdG5lc3MgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlzcGxheU5v
bmVTZWxlY3RvcnMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YWRk
VW5pdmVyc2FsQWN0aW9uc1RvREZBKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICBQdXQgdW5pdmVyc2FsQWN0aW9uc1dpdGhv
dXREb21haW5zIGludG8gdGhlIERGQSBmcm9tIGZpbHRlcnNXaXRob3V0RG9tYWlucyBhbmQKKyAg
ICAgICAgcHV0IHVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucyBpbnRvIHRoZSBERkEgZnJvbSBm
aWx0ZXJzV2l0aERvbWFpbnMuICAgICAgICAKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaDoKKyAgICAgICAgUmVtb3ZlIGVycm9y
IGNvZGVzIGZvciBlcnJvcnMgdGhhdCBhcmUgbm90IGVycm9ycyBhbnkgbW9yZS4KKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6
YWN0aW9uc0ZvclJlc291cmNlTG9hZCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVj
dGlvblNpemVXaXRoQXJndW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZUNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpzZXQzMkJpdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hl
Y2tWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNv
ZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29t
cGlsZXI6OmVtaXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaDoKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRB
cHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6YWN0aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJl
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6YWN0aW9uc0Zyb21ERkFSb290KTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmg6CisgICAgICAgIEFkZCBhIG5ldyBi
eXRlY29kZSBBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCB0byBtYXJrIGFjdGlvbnMgdGhh
dCBhcmUgY3NzLWRpc3BsYXktbm9uZQorICAgICAgICB0aGF0IG5lZWQgdG8gYmUgcHV0IGluIHRo
ZSBkZWZhdWx0IHN0eWxlc2hlZXQgdG8gYmUgaWdub3JlZCBvciBub3QgYXMgYSB3aG9sZS4KKyAg
ICAgICAgY3NzLWRpc3BsYXktbm9uZSBhY3Rpb25zIHdpdGggZmxhZ3Mgb3IgZG9tYWluIHJ1bGVz
IGFuZCBjc3MtZGlzcGxheS1ub25lIGFjdGlvbnMgCisgICAgICAgIGFmdGVyIGlnbm9yZS1wcmV2
aW91cy1ydWxlcyBhY3Rpb25zIGFyZSBub3QgdG8gYmUgaW4gdGhpcyBwcmVjb21waWxlZCBzdHls
ZXNoZWV0LCBidXQKKyAgICAgICAgdGhleSB3aWxsIGJlIGFwcGxpZWQgYXMgbmVlZGVkIHBlciBw
YWdlLiAgVGhlIHByZWNvbXBpbGVkIHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBhcHBsaWVkCisgICAg
ICAgIGlmIG5vIGlnbm9yZS1wcmV2aW91cy1ydWxlcyBhY3Rpb24gaXMgdHJpZ2dlcmVkLgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRJbmZvLmg6CisKIDIwMTUtMDUtMTUgIFJvZ2VyIEZv
bmcgIDxyb2dlcl9mb25nQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVja21hcmsgb24gT0ZGIG9w
dGlvbiBvZiBjYXB0aW9ucyBzb21ldGltZXMgZG9lcyBub3QgYXBwZWFyLgpJbmRleDogU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENv
bnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAxODQyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSw3IEBAIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6fkNvbXBpbGVk
Q29udGUKIFZlY3RvcjxTdHJpbmc+IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlz
cGxheU5vbmVTZWxlY3RvcnMoVmVjdG9yPGJvb2w+JiBwYWdlc1VzZWQpCiB7CiAgICAgREZBQnl0
ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29k
ZSgpLCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZUxlbmd0aCgpLCBwYWdlc1VzZWQpOwot
ICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgYWN0aW9uTG9jYXRpb25zID0gaW50
ZXJwcmV0ZXIuYWN0aW9uc0Zyb21ERkFSb290KCk7CisgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6QWN0aW9ucyBhY3Rpb25Mb2NhdGlvbnMgPSBpbnRlcnByZXRlci5hY3Rpb25zRm9yRGVmYXVs
dFN0eWxlc2hlZXRGcm9tREZBUm9vdCgpOwogICAgIAogICAgIFZlY3RvcjxBY3Rpb24+IGdsb2Jh
bEFjdGlvbnM7CiAgICAgZm9yICh1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbiA6IGFjdGlvbkxvY2F0
aW9ucykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25Db21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTg0MjkwKQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDE4ICsxMjEsMjEgQEAgc3RhdGljIFZlY3Rv
cjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogICAgIHJldHVybiBhY3Rpb25Mb2NhdGlvbnM7
CiB9CiAKLXR5cGVkZWYgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8dWludDY0X3Q+OjpI
YXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj4gVW5pdmVy
c2FsQWN0aW9uTG9jYXRpb25zU2V0OwordHlwZWRlZiBIYXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0
SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDY0X3Q+PiBVbml2ZXJzYWxBY3Rpb25TZXQ7CiAKLXN0YXRpYyB2b2lkIGFkZFVuaXZlcnNh
bEFjdGlvbnNUb0RGQShERkEmIGRmYSwgY29uc3QgVW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zU2V0
JiB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMpCitzdGF0aWMgdm9pZCBhZGRVbml2ZXJzYWxBY3Rp
b25zVG9ERkEoREZBJiBkZmEsIGNvbnN0IFVuaXZlcnNhbEFjdGlvblNldCYgdW5pdmVyc2FsQWN0
aW9ucykKIHsKLSAgICBpZiAodW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zLmlzRW1wdHkoKSkKKyAg
ICBpZiAodW5pdmVyc2FsQWN0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IERGQU5vZGUmIHJvb3QgPSBkZmEubm9kZXNbZGZhLnJvb3RdOworICAgIEFTU0VSVCghcm9vdC5h
Y3Rpb25zTGVuZ3RoKCkpOwogICAgIHVuc2lnbmVkIGFjdGlvbnNTdGFydCA9IGRmYS5hY3Rpb25z
LnNpemUoKTsKLSAgICBkZmEuYWN0aW9ucy5yZXNlcnZlQ2FwYWNpdHkoZGZhLmFjdGlvbnMuc2l6
ZSgpICsgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zLnNpemUoKSk7Ci0gICAgZm9yICh1aW50NjRf
dCBhY3Rpb25Mb2NhdGlvbiA6IHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9ucykKLSAgICAgICAgZGZh
LmFjdGlvbnMudW5jaGVja2VkQXBwZW5kKGFjdGlvbkxvY2F0aW9uKTsKKyAgICBkZmEuYWN0aW9u
cy5yZXNlcnZlQ2FwYWNpdHkoZGZhLmFjdGlvbnMuc2l6ZSgpICsgdW5pdmVyc2FsQWN0aW9ucy5z
aXplKCkpOworICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogdW5pdmVyc2FsQWN0aW9ucykKKyAg
ICAgICAgZGZhLmFjdGlvbnMudW5jaGVja2VkQXBwZW5kKGFjdGlvbik7CiAgICAgdW5zaWduZWQg
YWN0aW9uc0VuZCA9IGRmYS5hY3Rpb25zLnNpemUoKTsKKwogICAgIHVuc2lnbmVkIGFjdGlvbnNM
ZW5ndGggPSBhY3Rpb25zRW5kIC0gYWN0aW9uc1N0YXJ0OwogICAgIFJFTEVBU0VfQVNTRVJUX1dJ
VEhfTUVTU0FHRShhY3Rpb25zTGVuZ3RoIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46
Om1heCgpLCAiVG9vIG1hbnkgdW5jb21iaW5lZCBhY3Rpb25zIHRoYXQgbWF0Y2ggZXZlcnl0aGlu
ZyIpOwogICAgIGRmYS5ub2Rlc1tkZmEucm9vdF0uc2V0QWN0aW9ucyhhY3Rpb25zU3RhcnQsIHN0
YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb25zTGVuZ3RoKSk7CkBAIC0xNTYsNyArMTU5LDggQEAg
c3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgIExPR19MQVJHRV9T
VFJVQ1RVUkVTKGFjdGlvbnMsIGFjdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihTZXJpYWxpemVk
QWN0aW9uQnl0ZSkpOwogICAgIGFjdGlvbnMuY2xlYXIoKTsKIAotICAgIFVuaXZlcnNhbEFjdGlv
bkxvY2F0aW9uc1NldCB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnM7CisgICAgVW5pdmVyc2FsQWN0
aW9uU2V0IHVuaXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWluczsKKyAgICBVbml2ZXJzYWxBY3Rp
b25TZXQgdW5pdmVyc2FsQWN0aW9uc1dpdGhEb21haW5zOwogCiAgICAgLy8gRklYTUU6IFRoZXNl
IGRvbid0IGFsbCBuZWVkIHRvIGJlIGluIG1lbW9yeSBhdCB0aGUgc2FtZSB0aW1lLgogICAgIENv
bWJpbmVkVVJMRmlsdGVycyBmaWx0ZXJzV2l0aG91dERvbWFpbnM7CkBAIC0xNjksNiArMTczLDcg
QEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgIGZvciAodW5z
aWduZWQgcnVsZUluZGV4ID0gMDsgcnVsZUluZGV4IDwgcGFyc2VkUnVsZUxpc3Quc2l6ZSgpOyAr
K3J1bGVJbmRleCkgewogICAgICAgICBjb25zdCBDb250ZW50RXh0ZW5zaW9uUnVsZSYgY29udGVu
dEV4dGVuc2lvblJ1bGUgPSBwYXJzZWRSdWxlTGlzdFtydWxlSW5kZXhdOwogICAgICAgICBjb25z
dCBUcmlnZ2VyJiB0cmlnZ2VyID0gY29udGVudEV4dGVuc2lvblJ1bGUudHJpZ2dlcigpOworICAg
ICAgICBjb25zdCBBY3Rpb24mIGFjdGlvbiA9IGNvbnRlbnRFeHRlbnNpb25SdWxlLmFjdGlvbigp
OwogICAgICAgICBBU1NFUlQodHJpZ2dlci51cmxGaWx0ZXIubGVuZ3RoKCkpOwogCiAgICAgICAg
IC8vIEhpZ2ggYml0cyBhcmUgdXNlZCBmb3IgZmxhZ3MuIFRoaXMgc2hvdWxkIG1hdGNoIGhvdyB0
aGV5IGFyZSB1c2VkIGluIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlLgpAQCAtMTc4
LDkgKzE4MywxMiBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAg
ICAgICAgICAgICBBU1NFUlQodHJpZ2dlci5kb21haW5Db25kaXRpb24gPT0gVHJpZ2dlcjo6RG9t
YWluQ29uZGl0aW9uOjpOb25lKTsKICAgICAgICAgICAgIHN0YXR1cyA9IGZpbHRlcnNXaXRob3V0
RG9tYWluUGFyc2VyLmFkZFBhdHRlcm4odHJpZ2dlci51cmxGaWx0ZXIsIHRyaWdnZXIudXJsRmls
dGVySXNDYXNlU2Vuc2l0aXZlLCBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzKTsKICAgICAgICAgICAg
IGlmIChzdGF0dXMgPT0gVVJMRmlsdGVyUGFyc2VyOjpNYXRjaGVzRXZlcnl0aGluZykgewotICAg
ICAgICAgICAgICAgIGlmIChpZ25vcmVQcmV2aW91c1J1bGVzU2VlbikKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhNYXRjaGVzRXZlcnl0aGlu
Z0FmdGVySWdub3JlUHJldmlvdXNSdWxlczsKLSAgICAgICAgICAgICAgICB1bml2ZXJzYWxBY3Rp
b25Mb2NhdGlvbnMuYWRkKGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MpOworICAgICAgICAgICAgICAg
IGlmICghaWdub3JlUHJldmlvdXNSdWxlc1NlZW4KKyAgICAgICAgICAgICAgICAgICAgJiYgdHJp
Z2dlci5kb21haW5Db25kaXRpb24gPT0gVHJpZ2dlcjo6RG9tYWluQ29uZGl0aW9uOjpOb25lCisg
ICAgICAgICAgICAgICAgICAgICYmIGFjdGlvbi50eXBlKCkgPT0gQWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTZWxlY3RvcgorICAgICAgICAgICAgICAgICAgICAmJiAhdHJpZ2dlci5mbGFncykK
KyAgICAgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25BbmRGbGFncyB8PSBEaXNwbGF5Tm9u
ZVN0eWxlU2hlZXRGbGFnOworICAgICAgICAgICAgICAgIHVuaXZlcnNhbEFjdGlvbnNXaXRob3V0
RG9tYWlucy5hZGQoYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7CiAgICAgICAgICAgICAgICAgc3Rh
dHVzID0gVVJMRmlsdGVyUGFyc2VyOjpPazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2VyOjpPaykgewpAQCAtMTk2LDggKzIwNCwxMCBAQCBz
dGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIHN0YXR1cyA9IGZpbHRlcnNXaXRoRG9tYWluUGFyc2Vy
LmFkZFBhdHRlcm4odHJpZ2dlci51cmxGaWx0ZXIsIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vu
c2l0aXZlLCBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMg
PT0gVVJMRmlsdGVyUGFyc2VyOjpNYXRjaGVzRXZlcnl0aGluZykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nV2l0aERv
bWFpbnM7CisgICAgICAgICAgICBpZiAoc3RhdHVzID09IFVSTEZpbHRlclBhcnNlcjo6TWF0Y2hl
c0V2ZXJ5dGhpbmcpIHsKKyAgICAgICAgICAgICAgICB1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFp
bnMuYWRkKGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MpOworICAgICAgICAgICAgICAgIHN0YXR1cyA9
IFVSTEZpbHRlclBhcnNlcjo6T2s7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3Rh
dHVzICE9IFVSTEZpbHRlclBhcnNlcjo6T2spIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigi
RXJyb3Igd2hpbGUgcGFyc2luZyAlczogJXNcbiIsIHRyaWdnZXIudXJsRmlsdGVyLnV0ZjgoKS5k
YXRhKCksIFVSTEZpbHRlclBhcnNlcjo6c3RhdHVzU3RyaW5nKHN0YXR1cykudXRmOCgpLmRhdGEo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTklu
dmFsaWRSZWdleDsKQEAgLTIwNyw3ICsyMTcsNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1
bGVMaXN0KENvbnRlbnRFCiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBVUkxG
aWx0ZXJQYXJzZXI6Ok9rKTsKICAgICAgICAgCi0gICAgICAgIGlmIChjb250ZW50RXh0ZW5zaW9u
UnVsZS5hY3Rpb24oKS50eXBlKCkgPT0gQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlcykK
KyAgICAgICAgaWYgKGFjdGlvbi50eXBlKCkgPT0gQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNS
dWxlcykKICAgICAgICAgICAgIGlnbm9yZVByZXZpb3VzUnVsZXNTZWVuID0gdHJ1ZTsKICAgICB9
CiAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMocGFyc2VkUnVsZUxpc3QsIHBhcnNlZFJ1bGVMaXN0
LmNhcGFjaXR5KCkgKiBzaXplb2YoQ29udGVudEV4dGVuc2lvblJ1bGUpKTsgLy8gRG9lc24ndCBp
bmNsdWRlIHN0cmluZ3MuCkBAIC0yMzEsNyArMjQxLDcgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBp
bGVSdWxlTGlzdChDb250ZW50RQogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0dW5lZC4gTW9y
ZSBORkFzIHRha2UgbG9uZ2VyIHRvIGludGVycHJldCwgZmV3ZXIgdXNlIG1vcmUgbWVtb3J5IGFu
ZCB0aW1lIHRvIGNvbXBpbGUuCiAgICAgY29uc3QgdW5zaWduZWQgbWF4TkZBU2l6ZSA9IDUwMDAw
OwogICAgIAotICAgIGJvb2wgZmlyc3RORkFTZWVuID0gZmFsc2U7CisgICAgYm9vbCBmaXJzdE5G
QVdpdGhvdXREb21haW5zU2VlbiA9IGZhbHNlOwogICAgIC8vIEZJWE1FOiBDb21iaW5lIHNtYWxs
IE5GQXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgTkZBcy4KICAgICBmaWx0ZXJzV2l0aG91dERv
bWFpbnMucHJvY2Vzc05GQXMobWF4TkZBU2l6ZSwgWyZdKE5GQSYmIG5mYSkgewogI2lmIENPTlRF
TlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwpAQCAtMjUyLDkgKzI2Miw5IEBA
IHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICNlbmRpZgogICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFkZmEubm9kZXNbZGZhLnJvb3RdLmhhc0FjdGlvbnMoKSwg
IkFsbCBhY3Rpb25zIG9uIHRoZSBERkEgcm9vdCBzaG91bGQgY29tZSBmcm9tIHJlZ3VsYXIgZXhw
cmVzc2lvbnMgdGhhdCBtYXRjaCBldmVyeXRoaW5nLiIpOwogCi0gICAgICAgIGlmICghZmlyc3RO
RkFTZWVuKSB7CisgICAgICAgIGlmICghZmlyc3RORkFXaXRob3V0RG9tYWluc1NlZW4pIHsKICAg
ICAgICAgICAgIC8vIFB1dCBhbGwgdGhlIHVuaXZlcnNhbCBhY3Rpb25zIG9uIHRoZSBmaXJzdCBE
RkEuCi0gICAgICAgICAgICBhZGRVbml2ZXJzYWxBY3Rpb25zVG9ERkEoZGZhLCB1bml2ZXJzYWxB
Y3Rpb25Mb2NhdGlvbnMpOworICAgICAgICAgICAgYWRkVW5pdmVyc2FsQWN0aW9uc1RvREZBKGRm
YSwgdW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zKTsKICAgICAgICAgfQogCiAgICAgICAg
IFZlY3RvcjxERkFCeXRlY29kZT4gYnl0ZWNvZGU7CkBAIC0yNjMsMTggKzI3MywxOCBAQCBzdGQ6
OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgICAgIExPR19MQVJHRV9T
VFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ4X3Qp
KTsKICAgICAgICAgY2xpZW50LndyaXRlRmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoV1RG
Ojptb3ZlKGJ5dGVjb2RlKSk7CiAKLSAgICAgICAgZmlyc3RORkFTZWVuID0gdHJ1ZTsKKyAgICAg
ICAgZmlyc3RORkFXaXRob3V0RG9tYWluc1NlZW4gPSB0cnVlOwogICAgIH0pOwogICAgIEFTU0VS
VChmaWx0ZXJzV2l0aG91dERvbWFpbnMuaXNFbXB0eSgpKTsKIAotICAgIGlmICghZmlyc3RORkFT
ZWVuKSB7CisgICAgaWYgKCFmaXJzdE5GQVdpdGhvdXREb21haW5zU2VlbikgewogICAgICAgICAv
LyBPdXIgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgZXhwZWN0cyB0byBoYXZlIGF0IGxlYXN0IG9uZSBE
RkEsIHNvIGlmIHdlIGhhdmVuJ3Qgc2VlbiBhbnkKICAgICAgICAgLy8gY3JlYXRlIGEgZHVtbXkg
b25lIGFuZCBhZGQgYW55IHVuaXZlcnNhbCBhY3Rpb25zLgogCiAgICAgICAgIE5GQSBkdW1teU5G
QTsKICAgICAgICAgREZBIGR1bW15REZBID0gTkZBVG9ERkE6OmNvbnZlcnQoZHVtbXlORkEpOwog
Ci0gICAgICAgIGFkZFVuaXZlcnNhbEFjdGlvbnNUb0RGQShkdW1teURGQSwgdW5pdmVyc2FsQWN0
aW9uTG9jYXRpb25zKTsKKyAgICAgICAgYWRkVW5pdmVyc2FsQWN0aW9uc1RvREZBKGR1bW15REZB
LCB1bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMpOwogCiAgICAgICAgIFZlY3RvcjxERkFC
eXRlY29kZT4gYnl0ZWNvZGU7CiAgICAgICAgIERGQUJ5dGVjb2RlQ29tcGlsZXIgY29tcGlsZXIo
ZHVtbXlERkEsIGJ5dGVjb2RlKTsKQEAgLTI4Miw5ICsyOTIsMTAgQEAgc3RkOjplcnJvcl9jb2Rl
IGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgICAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhi
eXRlY29kZSwgYnl0ZWNvZGUuY2FwYWNpdHkoKSAqIHNpemVvZih1aW50OF90KSk7CiAgICAgICAg
IGNsaWVudC53cml0ZUZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlKFdURjo6bW92ZShieXRl
Y29kZSkpOwogICAgIH0KLSAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyh1bml2ZXJzYWxBY3Rpb25M
b2NhdGlvbnMsIHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHVu
c2lnbmVkKSk7Ci0gICAgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zLmNsZWFyKCk7CisgICAgTE9H
X0xBUkdFX1NUUlVDVFVSRVModW5pdmVyc2FsQWN0aW9uLCB1bml2ZXJzYWxBY3Rpb24uY2FwYWNp
dHkoKSAqIHNpemVvZih1bnNpZ25lZCkpOworICAgIHVuaXZlcnNhbEFjdGlvbnNXaXRob3V0RG9t
YWlucy5jbGVhcigpOwogICAgIAorICAgIGJvb2wgZmlyc3RORkFXaXRoRG9tYWluc1NlZW4gPSBm
YWxzZTsKICAgICBmaWx0ZXJzV2l0aERvbWFpbnMucHJvY2Vzc05GQXMobWF4TkZBU2l6ZSwgWyZd
KE5GQSYmIG5mYSkgewogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVH
R0lORwogICAgICAgICBkYXRhTG9nRigiZmlsdGVyc1dpdGhEb21haW5zIE5GQVxuIik7CkBAIC0z
MDQsMTMgKzMxNSwzOCBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRF
CiAjZW5kaWYKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZGZhLm5vZGVzW2RmYS5yb290
XS5oYXNBY3Rpb25zKCksICJGaWx0ZXJzIHdpdGggZG9tYWlucyB0aGF0IG1hdGNoIGV2ZXJ5dGhp
bmcgYXJlIG5vdCBhbGxvd2VkIHJpZ2h0IG5vdy4iKTsKICAgICAgICAgCisgICAgICAgIGlmICgh
Zmlyc3RORkFXaXRoRG9tYWluc1NlZW4pIHsKKyAgICAgICAgICAgIC8vIFB1dCBhbGwgdGhlIHVu
aXZlcnNhbCBhY3Rpb25zIG9uIHRoZSBmaXJzdCBERkEuCisgICAgICAgICAgICBhZGRVbml2ZXJz
YWxBY3Rpb25zVG9ERkEoZGZhLCB1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBWZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOwogICAg
ICAgICBERkFCeXRlY29kZUNvbXBpbGVyIGNvbXBpbGVyKGRmYSwgYnl0ZWNvZGUpOwogICAgICAg
ICBjb21waWxlci5jb21waWxlKCk7CiAgICAgICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVj
b2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ4X3QpKTsKICAgICAgICAgY2xp
ZW50LndyaXRlRmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoV1RGOjptb3ZlKGJ5dGVjb2RlKSk7
CisgICAgICAgIAorICAgICAgICBmaXJzdE5GQVdpdGhEb21haW5zU2VlbiA9IHRydWU7CiAgICAg
fSk7CiAgICAgQVNTRVJUKGZpbHRlcnNXaXRoRG9tYWlucy5pc0VtcHR5KCkpOworICAgIAorICAg
IGlmICghZmlyc3RORkFXaXRoRG9tYWluc1NlZW4pIHsKKyAgICAgICAgLy8gT3VyIGJ5dGVjb2Rl
IGludGVycHJldGVyIGV4cGVjdHMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgREZBLCBzbyBpZiB3ZSBo
YXZlbid0IHNlZW4gYW55CisgICAgICAgIC8vIGNyZWF0ZSBhIGR1bW15IG9uZSBhbmQgYWRkIGFu
eSB1bml2ZXJzYWwgYWN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIE5GQSBkdW1teU5GQTsKKyAg
ICAgICAgREZBIGR1bW15REZBID0gTkZBVG9ERkE6OmNvbnZlcnQoZHVtbXlORkEpOworICAgICAg
ICAKKyAgICAgICAgYWRkVW5pdmVyc2FsQWN0aW9uc1RvREZBKGR1bW15REZBLCB1bml2ZXJzYWxB
Y3Rpb25zV2l0aERvbWFpbnMpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2Rl
PiBieXRlY29kZTsKKyAgICAgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihkdW1teURG
QSwgYnl0ZWNvZGUpOworICAgICAgICBjb21waWxlci5jb21waWxlKCk7CisgICAgICAgIExPR19M
QVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICogc2l6ZW9mKHVp
bnQ4X3QpKTsKKyAgICAgICAgY2xpZW50LndyaXRlRmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUo
V1RGOjptb3ZlKGJ5dGVjb2RlKSk7CisgICAgfQorICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKHVu
aXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucywgdW5pdmVyc2FsQWN0aW9uc1dpdGhEb21haW5zLmNh
cGFjaXR5KCkgKiBzaXplb2YodW5zaWduZWQpKTsKKyAgICB1bml2ZXJzYWxBY3Rpb25zV2l0aERv
bWFpbnMuY2xlYXIoKTsKIAogICAgIGRvbWFpbkZpbHRlcnMucHJvY2Vzc05GQXMobWF4TkZBU2l6
ZSwgWyZdKE5GQSYmIG5mYSkgewogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5F
X0RFQlVHR0lORwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkVycm9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCShyZXZpc2lvbiAxODQyOTApCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMCArNzUsNiBAQCBjb25zdCBzdGQ6OmVycm9yX2Nh
dGVnb3J5JiBjb250ZW50RXh0ZW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIGNz
cy1kaXNwbGF5LW5vbmUgYWN0aW9uIHR5cGUuIFJlcXVpcmVzIGEgc2VsZWN0b3IuIjsKICAgICAg
ICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFJlZ2V4OgogICAg
ICAgICAgICAgICAgIHJldHVybiAiSW52YWxpZCBvciB1bnN1cHBvcnRlZCByZWd1bGFyIGV4cHJl
c3Npb24uIjsKLSAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1h
dGNoZXNFdmVyeXRoaW5nQWZ0ZXJJZ25vcmVQcmV2aW91c1J1bGVzOgotICAgICAgICAgICAgICAg
IHJldHVybiAiUmVndWxhciBleHByZXNzaW9ucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgYXJlIG9u
bHkgYWxsb3dlZCBiZWZvcmUgdGhlIGZpcnN0IGlnbm9yZS1wcmV2aW91cy1ydWxlcy4iOwotICAg
ICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhp
bmdXaXRoRG9tYWluczoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlJlZ3VsYXIgZXhwcmVzc2lv
bnMgdGhhdCBtYXRjaCBldmVyeXRoaW5nIGFyZSBub3QgYWxsb3dlZCB3aXRoIHVubGVzcy0gb3Ig
aWYtZG9tYWluLiI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TkludmFsaWREb21haW5MaXN0OgogICAgICAgICAgICAgICAgIHJldHVybiAiSW52YWxpZCBkb21h
aW4gbGlzdC4iOwogICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05E
b21haW5Ob3RMb3dlckNhc2VBU0NJSToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oCShyZXZpc2lvbiAx
ODQyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOSArNTcsNiBAQCBlbnVtIGNsYXNzIENv
bnRlbnRFeHRlbnNpb25FcnJvciB7CiAgICAgSlNPTkludmFsaWRBY3Rpb25UeXBlLAogICAgIEpT
T05JbnZhbGlkQ1NTRGlzcGxheU5vbmVBY3Rpb25UeXBlLAogICAgIEpTT05JbnZhbGlkUmVnZXgs
Ci0gICAgCi0gICAgUmVnZXhNYXRjaGVzRXZlcnl0aGluZ0FmdGVySWdub3JlUHJldmlvdXNSdWxl
cywKLSAgICBSZWdleE1hdGNoZXNFdmVyeXRoaW5nV2l0aERvbWFpbnMsCiB9OwogCiBXRUJDT1JF
X0VYUE9SVCBjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uRXJyb3JD
YXRlZ29yeSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAxODQy
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsMTYgKzE0Niw2IEBAIFZlY3RvcjxB
Y3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBpZiAoIXNhd0lnbm9yZVByZXZpb3VzUnVsZXMpIHsKLSAgICAgICAgICAgIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdW5pdmVyc2FsQWN0aW9ucyA9IHdpdGhvdXRE
b21haW5zSW50ZXJwcmV0ZXIuYWN0aW9uc0Zyb21ERkFSb290KCk7Ci0gICAgICAgICAgICBmb3Ig
KHVpbnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogdW5pdmVyc2FsQWN0aW9ucykgewotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgZGVzZXJpYWxpemUgYW4gYWN0aW9uIGFsbCB0
aGUgd2F5IGlmIGl0IGlzIGEgY3NzLWRpc3BsYXktbm9uZSBzZWxlY3Rvci4KLSAgICAgICAgICAg
ICAgICBBY3Rpb24gYWN0aW9uID0gQWN0aW9uOjpkZXNlcmlhbGl6ZShhY3Rpb25zLCBhY3Rpb25z
TGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uTG9jYXRpb24pKTsKLSAgICAgICAg
ICAgICAgICBhY3Rpb24uc2V0RXh0ZW5zaW9uSWRlbnRpZmllcihjb250ZW50RXh0ZW5zaW9uLT5p
ZGVudGlmaWVyKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gQ1NTIHNlbGVjdG9ycyB3ZXJlIGFs
cmVhZHkgY29tcGlsZWQgaW50byBhIHN0eWxlc2hlZXQgdXNpbmcgZ2xvYmFsRGlzcGxheU5vbmVT
ZWxlY3RvcnMuCi0gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi50eXBlKCkgIT0gQWN0aW9uVHlw
ZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcikKLSAgICAgICAgICAgICAgICAgICAgZmluYWxBY3Rp
b25zLmFwcGVuZChhY3Rpb24pOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgZmluYWxBY3Rp
b25zLmFwcGVuZChBY3Rpb24oQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTdHlsZVNoZWV0LCBj
b250ZW50RXh0ZW5zaW9uLT5pZGVudGlmaWVyKCkpKTsKICAgICAgICAgICAgIGZpbmFsQWN0aW9u
cy5sYXN0KCkuc2V0RXh0ZW5zaW9uSWRlbnRpZmllcihjb250ZW50RXh0ZW5zaW9uLT5pZGVudGlm
aWVyKCkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaAkocmV2aXNpb24g
MTg0MjkwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbnNCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgog
CiAgICAgLy8gLSBJbnRlcm5hbCBXZWJDb3JlIEludGVyZmFjZS4KICAgICBXRUJDT1JFX0VYUE9S
VCBWZWN0b3I8QWN0aW9uPiBhY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9h
ZEluZm8mKSBjb25zdDsKLSAgICBTdHlsZVNoZWV0Q29udGVudHMqIGdsb2JhbERpc3BsYXlOb25l
U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIFN0eWxlU2hlZXRDb250ZW50cyogZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllcikgY29uc3Q7CiAKICAgICB2b2lkIHByb2Nlc3NDb250ZW50
RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlVHlwZSwgRG9j
dW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1bWVudExvYWRlcik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAkocmV2aXNpb24gMTg0
MjkwKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMgewogCiB0eXBlZGVmIHVpbnQ4X3QgREZBQnl0ZWNvZGU7CiAKKyAgICAvLyBGSVhNRTogSW5j
cmVtZW50IHRoZSB2ZXJzaW9uIG51bWJlciBiZWZvcmUgbGFuZGluZyAoT09QUyEpCiBlbnVtIGNs
YXNzIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gOiB1aW50OF90IHsKIAogICAgIC8vIENoZWNrVmFs
dWUgaGFzIHR3byBhcmd1bWVudHM6CkBAIC01Miw2ICs1Myw3IEBAIGVudW0gY2xhc3MgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbiA6IHVpbnQKICAgICAvLyBBcHBlbmRBY3Rpb24gaGFzIG9uZSBhcmd1
bWVudDoKICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCiAgICAgQXBwZW5k
QWN0aW9uLAorICAgIEFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0LAogICAgIEFwcGVuZEFj
dGlvbldpdGhJZkRvbWFpbiwKICAgICAKICAgICAvLyBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24g
aGFzIHR3byBhcmd1bWVudHM6CkBAIC03OCwxMSArODAsMTIgQEAgc3RhdGljIGlubGluZSBzaXpl
X3QgaW5zdHJ1Y3Rpb25TaXplV2l0aAogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
Q2hlY2tWYWx1ZVJhbmdlQ2FzZUluc2Vuc2l0aXZlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQ4X3Qp
ICsgc2l6ZW9mKHVuc2lnbmVkKTsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFw
cGVuZEFjdGlvbjoKKyAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlv
bkRlZmF1bHRTdHlsZXNoZWV0OgogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uV2l0aElmRG9tYWluOgotICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihE
RkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MzJfdCk7CiAgICAgY2FzZSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb246CiAgICAgY2FzZSBE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21h
aW46Ci0gICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXpl
b2YodWludDE2X3QpICsgc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihE
RkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodWludDMy
X3QpOwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pOwogICAgIGNhc2UgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAx
ODQyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNDcgKzQzLDUwIEBAIGlubGluZSB2b2lk
IGFwcGVuZChWZWN0b3I8REZBQnl0ZWNvZGU+JiAKICAgICAqcmVpbnRlcnByZXRfY2FzdDxJbnRU
eXBlKj4oJmJ5dGVjb2RlW2J5dGVjb2RlLnNpemUoKSAtIHNpemVvZihJbnRUeXBlKV0pID0gdmFs
dWU7CiB9CiAKLWlubGluZSB2b2lkIHNldDMyQml0cyhWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRl
Y29kZSwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIHZhbHVlKQoraW5saW5lIHZvaWQgc2V0MzJC
aXRzKFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlLCB1aW50MzJfdCBpbmRleCwgdWludDMy
X3QgdmFsdWUpCiB7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPigmYnl0ZWNvZGVb
aW5kZXhdKSA9IHZhbHVlOworICAgICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oJmJ5dGVj
b2RlW2luZGV4XSkgPSB2YWx1ZTsKIH0KIAotdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0
QXBwZW5kQWN0aW9uKHVuc2lnbmVkIGFjdGlvbiwgYm9vbCBpZkRvbWFpbikKK3ZvaWQgREZBQnl0
ZWNvZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGlvbih1aW50NjRfdCBhY3Rpb24pCiB7Ci0gICAg
aWYgKGlmRG9tYWluKQotICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9i
eXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWlu
KTsKLSAgICBlbHNlCi0gICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5
dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pOwotICAgIGFwcGVu
ZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgYWN0aW9uKTsKLX0KLQotdm9pZCBERkFCeXRlY29kZUNv
bXBpbGVyOjplbWl0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVpbnQxNl90IGZsYWdzLCB1bnNp
Z25lZCBhY3Rpb24sIGJvb2wgaWZEb21haW4pCi17Ci0gICAgQVNTRVJUKGZsYWdzKTsKLSAgICBp
ZiAoaWZEb21haW4pCi0gICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5
dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25X
aXRoSWZEb21haW4pOwotICAgIGVsc2UKLSAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFw
cGVuZEFjdGlvbik7Ci0gICAgYXBwZW5kPHVpbnQxNl90PihtX2J5dGVjb2RlLCBmbGFncyk7Ci0g
ICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBhY3Rpb24pOworICAgIC8vIEhpZ2ggYml0
cyBhcmUgdXNlZCB0byBzdG9yZSBmbGFncy4gQm9vbGVhbnMgYXJlIHN0b3JlZCBpbiB0aGUgNDh0
aCBhbmQgNDl0aCBiaXQuIFNlZSBjb21waWxlUnVsZUxpc3QuCisgICAgaWYgKGFjdGlvbiAmIDB4
RkZGRjAwMDAwMDAwKSB7CisgICAgICAgIEFTU0VSVCghKGFjdGlvbiAmIERpc3BsYXlOb25lU3R5
bGVTaGVldEZsYWcpKTsKKyAgICAgICAgaWYgKGFjdGlvbiAmIElmRG9tYWluRmxhZykKKyAgICAg
ICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4o
bV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uKTsKKyAgICAgICAgYXBwZW5kPHVpbnQxNl90PihtX2J5dGVjb2RlLCBzdGF0aWNfY2FzdDx1
aW50MTZfdD4oYWN0aW9uID4+IDMyKSk7CisgICAgICAgIGFwcGVuZDx1aW50MzJfdD4obV9ieXRl
Y29kZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlvbikpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChhY3Rpb24gJiBEaXNwbGF5Tm9uZVN0eWxlU2hlZXRGbGFnKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghKGFjdGlvbiAmIElmRG9tYWluRmxhZykpOworICAgICAgICAgICAg
YXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChhY3Rpb24gJiBJZkRvbWFpbkZsYWcpCisgICAgICAgICAgICBhcHBlbmQ8REZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5k
QWN0aW9uV2l0aElmRG9tYWluKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBwZW5kPERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OkFwcGVuZEFjdGlvbik7CisgICAgICAgIGFwcGVuZDx1aW50MzJfdD4obV9ieXRlY29kZSwgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlvbikpOworICAgIH0KIH0KIAotdm9pZCBERkFCeXRlY29k
ZUNvbXBpbGVyOjplbWl0SnVtcCh1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCkKK3ZvaWQg
REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEp1bXAodWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5k
ZXgpCiB7CiAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXApOwogICAgIG1fbGlua1JlY29yZHMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKG1fYnl0ZWNvZGUuc2l6ZSgpLCBkZXN0aW5hdGlvbk5vZGVJbmRleCkpOwot
ICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBi
ZSBzZXQgd2hlbiBsaW5raW5nLgorICAgIGFwcGVuZDx1aW50MzJfdD4obV9ieXRlY29kZSwgMCk7
IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgogfQogCi12b2lkIERGQUJ5
dGVjb2RlQ29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVuc2lnbmVkIGRl
c3RpbmF0aW9uTm9kZUluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpCit2b2lkIERGQUJ5dGVjb2Rl
Q29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFsdWUsIHVpbnQzMl90IGRlc3RpbmF0
aW9uTm9kZUluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpCiB7CiAgICAgYXBwZW5kPERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIGNhc2VTZW5zaXRpdmUgPyBERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpDaGVja1ZhbHVlQ2FzZVNlbnNpdGl2ZSA6IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkNoZWNrVmFsdWVDYXNlSW5zZW5zaXRpdmUpOwogICAgIGFwcGVuZDx1aW50OF90PihtX2J5
dGVjb2RlLCB2YWx1ZSk7CiAgICAgbV9saW5rUmVjb3Jkcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
bV9ieXRlY29kZS5zaXplKCksIGRlc3RpbmF0aW9uTm9kZUluZGV4KSk7Ci0gICAgYXBwZW5kPHVu
c2lnbmVkPihtX2J5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxp
bmtpbmcuCisgICAgYXBwZW5kPHVpbnQzMl90PihtX2J5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1
ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCiB9CiAKLXZvaWQgREZBQnl0ZWNvZGVDb21waWxl
cjo6ZW1pdENoZWNrVmFsdWVSYW5nZSh1aW50OF90IGxvd1ZhbHVlLCB1aW50OF90IGhpZ2hWYWx1
ZSwgdW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKK3Zv
aWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWVSYW5nZSh1aW50OF90IGxvd1Zh
bHVlLCB1aW50OF90IGhpZ2hWYWx1ZSwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJv
b2wgY2FzZVNlbnNpdGl2ZSkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGxvd1ZhbHVlIDwg
aGlnaFZhbHVlLCAiVGhlIGluc3RydWN0aW9uIHNlbWFudGljIGltcG9zZSBsb3dWYWx1ZSBpcyBz
dHJpY3RseSBsZXNzIHRoYW4gaGlnaFZhbHVlLiIpOwogCkBAIC05MSw3ICs5NCw3IEBAIHZvaWQg
REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWUKICAgICBhcHBlbmQ8dWludDhfdD4o
bV9ieXRlY29kZSwgbG93VmFsdWUpOwogICAgIGFwcGVuZDx1aW50OF90PihtX2J5dGVjb2RlLCBo
aWdoVmFsdWUpOwogICAgIG1fbGlua1JlY29yZHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fYnl0
ZWNvZGUuc2l6ZSgpLCBkZXN0aW5hdGlvbk5vZGVJbmRleCkpOwotICAgIGFwcGVuZDx1bnNpZ25l
ZD4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5n
LgorICAgIGFwcGVuZDx1aW50MzJfdD4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMgdmFsdWUgd2ls
bCBiZSBzZXQgd2hlbiBsaW5raW5nLgogfQogCiB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVt
aXRUZXJtaW5hdGUoKQpAQCAtOTksMTEgKzEwMiwxMSBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGls
ZXI6OmVtaXRUZXJtaW5hdGUoCiAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1f
Ynl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0ZSk7CiB9CiAKLXZvaWQg
REZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUodW5zaWduZWQgaW5kZXgsIGJvb2wgcm9v
dCkKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUodWludDMyX3QgaW5kZXgs
IGJvb2wgcm9vdCkKIHsKICAgICBjb25zdCBERkFOb2RlJiBub2RlID0gbV9kZmEubm9kZXNbaW5k
ZXhdOwogICAgIGlmIChub2RlLmlzS2lsbGVkKCkpIHsKLSAgICAgICAgbV9ub2RlU3RhcnRPZmZz
ZXRzW2luZGV4XSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICAg
ICAgbV9ub2RlU3RhcnRPZmZzZXRzW2luZGV4XSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTExLDEzICsxMTQsOCBA
QCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKHVuCiAgICAgaWYgKCFyb290
KQogICAgICAgICBtX25vZGVTdGFydE9mZnNldHNbaW5kZXhdID0gbV9ieXRlY29kZS5zaXplKCk7
CiAKLSAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG5vZGUuYWN0aW9ucyhtX2RmYSkpIHsKLSAg
ICAgICAgLy8gSGlnaCBiaXRzIGFyZSB1c2VkIHRvIHN0b3JlIGZsYWdzLiBBIGJvb2xlYW4gaXMg
c3RvcmVkIGluIHRoZSA0OHRoIGJpdC4gU2VlIGNvbXBpbGVSdWxlTGlzdC4KLSAgICAgICAgaWYg
KGFjdGlvbiAmIDB4RkZGRjAwMDAwMDAwKQotICAgICAgICAgICAgZW1pdFRlc3RGbGFnc0FuZEFw
cGVuZEFjdGlvbihzdGF0aWNfY2FzdDx1aW50MTZfdD4oYWN0aW9uID4+IDMyKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGFjdGlvbiksIGFjdGlvbiAmIElmRG9tYWluRmxhZyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGVtaXRBcHBlbmRBY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFj
dGlvbiksIGFjdGlvbiAmIElmRG9tYWluRmxhZyk7Ci0gICAgfQorICAgIGZvciAodWludDY0X3Qg
YWN0aW9uIDogbm9kZS5hY3Rpb25zKG1fZGZhKSkKKyAgICAgICAgZW1pdEFwcGVuZEFjdGlvbihh
Y3Rpb24pOwogICAgIAogICAgIC8vIElmIHdlIGp1bXAgdG8gdGhlIHJvb3QsIHdlIGRvbid0IHdh
bnQgdG8gcmUtYWRkIGl0cyBhY3Rpb25zIHRvIGEgSGFzaFNldC4KICAgICAvLyBXZSBrbm93IHdl
IGhhdmUgYWxyZWFkeSBhZGRlZCB0aGVtIGJlY2F1c2UgdGhlIHJvb3QgaXMgYWx3YXlzIGNvbXBp
bGVkIGZpcnN0IGFuZCB3ZSBhbHdheXMgc3RhcnQgaW50ZXJwcmV0aW5nIGF0IHRoZSBiZWdpbm5p
bmcuCkBAIC0yMTIsMjQgKzIxMCwyNCBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBp
bGVDaGVja0ZvCiB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUoKQogewogICAgIC8v
IERGQSBoZWFkZXIuCi0gICAgdW5zaWduZWQgc3RhcnRMb2NhdGlvbiA9IG1fYnl0ZWNvZGUuc2l6
ZSgpOwotICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgMCk7CisgICAgdWludDMyX3Qg
c3RhcnRMb2NhdGlvbiA9IG1fYnl0ZWNvZGUuc2l6ZSgpOworICAgIGFwcGVuZDx1aW50MzJfdD4o
bV9ieXRlY29kZSwgMCk7CiAgICAgbV9ub2RlU3RhcnRPZmZzZXRzLnJlc2l6ZShtX2RmYS5ub2Rl
cy5zaXplKCkpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgcm9vdCBpcyBhbHdheXMgYXQg
dGhlIGJlZ2lubmluZyBvZiB0aGUgYnl0ZWNvZGUuCiAgICAgY29tcGlsZU5vZGUobV9kZmEucm9v
dCwgdHJ1ZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZhLm5vZGVzLnNpemUo
KTsgaSsrKSB7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fZGZhLm5vZGVzLnNpemUo
KTsgaSsrKSB7CiAgICAgICAgIGlmIChpICE9IG1fZGZhLnJvb3QpCiAgICAgICAgICAgICBjb21w
aWxlTm9kZShpLCBmYWxzZSk7CiAgICAgfQogCiAgICAgLy8gTGluay4KICAgICBmb3IgKGNvbnN0
IGF1dG8mIGxpbmtSZWNvcmQgOiBtX2xpbmtSZWNvcmRzKSB7Ci0gICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IGxpbmtSZWNvcmQuZmlyc3Q7Ci0gICAgICAgIEFTU0VSVCghKCpyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkKj4oJm1fYnl0ZWNvZGVbb2Zmc2V0XSkpKTsKKyAgICAgICAgdWludDMyX3Qg
b2Zmc2V0ID0gbGlua1JlY29yZC5maXJzdDsKKyAgICAgICAgQVNTRVJUKCEoKnJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPigmbV9ieXRlY29kZVtvZmZzZXRdKSkpOwogCi0gICAgICAgIHVuc2ln
bmVkIHRhcmdldCA9IG1fbm9kZVN0YXJ0T2Zmc2V0c1tsaW5rUmVjb3JkLnNlY29uZF07Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpOworICAgICAgICB1aW50MzJfdCB0YXJnZXQgPSBtX25vZGVTdGFydE9mZnNldHNb
bGlua1JlY29yZC5zZWNvbmRdOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXJnZXQgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKTsKICAgICAgICAgc2V0MzJCaXRzKG1f
Ynl0ZWNvZGUsIG9mZnNldCwgbV9ub2RlU3RhcnRPZmZzZXRzW2xpbmtSZWNvcmQuc2Vjb25kXSk7
CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGVDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkocmV2aXNpb24gMTg0MjkwKQorKysgU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdHJ1
Y3QgUmFuZ2UgewotICAgICAgICBSYW5nZSh1aW50OF90IG1pbiwgdWludDhfdCBtYXgsIHVuc2ln
bmVkIGRlc3RpbmF0aW9uLCBib29sIGNhc2VTZW5zaXRpdmUpCisgICAgICAgIFJhbmdlKHVpbnQ4
X3QgbWluLCB1aW50OF90IG1heCwgdWludDMyX3QgZGVzdGluYXRpb24sIGJvb2wgY2FzZVNlbnNp
dGl2ZSkKICAgICAgICAgICAgIDogbWluKG1pbikKICAgICAgICAgICAgICwgbWF4KG1heCkKICAg
ICAgICAgICAgICwgZGVzdGluYXRpb24oZGVzdGluYXRpb24pCkBAIC01OSwyOCArNTksMjcgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICB1aW50OF90IG1pbjsKICAgICAgICAgdWludDhf
dCBtYXg7Ci0gICAgICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uOworICAgICAgICB1aW50MzJfdCBk
ZXN0aW5hdGlvbjsKICAgICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlOwogICAgIH07Ci0gICAgdm9p
ZCBjb21waWxlTm9kZSh1bnNpZ25lZCwgYm9vbCByb290KTsKKyAgICB2b2lkIGNvbXBpbGVOb2Rl
KHVpbnQzMl90LCBib29sIHJvb3QpOwogICAgIHZvaWQgY29tcGlsZU5vZGVUcmFuc2l0aW9ucyhj
b25zdCBERkFOb2RlJik7CiAgICAgdm9pZCBjb21waWxlQ2hlY2tGb3JSYW5nZShjb25zdCBSYW5n
ZSYpOwogCi0gICAgdm9pZCBlbWl0QXBwZW5kQWN0aW9uKHVuc2lnbmVkLCBib29sIGlmRG9tYWlu
KTsKLSAgICB2b2lkIGVtaXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24odWludDE2X3QgZmxhZ3Ms
IHVuc2lnbmVkLCBib29sIGlmRG9tYWluKTsKLSAgICB2b2lkIGVtaXRKdW1wKHVuc2lnbmVkIGRl
c3RpbmF0aW9uTm9kZUluZGV4KTsKLSAgICB2b2lkIGVtaXRDaGVja1ZhbHVlKHVpbnQ4X3QgdmFs
dWUsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpOwot
ICAgIHZvaWQgZW1pdENoZWNrVmFsdWVSYW5nZSh1aW50OF90IGxvd1ZhbHVlLCB1aW50OF90IGhp
Z2hWYWx1ZSwgdW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2
ZSk7CisgICAgdm9pZCBlbWl0QXBwZW5kQWN0aW9uKHVpbnQ2NF90KTsKKyAgICB2b2lkIGVtaXRK
dW1wKHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKKyAgICB2b2lkIGVtaXRDaGVja1Zh
bHVlKHVpbnQ4X3QgdmFsdWUsIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBib29sIGNh
c2VTZW5zaXRpdmUpOworICAgIHZvaWQgZW1pdENoZWNrVmFsdWVSYW5nZSh1aW50OF90IGxvd1Zh
bHVlLCB1aW50OF90IGhpZ2hWYWx1ZSwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJv
b2wgY2FzZVNlbnNpdGl2ZSk7CiAgICAgdm9pZCBlbWl0VGVybWluYXRlKCk7CiAKICAgICBWZWN0
b3I8REZBQnl0ZWNvZGU+JiBtX2J5dGVjb2RlOwogICAgIGNvbnN0IERGQSYgbV9kZmE7CiAgICAg
Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX25vZGVTdGFydE9mZnNldHM7CisgICAgVmVjdG9yPHVp
bnQzMl90PiBtX25vZGVTdGFydE9mZnNldHM7CiAgICAgCiAgICAgLy8gVGhlIGZpcnN0IHZhbHVl
IGlzIHRoZSBpbmRleCBpbiB0aGUgYnl0ZWNvZGUgYnVmZmVyIHdoZXJlIHRoZSBqdW1wIGlzIHRv
IGJlIHdyaXR0ZW4uCiAgICAgLy8gVGhlIHNlY29uZCB2YWx1ZSBpcyB0aGUgaW5kZXggb2YgdGhl
IG5vZGUgdG8ganVtcCB0by4KLSAgICBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25l
ZD4+IG1fbGlua1JlY29yZHM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMy
X3Q+PiBtX2xpbmtSZWNvcmRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODQyOTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsMTIgQEAgc3RhdGljIGlubGluZSBJbnRUeXBlIGdl
dEJpdHMoY29uc3QgREZBQgogdm9pZCBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRB
cHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1Db3VudGVyLCBBY3Rpb25zJiBhY3Rpb25zLCBi
b29sIGlmRG9tYWluKQogewogICAgIEFTU0VSVChnZXRCaXRzPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2Vz
VXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uCi0gICAgICAgIHx8
IGdldEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxl
bmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOworICAgICAgICB8fCBnZXRCaXRzPERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyLCBtX3BhZ2VzVXNlZCkgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluCisgICAgICAgIHx8IGdldEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVjdGlv
bj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNV
c2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVz
aGVldCk7CiAgICAgYWN0aW9ucy5hZGQoKGlmRG9tYWluID8gSWZEb21haW5GbGFnIDogMCkgfCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpLCBtX3BhZ2Vz
VXNlZCkpKTsKICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1l
bnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CisgICAgQVNTRVJUKGlu
c3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5k
QWN0aW9uKSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikpOworICAgIEFTU0VSVChpbnN0cnVjdGlv
blNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikg
PT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpB
cHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCkpOwogfQogCiB2b2lkIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJv
Z3JhbUNvdW50ZXIsIHVpbnQxNl90IGZsYWdzLCBBY3Rpb25zJiBhY3Rpb25zLCBib29sIGlmRG9t
YWluKQpAQCAtNjUsOSArNjgsMTAgQEAgdm9pZCBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRl
cnByZXRUZQogICAgIGlmIChmbGFncyAmIGdldEJpdHM8dWludDE2X3Q+KG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSwgbV9w
YWdlc1VzZWQpKQogICAgICAgICBhY3Rpb25zLmFkZCgoaWZEb21haW4gPyBJZkRvbWFpbkZsYWcg
OiAwKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2Rl
LCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkg
KyBzaXplb2YodWludDE2X3QpLCBtX3BhZ2VzVXNlZCkpKTsKICAgICBwcm9ncmFtQ291bnRlciAr
PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRl
c3RGbGFnc0FuZEFwcGVuZEFjdGlvbik7CisgICAgQVNTRVJUKGluc3RydWN0aW9uU2l6ZVdpdGhB
cmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9u
KSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikpOwogfQogCi1ERkFCeXRlY29k
ZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmFjdGlvbnNGcm9t
REZBUm9vdCgpCitERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OmFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290KCkKIHsKICAg
ICBBY3Rpb25zIGFjdGlvbnM7CiAKQEAgLTc3LDEyICs4MSwxOSBAQCBERkFCeXRlY29kZUludGVy
cHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAKICAgICB3aGlsZSAocHJvZ3JhbUNvdW50ZXIgPCBk
ZmFCeXRlY29kZUxlbmd0aCkgewogICAgICAgICBERkFCeXRlY29kZUluc3RydWN0aW9uIGluc3Ry
dWN0aW9uID0gc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZVtw
cm9ncmFtQ291bnRlcl0pOwotICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKQorICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpCiAgICAg
ICAgICAgICBpbnRlcnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFjdGlvbnMsIGZh
bHNlKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6QXBwZW5kQWN0aW9uKQorICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1
Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rp
b24pOwogICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pCiAgICAgICAgICAgICBwcm9ncmFtQ291bnRl
ciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAvLyBhY3Rpb25zRm9yRGVmYXVsdFN0eWxlc2hlZXRGcm9tREZBUm9vdCBz
aG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIERGQSB3aXRob3V0IGRvbWFpbnMsCisgICAgICAg
ICAgICAvLyB3aGljaCBzaG91bGQgbmV2ZXIgaGF2ZSBhbnkgYWN0aW9ucyB3aXRoIGlmLWRvbWFp
bi4KKyAgICAgICAgICAgIEFTU0VSVChpbnN0cnVjdGlvbiAhPSBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOworICAgICAgICAgICAg
QVNTRVJUKGluc3RydWN0aW9uICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlv
bldpdGhJZkRvbWFpbik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAg
ICByZXR1cm4gYWN0aW9uczsKIH0KQEAgLTEwMiwxMiArMTEzLDE0IEBAIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAgICAgICAgdW5zaWduZWQgZGZhQnl0ZWNvZGVM
ZW5ndGggPSBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBw
cm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpOwogICAgICAgICBwcm9ncmFtQ291bnRlciArPSBz
aXplb2YodW5zaWduZWQpOwogCi0gICAgICAgIC8vIFNraXAgdGhlIGFjdGlvbnMgb24gdGhlIERG
QSByb290LiBUaGVzZSBhcmUgYWNjZXNzZWQgdmlhIGFjdGlvbnNGcm9tREZBUm9vdC4KKyAgICAg
ICAgLy8gU2tpcCB0aGUgZGVmYXVsdCBzdHlsZXNoZWV0IGFjdGlvbnMgb24gdGhlIERGQSByb290
LiBUaGVzZSBhcmUgYWNjZXNzZWQgdmlhIGFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21E
RkFSb290LgogICAgICAgICBpZiAoIWRmYVN0YXJ0KSB7CiAgICAgICAgICAgICB3aGlsZSAocHJv
Z3JhbUNvdW50ZXIgPCBkZmFCeXRlY29kZUxlbmd0aCkgewogICAgICAgICAgICAgICAgIERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBzdGF0aWNfY2FzdDxERkFCeXRlY29kZUlu
c3RydWN0aW9uPihtX2J5dGVjb2RlW3Byb2dyYW1Db3VudGVyXSk7CisgICAgICAgICAgICAgICAg
aWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRl
ZmF1bHRTdHlsZXNoZWV0KQorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBp
bnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVu
ZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KTsKICAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rp
b24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKQotICAgICAgICAgICAg
ICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CisgICAgICAgICAgICAgICAgICAg
IGludGVycHJldEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwgYWN0aW9ucywgZmFsc2UpOwog
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbikKICAgICAgICAgICAgICAgICAgICAgaW50
ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBmbGFncywgYWN0
aW9ucywgZmFsc2UpOwogICAgICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVy
LmgJKHJldmlzaW9uIDE4NDI5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50
NjRfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+
PiBBY3Rpb25zOwogICAgIAogICAgIEFjdGlvbnMgaW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmLCB1
aW50MTZfdCBmbGFncyk7Ci0gICAgQWN0aW9ucyBhY3Rpb25zRnJvbURGQVJvb3QoKTsKKyAgICBB
Y3Rpb25zIGFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290KCk7CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBpbnRlcnByZXRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1Db3Vu
dGVyLCBBY3Rpb25zJiwgYm9vbCBpZkRvbWFpbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRJbmZvLmgJKHJldmlzaW9uIDE4NDI5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2LDEw
IEBAIHR5cGVkZWYgdWludDE2X3QgUmVzb3VyY2VGbGFnczsKIC8vIFRoZSBmaXJzdCAzMiBiaXRz
IG9mIGEgdWludDY0X3QgYWN0aW9uIGFyZSB1c2VkIGZvciB0aGUgYWN0aW9uIGxvY2F0aW9uLgog
Ly8gVGhlIG5leHQgMTYgYml0cyBhcmUgdXNlZCBmb3IgdGhlIGZsYWdzIChSZXNvdXJjZVR5cGUg
YW5kIExvYWRUeXBlKS4KIC8vIFRoZSBuZXh0IGJpdCBpcyB1c2VkIHRvIG1hcmsgYWN0aW9ucyB0
aGF0IGFyZSBmcm9tIGEgcnVsZSB3aXRoIGFuIGlmLWRvbWFpbiBjb25kaXRpb24uCisvLyBUaGUg
bmV4dCBiaXQgaXMgdXNlZCB0byBtYXJrIGFjdGlvbnMgdGhhdCBpbiB0aGUgZGVmYXVsdCBzdHls
ZXNoZWV0LgogLy8gVGhlIHZhbHVlcyAtMSBhbmQgLTIgYXJlIHVzZWQgZm9yIHJlbW92ZWQgYW5k
IGVtcHR5IHZhbHVlcyBpbiBIYXNoVGFibGVzLgogY29uc3QgdWludDY0X3QgSWZEb21haW5GbGFn
ID0gMHgwMDAxMDAwMDAwMDAwMDAwOworY29uc3QgdWludDY0X3QgRGlzcGxheU5vbmVTdHlsZVNo
ZWV0RmxhZyA9IDB4MDAwMjAwMDAwMDAwMDAwMDsKIAogUmVzb3VyY2VUeXBlIHRvUmVzb3VyY2VU
eXBlKENhY2hlZFJlc291cmNlOjpUeXBlKTsKIHVpbnQxNl90IHJlYWRSZXNvdXJjZVR5cGUoY29u
c3QgU3RyaW5nJik7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxODQzOTkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wNS0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIFJl
bGF4IHJlc3RyaWN0aW9ucyBvbiB0cmlnZ2VycyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUwNjkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUX0YpOgorICAgICAgICBVcGRhdGUgYW5kIGFkZCB0ZXN0cyBmb3IgbmV3IHBv
c3NpYmlsaXRpZXMgd2l0aCAuKgorCiAyMDE1LTA1LTE1ICBSYXZpIFBoYW5lZW5kcmEgS2FzaWJo
YXRsYSAgPHIua2FzaWJoYXRsYUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVc2VyIGludGVycnVw
dGlvbiB3aGlsZSBydW5uaW5nIG9mIHJ1bi13ZWJraXQtdGVzdHMgc2hvdWxkIGFsc28gZ2VuZXJh
dGUgcmVzdWx0cy5odG1sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29udGVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDE4NDI5MCkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwMCw2ICs3MDAsMzYgQEAgdm9pZCBjaGVja0NvbXBpbGVyRXJy
b3IoY29uc3QgY2hhcioganNvbgogICAgICAgICBFWFBFQ1RfU1RSRVEoY29tcGlsZXJFcnJvci5j
YXRlZ29yeSgpLm5hbWUoKSwgZXhwZWN0ZWRFcnJvci5jYXRlZ29yeSgpLm5hbWUoKSk7CiB9CiAK
K1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTWF0Y2hlc0V2ZXJ5dGhpbmcpCit7CisgICAg
Ly8gT25seSBjc3MtZGlzcGxheS1ub25lIHJ1bGVzIHdpdGggdHJpZ2dlcnMgdGhhdCBtYXRjaCBl
dmVyeXRoaW5nLCBubyBkb21haW4gcnVsZXMsIGFuZCBubyBmbGFncworICAgIC8vIHNob3VsZCBn
byBpbiB0aGUgZ2xvYmFsIGRpc3BsYXk6bm9uZSBzdHlsZXNoZWV0LiBjc3MtZGlzcGxheS1ub25l
IHJ1bGVzIHdpdGggZG9tYWluIHJ1bGVzIG9yIGZsYWdzCisgICAgLy8gYXJlIGFwcGxpZWQgc2Vw
YXJhdGVseSBvbiBwYWdlcyB3aGVyZSB0aGV5IGFwcGx5LgorICAgIGF1dG8gYmFja2VuZDEgPSBt
YWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixc
InNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4q
XCJ9fV0iKTsKKyAgICBFWFBFQ1RfVFJVRShudWxscHRyICE9IGJhY2tlbmQxLmdsb2JhbERpc3Bs
YXlOb25lU3R5bGVTaGVldChBU0NJSUxpdGVyYWwoInRlc3RGaWx0ZXIiKSkpOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQxLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZyIp
LCB7IH0pOyAvLyBTZWxlY3RvciBpcyBpbiBnbG9iYWwgc3R5bGVzaGVldC4KKyAgICAKKyAgICBh
dXRvIGJhY2tlbmQyID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3Mt
ZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCIuKlwiLFwiaWYtZG9tYWluXCI6W1wid2Via2l0Lm9yZ1wiXX19XSIpOwor
ICAgIEVYUEVDVF9FUShudWxscHRyLCBiYWNrZW5kMi5nbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hl
ZXQoQVNDSUlMaXRlcmFsKCJ0ZXN0RmlsdGVyIikpKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
MiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmciKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kMiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3czYy5vcmciKSwg
eyB9KTsKKyAgICAKKyAgICBhdXRvIGJhY2tlbmQzID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwiLFwidW5sZXNzLWRvbWFpblwiOltc
IndlYmtpdC5vcmdcIl19fV0iKTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgYmFja2VuZDMuZ2xv
YmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KEFTQ0lJTGl0ZXJhbCgidGVzdEZpbHRlciIpKSk7Cisg
ICAgdGVzdFJlcXVlc3QoYmFja2VuZDMsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJr
aXQub3JnIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDMsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImh0dHA6Ly93M2Mub3JnIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgCisgICAgYXV0byBiYWNrZW5kNCA9IG1h
a2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwi
c2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipc
IixcImxvYWQtdHlwZVwiOltcInRoaXJkLXBhcnR5XCJdfX1dIik7CisgICAgRVhQRUNUX0VRKG51
bGxwdHIsIGJhY2tlbmQ0Lmdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldChBU0NJSUxpdGVyYWwo
InRlc3RGaWx0ZXIiKSkpOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ0LCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQ0LCBzdWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZyIsICJodHRwOi8v
d2Via2l0Lm9yZyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5
Tm9uZVNlbGVjdG9yIH0pOworCisgICAgLy8gY3NzLWRpc3BsYXktbm9uZSBydWxlcyBhZnRlciBp
Z25vcmUtcHJldmlvdXMtcnVsZXMgc2hvdWxkIG5vdCBiZSBwdXQgaW4gdGhlIGRlZmF1bHQgc3R5
bGVzaGVldC4KKyAgICBhdXRvIGJhY2tlbmQ1ID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwiLipcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1k
aXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIi4qXCJ9fV0iKTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgYmFja2VuZDUu
Z2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KEFTQ0lJTGl0ZXJhbCgidGVzdEZpbHRlciIpKSk7
Cit9CisgICAgCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09OKQogewog
ICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiWyIsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkKTsKQEAgLTc2MCwxMCArNzkwLDkgQEAgVEVTVF9GKENv
bnRlbnRFeHRlbnNpb25UZXN0LCBJbnZhbGlkSlNPTgogICAgICAgICBDb250ZW50RXh0ZW5zaW9u
czo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZENTU0Rpc3BsYXlOb25lQWN0aW9u
VHlwZSk7CiAKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
d2Via2l0Lm9yZ1wifX0sIgotICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRp
c3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwiLipcIn19XSIsCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdBZnRlcklnbm9yZVByZXZpb3Vz
UnVsZXMpOwotICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpc
ImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCIsXCJpZi1kb21haW5c
IjpbXCJhXCJdfX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6
UmVnZXhNYXRjaGVzRXZlcnl0aGluZ1dpdGhEb21haW5zKTsKLSAgICBjaGVja0NvbXBpbGVyRXJy
b3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCIuKlwiLFwidW5sZXNzLWRvbWFpblwiOltcImFcIl19fV0iLCBDb250ZW50RXh0
ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNFdmVyeXRoaW5nV2l0
aERvbWFpbnMpOworICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXkt
bm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwiLipcIn19XSIsIHsgfSk7CisgICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipc
IixcImlmLWRvbWFpblwiOltcImFcIl19fV0iLCB7IH0pOworICAgIGNoZWNrQ29tcGlsZXJFcnJv
cigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIi4qXCIsXCJ1bmxlc3MtZG9tYWluXCI6W1wiYVwiXX19XSIsIHsgfSk7CiAgICAg
Y2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW1wifX1dIiwKICAgICAgICAgQ29udGVudEV4dGVu
c2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRSZWdleCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253221</attachid>
            <date>2015-05-15 13:57:59 -0700</date>
            <delta_ts>2015-05-18 14:45:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145069-20150515135634.patch</filename>
            <type>text/plain</type>
            <size>43400</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDQxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE1LTA1LTE1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gUmVsYXggcmVzdHJpY3Rpb25zIG9uIHRyaWdnZXJzIHRoYXQgbWF0Y2ggZXZl
cnl0aGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTA2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIEFQSSB0ZXN0cyB0aGF0IGNvdmVyIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgdGVz
dCBmb3IgY29ycmVjdG5lc3MgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlzcGxheU5v
bmVTZWxlY3RvcnMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YWRk
VW5pdmVyc2FsQWN0aW9uc1RvREZBKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICBQdXQgdW5pdmVyc2FsQWN0aW9uc1dpdGhv
dXREb21haW5zIGludG8gdGhlIERGQSBmcm9tIGZpbHRlcnNXaXRob3V0RG9tYWlucyBhbmQKKyAg
ICAgICAgcHV0IHVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucyBpbnRvIHRoZSBERkEgZnJvbSBm
aWx0ZXJzV2l0aERvbWFpbnMuICAgICAgICAKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KToKKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaDoKKyAgICAgICAgUmVtb3ZlIGVycm9y
IGNvZGVzIGZvciBlcnJvcnMgdGhhdCBhcmUgbm90IGVycm9ycyBhbnkgbW9yZS4KKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6
YWN0aW9uc0ZvclJlc291cmNlTG9hZCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVj
dGlvblNpemVXaXRoQXJndW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZUNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpzZXQzMkJpdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hl
Y2tWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNv
ZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29t
cGlsZXI6OmVtaXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaDoKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRB
cHBlbmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6YWN0aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJl
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6YWN0aW9uc0Zyb21ERkFSb290KTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmg6CisgICAgICAgIEFkZCBhIG5ldyBi
eXRlY29kZSBBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCB0byBtYXJrIGFjdGlvbnMgdGhh
dCBhcmUgY3NzLWRpc3BsYXktbm9uZQorICAgICAgICB0aGF0IG5lZWQgdG8gYmUgcHV0IGluIHRo
ZSBkZWZhdWx0IHN0eWxlc2hlZXQgdG8gYmUgaWdub3JlZCBvciBub3QgYXMgYSB3aG9sZS4KKyAg
ICAgICAgY3NzLWRpc3BsYXktbm9uZSBhY3Rpb25zIHdpdGggZmxhZ3Mgb3IgZG9tYWluIHJ1bGVz
IGFuZCBjc3MtZGlzcGxheS1ub25lIGFjdGlvbnMgCisgICAgICAgIGFmdGVyIGlnbm9yZS1wcmV2
aW91cy1ydWxlcyBhY3Rpb25zIGFyZSBub3QgdG8gYmUgaW4gdGhpcyBwcmVjb21waWxlZCBzdHls
ZXNoZWV0LCBidXQKKyAgICAgICAgdGhleSB3aWxsIGJlIGFwcGxpZWQgYXMgbmVlZGVkIHBlciBw
YWdlLiAgVGhlIHByZWNvbXBpbGVkIHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBhcHBsaWVkCisgICAg
ICAgIGlmIG5vIGlnbm9yZS1wcmV2aW91cy1ydWxlcyBhY3Rpb24gaXMgdHJpZ2dlcmVkLgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRJbmZvLmg6CisKIDIwMTUtMDUtMTUgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbQ29udGVudCBF
eHRlbnNpb25zXSBGYWlsIHRvIGxvYWQgb2xkIGNvbnRlbnQgZXh0ZW5zaW9uIGZpbGVzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDE4NDQxMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp+
Q29tcGlsZWRDb250ZQogVmVjdG9yPFN0cmluZz4gQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpn
bG9iYWxEaXNwbGF5Tm9uZVNlbGVjdG9ycyhWZWN0b3I8Ym9vbD4mIHBhZ2VzVXNlZCkKIHsKICAg
ICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVycHJldGVyKGZpbHRlcnNXaXRob3V0RG9tYWlu
c0J5dGVjb2RlKCksIGZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlTGVuZ3RoKCksIHBhZ2Vz
VXNlZCk7Ci0gICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBhY3Rpb25Mb2NhdGlv
bnMgPSBpbnRlcnByZXRlci5hY3Rpb25zRnJvbURGQVJvb3QoKTsKKyAgICBERkFCeXRlY29kZUlu
dGVycHJldGVyOjpBY3Rpb25zIGFjdGlvbkxvY2F0aW9ucyA9IGludGVycHJldGVyLmFjdGlvbnNG
b3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290KCk7CiAgICAgCiAgICAgVmVjdG9yPEFjdGlv
bj4gZ2xvYmFsQWN0aW9uczsKICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogYWN0
aW9uTG9jYXRpb25zKQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAx
ODQ0MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMjEgKzEyMSwyNCBAQCBzdGF0
aWMgVmVjdG9yPHVuc2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zCiAgICAgcmV0dXJuIGFjdGlvbkxv
Y2F0aW9uczsKIH0KIAotdHlwZWRlZiBIYXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50
NjRfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+
PiBVbml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnNTZXQ7Cit0eXBlZGVmIEhhc2hTZXQ8dWludDY0X3Qs
IERlZmF1bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1aW50NjRfdD4+IFVuaXZlcnNhbEFjdGlvblNldDsKIAotc3RhdGljIHZvaWQgYWRk
VW5pdmVyc2FsQWN0aW9uc1RvREZBKERGQSYgZGZhLCBjb25zdCBVbml2ZXJzYWxBY3Rpb25Mb2Nh
dGlvbnNTZXQmIHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9ucykKK3N0YXRpYyB2b2lkIGFkZFVuaXZl
cnNhbEFjdGlvbnNUb0RGQShERkEmIGRmYSwgY29uc3QgVW5pdmVyc2FsQWN0aW9uU2V0JiB1bml2
ZXJzYWxBY3Rpb25zKQogewotICAgIGlmICh1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMuaXNFbXB0
eSgpKQorICAgIGlmICh1bml2ZXJzYWxBY3Rpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgREZBTm9kZSYgcm9vdCA9IGRmYS5ub2Rlc1tkZmEucm9vdF07CisgICAgQVNTRVJU
KCFyb290LmFjdGlvbnNMZW5ndGgoKSk7CiAgICAgdW5zaWduZWQgYWN0aW9uc1N0YXJ0ID0gZGZh
LmFjdGlvbnMuc2l6ZSgpOwotICAgIGRmYS5hY3Rpb25zLnJlc2VydmVDYXBhY2l0eShkZmEuYWN0
aW9ucy5zaXplKCkgKyB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBmb3Ig
KHVpbnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zKQotICAg
ICAgICBkZmEuYWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoYWN0aW9uTG9jYXRpb24pOworICAgIGRm
YS5hY3Rpb25zLnJlc2VydmVDYXBhY2l0eShkZmEuYWN0aW9ucy5zaXplKCkgKyB1bml2ZXJzYWxB
Y3Rpb25zLnNpemUoKSk7CisgICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiB1bml2ZXJzYWxBY3Rp
b25zKQorICAgICAgICBkZmEuYWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoYWN0aW9uKTsKICAgICB1
bnNpZ25lZCBhY3Rpb25zRW5kID0gZGZhLmFjdGlvbnMuc2l6ZSgpOworCiAgICAgdW5zaWduZWQg
YWN0aW9uc0xlbmd0aCA9IGFjdGlvbnNFbmQgLSBhY3Rpb25zU3RhcnQ7CiAgICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9NRVNTQUdFKGFjdGlvbnNMZW5ndGggPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQxNl90Pjo6bWF4KCksICJUb28gbWFueSB1bmNvbWJpbmVkIGFjdGlvbnMgdGhhdCBtYXRjaCBl
dmVyeXRoaW5nIik7Ci0gICAgZGZhLm5vZGVzW2RmYS5yb290XS5zZXRBY3Rpb25zKGFjdGlvbnNT
dGFydCwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFjdGlvbnNMZW5ndGgpKTsKKyAgICByb290LnNl
dEFjdGlvbnMoYWN0aW9uc1N0YXJ0LCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oYWN0aW9uc0xlbmd0
aCkpOwogfQogCiBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFeHRlbnNp
b25Db21waWxhdGlvbkNsaWVudCYgY2xpZW50LCBTdHJpbmcmJiBydWxlTGlzdCkKQEAgLTE1Niw3
ICsxNTksOCBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAg
TE9HX0xBUkdFX1NUUlVDVFVSRVMoYWN0aW9ucywgYWN0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9m
KFNlcmlhbGl6ZWRBY3Rpb25CeXRlKSk7CiAgICAgYWN0aW9ucy5jbGVhcigpOwogCi0gICAgVW5p
dmVyc2FsQWN0aW9uTG9jYXRpb25zU2V0IHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9uczsKKyAgICBV
bml2ZXJzYWxBY3Rpb25TZXQgdW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zOworICAgIFVu
aXZlcnNhbEFjdGlvblNldCB1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnM7CiAKICAgICAvLyBG
SVhNRTogVGhlc2UgZG9uJ3QgYWxsIG5lZWQgdG8gYmUgaW4gbWVtb3J5IGF0IHRoZSBzYW1lIHRp
bWUuCiAgICAgQ29tYmluZWRVUkxGaWx0ZXJzIGZpbHRlcnNXaXRob3V0RG9tYWluczsKQEAgLTE2
OSw2ICsxNzMsNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAg
ICAgZm9yICh1bnNpZ25lZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBwYXJzZWRSdWxlTGlz
dC5zaXplKCk7ICsrcnVsZUluZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25S
dWxlJiBjb250ZW50RXh0ZW5zaW9uUnVsZSA9IHBhcnNlZFJ1bGVMaXN0W3J1bGVJbmRleF07CiAg
ICAgICAgIGNvbnN0IFRyaWdnZXImIHRyaWdnZXIgPSBjb250ZW50RXh0ZW5zaW9uUnVsZS50cmln
Z2VyKCk7CisgICAgICAgIGNvbnN0IEFjdGlvbiYgYWN0aW9uID0gY29udGVudEV4dGVuc2lvblJ1
bGUuYWN0aW9uKCk7CiAgICAgICAgIEFTU0VSVCh0cmlnZ2VyLnVybEZpbHRlci5sZW5ndGgoKSk7
CiAKICAgICAgICAgLy8gSGlnaCBiaXRzIGFyZSB1c2VkIGZvciBmbGFncy4gVGhpcyBzaG91bGQg
bWF0Y2ggaG93IHRoZXkgYXJlIHVzZWQgaW4gREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5v
ZGUuCkBAIC0xNzgsOSArMTgzLDEyIEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3Qo
Q29udGVudEUKICAgICAgICAgICAgIEFTU0VSVCh0cmlnZ2VyLmRvbWFpbkNvbmRpdGlvbiA9PSBU
cmlnZ2VyOjpEb21haW5Db25kaXRpb246Ok5vbmUpOwogICAgICAgICAgICAgc3RhdHVzID0gZmls
dGVyc1dpdGhvdXREb21haW5QYXJzZXIuYWRkUGF0dGVybih0cmlnZ2VyLnVybEZpbHRlciwgdHJp
Z2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MpOwog
ICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVyeXRo
aW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlnbm9yZVByZXZpb3VzUnVsZXNTZWVuKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNo
ZXNFdmVyeXRoaW5nQWZ0ZXJJZ25vcmVQcmV2aW91c1J1bGVzOwotICAgICAgICAgICAgICAgIHVu
aXZlcnNhbEFjdGlvbkxvY2F0aW9ucy5hZGQoYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7CisgICAg
ICAgICAgICAgICAgaWYgKCFpZ25vcmVQcmV2aW91c1J1bGVzU2VlbgorICAgICAgICAgICAgICAg
ICAgICAmJiB0cmlnZ2VyLmRvbWFpbkNvbmRpdGlvbiA9PSBUcmlnZ2VyOjpEb21haW5Db25kaXRp
b246Ok5vbmUKKyAgICAgICAgICAgICAgICAgICAgJiYgYWN0aW9uLnR5cGUoKSA9PSBBY3Rpb25U
eXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yCisgICAgICAgICAgICAgICAgICAgICYmICF0cmln
Z2VyLmZsYWdzKQorICAgICAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzIHw9
IERpc3BsYXlOb25lU3R5bGVTaGVldEZsYWc7CisgICAgICAgICAgICAgICAgdW5pdmVyc2FsQWN0
aW9uc1dpdGhvdXREb21haW5zLmFkZChhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzKTsKICAgICAgICAg
ICAgICAgICBzdGF0dXMgPSBVUkxGaWx0ZXJQYXJzZXI6Ok9rOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKHN0YXR1cyAhPSBVUkxGaWx0ZXJQYXJzZXI6Ok9rKSB7CkBAIC0xOTYsOCAr
MjA0LDEwIEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RhdHVzID0gZmlsdGVyc1dpdGhE
b21haW5QYXJzZXIuYWRkUGF0dGVybih0cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0
ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MpOwotICAgICAgICAgICAg
aWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKQotICAgICAg
ICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5
dGhpbmdXaXRoRG9tYWluczsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gVVJMRmlsdGVyUGFy
c2VyOjpNYXRjaGVzRXZlcnl0aGluZykgeworICAgICAgICAgICAgICAgIHVuaXZlcnNhbEFjdGlv
bnNXaXRoRG9tYWlucy5hZGQoYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7CisgICAgICAgICAgICAg
ICAgc3RhdHVzID0gVVJMRmlsdGVyUGFyc2VyOjpPazsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChzdGF0dXMgIT0gVVJMRmlsdGVyUGFyc2VyOjpPaykgewogICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCJFcnJvciB3aGlsZSBwYXJzaW5nICVzOiAlc1xuIiwgdHJpZ2dlci51cmxGaWx0
ZXIudXRmOCgpLmRhdGEoKSwgVVJMRmlsdGVyUGFyc2VyOjpzdGF0dXNTdHJpbmcoc3RhdHVzKS51
dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVy
cm9yOjpKU09OSW52YWxpZFJlZ2V4OwpAQCAtMjA3LDcgKzIxNyw3IEBAIHN0ZDo6ZXJyb3JfY29k
ZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoc3Rh
dHVzID09IFVSTEZpbHRlclBhcnNlcjo6T2spOwogICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRl
bnRFeHRlbnNpb25SdWxlLmFjdGlvbigpLnR5cGUoKSA9PSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2
aW91c1J1bGVzKQorICAgICAgICBpZiAoYWN0aW9uLnR5cGUoKSA9PSBBY3Rpb25UeXBlOjpJZ25v
cmVQcmV2aW91c1J1bGVzKQogICAgICAgICAgICAgaWdub3JlUHJldmlvdXNSdWxlc1NlZW4gPSB0
cnVlOwogICAgIH0KICAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhwYXJzZWRSdWxlTGlzdCwgcGFy
c2VkUnVsZUxpc3QuY2FwYWNpdHkoKSAqIHNpemVvZihDb250ZW50RXh0ZW5zaW9uUnVsZSkpOyAv
LyBEb2Vzbid0IGluY2x1ZGUgc3RyaW5ncy4KQEAgLTIzMSw3ICsyNDEsNyBAQCBzdGQ6OmVycm9y
X2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJl
IHR1bmVkLiBNb3JlIE5GQXMgdGFrZSBsb25nZXIgdG8gaW50ZXJwcmV0LCBmZXdlciB1c2UgbW9y
ZSBtZW1vcnkgYW5kIHRpbWUgdG8gY29tcGlsZS4KICAgICBjb25zdCB1bnNpZ25lZCBtYXhORkFT
aXplID0gNTAwMDA7CiAgICAgCi0gICAgYm9vbCBmaXJzdE5GQVNlZW4gPSBmYWxzZTsKKyAgICBi
b29sIGZpcnN0TkZBV2l0aG91dERvbWFpbnNTZWVuID0gZmFsc2U7CiAgICAgLy8gRklYTUU6IENv
bWJpbmUgc21hbGwgTkZBcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBORkFzLgogICAgIGZpbHRl
cnNXaXRob3V0RG9tYWlucy5wcm9jZXNzTkZBcyhtYXhORkFTaXplLCBbJl0oTkZBJiYgbmZhKSB7
CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCkBAIC0yNTIs
OSArMjYyLDkgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogI2Vu
ZGlmCiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWRmYS5ub2Rlc1tkZmEucm9vdF0uaGFz
QWN0aW9ucygpLCAiQWxsIGFjdGlvbnMgb24gdGhlIERGQSByb290IHNob3VsZCBjb21lIGZyb20g
cmVndWxhciBleHByZXNzaW9ucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcuIik7CiAKLSAgICAgICAg
aWYgKCFmaXJzdE5GQVNlZW4pIHsKKyAgICAgICAgaWYgKCFmaXJzdE5GQVdpdGhvdXREb21haW5z
U2VlbikgewogICAgICAgICAgICAgLy8gUHV0IGFsbCB0aGUgdW5pdmVyc2FsIGFjdGlvbnMgb24g
dGhlIGZpcnN0IERGQS4KLSAgICAgICAgICAgIGFkZFVuaXZlcnNhbEFjdGlvbnNUb0RGQShkZmEs
IHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9ucyk7CisgICAgICAgICAgICBhZGRVbml2ZXJzYWxBY3Rp
b25zVG9ERkEoZGZhLCB1bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMpOwogICAgICAgICB9
CiAKICAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKQEAgLTI2MywxOCArMjcz
LDE4IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAgICAg
TE9HX0xBUkdFX1NUUlVDVFVSRVMoYnl0ZWNvZGUsIGJ5dGVjb2RlLmNhcGFjaXR5KCkgKiBzaXpl
b2YodWludDhfdCkpOwogICAgICAgICBjbGllbnQud3JpdGVGaWx0ZXJzV2l0aG91dERvbWFpbnNC
eXRlY29kZShXVEY6Om1vdmUoYnl0ZWNvZGUpKTsKIAotICAgICAgICBmaXJzdE5GQVNlZW4gPSB0
cnVlOworICAgICAgICBmaXJzdE5GQVdpdGhvdXREb21haW5zU2VlbiA9IHRydWU7CiAgICAgfSk7
CiAgICAgQVNTRVJUKGZpbHRlcnNXaXRob3V0RG9tYWlucy5pc0VtcHR5KCkpOwogCi0gICAgaWYg
KCFmaXJzdE5GQVNlZW4pIHsKKyAgICBpZiAoIWZpcnN0TkZBV2l0aG91dERvbWFpbnNTZWVuKSB7
CiAgICAgICAgIC8vIE91ciBieXRlY29kZSBpbnRlcnByZXRlciBleHBlY3RzIHRvIGhhdmUgYXQg
bGVhc3Qgb25lIERGQSwgc28gaWYgd2UgaGF2ZW4ndCBzZWVuIGFueQogICAgICAgICAvLyBjcmVh
dGUgYSBkdW1teSBvbmUgYW5kIGFkZCBhbnkgdW5pdmVyc2FsIGFjdGlvbnMuCiAKICAgICAgICAg
TkZBIGR1bW15TkZBOwogICAgICAgICBERkEgZHVtbXlERkEgPSBORkFUb0RGQTo6Y29udmVydChk
dW1teU5GQSk7CiAKLSAgICAgICAgYWRkVW5pdmVyc2FsQWN0aW9uc1RvREZBKGR1bW15REZBLCB1
bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMpOworICAgICAgICBhZGRVbml2ZXJzYWxBY3Rpb25zVG9E
RkEoZHVtbXlERkEsIHVuaXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucyk7CiAKICAgICAgICAg
VmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKICAgICAgICAgREZBQnl0ZWNvZGVDb21waWxl
ciBjb21waWxlcihkdW1teURGQSwgYnl0ZWNvZGUpOwpAQCAtMjgyLDkgKzI5MiwxMCBAQCBzdGQ6
OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgICAgIExPR19MQVJHRV9T
VFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ4X3Qp
KTsKICAgICAgICAgY2xpZW50LndyaXRlRmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoV1RG
Ojptb3ZlKGJ5dGVjb2RlKSk7CiAgICAgfQotICAgIExPR19MQVJHRV9TVFJVQ1RVUkVTKHVuaXZl
cnNhbEFjdGlvbkxvY2F0aW9ucywgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zLmNhcGFjaXR5KCkg
KiBzaXplb2YodW5zaWduZWQpKTsKLSAgICB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMuY2xlYXIo
KTsKKyAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyh1bml2ZXJzYWxBY3Rpb24sIHVuaXZlcnNhbEFj
dGlvbi5jYXBhY2l0eSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7CisgICAgdW5pdmVyc2FsQWN0aW9u
c1dpdGhvdXREb21haW5zLmNsZWFyKCk7CiAgICAgCisgICAgYm9vbCBmaXJzdE5GQVdpdGhEb21h
aW5zU2VlbiA9IGZhbHNlOwogICAgIGZpbHRlcnNXaXRoRG9tYWlucy5wcm9jZXNzTkZBcyhtYXhO
RkFTaXplLCBbJl0oTkZBJiYgbmZhKSB7CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01B
Q0hJTkVfREVCVUdHSU5HCiAgICAgICAgIGRhdGFMb2dGKCJmaWx0ZXJzV2l0aERvbWFpbnMgTkZB
XG4iKTsKQEAgLTMwNCwxMyArMzE1LDM4IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxp
c3QoQ29udGVudEUKICNlbmRpZgogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFkZmEubm9k
ZXNbZGZhLnJvb3RdLmhhc0FjdGlvbnMoKSwgIkZpbHRlcnMgd2l0aCBkb21haW5zIHRoYXQgbWF0
Y2ggZXZlcnl0aGluZyBhcmUgbm90IGFsbG93ZWQgcmlnaHQgbm93LiIpOwogICAgICAgICAKKyAg
ICAgICAgaWYgKCFmaXJzdE5GQVdpdGhEb21haW5zU2VlbikgeworICAgICAgICAgICAgLy8gUHV0
IGFsbCB0aGUgdW5pdmVyc2FsIGFjdGlvbnMgb24gdGhlIGZpcnN0IERGQS4KKyAgICAgICAgICAg
IGFkZFVuaXZlcnNhbEFjdGlvbnNUb0RGQShkZmEsIHVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlu
cyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFZlY3RvcjxERkFCeXRlY29kZT4gYnl0
ZWNvZGU7CiAgICAgICAgIERGQUJ5dGVjb2RlQ29tcGlsZXIgY29tcGlsZXIoZGZhLCBieXRlY29k
ZSk7CiAgICAgICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsKICAgICAgICAgTE9HX0xBUkdFX1NUUlVD
VFVSRVMoYnl0ZWNvZGUsIGJ5dGVjb2RlLmNhcGFjaXR5KCkgKiBzaXplb2YodWludDhfdCkpOwog
ICAgICAgICBjbGllbnQud3JpdGVGaWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZShXVEY6Om1vdmUo
Ynl0ZWNvZGUpKTsKKyAgICAgICAgCisgICAgICAgIGZpcnN0TkZBV2l0aERvbWFpbnNTZWVuID0g
dHJ1ZTsKICAgICB9KTsKICAgICBBU1NFUlQoZmlsdGVyc1dpdGhEb21haW5zLmlzRW1wdHkoKSk7
CisgICAgCisgICAgaWYgKCFmaXJzdE5GQVdpdGhEb21haW5zU2VlbikgeworICAgICAgICAvLyBP
dXIgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgZXhwZWN0cyB0byBoYXZlIGF0IGxlYXN0IG9uZSBERkEs
IHNvIGlmIHdlIGhhdmVuJ3Qgc2VlbiBhbnkKKyAgICAgICAgLy8gY3JlYXRlIGEgZHVtbXkgb25l
IGFuZCBhZGQgYW55IHVuaXZlcnNhbCBhY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgTkZBIGR1
bW15TkZBOworICAgICAgICBERkEgZHVtbXlERkEgPSBORkFUb0RGQTo6Y29udmVydChkdW1teU5G
QSk7CisgICAgICAgIAorICAgICAgICBhZGRVbml2ZXJzYWxBY3Rpb25zVG9ERkEoZHVtbXlERkEs
IHVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucyk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8
REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOworICAgICAgICBERkFCeXRlY29kZUNvbXBpbGVyIGNvbXBp
bGVyKGR1bW15REZBLCBieXRlY29kZSk7CisgICAgICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsKKyAg
ICAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoYnl0ZWNvZGUsIGJ5dGVjb2RlLmNhcGFjaXR5KCkg
KiBzaXplb2YodWludDhfdCkpOworICAgICAgICBjbGllbnQud3JpdGVGaWx0ZXJzV2l0aERvbWFp
bnNCeXRlY29kZShXVEY6Om1vdmUoYnl0ZWNvZGUpKTsKKyAgICB9CisgICAgTE9HX0xBUkdFX1NU
UlVDVFVSRVModW5pdmVyc2FsQWN0aW9uc1dpdGhEb21haW5zLCB1bml2ZXJzYWxBY3Rpb25zV2l0
aERvbWFpbnMuY2FwYWNpdHkoKSAqIHNpemVvZih1bnNpZ25lZCkpOworICAgIHVuaXZlcnNhbEFj
dGlvbnNXaXRoRG9tYWlucy5jbGVhcigpOwogCiAgICAgZG9tYWluRmlsdGVycy5wcm9jZXNzTkZB
cyhtYXhORkFTaXplLCBbJl0oTkZBJiYgbmZhKSB7CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NU
QVRFX01BQ0hJTkVfREVCVUdHSU5HCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAJKHJldmlzaW9u
IDE4NDQxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEwICs3NSw2IEBAIGNvbnN0IHN0
ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnMKICAgICAgICAgICAgICAgICByZXR1cm4g
IkludmFsaWQgY3NzLWRpc3BsYXktbm9uZSBhY3Rpb24gdHlwZS4gUmVxdWlyZXMgYSBzZWxlY3Rv
ci4iOwogICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
UmVnZXg6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIHJl
Z3VsYXIgZXhwcmVzc2lvbi4iOwotICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdBZnRlcklnbm9yZVByZXZpb3VzUnVsZXM6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICJSZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbWF0Y2ggZXZlcnl0
aGluZyBhcmUgb25seSBhbGxvd2VkIGJlZm9yZSB0aGUgZmlyc3QgaWdub3JlLXByZXZpb3VzLXJ1
bGVzLiI7Ci0gICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6UmVnZXhNYXRj
aGVzRXZlcnl0aGluZ1dpdGhEb21haW5zOgotICAgICAgICAgICAgICAgIHJldHVybiAiUmVndWxh
ciBleHByZXNzaW9ucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgYXJlIG5vdCBhbGxvd2VkIHdpdGgg
dW5sZXNzLSBvciBpZi1kb21haW4uIjsKICAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJJ
bnZhbGlkIGRvbWFpbiBsaXN0LiI7CiAgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTkRvbWFpbk5vdExvd2VyQ2FzZUFTQ0lJOgpJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgJ
KHJldmlzaW9uIDE4NDQxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw2IEBAIGVu
dW0gY2xhc3MgQ29udGVudEV4dGVuc2lvbkVycm9yIHsKICAgICBKU09OSW52YWxpZEFjdGlvblR5
cGUsCiAgICAgSlNPTkludmFsaWRDU1NEaXNwbGF5Tm9uZUFjdGlvblR5cGUsCiAgICAgSlNPTklu
dmFsaWRSZWdleCwKLSAgICAKLSAgICBSZWdleE1hdGNoZXNFdmVyeXRoaW5nQWZ0ZXJJZ25vcmVQ
cmV2aW91c1J1bGVzLAotICAgIFJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdXaXRoRG9tYWlucywKIH07
CiAKIFdFQkNPUkVfRVhQT1JUIGNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRl
bnNpb25FcnJvckNhdGVnb3J5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHJl
dmlzaW9uIDE4NDQxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NiwxNiArMTQ2LDYg
QEAgVmVjdG9yPEFjdGlvbj4gQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIGlmICghc2F3SWdub3JlUHJldmlvdXNSdWxlcykgewotICAg
ICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB1bml2ZXJzYWxBY3Rpb25z
ID0gd2l0aG91dERvbWFpbnNJbnRlcnByZXRlci5hY3Rpb25zRnJvbURGQVJvb3QoKTsKLSAgICAg
ICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uTG9jYXRpb24gOiB1bml2ZXJzYWxBY3Rpb25zKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBkZXNlcmlhbGl6ZSBhbiBh
Y3Rpb24gYWxsIHRoZSB3YXkgaWYgaXQgaXMgYSBjc3MtZGlzcGxheS1ub25lIHNlbGVjdG9yLgot
ICAgICAgICAgICAgICAgIEFjdGlvbiBhY3Rpb24gPSBBY3Rpb246OmRlc2VyaWFsaXplKGFjdGlv
bnMsIGFjdGlvbnNMZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb25Mb2NhdGlvbikp
OwotICAgICAgICAgICAgICAgIGFjdGlvbi5zZXRFeHRlbnNpb25JZGVudGlmaWVyKGNvbnRlbnRF
eHRlbnNpb24tPmlkZW50aWZpZXIoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDU1Mgc2VsZWN0
b3JzIHdlcmUgYWxyZWFkeSBjb21waWxlZCBpbnRvIGEgc3R5bGVzaGVldCB1c2luZyBnbG9iYWxE
aXNwbGF5Tm9uZVNlbGVjdG9ycy4KLSAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnR5cGUoKSAh
PSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yKQotICAgICAgICAgICAgICAgICAg
ICBmaW5hbEFjdGlvbnMuYXBwZW5kKGFjdGlvbik7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAg
ICBmaW5hbEFjdGlvbnMuYXBwZW5kKEFjdGlvbihBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVN0
eWxlU2hlZXQsIGNvbnRlbnRFeHRlbnNpb24tPmlkZW50aWZpZXIoKSkpOwogICAgICAgICAgICAg
ZmluYWxBY3Rpb25zLmxhc3QoKS5zZXRFeHRlbnNpb25JZGVudGlmaWVyKGNvbnRlbnRFeHRlbnNp
b24tPmlkZW50aWZpZXIoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5o
CShyZXZpc2lvbiAxODQ0MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyAtIEludGVybmFsIFdlYkNvcmUgSW50ZXJmYWNlLgogICAgIFdF
QkNPUkVfRVhQT1JUIFZlY3RvcjxBY3Rpb24+IGFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3Qg
UmVzb3VyY2VMb2FkSW5mbyYpIGNvbnN0OwotICAgIFN0eWxlU2hlZXRDb250ZW50cyogZ2xvYmFs
RGlzcGxheU5vbmVTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgU3R5bGVTaGVldENvbnRlbnRzKiBnbG9iYWxEaXNwbGF5Tm9uZVN0
eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKSBjb25zdDsKIAogICAgIHZvaWQgcHJv
Y2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3Vy
Y2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCShy
ZXZpc2lvbiAxODQ0MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIGVudW0gY2xhc3MgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbiA6IHVpbnQKICAgICAvLyBBcHBlbmRBY3Rpb24gaGFzIG9uZSBh
cmd1bWVudDoKICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCiAgICAgQXBw
ZW5kQWN0aW9uLAorICAgIEFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0LAogICAgIEFwcGVu
ZEFjdGlvbldpdGhJZkRvbWFpbiwKICAgICAKICAgICAvLyBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rp
b24gaGFzIHR3byBhcmd1bWVudHM6CkBAIC03NiwyMCArNzcsMjEgQEAgc3RhdGljIGlubGluZSBz
aXplX3QgaW5zdHJ1Y3Rpb25TaXplV2l0aAogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24pIHsKICAg
ICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVDYXNlU2Vuc2l0aXZlOgog
ICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2
ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVv
Zih1aW50OF90KSArIHNpemVvZih1bnNpZ25lZCk7CisgICAgICAgIHJldHVybiBzaXplb2YoREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDMyX3Qp
OwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZVJhbmdlQ2FzZVNl
bnNpdGl2ZToKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVSYW5n
ZUNhc2VJbnNlbnNpdGl2ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3Ry
dWN0aW9uKSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1bnNp
Z25lZCk7CisgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBz
aXplb2YodWludDhfdCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDMyX3QpOwogICAg
IGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uOgorICAgIGNhc2UgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQ6CiAgICAg
Y2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW46Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodW5z
aWduZWQpOworICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsg
c2l6ZW9mKHVpbnQzMl90KTsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RG
bGFnc0FuZEFwcGVuZEFjdGlvbjoKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRl
c3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbjoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodW5z
aWduZWQpOworICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsg
c2l6ZW9mKHVpbnQxNl90KSArIHNpemVvZih1aW50MzJfdCk7CiAgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpUZXJtaW5hdGU6CiAgICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbik7CiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVu
c2lnbmVkKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSAr
IHNpemVvZih1aW50MzJfdCk7CiAgICAgfQogfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE4NDQxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw0NyArNDMsNTAgQEAg
aW5saW5lIHZvaWQgYXBwZW5kKFZlY3RvcjxERkFCeXRlY29kZT4mIAogICAgICpyZWludGVycHJl
dF9jYXN0PEludFR5cGUqPigmYnl0ZWNvZGVbYnl0ZWNvZGUuc2l6ZSgpIC0gc2l6ZW9mKEludFR5
cGUpXSkgPSB2YWx1ZTsKIH0KIAotaW5saW5lIHZvaWQgc2V0MzJCaXRzKFZlY3RvcjxERkFCeXRl
Y29kZT4mIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgdmFsdWUpCitpbmxpbmUg
dm9pZCBzZXQzMkJpdHMoVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUsIHVpbnQzMl90IGlu
ZGV4LCB1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KCZieXRlY29kZVtpbmRleF0pID0gdmFsdWU7CisgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPigmYnl0ZWNvZGVbaW5kZXhdKSA9IHZhbHVlOwogfQogCi12b2lkIERGQUJ5dGVjb2RlQ29t
cGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24odW5zaWduZWQgYWN0aW9uLCBib29sIGlmRG9tYWluKQor
dm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aW9uKHVpbnQ2NF90IGFjdGlv
bikKIHsKLSAgICBpZiAoaWZEb21haW4pCi0gICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3Ry
dWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25X
aXRoSWZEb21haW4pOwotICAgIGVsc2UKLSAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7
Ci0gICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBhY3Rpb24pOwotfQotCi12b2lkIERG
QUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24odWludDE2X3Qg
ZmxhZ3MsIHVuc2lnbmVkIGFjdGlvbiwgYm9vbCBpZkRvbWFpbikKLXsKLSAgICBBU1NFUlQoZmxh
Z3MpOwotICAgIGlmIChpZkRvbWFpbikKLSAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFw
cGVuZEFjdGlvbldpdGhJZkRvbWFpbik7Ci0gICAgZWxzZQotICAgICAgICBhcHBlbmQ8REZBQnl0
ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVz
dEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKLSAgICBhcHBlbmQ8dWludDE2X3Q+KG1fYnl0ZWNvZGUs
IGZsYWdzKTsKLSAgICBhcHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIGFjdGlvbik7CisgICAg
Ly8gSGlnaCBiaXRzIGFyZSB1c2VkIHRvIHN0b3JlIGZsYWdzLiBCb29sZWFucyBhcmUgc3RvcmVk
IGluIHRoZSA0OHRoIGFuZCA0OXRoIGJpdC4gU2VlIGNvbXBpbGVSdWxlTGlzdC4KKyAgICBpZiAo
YWN0aW9uICYgMHhGRkZGMDAwMDAwMDApIHsKKyAgICAgICAgQVNTRVJUKCEoYWN0aW9uICYgRGlz
cGxheU5vbmVTdHlsZVNoZWV0RmxhZykpOworICAgICAgICBpZiAoYWN0aW9uICYgSWZEb21haW5G
bGFnKQorICAgICAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNv
ZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJ
ZkRvbWFpbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUlu
c3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NB
bmRBcHBlbmRBY3Rpb24pOworICAgICAgICBhcHBlbmQ8dWludDE2X3Q+KG1fYnl0ZWNvZGUsIHN0
YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb24gPj4gMzIpKTsKKyAgICAgICAgYXBwZW5kPHVpbnQz
Ml90PihtX2J5dGVjb2RlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKGFjdGlvbiAmIERpc3BsYXlOb25lU3R5bGVTaGVldEZsYWcpIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoYWN0aW9uICYgSWZEb21haW5GbGFnKSk7Cisg
ICAgICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKGFjdGlvbiAmIElmRG9tYWluRmxhZykKKyAgICAgICAgICAgIGFwcGVu
ZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKKyAgICAgICAgYXBwZW5kPHVpbnQzMl90PihtX2J5
dGVjb2RlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uKSk7CisgICAgfQogfQogCi12b2lk
IERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRKdW1wKHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUlu
ZGV4KQordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0SnVtcCh1aW50MzJfdCBkZXN0aW5h
dGlvbk5vZGVJbmRleCkKIHsKICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9i
eXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcCk7CiAgICAgbV9saW5rUmVjb3Jk
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9ieXRlY29kZS5zaXplKCksIGRlc3RpbmF0aW9uTm9k
ZUluZGV4KSk7Ci0gICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCAwKTsgLy8gVGhpcyB2
YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCisgICAgYXBwZW5kPHVpbnQzMl90PihtX2J5
dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCiB9CiAK
LXZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWUodWludDhfdCB2YWx1ZSwg
dW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKK3ZvaWQg
REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdENoZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdWludDMy
X3QgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKIHsKICAgICBhcHBl
bmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgY2FzZVNlbnNpdGl2ZSA/IERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkNoZWNrVmFsdWVDYXNlU2Vuc2l0aXZlIDogREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbjo6Q2hlY2tWYWx1ZUNhc2VJbnNlbnNpdGl2ZSk7CiAgICAgYXBwZW5kPHVp
bnQ4X3Q+KG1fYnl0ZWNvZGUsIHZhbHVlKTsKICAgICBtX2xpbmtSZWNvcmRzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihtX2J5dGVjb2RlLnNpemUoKSwgZGVzdGluYXRpb25Ob2RlSW5kZXgpKTsKLSAg
ICBhcHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIDApOyAvLyBUaGlzIHZhbHVlIHdpbGwgYmUg
c2V0IHdoZW4gbGlua2luZy4KKyAgICBhcHBlbmQ8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIDApOyAv
LyBUaGlzIHZhbHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KIH0KIAotdm9pZCBERkFCeXRl
Y29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZVJhbmdlKHVpbnQ4X3QgbG93VmFsdWUsIHVpbnQ4
X3QgaGlnaFZhbHVlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgYm9vbCBjYXNlU2Vu
c2l0aXZlKQordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZVJhbmdlKHVp
bnQ4X3QgbG93VmFsdWUsIHVpbnQ4X3QgaGlnaFZhbHVlLCB1aW50MzJfdCBkZXN0aW5hdGlvbk5v
ZGVJbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
bG93VmFsdWUgPCBoaWdoVmFsdWUsICJUaGUgaW5zdHJ1Y3Rpb24gc2VtYW50aWMgaW1wb3NlIGxv
d1ZhbHVlIGlzIHN0cmljdGx5IGxlc3MgdGhhbiBoaWdoVmFsdWUuIik7CiAKQEAgLTkxLDcgKzk0
LDcgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0Q2hlY2tWYWx1ZQogICAgIGFwcGVu
ZDx1aW50OF90PihtX2J5dGVjb2RlLCBsb3dWYWx1ZSk7CiAgICAgYXBwZW5kPHVpbnQ4X3Q+KG1f
Ynl0ZWNvZGUsIGhpZ2hWYWx1ZSk7CiAgICAgbV9saW5rUmVjb3Jkcy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIobV9ieXRlY29kZS5zaXplKCksIGRlc3RpbmF0aW9uTm9kZUluZGV4KSk7Ci0gICAgYXBw
ZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3
aGVuIGxpbmtpbmcuCisgICAgYXBwZW5kPHVpbnQzMl90PihtX2J5dGVjb2RlLCAwKTsgLy8gVGhp
cyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCiB9CiAKIHZvaWQgREZBQnl0ZWNvZGVD
b21waWxlcjo6ZW1pdFRlcm1pbmF0ZSgpCkBAIC05OSwxMSArMTAyLDExIEBAIHZvaWQgREZBQnl0
ZWNvZGVDb21waWxlcjo6ZW1pdFRlcm1pbmF0ZSgKICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0
cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlKTsK
IH0KIAotdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSh1bnNpZ25lZCBpbmRl
eCwgYm9vbCByb290KQordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSh1aW50
MzJfdCBpbmRleCwgYm9vbCByb290KQogewogICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBtX2Rm
YS5ub2Rlc1tpbmRleF07CiAgICAgaWYgKG5vZGUuaXNLaWxsZWQoKSkgewotICAgICAgICBtX25v
ZGVTdGFydE9mZnNldHNbaW5kZXhdID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpOworICAgICAgICBtX25vZGVTdGFydE9mZnNldHNbaW5kZXhdID0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTEs
MTMgKzExNCw4IEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUodW4KICAg
ICBpZiAoIXJvb3QpCiAgICAgICAgIG1fbm9kZVN0YXJ0T2Zmc2V0c1tpbmRleF0gPSBtX2J5dGVj
b2RlLnNpemUoKTsKIAotICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5hY3Rpb25zKG1f
ZGZhKSkgewotICAgICAgICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQgdG8gc3RvcmUgZmxhZ3MuIEEg
Ym9vbGVhbiBpcyBzdG9yZWQgaW4gdGhlIDQ4dGggYml0LiBTZWUgY29tcGlsZVJ1bGVMaXN0Lgot
ICAgICAgICBpZiAoYWN0aW9uICYgMHhGRkZGMDAwMDAwMDApCi0gICAgICAgICAgICBlbWl0VGVz
dEZsYWdzQW5kQXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb24gPj4gMzIp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSwgYWN0aW9uICYgSWZEb21haW5GbGFnKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZW1pdEFwcGVuZEFjdGlvbihzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oYWN0aW9uKSwgYWN0aW9uICYgSWZEb21haW5GbGFnKTsKLSAgICB9CisgICAgZm9y
ICh1aW50NjRfdCBhY3Rpb24gOiBub2RlLmFjdGlvbnMobV9kZmEpKQorICAgICAgICBlbWl0QXBw
ZW5kQWN0aW9uKGFjdGlvbik7CiAgICAgCiAgICAgLy8gSWYgd2UganVtcCB0byB0aGUgcm9vdCwg
d2UgZG9uJ3Qgd2FudCB0byByZS1hZGQgaXRzIGFjdGlvbnMgdG8gYSBIYXNoU2V0LgogICAgIC8v
IFdlIGtub3cgd2UgaGF2ZSBhbHJlYWR5IGFkZGVkIHRoZW0gYmVjYXVzZSB0aGUgcm9vdCBpcyBh
bHdheXMgY29tcGlsZWQgZmlyc3QgYW5kIHdlIGFsd2F5cyBzdGFydCBpbnRlcnByZXRpbmcgYXQg
dGhlIGJlZ2lubmluZy4KQEAgLTIxMiwyNCArMjEwLDI0IEBAIHZvaWQgREZBQnl0ZWNvZGVDb21w
aWxlcjo6Y29tcGlsZUNoZWNrRm8KIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZSgp
CiB7CiAgICAgLy8gREZBIGhlYWRlci4KLSAgICB1bnNpZ25lZCBzdGFydExvY2F0aW9uID0gbV9i
eXRlY29kZS5zaXplKCk7Ci0gICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCAwKTsKKyAg
ICB1aW50MzJfdCBzdGFydExvY2F0aW9uID0gbV9ieXRlY29kZS5zaXplKCk7CisgICAgYXBwZW5k
PHVpbnQzMl90PihtX2J5dGVjb2RlLCAwKTsKICAgICBtX25vZGVTdGFydE9mZnNldHMucmVzaXpl
KG1fZGZhLm5vZGVzLnNpemUoKSk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSByb290IGlz
IGFsd2F5cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBieXRlY29kZS4KICAgICBjb21waWxlTm9k
ZShtX2RmYS5yb290LCB0cnVlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kZmEu
bm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9kZmEu
bm9kZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKGkgIT0gbV9kZmEucm9vdCkKICAgICAg
ICAgICAgIGNvbXBpbGVOb2RlKGksIGZhbHNlKTsKICAgICB9CiAKICAgICAvLyBMaW5rLgogICAg
IGZvciAoY29uc3QgYXV0byYgbGlua1JlY29yZCA6IG1fbGlua1JlY29yZHMpIHsKLSAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gbGlua1JlY29yZC5maXJzdDsKLSAgICAgICAgQVNTRVJUKCEoKnJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPigmbV9ieXRlY29kZVtvZmZzZXRdKSkpOworICAgICAg
ICB1aW50MzJfdCBvZmZzZXQgPSBsaW5rUmVjb3JkLmZpcnN0OworICAgICAgICBBU1NFUlQoISgq
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KCZtX2J5dGVjb2RlW29mZnNldF0pKSk7CiAKLSAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9ub2RlU3RhcnRPZmZzZXRzW2xpbmtSZWNvcmQuc2Vj
b25kXTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0ICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgICAgIHVpbnQzMl90IHRhcmdldCA9IG1fbm9kZVN0
YXJ0T2Zmc2V0c1tsaW5rUmVjb3JkLnNlY29uZF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRh
cmdldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpOwogICAgICAgICBz
ZXQzMkJpdHMobV9ieXRlY29kZSwgb2Zmc2V0LCBtX25vZGVTdGFydE9mZnNldHNbbGlua1JlY29y
ZC5zZWNvbmRdKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCShyZXZpc2lvbiAxODQ0
MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIHN0cnVjdCBSYW5nZSB7Ci0gICAgICAgIFJhbmdlKHVpbnQ4X3QgbWluLCB1aW50OF90
IG1heCwgdW5zaWduZWQgZGVzdGluYXRpb24sIGJvb2wgY2FzZVNlbnNpdGl2ZSkKKyAgICAgICAg
UmFuZ2UodWludDhfdCBtaW4sIHVpbnQ4X3QgbWF4LCB1aW50MzJfdCBkZXN0aW5hdGlvbiwgYm9v
bCBjYXNlU2Vuc2l0aXZlKQogICAgICAgICAgICAgOiBtaW4obWluKQogICAgICAgICAgICAgLCBt
YXgobWF4KQogICAgICAgICAgICAgLCBkZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKQEAgLTU5LDI4
ICs1OSwyNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIHVpbnQ4X3QgbWluOwogICAg
ICAgICB1aW50OF90IG1heDsKLSAgICAgICAgdW5zaWduZWQgZGVzdGluYXRpb247CisgICAgICAg
IHVpbnQzMl90IGRlc3RpbmF0aW9uOwogICAgICAgICBib29sIGNhc2VTZW5zaXRpdmU7CiAgICAg
fTsKLSAgICB2b2lkIGNvbXBpbGVOb2RlKHVuc2lnbmVkLCBib29sIHJvb3QpOworICAgIHZvaWQg
Y29tcGlsZU5vZGUodWludDMyX3QsIGJvb2wgcm9vdCk7CiAgICAgdm9pZCBjb21waWxlTm9kZVRy
YW5zaXRpb25zKGNvbnN0IERGQU5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVDaGVja0ZvclJhbmdl
KGNvbnN0IFJhbmdlJik7CiAKLSAgICB2b2lkIGVtaXRBcHBlbmRBY3Rpb24odW5zaWduZWQsIGJv
b2wgaWZEb21haW4pOwotICAgIHZvaWQgZW1pdFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbih1aW50
MTZfdCBmbGFncywgdW5zaWduZWQsIGJvb2wgaWZEb21haW4pOwotICAgIHZvaWQgZW1pdEp1bXAo
dW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgpOwotICAgIHZvaWQgZW1pdENoZWNrVmFsdWUo
dWludDhfdCB2YWx1ZSwgdW5zaWduZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNl
bnNpdGl2ZSk7Ci0gICAgdm9pZCBlbWl0Q2hlY2tWYWx1ZVJhbmdlKHVpbnQ4X3QgbG93VmFsdWUs
IHVpbnQ4X3QgaGlnaFZhbHVlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgYm9vbCBj
YXNlU2Vuc2l0aXZlKTsKKyAgICB2b2lkIGVtaXRBcHBlbmRBY3Rpb24odWludDY0X3QpOworICAg
IHZvaWQgZW1pdEp1bXAodWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5kZXgpOworICAgIHZvaWQg
ZW1pdENoZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdWludDMyX3QgZGVzdGluYXRpb25Ob2RlSW5k
ZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSk7CisgICAgdm9pZCBlbWl0Q2hlY2tWYWx1ZVJhbmdlKHVp
bnQ4X3QgbG93VmFsdWUsIHVpbnQ4X3QgaGlnaFZhbHVlLCB1aW50MzJfdCBkZXN0aW5hdGlvbk5v
ZGVJbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlKTsKICAgICB2b2lkIGVtaXRUZXJtaW5hdGUoKTsK
IAogICAgIFZlY3RvcjxERkFCeXRlY29kZT4mIG1fYnl0ZWNvZGU7CiAgICAgY29uc3QgREZBJiBt
X2RmYTsKICAgICAKLSAgICBWZWN0b3I8dW5zaWduZWQ+IG1fbm9kZVN0YXJ0T2Zmc2V0czsKKyAg
ICBWZWN0b3I8dWludDMyX3Q+IG1fbm9kZVN0YXJ0T2Zmc2V0czsKICAgICAKICAgICAvLyBUaGUg
Zmlyc3QgdmFsdWUgaXMgdGhlIGluZGV4IGluIHRoZSBieXRlY29kZSBidWZmZXIgd2hlcmUgdGhl
IGp1bXAgaXMgdG8gYmUgd3JpdHRlbi4KICAgICAvLyBUaGUgc2Vjb25kIHZhbHVlIGlzIHRoZSBp
bmRleCBvZiB0aGUgbm9kZSB0byBqdW1wIHRvLgotICAgIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWdu
ZWQsIHVuc2lnbmVkPj4gbV9saW5rUmVjb3JkczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPHVpbnQz
Ml90LCB1aW50MzJfdD4+IG1fbGlua1JlY29yZHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDb250
ZW50RXh0ZW5zaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGVJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE4NDQx
MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1MywxMiBAQCBzdGF0aWMgaW5saW5l
IEludFR5cGUgZ2V0Qml0cyhjb25zdCBERkFCCiB2b2lkIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6
OmludGVycHJldEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIEFjdGlvbnMm
IGFjdGlvbnMsIGJvb2wgaWZEb21haW4pCiB7CiAgICAgQVNTRVJUKGdldEJpdHM8REZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50
ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24K
LSAgICAgICAgfHwgZ2V0Qml0czxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBt
X2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciwgbV9wYWdlc1VzZWQpID09IERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CisgICAgICAgIHx8IGdl
dEJpdHM8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0
aCwgcHJvZ3JhbUNvdW50ZXIsIG1fcGFnZXNVc2VkKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4KKyAgICAgICAgfHwgZ2V0Qml0czxERkFCeXRlY29k
ZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRl
ciwgbV9wYWdlc1VzZWQpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRl
ZmF1bHRTdHlsZXNoZWV0KTsKICAgICBhY3Rpb25zLmFkZCgoaWZEb21haW4gPyBJZkRvbWFpbkZs
YWcgOiAwKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVj
b2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29k
ZSksIG1fcGFnZXNVc2VkKSkpOwogICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6
ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKKyAg
ICBBU1NFUlQoaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKSk7CisgICAgQVNTRVJU
KGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uKSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KSk7CiB9CiAKIHZvaWQgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVu
c2lnbmVkJiBwcm9ncmFtQ291bnRlciwgdWludDE2X3QgZmxhZ3MsIEFjdGlvbnMmIGFjdGlvbnMs
IGJvb2wgaWZEb21haW4pCkBAIC02NSw5ICs2OCwxMCBAQCB2b2lkIERGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXI6OmludGVycHJldFRlCiAgICAgaWYgKGZsYWdzICYgZ2V0Qml0czx1aW50MTZfdD4obV9i
eXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0
ZWNvZGUpLCBtX3BhZ2VzVXNlZCkpCiAgICAgICAgIGFjdGlvbnMuYWRkKChpZkRvbWFpbiA/IElm
RG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+
KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERG
QUJ5dGVjb2RlKSArIHNpemVvZih1aW50MTZfdCksIG1fcGFnZXNVc2VkKSkpOwogICAgIHByb2dy
YW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKKyAgICBBU1NFUlQoaW5zdHJ1Y3Rp
b25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRB
cHBlbmRBY3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKSk7CiB9CiAK
LURGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
YWN0aW9uc0Zyb21ERkFSb290KCkKK0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJv
b3QoKQogewogICAgIEFjdGlvbnMgYWN0aW9uczsKIApAQCAtNzcsMTIgKzgxLDE5IEBAIERGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKIAogICAgIHdoaWxlIChwcm9ncmFt
Q291bnRlciA8IGRmYUJ5dGVjb2RlTGVuZ3RoKSB7CiAgICAgICAgIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBzdGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0aW9uPiht
X2J5dGVjb2RlW3Byb2dyYW1Db3VudGVyXSk7Ci0gICAgICAgIGlmIChpbnN0cnVjdGlvbiA9PSBE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pCisgICAgICAgIGlmIChpbnN0cnVj
dGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVz
aGVldCkKICAgICAgICAgICAgIGludGVycHJldEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwg
YWN0aW9ucywgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pCisgICAgICAgICAgICBwcm9ncmFtQ291bnRl
ciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OkFwcGVuZEFjdGlvbik7CiAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbikKICAgICAgICAgICAgIHBy
b2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKLSAgICAgICAgZWxzZQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIGFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZy
b21ERkFSb290IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgREZBIHdpdGhvdXQgZG9tYWlu
cywKKyAgICAgICAgICAgIC8vIHdoaWNoIHNob3VsZCBuZXZlciBoYXZlIGFueSBhY3Rpb25zIHdp
dGggaWYtZG9tYWluLgorICAgICAgICAgICAgQVNTRVJUKGluc3RydWN0aW9uICE9IERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7Cisg
ICAgICAgICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24gIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgfQogICAgIHJldHVybiBhY3Rpb25zOwogfQpAQCAtMTAyLDEyICsxMTMsMTQgQEAgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgICAgICB1bnNpZ25lZCBk
ZmFCeXRlY29kZUxlbmd0aCA9IGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyLCBtX3BhZ2VzVXNlZCk7CiAgICAgICAgIHByb2dyYW1D
b3VudGVyICs9IHNpemVvZih1bnNpZ25lZCk7CiAKLSAgICAgICAgLy8gU2tpcCB0aGUgYWN0aW9u
cyBvbiB0aGUgREZBIHJvb3QuIFRoZXNlIGFyZSBhY2Nlc3NlZCB2aWEgYWN0aW9uc0Zyb21ERkFS
b290LgorICAgICAgICAvLyBTa2lwIHRoZSBkZWZhdWx0IHN0eWxlc2hlZXQgYWN0aW9ucyBvbiB0
aGUgREZBIHJvb3QuIFRoZXNlIGFyZSBhY2Nlc3NlZCB2aWEgYWN0aW9uc0ZvckRlZmF1bHRTdHls
ZXNoZWV0RnJvbURGQVJvb3QuCiAgICAgICAgIGlmICghZGZhU3RhcnQpIHsKICAgICAgICAgICAg
IHdoaWxlIChwcm9ncmFtQ291bnRlciA8IGRmYUJ5dGVjb2RlTGVuZ3RoKSB7CiAgICAgICAgICAg
ICAgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHN0YXRpY19jYXN0PERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGVbcHJvZ3JhbUNvdW50ZXJdKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1D
b3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpOwogICAgICAgICAgICAgICAgIGlm
IChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pCi0g
ICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhB
cmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW50ZXJwcmV0QXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25z
LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKQogICAgICAgICAgICAg
ICAgICAgICBpbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIs
IGZsYWdzLCBhY3Rpb25zLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgZWxzZQpJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTg0NDEzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hTZXQ8dWludDY0X3QsIERlZmF1
bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50NjRfdD4+IEFjdGlvbnM7CiAgICAgCiAgICAgQWN0aW9ucyBpbnRlcnByZXQoY29uc3Qg
Q1N0cmluZyYsIHVpbnQxNl90IGZsYWdzKTsKLSAgICBBY3Rpb25zIGFjdGlvbnNGcm9tREZBUm9v
dCgpOworICAgIEFjdGlvbnMgYWN0aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3Qo
KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGludGVycHJldEFwcGVuZEFjdGlvbih1bnNpZ25lZCYg
cHJvZ3JhbUNvdW50ZXIsIEFjdGlvbnMmLCBib29sIGlmRG9tYWluKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZEluZm8uaAkocmV2aXNpb24gMTg0NDEzKQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsOCArNTYsMTAgQEAgdHlwZWRlZiB1aW50MTZfdCBSZXNvdXJjZUZsYWdzOwogLy8gVGhlIGZp
cnN0IDMyIGJpdHMgb2YgYSB1aW50NjRfdCBhY3Rpb24gYXJlIHVzZWQgZm9yIHRoZSBhY3Rpb24g
bG9jYXRpb24uCiAvLyBUaGUgbmV4dCAxNiBiaXRzIGFyZSB1c2VkIGZvciB0aGUgZmxhZ3MgKFJl
c291cmNlVHlwZSBhbmQgTG9hZFR5cGUpLgogLy8gVGhlIG5leHQgYml0IGlzIHVzZWQgdG8gbWFy
ayBhY3Rpb25zIHRoYXQgYXJlIGZyb20gYSBydWxlIHdpdGggYW4gaWYtZG9tYWluIGNvbmRpdGlv
bi4KKy8vIFRoZSBuZXh0IGJpdCBpcyB1c2VkIHRvIG1hcmsgYWN0aW9ucyB0aGF0IGluIHRoZSBk
ZWZhdWx0IHN0eWxlc2hlZXQuCiAvLyBUaGUgdmFsdWVzIC0xIGFuZCAtMiBhcmUgdXNlZCBmb3Ig
cmVtb3ZlZCBhbmQgZW1wdHkgdmFsdWVzIGluIEhhc2hUYWJsZXMuCiBjb25zdCB1aW50NjRfdCBJ
ZkRvbWFpbkZsYWcgPSAweDAwMDEwMDAwMDAwMDAwMDA7Citjb25zdCB1aW50NjRfdCBEaXNwbGF5
Tm9uZVN0eWxlU2hlZXRGbGFnID0gMHgwMDAyMDAwMDAwMDAwMDAwOwogCiBSZXNvdXJjZVR5cGUg
dG9SZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUpOwogdWludDE2X3QgcmVhZFJlc291
cmNlVHlwZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDQxMykK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDE1LTA1LTE1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gUmVsYXggcmVzdHJpY3Rpb25zIG9u
IHRyaWdnZXJzIHRoYXQgbWF0Y2ggZXZlcnl0aGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTA2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmg6CisgICAgICAgIEluY3JlbWVudCB2ZXJzaW9uIG51bWJlciB0byByZWZs
ZWN0IGNoYW5nZXMgaW4gREZBQnl0ZWNvZGUuCisKIDIwMTUtMDUtMTUgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbQ29udGVudCBFeHRlbnNp
b25zXSBGYWlsIHRvIGxvYWQgb2xkIGNvbnRlbnQgZXh0ZW5zaW9uIGZpbGVzCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24gMTg0NDEzKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoaXMgc2hvdWxkIGJlIGlu
Y3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5jdGlvbmFsIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBi
eXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4KICAgICAvLyB0byBwcmV2ZW50IGNyYXNoaW5nIHdo
aWxlIGxvYWRpbmcgb2xkIGRhdGEuCi0gICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IEN1cnJlbnRD
b250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gPSAyOworICAgIGNvbnN0IHN0YXRpYyB1aW50MzJf
dCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0gMzsKIAogICAgIHN0YXRpYyBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3RvcmUoKTsKIApJbmRleDogVG9vbHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0NDEz
KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTUtMDUtMTUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBSZWxheCByZXN0cmljdGlvbnMgb24gdHJpZ2dl
cnMgdGhhdCBtYXRjaCBldmVyeXRoaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4
dGVuc2lvbnMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAg
VXBkYXRlIGFuZCBhZGQgdGVzdHMgZm9yIG5ldyBwb3NzaWJpbGl0aWVzIHdpdGggLioKKwogMjAx
NS0wNS0xNSAgVGltb3RoeSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVGVtcG9yYXJpbHkgZGlzYWJsZSBmYWlsaW5nIEFQSSB0ZXN0LgpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lv
bnMuY3BwCShyZXZpc2lvbiAxODQ0MTMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDMsNiArNzQz
LDM2IEBAIHZvaWQgY2hlY2tDb21waWxlckVycm9yKGNvbnN0IGNoYXIqIGpzb24KICAgICAgICAg
RVhQRUNUX1NUUkVRKGNvbXBpbGVyRXJyb3IuY2F0ZWdvcnkoKS5uYW1lKCksIGV4cGVjdGVkRXJy
b3IuY2F0ZWdvcnkoKS5uYW1lKCkpOwogfQogCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3Qs
IE1hdGNoZXNFdmVyeXRoaW5nKQoreworICAgIC8vIE9ubHkgY3NzLWRpc3BsYXktbm9uZSBydWxl
cyB3aXRoIHRyaWdnZXJzIHRoYXQgbWF0Y2ggZXZlcnl0aGluZywgbm8gZG9tYWluIHJ1bGVzLCBh
bmQgbm8gZmxhZ3MKKyAgICAvLyBzaG91bGQgZ28gaW4gdGhlIGdsb2JhbCBkaXNwbGF5Om5vbmUg
c3R5bGVzaGVldC4gY3NzLWRpc3BsYXktbm9uZSBydWxlcyB3aXRoIGRvbWFpbiBydWxlcyBvciBm
bGFncworICAgIC8vIGFyZSBhcHBsaWVkIHNlcGFyYXRlbHkgb24gcGFnZXMgd2hlcmUgdGhleSBh
cHBseS4KKyAgICBhdXRvIGJhY2tlbmQxID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIik7CisgICAgRVhQRUNUX1RSVUUobnVs
bHB0ciAhPSBiYWNrZW5kMS5nbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQoQVNDSUlMaXRlcmFs
KCJ0ZXN0RmlsdGVyIikpKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kMSwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmciKSwgeyB9KTsgLy8gU2VsZWN0b3IgaXMgaW4gZ2xv
YmFsIHN0eWxlc2hlZXQuCisgICAgCisgICAgYXV0byBiYWNrZW5kMiA9IG1ha2VCYWNrZW5kKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpc
Ii5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipcIixcImlmLWRvbWFp
blwiOltcIndlYmtpdC5vcmdcIl19fV0iKTsKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgYmFja2Vu
ZDIuZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KEFTQ0lJTGl0ZXJhbCgidGVzdEZpbHRlciIp
KSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93ZWJraXQub3JnIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDIsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly93M2Mub3JnIiksIHsgfSk7CisgICAgCisgICAgYXV0byBiYWNrZW5k
MyA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9u
ZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiLipcIixcInVubGVzcy1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJdfX1dIik7CisgICAgRVhQ
RUNUX0VRKG51bGxwdHIsIGJhY2tlbmQzLmdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldChBU0NJ
SUxpdGVyYWwoInRlc3RGaWx0ZXIiKSkpOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQzLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZyIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQzLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vdzNjLm9yZyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOwor
ICAgIAorICAgIGF1dG8gYmFja2VuZDQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCIsXCJsb2FkLXR5cGVcIjpbXCJ0aGlyZC1wYXJ0
eVwiXX19XSIpOworICAgIEVYUEVDVF9FUShudWxscHRyLCBiYWNrZW5kNC5nbG9iYWxEaXNwbGF5
Tm9uZVN0eWxlU2hlZXQoQVNDSUlMaXRlcmFsKCJ0ZXN0RmlsdGVyIikpKTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kNCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmciKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNCwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRw
Oi8vbm90X3dlYmtpdC5vcmciLCAiaHR0cDovL3dlYmtpdC5vcmciKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKworICAgIC8vIGNz
cy1kaXNwbGF5LW5vbmUgcnVsZXMgYWZ0ZXIgaWdub3JlLXByZXZpb3VzLXJ1bGVzIHNob3VsZCBu
b3QgYmUgcHV0IGluIHRoZSBkZWZhdWx0IHN0eWxlc2hlZXQuCisgICAgYXV0byBiYWNrZW5kNSA9
IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiaWdub3JlLXByZXZpb3VzLXJ1
bGVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCJ9fSwiCisgICAgICAgICJ7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwi
LmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIik7CisgICAg
RVhQRUNUX0VRKG51bGxwdHIsIGJhY2tlbmQ1Lmdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldChB
U0NJSUxpdGVyYWwoInRlc3RGaWx0ZXIiKSkpOworfQorICAgIAogVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBJbnZhbGlkSlNPTikKIHsKICAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlsiLCBD
b250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZCk7CkBA
IC04MDMsMTAgKzgzMyw5IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgSW52YWxpZEpT
T04KICAgICAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TkludmFsaWRDU1NEaXNwbGF5Tm9uZUFjdGlvblR5cGUpOwogCiAgICAgY2hlY2tDb21waWxlckVy
cm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiaWdub3JlLXByZXZpb3VzLXJ1bGVzXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIndlYmtpdC5vcmdcIn19LCIKLSAgICAgICAgIntc
ImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIu
aGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iLAotICAgICAg
ICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkVycm9yOjpSZWdleE1hdGNoZXNF
dmVyeXRoaW5nQWZ0ZXJJZ25vcmVQcmV2aW91c1J1bGVzKTsKLSAgICBjaGVja0NvbXBpbGVyRXJy
b3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCIuKlwiLFwiaWYtZG9tYWluXCI6W1wiYVwiXX19XSIsIENvbnRlbnRFeHRlbnNp
b25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6OlJlZ2V4TWF0Y2hlc0V2ZXJ5dGhpbmdXaXRoRG9t
YWlucyk7Ci0gICAgY2hlY2tDb21waWxlckVycm9yKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipcIixcInVubGVzcy1kb21h
aW5cIjpbXCJhXCJdfX1dIiwgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJv
cjo6UmVnZXhNYXRjaGVzRXZlcnl0aGluZ1dpdGhEb21haW5zKTsKKyAgICAgICAgIntcImFjdGlv
blwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVu
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iLCB7IH0pOworICAgIGNo
ZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCIsXCJpZi1kb21haW5cIjpbXCJhXCJdfX1dIiwg
eyB9KTsKKyAgICBjaGVja0NvbXBpbGVyRXJyb3IoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwiLFwidW5sZXNzLWRvbWFp
blwiOltcImFcIl19fV0iLCB7IH0pOwogICAgIGNoZWNrQ29tcGlsZXJFcnJvcigiW3tcImFjdGlv
blwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIltc
In19XSIsCiAgICAgICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05JbnZhbGlkUmVnZXgpOwogfQo=
</data>
<flag name="review"
          id="278099"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>