<?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>82425</bug_id>
          
          <creation_ts>2012-03-27 22:02:32 -0700</creation_ts>
          <short_desc>[chromium] Split off tiled layer constructs for unit tests into a common header</short_desc>
          <delta_ts>2012-03-29 11:19:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>589659</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-27 22:02:32 -0700</bug_when>
    <thetext>[chromium] Split off tiled layer constructs for unit tests into a common header</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589660</commentid>
    <comment_count>1</comment_count>
      <attachid>134218</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-27 22:03:12 -0700</bug_when>
    <thetext>Created attachment 134218
Patch

Since I had this done already for some other failed changes, here&apos;s splitting the tiled layer test stuff off into a common.h so other tests can make use of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590297</commentid>
    <comment_count>2</comment_count>
      <attachid>134218</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-28 12:46:53 -0700</bug_when>
    <thetext>Comment on attachment 134218
Patch

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

I&apos;ll admit that I&apos;m not totally sold on this change since there really aren&apos;t other clients of these classes yet.

If you&apos;re going to move these things to the header so that they can be reused, I think you should push a lot more definitions into the cpp file to make compilation/linking faster and for style reasons.  In particular, all the constructors and destructors here should probably not be inlined.

&gt; Source/WebKit/chromium/tests/CCTiledLayerTestCommon.h:45
&gt; +class FakeTextureAllocator : public WebCore::TextureAllocator {
&gt; +public:
&gt; +    virtual unsigned createTexture(const WebCore::IntSize&amp;, GC3Denum) { return 1; }
&gt; +    virtual void deleteTexture(unsigned, const WebCore::IntSize&amp;, GC3Denum) { }
&gt; +};

Looks like TextureManagerTest also does this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591266</commentid>
    <comment_count>3</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-29 09:56:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 134218 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134218&amp;action=review
&gt; 
&gt; I&apos;ll admit that I&apos;m not totally sold on this change since there really aren&apos;t other clients of these classes yet.

Yeh, though since it&apos;s done already I feel like splitting things out like this will make the bar lower for good unit tests to be written in the future, especially for newer people.

&gt; If you&apos;re going to move these things to the header so that they can be reused, I think you should push a lot more definitions into the cpp file to make compilation/linking faster and for style reasons.  In particular, all the constructors and destructors here should probably not be inlined.

Yes! done. I just left simple getter/setters in the .h file.

&gt; &gt; Source/WebKit/chromium/tests/CCTiledLayerTestCommon.h:45
&gt; &gt; +class FakeTextureAllocator : public WebCore::TextureAllocator {
&gt; &gt; +public:
&gt; &gt; +    virtual unsigned createTexture(const WebCore::IntSize&amp;, GC3Denum) { return 1; }
&gt; &gt; +    virtual void deleteTexture(unsigned, const WebCore::IntSize&amp;, GC3Denum) { }
&gt; &gt; +};
&gt; 
&gt; Looks like TextureManagerTest also does this?

Thanks :) I grepped for Tile things but not Texture things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591267</commentid>
    <comment_count>4</comment_count>
      <attachid>134605</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-29 09:57:16 -0700</bug_when>
    <thetext>Created attachment 134605
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591285</commentid>
    <comment_count>5</comment_count>
      <attachid>134605</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-29 10:22:35 -0700</bug_when>
    <thetext>Comment on attachment 134605
Patch

Thanks for the changes.  R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591347</commentid>
    <comment_count>6</comment_count>
      <attachid>134605</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 11:19:07 -0700</bug_when>
    <thetext>Comment on attachment 134605
Patch

Clearing flags on attachment: 134605

Committed r112550: &lt;http://trac.webkit.org/changeset/112550&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591348</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 11:19:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134218</attachid>
            <date>2012-03-27 22:03:12 -0700</date>
            <delta_ts>2012-03-29 09:57:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82425-20120328010311.patch</filename>
            <type>text/plain</type>
            <size>23683</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDk4ZmZmOTRlYWIzMWYwYjAyYWY4ZTY4Mjg1NWM1MjJmY2NkZjUyZTMuLjBiMDJlNDExYTg3OTIx
