<?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>63766</bug_id>
          
          <creation_ts>2011-06-30 16:01:55 -0700</creation_ts>
          <short_desc>[WebKit2] Consider scale factor when allocating backing store</short_desc>
          <delta_ts>2011-07-16 22:46:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>dbates</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>430763</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-30 16:01:55 -0700</bug_when>
    <thetext>[WebKit2] Consider scale factor when allocating backing store</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430790</commentid>
    <comment_count>1</comment_count>
      <attachid>99392</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-30 16:18:00 -0700</bug_when>
    <thetext>Created attachment 99392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430791</commentid>
    <comment_count>2</comment_count>
      <attachid>99393</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-30 16:18:57 -0700</bug_when>
    <thetext>Created attachment 99393
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430827</commentid>
    <comment_count>3</comment_count>
      <attachid>99393</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-30 16:38:50 -0700</bug_when>
    <thetext>Comment on attachment 99393
Patch

I don&apos;t think we should complicate ShareableBitmap by introducing the notion of a scale factor into the design. The ShareableBitmap is intended to be pixel-based and not know anything about scale factors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430864</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-30 17:04:56 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I don&apos;t think we should complicate ShareableBitmap by introducing the notion of a scale factor into the design. The ShareableBitmap is intended to be pixel-based and not know anything about scale factors.

I did that because ShareableBitmap is both the class that is making the graphics context for drawing into the bitmap and the class that is doing the painting from the bitmap. If I try to do this at another level, I expect I’ll have to modify multiple classes. But I’ll give it a shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430899</commentid>
    <comment_count>5</comment_count>
      <attachid>99408</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-30 18:09:10 -0700</bug_when>
    <thetext>Created attachment 99408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430902</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-30 18:10:20 -0700</bug_when>
    <thetext>This patch handles less then the previous version. It does not take the backing scale factor into account when dealing with the find indicator. It was easier to share code for that when it was handled at the bitmap level. But I can do the find indicator separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430912</commentid>
    <comment_count>7</comment_count>
      <attachid>99412</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-30 18:21:39 -0700</bug_when>
    <thetext>Created attachment 99412
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430913</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-30 18:22:20 -0700</bug_when>
    <thetext>This new one is just the previous patch rebased. I assume that was needed to make it apply on Qt, for example. Given what EWS now says, I guess I was wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430957</commentid>
    <comment_count>9</comment_count>
      <attachid>99412</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-30 20:06:57 -0700</bug_when>
    <thetext>Comment on attachment 99412
Patch

Clearing flags on attachment: 99412

Committed r90198: &lt;http://trac.webkit.org/changeset/90198&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430959</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-30 20:07:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438257</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-07-16 22:46:19 -0700</bug_when>
    <thetext>For completeness, the scale factor overloaded ShareableBitmap::paint() will need to be implemented for Qt, GTK, and Cairo.

Filed bugs:

Qt: &lt;https://bugs.webkit.org/show_bug.cgi?id=64663&gt;
GTK: &lt;https://bugs.webkit.org/show_bug.cgi?id=64664&gt;
Cairo: &lt;https://bugs.webkit.org/show_bug.cgi?id=64665&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99392</attachid>
            <date>2011-06-30 16:18:00 -0700</date>
            <delta_ts>2011-06-30 16:18:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63766-20110630161759.patch</filename>
            <type>text/plain</type>
            <size>26803</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMTc0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDYtMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXZWJLaXQyXSBDb25zaWRlciBzY2FsZSBmYWN0b3Igd2hlbiBhbGxv
