<?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>129110</bug_id>
          
          <creation_ts>2014-02-20 10:24:51 -0800</creation_ts>
          <short_desc>An unresolved WebGL Context should operate normally until used</short_desc>
          <delta_ts>2014-02-20 15:08:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</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="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>982881</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-20 10:24:51 -0800</bug_when>
    <thetext>If a WebGLRenderingContext was created in an unresolved state, then it should appear normal until it is used, at which point it needs to resolve itself.

This allows for the common use of feature detection to happen without:
- causing a blocking policy resolution
- swapping to the discrete GPU on dual GPU systems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982969</commentid>
    <comment_count>1</comment_count>
      <attachid>224795</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-20 14:02:14 -0800</bug_when>
    <thetext>Created attachment 224795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982974</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-20 14:07:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/16072775&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982988</commentid>
    <comment_count>3</comment_count>
      <attachid>224795</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-02-20 14:51:38 -0800</bug_when>
    <thetext>Comment on attachment 224795
Patch

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

The only thing I don&apos;t get here is how do we decide we are in a pending state? Does webGLPolicyForURL do something clever?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:410
&gt; +

Extra blank line!

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3313
&gt; +        // FIXME: We don&apos;t currently do anything with the result from resolution. A more

Should we have a bug filed here so we don&apos;t forget about it?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.h:342
&gt; +    WebGLRenderingContext(HTMLCanvasElement*, GraphicsContext3D::Attributes);

Should this special constructor be private to prevent unintentional use of it outside of the &quot;pending&quot; use case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982992</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-20 14:57:17 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 224795 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=224795&amp;action=review
&gt; 
&gt; The only thing I don&apos;t get here is how do we decide we are in a pending state? Does webGLPolicyForURL do something clever?
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:410
&gt; &gt; +
&gt; 
&gt; Extra blank line!
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3313
&gt; &gt; +        // FIXME: We don&apos;t currently do anything with the result from resolution. A more
&gt; 
&gt; Should we have a bug filed here so we don&apos;t forget about it?

Yes. I will file one (although I don&apos;t expect we&apos;ll fix it soon)

&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.h:342
&gt; &gt; +    WebGLRenderingContext(HTMLCanvasElement*, GraphicsContext3D::Attributes);
&gt; 
&gt; Should this special constructor be private to prevent unintentional use of it outside of the &quot;pending&quot; use case?

It already is :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983005</commentid>
    <comment_count>5</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-20 15:08:53 -0800</bug_when>
    <thetext>Committed r164452: &lt;http://trac.webkit.org/changeset/164452&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224795</attachid>
            <date>2014-02-20 14:02:14 -0800</date>
            <delta_ts>2014-02-20 14:51:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129110-20140221090207.patch</filename>
            <type>text/plain</type>
            <size>84429</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM0NzkzODRlYjMwYmY4