Yzc0Y2U1NzllMzY5MzE5ZDZkZDY2NGNlY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsNjggQEAKIDIwMTItMDMtMjcgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1
bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBTcGxpdCBvZmYgdGlsZWQgbGF5ZXIgY29uc3Ry
dWN0cyBmb3IgdW5pdCB0ZXN0cyBpbnRvIGEgY29tbW9uIGhlYWRlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI0MjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dFRlc3RzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9u
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoRmFrZVRleHR1cmVB
bGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUZXh0dXJlQWxsb2NhdG9yOjpj
cmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVGV4dHVyZUFsbG9jYXRv
cjo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChGYWtlVGV4dHVyZUNvcGllcik6CisgICAgICAg
IChXZWJLaXRUZXN0czo6RmFrZVRleHR1cmVDb3BpZXI6OmNvcHlUZXh0dXJlKToKKyAgICAgICAg
KEZha2VMYXllclRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFRleHR1cmUpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6
flRleHR1cmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlOjp1cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6cHJlcGFyZVJlY3QpOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcik6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6On5GYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXI6OnNldFJlY3RUb0ludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VM
YXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlQ291bnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpjbGVhclByZXBhcmVDb3VudCk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZUNvdW50KToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y2xlYXJVcGRhdGVDb3Vu
dCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0
ZVJlY3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpw
cmVwYXJlUmVjdENvdW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6Y2xlYXJQcmVwYXJlUmVjdENvdW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpG
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVJlY3QpOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFxdWVQYWludFJlY3QpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpsYXN0VXBkYXRlUmVjdCk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpz
YW1wbGVkVGV4ZWxGb3JtYXQpOgorICAgICAgICAoRmFrZUNDVGlsZWRMYXllckltcGwpOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RpbGVkTGF5ZXJJbXBsOjpGYWtlQ0NUaWxlZExheWVy
SW1wbCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDVGlsZWRMYXllckltcGw6On5GYWtl
Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAgIChGYWtlVGlsZWRMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjpGYWtlVGlsZWRMYXll
ckNocm9taXVtKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVGlsZWRMYXllckNocm9taXVt
Ojp+RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bTo6dGlsZVNpemUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VU
aWxlZExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheVJlY3QpOgorICAgICAgICAoV2ViS2l0
VGVzdHM6OkZha2VUaWxlZExheWVyQ2hyb21pdW06Omxhc3ROZWVkc0Rpc3BsYXlSZWN0KToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjpmYWtlTGF5ZXJUZXh0
dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bTo6dGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUaWxlZExheWVy
Q2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpG
YWtlVGlsZWRMYXllckNocm9taXVtOjp0ZXh0dXJlVXBkYXRlcik6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRl
ZCk6CisgICAgICAgIChGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHMpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kczo6RmFrZVRpbGVkTGF5
ZXJXaXRoU2NhbGVkQm91bmRzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVGlsZWRMYXll
cldpdGhTY2FsZWRCb3VuZHM6OnNldENvbnRlbnRCb3VuZHMpOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kczo6Y29udGVudEJvdW5kcyk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzOjp1cGRhdGVS
ZWN0KToKKyAgICAgICAgKEZha2VDQ1RleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlQ0NUZXh0dXJlVXBkYXRlcjo6RmFrZUNDVGV4dHVyZVVwZGF0ZXIpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkZha2VDQ1RleHR1cmVVcGRhdGVyOjp0ZXh0dXJlQWxsb2NhdG9yKToK
KyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKworMjAxMi0wMy0y
NyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21p
dW1dIFJlbmFtZSBvcGFxdWVDb250ZW50c1JlZ2lvbigpIHRvIHZpc2libGVDb250ZW50T3BhcXVl
UmVnaW9uKCkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgxNjg5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDk0MWY4ZThhZmYzYTJl
OWZlYzIwMGU2YzhhMDAyNWY2ODkxNmMyNzIuLmQyZDljNjhhYzViZWIzMGJlYTYyOWExMjUzY2Q5
M2RmNWU2OTI1NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtODYsNiArODYs
OCBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ1RpbGVkTGF5ZXJJbXBsVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDVGls
ZWRMYXllclRlc3RDb21tb24uaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVyVGVz
dENvbW1vbi5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbWVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NsaXBib2FyZENocm9taXVtVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzNj
OGMzOGJkYWMzYTEwNWE2YzU3OWIxZmE1MzRiM2Q0MTA5YmJmZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKwordm9pZCBGYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBJbnRTaXplJiwgaW50LCBmbG9hdCwgSW50UmVjdCogcmVzdWx0aW5nT3BhcXVlUmVjdCkKK3sK
KyAgICBtX3ByZXBhcmVDb3VudCsrOworICAgIG1fbGFzdFVwZGF0ZVJlY3QgPSBjb250ZW50UmVj
dDsKKyAgICBpZiAoIW1fcmVjdFRvSW52YWxpZGF0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9s
YXllci0+aW52YWxpZGF0ZVJlY3QobV9yZWN0VG9JbnZhbGlkYXRlKTsKKyAgICAgICAgbV9yZWN0
VG9JbnZhbGlkYXRlID0gV2ViQ29yZTo6SW50UmVjdCgpOworICAgICAgICBtX2xheWVyID0gMDsK
KyAgICB9CisgICAgKnJlc3VsdGluZ09wYXF1ZVJlY3QgPSBtX29wYXF1ZVBhaW50UmVjdDsKK30K
KworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQ4OTEzZWU5YjVhOWRmZWVi
ZGM2YThiYmYzY2ZkODc5MDllZGJhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsMjI1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGlsZWRMYXllclRlc3RDb21tb25faAorI2RlZmlu
ZSBDQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAi
VGV4dHVyZUNvcGllci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
VGlsZWRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgor
I2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKKworbmFtZXNwYWNlIFdlYktpdFRlc3Rz
IHsKKworY2xhc3MgRmFrZVRleHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVy
ZUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVUZXh0dXJl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBHQzNEZW51bSkgeyByZXR1cm4gMTsgfQorICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgR0MzRGVudW0pIHsgfQorfTsKKworY2xhc3MgRmFrZVRleHR1cmVDb3BpZXIgOiBwdWJsaWMg
V2ViQ29yZTo6VGV4dHVyZUNvcGllciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGNvcHlU
ZXh0dXJlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJikgeyB9Cit9OworCitjbGFzcyBGYWtlVGlsZWRMYXllckNo
cm9taXVtOworCitjbGFzcyBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBUZXh0dXJlIDogcHVi
bGljIFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVGV4dHVyZShGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlciogbGF5ZXIsIFBhc3NPd25Q
dHI8V2ViQ29yZTo6TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCisgICAgICAgICAgICA6IFdlYkNv
cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAgICAgICAgICAgICwg
bV9sYXllcihsYXllcikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgflRl
eHR1cmUoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRCosIFdlYkNvcmU6OlRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoYWxsb2NhdG9yKQorICAgICAgICAgICAgICAgIHRleHR1cmUo
KS0+YWxsb2NhdGUoYWxsb2NhdG9yKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnVwZGF0ZVJlY3Qo
KTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpIHsgbV9sYXllci0+cHJlcGFyZVJlY3QoKTsgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIqIG1fbGF5ZXI7CisgICAgfTsKKwor
ICAgIEZha2VMYXllclRleHR1cmVVcGRhdGVyKCkKKyAgICAgICAgOiBtX3ByZXBhcmVDb3VudCgw
KQorICAgICAgICAsIG1fdXBkYXRlQ291bnQoMCkKKyAgICAgICAgLCBtX3ByZXBhcmVSZWN0Q291
bnQoMCkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfkZha2VMYXllclRleHR1cmVVcGRhdGVy
KCkgeyB9CisKKyAgICAvLyBTZXRzIHRoZSByZWN0IHRvIGludmFsaWRhdGUgZHVyaW5nIHRoZSBu
ZXh0IGNhbGwgdG8gcHJlcGFyZVRvVXBkYXRlKCkuIEFmdGVyIHRoZSBuZXh0CisgICAgLy8gY2Fs
bCB0byBwcmVwYXJlVG9VcGRhdGUoKSB0aGUgcmVjdCBpcyByZXNldC4KKyAgICB2b2lkIHNldFJl
Y3RUb0ludmFsaWRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bSogbGF5ZXIpCisgICAgeworICAgICAgICBtX3JlY3RUb0ludmFsaWRhdGUgPSBy
ZWN0OworICAgICAgICBtX2xheWVyID0gbGF5ZXI7CisgICAgfQorCisgICAgLy8gTnVtYmVyIG9m
IHRpbWVzIHByZXBhcmVUb1VwZGF0ZSBoYXMgYmVlbiBpbnZva2VkLgorICAgIGludCBwcmVwYXJl
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3ByZXBhcmVDb3VudDsgfQorICAgIHZvaWQgY2xlYXJQ
cmVwYXJlQ291bnQoKSB7IG1fcHJlcGFyZUNvdW50ID0gMDsgfQorCisgICAgLy8gTnVtYmVyIG9m
IHRpbWVzIHVwZGF0ZVJlY3QgaGFzIGJlZW4gaW52b2tlZC4KKyAgICBpbnQgdXBkYXRlQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CisgICAgdm9pZCBjbGVhclVwZGF0ZUNv
dW50KCkgeyBtX3VwZGF0ZUNvdW50ID0gMDsgfQorICAgIHZvaWQgdXBkYXRlUmVjdCgpIHsgbV91
cGRhdGVDb3VudCsrOyB9CisKKyAgICAvLyBOdW1iZXIgb2YgdGltZXMgcHJlcGFyZVJlY3QoKSBo
YXMgYmVlbiBpbnZva2VkIG9uIGEgdGV4dHVyZS4KKyAgICBpbnQgcHJlcGFyZVJlY3RDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJlcGFyZVJlY3RDb3VudDsgfQorICAgIHZvaWQgY2xlYXJQcmVw
YXJlUmVjdENvdW50KCkgeyBtX3ByZXBhcmVSZWN0Q291bnQgPSAwOyB9CisgICAgdm9pZCBwcmVw
YXJlUmVjdCgpIHsgbV9wcmVwYXJlUmVjdENvdW50Kys7IH0KKworICAgIHZvaWQgc2V0T3BhcXVl
UGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIG9wYXF1ZVBhaW50UmVjdCkgeyBtX29w
YXF1ZVBhaW50UmVjdCA9IG9wYXF1ZVBhaW50UmVjdDsgfQorCisgICAgLy8gTGFzdCByZWN0IHBh
c3NlZCB0byBwcmVwYXJlVG9VcGRhdGUoKS4KKyAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBs
YXN0VXBkYXRlUmVjdCgpICBjb25zdCB7IHJldHVybiBtX2xhc3RVcGRhdGVSZWN0OyB9CisKKyAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVy
ZT4gY3JlYXRlVGV4dHVyZShXZWJDb3JlOjpUZXh0dXJlTWFuYWdlciogbWFuYWdlcikgeyByZXR1
cm4gYWRvcHRQdHIobmV3IFRleHR1cmUodGhpcywgV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6OmNy
ZWF0ZShtYW5hZ2VyKSkpOyB9CisgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxl
ZFRleGVsRm9ybWF0KEdDM0RlbnVtKSB7IHJldHVybiBTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOyB9
CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGludCwgZmxvYXQsIFdlYkNv
cmU6OkludFJlY3QqIHJlc3VsdGluZ09wYXF1ZVJlY3QpOworCitwcml2YXRlOgorICAgIGludCBt
X3ByZXBhcmVDb3VudDsKKyAgICBpbnQgbV91cGRhdGVDb3VudDsKKyAgICBpbnQgbV9wcmVwYXJl
UmVjdENvdW50OworICAgIFdlYkNvcmU6OkludFJlY3QgbV9yZWN0VG9JbnZhbGlkYXRlOworICAg
IFdlYkNvcmU6OkludFJlY3QgbV9sYXN0VXBkYXRlUmVjdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IG1fb3BhcXVlUGFpbnRSZWN0OworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBt
X2xheWVyOworfTsKKworY2xhc3MgRmFrZUNDVGlsZWRMYXllckltcGwgOiBwdWJsaWMgV2ViQ29y
ZTo6Q0NUaWxlZExheWVySW1wbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgRmFrZUNDVGlsZWRM
YXllckltcGwoaW50IGlkKQorICAgICAgICA6IFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGwoaWQp
IHsgfQorICAgIHZpcnR1YWwgfkZha2VDQ1RpbGVkTGF5ZXJJbXBsKCkgeyB9CisKKyAgICB1c2lu
ZyBXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpoYXNUaWxlQXQ7CisgICAgdXNpbmcgV2ViQ29y
ZTo6Q0NUaWxlZExheWVySW1wbDo6aGFzVGV4dHVyZUlkRm9yVGlsZUF0OworfTsKKworY2xhc3Mg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21p
dW0geworcHVibGljOgorICAgIGV4cGxpY2l0IEZha2VUaWxlZExheWVyQ2hyb21pdW0oV2ViQ29y
ZTo6VGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKQorICAgICAgICA6IFRpbGVkTGF5ZXJD
aHJvbWl1bSgpCisgICAgICAgICwgbV9mYWtlVGV4dHVyZVVwZGF0ZXIoYWRvcHRSZWYobmV3IEZh
a2VMYXllclRleHR1cmVVcGRhdGVyKSkKKyAgICAgICAgLCBtX3RleHR1cmVNYW5hZ2VyKHRleHR1
cmVNYW5hZ2VyKQorICAgIHsKKyAgICAgICAgc2V0VGlsZVNpemUodGlsZVNpemUoKSk7CisgICAg
ICAgIHNldFRleHR1cmVGb3JtYXQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwor
ICAgICAgICBzZXRCb3JkZXJUZXhlbE9wdGlvbihXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6
Tm9Cb3JkZXJUZXhlbHMpOworICAgICAgICBzZXRJc0RyYXdhYmxlKHRydWUpOyAvLyBTbyB0aGF0
IHdlIGRvbid0IGdldCBmYWxzZSBwb3NpdGl2ZXMgaWYgYW55IG9mIHRoZXNlIHRlc3RzIGV4cGVj
dCB0byByZXR1cm4gZmFsc2UgZnJvbSBkcmF3c0NvbnRlbnQoKSBmb3Igb3RoZXIgcmVhc29ucy4K
KyAgICB9CisgICAgdmlydHVhbCB+RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSgpIHsgfQorCisgICAg
c3RhdGljIFdlYkNvcmU6OkludFNpemUgdGlsZVNpemUoKSB7IHJldHVybiBXZWJDb3JlOjpJbnRT
aXplKDEwMCwgMTAwKTsgfQorCisgICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjppbnZhbGlkYXRlUmVjdDsKKyAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZTsKKyAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZUlkbGU7CisgICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9t
aXVtOjpuZWVkc0lkbGVQYWludDsKKyAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21p
dW06OnNraXBzRHJhdzsKKyAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06Om51
bVBhaW50ZWRUaWxlczsKKyAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06Omlk
bGVQYWludFJlY3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5UmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBtX2xhc3ROZWVkc0Rp
c3BsYXlSZWN0ID0gcmVjdDsKKyAgICAgICAgVGlsZWRMYXllckNocm9taXVtOjpzZXROZWVkc0Rp
c3BsYXlSZWN0KHJlY3QpOworICAgIH0KKworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
bGFzdE5lZWRzRGlzcGxheVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3ROZWVkc0Rpc3BsYXlS
ZWN0OyB9CisKKyAgICBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlciogZmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXIoKSB7IHJldHVybiBtX2Zha2VUZXh0dXJlVXBkYXRlci5nZXQoKTsgfQorCisgICAgdmly
dHVhbCBXZWJDb3JlOjpUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJl
dHVybiBtX3RleHR1cmVNYW5hZ2VyOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50
c0lmRGlydHkoY29uc3QgV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyKiBvY2NsdXNpb24pCisg
ICAgeworICAgICAgICBwcmVwYXJlVG9VcGRhdGUodmlzaWJsZUxheWVyUmVjdCgpLCBvY2NsdXNp
b24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Zha2VUZXh0dXJlVXBkYXRlci5nZXQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpIHsgfQorCisgICAgUmVmUHRyPEZha2VMYXllclRl
eHR1cmVVcGRhdGVyPiBtX2Zha2VUZXh0dXJlVXBkYXRlcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJl
TWFuYWdlciogbV90ZXh0dXJlTWFuYWdlcjsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9sYXN0
TmVlZHNEaXNwbGF5UmVjdDsKK307CisKK2NsYXNzIEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJv
dW5kcyA6IHB1YmxpYyBGYWtlVGlsZWRMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHMoV2ViQ29yZTo6VGV4dHVyZU1hbmFn
ZXIqIHRleHR1cmVNYW5hZ2VyKQorICAgICAgICA6IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4
dHVyZU1hbmFnZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0Q29udGVudEJvdW5kcyhj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50Qm91bmRzKSB7IG1fZm9yY2VkQ29udGVudEJv
dW5kcyA9IGNvbnRlbnRCb3VuZHM7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29u
dGVudEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9yY2VkQ29udGVudEJvdW5kczsgfQorCisg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHVwZGF0ZVJlY3QoKSB7IHJldHVybiBtX3VwZGF0ZVJlY3Q7
IH0KKworcHJvdGVjdGVkOgorICAgIFdlYkNvcmU6OkludFNpemUgbV9mb3JjZWRDb250ZW50Qm91
bmRzOworfTsKKworCitjbGFzcyBGYWtlQ0NUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBXZWJDb3Jl
OjpDQ1RleHR1cmVVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBGYWtlQ0NUZXh0dXJl
VXBkYXRlcigpCisgICAgICAgIDogV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcigmbV90ZXh0dXJl
QWxsb2NhdG9yLCAmbV90ZXh0dXJlQ29waWVyKQorICAgIHsKKyAgICB9CisKKyAgICBGYWtlVGV4
dHVyZUFsbG9jYXRvciYgdGV4dHVyZUFsbG9jYXRvcigpCisgICAgeworICAgICAgICByZXR1cm4g
bV90ZXh0dXJlQWxsb2NhdG9yOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEZha2VUZXh0dXJl
QWxsb2NhdG9yIG1fdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBGYWtlVGV4dHVyZUNvcGllciBtX3Rl
eHR1cmVDb3BpZXI7Cit9OworCit9CisjZW5kaWYgLy8gQ0NUaWxlZExheWVyVGVzdENvbW1vbl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hy
b21pdW1UZXN0LmNwcAppbmRleCAxMjljOTE1OTRkNGJkYzgzMDAwZDNlNzZmOTQ1ZTE5OWE1ODlh
YjM0Li4yMDgzNzI4ZTcwYzQzOTk2MWZiN2I5YjFiNjBlNWMxNWIxMzU0OWZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVz
dC5jcHAKQEAgLTI4LDE1ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29t
bW9uLmgiCiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiQ0NU
aWxlZExheWVyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkZha2VDQ0xheWVyVHJlZUhvc3RDbGll
bnQuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiUmVnaW9u
LmgiCi0jaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuaCIgLy8gRm9yIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZAotI2luY2x1ZGUgImNj
L0NDVGV4dHVyZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCiAj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03
MCwyMDIgKzY1LDYgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3RJblNjcmVl
bjsKIH07CiAKLWNsYXNzIEZha2VUZXh0dXJlQWxsb2NhdG9yIDogcHVibGljIFRleHR1cmVBbGxv
Y2F0b3IgewotcHVibGljOgotICAgIHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlVGV4dHVyZShjb25z
dCBJbnRTaXplJiwgR0MzRGVudW0pIHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlVGV4dHVyZSh1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtKSB7IH0KLX07Ci0K
LWNsYXNzIEZha2VUZXh0dXJlQ29waWVyIDogcHVibGljIFRleHR1cmVDb3BpZXIgewotcHVibGlj
OgotICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIHVuc2ln
bmVkLCB1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYpIHsgfQotfTsKLQotY2xhc3MgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bTsKLQotY2xhc3MgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMg
TGF5ZXJUZXh0dXJlVXBkYXRlciB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgVGV4dHVyZSA6IHB1Ymxp
YyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRl
eHR1cmUoRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIqIGxheWVyLCBQYXNzT3duUHRyPE1hbmFnZWRU
ZXh0dXJlPiB0ZXh0dXJlKQotICAgICAgICAgICAgOiBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlKHRleHR1cmUpCi0gICAgICAgICAgICAsIG1fbGF5ZXIobGF5ZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotICAgICAgICB2aXJ0dWFsIH5UZXh0dXJlKCkgeyB9Ci0KLSAgICAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGFsbG9jYXRvcikKLSAgICAgICAgICAgICAgICB0ZXh0dXJlKCktPmFsbG9j
YXRlKGFsbG9jYXRvcik7Ci0gICAgICAgICAgICBtX2xheWVyLT51cGRhdGVSZWN0KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3QmKSB7
IG1fbGF5ZXItPnByZXBhcmVSZWN0KCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZha2VM
YXllclRleHR1cmVVcGRhdGVyKiBtX2xheWVyOwotICAgIH07Ci0KLSAgICBGYWtlTGF5ZXJUZXh0
dXJlVXBkYXRlcigpCi0gICAgICAgIDogbV9wcmVwYXJlQ291bnQoMCkKLSAgICAgICAgLCBtX3Vw
ZGF0ZUNvdW50KDApCi0gICAgICAgICwgbV9wcmVwYXJlUmVjdENvdW50KDApCi0gICAgewotICAg
IH0KLSAgICB2aXJ0dWFsIH5GYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsgfQotCi0gICAgLy8g
U2V0cyB0aGUgcmVjdCB0byBpbnZhbGlkYXRlIGR1cmluZyB0aGUgbmV4dCBjYWxsIHRvIHByZXBh
cmVUb1VwZGF0ZSgpLiBBZnRlciB0aGUgbmV4dAotICAgIC8vIGNhbGwgdG8gcHJlcGFyZVRvVXBk
YXRlKCkgdGhlIHJlY3QgaXMgcmVzZXQuCi0gICAgdm9pZCBzZXRSZWN0VG9JbnZhbGlkYXRlKGNv
bnN0IEludFJlY3QmLCBGYWtlVGlsZWRMYXllckNocm9taXVtKik7Ci0KLSAgICAvLyBOdW1iZXIg
b2YgdGltZXMgcHJlcGFyZVRvVXBkYXRlIGhhcyBiZWVuIGludm9rZWQuCi0gICAgaW50IHByZXBh
cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlcGFyZUNvdW50OyB9Ci0gICAgdm9pZCBjbGVh
clByZXBhcmVDb3VudCgpIHsgbV9wcmVwYXJlQ291bnQgPSAwOyB9Ci0KLSAgICAvLyBOdW1iZXIg
b2YgdGltZXMgdXBkYXRlUmVjdCBoYXMgYmVlbiBpbnZva2VkLgotICAgIGludCB1cGRhdGVDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdXBkYXRlQ291bnQ7IH0KLSAgICB2b2lkIGNsZWFyVXBkYXRl
Q291bnQoKSB7IG1fdXBkYXRlQ291bnQgPSAwOyB9Ci0gICAgdm9pZCB1cGRhdGVSZWN0KCkgeyBt
X3VwZGF0ZUNvdW50Kys7IH0KLQotICAgIC8vIE51bWJlciBvZiB0aW1lcyBwcmVwYXJlUmVjdCgp
IGhhcyBiZWVuIGludm9rZWQgb24gYSB0ZXh0dXJlLgotICAgIGludCBwcmVwYXJlUmVjdENvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVwYXJlUmVjdENvdW50OyB9Ci0gICAgdm9pZCBjbGVhclBy
ZXBhcmVSZWN0Q291bnQoKSB7IG1fcHJlcGFyZVJlY3RDb3VudCA9IDA7IH0KLSAgICB2b2lkIHBy
ZXBhcmVSZWN0KCkgeyBtX3ByZXBhcmVSZWN0Q291bnQrKzsgfQotCi0gICAgdm9pZCBzZXRPcGFx
dWVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgb3BhcXVlUGFpbnRSZWN0KSB7IG1fb3BhcXVlUGFp
bnRSZWN0ID0gb3BhcXVlUGFpbnRSZWN0OyB9Ci0KLSAgICAvLyBMYXN0IHJlY3QgcGFzc2VkIHRv
IHByZXBhcmVUb1VwZGF0ZSgpLgotICAgIGNvbnN0IEludFJlY3QmIGxhc3RVcGRhdGVSZWN0KCkg
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdFVwZGF0ZVJlY3Q7IH0KLQotICAgIHZpcnR1YWwgUGFzc093
blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmVN
YW5hZ2VyKiBtYW5hZ2VyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZSh0aGlzLCBNYW5h
Z2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7IH0KLSAgICB2aXJ0dWFsIFNhbXBsZWRUZXhl
bEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0pIHsgcmV0dXJuIFNhbXBsZWRUZXhl
bEZvcm1hdFJHQkE7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiwgaW50LCBmbG9hdCwgSW50UmVjdCog
cmVzdWx0aW5nT3BhcXVlUmVjdCk7Ci0KLXByaXZhdGU6Ci0gICAgaW50IG1fcHJlcGFyZUNvdW50
OwotICAgIGludCBtX3VwZGF0ZUNvdW50OwotICAgIGludCBtX3ByZXBhcmVSZWN0Q291bnQ7Ci0g
ICAgSW50UmVjdCBtX3JlY3RUb0ludmFsaWRhdGU7Ci0gICAgSW50UmVjdCBtX2xhc3RVcGRhdGVS
ZWN0OwotICAgIEludFJlY3QgbV9vcGFxdWVQYWludFJlY3Q7Ci0gICAgUmVmUHRyPEZha2VUaWxl
ZExheWVyQ2hyb21pdW0+IG1fbGF5ZXI7Ci19OwotCi1jbGFzcyBGYWtlQ0NUaWxlZExheWVySW1w
bCA6IHB1YmxpYyBDQ1RpbGVkTGF5ZXJJbXBsIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBGYWtl
Q0NUaWxlZExheWVySW1wbChpbnQgaWQpCi0gICAgICAgIDogQ0NUaWxlZExheWVySW1wbChpZCkg
eyB9Ci0gICAgdmlydHVhbCB+RmFrZUNDVGlsZWRMYXllckltcGwoKSB7IH0KLQotICAgIHVzaW5n
IENDVGlsZWRMYXllckltcGw6Omhhc1RpbGVBdDsKLSAgICB1c2luZyBDQ1RpbGVkTGF5ZXJJbXBs
OjpoYXNUZXh0dXJlSWRGb3JUaWxlQXQ7Ci19OwotCi1jbGFzcyBGYWtlVGlsZWRMYXllckNocm9t
aXVtIDogcHVibGljIFRpbGVkTGF5ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIpCi0g
ICAgICAgIDogVGlsZWRMYXllckNocm9taXVtKCkKLSAgICAgICAgLCBtX2Zha2VUZXh0dXJlVXBk
YXRlcihhZG9wdFJlZihuZXcgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIpKQotICAgICAgICAsIG1f
dGV4dHVyZU1hbmFnZXIodGV4dHVyZU1hbmFnZXIpCi0gICAgewotICAgICAgICBzZXRUaWxlU2l6
ZSh0aWxlU2l6ZSgpKTsKLSAgICAgICAgc2V0VGV4dHVyZUZvcm1hdChHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSk7Ci0gICAgICAgIHNldEJvcmRlclRleGVsT3B0aW9uKENDTGF5ZXJUaWxpbmdEYXRh
OjpOb0JvcmRlclRleGVscyk7Ci0gICAgICAgIHNldElzRHJhd2FibGUodHJ1ZSk7IC8vIFNvIHRo
YXQgd2UgZG9uJ3QgZ2V0IGZhbHNlIHBvc2l0aXZlcyBpZiBhbnkgb2YgdGhlc2UgdGVzdHMgZXhw
ZWN0IHRvIHJldHVybiBmYWxzZSBmcm9tIGRyYXdzQ29udGVudCgpIGZvciBvdGhlciByZWFzb25z
LgotICAgIH0KLSAgICB2aXJ0dWFsIH5GYWtlVGlsZWRMYXllckNocm9taXVtKCkgeyB9Ci0KLSAg
ICBzdGF0aWMgSW50U2l6ZSB0aWxlU2l6ZSgpIHsgcmV0dXJuIEludFNpemUoMTAwLCAxMDApOyB9
Ci0KLSAgICB1c2luZyBUaWxlZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0OwotICAgIHVz
aW5nIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlOwotICAgIHVzaW5nIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZTsKLSAgICB1c2luZyBUaWxlZExheWVy
Q2hyb21pdW06Om5lZWRzSWRsZVBhaW50OwotICAgIHVzaW5nIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
c2tpcHNEcmF3OwotICAgIHVzaW5nIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bnVtUGFpbnRlZFRpbGVz
OwotICAgIHVzaW5nIFRpbGVkTGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50UmVjdDsKLQotICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAg
ICB7Ci0gICAgICAgIG1fbGFzdE5lZWRzRGlzcGxheVJlY3QgPSByZWN0OwotICAgICAgICBUaWxl
ZExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheVJlY3QocmVjdCk7Ci0gICAgfQotCi0gICAg
Y29uc3QgRmxvYXRSZWN0JiBsYXN0TmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGFzdE5lZWRzRGlzcGxheVJlY3Q7IH0KLQotICAgIEZha2VMYXllclRleHR1cmVVcGRhdGVyKiBm
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fZmFrZVRleHR1cmVVcGRhdGVyLmdl
dCgpOyB9Ci0KLSAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcigpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dENvbnRlbnRzSWZEaXJ0eShjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIqIG9jY2x1c2lvbikKLSAg
ICB7Ci0gICAgICAgIHByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlTGF5ZXJSZWN0KCksIG9jY2x1c2lv
bik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgTGF5ZXJUZXh0dXJlVXBkYXRlciog
dGV4dHVyZVVwZGF0ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZmFrZVRleHR1
cmVVcGRhdGVyLmdldCgpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJl
VXBkYXRlcklmTmVlZGVkKCkgeyB9Ci0KLSAgICBSZWZQdHI8RmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXI+IG1fZmFrZVRleHR1cmVVcGRhdGVyOwotICAgIFRleHR1cmVNYW5hZ2VyKiBtX3RleHR1cmVN
YW5hZ2VyOwotICAgIEZsb2F0UmVjdCBtX2xhc3ROZWVkc0Rpc3BsYXlSZWN0OwotfTsKLQotY2xh
c3MgRmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzIDogcHVibGljIEZha2VUaWxlZExheWVy
Q2hyb21pdW0gewotcHVibGljOgotICAgIGV4cGxpY2l0IEZha2VUaWxlZExheWVyV2l0aFNjYWxl
ZEJvdW5kcyhUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIpCi0gICAgICAgIDogRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBzZXRDb250ZW50Qm91bmRzKGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMpIHsgbV9mb3Jj
ZWRDb250ZW50Qm91bmRzID0gY29udGVudEJvdW5kczsgfQotICAgIHZpcnR1YWwgSW50U2l6ZSBj
b250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9mb3JjZWRDb250ZW50Qm91bmRzOyB9Ci0K
LSAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdCgpIHsgcmV0dXJuIG1fdXBkYXRlUmVjdDsgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgSW50U2l6ZSBtX2ZvcmNlZENvbnRlbnRCb3VuZHM7Ci19OwotCi12b2lk
IEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpzZXRSZWN0VG9JbnZhbGlkYXRlKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyKQotewotICAgIG1fcmVjdFRv
SW52YWxpZGF0ZSA9IHJlY3Q7Ci0gICAgbV9sYXllciA9IGxheWVyOwotfQotCi12b2lkIEZha2VM
YXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IEludFNpemUmLCBpbnQsIGZsb2F0LCBJbnRSZWN0KiByZXN1bHRpbmdPcGFx
dWVSZWN0KQotewotICAgIG1fcHJlcGFyZUNvdW50Kys7Ci0gICAgbV9sYXN0VXBkYXRlUmVjdCA9
IGNvbnRlbnRSZWN0OwotICAgIGlmICghbV9yZWN0VG9JbnZhbGlkYXRlLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX2xheWVyLT5pbnZhbGlkYXRlUmVjdChtX3JlY3RUb0ludmFsaWRhdGUpOwotICAg
ICAgICBtX3JlY3RUb0ludmFsaWRhdGUgPSBJbnRSZWN0KCk7Ci0gICAgICAgIG1fbGF5ZXIgPSAw
OwotICAgIH0KLSAgICAqcmVzdWx0aW5nT3BhcXVlUmVjdCA9IG1fb3BhcXVlUGFpbnRSZWN0Owot
fQotCi1jbGFzcyBGYWtlQ0NUZXh0dXJlVXBkYXRlciA6IHB1YmxpYyBDQ1RleHR1cmVVcGRhdGVy
IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBGYWtlQ0NUZXh0dXJlVXBkYXRlcigpCi0gICAgICAg
IDogQ0NUZXh0dXJlVXBkYXRlcigmbV90ZXh0dXJlQWxsb2NhdG9yLCAmbV90ZXh0dXJlQ29waWVy
KQotICAgIHsKLSAgICB9Ci0KLSAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciYgdGV4dHVyZUFsbG9j
YXRvcigpCi0gICAgewotICAgICAgICByZXR1cm4gbV90ZXh0dXJlQWxsb2NhdG9yOwotICAgIH0K
LQotcHJvdGVjdGVkOgotICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIG1fdGV4dHVyZUFsbG9jYXRv
cjsKLSAgICBGYWtlVGV4dHVyZUNvcGllciBtX3RleHR1cmVDb3BpZXI7Ci19OwotCiBURVNUKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogewogICAgIE93blB0cjxUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAy
NCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134605</attachid>
            <date>2012-03-29 09:57:16 -0700</date>
            <delta_ts>2012-03-29 11:19:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82425-20120329125714.patch</filename>
            <type>text/plain</type>
            <size>25518</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDk4ZmZmOTRlYWIzMWYwYjAyYWY4ZTY4Mjg1NWM1MjJmY2NkZjUyZTMuLjliMjM5ZTNiZjY0YmU5