Y2F0aW5nIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzNzY2CisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBj
b25zaWRlcmluZyBzY2FsZSBmYWN0b3IuIEl0IGNvbnNpZGVycworICAgICAgICBzY2FsZSBmYWN0
b3IgZm9yIHRoZSBwcmltYXJ5IGJhY2tpbmcgc3RvcmUsIG5vdCBncmFwaGljcyBsYXllcnMsCisg
ICAgICAgIGFuZCBmb3IgQ0cgb25seS4KKworICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6cGFpbnRJbWFnZSk6IEFkZGVkIGEgc2NhbGVGYWN0
b3IgYXJndW1lbnQuCisgICAgICAgIChXZWJLaXQ6OnBhaW50Qml0bWFwQ29udGV4dCk6IFBhc3Mg
MSBmb3Igc2NhbGVGYWN0b3IuCisgICAgICAgICogUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuaDog
VXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU6OkhhbmRsZSk6IElu
aXRpYWxpemUgc2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZTo6ZW5jb2RlKTogRW5jb2RlIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYktpdDo6
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU6OmRlY29kZSk6IERlY29kZSBzY2FsZSBmYWN0b3IuCisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKTogUGFzcyBhbG9uZyB0aGUg
c2NhbGUgZmFjdG9yIGFuZAorICAgICAgICB1c2UgaXQgd2hlbiBkZWNpZGluZyBob3cgbWFueSBi
eXRlcyB0byBhbGxvY2F0ZS4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVTaGFyZWFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVIYW5kbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpT
aGFyZWFibGVCaXRtYXApOiBTdG9yZSBzY2FsZSBmYWN0b3IuCisgICAgICAgIChXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6cmVzaXplKTogQ29uc2lkZXIgc2NhbGUgZmFjdG9yIHdoZW4gZGVjaWRp
bmcKKyAgICAgICAgaG93IG1hbnkgYnl0ZXMgdG8gYWxsb2NhdGUuCisgICAgICAgIChXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6c2l6ZUluUGl4ZWxzKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6c2l6ZUluQnl0ZXMpOiBBZGRlZC4KKworICAgICAgICAqIFNoYXJl
ZC9TaGFyZWFibGVCaXRtYXAuaDogQWRkZWQgc2NhbGUgZmFjdG9yIGFyZ3VtZW50cyBhbmQgbV9z
Y2FsZUZhY3Rvci4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpzaXplSW5QaXhl
bHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpzaXplSW5CeXRl
cyk6IENoYW5nZWQgdG8gY29uc2lkZXIgc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjplbmNvZGVJbWFn
ZSk6IFBhc3MgMSBmb3Igc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogU2hhcmVkL1dlYkltYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2U6OmNyZWF0ZSk6IFBhc3MgMSBmb3Igc2Nh
bGUgZmFjdG9yLgorCisgICAgICAgICogU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQp
OiBBbGxvY2F0ZSBhIGxhcmdlcgorICAgICAgICBiaXRtYXAgYmFzZWQgb24gdGhlIHNjYWxlIGZh
Y3RvciBhbmQgc2V0IHVwIHRoZSBzY2FsaW5nIHRvIGNvbXBlbnNhdGUuCisgICAgICAgIChXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6cGFpbnQpOiBQYXNzIHRoZSBzY2FsZSBmYWN0b3IgaW50byBw
YWludEltYWdlLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUNHSW1h
Z2UpOiBDcmVhdGUgYW4gaW1hZ2Ugd2l0aCBhCisgICAgICAgIGxhcmdlciBzaXplIGJhc2VkIG9u
IHRoZSBzY2FsZSBmYWN0b3IuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6
c25hcHNob3QpOiBQYXNzIDEgZm9yIHNjYWxlIGZhY3Rvci4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb3h5
OjpnZW9tZXRyeURpZENoYW5nZSk6IFBhc3MgMSBmb3Igc2NhbGUgZmFjdG9yLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNlbmRMYXllcnNUb1VJUHJvY2Vzcyk6IFBh
c3MgMSBmb3Igc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydElt
YWdlVG9CaXRtYXApOiBQYXNzIDEgZm9yIHNjYWxlIGZhY3Rvci4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Y29udmVydFFQaXhtYXBUb1NoYXJlYWJsZUJpdG1hcCk6IFBhc3MgMSBmb3Igc2NhbGUg
ZmFjdG9yLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9w
dXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51OjpzZXRVcFBsYXRm
b3JtRGF0YSk6IFBhc3MgMSBmb3Igc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdB
cmVhSW1wbDo6ZGlzcGxheSk6IFBhc3Mgc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENv
bnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IpOiBQYXNzIHNjYWxlIGZhY3Rvci4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dXBkYXRlVGlsZSk6IFBhc3MgMSBmb3Igc2NhbGUg
ZmFjdG9yLgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjp0YWtlU25hcHNob3Qp
OiBQYXNzIDEgZm9yIHNjYWxlIGZhY3Rvci4KKwogMjAxMS0wNi0zMCAgTWFyayBSb3dlICA8bXJv
d2VAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgV2luZG93cyBidWlsZC4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDkwMTMx
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxNSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQg
cGFpbnRJbWFnZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dJbWFnZVJlZiBpbWFnZSwgQ0dQb2lu
dCBkZXN0aW5hdGlvbiwgQ0dSZWN0IHNvdXJjZSkKK3ZvaWQgcGFpbnRJbWFnZShDR0NvbnRleHRS
ZWYgY29udGV4dCwgQ0dJbWFnZVJlZiBpbWFnZSwgQ0dGbG9hdCBzY2FsZUZhY3RvciwgQ0dQb2lu
dCBkZXN0aW5hdGlvbiwgQ0dSZWN0IHNvdXJjZSkKIHsKICAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KGNvbnRleHQpOwogCiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RNYWtl
KGRlc3RpbmF0aW9uLngsIGRlc3RpbmF0aW9uLnksIHNvdXJjZS5zaXplLndpZHRoLCBzb3VyY2Uu
c2l6ZS5oZWlnaHQpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CiAK
LSAgICBzaXplX3QgaW1hZ2VIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBz
aXplX3QgaW1hZ2VXaWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgc2l6ZV90IGlt
YWdlSGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgLyBzY2FsZUZhY3RvcjsKKyAgICBz
aXplX3QgaW1hZ2VXaWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgLyBzY2FsZUZhY3RvcjsK
IAogICAgIENHRmxvYXQgZGVzdFggPSBkZXN0aW5hdGlvbi54IC0gc291cmNlLm9yaWdpbi54Owog
ICAgIENHRmxvYXQgZGVzdFkgPSAtc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oaW1hZ2VIZWlnaHQpIC0g
ZGVzdGluYXRpb24ueSArIHNvdXJjZS5vcmlnaW4ueTsKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBw
YWludEltYWdlKENHQ29udGV4dFJlZiBjb250ZXh0LCBDRwogdm9pZCBwYWludEJpdG1hcENvbnRl
eHQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0LCBDR1Bv
aW50IGRlc3RpbmF0aW9uLCBDR1JlY3Qgc291cmNlKQogewogICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBpbWFnZShBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250
ZXh0KSk7Ci0gICAgcGFpbnRJbWFnZShjb250ZXh0LCBpbWFnZS5nZXQoKSwgZGVzdGluYXRpb24s
IHNvdXJjZSk7CisgICAgcGFpbnRJbWFnZShjb250ZXh0LCBpbWFnZS5nZXQoKSwgMSwgZGVzdGlu
YXRpb24sIHNvdXJjZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5oCShyZXZpc2lvbiA5MDEzMSkKKysrIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgcGFpbnRJbWFnZShD
R0NvbnRleHRSZWYsIENHSW1hZ2VSZWYsIENHUG9pbnQgZGVzdGluYXRpb24sIENHUmVjdCBzb3Vy
Y2UpOwordm9pZCBwYWludEltYWdlKENHQ29udGV4dFJlZiwgQ0dJbWFnZVJlZiwgQ0dGbG9hdCBz
Y2FsZUZhY3RvciwgQ0dQb2ludCBkZXN0aW5hdGlvbiwgQ0dSZWN0IHNvdXJjZSk7CiB2b2lkIHBh
aW50Qml0bWFwQ29udGV4dChDR0NvbnRleHRSZWYsIENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0
LCBDR1BvaW50IGRlc3RpbmF0aW9uLCBDR1JlY3Qgc291cmNlKTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAko
cmV2aXNpb24gOTAxMzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTMgKzM1LDE1IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpIYW5k
bGUoKQotICAgIDogbV9mbGFncygwKQorICAgIDogbV9zY2FsZUZhY3RvcigxKQorICAgICwgbV9m
bGFncygwKQogewogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjplbmNvZGUoQ29y
ZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXItPmVu
Y29kZShtX2hhbmRsZSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fc2NhbGVGYWN0b3IpOwogICAg
IGVuY29kZXItPmVuY29kZShtX3NpemUpOwogICAgIGVuY29kZXItPmVuY29kZShtX2ZsYWdzKTsK
IH0KQEAgLTUwLDYgKzUyLDggQEAgYm9vbCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZGVjb2Rl
KENvcgogewogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZS5tX2hhbmRsZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUubV9zY2Fs
ZUZhY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShoYW5kbGUubV9zaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKGhhbmRsZS5tX2ZsYWdzKSkKQEAgLTU3LDM2ICs2MSwzNiBAQCBib29sIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoQ29yCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb25zdCBJ
bnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKK1Bhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBzY2FsZUZh
Y3RvciwgRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgc2l6ZV90IG51bUJ5dGVzID0gbnVtQnl0ZXNGb3JT
aXplKHNpemUpOworICAgIHNpemVfdCBudW1CeXRlcyA9IHNpemVJbkJ5dGVzKHNpemUsIHNjYWxl
RmFjdG9yKTsKICAgICAKICAgICB2b2lkKiBkYXRhID0gMDsKICAgICBpZiAoIXRyeUZhc3RNYWxs
b2MobnVtQnl0ZXMpLmdldFZhbHVlKGRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlQml0bWFwKHNpemUsIGZsYWdzLCBkYXRhKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVCaXRtYXAoc2l6ZSwgc2NhbGVGYWN0b3Is
IGZsYWdzLCBkYXRhKSk7CiB9CiAKLVBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFn
cykKK1Bhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBzY2FsZUZhY3RvciwgRmxhZ3MgZmxh
Z3MpCiB7Ci0gICAgc2l6ZV90IG51bUJ5dGVzID0gbnVtQnl0ZXNGb3JTaXplKHNpemUpOworICAg
IHNpemVfdCBudW1CeXRlcyA9IHNpemVJbkJ5dGVzKHNpemUsIHNjYWxlRmFjdG9yKTsKIAogICAg
IFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRl
KG51bUJ5dGVzKTsKICAgICBpZiAoIXNoYXJlZE1lbW9yeSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlYWJsZUJpdG1hcChzaXplLCBmbGFncywgc2hh
cmVkTWVtb3J5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVCaXRtYXAoc2l6
ZSwgc2NhbGVGYWN0b3IsIGZsYWdzLCBzaGFyZWRNZW1vcnkpKTsKIH0KIAotUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNp
emUsIEZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KQor
UGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIGZsb2F0IHNjYWxlRmFjdG9yLCBGbGFncyBmbGFncywgUGFzc1JlZlB0
cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSkKIHsKICAgICBBU1NFUlQoc2hhcmVkTWVtb3J5
KTsKIAotICAgIHNpemVfdCBudW1CeXRlcyA9IG51bUJ5dGVzRm9yU2l6ZShzaXplKTsKKyAgICBz
aXplX3QgbnVtQnl0ZXMgPSBzaXplSW5CeXRlcyhzaXplLCBzY2FsZUZhY3Rvcik7CiAgICAgQVNT
RVJUX1VOVVNFRChudW1CeXRlcywgc2hhcmVkTWVtb3J5LT5zaXplKCkgPj0gbnVtQnl0ZXMpOwog
ICAgIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVhYmxlQml0bWFwKHNpemUsIGZsYWdz
LCBzaGFyZWRNZW1vcnkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlYWJsZUJpdG1h
cChzaXplLCBzY2FsZUZhY3RvciwgZmxhZ3MsIHNoYXJlZE1lbW9yeSkpOwogfQogCiBQYXNzUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29uc3QgSGFuZGxl
JiBoYW5kbGUpCkBAIC05Niw3ICsxMDAsNyBAQCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
U2hhcmVhYmxlQml0CiAgICAgaWYgKCFzaGFyZWRNZW1vcnkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgcmV0dXJuIGNyZWF0ZShoYW5kbGUubV9zaXplLCBoYW5kbGUubV9mbGFncywgc2hhcmVk
TWVtb3J5LnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGNyZWF0ZShoYW5kbGUubV9zaXplLCBoYW5k
bGUubV9zY2FsZUZhY3RvciwgaGFuZGxlLm1fZmxhZ3MsIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCkp
OwogfQogCiBib29sIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxl
KQpAQCAtMTA2LDE5ICsxMTAsMjIgQEAgYm9vbCBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUhhbmRs
ZShIYW5kbAogICAgIGlmICghbV9zaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5kbGUubV9o
YW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZFdyaXRlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisgICAgaGFuZGxlLm1fc2NhbGVGYWN0b3IgPSBt
X3NjYWxlRmFjdG9yOwogICAgIGhhbmRsZS5tX2ZsYWdzID0gbV9mbGFnczsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotU2hhcmVhYmxlQml0bWFwOjpTaGFyZWFibGVCaXRtYXAoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHZvaWQqIGRhdGEpCitTaGFyZWFibGVCaXRtYXA6OlNoYXJl
YWJsZUJpdG1hcChjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBzY2FsZUZhY3RvciwgRmxhZ3Mg
ZmxhZ3MsIHZvaWQqIGRhdGEpCiAgICAgOiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fc2NhbGVGYWN0
b3Ioc2NhbGVGYWN0b3IpCiAgICAgLCBtX2ZsYWdzKGZsYWdzKQogICAgICwgbV9kYXRhKGRhdGEp
CiB7CiB9CiAKLVNoYXJlYWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKGNvbnN0IEludFNpemUm
IHNpemUsIEZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5
KQorU2hhcmVhYmxlQml0bWFwOjpTaGFyZWFibGVCaXRtYXAoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
ZmxvYXQgc2NhbGVGYWN0b3IsIEZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4g
c2hhcmVkTWVtb3J5KQogICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX3NjYWxlRmFjdG9yKHNj
YWxlRmFjdG9yKQogICAgICwgbV9mbGFncyhmbGFncykKICAgICAsIG1fc2hhcmVkTWVtb3J5KHNo
YXJlZE1lbW9yeSkKICAgICAsIG1fZGF0YSgwKQpAQCAtMTM5LDcgKzE0Niw3IEBAIGJvb2wgU2hh
cmVhYmxlQml0bWFwOjpyZXNpemUoY29uc3QgSW50U2kKICAgICBpZiAoc2l6ZSA9PSBtX3NpemUp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgc2l6ZV90IG5ld051bUJ5dGVzID0gbnVtQnl0
ZXNGb3JTaXplKHNpemUpOworICAgIHNpemVfdCBuZXdOdW1CeXRlcyA9IHNpemVJbkJ5dGVzKHNp
emUsIG1fc2NhbGVGYWN0b3IpOwogICAgIAogICAgIC8vIFRyeSB0byByZXNpemUuCiAgICAgY2hh
ciogbmV3RGF0YSA9IDA7CkBAIC0xNjMsNCArMTcwLDE1IEBAIHZvaWQqIFNoYXJlYWJsZUJpdG1h
cDo6ZGF0YSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGF0YTsKIH0KIAorV2ViQ29yZTo6SW50U2l6
ZSBTaGFyZWFibGVCaXRtYXA6OnNpemVJblBpeGVscyhjb25zdCBJbnRTaXplJiBzaXplLCBmbG9h
dCBzY2FsZUZhY3RvcikKK3sKKyAgICByZXR1cm4gSW50U2l6ZShjZWlsZihzaXplLndpZHRoKCkg
KiBzY2FsZUZhY3RvciksIGNlaWxmKHNpemUuaGVpZ2h0KCkgKiBzY2FsZUZhY3RvcikpOworfQor
CitzaXplX3QgU2hhcmVhYmxlQml0bWFwOjpzaXplSW5CeXRlcyhjb25zdCBJbnRTaXplJiBzaXpl
LCBmbG9hdCBzY2FsZUZhY3RvcikKK3sKKyAgICBJbnRTaXplIHBpeGVsc1NpemUgPSBzaXplSW5Q
aXhlbHMoc2l6ZSwgc2NhbGVGYWN0b3IpOworICAgIHJldHVybiBwaXhlbHNTaXplLndpZHRoKCkg
KiBwaXhlbHNTaXplLmhlaWdodCgpICogNDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCShyZXZpc2lvbiA5MDEz
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzQsMTcgKzc0LDE4IEBAIHB1YmxpYzoKIAogICAgICAgICBtdXRhYmxlIFNoYXJlZE1l
bW9yeTo6SGFuZGxlIG1faGFuZGxlOwogICAgICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsK
KyAgICAgICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKICAgICAgICAgRmxhZ3MgbV9mbGFnczsKICAg
ICB9OwogCiAgICAgLy8gQ3JlYXRlIGEgc2hhcmVhYmxlIGJpdG1hcCB0aGF0IHVzZXMgbWFsbG9j
ZWQgbWVtb3J5LgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFncyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0IHNj
YWxlRmFjdG9yLCBGbGFncyk7CiAKICAgICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgYml0bWFwIHdo
b3NlIGJhY2tpbmcgbWVtb3J5IGNhbiBiZSBzaGFyZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MuCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjcmVhdGVTaGFyZWFibGUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYsIEZsYWdzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGNyZWF0ZVNoYXJlYWJsZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxv
YXQgc2NhbGVGYWN0b3IsIEZsYWdzKTsKIAogICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRt
YXAgZnJvbSBhbiBhbHJlYWR5IGV4aXN0aW5nIHNoYXJlZCBtZW1vcnkgYmxvY2suCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIEZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4pOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBm
bG9hdCBzY2FsZUZhY3RvciwgRmxhZ3MsIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5Pik7CiAKICAg
ICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgYml0bWFwIGZyb20gYSBoYW5kbGUuCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjcmVhdGUoY29uc3QgSGFuZGxlJik7CkBAIC0x
MzIsMTAgKzEzMywxNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBTaGFyZWFi
bGVCaXRtYXAoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEZsYWdzLCB2b2lkKik7Ci0gICAgU2hh
cmVhYmxlQml0bWFwKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFncywgUGFzc1JlZlB0cjxT
aGFyZWRNZW1vcnk+KTsKKyAgICBTaGFyZWFibGVCaXRtYXAoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIGZsb2F0IHNjYWxlRmFjdG9yLCBGbGFncywgdm9pZCopOworICAgIFNoYXJlYWJsZUJpdG1h
cChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxvYXQgc2NhbGVGYWN0b3IsIEZsYWdzLCBQYXNz
UmVmUHRyPFNoYXJlZE1lbW9yeT4pOwogCi0gICAgc3RhdGljIHNpemVfdCBudW1CeXRlc0ZvclNp
emUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgeyByZXR1cm4gc2l6ZS53aWR0aCgpICog
c2l6ZS5oZWlnaHQoKSAqIDQ7IH0KKyAgICBzdGF0aWMgV2ViQ29yZTo6SW50U2l6ZSBzaXplSW5Q
aXhlbHMoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0IHNjYWxlRmFjdG9yKTsKKyAgICBX
ZWJDb3JlOjpJbnRTaXplIHNpemVJblBpeGVscygpIGNvbnN0IHsgcmV0dXJuIHNpemVJblBpeGVs
cyhtX3NpemUsIG1fc2NhbGVGYWN0b3IpOyB9CisKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVJbkJ5
dGVzKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBmbG9hdCBzY2FsZUZhY3Rvcik7CisgICAgc2l6
ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc2l6ZUluQnl0ZXMobV9zaXplLCBtX3Nj
YWxlRmFjdG9yKTsgfQogCiAjaWYgVVNFKENHKQogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBj
cmVhdGVDR0ltYWdlKENHRGF0YVByb3ZpZGVyUmVmKSBjb25zdDsKQEAgLTE0OCw5ICsxNTMsOSBA
QCBwcml2YXRlOgogI2VuZGlmCiAKICAgICB2b2lkKiBkYXRhKCkgY29uc3Q7Ci0gICAgc2l6ZV90
IHNpemVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbnVtQnl0ZXNGb3JTaXplKG1fc2l6ZSk7IH0K
IAogICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOworICAgIGZsb2F0IG1fc2NhbGVGYWN0b3I7
CiAgICAgRmxhZ3MgbV9mbGFnczsKIAogICAgIC8vIElmIHRoZSBzaGFyZWFibGUgYml0bWFwIGlz
IGJhY2tlZCBieSBzaGFyZWQgbWVtb3J5LCB0aGlzIHBvaW50cyB0byB0aGUgc2hhcmVkIG1lbW9y
eSBvYmplY3QuCkBAIC0xNTgsNiArMTYzLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIElmIHRoZSBz
aGFyZWFibGUgYml0bWFwIGlzIGJhY2tlZCBieSBmYXN0TWFsbG9jZWQgbWVtb3J5LCB0aGlzIHBv
aW50cyB0byB0aGUgZGF0YS4KICAgICB2b2lkKiBtX2RhdGE7CisKICNpZiBQTEFURk9STShXSU4p
CiAgICAgbXV0YWJsZSBPd25QdHI8SERDPiBtX3dpbmRvd3NDb250ZXh0OwogICAgIG11dGFibGUg
T3duUHRyPEhCSVRNQVA+IG1fd2luZG93c0JpdG1hcDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiA5MDEzMSkKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTAsNyArMjkwLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPENyZWRlbnRpYWw+
OjpkZWNvZGUoQQogCiBzdGF0aWMgdm9pZCBlbmNvZGVJbWFnZShBcmd1bWVudEVuY29kZXIqIGVu
Y29kZXIsIEltYWdlKiBpbWFnZSkKIHsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCBTaGFy
ZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCks
IDEsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CiAgICAgYml0bWFwLT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJ
bnRQb2ludCgpKTsKIAogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkltYWdlLmNwcAkocmV2aXNpb24gOTAxMzEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogUGFzc1JlZlB0cjxXZWJJbWFnZT4gV2ViSW1hZ2U6OmNy
ZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZU9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBp
ZiAob3B0aW9ucyAmIEltYWdlT3B0aW9uc1NoYXJlYWJsZSkKLSAgICAgICAgcmV0dXJuIFdlYklt
YWdlOjpjcmVhdGUoU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoc2l6ZSwgU2hhcmVh
YmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKSk7Ci0gICAgcmV0dXJuIFdlYkltYWdlOjpjcmVhdGUo
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0Fs
cGhhKSk7CisgICAgICAgIHJldHVybiBXZWJJbWFnZTo6Y3JlYXRlKFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKHNpemUsIDEsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSkp
OworICAgIHJldHVybiBXZWJJbWFnZTo6Y3JlYXRlKFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHNp
emUsIDEsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSkpOwogfQogCiBQYXNzUmVmUHRy
PFdlYkltYWdlPiBXZWJJbWFnZTo6Y3JlYXRlKFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBi
aXRtYXApCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZy9TaGFyZWFibGVCaXRt
YXBDRy5jcHAJKHJldmlzaW9uIDkwMTMxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2NnL1No
YXJlYWJsZUJpdG1hcENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjEgKzUwLDI1IEBAIFBh
c3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXQKIHsKICAgICBSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpKTsKIAorICAgIEludFNpemUgc2l6ZUluUGl4ZWxzID0gdGhpcy0+c2l6ZUluUGl4
ZWxzKCk7CisKICAgICByZWYoKTsgLy8gQmFsYW5jZWQgYnkgZGVyZWYgaW4gcmVsZWFzZUJpdG1h
cENvbnRleHREYXRhLgogICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJpdG1hcENvbnRleHQo
QWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlV2l0aERhdGEoZGF0YSgpLAotICAgICAgICBt
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCA4LCBtX3NpemUud2lkdGgoKSAqIDQsIGNv
bG9yU3BhY2UuZ2V0KCksCisgICAgICAgIHNpemVJblBpeGVscy53aWR0aCgpLCBzaXplSW5QaXhl
bHMuaGVpZ2h0KCksIDgsIHNpemVJblBpeGVscy53aWR0aCgpICogNCwgY29sb3JTcGFjZS5nZXQo
KSwKICAgICAgICAgYml0bWFwSW5mbyhtX2ZsYWdzKSwgcmVsZWFzZUJpdG1hcENvbnRleHREYXRh
LCB0aGlzKSk7CiAKICAgICAvLyBXZSB3YW50IHRoZSBvcmlnaW4gdG8gYmUgaW4gdGhlIHRvcCBs
ZWZ0IGNvcm5lciBzbyB3ZSBmbGlwIHRoZSBiYWNraW5nIHN0b3JlIGNvbnRleHQuCi0gICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGJpdG1hcENvbnRleHQuZ2V0KCksIDAsIG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGJpdG1hcENvbnRleHQuZ2V0KCksIDAsIHNp
emVJblBpeGVscy5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oYml0bWFwQ29udGV4
dC5nZXQoKSwgMSwgLTEpOwogCisgICAgQ0dDb250ZXh0U2NhbGVDVE0oYml0bWFwQ29udGV4dC5n
ZXQoKSwgbV9zY2FsZUZhY3RvciwgbV9zY2FsZUZhY3Rvcik7CisKICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEdyYXBoaWNzQ29udGV4dChiaXRtYXBDb250ZXh0LmdldCgpKSk7CiB9CiAKIHZvaWQg
U2hhcmVhYmxlQml0bWFwOjpwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFBvaW50JiBkc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKIHsKLSAg
ICBwYWludEltYWdlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIG1ha2VDR0ltYWdlQ29weSgp
LmdldCgpLCBkc3RQb2ludCwgc3JjUmVjdCk7CisgICAgcGFpbnRJbWFnZShjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpLCBtYWtlQ0dJbWFnZUNvcHkoKS5nZXQoKSwgbV9zY2FsZUZhY3RvciwgZHN0
UG9pbnQsIHNyY1JlY3QpOwogfQogCiAjaWYgIVBMQVRGT1JNKFdJTikKQEAgLTg4LDcgKzkyLDgg
QEAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IFNoYXJlYWJsZUJpdG1hcDo6YwogICAgIEFTU0VSVF9B
UkcoZGF0YVByb3ZpZGVyLCBkYXRhUHJvdmlkZXIpOwogCiAgICAgUmV0YWluUHRyPENHQ29sb3JT
cGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0Io
KSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIENHSW1hZ2VDcmVh
dGUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fc2l6ZS53aWR0aCgp
ICogNCwgY29sb3JTcGFjZS5nZXQoKSwgYml0bWFwSW5mbyhtX2ZsYWdzKSwgZGF0YVByb3ZpZGVy
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIEludFNpemUgc2l6
ZUluUGl4ZWxzID0gdGhpcy0+c2l6ZUluUGl4ZWxzKCk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlKEFkb3B0Q0YsIENHSW1hZ2VDcmVhdGUoc2l6ZUluUGl4ZWxzLndpZHRoKCksIHNp
emVJblBpeGVscy5oZWlnaHQoKSwgOCwgMzIsIHNpemVJblBpeGVscy53aWR0aCgpICogNCwgY29s
b3JTcGFjZS5nZXQoKSwgYml0bWFwSW5mbyhtX2ZsYWdzKSwgZGF0YVByb3ZpZGVyLCAwLCBmYWxz
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwogICAgIHJldHVybiBpbWFnZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
eHkuY3BwCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCB2
b2lkIFBsdWdpblByb3h5OjpnZW9tZXRyeURpZENoYW5nZShjb25zCiAKICAgICBib29sIGRpZFVw
ZGF0ZUJhY2tpbmdTdG9yZSA9IGZhbHNlOwogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKLSAg
ICAgICAgbV9iYWNraW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShmcmFtZVJlY3Qu
c2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgICAgICBtX2JhY2tp
bmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGZyYW1lUmVjdC5zaXplKCksIDEsIFNo
YXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CiAgICAgICAgIGRpZFVwZGF0ZUJhY2tpbmdT
dG9yZSA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChmcmFtZVJlY3Quc2l6ZSgpICE9IG1fYmFja2lu
Z1N0b3JlLT5zaXplKCkpIHsKICAgICAgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgYWxyZWFkeSBl
eGlzdHMsIGp1c3QgcmVzaXplIGl0LgpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgUGx1Z2luUHJv
eHk6Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnMKIAogICAgIGlmIChkaWRVcGRhdGVCYWNraW5nU3Rv
cmUpIHsKICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBsdWctaW4gYmFja2luZyBzdG9yZS4KLSAg
ICAgICAgbV9wbHVnaW5CYWNraW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJl
YWJsZShmcmFtZVJlY3Quc2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwor
ICAgICAgICBtX3BsdWdpbkJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hh
cmVhYmxlKGZyYW1lUmVjdC5zaXplKCksIDEsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBo
YSk7CiAgICAgICAgIGlmICghbV9wbHVnaW5CYWNraW5nU3RvcmUpCiAgICAgICAgICAgICByZXR1
cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAkocmV2aXNpb24gOTAxMzEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNyArNTQwLDcgQEAgUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IE5ldHNjYXBlUGx1ZwogCiAgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKICAg
ICAKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZVNoYXJlYWJsZShtX2ZyYW1lUmVjdC5zaXplKCksIFNoYXJlYWJsZUJpdG1hcDo6U3Vw
cG9ydHNBbHBoYSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUobV9mcmFtZVJlY3Quc2l6ZSgpLCAxLCBTaGFyZWFi
bGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNv
bnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogCiAgICAgY29udGV4dC0+
dHJhbnNsYXRlKC1tX2ZyYW1lUmVjdC54KCksIC1tX2ZyYW1lUmVjdC55KCkpOwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3Myw3ICs0NzMsNyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNlbmRMYXll
cnNUb1VJUHJvCiAKICAgICAgICAgICAgIFdlYkxheWVyVXBkYXRlSW5mbyBjaHVuayhlbmNsb3Np
bmdVcGRhdGVSZWN0KTsKICAgICAgICAgICAgIGNodW5rLmxheWVySUQgPSB1aW50MzJfdChsYXll
ci0+aWQoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjaHVuay5yZWN0LnNpemUoKSwgU2hhcmVh
YmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGNodW5rLnJl
Y3Quc2l6ZSgpLCAxLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwogICAgICAgICAg
ICAgaWYgKCFiaXRtYXApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYkRyYWdDbGllbnRNYWMubW0JKHJldmlzaW9uIDkwMTMxKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGlj
IFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZXJ0SW1hZ2VUb0JpdG1hcChOU0ltYWdl
ICppbWFnZSkKIHsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKFtpbWFnZSBzaXplXSksIFNoYXJlYWJs
ZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShbaW1hZ2Ugc2l6
ZV0pLCAxLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwogICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250
ZXh0KCk7CiAKICAgICBSZXRhaW5QdHI8TlNHcmFwaGljc0NvbnRleHQ+IHNhdmVkQ29udGV4dCA9
IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJE
cmFnQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNv
bnZlCiAgICAgUVBpeG1hcCBwKFFTaXplKDEsIDEpKTsKICAgICBpZiAocGl4bWFwKQogICAgICAg
ICBwID0gKnBpeG1hcDsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKHAuc2l6ZSgpKSwgU2hhcmVhYmxl
Qml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKHAuc2l6ZSgpKSwg
MSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKICAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
OwogCiAgICAgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BpeG1hcCgw
LCAwLCBwKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
d2luL1dlYlBvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24g
OTAxMzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9X
ZWJQb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4IEBAIHZvaWQg
V2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YShjb24KICAgICBpbnQgYmFja2luZ1N0b3Jl
V2lkdGggPSBtYXgocGFnZUNvb3JkaW5hdGVzLndpZHRoKCkgLSBtX3BvcHVwQ2xpZW50LT5jbGll
bnRJbnNldExlZnQoKSAtIG1fcG9wdXBDbGllbnQtPmNsaWVudEluc2V0UmlnaHQoKSwgcG9wdXBX
aWR0aCk7CiAKICAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUoYmFja2luZ1N0b3JlV2lkdGgs
IChpdGVtQ291bnQgKiBkYXRhLm1faXRlbUhlaWdodCkpOwotICAgIGRhdGEubV9ub3RTZWxlY3Rl
ZEJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdT
dG9yZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Ci0gICAgZGF0YS5tX3Nl
bGVjdGVkQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFj
a2luZ1N0b3JlU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBkYXRh
Lm1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJl
YWJsZShiYWNraW5nU3RvcmVTaXplLCAxLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEp
OworICAgIGRhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9yZVNpemUsIDEsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9y
dHNBbHBoYSk7CiAKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBub3RTZWxlY3RlZEJhY2tp
bmdTdG9yZUNvbnRleHQgPSBkYXRhLm1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmUtPmNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IHNlbGVjdGVkQmFj
a2luZ1N0b3JlQ29udGV4dCA9IGRhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZS0+Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAkocmV2aXNpb24gOTAxMzEpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjE3LDcgKzYxNyw3IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaXNwbGF5
KFVwZGF0ZUluZm8KICAgICBJbnRSZWN0IGJvdW5kcyA9IG1fZGlydHlSZWdpb24uYm91bmRzKCk7
CiAgICAgQVNTRVJUKG1fd2ViUGFnZS0+Ym91bmRzKCkuY29udGFpbnMoYm91bmRzKSk7CiAKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZVNoYXJlYWJsZShib3VuZHMuc2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEp
OworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKGJvdW5kcy5zaXplKCksIG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVG
YWN0b3IoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKICAgICBpZiAoIWJpdG1h
cCkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkwMTMxKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgRmluZENvbnRyb2xsZXI6OnVwZGF0
ZUZpbmRJbmRpY2F0b3IKICAgICBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+Z2V0Q2xpcHBl
ZFZpc2libGVUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMpOwogCiAgICAgLy8gQ3JlYXRlIGEgYmFj
a2luZyBzdG9yZSBhbmQgcGFpbnQgdGhlIGZpbmQgaW5kaWNhdG9yIHRleHQgaW50byBpdC4KLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBmaW5kSW5kaWNhdG9yVGV4dEJhY2tpbmdTdG9yZSA9
IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNlbGVjdGlvblJlY3Quc2l6ZSgpLCBT
aGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGZpbmRJbmRpY2F0b3JUZXh0QmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVTaGFyZWFibGUoc2VsZWN0aW9uUmVjdC5zaXplKCksIG1fd2ViUGFnZS0+dXNlclNwYWNlU2Nh
bGVGYWN0b3IoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKICAgICBpZiAoIWZp
bmRJbmRpY2F0b3JUZXh0QmFja2luZ1N0b3JlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJl
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Rp
bGVkRHJhd2luZ0FyZWEuY3BwCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyLDcgKzE0Miw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6dXBkYXRlVGlsZShpbnQgdGkK
IAogICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RC
b3VuZHMgPSBkaXJ0eVJlY3Q7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0g
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoZGlydHlSZWN0LnNpemUoKSwgU2hhcmVh
YmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBi
aXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShkaXJ0eVJlY3Quc2l6ZSgp
LCAxLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwogICAgIGJpdG1hcC0+Y3JlYXRl
SGFuZGxlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKICAgICBwYWludEludG9CaXRtYXAoYml0
bWFwLmdldCgpLCBkaXJ0eVJlY3QsIHNjYWxlKTsKIApAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQg
VGlsZWREcmF3aW5nQXJlYTo6dGFrZVNuYXBzaG90KGNvbnMKIAogICAgIFVwZGF0ZUluZm8gdXBk
YXRlSW5mbzsKICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSB0aWxlUmVjdDsKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZVNoYXJlYWJsZSh0aWxlUmVjdC5zaXplKCksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBo
YSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUodGlsZVJlY3Quc2l6ZSgpLCAxLCBTaGFyZWFibGVCaXRtYXA6OlN1
cHBvcnRzQWxwaGEpOwogICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKHVwZGF0ZUluZm8uYml0bWFw
SGFuZGxlKTsKIAogICAgIHBhaW50SW50b0JpdG1hcChiaXRtYXAuZ2V0KCksIHRpbGVSZWN0LCB0
YXJnZXRTY2FsZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99393</attachid>
            <date>2011-06-30 16:18:57 -0700</date>
            <delta_ts>2011-06-30 18:09:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63766-20110630161856.patch</filename>
            <type>text/plain</type>
            <size>26956</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMTc0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDYtMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXZWJLaXQyXSBDb25zaWRlciBzY2FsZSBmYWN0b3Igd2hlbiBhbGxv