Y2NlYzk1ZTRiYWI1NDE1ZjE1ODFmMjI0YS4uMzY3ZjM4M2E4MjFmZTFmMTBhYzc0MDRjZGE0MjZm
MWE1MWVhODZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2MyBAQAogMjAxNC0wMi0yMCAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKKyAgICAgICAgQW4gdW5yZXNvbHZlZCBXZWJH
TCBDb250ZXh0IHNob3VsZCBvcGVyYXRlIG5vcm1hbGx5IHVudGlsIHVzZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTExMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0aGUgYWJpbGl0eSB0byBj
cmVhdGUgYSBzcGVjaWFsIGluc3RhbmNlIG9mIFdlYkdMUmVuZGVyaW5nQ29udGV4dCwKKyAgICAg
ICAgdGhhdCBhcHBlYXJzIG5vcm1hbCBidXQgd29uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgaWYg
YXNrZWQuIFRoaXMgd2lsbAorICAgICAgICBiZSBjcmVhdGVkIGluIHRoZSBjYXNlIG9mIHRoZSBX
ZWJHTExvYWRQb2xpY3kgYmVpbmcgInBlbmRpbmciIGFuZCBoZWxwcworICAgICAgICBpbiB0aGUg
Y2FzZSBvZiBwYWdlcyB0aGF0IGZlYXR1cmUgZGV0ZWN0IGJ5IGNyZWF0aW5nIGEgY29udGV4dCBh
bmQKKyAgICAgICAgaW1tZWRpYXRlbHkgZGVsZXRpbmcgaXQuCisKKyAgICAgICAgTm90ZSB0aGF0
IHRoZSBjb250ZXh0IGRvZXNuJ3QgYWN0dWFsbHkgdHJ5IHRvIHJlY292ZXIgZnJvbSB0aGlzIHN0
YXRlCisgICAgICAgIHlldCwgYWx0aG91Z2ggdGhhdCB3b3VsZCBiZSBhIG5pY2UgYWRkaXRpb24u
IFdoZW4gYXNrZWQgdG8gZG8gc29tZXRoaW5nCisgICAgICAgIGl0IGNvdWxkIGFjdHVhbGx5IHRy
eSB0byBjcmVhdGUgdGhlIEdyYXBoaWNzQ29udGV4dDNELiBIb3dldmVyLCBpZiBpdAorICAgICAg
ICBmYWlscyBpdCB3b3VsZCB0aGVuIGhhdmUgdG8gZmlyZSBhIGNvbnRleHQgbG9zdC4KKworICAg
ICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQpOiBNb3ZlIHRoZSBsb2FkIHBvbGljeSBjb2RlIG91
dCBvZiBnZXRDb250ZXh0LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZSk6IEFkZCB0aGUgYWJpbGl0eSB0byBjcmVhdGUgYSBwZW5kaW5nIGNvbnRleHQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6
IE5ldyBjb25zdHJ1Y3RvciBmb3IgYSBwZW5kaW5nIGNvbnRleHQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJlbmRlcmluZ0NvbnRleHQpOiBPbmx5IGRl
bGV0ZSBpZiBub3QgcGVuZGluZy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZDb21wb3NpdGVkKTogRXZlcnl0aGluZyBi
ZWxvdyBpcyBhYm91dCBjaGVja2luZyB0aGUKKyAgICAgICAgcGVuZGluZyBzdGF0ZSBiZWZvcmUg
ZG9pbmcgYW55dGhpbmcsIGFuZCB0cmlnZ2VyaW5nIGEgcmVzb2x1dGlvbiBpZiBuZWNlc3Nhcnku
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja09i
amVjdFRvQmVCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
bGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjbGVhckRlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29sb3JNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdBcnJh
eXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURy
YXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1
c2gpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlckluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25G
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFk
ZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRU
ZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VmVydGV4QXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aXNDb250ZXh0TG9zdE9yUGVuZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
aXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBv
bHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4
M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1h
dHJpeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2aWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZvcmNlTG9zdENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0b3ApOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYkRpdmlzb3IpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oOgorCisyMDE0LTAyLTIwICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKwogICAg
ICAgICBBZGQgYW4gdW5yZXNvbHZlZCBXZWJHTFBvbGljeSBhbmQgYW4gQVBJIHRvIHJlc29sdmUg
aXQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTEw
OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDVmYjUx
MDZmYmMzY2NhZTAyMDNjZWZlZmQ1ZmZjY2I5YjNlOGNhMzQuLjIxNzBmMjE1NWUzYjI1YzBjN2Ez
NDE2NTRhMjM5ZjYzMjkwOTU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1
ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJIVE1M
Q2FudmFzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgpAQCAtMjIxLDE0ICsyMjAs
NiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4
dChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZhcwogICAgICAgICAgICAgaWYgKG1fY29udGV4dCAm
JiAhbV9jb250ZXh0LT5pczNkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgICAgICBpZiAoIW1fY29udGV4dCkgewotICAgICAgICAgICAgICAgIERvY3VtZW50JiB0
b3BEb2N1bWVudCA9IGRvY3VtZW50KCkudG9wRG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAgICBQ
YWdlKiBwYWdlID0gdG9wRG9jdW1lbnQucGFnZSgpOwotICAgICAgICAgICAgICAgIGlmIChwYWdl
ICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5j
bGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51cmwoKSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGhpcywg
c3RhdGljX2Nhc3Q8V2ViR0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIG1h
a2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBm
b3IgdGhlIENhbnZhcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggZDY0ZmQwOTQyOWFjNTg5NDYxNzc5ODBkMWY1N2Fl
NDNhNzZjYjZkOC4uZTkwMWEwMWM0NDM2YTgzODE2ZWQwYjhmNDM0NWZhZGM0MzdmZjFmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMu
aCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRVhURHJhd0J1ZmZlcnMuaCIKICNpbmNsdWRl
ICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCkBAIC00Nyw2ICs0OCw3IEBACiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVp
bnQuaCIKICNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCkBAIC0zOTIsMTQgKzM5
NCwzMSBAQCBPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCogYwogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgLy8gVGhlIEZyYW1lTG9hZGVyQ2xpZW50IG1pZ2h0IGNy
ZWF0aW9uIG9mIGEgbmV3IFdlYkdMIGNvbnRleHQgZGVzcGl0ZSB0aGUgcGFnZSBzZXR0aW5nczsg
aW4KKyAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3JlYXRpb24gb2Yg
YSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBpbgogICAgIC8v
IHBhcnRpY3VsYXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3IgbW9yZSB0aW1l
cyB2aWEgdGhlIEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KICAgICBpZiAoIWZyYW1lLT5s
b2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxl
ZCgpKSkgewogICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIldlYiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBXZWJHTCBjb250
ZXh0LiIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7Cisg
ICAgYm9vbCBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gZmFsc2U7CisgICAgRG9jdW1lbnQm
IHRvcERvY3VtZW50ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKTsKKyAgICBQYWdlKiBwYWdlID0g
dG9wRG9jdW1lbnQucGFnZSgpOworICAgIGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5p
c0xvY2FsRmlsZSgpKSB7CisgICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5t
YWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVu
dC51cmwoKSk7CisKKworICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikg
eworICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBp
cyB0byBibG9jayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChwb2xpY3kgPT0gV2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExPRyhXZWJH
TCwgIldlYkdMIHBvbGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRl
ci4iKTsKKyAgICAgICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorCiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmli
dXRlcyA9IGF0dHJzID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzKCk7CiAKICAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKQEAgLTQxNyw2
ICs0MzYsMTQgQEAgT3duUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqIGMKICAgICBpZiAoZnJhbWUtPnNldHRp
bmdzKCkuZm9yY2VTb2Z0d2FyZVdlYkdMUmVuZGVyaW5nKCkpCiAgICAgICAgIGF0dHJpYnV0ZXMu
Zm9yY2VTb2Z0d2FyZVJlbmRlcmVyID0gdHJ1ZTsKIAorICAgIGlmIChpc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQg
dGhhdCBsb29rcyByZWFsLCBidXQgd2lsbCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYg
dXNlZC4iKTsKKyAgICAgICAgT3duUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5n
Q29udGV4dCA9IGFkb3B0UHRyKG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRy
aWJ1dGVzKSk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwor
ICAgICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dC5yZWxlYXNlKCk7CisgICAgfQorCisgICAg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZpZXcoKS0+cm9vdCgpLT5ob3N0V2lu
ZG93KCk7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRvdykpOwogCiAgICAgaWYgKCFjb250
ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgewpAQCAtNDM0LDggKzQ2MSwy
NyBAQCBPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCogYwogICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0
LnJlbGVhc2UoKTsKIH0KIAorV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFz
c2VkQ2FudmFzKQorICAgICwgQWN0aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50
KCkpCisgICAgLCBtX2NvbnRleHQoMCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQorICAgICwg
bV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcih0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQpCisgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZh
bHNlKQorICAgICwgbV9yZXN0b3JlVGltZXIodGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
bWF5YmVSZXN0b3JlQ29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQorICAg
ICwgbV9jb250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRp
Y0xvc3RDb250ZXh0KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5
bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25z
b2xlQWxsb3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGlu
Z1BvbGljeVJlc29sdXRpb24odHJ1ZSkKKyAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1
dGlvbihmYWxzZSkKK3sKK30KKwogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKICAgICA6IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQogICAgICwgQWN0aXZlRE9NT2JqZWN0KCZw
YXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKQEAgLTQ0
OSw2ICs0OTUsOCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4
dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYQogICAgICwgbV9hdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpCiAgICAgLCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKHRydWUpCiAg
ICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0Nv
bnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24oZmFsc2UpCisgICAgLCBt
X2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fY29u
dGV4dCk7CiAgICAgbV9jb250ZXh0R3JvdXAgPSBXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7
CkBAIC01OTgsMTMgKzY0NiwxOCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJlbmRl
cmluZ0NvbnRleHQoKQogICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBudWxscHRyOwogICAgIG1fYmxh
Y2tUZXh0dXJlQ3ViZU1hcCA9IG51bGxwdHI7CiAKLSAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmpl
Y3RzKCk7Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgbV9jb250ZXh0R3Jv
dXAtPnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgaWYgKCFtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24pIHsKKyAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworICAgICAgICBk
ZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgbV9jb250ZXh0R3JvdXAtPnJlbW92
ZUNvbnRleHQodGhpcyk7CisgICAgfQogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKIHsKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBUaGUgZHJhd2luZyBidWZmZXIg
aG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAogICAg
IC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KICAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKQpAQCAtNjQzLDcgKzY5Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIG1hc2spCiB7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3QoKSkgCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpIHx8IG1f
bGF5ZXJDbGVhcmVkCkBAIC04NDAsNyArODkzLDcgQEAgdW5zaWduZWQgaW50IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2YgcmFu
Z2UiKTsKQEAgLTg1Niw3ICs5MDksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWN0
aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBlYykKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBX
ZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImF0dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hT
aGFkZXIiLCBzaGFkZXIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBzaGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFwcm9ncmFtLT5hdHRhY2hTaGFkZXIoc2hhZGVyKSkgewogICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFk
ZXIiLCAic2hhZGVyIGF0dGFjaG1lbnQgYWxyZWFkeSBoYXMgc2hhZGVyIik7CkBAIC04NjksNyAr
OTIyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGEKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoImJpbmRBdHRyaWJMb2NhdGlvbiIsIHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImJpbmRBdHRyaWJMb2NhdGlv
biIsIHByb2dyYW0pKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9u
TGVuZ3RoKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODg5LDcgKzk0Miw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9j
YXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpCiBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBXZWJHTE9iamVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQogewogICAgIGRlbGV0ZWQgPSBm
YWxzZTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAob2JqZWN0KSB7CiAgICAg
ICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKQEAgLTEw
MTMsMjEgKzEwNjYsMjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJl
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLAogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4s
IEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0K
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9k
ZSkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24o
ImJsZW5kRXF1YXRpb24iLCBtb2RlKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKIH0KIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBt
b2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8
fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZVJHQikgfHwgIXZh
bGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVBbHBoYSkpCisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVu
ZEVxdWF0aW9uIiwgbW9kZVJHQikgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVh
dGlvbiIsIG1vZGVBbHBoYSkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJsZW5k
RXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwogfQpAQCAtMTAzNSw3ICsxMDg4
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShH
QzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2QKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQogewotICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRG
dW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzZmFjdG9yLCBkZmFj
dG9yKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3Is
IGRmYWN0b3IpOwogfQpAQCAtMTA0Myw3ICsxMDk2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JH
QiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEp
CiB7CiAgICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlv
bnMgYXMgUkdCLgotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5j
RmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQorICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwg
c3JjUkdCLCBkc3RSR0IpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKIH0KQEAgLTEw
NTEsNyArMTEwNCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmNTZXBh
cmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdD
M0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CiAgICAg
aWYgKCFidWZmZXIpCkBAIC0xMDc3LDcgKzExMzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51
bQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgV2ViR0xC
dWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEi
LCB0YXJnZXQsIHVzYWdlKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTEwOTksNyArMTE1Miw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
QXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVm
ZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0g
dXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQog
ICAgICAgICByZXR1cm47CiAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKICAgICBpZiAoIWJ1
ZmZlcikKQEAgLTExMjEsNyArMTE3NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxv
bmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMQnVm
ZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRh
IiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghYnVm
ZmVyKQpAQCAtMTE0NSw3ICsxMTk4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1
ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnIKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9u
ZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFdlYkdM
QnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJE
YXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIGlmICgh
YnVmZmVyKQpAQCAtMTE2OCw3ICsxMjIxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnIKIAog
R0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdD
M0RlbnVtIHRhcmdldCkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKQEAgLTExODgsNyArMTI0MSw3IEBAIEdDM0RlbnVtIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCiAKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKIHsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CiAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAiaW52YWxp
ZCBtYXNrIik7CkBAIC0xMjA2LDcgKzEyNTksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjbGVhckNvbG9yKEdDM0RmbG9hdCByLCBHQzNEZmxvYXQgZywgR0MzRGZsb2F0IGIsIEdDM0Rm
bG9hdCBhKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChzdGQ6OmlzbmFuKHIpKQog
ICAgICAgICByID0gMDsKQEAgLTEyMjUsNyArMTI3OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjbGVhckNvbG9yKEdDM0RmbG9hdCByLCBHQzNEZmxvYXQgZywgR0MzRGZsb2F0IGIs
IEdDCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckRlcHRoKEdDM0RmbG9hdCBk
ZXB0aCkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsK
ICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwpAQCAtMTIzMyw3ICsxMjg2LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKIHsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NsZWFyU3RlbmNpbCA9IHM7CiAgICAgbV9jb250
ZXh0LT5jbGVhclN0ZW5jaWwocyk7CkBAIC0xMjQxLDcgKzEyOTQsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKIAogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVu
LCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX2NvbG9yTWFza1swXSA9IHJlZDsKICAgICBtX2NvbG9yTWFza1sxXSA9IGdy
ZWVuOwpAQCAtMTI1Myw3ICsxMzA2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNv
bG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm8KIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiY29tcGlsZVNoYWRlciIsIHNo
YWRlcikpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdCgiY29tcGlsZVNoYWRlciIsIHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKICAgICBt
X2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOwogICAgIEdDM0Rp
bnQgdmFsdWU7CkBAIC0xMjY0LDcgKzEzMTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYwog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBkYXRh
KQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwo
ImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTEzMDAsNyArMTM1Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVz
c2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3
KiBkYXRhKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
TGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEzMzksNyArMTM5Miw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKIAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
KQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1l
dGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQogICAgICAgICByZXR1cm47CkBAIC0xMzg1
LDcgKzE0MzgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIs
IHRhcmdldCwgbGV2ZWwpKQogICAgICAgICByZXR1cm47CkBAIC0xNDU1LDcgKzE1MDgsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQwogCiBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG8gPSBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwog
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKQEAgLTE0NjQsNyArMTUxNyw3IEBAIFBhc3NS
ZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkK
IAogUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxX
ZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwogICAg
IGFkZENvbnRleHRPYmplY3Qoby5nZXQoKSk7CkBAIC0xNDczLDcgKzE1MjYsNyBAQCBQYXNzUmVm
UHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVi
dWZmZXIoKQogCiBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxX
ZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6OmNyZWF0ZSh0aGlzKTsKICAgICBhZGRTaGFy
ZWRPYmplY3Qoby5nZXQoKSk7CkBAIC0xNDgyLDcgKzE1MzUsNyBAQCBQYXNzUmVmUHRyPFdlYkdM
VGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKIAogUGFzc1Jl
ZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgp
CiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBvID0g
V2ViR0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkp
OwpAQCAtMTQ5MSw3ICsxNTQ0LDcgQEAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCiAKIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJi
dWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIHsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdl
YkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0
KCkpOwpAQCAtMTUwMSw3ICsxNTU0LDcgQEAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQogUGFzc1JlZlB0cjxX
ZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0g
dHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfU0hBREVSICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikg
ewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiY3JlYXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKQEAgLTE1MTUsMTQg
KzE1NjgsMTQgQEAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXAKIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKIH0KIAogYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQogewotICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIW9iamVjdCkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICFvYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW9iamVjdC0+
dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRlbGV0ZSIsICJvYmpl
Y3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOwpAQCAtMTU5OCwxNCArMTY1MSwx
NCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1
cmUqIHRleHR1cmUpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmMoR0Mz
RGVudW0gZnVuYykKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmRlcHRo
RnVuYyhmdW5jKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFzayhH
QzNEYm9vbGVhbiBmbGFnKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fZGVwdGhNYXNr
ID0gZmxhZzsKICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhmbGFnKTsKQEAgLTE2MTMsNyArMTY2
Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1hc2soR0MzRGJvb2xlYW4g
ZmxhZykKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UoR0MzRGZsb2F0
IHpOZWFyLCBHQzNEZmxvYXQgekZhcikKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
ek5lYXIgPiB6RmFyKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CkBA
IC0xNjI1LDcgKzE2NzgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhSYW5n
ZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBz
aGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVy
IiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRl
cikpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRl
dGFjaFNoYWRlciIsIHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXByb2dyYW0t
PmRldGFjaFNoYWRlcihzaGFkZXIpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNoYWRlciIsICJzaGFkZXIg
bm90IGF0dGFjaGVkIik7CkBAIC0xNjM3LDcgKzE2OTAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIq
IHNoYQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNEZW51bSBjYXAp
CiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJkaXNh
YmxlIiwgY2FwKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CiAgICAgICAgIG1fc3RlbmNp
bEVuYWJsZWQgPSBmYWxzZTsKQEAgLTE2NTUsNyArMTcwOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewogICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKQEAgLTE4ODYsNyArMTkzOSw3IEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2Rl
LCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCiB7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlvbk5h
bWUsIG1vZGUpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
RHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQpAQCAtMTk1Nyw3
ICsyMDEwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVu
dW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGMKIAogYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBt
b2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxT
ZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQpAQCAtMjA1MCw3ICsyMTAzLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RlbnUKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZW51
bSBjYXApCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5
KCJlbmFibGUiLCBjYXApKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2FwKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlm
IChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewogICAgICAgICBtX3N0
ZW5jaWxFbmFibGVkID0gdHJ1ZTsKQEAgLTIwNjgsNyArMjEyMSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJlbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKQEAgLTIwODMsMTQgKzIxMzYsMTQg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2QKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZpbmlzaCgpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5maW5pc2go
KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkKIHsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CkBAIC0yMDk4LDcgKzIxNTEs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2goKQogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRl
cmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5j
UGFyYW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQp
KQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZm
ZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFj
aG1lbnQpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwpAQCAtMjEzMSw3ICsyMTg0LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gYXQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJUZXh0
dXJlMkQiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJU
ZXh0dXJlMkQiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQogICAgICAgICByZXR1cm47CiAgICAgaWYg
KGxldmVsKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibGV2ZWwgbm90IDAiKTsKQEAg
LTIxNjksMTQgKzIyMjIsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWMKIAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQogewotICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOwogfQogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQogewot
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKICAgICAgICAgcmV0dXJuOwogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0YXJnZXQsIGZhbHNlKTsKICAgICBpZiAoIXRl
eCkKQEAgLTIyMTMsNyArMjI2Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZW5l
cmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCiBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFt
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgQWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICghbV9j
b250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5m
bykpCkBAIC0yMjI3LDcgKzIyODAsNyBAQCBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKgogUGFzc1Jl
ZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9ncmFtKSkKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRBY3RpdmVVbmlmb3JtIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFjdGl2
ZUluZm8gaW5mbzsKICAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RP
clplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKQEAgLTIyNDUsNyArMjI5OCw3IEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBWZWN0b3I8UmVmCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBzaGFkZXJP
YmplY3RzLmNsZWFyKCk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdCgiZ2V0QXR0YWNoZWRTaGFkZXJzIiwgcHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0YWNoZWRTaGFk
ZXJzIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEdDM0Rl
bnVtIHNoYWRlclR5cGVbXSA9IHsKQEAgLTIyNjIsNyArMjMxNSw3IEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBW
ZWN0b3I8UmVmCiAKIEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJMb2Nh
dGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBdHRyaWJMb2Nh
dGlvbiIsIHByb2dyYW0pKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCiAgICAgICAg
IHJldHVybiAtMTsKICAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxv
Y2F0aW9uIiwgbmFtZSkpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTIyODAsNyArMjMzMyw3IEBA
IEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0CiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5U
X0FSUkFZX0JVRkZFUikgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0
Iik7CkBAIC0yMzAxLDcgKzIzNTQsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bQogCiBQYXNz
UmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
Q29udGV4dEF0dHJpYnV0ZXMoKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gV2Ug
YWx3YXlzIG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0
IHRvCiAgICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVy
c2lvbi4KQEAgLTIzMjksNyArMjM4Miw3IEBAIEdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0RXJyb3IoKQogCiBXZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9FWFRfdGV4dHVyZV9m
aWx0ZXJfYW5pc290cm9waWMiKQpAQCAtMjQ2MCw3ICsyNTEzLDcgQEAgV2ViR0xFeHRlbnNpb24q
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkK
IFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0Rl
bnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycygiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2ht
ZW50KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1l
YnVmZmVyRnVuY1BhcmFtZXRlcnMoImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIs
IHRhcmdldCwgYXR0YWNobWVudCkpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKIAog
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkgewpAQCAtMjUxMiw3ICsyNTY1LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHQK
IFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBjb25zdCBpbnQgaW50WmVybyA9
IDA7CiAgICAgc3dpdGNoIChwbmFtZSkgewpAQCAtMjc1MCw3ICsyODAzLDcgQEAgV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJgogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJv
Z3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1QYXJhbWV0ZXIiLCBw
cm9ncmFtKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKIAogICAgIEdDM0RpbnQgdmFsdWUgPSAwOwpAQCAtMjc3OCw3ICsy
ODMxLDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBh
cmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEcKIFN0cmluZyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKICAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9n
IiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiAiIjsKQEAgLTI3ODgsNyArMjg0MSw3IEBAIFN0
cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgRXhjZXB0aW9uCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJp
bnZhbGlkIHRhcmdldCIpOwpAQCAtMjg1NCw3ICsyOTA3LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFt
ZXRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJQYXJhbWV0ZXIiLCBzaGFkZXIpKQorICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdl
dFNoYWRlclBhcmFtZXRlciIsIHNoYWRlcikpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKICAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7CkBAIC0yODc1
LDcgKzI5MjgsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFk
ZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRAogU3RyaW5nIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xv
ZyIsIHNoYWRlcikpCiAgICAgICAgIHJldHVybiAiIjsKQEAgLTI4ODUsNyArMjkzOCw3IEBAIFN0
cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIq
IHNoYWRlciwgRXhjZXB0aW9uQ29kCiBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9y
bWF0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNE
ZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
c3dpdGNoIChzaGFkZXJUeXBlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X1NIQURFUjoKQEAgLTI5MTcsNyArMjk3MCw3IEBAIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXJQcmVj
aXNpb25Gb3JtYXQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUHJlY2lzaW9uCiBT
dHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIq
IHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldFNoYWRlclNvdXJjZSIsIHNoYWRlcikpCiAgICAgICAgIHJldHVybiAiIjsKQEAgLTI5Njks
NyArMzAyMiw3IEBAIFZlY3RvcjxTdHJpbmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3Vw
cG9ydGVkRXh0ZW5zaW9ucygpCiBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImdldFRleFBhcmFtZXRlciIsIHRhcmdldCwgZmFsc2UpOwogICAgIGlmICghdGV4KQpA
QCAtMjk5OCw3ICszMDUxLDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG4KIFdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRV
bmlmb3JtIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICBp
ZiAoIXVuaWZvcm1Mb2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dyYW0oKSAhPSBwcm9n
cmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9yIG5vdCB2
YWxpZCBmb3IgdGhpcyBwcm9ncmFtIik7CkBAIC0zMTI2LDcgKzMxNzksNyBAQCBXZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgY29uc3QgV2ViRwogUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgi
Z2V0VW5pZm9ybUxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgcHJv
Z3JhbSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghdmFsaWRhdGVMb2NhdGlv
bkxlbmd0aCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMzE2Niw3ICszMjE5LDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmEKIHsKICAg
ICBVTlVTRURfUEFSQU0oZWMpOwogCi0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CiAKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CkBAIC0zMjA2LDcgKzMy
NTksNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYQogCiBsb25nIGxvbmcgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVt
IHBuYW1lKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgR0MzRHNpemVpcHRyIHJlc3Vs
dCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocmVzdWx0KTsKQEAgLTMyMTQsNyArMzI2Nyw3
IEBAIGxvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNl
dChHQzNEdWludCBpbmRleCwgR0MzRGVudW0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQogewotICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOwogICAgIHN3aXRjaCAodGFyZ2V0KSB7CkBA
IC0zMjM1LDcgKzMyODgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCiAKIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKIHsKLSAgICBpZiAoIWJ1ZmZl
ciB8fCBpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKCFidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghYnVmZmVyLT5oYXNFdmVy
QmVlbkJvdW5kKCkpCkBAIC0zMjQ5LDkgKzMzMDIsMjYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmlzQ29udGV4dExvc3QoKSBjb25zdAogICAgIHJldHVybiBtX2NvbnRleHRMb3N0Owog
fQogCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdE9yUGVuZGluZygp
Cit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiAmJiAhbV9oYXNSZXF1ZXN0
ZWRQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkNvbnRleHQgaXMgYmVp
bmcgdXNlZC4gQXR0ZW1wdCB0byByZXNvbHZlIHRoZSBwb2xpY3kuIik7CisgICAgICAgIERvY3Vt
ZW50JiBkb2N1bWVudCA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnRvcERvY3VtZW50KCk7CisgICAg
ICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCk7CisgICAgICAgIGlmIChwYWdlICYmICFk
b2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgpKQorICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkucmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKGRvY3VtZW50LnVy
bCgpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGN1cnJlbnRseSBkbyBhbnl0aGluZyB3
aXRoIHRoZSByZXN1bHQgZnJvbSByZXNvbHV0aW9uLiBBIG1vcmUKKyAgICAgICAgLy8gY29tcGxl
dGUgaW1wbGVtZW50YXRpb24gbWlnaHQgdHJ5IHRvIGNvbnN0cnVjdCBhIHJlYWwgY29udGV4dCwg
ZXRjIGFuZCBwcm9jZWVkCisgICAgICAgIC8vIHdpdGggbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAg
ICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb247Cit9CisK
IEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKEdDM0RlbnVtIGNh
cCkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImlz
RW5hYmxlZCIsIGNhcCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQogICAgICAgICByZXR1cm4gMDsKICAg
ICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpCiAgICAgICAgIHJl
dHVybiBtX3N0ZW5jaWxFbmFibGVkOwpAQCAtMzI2MCw3ICszMzMwLDcgQEAgR0MzRGJvb2xlYW4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQogCiBHQzNEYm9v
bGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZl
ciogZnJhbWVidWZmZXIpCiB7Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0
KCkpCisgICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3Vu
ZCgpKQpAQCAtMzI3MSw3ICszMzQxLDcgQEAgR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQogCiBHQzNE
Ym9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHBy
b2dyYW0pCiB7Ci0gICAgaWYgKCFwcm9ncmFtIHx8IGlzQ29udGV4dExvc3QoKSkKKyAgICBpZiAo
IXByb2dyYW0gfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJvZ3JhbShwcm9ncmFtLT5vYmplY3QoKSk7CkBA
IC0zMjc5LDcgKzMzNDksNyBAQCBHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omlz
UHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCiAKIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZl
cikKIHsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0KCkpCisgICAgaWYg
KCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIGlmICghcmVuZGVyYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCkBAIC0z
MjkwLDcgKzMzNjAsNyBAQCBHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVu
ZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZQogCiBHQzNEYm9vbGVhbiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7Ci0g
ICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdCgpKQorICAgIGlmICghc2hhZGVyIHx8IGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4g
bV9jb250ZXh0LT5pc1NoYWRlcihzaGFkZXItPm9iamVjdCgpKTsKQEAgLTMyOTgsNyArMzM2OCw3
IEBAIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2ViR0xTaGFk
ZXIqIHNoYWRlcikKIAogR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1
cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIGlmICghdGV4dHVyZSB8fCBpc0NvbnRl
eHRMb3N0KCkpCisgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIXRleHR1cmUtPmhhc0V2ZXJCZWVuQm91bmQo
KSkKQEAgLTMzMDksNyArMzM3OSw3IEBAIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCiB7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1
cm47CiAgICAgbV9jb250ZXh0LT5saW5lV2lkdGgod2lkdGgpOwogfQpAQCAtMzMxNyw3ICszMzg3
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lk
dGgpCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImxpbmtQcm9n
cmFtIiwgcHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIFdlYkdMU2hhZGVyKiB2
ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQz
RDo6VkVSVEVYX1NIQURFUik7CkBAIC0zMzM0LDcgKzM0MDQsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25D
b2RlJiBlYwogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkoR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgc3dp
dGNoIChwbmFtZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19GTElQX1lf
V0VCR0w6CkBAIC0zMzcyLDE0ICszNDQyLDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKIAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZs
b2F0IHVuaXRzKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+cG9seWdv
bk9mZnNldChmYWN0b3IsIHVuaXRzKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAg
Ly8gRHVlIHRvIFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9z
c2libGUgdG8KICAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCkBA
IC0zNDY5LDE0ICszNTM5LDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4
ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDCiAKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogewotICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+cmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CiB9CiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCkKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAodGFyZ2V0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2Ui
LCAiaW52YWxpZCB0YXJnZXQiKTsKQEAgLTM1MTYsMTQgKzM1ODYsMTQgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBpbnRlcm4KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdl
KEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQogewotICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7CiB9CiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKCF2YWxpZGF0ZVNpemUoInNjaXNzb3IiLCB3aWR0aCwgaGVpZ2h0KSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzUzMyw3ICszNjAzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIq
IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgic2hhZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFk
ZXIpKQogICAgICAgICByZXR1cm47CiAgICAgU3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9
IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1bHQoKTsKICAgICBpZiAoIXZhbGlkYXRlU3RyaW5n
KCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpKQpAQCAtMzU0NCw3ICszNjE0
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRl
ciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygi
c3RlbmNpbEZ1bmMiLCBmdW5jKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzU1Nyw3ICszNjI3LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMs
IEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXMKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGlu
dCByZWYsIEdDM0R1aW50IG1hc2spCiB7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2
YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgZnVuYykpCiAgICAgICAg
IHJldHVybjsKQEAgLTM1ODUsNyArMzY1NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDCiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQog
ewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwogICAgIG1f
c3RlbmNpbE1hc2tCYWNrID0gbWFzazsKQEAgLTM1OTQsNyArMzY2NCw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
dWludCBtYXNrKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAoZmFjZSkgewog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9CQUNLOgpAQCAtMzYxNiwxNCAr
MzY4NiwxNCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0
ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6
cGFzcykKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChm
YWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Rl
bmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZh
aWwsIEdDM0RlbnVtIHpwYXNzKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4
dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KQEAgLTM3
MzQsNyArMzgwNCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0
ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkKICAgICAgICAgfHwgIXZh
bGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5
QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKICAgICAgICAgcmV0dXJuOwogICAgIHZvaWQq
IGRhdGEgPSBwaXhlbHMgPyBwaXhlbHMtPmJhc2VBZGRyZXNzKCkgOiAwOwpAQCAtMzc2Miw3ICsz
ODMyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEq
IHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwg
Tm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8
fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNl
SW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgp
LCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQogICAgICAgICByZXR1
cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CiAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9
IHRydWU7CkBAIC0zODAzLDcgKzM4NzMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVIVE1MSW1h
Z2VFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgaW1hZ2UsIGVjKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdlMkQiLCBp
bWFnZSwgZWMpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9y
UmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJl
bmRlcmVyKCkpOwpAQCAtMzgyMCw3ICszODkwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVI
VE1MQ2FudmFzRWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0ZVRl
eEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxl
bWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2Fu
dmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFnZTJE
IiwgY2FudmFzLCBlYykgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKQEAg
LTM4NjQsNyArMzkzNCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0g
MDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQo
InRleEltYWdlMkQiLCB2aWRlbywgZWMpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJbWFnZTJEIiwgdmlkZW8sIGVjKQog
ICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2Uy
RCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQogICAgICAgICByZXR1cm47CiAKQEAgLTM4OTQsNyArMzk2NCw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFt
ZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1mLCBH
QzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4UGFyYW1ldGVy
IiwgdGFyZ2V0LCBmYWxzZSk7CiAgICAgaWYgKCF0ZXgpCkBAIC0zOTk2LDcgKzQwNjYsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2Uy
RCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscywgTnVsbE5vdEFs
bG93ZWQpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhG
dW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpCiAgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMo
InRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRh
cmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zm
c2V0LCB5b2Zmc2V0KSkKICAgICAgICAgcmV0dXJuOwogICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMt
PmJhc2VBZGRyZXNzKCk7CkBAIC00MDIzLDcgKzQwOTMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXBpeGVscyB8
fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNl
SW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsICBwaXhlbHMtPndpZHRoKCksIHBpeGVs
cy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMo
InRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwg
bGV2ZWwsIGZvcm1hdCwgIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9y
bWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7CkBAIC00MDQ5LDcgKzQxMTksNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwg
IXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGltYWdlLCBlYykpCisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVt
ZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UsIGVjKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFn
ZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsKQEAgLTQwNjYsNyArNDEzNiw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKLSAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhTdWJJbWFnZTJE
IiwgY2FudmFzLCBlYykKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKICAgICAg
ICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNv
dXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lk
dGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MDgyLDcgKzQxNTIsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0Vs
ZW1lbnQoInRleFN1YkltYWdlMkQiLCB2aWRlbywgZWMpCiAgICAgICAgIHx8ICF2YWxpZGF0ZVRl
eEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVt
ZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52
aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTQwOTYsNyArNDE2Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRp
b24pCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKQEAgLTQxMTAsNyArNDE4MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQorICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCks
IHYtPmRhdGEoKSk7CkBAIC00MTE5LDcgKzQxODksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZs
bwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2Nh
dGlvbiwgdiwgc2l6ZSwgMSkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXpl
LCAxKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCBzaXplLCB2KTsKQEAgLTQxMjgsNyArNDE5OCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIWxvY2F0aW9uKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxv
Y2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAh
PSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC00MTQ3LDcgKzQyMTcsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwg
diwgMSkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCAxKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExF
Ul9DVUJFKQpAQCAtNDE2NSw3ICs0MjM1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2
LCBzaXplLCAxKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkUpCkBAIC00MTgyLDcgKzQyNTIsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDMwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtNDE5Niw3ICs0MjY2LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0QKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYiLCBs
b2NhdGlvbiwgdiwgMikpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCAyKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYtPmRhdGEoKSk7CkBAIC00MjA1LDcgKzQyNzUsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTJmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9j
b250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMiwgdik7CkBA
IC00MjE0LDcgKzQyODQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDMwogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CkBAIC00MjI4LDcgKzQyOTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikpCisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5p
Zm9ybTJpdiIsIGxvY2F0aW9uLCB2LCAyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250
ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYt
PmRhdGEoKSk7CkBAIC00MjM3LDcgKzQzMDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2IiwgbG9jYXRpb24s
IHYsIHNpemUsIDIpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOwpAQCAtNDI0Niw3ICs0MzE2LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIWxvY2F0aW9uKQorICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CkBAIC00MjYw
LDcgKzQzMzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCAzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2Iiwg
bG9jYXRpb24sIHYsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZv
cm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsK
QEAgLTQyNjksNyArNDMzOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXpl
LCAzKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHNpemUgLyAzLCB2KTsKQEAgLTQyNzgsNyArNDM0OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQg
eiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICFsb2NhdGlvbikKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9u
LT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewpAQCAtNDI5Miw3ICs0MzYyLDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0QKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2
IiwgbG9jYXRpb24sIHYsIDMpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwgMykp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOwpAQCAtNDMwMSw3ICs0Mzcx
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlm
b3JtM2l2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsK
QEAgLTQzMTAsNyArNDM4MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
M2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0
IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTQzMjQsNyArNDM5NCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNECiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJh
eSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3Jt
NGZ2IiwgbG9jYXRpb24sIHYsIDQpKQorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwg
NCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOwpAQCAtNDMzMyw3ICs0
NDAzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMo
InVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQs
IHYpOwpAQCAtNDM0Miw3ICs0NDEyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzMKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhbG9jYXRpb24pCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKQEAgLTQzNTYsNyArNDQyNiw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNECiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIs
IGxvY2F0aW9uLCB2LCA0KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRpb24sIHYsIDQpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKQEAgLTQzNjUsNyArNDQzNSw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9j
b250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7CkBA
IC00Mzc0LDcgKzQ0NDQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDMwogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0
cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9y
bU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDQpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LT5sZW5ndGgoKSAvIDQsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKIH0KQEAgLTQzODIsNyArNDQ1
Miw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0
cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygi
dW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQogICAg
ICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCBzaXplIC8gNCwgdHJhbnNwb3NlLCB2KTsKIH0KQEAgLTQzOTAsNyArNDQ2MCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlv
biwgdHJhbnNwb3NlLCB2LCA5KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgOSkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQt
PnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwg
dHJhbnNwb3NlLCB2LT5kYXRhKCkpOwogfQpAQCAtNDM5OCw3ICs0NDY4LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlv
biwgdHJhbnNwb3NlLCB2LCBzaXplLCA5KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2
IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUg
LyA5LCB0cmFuc3Bvc2UsIHYpOwogfQpAQCAtNDQwNiw3ICs0NDc2LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW8KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IDE2KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24sIHRyYW5zcG9z
ZSwgdiwgMTYpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2LCB0cmFuc3Bvc2UsIHYt
PmRhdGEoKSk7CiB9CkBAIC00NDE0LDcgKzQ0ODQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
bwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2Us
IHYsIHNpemUsIDE2KSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgc2l6ZSwgMTYpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMTYsIHRyYW5z
cG9zZSwgdik7CiB9CkBAIC00NDQ0LDcgKzQ1MTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgidmFsaWRh
dGVQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgidmFsaWRhdGVQcm9ncmFtIiwgcHJvZ3JhbSkpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPnZhbGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8o
cHJvZ3JhbSkpOwogfQpAQCAtNDUxMiw3ICs0NTgyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNE
c2kKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1
aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1h
bGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKQEAgLTQ1
NTUsNyArNDYyNSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDCiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICgh
dmFsaWRhdGVTaXplKCJ2aWV3cG9ydCIsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICByZXR1cm47
CkBAIC00NTY0LDcgKzQ2MzQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3Bv
cnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRAogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpIHsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CiAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxvc2VDb250ZXh0
IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00
NjE3LDcgKzQ2ODcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJ
bXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNbwogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0b3JlQ29udGV4dCgpCiB7Ci0gICAgaWYgKCFpc0NvbnRl
eHRMb3N0KCkpIHsKKyAgICBpZiAoIWlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewogICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IG5vdCBsb3N0Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC00NjM0LDMzICs0NzA0LDQ4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkKIAogUGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKCFpc0NvbnRleHRM
b3N0KCkpID8gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkgOiAwOworICAgIHJldHVybiAoIWlz
Q29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSA/IG1fY29udGV4
dC0+cGxhdGZvcm1MYXllcigpIDogMDsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQogeworICAgIGlm
IChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKwogICAgIG1f
Y29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQog
eworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsK
KwogICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKICAgICBtX2NvbnRleHRHcm91cC0+YWRk
T2JqZWN0KG9iamVjdCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVD
b250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQogeworICAgIGlmIChtX2lz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKwogICAgIG1fY29udGV4
dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQogeworICAgIGlm
IChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKwogICAgIEFT
U0VSVCghaXNDb250ZXh0TG9zdCgpKTsKICAgICBtX2NvbnRleHRPYmplY3RzLmFkZChvYmplY3Qp
OwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2Jq
ZWN0cygpCiB7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAg
cmV0dXJuOworCiAgICAgd2hpbGUgKG1fY29udGV4dE9iamVjdHMuc2l6ZSgpID4gMCkgewogICAg
ICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4
dE9iamVjdHMuYmVnaW4oKTsKICAgICAgICAgKCppdCktPmRldGFjaENvbnRleHQoKTsKQEAgLTQ2
NzQsNyArNDc1OSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RvcCgpCiB7Ci0g
ICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSAmJiAh
bV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CiAgICAgICAgIGZvcmNlTG9zdENvbnRleHQo
U3ludGhldGljTG9zdENvbnRleHQpOwogICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0Qo
KTsKICAgICB9CkBAIC01NTkxLDcgKzU2NzYsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSAog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwg
R0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQog
ewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJp
YnMpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOwpAQCAtNTYyMyw3
ICs1NzA4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQKIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpCiB7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2KSB7CiAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBhcnJheSIpOwpAQCAtNTYzNCw3ICs1NzE5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW4K
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmICghdikgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKQEAgLTYwNjcsNyAr
NjE1Miw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZp
c29yKQogewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVy
dGV4QXR0cmlicykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaAppbmRleCAyY2VmOWY3YmQyNjQ3MjYzYTkwMTNjMjE5MWUxMzFiMmFi
ODM0YTMzLi5jNTdlN2M1ZjBkN2RmMTEyNTg2YjNlODdjOWI1MjU2Njk5Y2FhZWE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApA
QCAtMzM5LDYgKzMzOSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOwogCisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52
YXNFbGVtZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwogICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CiAgICAgdm9pZCBpbml0aWFs
aXplTmV3Q29udGV4dCgpOwogICAgIHZvaWQgc2V0dXBGbGFncygpOwpAQCAtNTI0LDYgKzUyNSwx
MyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZTsKICAg
ICBpbnQgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7CiAKKyAgICAvLyBBIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCBjYW4gYmUgY3JlYXRlZCBpbiBhIHN0YXRlIHdoZXJlIGl0IGFwcGVhcnMg
YXMKKyAgICAvLyBhIHZhbGlkIGFuZCBhY3RpdmUgY29udGV4dCwgYnV0IHdpbGwgbm90IGV4ZWN1
dGUgYW55IGltcG9ydGFudCBvcGVyYXRpb25zCisgICAgLy8gdW50aWwgaXRzIGxvYWQgcG9saWN5
IGlzIGNvbXBsZXRlbHkgcmVzb2x2ZWQuCisgICAgYm9vbCBtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb247CisgICAgYm9vbCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb247CisgICAgYm9v
bCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCk7CisKICAgICAvLyBFbmFibGVkIGV4dGVuc2lvbiBv
YmplY3RzLgogICAgIE93blB0cjxFWFREcmF3QnVmZmVycz4gbV9leHREcmF3QnVmZmVyczsKICAg
ICBPd25QdHI8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPiBtX2V4dFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYzsK
</data>
<flag name="review"
          id="248906"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>