ODVhYjIxMzk3ZTk1MGMzZDdkZjg3MmUzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMTItMDMtMjkgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxpdCBvZmYgdGlsZWQgbGF5ZXIgY29uc3Ry
dWN0cyBmb3IgdW5pdCB0ZXN0cyBpbnRvIGEgY29tbW9uIGhlYWRlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI0MjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dFRlc3RzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU6On5UZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU6OnByZXBhcmVSZWN0KToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6RmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVV
cGRhdGVyOjp+RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpzZXRSZWN0VG9JbnZhbGlkYXRlKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlVGV4
dHVyZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNDVGlsZWRMYXllckltcGw6OkZha2VD
Q1RpbGVkTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUaWxlZExheWVy
SW1wbDo6fkZha2VDQ1RpbGVkTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
VGlsZWRMYXllckNocm9taXVtOjpGYWtlVGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjp+RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TmVl
ZHNEaXNwbGF5UmVjdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VU
aWxlZExheWVyV2l0aFNjYWxlZEJvdW5kczo6RmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRz
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ0NUZXh0dXJlVXBkYXRlcjo6RmFrZUNDVGV4
dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHRlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgIChGYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcik6CisgICAgICAgIChUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6bGFzdFVwZGF0ZVJlY3QpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlQ291bnQpOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpjbGVhclByZXBh
cmVDb3VudCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6
OnVwZGF0ZUNvdW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6Y2xlYXJVcGRhdGVDb3VudCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VM
YXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlUmVjdENvdW50KToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y2xlYXJQcmVwYXJlUmVjdENvdW50KToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVJlY3Qp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllclRleHR1cmVVcGRhdGVyOjpzZXRPcGFx
dWVQYWludFJlY3QpOgorICAgICAgICAoRmFrZUNDVGlsZWRMYXllckltcGwpOgorICAgICAgICAo
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bTo6dGlsZVNpemUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUaWxl
ZExheWVyQ2hyb21pdW06Omxhc3ROZWVkc0Rpc3BsYXlSZWN0KToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjp0ZXh0dXJlTWFuYWdlcik6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0
ZVJlY3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUaWxlZExheWVyQ2hyb21pdW06OnRl
eHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVGlsZWRMYXllckNocm9t
aXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKToKKyAgICAgICAgKEZha2VUaWxlZExh
eWVyV2l0aFNjYWxlZEJvdW5kcyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRpbGVkTGF5
ZXJXaXRoU2NhbGVkQm91bmRzOjpzZXRDb250ZW50Qm91bmRzKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM6OmNvbnRlbnRCb3VuZHMpOgorICAg
ICAgICAoRmFrZVRleHR1cmVBbGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VU
ZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpG
YWtlVGV4dHVyZUFsbG9jYXRvcjo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChGYWtlVGV4dHVy
ZUNvcGllcik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRleHR1cmVDb3BpZXI6OmNvcHlU
ZXh0dXJlKToKKyAgICAgICAgKEZha2VDQ1RleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlQ0NUZXh0dXJlVXBkYXRlcjo6dGV4dHVyZUFsbG9jYXRvcik6CisgICAgICAg
ICogdGVzdHMvVGV4dHVyZU1hbmFnZXJUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMi0wMy0yNyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtq
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlbmFtZSBvcGFxdWVDb250ZW50
c1JlZ2lvbigpIHRvIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCmluZGV4IDk0MWY4ZThhZmYzYTJlOWZlYzIwMGU2YzhhMDAyNWY2ODkxNmMy
NzIuLmQyZDljNjhhYzViZWIzMGJlYTYyOWExMjUzY2Q5M2RmNWU2OTI1NmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtODYsNiArODYsOCBAQAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDU2NoZWR1bGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU29saWRDb2xvckxh
eWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbGVkTGF5ZXJJbXBsVGVz
dC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaCcsCisg
ICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1Rp
bWVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NsaXBib2FyZENocm9taXVtVGVzdC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExh
eWVyVGVzdENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAzZDQyMTYwMDA2Y2JjYzBjMGZkNjg1ZGU0
OGU1OTllNjM4YTE0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNDVGlsZWRMYXllclRl
c3RDb21tb24uaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXRUZXN0cyB7CisKK0Zha2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpUZXh0dXJlKEZh
a2VMYXllclRleHR1cmVVcGRhdGVyKiBsYXllciwgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4g
dGV4dHVyZSkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKKyAg
ICAsIG1fbGF5ZXIobGF5ZXIpCit7Cit9CisKK0Zha2VMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjp+VGV4dHVyZSgpCit7Cit9CisKK3ZvaWQgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmU6OnVwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBpZiAoYWxs
b2NhdG9yKQorICAgICAgICB0ZXh0dXJlKCktPmFsbG9jYXRlKGFsbG9jYXRvcik7CisgICAgbV9s
YXllci0+dXBkYXRlUmVjdCgpOworfQorCit2b2lkIEZha2VMYXllclRleHR1cmVVcGRhdGVyOjpU
ZXh0dXJlOjpwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JikKK3sKKyAgICBtX2xheWVyLT5wcmVw
YXJlUmVjdCgpOworfQorCitGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6RmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKQorICAgIDogbV9wcmVwYXJlQ291bnQoMCkKKyAgICAsIG1fdXBkYXRlQ291bnQo
MCkKKyAgICAsIG1fcHJlcGFyZVJlY3RDb3VudCgwKQoreworfQorCitGYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6fkZha2VMYXllclRleHR1cmVVcGRhdGVyKCkKK3sKK30KKwordm9pZCBGYWtlTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBJbnRTaXplJiwgaW50LCBmbG9hdCwgSW50UmVjdCogcmVzdWx0aW5nT3BhcXVl
UmVjdCkKK3sKKyAgICBtX3ByZXBhcmVDb3VudCsrOworICAgIG1fbGFzdFVwZGF0ZVJlY3QgPSBj
b250ZW50UmVjdDsKKyAgICBpZiAoIW1fcmVjdFRvSW52YWxpZGF0ZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9sYXllci0+aW52YWxpZGF0ZVJlY3QobV9yZWN0VG9JbnZhbGlkYXRlKTsKKyAgICAg
ICAgbV9yZWN0VG9JbnZhbGlkYXRlID0gSW50UmVjdCgpOworICAgICAgICBtX2xheWVyID0gMDsK
KyAgICB9CisgICAgKnJlc3VsdGluZ09wYXF1ZVJlY3QgPSBtX29wYXF1ZVBhaW50UmVjdDsKK30K
Kwordm9pZCBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6c2V0UmVjdFRvSW52YWxpZGF0ZShjb25z
dCBJbnRSZWN0JiByZWN0LCBGYWtlVGlsZWRMYXllckNocm9taXVtKiBsYXllcikKK3sKKyAgICBt
X3JlY3RUb0ludmFsaWRhdGUgPSByZWN0OworICAgIG1fbGF5ZXIgPSBsYXllcjsKK30KKworUGFz
c093blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBGYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFRleHR1cmUodGhpcywgTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5h
Z2VyKSkpOworfQorCitGYWtlQ0NUaWxlZExheWVySW1wbDo6RmFrZUNDVGlsZWRMYXllckltcGwo
aW50IGlkKQorICAgIDogQ0NUaWxlZExheWVySW1wbChpZCkKK3sKK30KKworRmFrZUNDVGlsZWRM
YXllckltcGw6On5GYWtlQ0NUaWxlZExheWVySW1wbCgpCit7Cit9CisKK0Zha2VUaWxlZExheWVy
Q2hyb21pdW06OkZha2VUaWxlZExheWVyQ2hyb21pdW0oVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVN
YW5hZ2VyKQorICAgIDogVGlsZWRMYXllckNocm9taXVtKCkKKyAgICAsIG1fZmFrZVRleHR1cmVV
cGRhdGVyKGFkb3B0UmVmKG5ldyBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcikpCisgICAgLCBtX3Rl
eHR1cmVNYW5hZ2VyKHRleHR1cmVNYW5hZ2VyKQoreworICAgIHNldFRpbGVTaXplKHRpbGVTaXpl
KCkpOworICAgIHNldFRleHR1cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworICAg
IHNldEJvcmRlclRleGVsT3B0aW9uKENDTGF5ZXJUaWxpbmdEYXRhOjpOb0JvcmRlclRleGVscyk7
CisgICAgc2V0SXNEcmF3YWJsZSh0cnVlKTsgLy8gU28gdGhhdCB3ZSBkb24ndCBnZXQgZmFsc2Ug
cG9zaXRpdmVzIGlmIGFueSBvZiB0aGVzZSB0ZXN0cyBleHBlY3QgdG8gcmV0dXJuIGZhbHNlIGZy
b20gZHJhd3NDb250ZW50KCkgZm9yIG90aGVyIHJlYXNvbnMuCit9CisKK0Zha2VUaWxlZExheWVy
Q2hyb21pdW06On5GYWtlVGlsZWRMYXllckNocm9taXVtKCkKK3sKK30KKwordm9pZCBGYWtlVGls
ZWRMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBtX2xhc3ROZWVkc0Rpc3BsYXlSZWN0ID0gcmVjdDsKKyAgICBUaWxlZExheWVy
Q2hyb21pdW06OnNldE5lZWRzRGlzcGxheVJlY3QocmVjdCk7Cit9CisKK3ZvaWQgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgQ0NPY2NsdXNpb25UcmFj
a2VyKiBvY2NsdXNpb24pCit7CisgICAgcHJlcGFyZVRvVXBkYXRlKHZpc2libGVMYXllclJlY3Qo
KSwgb2NjbHVzaW9uKTsKK30KKworRmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzOjpGYWtl
VGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHMoVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2Vy
KQorICAgIDogRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlcikKK3sKK30KKwor
RmFrZUNDVGV4dHVyZVVwZGF0ZXI6OkZha2VDQ1RleHR1cmVVcGRhdGVyKCkKKyAgICA6IENDVGV4
dHVyZVVwZGF0ZXIoJm1fdGV4dHVyZUFsbG9jYXRvciwgJm1fdGV4dHVyZUNvcGllcikKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWZiOGFlODVjYWM2ZWVlMWQ1
N2I1YjA4Y2Y0YjljYzYwYzRiMWQ2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsMTczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGlsZWRMYXllclRlc3RDb21tb25faAorI2RlZmlu
ZSBDQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJMYXllclRleHR1cmVVcGRhdGVyLmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAi
VGV4dHVyZUNvcGllci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
VGlsZWRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgor
I2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKKworbmFtZXNwYWNlIFdlYktpdFRlc3Rz
IHsKKworY2xhc3MgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTsKKworY2xhc3MgRmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlciB7CitwdWJs
aWM6CisgICAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBXZWJDb3JlOjpMYXllclRleHR1cmVVcGRh
dGVyOjpUZXh0dXJlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRleHR1cmUoRmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIqLCBQYXNzT3duUHRyPFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlPik7CisgICAg
ICAgIHZpcnR1YWwgflRleHR1cmUoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVj
dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCosIFdlYkNvcmU6OlRleHR1cmVBbGxvY2F0b3Iq
ICwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIEZha2VMYXllclRleHR1cmVVcGRhdGVyKiBtX2xheWVy
OworICAgIH07CisKKyAgICBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpOworICAgIHZpcnR1YWwg
fkZha2VMYXllclRleHR1cmVVcGRhdGVyKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2Vi
Q29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShXZWJDb3Jl
OjpUZXh0dXJlTWFuYWdlciopOworICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBs
ZWRUZXhlbEZvcm1hdChHQzNEZW51bSkgeyByZXR1cm4gU2FtcGxlZFRleGVsRm9ybWF0UkdCQTsg
fQorCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGludCwgZmxvYXQsIFdl
YkNvcmU6OkludFJlY3QqIHJlc3VsdGluZ09wYXF1ZVJlY3QpOworICAgIC8vIFNldHMgdGhlIHJl
Y3QgdG8gaW52YWxpZGF0ZSBkdXJpbmcgdGhlIG5leHQgY2FsbCB0byBwcmVwYXJlVG9VcGRhdGUo
KS4gQWZ0ZXIgdGhlIG5leHQKKyAgICAvLyBjYWxsIHRvIHByZXBhcmVUb1VwZGF0ZSgpIHRoZSBy
ZWN0IGlzIHJlc2V0LgorICAgIHZvaWQgc2V0UmVjdFRvSW52YWxpZGF0ZShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSopOworICAgIC8vIExhc3QgcmVjdCBw
YXNzZWQgdG8gcHJlcGFyZVRvVXBkYXRlKCkuCisgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
bGFzdFVwZGF0ZVJlY3QoKSAgY29uc3QgeyByZXR1cm4gbV9sYXN0VXBkYXRlUmVjdDsgfQorCisg
ICAgLy8gTnVtYmVyIG9mIHRpbWVzIHByZXBhcmVUb1VwZGF0ZSBoYXMgYmVlbiBpbnZva2VkLgor
ICAgIGludCBwcmVwYXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3ByZXBhcmVDb3VudDsgfQor
ICAgIHZvaWQgY2xlYXJQcmVwYXJlQ291bnQoKSB7IG1fcHJlcGFyZUNvdW50ID0gMDsgfQorCisg
ICAgLy8gTnVtYmVyIG9mIHRpbWVzIHVwZGF0ZVJlY3QgaGFzIGJlZW4gaW52b2tlZC4KKyAgICBp
bnQgdXBkYXRlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3VwZGF0ZUNvdW50OyB9CisgICAgdm9p
ZCBjbGVhclVwZGF0ZUNvdW50KCkgeyBtX3VwZGF0ZUNvdW50ID0gMDsgfQorICAgIHZvaWQgdXBk
YXRlUmVjdCgpIHsgbV91cGRhdGVDb3VudCsrOyB9CisKKyAgICAvLyBOdW1iZXIgb2YgdGltZXMg
cHJlcGFyZVJlY3QoKSBoYXMgYmVlbiBpbnZva2VkIG9uIGEgdGV4dHVyZS4KKyAgICBpbnQgcHJl
cGFyZVJlY3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlcGFyZVJlY3RDb3VudDsgfQorICAg
IHZvaWQgY2xlYXJQcmVwYXJlUmVjdENvdW50KCkgeyBtX3ByZXBhcmVSZWN0Q291bnQgPSAwOyB9
CisgICAgdm9pZCBwcmVwYXJlUmVjdCgpIHsgbV9wcmVwYXJlUmVjdENvdW50Kys7IH0KKworICAg
IHZvaWQgc2V0T3BhcXVlUGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIG9wYXF1ZVBh
aW50UmVjdCkgeyBtX29wYXF1ZVBhaW50UmVjdCA9IG9wYXF1ZVBhaW50UmVjdDsgfQorCitwcml2
YXRlOgorICAgIGludCBtX3ByZXBhcmVDb3VudDsKKyAgICBpbnQgbV91cGRhdGVDb3VudDsKKyAg
ICBpbnQgbV9wcmVwYXJlUmVjdENvdW50OworICAgIFdlYkNvcmU6OkludFJlY3QgbV9yZWN0VG9J
bnZhbGlkYXRlOworICAgIFdlYkNvcmU6OkludFJlY3QgbV9sYXN0VXBkYXRlUmVjdDsKKyAgICBX
ZWJDb3JlOjpJbnRSZWN0IG1fb3BhcXVlUGFpbnRSZWN0OworICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBtX2xheWVyOworfTsKKworY2xhc3MgRmFrZUNDVGlsZWRMYXllckltcGwg
OiBwdWJsaWMgV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbCB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgRmFrZUNDVGlsZWRMYXllckltcGwoaW50IGlkKTsKKyAgICB2aXJ0dWFsIH5GYWtlQ0NUaWxl
ZExheWVySW1wbCgpOworCisgICAgdXNpbmcgV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6aGFz
VGlsZUF0OworICAgIHVzaW5nIFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6Omhhc1RleHR1cmVJ
ZEZvclRpbGVBdDsKK307CisKK2NsYXNzIEZha2VUaWxlZExheWVyQ2hyb21pdW0gOiBwdWJsaWMg
V2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBGYWtl
VGlsZWRMYXllckNocm9taXVtKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyKik7CisgICAgdmlydHVh
bCB+RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSgpOworCisgICAgc3RhdGljIFdlYkNvcmU6OkludFNp
emUgdGlsZVNpemUoKSB7IHJldHVybiBXZWJDb3JlOjpJbnRTaXplKDEwMCwgMTAwKTsgfQorCisg
ICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlUmVjdDsKKyAg
ICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZTsKKyAg
ICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGU7
CisgICAgdXNpbmcgV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludDsK
KyAgICB1c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNraXBzRHJhdzsKKyAgICB1
c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06Om51bVBhaW50ZWRUaWxlczsKKyAgICB1
c2luZyBXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3Q7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KTsKKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxhc3ROZWVkc0Rpc3BsYXlSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9sYXN0TmVlZHNEaXNwbGF5UmVjdDsgfQorCisgICAgLy8gVXBkYXRl
cyB0aGUgdmlzaWJsZUxheWVyUmVjdCgpLgorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
SWZEaXJ0eShjb25zdCBXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXIqKTsKKworICAgIHZpcnR1
YWwgV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0dXJlTWFuYWdlcjsgfQorICAgIEZha2VMYXllclRleHR1cmVVcGRhdGVyKiBmYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpIHsgcmV0dXJuIG1fZmFrZVRleHR1cmVVcGRhdGVyLmdldCgp
OyB9CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHVwZGF0ZVJlY3QoKSB7IHJldHVybiBtX3VwZGF0
ZVJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkxheWVyVGV4dHVyZVVw
ZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgeyByZXR1cm4gbV9mYWtlVGV4dHVyZVVwZGF0
ZXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRl
ZCgpIHsgfQorCisgICAgUmVmUHRyPEZha2VMYXllclRleHR1cmVVcGRhdGVyPiBtX2Zha2VUZXh0
dXJlVXBkYXRlcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFuYWdlciogbV90ZXh0dXJlTWFuYWdl
cjsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9sYXN0TmVlZHNEaXNwbGF5UmVjdDsKK307CisK
K2NsYXNzIEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyA6IHB1YmxpYyBGYWtlVGlsZWRM
YXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBGYWtlVGlsZWRMYXllcldpdGhT
Y2FsZWRCb3VuZHMoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXIqKTsKKworICAgIHZvaWQgc2V0Q29u
dGVudEJvdW5kcyhjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50Qm91bmRzKSB7IG1fZm9y
Y2VkQ29udGVudEJvdW5kcyA9IGNvbnRlbnRCb3VuZHM7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFNpemUgY29udGVudEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9yY2VkQ29udGVudEJv
dW5kczsgfQorCitwcm90ZWN0ZWQ6CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2ZvcmNlZENvbnRl
bnRCb3VuZHM7Cit9OworCitjbGFzcyBGYWtlVGV4dHVyZUFsbG9jYXRvciA6IHB1YmxpYyBXZWJD
b3JlOjpUZXh0dXJlQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNy
ZWF0ZVRleHR1cmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEdDM0RlbnVtKSB7IHJldHVybiAx
OyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBHQzNEZW51bSkgeyB9Cit9OworCitjbGFzcyBGYWtlVGV4dHVyZUNvcGll
ciA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlQ29waWVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgY29weVRleHR1cmUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCwg
dW5zaWduZWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSB7IH0KK307CisKK2NsYXNzIEZha2VD
Q1RleHR1cmVVcGRhdGVyIDogcHVibGljIFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXIgeworcHVi
bGljOgorICAgIGV4cGxpY2l0IEZha2VDQ1RleHR1cmVVcGRhdGVyKCk7CisKKyAgICBGYWtlVGV4
dHVyZUFsbG9jYXRvciYgdGV4dHVyZUFsbG9jYXRvcigpIHsgcmV0dXJuIG1fdGV4dHVyZUFsbG9j
YXRvcjsgfQorCitwcm90ZWN0ZWQ6CisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgbV90ZXh0dXJl
QWxsb2NhdG9yOworICAgIEZha2VUZXh0dXJlQ29waWVyIG1fdGV4dHVyZUNvcGllcjsKK307CisK
K30KKyNlbmRpZiAvLyBDQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGV4dHVyZU1hbmFnZXJUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVGV4dHVyZU1hbmFnZXJUZXN0LmNwcAppbmRleCAzYjU3NmFm
OTkzNGJiYmYyYzcwOGE2N2I2ZTQ5ZmU0ZmE1YzRkNjlkLi5kNTMxM2Y1ZGMyMzUwYTFlODg4OTY0
ZTEyZGVlYjU1ODMyZjJmODcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1RleHR1cmVNYW5hZ2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UZXh0dXJlTWFuYWdlclRlc3QuY3BwCkBAIC0yNCwyMyArMjQsMTggQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgogI2lu
Y2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKIAog
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNw
YWNlIHsKIAotY2xhc3MgRmFrZVRleHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMgVGV4dHVyZUFsbG9j
YXRvciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+RmFrZVRleHR1cmVBbGxvY2F0b3IoKSB7IH0K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoY29uc3QgSW50U2l6ZSYsIEdDM0Rl
bnVtKSB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWdu
ZWQsIGNvbnN0IEludFNpemUmLCBHQzNEZW51bSkgeyB9Ci19OwotCiBjbGFzcyBUZXh0dXJlTWFu
YWdlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwdWJsaWM6CiAgICAgVGV4dHVyZU1h
bmFnZXJUZXN0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGls
ZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDEyOWM5MTU5NGQ0YmRjODMwMDBkM2U3NmY5
NDVlMTk5YTU4OWFiMzQuLjIwODM3MjhlNzBjNDM5OTYxZmI3YjliMWI2MGU1YzE1YjEzNTQ5ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVy
Q2hyb21pdW1UZXN0LmNwcApAQCAtMjgsMTUgKzI4LDEwIEBACiAKICNpbmNsdWRlICJDQ0FuaW1h
dGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJDQ0xheWVyVHJlZVRlc3RDb21tb24uaCIKKyNp
bmNsdWRlICJDQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiRmFrZUNDTGF5ZXJU
cmVlSG9zdENsaWVudC5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKLSNpbmNs
dWRlICJSZWdpb24uaCIKLSNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCi0jaW5jbHVkZSAiVGV4
dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5oIiAvLyBGb3IgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkCi0j
aW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgImNjL0NDVGlsZWRMYXll
ckltcGwuaCIKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKQEAgLTcwLDIwMiArNjUsNiBAQCBwcml2YXRlOgogICAgIEludFJlY3QgbV9zY2lzc29y
UmVjdEluU2NyZWVuOwogfTsKIAotY2xhc3MgRmFrZVRleHR1cmVBbGxvY2F0b3IgOiBwdWJsaWMg
VGV4dHVyZUFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVU
ZXh0dXJlKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkLCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0p
IHsgfQotfTsKLQotY2xhc3MgRmFrZVRleHR1cmVDb3BpZXIgOiBwdWJsaWMgVGV4dHVyZUNvcGll
ciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBJbnRTaXplJikgeyB9Ci19OwotCi1jbGFz
cyBGYWtlVGlsZWRMYXllckNocm9taXVtOwotCi1jbGFzcyBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
ciA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBUZXh0
dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgVGV4dHVyZShGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlciogbGF5ZXIsIFBhc3NPd25Q
dHI8TWFuYWdlZFRleHR1cmU+IHRleHR1cmUpCi0gICAgICAgICAgICA6IExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRleHR1cmUodGV4dHVyZSkKLSAgICAgICAgICAgICwgbV9sYXllcihsYXllcikKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgICAgIHZpcnR1YWwgflRleHR1cmUoKSB7IH0KLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVB
bGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdG9yKQotICAgICAgICAgICAgICAgIHRleHR1
cmUoKS0+YWxsb2NhdGUoYWxsb2NhdG9yKTsKLSAgICAgICAgICAgIG1fbGF5ZXItPnVwZGF0ZVJl
Y3QoKTsKLSAgICAgICAgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3Qg
SW50UmVjdCYpIHsgbV9sYXllci0+cHJlcGFyZVJlY3QoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIqIG1fbGF5ZXI7Ci0gICAgfTsKLQotICAgIEZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCkKLSAgICAgICAgOiBtX3ByZXBhcmVDb3VudCgwKQotICAg
ICAgICAsIG1fdXBkYXRlQ291bnQoMCkKLSAgICAgICAgLCBtX3ByZXBhcmVSZWN0Q291bnQoMCkK
LSAgICB7Ci0gICAgfQotICAgIHZpcnR1YWwgfkZha2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyB9
Ci0KLSAgICAvLyBTZXRzIHRoZSByZWN0IHRvIGludmFsaWRhdGUgZHVyaW5nIHRoZSBuZXh0IGNh
bGwgdG8gcHJlcGFyZVRvVXBkYXRlKCkuIEFmdGVyIHRoZSBuZXh0Ci0gICAgLy8gY2FsbCB0byBw
cmVwYXJlVG9VcGRhdGUoKSB0aGUgcmVjdCBpcyByZXNldC4KLSAgICB2b2lkIHNldFJlY3RUb0lu
dmFsaWRhdGUoY29uc3QgSW50UmVjdCYsIEZha2VUaWxlZExheWVyQ2hyb21pdW0qKTsKLQotICAg
IC8vIE51bWJlciBvZiB0aW1lcyBwcmVwYXJlVG9VcGRhdGUgaGFzIGJlZW4gaW52b2tlZC4KLSAg
ICBpbnQgcHJlcGFyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wcmVwYXJlQ291bnQ7IH0KLSAg
ICB2b2lkIGNsZWFyUHJlcGFyZUNvdW50KCkgeyBtX3ByZXBhcmVDb3VudCA9IDA7IH0KLQotICAg
IC8vIE51bWJlciBvZiB0aW1lcyB1cGRhdGVSZWN0IGhhcyBiZWVuIGludm9rZWQuCi0gICAgaW50
IHVwZGF0ZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV91cGRhdGVDb3VudDsgfQotICAgIHZvaWQg
Y2xlYXJVcGRhdGVDb3VudCgpIHsgbV91cGRhdGVDb3VudCA9IDA7IH0KLSAgICB2b2lkIHVwZGF0
ZVJlY3QoKSB7IG1fdXBkYXRlQ291bnQrKzsgfQotCi0gICAgLy8gTnVtYmVyIG9mIHRpbWVzIHBy
ZXBhcmVSZWN0KCkgaGFzIGJlZW4gaW52b2tlZCBvbiBhIHRleHR1cmUuCi0gICAgaW50IHByZXBh
cmVSZWN0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3ByZXBhcmVSZWN0Q291bnQ7IH0KLSAgICB2
b2lkIGNsZWFyUHJlcGFyZVJlY3RDb3VudCgpIHsgbV9wcmVwYXJlUmVjdENvdW50ID0gMDsgfQot
ICAgIHZvaWQgcHJlcGFyZVJlY3QoKSB7IG1fcHJlcGFyZVJlY3RDb3VudCsrOyB9Ci0KLSAgICB2
b2lkIHNldE9wYXF1ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBvcGFxdWVQYWludFJlY3QpIHsg
bV9vcGFxdWVQYWludFJlY3QgPSBvcGFxdWVQYWludFJlY3Q7IH0KLQotICAgIC8vIExhc3QgcmVj
dCBwYXNzZWQgdG8gcHJlcGFyZVRvVXBkYXRlKCkuCi0gICAgY29uc3QgSW50UmVjdCYgbGFzdFVw
ZGF0ZVJlY3QoKSAgY29uc3QgeyByZXR1cm4gbV9sYXN0VXBkYXRlUmVjdDsgfQotCi0gICAgdmly
dHVhbCBQYXNzT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IGNyZWF0ZVRleHR1
cmUoVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJl
KHRoaXMsIE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsgfQotICAgIHZpcnR1YWwg
U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSkgeyByZXR1cm4g
U2FtcGxlZFRleGVsRm9ybWF0UkdCQTsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmLCBpbnQsIGZsb2F0
LCBJbnRSZWN0KiByZXN1bHRpbmdPcGFxdWVSZWN0KTsKLQotcHJpdmF0ZToKLSAgICBpbnQgbV9w
cmVwYXJlQ291bnQ7Ci0gICAgaW50IG1fdXBkYXRlQ291bnQ7Ci0gICAgaW50IG1fcHJlcGFyZVJl
Y3RDb3VudDsKLSAgICBJbnRSZWN0IG1fcmVjdFRvSW52YWxpZGF0ZTsKLSAgICBJbnRSZWN0IG1f
bGFzdFVwZGF0ZVJlY3Q7Ci0gICAgSW50UmVjdCBtX29wYXF1ZVBhaW50UmVjdDsKLSAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKLX07Ci0KLWNsYXNzIEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsIDogcHVibGljIENDVGlsZWRMYXllckltcGwgewotcHVibGljOgotICAgIGV4
cGxpY2l0IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGludCBpZCkKLSAgICAgICAgOiBDQ1RpbGVkTGF5
ZXJJbXBsKGlkKSB7IH0KLSAgICB2aXJ0dWFsIH5GYWtlQ0NUaWxlZExheWVySW1wbCgpIHsgfQot
Ci0gICAgdXNpbmcgQ0NUaWxlZExheWVySW1wbDo6aGFzVGlsZUF0OwotICAgIHVzaW5nIENDVGls
ZWRMYXllckltcGw6Omhhc1RleHR1cmVJZEZvclRpbGVBdDsKLX07Ci0KLWNsYXNzIEZha2VUaWxl
ZExheWVyQ2hyb21pdW0gOiBwdWJsaWMgVGlsZWRMYXllckNocm9taXVtIHsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBGYWtlVGlsZWRMYXllckNocm9taXVtKFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJl
TWFuYWdlcikKLSAgICAgICAgOiBUaWxlZExheWVyQ2hyb21pdW0oKQotICAgICAgICAsIG1fZmFr
ZVRleHR1cmVVcGRhdGVyKGFkb3B0UmVmKG5ldyBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcikpCi0g
ICAgICAgICwgbV90ZXh0dXJlTWFuYWdlcih0ZXh0dXJlTWFuYWdlcikKLSAgICB7Ci0gICAgICAg
IHNldFRpbGVTaXplKHRpbGVTaXplKCkpOwotICAgICAgICBzZXRUZXh0dXJlRm9ybWF0KEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKTsKLSAgICAgICAgc2V0Qm9yZGVyVGV4ZWxPcHRpb24oQ0NMYXll
clRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzKTsKLSAgICAgICAgc2V0SXNEcmF3YWJsZSh0cnVl
KTsgLy8gU28gdGhhdCB3ZSBkb24ndCBnZXQgZmFsc2UgcG9zaXRpdmVzIGlmIGFueSBvZiB0aGVz
ZSB0ZXN0cyBleHBlY3QgdG8gcmV0dXJuIGZhbHNlIGZyb20gZHJhd3NDb250ZW50KCkgZm9yIG90
aGVyIHJlYXNvbnMuCi0gICAgfQotICAgIHZpcnR1YWwgfkZha2VUaWxlZExheWVyQ2hyb21pdW0o
KSB7IH0KLQotICAgIHN0YXRpYyBJbnRTaXplIHRpbGVTaXplKCkgeyByZXR1cm4gSW50U2l6ZSgx
MDAsIDEwMCk7IH0KLQotICAgIHVzaW5nIFRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJl
Y3Q7Ci0gICAgdXNpbmcgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGU7Ci0gICAg
dXNpbmcgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlOwotICAgIHVzaW5n
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQ7Ci0gICAgdXNpbmcgVGlsZWRMYXll
ckNocm9taXVtOjpza2lwc0RyYXc7Ci0gICAgdXNpbmcgVGlsZWRMYXllckNocm9taXVtOjpudW1Q
YWludGVkVGlsZXM7Ci0gICAgdXNpbmcgVGlsZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotICAgIHsKLSAgICAgICAgbV9sYXN0TmVlZHNEaXNwbGF5UmVjdCA9IHJlY3Q7Ci0g
ICAgICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5UmVjdChyZWN0KTsKLSAg
ICB9Ci0KLSAgICBjb25zdCBGbG9hdFJlY3QmIGxhc3ROZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9sYXN0TmVlZHNEaXNwbGF5UmVjdDsgfQotCi0gICAgRmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIqIGZha2VMYXllclRleHR1cmVVcGRhdGVyKCkgeyByZXR1cm4gbV9mYWtlVGV4dHVy
ZVVwZGF0ZXIuZ2V0KCk7IH0KLQotICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVN
YW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFuYWdlcjsgfQotCi0gICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlciogb2Nj
bHVzaW9uKQotICAgIHsKLSAgICAgICAgcHJlcGFyZVRvVXBkYXRlKHZpc2libGVMYXllclJlY3Qo
KSwgb2NjbHVzaW9uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBMYXllclRleHR1
cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9mYWtlVGV4dHVyZVVwZGF0ZXIuZ2V0KCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKSB7IH0KLQotICAgIFJlZlB0cjxGYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcj4gbV9mYWtlVGV4dHVyZVVwZGF0ZXI7Ci0gICAgVGV4dHVyZU1hbmFnZXIq
IG1fdGV4dHVyZU1hbmFnZXI7Ci0gICAgRmxvYXRSZWN0IG1fbGFzdE5lZWRzRGlzcGxheVJlY3Q7
Ci19OwotCi1jbGFzcyBGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHMgOiBwdWJsaWMgRmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgRmFrZVRpbGVkTGF5
ZXJXaXRoU2NhbGVkQm91bmRzKFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlcikKLSAgICAg
ICAgOiBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIHNldENvbnRlbnRCb3VuZHMoY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5k
cykgeyBtX2ZvcmNlZENvbnRlbnRCb3VuZHMgPSBjb250ZW50Qm91bmRzOyB9Ci0gICAgdmlydHVh
bCBJbnRTaXplIGNvbnRlbnRCb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZENvbnRlbnRC
b3VuZHM7IH0KLQotICAgIEZsb2F0UmVjdCB1cGRhdGVSZWN0KCkgeyByZXR1cm4gbV91cGRhdGVS
ZWN0OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBJbnRTaXplIG1fZm9yY2VkQ29udGVudEJvdW5kczsK
LX07Ci0KLXZvaWQgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnNldFJlY3RUb0ludmFsaWRhdGUo
Y29uc3QgSW50UmVjdCYgcmVjdCwgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCi17Ci0g
ICAgbV9yZWN0VG9JbnZhbGlkYXRlID0gcmVjdDsKLSAgICBtX2xheWVyID0gbGF5ZXI7Ci19Ci0K
LXZvaWQgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYsIGludCwgZmxvYXQsIEludFJlY3QqIHJl
c3VsdGluZ09wYXF1ZVJlY3QpCi17Ci0gICAgbV9wcmVwYXJlQ291bnQrKzsKLSAgICBtX2xhc3RV
cGRhdGVSZWN0ID0gY29udGVudFJlY3Q7Ci0gICAgaWYgKCFtX3JlY3RUb0ludmFsaWRhdGUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fbGF5ZXItPmludmFsaWRhdGVSZWN0KG1fcmVjdFRvSW52YWxp
ZGF0ZSk7Ci0gICAgICAgIG1fcmVjdFRvSW52YWxpZGF0ZSA9IEludFJlY3QoKTsKLSAgICAgICAg
bV9sYXllciA9IDA7Ci0gICAgfQotICAgICpyZXN1bHRpbmdPcGFxdWVSZWN0ID0gbV9vcGFxdWVQ
YWludFJlY3Q7Ci19Ci0KLWNsYXNzIEZha2VDQ1RleHR1cmVVcGRhdGVyIDogcHVibGljIENDVGV4
dHVyZVVwZGF0ZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IEZha2VDQ1RleHR1cmVVcGRhdGVy
KCkKLSAgICAgICAgOiBDQ1RleHR1cmVVcGRhdGVyKCZtX3RleHR1cmVBbGxvY2F0b3IsICZtX3Rl
eHR1cmVDb3BpZXIpCi0gICAgewotICAgIH0KLQotICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yJiB0
ZXh0dXJlQWxsb2NhdG9yKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3RleHR1cmVBbGxvY2F0
b3I7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgbV90ZXh0
dXJlQWxsb2NhdG9yOwotICAgIEZha2VUZXh0dXJlQ29waWVyIG1fdGV4dHVyZUNvcGllcjsKLX07
Ci0KIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiB7CiAgICAg
T3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0LCAxMDI0KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>