Y2F0aW5nIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzNzY2CisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBj
b25zaWRlcmluZyBzY2FsZSBmYWN0b3IuIEl0IGNvbnNpZGVycworICAgICAgICBzY2FsZSBmYWN0
b3IgZm9yIHRoZSBwcmltYXJ5IGJhY2tpbmcgc3RvcmUsIG5vdCBncmFwaGljcyBsYXllcnMsCisg
ICAgICAgIGFuZCBmb3IgQ0cgb25seS4KKworICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6cGFpbnRJbWFnZSk6IEFkZGVkIGEgc2NhbGVGYWN0
b3IgYXJndW1lbnQuCisgICAgICAgIChXZWJLaXQ6OnBhaW50Qml0bWFwQ29udGV4dCk6IFBhc3Mg
MSBmb3Igc2NhbGVGYWN0b3IuCisgICAgICAgICogUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuaDog
VXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU6OkhhbmRsZSk6IElu
aXRpYWxpemUgc2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZTo6ZW5jb2RlKTogRW5jb2RlIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYktpdDo6
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU6OmRlY29kZSk6IERlY29kZSBzY2FsZSBmYWN0b3IuCisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKTogUGFzcyBhbG9uZyB0aGUg
c2NhbGUgZmFjdG9yIGFuZAorICAgICAgICB1c2UgaXQgd2hlbiBkZWNpZGluZyBob3cgbWFueSBi
eXRlcyB0byBhbGxvY2F0ZS4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVTaGFyZWFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVIYW5kbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpT
aGFyZWFibGVCaXRtYXApOiBTdG9yZSBzY2FsZSBmYWN0b3IuCisgICAgICAgIChXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6cmVzaXplKTogQ29uc2lkZXIgc2NhbGUgZmFjdG9yIHdoZW4gZGVjaWRp
bmcKKyAgICAgICAgaG93IG1hbnkgYnl0ZXMgdG8gYWxsb2NhdGUuCisgICAgICAgIChXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6c2l6ZUluUGl4ZWxzKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6c2l6ZUluQnl0ZXMpOiBBZGRlZC4KKworICAgICAgICAqIFNoYXJl
ZC9TaGFyZWFibGVCaXRtYXAuaDogQWRkZWQgc2NhbGUgZmFjdG9yIGFyZ3VtZW50cyBhbmQgbV9z
Y2FsZUZhY3Rvci4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpzaXplSW5QaXhl
bHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpzaXplSW5CeXRl
cyk6IENoYW5nZWQgdG8gY29uc2lkZXIgc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjplbmNvZGVJbWFn
ZSk6IFBhc3MgMSBmb3Igc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogU2hhcmVkL1dlYkltYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2U6OmNyZWF0ZSk6IFBhc3MgMSBmb3Igc2Nh
bGUgZmFjdG9yLgorCisgICAgICAgICogU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQp
OiBBbGxvY2F0ZSBhIGxhcmdlcgorICAgICAgICBiaXRtYXAgYmFzZWQgb24gdGhlIHNjYWxlIGZh
Y3RvciBhbmQgc2V0IHVwIHRoZSBzY2FsaW5nIHRvIGNvbXBlbnNhdGUuCisgICAgICAgIChXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6cGFpbnQpOiBQYXNzIHRoZSBzY2FsZSBmYWN0b3IgaW50byBw
YWludEltYWdlLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUNHSW1h
Z2UpOiBDcmVhdGUgYW4gaW1hZ2Ugd2l0aCBhCisgICAgICAgIGxhcmdlciBzaXplIGJhc2VkIG9u
IHRoZSBzY2FsZSBmYWN0b3IuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6
c25hcHNob3QpOiBQYXNzIDEgZm9yIHNjYWxlIGZhY3Rvci4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb3h5
OjpnZW9tZXRyeURpZENoYW5nZSk6IFBhc3MgMSBmb3Igc2NhbGUgZmFjdG9yLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNlbmRMYXllcnNUb1VJUHJvY2Vzcyk6IFBh
c3MgMSBmb3Igc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydElt
YWdlVG9CaXRtYXApOiBQYXNzIDEgZm9yIHNjYWxlIGZhY3Rvci4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Y29udmVydFFQaXhtYXBUb1NoYXJlYWJsZUJpdG1hcCk6IFBhc3MgMSBmb3Igc2NhbGUg
ZmFjdG9yLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9w
dXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51OjpzZXRVcFBsYXRm
b3JtRGF0YSk6IFBhc3MgMSBmb3Igc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdB
cmVhSW1wbDo6ZGlzcGxheSk6IFBhc3Mgc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENv
bnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IpOiBQYXNzIHNjYWxlIGZhY3Rvci4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dXBkYXRlVGlsZSk6IFBhc3MgMSBmb3Igc2NhbGUg
ZmFjdG9yLgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjp0YWtlU25hcHNob3Qp
OiBQYXNzIDEgZm9yIHNjYWxlIGZhY3Rvci4KKwogMjAxMS0wNi0zMCAgTWFyayBSb3dlICA8bXJv
d2VAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgV2luZG93cyBidWlsZC4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDkwMTMx
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwyOCArMzAsMjggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQg
cGFpbnRJbWFnZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dJbWFnZVJlZiBpbWFnZSwgQ0dQb2lu
dCBkZXN0aW5hdGlvbiwgQ0dSZWN0IHNvdXJjZSkKK3ZvaWQgcGFpbnRJbWFnZShDR0NvbnRleHRS
ZWYgY29udGV4dCwgQ0dJbWFnZVJlZiBpbWFnZSwgQ0dGbG9hdCBzY2FsZUZhY3RvciwgQ0dQb2lu
dCBkZXN0aW5hdGlvbiwgQ0dSZWN0IHNvdXJjZSkKIHsKICAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KGNvbnRleHQpOwogCiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RNYWtl
KGRlc3RpbmF0aW9uLngsIGRlc3RpbmF0aW9uLnksIHNvdXJjZS5zaXplLndpZHRoLCBzb3VyY2Uu
c2l6ZS5oZWlnaHQpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CiAK
LSAgICBzaXplX3QgaW1hZ2VIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBz
aXplX3QgaW1hZ2VXaWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgQ0dGbG9hdCBp
bWFnZUhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpIC8gc2NhbGVGYWN0b3I7CisgICAg
Q0dGbG9hdCBpbWFnZVdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAvIHNjYWxlRmFjdG9y
OwogCiAgICAgQ0dGbG9hdCBkZXN0WCA9IGRlc3RpbmF0aW9uLnggLSBzb3VyY2Uub3JpZ2luLng7
Ci0gICAgQ0dGbG9hdCBkZXN0WSA9IC1zdGF0aWNfY2FzdDxDR0Zsb2F0PihpbWFnZUhlaWdodCkg
LSBkZXN0aW5hdGlvbi55ICsgc291cmNlLm9yaWdpbi55OworICAgIENHRmxvYXQgZGVzdFkgPSAt
aW1hZ2VIZWlnaHQgLSBkZXN0aW5hdGlvbi55ICsgc291cmNlLm9yaWdpbi55OwogCiAgICAgQ0dD
b250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoZGVzdFgsIGRlc3RZLCBpbWFnZVdp
ZHRoLCBpbWFnZUhlaWdodCksIGltYWdlKTsKKwogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
Y29udGV4dCk7CiB9CiAKIHZvaWQgcGFpbnRCaXRtYXBDb250ZXh0KENHQ29udGV4dFJlZiBjb250
ZXh0LCBDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCwgQ0dQb2ludCBkZXN0aW5hdGlvbiwgQ0dS
ZWN0IHNvdXJjZSkKIHsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwg
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dCkpOwotICAgIHBhaW50SW1h
Z2UoY29udGV4dCwgaW1hZ2UuZ2V0KCksIGRlc3RpbmF0aW9uLCBzb3VyY2UpOworICAgIHBhaW50
SW1hZ2UoY29udGV4dCwgaW1hZ2UuZ2V0KCksIDEsIGRlc3RpbmF0aW9uLCBzb3VyY2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Y2cvQ0dVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9j
Zy9DR1V0aWxpdGllcy5oCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL2NnL0NHVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgcGFpbnRJbWFnZShDR0NvbnRleHRSZWYsIENHSW1h
Z2VSZWYsIENHUG9pbnQgZGVzdGluYXRpb24sIENHUmVjdCBzb3VyY2UpOwordm9pZCBwYWludElt
YWdlKENHQ29udGV4dFJlZiwgQ0dJbWFnZVJlZiwgQ0dGbG9hdCBzY2FsZUZhY3RvciwgQ0dQb2lu
dCBkZXN0aW5hdGlvbiwgQ0dSZWN0IHNvdXJjZSk7CiB2b2lkIHBhaW50Qml0bWFwQ29udGV4dChD
R0NvbnRleHRSZWYsIENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0LCBDR1BvaW50IGRlc3RpbmF0
aW9uLCBDR1JlY3Qgc291cmNlKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAkocmV2aXNpb24gOTAxMzEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsMTMgKzM1LDE1IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpIYW5kbGUoKQotICAgIDogbV9mbGFn
cygwKQorICAgIDogbV9zY2FsZUZhY3RvcigxKQorICAgICwgbV9mbGFncygwKQogewogfQogCiB2
b2lkIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXItPmVuY29kZShtX2hhbmRsZSk7Cisg
ICAgZW5jb2Rlci0+ZW5jb2RlKG1fc2NhbGVGYWN0b3IpOwogICAgIGVuY29kZXItPmVuY29kZSht
X3NpemUpOwogICAgIGVuY29kZXItPmVuY29kZShtX2ZsYWdzKTsKIH0KQEAgLTUwLDYgKzUyLDgg
QEAgYm9vbCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZTo6ZGVjb2RlKENvcgogewogICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZS5tX2hhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUubV9zY2FsZUZhY3RvcikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUubV9zaXplKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZS5t
X2ZsYWdzKSkKQEAgLTU3LDM2ICs2MSwzNiBAQCBib29sIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
OjpkZWNvZGUoQ29yCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFn
cyBmbGFncykKK1Bhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBzY2FsZUZhY3RvciwgRmxhZ3MgZmxhZ3Mp
CiB7Ci0gICAgc2l6ZV90IG51bUJ5dGVzID0gbnVtQnl0ZXNGb3JTaXplKHNpemUpOworICAgIHNp
emVfdCBudW1CeXRlcyA9IHNpemVJbkJ5dGVzKHNpemUsIHNjYWxlRmFjdG9yKTsKICAgICAKICAg
ICB2b2lkKiBkYXRhID0gMDsKICAgICBpZiAoIXRyeUZhc3RNYWxsb2MobnVtQnl0ZXMpLmdldFZh
bHVlKGRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U2hhcmVhYmxlQml0bWFwKHNpemUsIGZsYWdzLCBkYXRhKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTaGFyZWFibGVCaXRtYXAoc2l6ZSwgc2NhbGVGYWN0b3IsIGZsYWdzLCBkYXRhKSk7CiB9
CiAKLVBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKK1Bhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjb25zdCBJbnRT
aXplJiBzaXplLCBmbG9hdCBzY2FsZUZhY3RvciwgRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgc2l6ZV90
IG51bUJ5dGVzID0gbnVtQnl0ZXNGb3JTaXplKHNpemUpOworICAgIHNpemVfdCBudW1CeXRlcyA9
IHNpemVJbkJ5dGVzKHNpemUsIHNjYWxlRmFjdG9yKTsKIAogICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKG51bUJ5dGVzKTsKICAgICBp
ZiAoIXNoYXJlZE1lbW9yeSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNoYXJlYWJsZUJpdG1hcChzaXplLCBmbGFncywgc2hhcmVkTWVtb3J5KSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWFibGVCaXRtYXAoc2l6ZSwgc2NhbGVGYWN0b3IsIGZs
YWdzLCBzaGFyZWRNZW1vcnkpKTsKIH0KIAotUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCBQ
YXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KQorUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGZs
b2F0IHNjYWxlRmFjdG9yLCBGbGFncyBmbGFncywgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IHNo
YXJlZE1lbW9yeSkKIHsKICAgICBBU1NFUlQoc2hhcmVkTWVtb3J5KTsKIAotICAgIHNpemVfdCBu
dW1CeXRlcyA9IG51bUJ5dGVzRm9yU2l6ZShzaXplKTsKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSBz
aXplSW5CeXRlcyhzaXplLCBzY2FsZUZhY3Rvcik7CiAgICAgQVNTRVJUX1VOVVNFRChudW1CeXRl
cywgc2hhcmVkTWVtb3J5LT5zaXplKCkgPj0gbnVtQnl0ZXMpOwogICAgIAotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2hhcmVhYmxlQml0bWFwKHNpemUsIGZsYWdzLCBzaGFyZWRNZW1vcnkpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlYWJsZUJpdG1hcChzaXplLCBzY2FsZUZhY3Rv
ciwgZmxhZ3MsIHNoYXJlZE1lbW9yeSkpOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUpCkBAIC05Niw3
ICsxMDAsNyBAQCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gU2hhcmVhYmxlQml0CiAgICAg
aWYgKCFzaGFyZWRNZW1vcnkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGNyZWF0
ZShoYW5kbGUubV9zaXplLCBoYW5kbGUubV9mbGFncywgc2hhcmVkTWVtb3J5LnJlbGVhc2UoKSk7
CisgICAgcmV0dXJuIGNyZWF0ZShoYW5kbGUubV9zaXplLCBoYW5kbGUubV9zY2FsZUZhY3Rvciwg
aGFuZGxlLm1fZmxhZ3MsIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCkpOwogfQogCiBib29sIFNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxlKQpAQCAtMTA2LDE5ICsxMTAs
MjIgQEAgYm9vbCBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUhhbmRsZShIYW5kbAogICAgIGlmICgh
bV9zaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5kbGUubV9oYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UmVhZFdyaXRlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGhhbmRsZS5tX3NpemUg
PSBtX3NpemU7CisgICAgaGFuZGxlLm1fc2NhbGVGYWN0b3IgPSBtX3NjYWxlRmFjdG9yOwogICAg
IGhhbmRsZS5tX2ZsYWdzID0gbV9mbGFnczsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU2hhcmVh
YmxlQml0bWFwOjpTaGFyZWFibGVCaXRtYXAoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxh
Z3MsIHZvaWQqIGRhdGEpCitTaGFyZWFibGVCaXRtYXA6OlNoYXJlYWJsZUJpdG1hcChjb25zdCBJ
bnRTaXplJiBzaXplLCBmbG9hdCBzY2FsZUZhY3RvciwgRmxhZ3MgZmxhZ3MsIHZvaWQqIGRhdGEp
CiAgICAgOiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCiAg
ICAgLCBtX2ZsYWdzKGZsYWdzKQogICAgICwgbV9kYXRhKGRhdGEpCiB7CiB9CiAKLVNoYXJlYWJs
ZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdz
LCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KQorU2hhcmVhYmxlQml0bWFw
OjpTaGFyZWFibGVCaXRtYXAoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgc2NhbGVGYWN0b3Is
IEZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KQogICAg
IDogbV9zaXplKHNpemUpCisgICAgLCBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQogICAgICwg
bV9mbGFncyhmbGFncykKICAgICAsIG1fc2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeSkKICAgICAs
IG1fZGF0YSgwKQpAQCAtMTM5LDcgKzE0Niw3IEBAIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpyZXNp
emUoY29uc3QgSW50U2kKICAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgc2l6ZV90IG5ld051bUJ5dGVzID0gbnVtQnl0ZXNGb3JTaXplKHNpemUpOwor
ICAgIHNpemVfdCBuZXdOdW1CeXRlcyA9IHNpemVJbkJ5dGVzKHNpemUsIG1fc2NhbGVGYWN0b3Ip
OwogICAgIAogICAgIC8vIFRyeSB0byByZXNpemUuCiAgICAgY2hhciogbmV3RGF0YSA9IDA7CkBA
IC0xNjMsNCArMTcwLDE1IEBAIHZvaWQqIFNoYXJlYWJsZUJpdG1hcDo6ZGF0YSgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fZGF0YTsKIH0KIAorV2ViQ29yZTo6SW50U2l6ZSBTaGFyZWFibGVCaXRtYXA6
OnNpemVJblBpeGVscyhjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBzY2FsZUZhY3RvcikKK3sK
KyAgICByZXR1cm4gSW50U2l6ZShjZWlsZihzaXplLndpZHRoKCkgKiBzY2FsZUZhY3RvciksIGNl
aWxmKHNpemUuaGVpZ2h0KCkgKiBzY2FsZUZhY3RvcikpOworfQorCitzaXplX3QgU2hhcmVhYmxl
Qml0bWFwOjpzaXplSW5CeXRlcyhjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBzY2FsZUZhY3Rv
cikKK3sKKyAgICBJbnRTaXplIHBpeGVsc1NpemUgPSBzaXplSW5QaXhlbHMoc2l6ZSwgc2NhbGVG
YWN0b3IpOworICAgIHJldHVybiBwaXhlbHNTaXplLndpZHRoKCkgKiBwaXhlbHNTaXplLmhlaWdo
dCgpICogNDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsMTcgKzc0LDE4
IEBAIHB1YmxpYzoKIAogICAgICAgICBtdXRhYmxlIFNoYXJlZE1lbW9yeTo6SGFuZGxlIG1faGFu
ZGxlOwogICAgICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgZmxvYXQgbV9z
Y2FsZUZhY3RvcjsKICAgICAgICAgRmxhZ3MgbV9mbGFnczsKICAgICB9OwogCiAgICAgLy8gQ3Jl
YXRlIGEgc2hhcmVhYmxlIGJpdG1hcCB0aGF0IHVzZXMgbWFsbG9jZWQgbWVtb3J5LgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBGbGFncyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBj
cmVhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0IHNjYWxlRmFjdG9yLCBGbGFncyk7
CiAKICAgICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgYml0bWFwIHdob3NlIGJhY2tpbmcgbWVtb3J5
IGNhbiBiZSBzaGFyZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MuCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBjcmVhdGVTaGFyZWFibGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIEZsYWdzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNyZWF0
ZVNoYXJlYWJsZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxvYXQgc2NhbGVGYWN0b3IsIEZs
YWdzKTsKIAogICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgZnJvbSBhbiBhbHJlYWR5
IGV4aXN0aW5nIHNoYXJlZCBtZW1vcnkgYmxvY2suCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEZsYWdzLCBQYXNz
UmVmUHRyPFNoYXJlZE1lbW9yeT4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBmbG9hdCBzY2FsZUZhY3Rvciwg
RmxhZ3MsIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5Pik7CiAKICAgICAvLyBDcmVhdGUgYSBzaGFy
ZWFibGUgYml0bWFwIGZyb20gYSBoYW5kbGUuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBjcmVhdGUoY29uc3QgSGFuZGxlJik7CkBAIC0xMzIsMTAgKzEzMywxNCBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBTaGFyZWFibGVCaXRtYXAoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIEZsYWdzLCB2b2lkKik7Ci0gICAgU2hhcmVhYmxlQml0bWFwKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmLCBGbGFncywgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+KTsKKyAg
ICBTaGFyZWFibGVCaXRtYXAoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0IHNjYWxlRmFj
dG9yLCBGbGFncywgdm9pZCopOworICAgIFNoYXJlYWJsZUJpdG1hcChjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgZmxvYXQgc2NhbGVGYWN0b3IsIEZsYWdzLCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9y
eT4pOwogCi0gICAgc3RhdGljIHNpemVfdCBudW1CeXRlc0ZvclNpemUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSkgeyByZXR1cm4gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7
IH0KKyAgICBzdGF0aWMgV2ViQ29yZTo6SW50U2l6ZSBzaXplSW5QaXhlbHMoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIGZsb2F0IHNjYWxlRmFjdG9yKTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNp
emVJblBpeGVscygpIGNvbnN0IHsgcmV0dXJuIHNpemVJblBpeGVscyhtX3NpemUsIG1fc2NhbGVG
YWN0b3IpOyB9CisKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBmbG9hdCBzY2FsZUZhY3Rvcik7CisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkg
Y29uc3QgeyByZXR1cm4gc2l6ZUluQnl0ZXMobV9zaXplLCBtX3NjYWxlRmFjdG9yKTsgfQogCiAj
aWYgVVNFKENHKQogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDR0ltYWdlKENHRGF0
YVByb3ZpZGVyUmVmKSBjb25zdDsKQEAgLTE0OCw5ICsxNTMsOSBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICAgICB2b2lkKiBkYXRhKCkgY29uc3Q7Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29u
c3QgeyByZXR1cm4gbnVtQnl0ZXNGb3JTaXplKG1fc2l6ZSk7IH0KIAogICAgIFdlYkNvcmU6Oklu
dFNpemUgbV9zaXplOworICAgIGZsb2F0IG1fc2NhbGVGYWN0b3I7CiAgICAgRmxhZ3MgbV9mbGFn
czsKIAogICAgIC8vIElmIHRoZSBzaGFyZWFibGUgYml0bWFwIGlzIGJhY2tlZCBieSBzaGFyZWQg
bWVtb3J5LCB0aGlzIHBvaW50cyB0byB0aGUgc2hhcmVkIG1lbW9yeSBvYmplY3QuCkBAIC0xNTgs
NiArMTYzLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIElmIHRoZSBzaGFyZWFibGUgYml0bWFwIGlz
IGJhY2tlZCBieSBmYXN0TWFsbG9jZWQgbWVtb3J5LCB0aGlzIHBvaW50cyB0byB0aGUgZGF0YS4K
ICAgICB2b2lkKiBtX2RhdGE7CisKICNpZiBQTEFURk9STShXSU4pCiAgICAgbXV0YWJsZSBPd25Q
dHI8SERDPiBtX3dpbmRvd3NDb250ZXh0OwogICAgIG11dGFibGUgT3duUHRyPEhCSVRNQVA+IG1f
d2luZG93c0JpdG1hcDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNyAr
MjkwLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPENyZWRlbnRpYWw+OjpkZWNvZGUoQQogCiBzdGF0
aWMgdm9pZCBlbmNvZGVJbWFnZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIEltYWdlKiBpbWFn
ZSkKIHsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBv
cnRzQWxwaGEpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIDEsIFNoYXJlYWJsZUJpdG1h
cDo6U3VwcG9ydHNBbHBoYSk7CiAgICAgYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKS0+
ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgpKTsKIAogICAg
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkltYWdlLmNwcAkocmV2aXNpb24gOTAxMzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogUGFzc1JlZlB0cjxXZWJJbWFnZT4gV2ViSW1hZ2U6OmNyZWF0ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBJbWFnZU9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAob3B0aW9ucyAmIEltYWdl
T3B0aW9uc1NoYXJlYWJsZSkKLSAgICAgICAgcmV0dXJuIFdlYkltYWdlOjpjcmVhdGUoU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0
c0FscGhhKSk7Ci0gICAgcmV0dXJuIFdlYkltYWdlOjpjcmVhdGUoU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKSk7CisgICAgICAgIHJl
dHVybiBXZWJJbWFnZTo6Y3JlYXRlKFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNp
emUsIDEsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSkpOworICAgIHJldHVybiBXZWJJ
bWFnZTo6Y3JlYXRlKFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHNpemUsIDEsIFNoYXJlYWJsZUJp
dG1hcDo6U3VwcG9ydHNBbHBoYSkpOwogfQogCiBQYXNzUmVmUHRyPFdlYkltYWdlPiBXZWJJbWFn
ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXApCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAJKHJldmlzaW9u
IDkwMTMxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjEgKzUwLDI1IEBAIFBhc3NPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBTaGFyZWFibGVCaXQKIHsKICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBj
b2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKIAorICAg
IEludFNpemUgc2l6ZUluUGl4ZWxzID0gdGhpcy0+c2l6ZUluUGl4ZWxzKCk7CisKICAgICByZWYo
KTsgLy8gQmFsYW5jZWQgYnkgZGVyZWYgaW4gcmVsZWFzZUJpdG1hcENvbnRleHREYXRhLgogICAg
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJpdG1hcENvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlV2l0aERhdGEoZGF0YSgpLAotICAgICAgICBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLCA4LCBtX3NpemUud2lkdGgoKSAqIDQsIGNvbG9yU3BhY2UuZ2V0KCksCisg
ICAgICAgIHNpemVJblBpeGVscy53aWR0aCgpLCBzaXplSW5QaXhlbHMuaGVpZ2h0KCksIDgsIHNp
emVJblBpeGVscy53aWR0aCgpICogNCwgY29sb3JTcGFjZS5nZXQoKSwKICAgICAgICAgYml0bWFw
SW5mbyhtX2ZsYWdzKSwgcmVsZWFzZUJpdG1hcENvbnRleHREYXRhLCB0aGlzKSk7CiAKICAgICAv
LyBXZSB3YW50IHRoZSBvcmlnaW4gdG8gYmUgaW4gdGhlIHRvcCBsZWZ0IGNvcm5lciBzbyB3ZSBm
bGlwIHRoZSBiYWNraW5nIHN0b3JlIGNvbnRleHQuCi0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KGJpdG1hcENvbnRleHQuZ2V0KCksIDAsIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgQ0dDb250ZXh0
VHJhbnNsYXRlQ1RNKGJpdG1hcENvbnRleHQuZ2V0KCksIDAsIHNpemVJblBpeGVscy5oZWlnaHQo
KSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oYml0bWFwQ29udGV4dC5nZXQoKSwgMSwgLTEpOwog
CisgICAgQ0dDb250ZXh0U2NhbGVDVE0oYml0bWFwQ29udGV4dC5nZXQoKSwgbV9zY2FsZUZhY3Rv
ciwgbV9zY2FsZUZhY3Rvcik7CisKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29u
dGV4dChiaXRtYXBDb250ZXh0LmdldCgpKSk7CiB9CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpw
YWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBk
c3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKIHsKLSAgICBwYWludEltYWdlKGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCksIG1ha2VDR0ltYWdlQ29weSgpLmdldCgpLCBkc3RQb2ludCwg
c3JjUmVjdCk7CisgICAgcGFpbnRJbWFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtYWtl
Q0dJbWFnZUNvcHkoKS5nZXQoKSwgbV9zY2FsZUZhY3RvciwgZHN0UG9pbnQsIHNyY1JlY3QpOwog
fQogCiAjaWYgIVBMQVRGT1JNKFdJTikKQEAgLTg4LDcgKzkyLDggQEAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IFNoYXJlYWJsZUJpdG1hcDo6YwogICAgIEFTU0VSVF9BUkcoZGF0YVByb3ZpZGVyLCBk
YXRhUHJvdmlkZXIpOwogCiAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFj
ZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIENHSW1hZ2VDcmVhdGUobV9zaXplLndpZHRoKCks
IG1fc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fc2l6ZS53aWR0aCgpICogNCwgY29sb3JTcGFjZS5n
ZXQoKSwgYml0bWFwSW5mbyhtX2ZsYWdzKSwgZGF0YVByb3ZpZGVyLCAwLCBmYWxzZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIEludFNpemUgc2l6ZUluUGl4ZWxzID0gdGhpcy0+
c2l6ZUluUGl4ZWxzKCk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0Ys
IENHSW1hZ2VDcmVhdGUoc2l6ZUluUGl4ZWxzLndpZHRoKCksIHNpemVJblBpeGVscy5oZWlnaHQo
KSwgOCwgMzIsIHNpemVJblBpeGVscy53aWR0aCgpICogNCwgY29sb3JTcGFjZS5nZXQoKSwgYml0
bWFwSW5mbyhtX2ZsYWdzKSwgZGF0YVByb3ZpZGVyLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50
ZW50RGVmYXVsdCkpOwogICAgIHJldHVybiBpbWFnZTsKIH0KIApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCShyZXZpc2lvbiA5
MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lkIFBsdWdpblByb3h5Ojpn
ZW9tZXRyeURpZENoYW5nZShjb25zCiAKICAgICBib29sIGRpZFVwZGF0ZUJhY2tpbmdTdG9yZSA9
IGZhbHNlOwogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKLSAgICAgICAgbV9iYWNraW5nU3Rv
cmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShmcmFtZVJlY3Quc2l6ZSgpLCBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlKGZyYW1lUmVjdC5zaXplKCksIDEsIFNoYXJlYWJsZUJpdG1hcDo6U3Vw
cG9ydHNBbHBoYSk7CiAgICAgICAgIGRpZFVwZGF0ZUJhY2tpbmdTdG9yZSA9IHRydWU7CiAgICAg
fSBlbHNlIGlmIChmcmFtZVJlY3Quc2l6ZSgpICE9IG1fYmFja2luZ1N0b3JlLT5zaXplKCkpIHsK
ICAgICAgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgYWxyZWFkeSBleGlzdHMsIGp1c3QgcmVzaXpl
IGl0LgpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgUGx1Z2luUHJveHk6Omdlb21ldHJ5RGlkQ2hh
bmdlKGNvbnMKIAogICAgIGlmIChkaWRVcGRhdGVCYWNraW5nU3RvcmUpIHsKICAgICAgICAgLy8g
Q3JlYXRlIGEgbmV3IHBsdWctaW4gYmFja2luZyBzdG9yZS4KLSAgICAgICAgbV9wbHVnaW5CYWNr
aW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShmcmFtZVJlY3Quc2l6
ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgICAgICBtX3BsdWdpbkJh
Y2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGZyYW1lUmVjdC5z
aXplKCksIDEsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CiAgICAgICAgIGlmICgh
bV9wbHVnaW5CYWNraW5nU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05ldHNjYXBlUGx1Z2luLmNwcAkocmV2aXNpb24gOTAxMzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NDAsNyArNTQwLDcgQEAgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IE5ldHNj
YXBlUGx1ZwogCiAgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKICAgICAKLSAgICBSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZSht
X2ZyYW1lUmVjdC5zaXplKCksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVT
aGFyZWFibGUobV9mcmFtZVJlY3Quc2l6ZSgpLCAxLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRz
QWxwaGEpOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBiaXRtYXAtPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogCiAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1tX2ZyYW1l
UmVjdC54KCksIC1tX2ZyYW1lUmVjdC55KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
Y3BwCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Myw3ICs0
NzMsNyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNlbmRMYXllcnNUb1VJUHJvCiAKICAgICAg
ICAgICAgIFdlYkxheWVyVXBkYXRlSW5mbyBjaHVuayhlbmNsb3NpbmdVcGRhdGVSZWN0KTsKICAg
ICAgICAgICAgIGNodW5rLmxheWVySUQgPSB1aW50MzJfdChsYXllci0+aWQoKSk7Ci0gICAgICAg
ICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZVNoYXJlYWJsZShjaHVuay5yZWN0LnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0
c0FscGhhKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGNodW5rLnJlY3Quc2l6ZSgpLCAxLCBTaGFy
ZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwogICAgICAgICAgICAgaWYgKCFiaXRtYXApCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRN
YWMubW0JKHJldmlzaW9uIDkwMTMxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBjb252ZXJ0SW1hZ2VUb0JpdG1hcChOU0ltYWdlICppbWFnZSkKIHsKLSAgICBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShJbnRTaXplKFtpbWFnZSBzaXplXSksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNB
bHBoYSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShbaW1hZ2Ugc2l6ZV0pLCAxLCBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEpOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CiAKICAgICBSZXRh
aW5QdHI8TlNHcmFwaGljc0NvbnRleHQ+IHNhdmVkQ29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4
dCBjdXJyZW50Q29udGV4dF07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJEcmFnQ2xpZW50UXQuY3BwCShy
ZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlCiAgICAgUVBpeG1hcCBw
KFFTaXplKDEsIDEpKTsKICAgICBpZiAocGl4bWFwKQogICAgICAgICBwID0gKnBpeG1hcDsKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZVNoYXJlYWJsZShJbnRTaXplKHAuc2l6ZSgpKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0Fs
cGhhKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKHAuc2l6ZSgpKSwgMSwgU2hhcmVhYmxlQml0bWFw
OjpTdXBwb3J0c0FscGhhKTsKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0Nv
bnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogCiAgICAgZ3JhcGhpY3ND
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BpeG1hcCgwLCAwLCBwKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC93aW4vV2ViUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gOTAxMzEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzZXRV
cFBsYXRmb3JtRGF0YShjb24KICAgICBpbnQgYmFja2luZ1N0b3JlV2lkdGggPSBtYXgocGFnZUNv
b3JkaW5hdGVzLndpZHRoKCkgLSBtX3BvcHVwQ2xpZW50LT5jbGllbnRJbnNldExlZnQoKSAtIG1f
cG9wdXBDbGllbnQtPmNsaWVudEluc2V0UmlnaHQoKSwgcG9wdXBXaWR0aCk7CiAKICAgICBJbnRT
aXplIGJhY2tpbmdTdG9yZVNpemUoYmFja2luZ1N0b3JlV2lkdGgsIChpdGVtQ291bnQgKiBkYXRh
Lm1faXRlbUhlaWdodCkpOwotICAgIGRhdGEubV9ub3RTZWxlY3RlZEJhY2tpbmdTdG9yZSA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9yZVNpemUsIFNoYXJlYWJs
ZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Ci0gICAgZGF0YS5tX3NlbGVjdGVkQmFja2luZ1N0b3Jl
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwgU2hh
cmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBkYXRhLm1fbm90U2VsZWN0ZWRCYWNr
aW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShiYWNraW5nU3RvcmVT
aXplLCAxLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIGRhdGEubV9zZWxl
Y3RlZEJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tp
bmdTdG9yZVNpemUsIDEsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CiAKICAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0PiBub3RTZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQgPSBk
YXRhLm1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmUtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwog
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IHNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dCA9
IGRhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmNwcAkocmV2aXNpb24gOTAxMzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE3LDcg
KzYxNyw3IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaXNwbGF5KFVwZGF0ZUluZm8KICAgICBJ
bnRSZWN0IGJvdW5kcyA9IG1fZGlydHlSZWdpb24uYm91bmRzKCk7CiAgICAgQVNTRVJUKG1fd2Vi
UGFnZS0+Ym91bmRzKCkuY29udGFpbnMoYm91bmRzKSk7CiAKLSAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShib3VuZHMu
c2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJv
dW5kcy5zaXplKCksIG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3IoKSwgU2hhcmVhYmxl
Qml0bWFwOjpTdXBwb3J0c0FscGhhKTsKICAgICBpZiAoIWJpdG1hcCkKICAgICAgICAgcmV0dXJu
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkwMTMxKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDcgKzE3Niw3IEBAIGJvb2wgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IKICAg
ICBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS0+Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFu
Z2xlcyh0ZXh0UmVjdHMpOwogCiAgICAgLy8gQ3JlYXRlIGEgYmFja2luZyBzdG9yZSBhbmQgcGFp
bnQgdGhlIGZpbmQgaW5kaWNhdG9yIHRleHQgaW50byBpdC4KLSAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBmaW5kSW5kaWNhdG9yVGV4dEJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKHNlbGVjdGlvblJlY3Quc2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1
cHBvcnRzQWxwaGEpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGZpbmRJbmRpY2F0b3JU
ZXh0QmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoc2VsZWN0
aW9uUmVjdC5zaXplKCksIG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3IoKSwgU2hhcmVh
YmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKICAgICBpZiAoIWZpbmRJbmRpY2F0b3JUZXh0QmFj
a2luZ1N0b3JlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3Bw
CShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9U
aWxlZERyYXdpbmdBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZv
aWQgVGlsZWREcmF3aW5nQXJlYTo6dXBkYXRlVGlsZShpbnQgdGkKIAogICAgIFVwZGF0ZUluZm8g
dXBkYXRlSW5mbzsKICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBkaXJ0eVJlY3Q7
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVTaGFyZWFibGUoZGlydHlSZWN0LnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0
c0FscGhhKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShkaXJ0eVJlY3Quc2l6ZSgpLCAxLCBTaGFyZWFibGVCaXRt
YXA6OlN1cHBvcnRzQWxwaGEpOwogICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKHVwZGF0ZUluZm8u
Yml0bWFwSGFuZGxlKTsKICAgICBwYWludEludG9CaXRtYXAoYml0bWFwLmdldCgpLCBkaXJ0eVJl
Y3QsIHNjYWxlKTsKIApAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6
dGFrZVNuYXBzaG90KGNvbnMKIAogICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKICAgICB1cGRh
dGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSB0aWxlUmVjdDsKLSAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZSh0aWxlUmVj
dC5zaXplKCksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUo
dGlsZVJlY3Quc2l6ZSgpLCAxLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwogICAg
IGJpdG1hcC0+Y3JlYXRlSGFuZGxlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKIAogICAgIHBh
aW50SW50b0JpdG1hcChiaXRtYXAuZ2V0KCksIHRpbGVSZWN0LCB0YXJnZXRTY2FsZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99408</attachid>
            <date>2011-06-30 18:09:10 -0700</date>
            <delta_ts>2011-06-30 18:21:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63766-20110630180909.patch</filename>
            <type>text/plain</type>
            <size>14805</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMTg4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTEtMDYtMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXZWJLaXQyXSBDb25zaWRlciBzY2FsZSBmYWN0b3Igd2hlbiBhbGxv
Y2F0aW5nIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzNzY2CisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBj
b25zaWRlcmluZyBzY2FsZSBmYWN0b3IuIEl0IGNvbnNpZGVycworICAgICAgICBzY2FsZSBmYWN0
b3IgZm9yIHRoZSBwcmltYXJ5IGJhY2tpbmcgc3RvcmUsIG5vdCBncmFwaGljcyBsYXllcnMsCisg
ICAgICAgIGFuZCBmb3IgQ0cgb25seS4KKworICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6cGFpbnRJbWFnZSk6IEFkZGVkIGEgc2NhbGUgZmFj
dG9yIGFyZ3VtZW50LgorICAgICAgICAoV2ViS2l0OjpwYWludEJpdG1hcENvbnRleHQpOiBQYXNz
IDEgZm9yIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKiBQbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5o
OiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAu
aDogQWRkZWQgYW4gb3ZlcmxvYWQgb2YgcGFpbnQgdGhhdCBjYW4gaGFuZGxlCisgICAgICAgIGEg
c2NhbGUgZmFjdG9yLgorCisgICAgICAgICogU2hhcmVkL1VwZGF0ZUluZm8uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpVcGRhdGVJbmZvOjplbmNvZGUpOiBFbmNvZGUgc2NhbGUgZmFjdG9yLgorICAg
ICAgICAoV2ViS2l0OjpVcGRhdGVJbmZvOjpkZWNvZGUpOiBEZWNvZGUgc2NhbGUgZmFjdG9yLgor
ICAgICAgICAqIFNoYXJlZC9VcGRhdGVJbmZvLmg6IEFkZGVkIHNjYWxlIGZhY3Rvci4KKworICAg
ICAgICAqIFNoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6cGFpbnQpOiBBZGRlZCB0aGUgb3ZlcmxvYWQgdGhhdCBjYW4gaGFu
ZGxlCisgICAgICAgIGEgc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogVUlQcm9jZXNzL0JhY2tp
bmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6Y3JlYXRlKTogVGFr
ZSBhIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3JlOjpCYWNraW5n
U3RvcmUpOiBTdG9yZSB0aGUgc2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViS2l0OjpCYWNraW5n
U3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKTogQ29uc2lkZXIgdGhlIHNjYWxlIGZhY3RvcgorICAg
ICAgICB3aGVuIGFzc2VydGluZyB0aGUgc2l6ZSBpcyBjb3JyZWN0LgorCisgICAgICAgICogVUlQ
cm9jZXNzL0JhY2tpbmdTdG9yZS5oOiBBZGQgYSBzY2FsZSBmYWN0b3IuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3
aW5nQXJlYVByb3h5SW1wbDo6ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOiBDaGVjayB0aGUK
KyAgICAgICAgc2NhbGUgZmFjdG9yIHRvbyB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gcmV1c2Ug
YSBiYWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6
aW5jb3Jwb3JhdGVVcGRhdGUpOiBQYXNzIGluIHRoZSBzY2FsZQorICAgICAgICBmYWN0b3Igd2hl
biBjcmVhdGluZyBhIGJhY2tpbmcgc3RvcmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0Jh
Y2tpbmdTdG9yZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3JlOjppbmNvcnBv
cmF0ZVVwZGF0ZSk6IFRha2UgdGhlIHNjYWxlIGZhY3RvciBpbnRvCisgICAgICAgIGFjY291bnQg
d2hlbiBwYWludGluZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNlbmREaWRVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSk6IFB1dCB0aGUKKyAgICAgICAgc2NhbGUgZmFjdG9yIGludG8g
dGhlIFVwZGF0ZUluZm8uCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhSW1wbDo6ZGlzcGxheSk6IFRha2UgdGhlIHNjYWxlIGZhY3RvciBpbnRvIGFjY291bnQK
KyAgICAgICAgd2hlbiBhbGxvY2F0aW5nIHRoZSBiaXRtYXAgYW5kIGNyZWF0aW5nIGEgZ3JhcGhp
Y3MgY29udGV4dCBmb3IgaXQuCisKIDIwMTEtMDYtMzAgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggdGhlIFdpbmRvd3MgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiA5MDEzMSkKKysrIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMjggKzMwLDI4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIHBhaW50SW1h
Z2UoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHSW1hZ2VSZWYgaW1hZ2UsIENHUG9pbnQgZGVzdGlu
YXRpb24sIENHUmVjdCBzb3VyY2UpCit2b2lkIHBhaW50SW1hZ2UoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIENHSW1hZ2VSZWYgaW1hZ2UsIENHRmxvYXQgc2NhbGVGYWN0b3IsIENHUG9pbnQgZGVzdGlu
YXRpb24sIENHUmVjdCBzb3VyY2UpCiB7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0
KTsKIAogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0TWFrZShkZXN0aW5h
dGlvbi54LCBkZXN0aW5hdGlvbi55LCBzb3VyY2Uuc2l6ZS53aWR0aCwgc291cmNlLnNpemUuaGVp
Z2h0KSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogCi0gICAgc2l6
ZV90IGltYWdlSGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Ci0gICAgc2l6ZV90IGlt
YWdlV2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOworICAgIENHRmxvYXQgaW1hZ2VIZWln
aHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAvIHNjYWxlRmFjdG9yOworICAgIENHRmxvYXQg
aW1hZ2VXaWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgLyBzY2FsZUZhY3RvcjsKIAogICAg
IENHRmxvYXQgZGVzdFggPSBkZXN0aW5hdGlvbi54IC0gc291cmNlLm9yaWdpbi54OwotICAgIENH
RmxvYXQgZGVzdFkgPSAtc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oaW1hZ2VIZWlnaHQpIC0gZGVzdGlu
YXRpb24ueSArIHNvdXJjZS5vcmlnaW4ueTsKKyAgICBDR0Zsb2F0IGRlc3RZID0gLWltYWdlSGVp
Z2h0IC0gZGVzdGluYXRpb24ueSArIHNvdXJjZS5vcmlnaW4ueTsKIAogICAgIENHQ29udGV4dERy
YXdJbWFnZShjb250ZXh0LCBDR1JlY3RNYWtlKGRlc3RYLCBkZXN0WSwgaW1hZ2VXaWR0aCwgaW1h
Z2VIZWlnaHQpLCBpbWFnZSk7CisKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OwogfQogCiB2b2lkIHBhaW50Qml0bWFwQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dD
b250ZXh0UmVmIGJpdG1hcENvbnRleHQsIENHUG9pbnQgZGVzdGluYXRpb24sIENHUmVjdCBzb3Vy
Y2UpCiB7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKLSAgICBwYWludEltYWdlKGNvbnRl
eHQsIGltYWdlLmdldCgpLCBkZXN0aW5hdGlvbiwgc291cmNlKTsKKyAgICBwYWludEltYWdlKGNv
bnRleHQsIGltYWdlLmdldCgpLCAxLCBkZXN0aW5hdGlvbiwgc291cmNlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2NnL0NHVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vY2cvQ0dVdGls
aXRpZXMuaAkocmV2aXNpb24gOTAxMzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9jZy9D
R1V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi12b2lkIHBhaW50SW1hZ2UoQ0dDb250ZXh0UmVmLCBDR0ltYWdlUmVmLCBD
R1BvaW50IGRlc3RpbmF0aW9uLCBDR1JlY3Qgc291cmNlKTsKK3ZvaWQgcGFpbnRJbWFnZShDR0Nv
bnRleHRSZWYsIENHSW1hZ2VSZWYsIENHRmxvYXQgc2NhbGVGYWN0b3IsIENHUG9pbnQgZGVzdGlu
YXRpb24sIENHUmVjdCBzb3VyY2UpOwogdm9pZCBwYWludEJpdG1hcENvbnRleHQoQ0dDb250ZXh0
UmVmLCBDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCwgQ0dQb2ludCBkZXN0aW5hdGlvbiwgQ0dS
ZWN0IHNvdXJjZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAkocmV2aXNpb24gOTAxMzEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsxMDMs
OCBAQCBwdWJsaWM6CiAgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogCiAgICAgLy8gUGFpbnQgdGhlIGJhY2tpbmcgc3RvcmUg
aW50byB0aGUgZ2l2ZW4gY29udGV4dC4KLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkc3RQb2ludCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc3JjUmVjdCk7CisgICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNvdXJjZSk7CisgICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmLCBmbG9hdCBzY2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3Rp
bmF0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2UpOwogCiAgICAgYm9vbCBpc0Jh
Y2tlZEJ5U2hhcmVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRNZW1vcnk7IH0KIApA
QCAtMTU4LDYgKzE1OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBJZiB0aGUgc2hhcmVhYmxlIGJp
dG1hcCBpcyBiYWNrZWQgYnkgZmFzdE1hbGxvY2VkIG1lbW9yeSwgdGhpcyBwb2ludHMgdG8gdGhl
IGRhdGEuCiAgICAgdm9pZCogbV9kYXRhOworCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIG11dGFi
bGUgT3duUHRyPEhEQz4gbV93aW5kb3dzQ29udGV4dDsKICAgICBtdXRhYmxlIE93blB0cjxIQklU
TUFQPiBtX3dpbmRvd3NCaXRtYXA7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRl
SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8u
Y3BwCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IHZvaWQgVXBkYXRlSW5mbzo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
cikgY29uc3QKIHsKICAgICBlbmNvZGVyLT5lbmNvZGUodmlld1NpemUpOworICAgIGVuY29kZXIt
PmVuY29kZShzY2FsZUZhY3Rvcik7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHNjcm9sbFJlY3QpOwog
ICAgIGVuY29kZXItPmVuY29kZShzY3JvbGxPZmZzZXQpOwogICAgIGVuY29kZXItPmVuY29kZSh1
cGRhdGVSZWN0Qm91bmRzKTsKQEAgLTQ0LDYgKzQ1LDggQEAgYm9vbCBVcGRhdGVJbmZvOjpkZWNv
ZGUoQ29yZUlQQzo6QXJndW1lbgogewogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC52
aWV3U2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShyZXN1bHQuc2NhbGVGYWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUocmVzdWx0LnNjcm9sbFJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LnNjcm9sbE9mZnNldCkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmgJKHJldmlzaW9uIDkwMTMxKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgd2ViIHZpZXcuCiAgICAgV2ViQ29y
ZTo6SW50U2l6ZSB2aWV3U2l6ZTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvcjsKIAogICAgIC8vIFRo
ZSByZWN0IGFuZCBkZWx0YSB0byBiZSBzY3JvbGxlZC4KICAgICBXZWJDb3JlOjpJbnRSZWN0IHNj
cm9sbFJlY3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFw
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZy9TaGFyZWFibGVC
aXRtYXBDRy5jcHAJKHJldmlzaW9uIDkwMTMxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2Nn
L1NoYXJlYWJsZUJpdG1hcENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIsMTQgQEAg
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdAogICAgIHJldHVybiBhZG9w
dFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKIH0KIAotdm9p
ZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQordm9p
ZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCiB7
Ci0gICAgcGFpbnRJbWFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtYWtlQ0dJbWFnZUNv
cHkoKS5nZXQoKSwgZHN0UG9pbnQsIHNyY1JlY3QpOworICAgIHBhaW50SW1hZ2UoY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSwgbWFrZUNHSW1hZ2VDb3B5KCkuZ2V0KCksIDEsIGRlc3RpbmF0aW9u
LCBzb3VyY2UpOworfQorCit2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBzY2FsZUZhY3RvciwgY29uc3QgSW50UG9pbnQm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCit7CisgICAgcGFpbnRJbWFnZShj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtYWtlQ0dJbWFnZUNvcHkoKS5nZXQoKSwgc2NhbGVG
YWN0b3IsIGRlc3RpbmF0aW9uLCBzb3VyY2UpOwogfQogCiAjaWYgIVBMQVRGT1JNKFdJTikKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiA5
MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1QYXNzT3duUHRyPEJhY2tpbmdTdG9yZT4gQmFja2luZ1N0
b3JlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJv
eHkpCitQYXNzT3duUHRyPEJhY2tpbmdTdG9yZT4gQmFja2luZ1N0b3JlOjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgZmxvYXQgc2NhbGVGYWN0b3IsIFdlYlBhZ2VQcm94eSogd2ViUGFnZVBy
b3h5KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmFja2luZ1N0b3JlKHNpemUsIHdlYlBh
Z2VQcm94eSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmFja2luZ1N0b3JlKHNpemUsIHNj
YWxlRmFjdG9yLCB3ZWJQYWdlUHJveHkpKTsKIH0KIAotQmFja2luZ1N0b3JlOjpCYWNraW5nU3Rv
cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCitCYWNr
aW5nU3RvcmU6OkJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBzY2FsZUZh
Y3RvciwgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCiAgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCiAgICAgLCBtX3dlYlBhZ2VQcm94eSh3ZWJQ
YWdlUHJveHkpCiB7CiAgICAgQVNTRVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKQEAgLTU2LDcgKzU3
LDEyIEBAIHZvaWQgQmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShjb24KICAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRh
dGVJbmZvLmJpdG1hcEhhbmRsZSk7CiAgICAgaWYgKCFiaXRtYXApCiAgICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoYml0bWFwLT5zaXplKCkgPT0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRz
LnNpemUoKSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgSW50U2l6ZSB1cGRhdGVTaXpl
ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLnNpemUoKTsKKyAgICB1cGRhdGVTaXplLnNj
YWxlKG1fc2NhbGVGYWN0b3IpOworICAgIEFTU0VSVChiaXRtYXAtPnNpemUoKSA9PSB1cGRhdGVT
aXplKTsKKyNlbmRpZgogICAgIAogICAgIGluY29ycG9yYXRlVXBkYXRlKGJpdG1hcC5nZXQoKSwg
dXBkYXRlSW5mbyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQmFja2luZ1N0
b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0JhY2tpbmdTdG9y
ZS5oCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9CYWNraW5n
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDExIEBAIGNsYXNzIEJhY2tpbmdT
dG9yZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja2luZ1N0b3JlKTsKIAogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBXZWJQYWdlUHJveHkqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxCYWNr
aW5nU3RvcmU+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxvYXQgc2NhbGVGYWN0
b3IsIFdlYlBhZ2VQcm94eSopOwogICAgIH5CYWNraW5nU3RvcmUoKTsKIAogICAgIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBmbG9h
dCBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVGYWN0b3I7IH0KIAogI2lmIFBM
QVRGT1JNKE1BQykKICAgICB0eXBlZGVmIENHQ29udGV4dFJlZiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDsKQEAgLTc5LDEyICs4MCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNvcnBvcmF0ZVVw
ZGF0ZShjb25zdCBVcGRhdGVJbmZvJik7CiAKIHByaXZhdGU6Ci0gICAgQmFja2luZ1N0b3JlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJQYWdlUHJveHkqKTsKKyAgICBCYWNraW5nU3RvcmUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0IHNjYWxlRmFjdG9yLCBXZWJQYWdlUHJveHkq
KTsKIAogICAgIHZvaWQgaW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxlQml0bWFwKiwgY29uc3Qg
VXBkYXRlSW5mbyYpOwogICAgIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CiAKICAgICBX
ZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKyAgICBmbG9hdCBtX3NjYWxlRmFjdG9yOwogICAgIFdl
YlBhZ2VQcm94eSogbV93ZWJQYWdlUHJveHk7CiAKICNpZiBQTEFURk9STShNQUMpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAJ
KHJldmlzaW9uIDkwMTMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHlJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgRHJh
d2luZ0FyZWFQcm94eUltcGw6OmRpZFVwZGF0ZUJhY2sKICNlbmRpZgogCiAgICAgLy8gSWYgd2Ug
aGF2ZSBhIGJhY2tpbmcgc3RvcmUgdGhlIHJpZ2h0IHNpemUsIHJldXNlIGl0LgotICAgIGlmICht
X2JhY2tpbmdTdG9yZSAmJiBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpICE9IHVwZGF0ZUluZm8udmll
d1NpemUpCisgICAgaWYgKG1fYmFja2luZ1N0b3JlICYmIChtX2JhY2tpbmdTdG9yZS0+c2l6ZSgp
ICE9IHVwZGF0ZUluZm8udmlld1NpemUgfHwgbV9iYWNraW5nU3RvcmUtPnNjYWxlRmFjdG9yKCkg
IT0gdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVs
bHB0cjsKICAgICBpbmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJbmZvKTsKIH0KQEAgLTI0Miw3ICsy
NDIsNyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjppbmNvcnBvcmF0ZVVwCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmICghbV9iYWNraW5nU3RvcmUpCi0gICAgICAgIG1fYmFja2luZ1N0
b3JlID0gQmFja2luZ1N0b3JlOjpjcmVhdGUodXBkYXRlSW5mby52aWV3U2l6ZSwgbV93ZWJQYWdl
UHJveHkpOworICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IEJhY2tpbmdTdG9yZTo6Y3JlYXRlKHVw
ZGF0ZUluZm8udmlld1NpemUsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IsIG1fd2ViUGFnZVByb3h5
KTsKIAogICAgIG1fYmFja2luZ1N0b3JlLT5pbmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJbmZvKTsK
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9CYWNraW5nU3RvcmVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9CYWNraW5nU3RvcmVN
YWMubW0JKHJldmlzaW9uIDkwMTMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9C
YWNraW5nU3RvcmVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lk
IEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhCiAgICAgICAgIEludFJlY3Qgc3Jj
UmVjdCA9IHVwZGF0ZVJlY3Q7CiAgICAgICAgIHNyY1JlY3QubW92ZSgtdXBkYXRlUmVjdExvY2F0
aW9uLngoKSwgLXVwZGF0ZVJlY3RMb2NhdGlvbi55KCkpOwogCi0gICAgICAgIGJpdG1hcC0+cGFp
bnQoZ3JhcGhpY3NDb250ZXh0LCB1cGRhdGVSZWN0LmxvY2F0aW9uKCksIHNyY1JlY3QpOworICAg
ICAgICBiaXRtYXAtPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgdXBkYXRlSW5mby5zY2FsZUZhY3Rv
ciwgdXBkYXRlUmVjdC5sb2NhdGlvbigpLCBzcmNSZWN0KTsKICAgICB9CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuY3BwCShyZXZpc2lvbiA5MDEzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNiArMzU3LDcg
QEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNlbmREaWRVcGRhdGVCYWNraQogCiAgICAgaWYgKG1f
aXNQYWludGluZ1N1c3BlbmRlZCB8fCBtX2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgdXBkYXRl
SW5mby52aWV3U2l6ZSA9IG1fd2ViUGFnZS0+c2l6ZSgpOworICAgICAgICB1cGRhdGVJbmZvLnNj
YWxlRmFjdG9yID0gbV93ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3RvcigpOwogCiAgICAgICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgICAgIGxheWVyVHJlZUNvbnRleHQgPSBt
X2xheWVyVHJlZUhvc3QtPmxheWVyVHJlZUNvbnRleHQoKTsKQEAgLTQ2MSw5ICs0NjIsMTAgQEAg
dm9pZCBEcmF3aW5nQXJlYUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbQogICAgIH0KIAogICAgIFVw
ZGF0ZUluZm8gdXBkYXRlSW5mbzsKLSAgICBpZiAobV9pc1BhaW50aW5nU3VzcGVuZGVkKQorICAg
IGlmIChtX2lzUGFpbnRpbmdTdXNwZW5kZWQpIHsKICAgICAgICAgdXBkYXRlSW5mby52aWV3U2l6
ZSA9IG1fd2ViUGFnZS0+c2l6ZSgpOwotICAgIGVsc2UKKyAgICAgICAgdXBkYXRlSW5mby5zY2Fs
ZUZhY3RvciA9IG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3IoKTsKKyAgICB9IGVsc2UK
ICAgICAgICAgZGlzcGxheSh1cGRhdGVJbmZvKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKQEAgLTYxMywxMSArNjE1LDE0IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaXNw
bGF5KFVwZGF0ZUluZm8KICAgICAgICAgcmV0dXJuOwogCiAgICAgdXBkYXRlSW5mby52aWV3U2l6
ZSA9IG1fd2ViUGFnZS0+c2l6ZSgpOworICAgIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IgPSBtX3dl
YlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFjdG9yKCk7CiAKICAgICBJbnRSZWN0IGJvdW5kcyA9IG1f
ZGlydHlSZWdpb24uYm91bmRzKCk7CiAgICAgQVNTRVJUKG1fd2ViUGFnZS0+Ym91bmRzKCkuY29u
dGFpbnMoYm91bmRzKSk7CiAKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShib3VuZHMuc2l6ZSgpLCBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIEludFNpemUgYml0bWFwU2l6ZSA9IGJvdW5kcy5z
aXplKCk7CisgICAgYml0bWFwU2l6ZS5zY2FsZShtX3dlYlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFj
dG9yKCkpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJpdG1hcFNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9y
dHNBbHBoYSk7CiAgICAgaWYgKCFiaXRtYXApCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM5LDYg
KzY0NCw3IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaXNwbGF5KFVwZGF0ZUluZm8KICAgICBt
X3Njcm9sbE9mZnNldCA9IEludFNpemUoKTsKIAogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+
IGdyYXBoaWNzQ29udGV4dCA9IGNyZWF0ZUdyYXBoaWNzQ29udGV4dChiaXRtYXAuZ2V0KCkpOwor
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKG1fd2ViUGFnZS0+dXNlclNwYWNl
U2NhbGVGYWN0b3IoKSwgbV93ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3RvcigpKSk7CiAKICAg
ICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBib3VuZHM7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99412</attachid>
            <date>2011-06-30 18:21:39 -0700</date>
            <delta_ts>2011-06-30 20:06:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63766-20110630182137.patch</filename>
            <type>text/plain</type>
            <size>14805</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMTg5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTEtMDYtMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtXZWJLaXQyXSBDb25zaWRlciBzY2FsZSBmYWN0b3Igd2hlbiBhbGxv
Y2F0aW5nIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzNzY2CisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBj
b25zaWRlcmluZyBzY2FsZSBmYWN0b3IuIEl0IGNvbnNpZGVycworICAgICAgICBzY2FsZSBmYWN0
b3IgZm9yIHRoZSBwcmltYXJ5IGJhY2tpbmcgc3RvcmUsIG5vdCBncmFwaGljcyBsYXllcnMsCisg
ICAgICAgIGFuZCBmb3IgQ0cgb25seS4KKworICAgICAgICAqIFBsYXRmb3JtL2NnL0NHVXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6cGFpbnRJbWFnZSk6IEFkZGVkIGEgc2NhbGUgZmFj
dG9yIGFyZ3VtZW50LgorICAgICAgICAoV2ViS2l0OjpwYWludEJpdG1hcENvbnRleHQpOiBQYXNz
IDEgZm9yIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKiBQbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5o
OiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAu
aDogQWRkZWQgYW4gb3ZlcmxvYWQgb2YgcGFpbnQgdGhhdCBjYW4gaGFuZGxlCisgICAgICAgIGEg
c2NhbGUgZmFjdG9yLgorCisgICAgICAgICogU2hhcmVkL1VwZGF0ZUluZm8uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpVcGRhdGVJbmZvOjplbmNvZGUpOiBFbmNvZGUgc2NhbGUgZmFjdG9yLgorICAg
ICAgICAoV2ViS2l0OjpVcGRhdGVJbmZvOjpkZWNvZGUpOiBEZWNvZGUgc2NhbGUgZmFjdG9yLgor
ICAgICAgICAqIFNoYXJlZC9VcGRhdGVJbmZvLmg6IEFkZGVkIHNjYWxlIGZhY3Rvci4KKworICAg
ICAgICAqIFNoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6cGFpbnQpOiBBZGRlZCB0aGUgb3ZlcmxvYWQgdGhhdCBjYW4gaGFu
ZGxlCisgICAgICAgIGEgc2NhbGUgZmFjdG9yLgorCisgICAgICAgICogVUlQcm9jZXNzL0JhY2tp
bmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6Y3JlYXRlKTogVGFr
ZSBhIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3JlOjpCYWNraW5n
U3RvcmUpOiBTdG9yZSB0aGUgc2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViS2l0OjpCYWNraW5n
U3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKTogQ29uc2lkZXIgdGhlIHNjYWxlIGZhY3RvcgorICAg
ICAgICB3aGVuIGFzc2VydGluZyB0aGUgc2l6ZSBpcyBjb3JyZWN0LgorCisgICAgICAgICogVUlQ
cm9jZXNzL0JhY2tpbmdTdG9yZS5oOiBBZGQgYSBzY2FsZSBmYWN0b3IuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3
aW5nQXJlYVByb3h5SW1wbDo6ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOiBDaGVjayB0aGUK
KyAgICAgICAgc2NhbGUgZmFjdG9yIHRvbyB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gcmV1c2Ug
YSBiYWNraW5nIHN0b3JlLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6
aW5jb3Jwb3JhdGVVcGRhdGUpOiBQYXNzIGluIHRoZSBzY2FsZQorICAgICAgICBmYWN0b3Igd2hl
biBjcmVhdGluZyBhIGJhY2tpbmcgc3RvcmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0Jh
Y2tpbmdTdG9yZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3JlOjppbmNvcnBv
cmF0ZVVwZGF0ZSk6IFRha2UgdGhlIHNjYWxlIGZhY3RvciBpbnRvCisgICAgICAgIGFjY291bnQg
d2hlbiBwYWludGluZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNlbmREaWRVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSk6IFB1dCB0aGUKKyAgICAgICAgc2NhbGUgZmFjdG9yIGludG8g
dGhlIFVwZGF0ZUluZm8uCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhSW1wbDo6ZGlzcGxheSk6IFRha2UgdGhlIHNjYWxlIGZhY3RvciBpbnRvIGFjY291bnQK
KyAgICAgICAgd2hlbiBhbGxvY2F0aW5nIHRoZSBiaXRtYXAgYW5kIGNyZWF0aW5nIGEgZ3JhcGhp
Y3MgY29udGV4dCBmb3IgaXQuCisKIDIwMTEtMDYtMzAgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggdGhlIFdpbmRvd3MgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9jZy9DR1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vY2cvQ0dVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiA5MDE4OSkKKysrIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2NnL0NHVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMjggKzMwLDI4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIHBhaW50SW1h
Z2UoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHSW1hZ2VSZWYgaW1hZ2UsIENHUG9pbnQgZGVzdGlu
YXRpb24sIENHUmVjdCBzb3VyY2UpCit2b2lkIHBhaW50SW1hZ2UoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIENHSW1hZ2VSZWYgaW1hZ2UsIENHRmxvYXQgc2NhbGVGYWN0b3IsIENHUG9pbnQgZGVzdGlu
YXRpb24sIENHUmVjdCBzb3VyY2UpCiB7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0
KTsKIAogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0TWFrZShkZXN0aW5h
dGlvbi54LCBkZXN0aW5hdGlvbi55LCBzb3VyY2Uuc2l6ZS53aWR0aCwgc291cmNlLnNpemUuaGVp
Z2h0KSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogCi0gICAgc2l6
ZV90IGltYWdlSGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Ci0gICAgc2l6ZV90IGlt
YWdlV2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOworICAgIENHRmxvYXQgaW1hZ2VIZWln
aHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAvIHNjYWxlRmFjdG9yOworICAgIENHRmxvYXQg
aW1hZ2VXaWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgLyBzY2FsZUZhY3RvcjsKIAogICAg
IENHRmxvYXQgZGVzdFggPSBkZXN0aW5hdGlvbi54IC0gc291cmNlLm9yaWdpbi54OwotICAgIENH
RmxvYXQgZGVzdFkgPSAtc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oaW1hZ2VIZWlnaHQpIC0gZGVzdGlu
YXRpb24ueSArIHNvdXJjZS5vcmlnaW4ueTsKKyAgICBDR0Zsb2F0IGRlc3RZID0gLWltYWdlSGVp
Z2h0IC0gZGVzdGluYXRpb24ueSArIHNvdXJjZS5vcmlnaW4ueTsKIAogICAgIENHQ29udGV4dERy
YXdJbWFnZShjb250ZXh0LCBDR1JlY3RNYWtlKGRlc3RYLCBkZXN0WSwgaW1hZ2VXaWR0aCwgaW1h
Z2VIZWlnaHQpLCBpbWFnZSk7CisKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OwogfQogCiB2b2lkIHBhaW50Qml0bWFwQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dD
b250ZXh0UmVmIGJpdG1hcENvbnRleHQsIENHUG9pbnQgZGVzdGluYXRpb24sIENHUmVjdCBzb3Vy
Y2UpCiB7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKLSAgICBwYWludEltYWdlKGNvbnRl
eHQsIGltYWdlLmdldCgpLCBkZXN0aW5hdGlvbiwgc291cmNlKTsKKyAgICBwYWludEltYWdlKGNv
bnRleHQsIGltYWdlLmdldCgpLCAxLCBkZXN0aW5hdGlvbiwgc291cmNlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2NnL0NHVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vY2cvQ0dVdGls
aXRpZXMuaAkocmV2aXNpb24gOTAxODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9jZy9D
R1V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi12b2lkIHBhaW50SW1hZ2UoQ0dDb250ZXh0UmVmLCBDR0ltYWdlUmVmLCBD
R1BvaW50IGRlc3RpbmF0aW9uLCBDR1JlY3Qgc291cmNlKTsKK3ZvaWQgcGFpbnRJbWFnZShDR0Nv
bnRleHRSZWYsIENHSW1hZ2VSZWYsIENHRmxvYXQgc2NhbGVGYWN0b3IsIENHUG9pbnQgZGVzdGlu
YXRpb24sIENHUmVjdCBzb3VyY2UpOwogdm9pZCBwYWludEJpdG1hcENvbnRleHQoQ0dDb250ZXh0
UmVmLCBDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCwgQ0dQb2ludCBkZXN0aW5hdGlvbiwgQ0dS
ZWN0IHNvdXJjZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAkocmV2aXNpb24gOTAxODkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw3ICsxMDMs
OCBAQCBwdWJsaWM6CiAgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogCiAgICAgLy8gUGFpbnQgdGhlIGJhY2tpbmcgc3RvcmUg
aW50byB0aGUgZ2l2ZW4gY29udGV4dC4KLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkc3RQb2ludCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc3JjUmVjdCk7CisgICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNvdXJjZSk7CisgICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmLCBmbG9hdCBzY2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3Rp
bmF0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2UpOwogCiAgICAgYm9vbCBpc0Jh
Y2tlZEJ5U2hhcmVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRNZW1vcnk7IH0KIApA
QCAtMTU4LDYgKzE1OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBJZiB0aGUgc2hhcmVhYmxlIGJp
dG1hcCBpcyBiYWNrZWQgYnkgZmFzdE1hbGxvY2VkIG1lbW9yeSwgdGhpcyBwb2ludHMgdG8gdGhl
IGRhdGEuCiAgICAgdm9pZCogbV9kYXRhOworCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIG11dGFi
bGUgT3duUHRyPEhEQz4gbV93aW5kb3dzQ29udGV4dDsKICAgICBtdXRhYmxlIE93blB0cjxIQklU
TUFQPiBtX3dpbmRvd3NCaXRtYXA7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRl
SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8u
Y3BwCShyZXZpc2lvbiA5MDE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IHZvaWQgVXBkYXRlSW5mbzo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
cikgY29uc3QKIHsKICAgICBlbmNvZGVyLT5lbmNvZGUodmlld1NpemUpOworICAgIGVuY29kZXIt
PmVuY29kZShzY2FsZUZhY3Rvcik7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHNjcm9sbFJlY3QpOwog
ICAgIGVuY29kZXItPmVuY29kZShzY3JvbGxPZmZzZXQpOwogICAgIGVuY29kZXItPmVuY29kZSh1
cGRhdGVSZWN0Qm91bmRzKTsKQEAgLTQ0LDYgKzQ1LDggQEAgYm9vbCBVcGRhdGVJbmZvOjpkZWNv
ZGUoQ29yZUlQQzo6QXJndW1lbgogewogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC52
aWV3U2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShyZXN1bHQuc2NhbGVGYWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUocmVzdWx0LnNjcm9sbFJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LnNjcm9sbE9mZnNldCkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmgJKHJldmlzaW9uIDkwMTg5KQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgd2ViIHZpZXcuCiAgICAgV2ViQ29y
ZTo6SW50U2l6ZSB2aWV3U2l6ZTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvcjsKIAogICAgIC8vIFRo
ZSByZWN0IGFuZCBkZWx0YSB0byBiZSBzY3JvbGxlZC4KICAgICBXZWJDb3JlOjpJbnRSZWN0IHNj
cm9sbFJlY3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFw
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZy9TaGFyZWFibGVC
aXRtYXBDRy5jcHAJKHJldmlzaW9uIDkwMTg5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2Nn
L1NoYXJlYWJsZUJpdG1hcENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIsMTQgQEAg
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdAogICAgIHJldHVybiBhZG9w
dFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKIH0KIAotdm9p
ZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQordm9p
ZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCiB7
Ci0gICAgcGFpbnRJbWFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtYWtlQ0dJbWFnZUNv
cHkoKS5nZXQoKSwgZHN0UG9pbnQsIHNyY1JlY3QpOworICAgIHBhaW50SW1hZ2UoY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSwgbWFrZUNHSW1hZ2VDb3B5KCkuZ2V0KCksIDEsIGRlc3RpbmF0aW9u
LCBzb3VyY2UpOworfQorCit2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBzY2FsZUZhY3RvciwgY29uc3QgSW50UG9pbnQm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCit7CisgICAgcGFpbnRJbWFnZShj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtYWtlQ0dJbWFnZUNvcHkoKS5nZXQoKSwgc2NhbGVG
YWN0b3IsIGRlc3RpbmF0aW9uLCBzb3VyY2UpOwogfQogCiAjaWYgIVBMQVRGT1JNKFdJTikKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiA5
MDE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1QYXNzT3duUHRyPEJhY2tpbmdTdG9yZT4gQmFja2luZ1N0
b3JlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJv
eHkpCitQYXNzT3duUHRyPEJhY2tpbmdTdG9yZT4gQmFja2luZ1N0b3JlOjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgZmxvYXQgc2NhbGVGYWN0b3IsIFdlYlBhZ2VQcm94eSogd2ViUGFnZVBy
b3h5KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmFja2luZ1N0b3JlKHNpemUsIHdlYlBh
Z2VQcm94eSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmFja2luZ1N0b3JlKHNpemUsIHNj
YWxlRmFjdG9yLCB3ZWJQYWdlUHJveHkpKTsKIH0KIAotQmFja2luZ1N0b3JlOjpCYWNraW5nU3Rv
cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCitCYWNr
aW5nU3RvcmU6OkJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCBzY2FsZUZh
Y3RvciwgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCiAgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCiAgICAgLCBtX3dlYlBhZ2VQcm94eSh3ZWJQ
YWdlUHJveHkpCiB7CiAgICAgQVNTRVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKQEAgLTU2LDcgKzU3
LDEyIEBAIHZvaWQgQmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShjb24KICAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRh
dGVJbmZvLmJpdG1hcEhhbmRsZSk7CiAgICAgaWYgKCFiaXRtYXApCiAgICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoYml0bWFwLT5zaXplKCkgPT0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRz
LnNpemUoKSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgSW50U2l6ZSB1cGRhdGVTaXpl
ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLnNpemUoKTsKKyAgICB1cGRhdGVTaXplLnNj
YWxlKG1fc2NhbGVGYWN0b3IpOworICAgIEFTU0VSVChiaXRtYXAtPnNpemUoKSA9PSB1cGRhdGVT
aXplKTsKKyNlbmRpZgogICAgIAogICAgIGluY29ycG9yYXRlVXBkYXRlKGJpdG1hcC5nZXQoKSwg
dXBkYXRlSW5mbyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQmFja2luZ1N0
b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0JhY2tpbmdTdG9y
ZS5oCShyZXZpc2lvbiA5MDE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9CYWNraW5n
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDExIEBAIGNsYXNzIEJhY2tpbmdT
dG9yZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja2luZ1N0b3JlKTsKIAogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBXZWJQYWdlUHJveHkqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxCYWNr
aW5nU3RvcmU+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxvYXQgc2NhbGVGYWN0
b3IsIFdlYlBhZ2VQcm94eSopOwogICAgIH5CYWNraW5nU3RvcmUoKTsKIAogICAgIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBmbG9h
dCBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVGYWN0b3I7IH0KIAogI2lmIFBM
QVRGT1JNKE1BQykKICAgICB0eXBlZGVmIENHQ29udGV4dFJlZiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDsKQEAgLTc5LDEyICs4MCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNvcnBvcmF0ZVVw
ZGF0ZShjb25zdCBVcGRhdGVJbmZvJik7CiAKIHByaXZhdGU6Ci0gICAgQmFja2luZ1N0b3JlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJQYWdlUHJveHkqKTsKKyAgICBCYWNraW5nU3RvcmUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0IHNjYWxlRmFjdG9yLCBXZWJQYWdlUHJveHkq
KTsKIAogICAgIHZvaWQgaW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxlQml0bWFwKiwgY29uc3Qg
VXBkYXRlSW5mbyYpOwogICAgIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CiAKICAgICBX
ZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKyAgICBmbG9hdCBtX3NjYWxlRmFjdG9yOwogICAgIFdl
YlBhZ2VQcm94eSogbV93ZWJQYWdlUHJveHk7CiAKICNpZiBQTEFURk9STShNQUMpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAJ
KHJldmlzaW9uIDkwMTg5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHlJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgRHJh
d2luZ0FyZWFQcm94eUltcGw6OmRpZFVwZGF0ZUJhY2sKICNlbmRpZgogCiAgICAgLy8gSWYgd2Ug
aGF2ZSBhIGJhY2tpbmcgc3RvcmUgdGhlIHJpZ2h0IHNpemUsIHJldXNlIGl0LgotICAgIGlmICht
X2JhY2tpbmdTdG9yZSAmJiBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpICE9IHVwZGF0ZUluZm8udmll
d1NpemUpCisgICAgaWYgKG1fYmFja2luZ1N0b3JlICYmIChtX2JhY2tpbmdTdG9yZS0+c2l6ZSgp
ICE9IHVwZGF0ZUluZm8udmlld1NpemUgfHwgbV9iYWNraW5nU3RvcmUtPnNjYWxlRmFjdG9yKCkg
IT0gdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVs
bHB0cjsKICAgICBpbmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJbmZvKTsKIH0KQEAgLTI0Miw3ICsy
NDIsNyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjppbmNvcnBvcmF0ZVVwCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmICghbV9iYWNraW5nU3RvcmUpCi0gICAgICAgIG1fYmFja2luZ1N0
b3JlID0gQmFja2luZ1N0b3JlOjpjcmVhdGUodXBkYXRlSW5mby52aWV3U2l6ZSwgbV93ZWJQYWdl
UHJveHkpOworICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IEJhY2tpbmdTdG9yZTo6Y3JlYXRlKHVw
ZGF0ZUluZm8udmlld1NpemUsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IsIG1fd2ViUGFnZVByb3h5
KTsKIAogICAgIG1fYmFja2luZ1N0b3JlLT5pbmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJbmZvKTsK
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9CYWNraW5nU3RvcmVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9CYWNraW5nU3RvcmVN
YWMubW0JKHJldmlzaW9uIDkwMTg5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9C
YWNraW5nU3RvcmVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lk
IEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhCiAgICAgICAgIEludFJlY3Qgc3Jj
UmVjdCA9IHVwZGF0ZVJlY3Q7CiAgICAgICAgIHNyY1JlY3QubW92ZSgtdXBkYXRlUmVjdExvY2F0
aW9uLngoKSwgLXVwZGF0ZVJlY3RMb2NhdGlvbi55KCkpOwogCi0gICAgICAgIGJpdG1hcC0+cGFp
bnQoZ3JhcGhpY3NDb250ZXh0LCB1cGRhdGVSZWN0LmxvY2F0aW9uKCksIHNyY1JlY3QpOworICAg
ICAgICBiaXRtYXAtPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgdXBkYXRlSW5mby5zY2FsZUZhY3Rv
ciwgdXBkYXRlUmVjdC5sb2NhdGlvbigpLCBzcmNSZWN0KTsKICAgICB9CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuY3BwCShyZXZpc2lvbiA5MDE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNiArMzU3LDcg
QEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNlbmREaWRVcGRhdGVCYWNraQogCiAgICAgaWYgKG1f
aXNQYWludGluZ1N1c3BlbmRlZCB8fCBtX2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgdXBkYXRl
SW5mby52aWV3U2l6ZSA9IG1fd2ViUGFnZS0+c2l6ZSgpOworICAgICAgICB1cGRhdGVJbmZvLnNj
YWxlRmFjdG9yID0gbV93ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3RvcigpOwogCiAgICAgICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgICAgIGxheWVyVHJlZUNvbnRleHQgPSBt
X2xheWVyVHJlZUhvc3QtPmxheWVyVHJlZUNvbnRleHQoKTsKQEAgLTQ2MSw5ICs0NjIsMTAgQEAg
dm9pZCBEcmF3aW5nQXJlYUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbQogICAgIH0KIAogICAgIFVw
ZGF0ZUluZm8gdXBkYXRlSW5mbzsKLSAgICBpZiAobV9pc1BhaW50aW5nU3VzcGVuZGVkKQorICAg
IGlmIChtX2lzUGFpbnRpbmdTdXNwZW5kZWQpIHsKICAgICAgICAgdXBkYXRlSW5mby52aWV3U2l6
ZSA9IG1fd2ViUGFnZS0+c2l6ZSgpOwotICAgIGVsc2UKKyAgICAgICAgdXBkYXRlSW5mby5zY2Fs
ZUZhY3RvciA9IG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3IoKTsKKyAgICB9IGVsc2UK
ICAgICAgICAgZGlzcGxheSh1cGRhdGVJbmZvKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKQEAgLTYxMywxMSArNjE1LDE0IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaXNw
bGF5KFVwZGF0ZUluZm8KICAgICAgICAgcmV0dXJuOwogCiAgICAgdXBkYXRlSW5mby52aWV3U2l6
ZSA9IG1fd2ViUGFnZS0+c2l6ZSgpOworICAgIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IgPSBtX3dl
YlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFjdG9yKCk7CiAKICAgICBJbnRSZWN0IGJvdW5kcyA9IG1f
ZGlydHlSZWdpb24uYm91bmRzKCk7CiAgICAgQVNTRVJUKG1fd2ViUGFnZS0+Ym91bmRzKCkuY29u
dGFpbnMoYm91bmRzKSk7CiAKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShib3VuZHMuc2l6ZSgpLCBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIEludFNpemUgYml0bWFwU2l6ZSA9IGJvdW5kcy5z
aXplKCk7CisgICAgYml0bWFwU2l6ZS5zY2FsZShtX3dlYlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFj
dG9yKCkpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJpdG1hcFNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9y
dHNBbHBoYSk7CiAgICAgaWYgKCFiaXRtYXApCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM5LDYg
KzY0NCw3IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaXNwbGF5KFVwZGF0ZUluZm8KICAgICBt
X3Njcm9sbE9mZnNldCA9IEludFNpemUoKTsKIAogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+
IGdyYXBoaWNzQ29udGV4dCA9IGNyZWF0ZUdyYXBoaWNzQ29udGV4dChiaXRtYXAuZ2V0KCkpOwor
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKG1fd2ViUGFnZS0+dXNlclNwYWNl
U2NhbGVGYWN0b3IoKSwgbV93ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3RvcigpKSk7CiAKICAg
ICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBib3VuZHM7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>