<?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>36475</bug_id>
          
          <creation_ts>2010-03-22 18:28:26 -0700</creation_ts>
          <short_desc>audio engine: add AudioFileReader files (Mac implementation)</short_desc>
          <delta_ts>2010-09-14 20:19:35 -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>Other</rep_platform>
          <op_sys>OS X 10.5</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>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jorlow</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>202871</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-03-22 18:28:26 -0700</bug_when>
    <thetext>audio engine: add AudioFileReader files (Mac implementation)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202872</commentid>
    <comment_count>1</comment_count>
      <attachid>51377</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-03-22 18:29:43 -0700</bug_when>
    <thetext>Created attachment 51377
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225178</commentid>
    <comment_count>2</comment_count>
      <attachid>51377</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-13 00:18:04 -0700</bug_when>
    <thetext>Comment on attachment 51377
Patch

My understanding is that the audio engine will occur on a branch.  Please renominate for review if I&apos;m mistaken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225421</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-05-13 12:03:17 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 51377 [details])
&gt; My understanding is that the audio engine will occur on a branch.  Please renominate for review if I&apos;m mistaken.

Although I&apos;m working in a branch, the code ultimately needs to end up in trunk.  This particular piece of code is at a very low-level and I don&apos;t expect it will subject to any javascript API design changes.  It would be good to get the lower-level more stable parts of code reviewed as I&apos;m iterating in the branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225428</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-05-13 12:10:32 -0700</bug_when>
    <thetext>The last I heard about it (on webkit-reviewers) I think the plan was to put it all in a branch and optionally clean it up there.  You&apos;d then in parallel work on the JS API.  Once that&apos;s designed, you&apos;d then start implementing the JS API in trunk and pull in (hopefully already cleaned up) bits of the engine from the branch.

In other words, stuff would only come out of the branch when there was a frontend ready to hook it up to.  The goal of this was to avoid having &quot;dead code&quot; in the tree.

As far as I know, this original plan still stands.  Am I mistaken?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225437</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-05-13 12:25:13 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The last I heard about it (on webkit-reviewers) I think the plan was to put it all in a branch and optionally clean it up there.  You&apos;d then in parallel work on the JS API.  Once that&apos;s designed, you&apos;d then start implementing the JS API in trunk and pull in (hopefully already cleaned up) bits of the engine from the branch.
&gt; 
&gt; In other words, stuff would only come out of the branch when there was a frontend ready to hook it up to.  The goal of this was to avoid having &quot;dead code&quot; in the tree.
&gt; 
&gt; As far as I know, this original plan still stands.  Am I mistaken?

That&apos;s fine, this bug and the others can wait until I get the IDL files checked in as you suggest.  I just want to make sure the bugs themselves stay open so the already reviewed ones will be ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270652</commentid>
    <comment_count>6</comment_count>
      <attachid>65750</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-27 12:16:28 -0700</bug_when>
    <thetext>Created attachment 65750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270655</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-27 12:24:31 -0700</bug_when>
    <thetext>This patch is ready to be reviewed and landed in trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276792</commentid>
    <comment_count>8</comment_count>
      <attachid>65750</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 15:25:34 -0700</bug_when>
    <thetext>Comment on attachment 65750
Patch

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

This basically looks fine to me but I have a couple of questions, plus one relatively tiny requested movement of one line of code.

&gt; WebCore/platform/audio/mac/AudioFileReaderMac.cpp:37
&gt; +#include &lt;Carbon/Carbon.h&gt;
Is it kosher to be adding dependencies on Carbon at this point? Does this code build in 64-bit mode?

&gt; WebCore/platform/audio/mac/AudioFileReaderMac.cpp:44
&gt; +    UInt32 bufferListSize = sizeof(AudioBufferList) - sizeof(AudioBuffer);
Why can&apos;t bufferListSize use a more standard type like size_t?

&gt; WebCore/platform/audio/mac/AudioFileReaderMac.cpp:193
&gt; +    AudioFloatArray bufR(numberOfFrames);
It would be nice if there were a way to avoid allocating these if we aren&apos;t mixing the input down to mono.

&gt; WebCore/platform/audio/mac/AudioFileReaderMac.cpp:225
&gt; +    float* destL = audioBus-&gt;channel(0)-&gt;data();
This variable declaration should be enclosed in the following if block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279096</commentid>
    <comment_count>9</comment_count>
      <attachid>67588</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-14 12:49:41 -0700</bug_when>
    <thetext>Created attachment 67588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279097</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-14 12:51:23 -0700</bug_when>
    <thetext>Ken, I believe I&apos;ve addressed all of your comments.  It turned out that Carbon.h was the wrong header file and I didn&apos;t need to include it anyway.  CoreServices.h was the correct one and it&apos;s already pulled in from the CoreAudio headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279116</commentid>
    <comment_count>11</comment_count>
      <attachid>67588</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-14 13:06:30 -0700</bug_when>
    <thetext>Comment on attachment 67588
Patch

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

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279349</commentid>
    <comment_count>12</comment_count>
      <attachid>67588</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-14 20:19:29 -0700</bug_when>
    <thetext>Comment on attachment 67588
Patch

Clearing flags on attachment: 67588

Committed r67530: &lt;http://trac.webkit.org/changeset/67530&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279350</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-14 20:19:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51377</attachid>
            <date>2010-03-22 18:29:43 -0700</date>
            <delta_ts>2010-08-27 12:16:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36475-20100322182942.patch</filename>
            <type>text/plain</type>
            <size>15986</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWYyZDg3NC4uYWU1MjkzMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wMy0yMiAgQ2hyaXMgUm9nZXJz
ICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGF1ZGlvIGVuZ2luZTogYWRkIEF1ZGlvRmlsZVJlYWRlciBmaWxlcyAo
TWFjIGltcGxlbWVudGF0aW9uKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzY0NzUKKworICAgICAgICBObyB0ZXN0cyBzaW5jZSBub3QgeWV0IGNvbm5l
Y3RlZCB0byBqYXZhc2NyaXB0IEFQSQorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9G
aWxlUmVhZGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Zp
bGVSZWFkZXJNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1ZGlvQnVm
ZmVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0cm95QXVkaW9CdWZmZXJMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6fkF1ZGlvRmlsZVJlYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2MpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9G
aWxlUmVhZGVyOjpjcmVhdGVCdXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1
ZGlvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0Zp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpkYXRhU2l6ZSk6CisKIDIwMTAtMDMtMDUgIENz
YWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
IGJ1aWxkZml4IGFmdGVyIHI1NTU5My4gKFRvIGZpeCBRdCAtLW1pbmltYWwgYnVpbGQuKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0ZpbGVSZWFkZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9GaWxlUmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOGFhYzdlNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9GaWxlUmVhZGVyLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVk
aW9GaWxlUmVhZGVyX2gKKyNkZWZpbmUgQXVkaW9GaWxlUmVhZGVyX2gKKworI2luY2x1ZGUgPHN0
ZGxpYi5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQnVzOworCisvLyBGb3Ig
Ym90aCBjcmVhdGUgZnVuY3Rpb25zOgorLy8gUGFzcyBpbiAwLjAgZm9yIHNhbXBsZVJhdGUgdG8g
dXNlIHRoZSBmaWxlJ3Mgc2FtcGxlLXJhdGUsIG90aGVyd2lzZSBhIHNhbXBsZS1yYXRlIGNvbnZl
cnNpb24gbWF5IGhhcHBlbi4KKy8vIFRoZSBjcmVhdGVkIGJ1ZmZlciB3aWxsIGhhdmUgaXRzIHNh
bXBsZS1yYXRlIHNldCBjb3JyZWN0bHkgdG8gdGhlIHJlc3VsdC4KKworUGFzc093blB0cjxBdWRp
b0J1cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCwgYm9vbCBt
aXhUb01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKTsKKworUGFzc093blB0cjxBdWRpb0J1cz4gY3Jl
YXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRh
U2l6ZSwgYm9vbCBtaXhUb01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisvLyBNYXkgcGFzcyBpbiAwLjAgZm9yIHNhbXBsZVJhdGUgaW4g
d2hpY2ggY2FzZSBpdCB3aWxsIHVzZSB0aGUgQXVkaW9CdXMncyBzYW1wbGVSYXRlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAordm9pZCAgd3JpdGVCdXNUb0F1ZGlvRmlsZShBdWRpb0J1
cyogYnVzLCBjb25zdCBjaGFyKiBmaWxlUGF0aCwgZG91YmxlIGZpbGVTYW1wbGVSYXRlKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9GaWxlUmVhZGVyX2gKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YjIyNmUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCkBA
IC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvRmls
ZVJlYWRlck1hYy5oIgorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0Zp
bGVSZWFkZXIuaCIKKyNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIEF1ZGlvQnVmZmVyTGlzdCogY3JlYXRlQXVkaW9CdWZmZXJMaXN0KHNp
emVfdCBudW1iZXJPZkJ1ZmZlcnMpCit7CisgICAgVUludDMyIGJ1ZmZlckxpc3RTaXplID0gc2l6
ZW9mKEF1ZGlvQnVmZmVyTGlzdCkgLSBzaXplb2YoQXVkaW9CdWZmZXIpOworICAgIGJ1ZmZlckxp
c3RTaXplICs9IG51bWJlck9mQnVmZmVycyAqIHNpemVvZihBdWRpb0J1ZmZlcik7CisKKyAgICBB
dWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QgPSBzdGF0aWNfY2FzdDxBdWRpb0J1ZmZlckxpc3Qq
PihjYWxsb2MoMSwgYnVmZmVyTGlzdFNpemUpKTsKKyAgICBpZiAoYnVmZmVyTGlzdCkKKyAgICAg
ICAgYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJPZkJ1ZmZlcnM7CisKKyAgICBy
ZXR1cm4gYnVmZmVyTGlzdDsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveUF1ZGlvQnVmZmVyTGlz
dChBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QpCit7CisgICAgZnJlZShidWZmZXJMaXN0KTsK
K30KKworQXVkaW9GaWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3QgY2hhciogZmlsZVBh
dGgpCisgICAgOiBtX2RhdGEoMCkKKyAgICAsIG1fZGF0YVNpemUoMCkKKyAgICAsIG1fZmlsZVBh
dGgoZmlsZVBhdGgpCisgICAgLCBtX2F1ZGlvRmlsZUlEKDApCisgICAgLCBtX2V4dEF1ZGlvRmls
ZVJlZigwKQoreworICAgIEZTUmVmIGZzcmVmOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEZTUGF0
aE1ha2VSZWYoKFVJbnQ4KilmaWxlUGF0aCwgJmZzcmVmLCAwKTsKKyAgICBpZiAocmVzdWx0ICE9
IG5vRXJyKQorICAgICAgICByZXR1cm47CisKKyAgICByZXN1bHQgPSBFeHRBdWRpb0ZpbGVPcGVu
KCZmc3JlZiwgJm1fZXh0QXVkaW9GaWxlUmVmKTsKKyAgICBpZiAocmVzdWx0ICE9IG5vRXJyKQor
ICAgICAgICBtX2V4dEF1ZGlvRmlsZVJlZiA9IDA7Cit9CisKK0F1ZGlvRmlsZVJlYWRlcjo6QXVk
aW9GaWxlUmVhZGVyKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKKyAgICA6IG1f
ZGF0YShkYXRhKQorICAgICwgbV9kYXRhU2l6ZShkYXRhU2l6ZSkKKyAgICAsIG1fZmlsZVBhdGgo
MCkKKyAgICAsIG1fYXVkaW9GaWxlSUQoMCkKKyAgICAsIG1fZXh0QXVkaW9GaWxlUmVmKDApCit7
CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9GaWxlT3BlbldpdGhDYWxsYmFja3ModGhpcywg
cmVhZFByb2MsIDAsIGdldFNpemVQcm9jLCAwLCAwLCAmbV9hdWRpb0ZpbGVJRCk7CisKKyAgICBp
ZiAocmVzdWx0ICE9IG5vRXJyKQorICAgICAgICByZXR1cm47CisKKyAgICByZXN1bHQgPSBFeHRB
dWRpb0ZpbGVXcmFwQXVkaW9GaWxlSUQobV9hdWRpb0ZpbGVJRCwgZmFsc2UsICZtX2V4dEF1ZGlv
RmlsZVJlZik7CisgICAgaWYgKHJlc3VsdCAhPSBub0VycikKKyAgICAgICAgbV9leHRBdWRpb0Zp
bGVSZWYgPSAwOworfQorCitBdWRpb0ZpbGVSZWFkZXI6On5BdWRpb0ZpbGVSZWFkZXIoKQorewor
ICAgIGlmIChtX2V4dEF1ZGlvRmlsZVJlZikKKyAgICAgICAgRXh0QXVkaW9GaWxlRGlzcG9zZSht
X2V4dEF1ZGlvRmlsZVJlZik7CisKKyAgICBtX2V4dEF1ZGlvRmlsZVJlZiA9IDA7CisKKyAgICBp
ZiAobV9hdWRpb0ZpbGVJRCkKKyAgICAgICAgQXVkaW9GaWxlQ2xvc2UobV9hdWRpb0ZpbGVJRCk7
CisgICAgICAgIAorICAgIG1fYXVkaW9GaWxlSUQgPSAwOworfQorCitPU1N0YXR1cyBBdWRpb0Zp
bGVSZWFkZXI6OnJlYWRQcm9jKHZvaWQqIGNsaWVudERhdGEsIFNJbnQ2NCBwb3NpdGlvbiwgVUlu
dDMyIHJlcXVlc3RDb3VudCwgdm9pZCogYnVmZmVyLCBVSW50MzIqIGFjdHVhbENvdW50KQorewor
ICAgIEF1ZGlvRmlsZVJlYWRlciogYXVkaW9GaWxlUmVhZGVyID0gc3RhdGljX2Nhc3Q8QXVkaW9G
aWxlUmVhZGVyKj4oY2xpZW50RGF0YSk7CisKKyAgICBzaXplX3QgZGF0YVNpemUgPSBhdWRpb0Zp
bGVSZWFkZXItPmRhdGFTaXplKCk7CisgICAgY29uc3Qgdm9pZCogZGF0YSA9IGF1ZGlvRmlsZVJl
YWRlci0+ZGF0YSgpOworICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IDA7CisKKyAgICBpZiAocG9z
aXRpb24gPCBkYXRhU2l6ZSkgeworICAgICAgICBzaXplX3QgYnl0ZXNBdmFpbGFibGUgPSBkYXRh
U2l6ZSAtIHBvc2l0aW9uOworICAgICAgICBieXRlc1RvUmVhZCA9IHJlcXVlc3RDb3VudCA8PSBi
eXRlc0F2YWlsYWJsZSA/IHJlcXVlc3RDb3VudCA6IGJ5dGVzQXZhaWxhYmxlOworICAgICAgICBt
ZW1jcHkoYnVmZmVyLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSkgKyBwb3NpdGlvbiwg
Ynl0ZXNUb1JlYWQpOworICAgIH0gZWxzZQorICAgICAgICBieXRlc1RvUmVhZCA9IDA7CisKKyAg
ICBpZiAoYWN0dWFsQ291bnQpCisgICAgICAgICphY3R1YWxDb3VudCA9IGJ5dGVzVG9SZWFkOwor
CisgICAgcmV0dXJuIG5vRXJyOworfQorCitTSW50NjQgQXVkaW9GaWxlUmVhZGVyOjpnZXRTaXpl
UHJvYyh2b2lkKiBjbGllbnREYXRhKQoreworICAgIEF1ZGlvRmlsZVJlYWRlciogYXVkaW9GaWxl
UmVhZGVyID0gc3RhdGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4oY2xpZW50RGF0YSk7CisgICAg
cmV0dXJuIGF1ZGlvRmlsZVJlYWRlci0+ZGF0YVNpemUoKTsKK30KKworUGFzc093blB0cjxBdWRp
b0J1cz4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoZG91YmxlIHNhbXBsZVJhdGUsIGJvb2wg
bWl4VG9Nb25vKQoreworICAgIGlmICghbV9leHRBdWRpb0ZpbGVSZWYpCisgICAgICAgIHJldHVy
biAwOworCisgICAgLy8gR2V0IGZpbGUncyBkYXRhIGZvcm1hdAorICAgIFVJbnQzMiBzaXplID0g
c2l6ZW9mKG1fZmlsZURhdGFGb3JtYXQpOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEV4dEF1ZGlv
RmlsZUdldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlf
RmlsZURhdGFGb3JtYXQsICZzaXplLCAmbV9maWxlRGF0YUZvcm1hdCk7CisgICAgaWYgKHJlc3Vs
dCAhPSBub0VycikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBOdW1iZXIgb2YgY2hhbm5l
bHMKKyAgICBzaXplX3QgbnVtYmVyT2ZDaGFubmVscyA9IG1fZmlsZURhdGFGb3JtYXQubUNoYW5u
ZWxzUGVyRnJhbWU7CisKKyAgICAvLyBOdW1iZXIgb2YgZnJhbWVzCisgICAgU0ludDY0IG51bWJl
ck9mRnJhbWVzID0gMDsKKyAgICBzaXplID0gc2l6ZW9mKG51bWJlck9mRnJhbWVzKTsKKyAgICBy
ZXN1bHQgPSBFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1
ZGlvRmlsZVByb3BlcnR5X0ZpbGVMZW5ndGhGcmFtZXMsICZzaXplLCAmbnVtYmVyT2ZGcmFtZXMp
OworICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8g
U2FtcGxlLXJhdGUKKyAgICBkb3VibGUgZmlsZVNhbXBsZVJhdGUgPSBtX2ZpbGVEYXRhRm9ybWF0
Lm1TYW1wbGVSYXRlOworCisgICAgLy8gTWFrZSBjbGllbnQgZm9ybWF0IHNhbWUgbnVtYmVyIG9m
IGNoYW5uZWxzIGFzIGZpbGUgZm9ybWF0LCBidXQgdHdlYWsgYSBmZXcgdGhpbmdzLgorICAgIC8v
IENsaWVudCBmb3JtYXQgd2lsbCBiZSBsaW5lYXIgUENNIChjYW5vbmljYWwpLCBhbmQgcG90ZW50
aWFsbHkgY2hhbmdlIHNhbXBsZS1yYXRlLgorICAgIG1fY2xpZW50RGF0YUZvcm1hdCA9IG1fZmls
ZURhdGFGb3JtYXQ7CisKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdElEID0ga0F1ZGlv
Rm9ybWF0TGluZWFyUENNOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tRm9ybWF0RmxhZ3MgPSBr
QXVkaW9Gb3JtYXRGbGFnc0Nhbm9uaWNhbDsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUJpdHNQ
ZXJDaGFubmVsID0gOCAqIHNpemVvZihBdWRpb1NhbXBsZVR5cGUpOworICAgIG1fY2xpZW50RGF0
YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9jbGll
bnREYXRhRm9ybWF0Lm1GcmFtZXNQZXJQYWNrZXQgPSAxOworICAgIG1fY2xpZW50RGF0YUZvcm1h
dC5tQnl0ZXNQZXJQYWNrZXQgPSBzaXplb2YoQXVkaW9TYW1wbGVUeXBlKTsKKyAgICBtX2NsaWVu
dERhdGFGb3JtYXQubUJ5dGVzUGVyRnJhbWUgPSBzaXplb2YoQXVkaW9TYW1wbGVUeXBlKTsKKyAg
ICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc05v
bkludGVybGVhdmVkOworCisgICAgaWYgKHNhbXBsZVJhdGUpCisgICAgICAgIG1fY2xpZW50RGF0
YUZvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisKKyAgICByZXN1bHQgPSBFeHRBdWRp
b0ZpbGVTZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVByb3BlcnR5
X0NsaWVudERhdGFGb3JtYXQsIHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pLCAm
bV9jbGllbnREYXRhRm9ybWF0KTsKKyAgICBpZiAocmVzdWx0ICE9IG5vRXJyKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIC8vIENoYW5nZSBudW1iZXJPZkZyYW1lcyB0byBkZXN0aW5hdGlvbiBz
YW1wbGUtcmF0ZQorICAgIG51bWJlck9mRnJhbWVzID0gbnVtYmVyT2ZGcmFtZXMgKiAobV9jbGll
bnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlIC8gZmlsZVNhbXBsZVJhdGUpOworCisgICAgc2l6ZV90
IGJ1c0NoYW5uZWxDb3VudCA9IG1peFRvTW9ubyA/IDEgOiBudW1iZXJPZkNoYW5uZWxzOworCisg
ICAgLy8gQ3JlYXRlIEF1ZGlvQnVzIHdoZXJlIHdlJ2xsIHB1dCB0aGUgUENNIGF1ZGlvIGRhdGEK
KyAgICBBdWRpb0J1cyogYXVkaW9CdXMgPSBuZXcgQXVkaW9CdXMoYnVzQ2hhbm5lbENvdW50LCBu
dW1iZXJPZkZyYW1lcyk7CisgICAgYXVkaW9CdXMtPnNldFNhbXBsZVJhdGUobV9jbGllbnREYXRh
Rm9ybWF0Lm1TYW1wbGVSYXRlKTsgLy8gc2F2ZSBmb3IgbGF0ZXIKKworICAgIEF1ZGlvRmxvYXRB
cnJheSBidWZMKG51bWJlck9mRnJhbWVzKTsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgYnVmUihudW1i
ZXJPZkZyYW1lcyk7CisgICAgZmxvYXQqIGJ1ZmZlckwgPSBidWZMOworICAgIGZsb2F0KiBidWZm
ZXJSID0gYnVmUjsKKworICAgIC8vIFNldHVwIEF1ZGlvQnVmZmVyTGlzdCBpbiBwcmVwYXJhdGlv
biBmb3IgcmVhZGluZworICAgIEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCA9IGNyZWF0ZUF1
ZGlvQnVmZmVyTGlzdChudW1iZXJPZkNoYW5uZWxzKTsKKworICAgIGlmIChtaXhUb01vbm8gJiYg
bnVtYmVyT2ZDaGFubmVscyA9PSAyKSB7CisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzBd
Lm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1E
YXRhQnl0ZVNpemUgPSBudW1iZXJPZkZyYW1lcyAqIHNpemVvZihmbG9hdCk7CisgICAgICAgIGJ1
ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhID0gYnVmZmVyTDsKKworICAgICAgICBidWZmZXJM
aXN0LT5tQnVmZmVyc1sxXS5tTnVtYmVyQ2hhbm5lbHMgPSAxOworICAgICAgICBidWZmZXJMaXN0
LT5tQnVmZmVyc1sxXS5tRGF0YUJ5dGVTaXplID0gbnVtYmVyT2ZGcmFtZXMgKiBzaXplb2YoZmxv
YXQpOworICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1sxXS5tRGF0YSA9IGJ1ZmZlclI7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtaXhUb01vbm8gfHwgbnVtYmVyT2ZDaGFubmVs
cyA9PSAxKTsKKworICAgICAgICAvLyBmb3IgVHJ1ZS1zdGVyZW8gKG51bWJlck9mQ2hhbm5lbHMg
PT0gNCkKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyAr
K2kpIHsKKyAgICAgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFubmVs
cyA9IDE7CisgICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXpl
ID0gbnVtYmVyT2ZGcmFtZXMgKiBzaXplb2YoZmxvYXQpOworICAgICAgICAgICAgYnVmZmVyTGlz
dC0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBhdWRpb0J1cy0+Y2hhbm5lbChpKS0+ZGF0YSgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmVhZCBmcm9tIHRoZSBmaWxlIChvciBpbi1tZW1vcnkg
dmVyc2lvbikKKyAgICBVSW50MzIgZnJhbWVzVG9SZWFkID0gbnVtYmVyT2ZGcmFtZXM7CisgICAg
cmVzdWx0ID0gRXh0QXVkaW9GaWxlUmVhZChtX2V4dEF1ZGlvRmlsZVJlZiwgJmZyYW1lc1RvUmVh
ZCwgYnVmZmVyTGlzdCk7CisgICAgaWYgKHJlc3VsdCAhPSBub0VycikKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBmbG9hdCogZGVzdEwgPSBhdWRpb0J1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOwor
CisgICAgaWYgKG1peFRvTW9ubyAmJiBudW1iZXJPZkNoYW5uZWxzID09IDIpIHsKKyAgICAgICAg
Ly8gTWl4IHN0ZXJlbyBkb3duIHRvIG1vbm8KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkZyYW1lczsgaSsrKQorICAgICAgICAgICAgZGVzdExbaV0gPSAwLjUgKiAoYnVm
ZmVyTFtpXSArIGJ1ZmZlclJbaV0pOworICAgIH0KKworICAgIC8vIENsZWFudXAKKyAgICBkZXN0
cm95QXVkaW9CdWZmZXJMaXN0KGJ1ZmZlckxpc3QpOworCisgICAgcmV0dXJuIGF1ZGlvQnVzOwor
fQorCitQYXNzT3duUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNo
YXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAg
QXVkaW9GaWxlUmVhZGVyIHJlYWRlcihmaWxlUGF0aCk7CisgICAgcmV0dXJuIHJlYWRlci5jcmVh
dGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKK30KKworUGFzc093blB0cjxBdWRpb0J1cz4g
Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBk
YXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAgIEF1ZGlv
RmlsZVJlYWRlciByZWFkZXIoZGF0YSwgZGF0YVNpemUpOworICAgIHJldHVybiByZWFkZXIuY3Jl
YXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7Cit9CisKK30gLy8gV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmEwMjVmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmgKQEAgLTAsMCArMSw2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQXVkaW9GaWxlUmVhZGVyTWFjX2gKKyNkZWZpbmUgQXVkaW9GaWxlUmVh
ZGVyTWFjX2gKKworI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb0ZpbGUuaD4KKyNpbmNsdWRl
IDxBdWRpb1Rvb2xib3gvRXh0ZW5kZWRBdWRpb0ZpbGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBXcmFwcGVyIGNsYXNzIGZvciBBdWRpb0ZpbGUgYW5kIEV4dEF1ZGlvRmlsZSBDb3Jl
QXVkaW8gQVBJcyBmb3IgcmVhZGluZyBmaWxlcyBhbmQgaW4tbWVtb3J5IHZlcnNpb25zIG9mIHRo
ZW0uLi4KKworY2xhc3MgQXVkaW9GaWxlUmVhZGVyIHsKK3B1YmxpYzoKKyAgICBBdWRpb0ZpbGVS
ZWFkZXIoY29uc3QgY2hhciogZmlsZVBhdGgpOworICAgIEF1ZGlvRmlsZVJlYWRlcihjb25zdCB2
b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpOworICAgIH5BdWRpb0ZpbGVSZWFkZXIoKTsKKwor
ICAgIC8vIFJldHVybnMgMCBpZiBlcnJvcgorICAgIFBhc3NPd25QdHI8QXVkaW9CdXM+IGNyZWF0
ZUJ1cyhkb3VibGUgc2FtcGxlUmF0ZSwgYm9vbCBtaXhUb01vbm8pOworCisgICAgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIHNpemVfdCBkYXRhU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YVNpemU7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgT1NT
dGF0dXMgcmVhZFByb2Modm9pZCogY2xpZW50RGF0YSwgU0ludDY0IHBvc2l0aW9uLCBVSW50MzIg
cmVxdWVzdENvdW50LCB2b2lkKiBidWZmZXIsIFVJbnQzMiogYWN0dWFsQ291bnQpOworICAgIHN0
YXRpYyBTSW50NjQgZ2V0U2l6ZVByb2Modm9pZCogY2xpZW50RGF0YSk7CisKKyAgICBjb25zdCB2
b2lkKiBtX2RhdGE7CisgICAgc2l6ZV90IG1fZGF0YVNpemU7CisgICAgY29uc3QgY2hhciogbV9m
aWxlUGF0aDsKKworICAgIEF1ZGlvRmlsZUlEIG1fYXVkaW9GaWxlSUQ7CisgICAgRXh0QXVkaW9G
aWxlUmVmIG1fZXh0QXVkaW9GaWxlUmVmOworCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uIG1fZmlsZURhdGFGb3JtYXQ7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1f
Y2xpZW50RGF0YUZvcm1hdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyAKKyNlbmRp
ZiAvLyBBdWRpb0ZpbGVSZWFkZXJNYWNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65750</attachid>
            <date>2010-08-27 12:16:28 -0700</date>
            <delta_ts>2010-09-14 12:49:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36475-20100827121627.patch</filename>
            <type>text/plain</type>
            <size>16539</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjI0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDgtMjcgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBBdWRpb0ZpbGVSZWFkZXIgZmlsZXMgKE1hYyBpbXBsZW1lbnRhdGlv
bikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDc1
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIGF1ZGlvIEFQSSBpcyBub3QgeWV0IGltcGxl
bWVudGVkLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW86IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0F1ZGlvRmlsZVJlYWRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9hdWRpby9tYWM6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Zp
bGVSZWFkZXJNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1ZGlvQnVm
ZmVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0cm95QXVkaW9CdWZmZXJMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6fkF1ZGlvRmlsZVJlYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2MpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9G
aWxlUmVhZGVyOjpjcmVhdGVCdXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1
ZGlvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0Zp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpkYXRhU2l6ZSk6CisKIDIwMTAtMDgtMjcgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgVG9ueSBDaGFuZy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9GaWxlUmVh
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0ZpbGVSZWFk
ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9GaWxlUmVh
ZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvRmlsZVJl
YWRlcl9oCisjZGVmaW5lIEF1ZGlvRmlsZVJlYWRlcl9oCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKKworLy8gRm9yIGJvdGggY3Jl
YXRlIGZ1bmN0aW9uczoKKy8vIFBhc3MgaW4gMC4wIGZvciBzYW1wbGVSYXRlIHRvIHVzZSB0aGUg
ZmlsZSdzIHNhbXBsZS1yYXRlLCBvdGhlcndpc2UgYSBzYW1wbGUtcmF0ZSBjb252ZXJzaW9uIHRv
IHRoZSByZXF1ZXN0ZWQKKy8vIHNhbXBsZVJhdGUgd2lsbCBiZSBtYWRlIChpZiBpdCBkb2Vzbid0
IGFscmVhZHkgbWF0Y2ggdGhlIGZpbGUncyBzYW1wbGUtcmF0ZSkuCisvLyBUaGUgY3JlYXRlZCBi
dWZmZXIgd2lsbCBoYXZlIGl0cyBzYW1wbGUtcmF0ZSBzZXQgY29ycmVjdGx5IHRvIHRoZSByZXN1
bHQuCisKK0F1ZGlvQnVzKiBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZG91YmxlIHNhbXBsZVJh
dGUpOworCitBdWRpb0J1cyogY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxl
UGF0aCwgYm9vbCBtaXhUb01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisvLyBNYXkgcGFzcyBpbiAwLjAgZm9yIHNhbXBsZVJhdGUgaW4g
d2hpY2ggY2FzZSBpdCB3aWxsIHVzZSB0aGUgQXVkaW9CdXMncyBzYW1wbGVSYXRlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAordm9pZCB3cml0ZUJ1c1RvQXVkaW9GaWxlKEF1ZGlvQnVz
KiBidXMsIGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBkb3VibGUgZmlsZVNhbXBsZVJhdGUpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb0ZpbGVSZWFkZXJfaApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxl
UmVhZGVyTWFjLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9GaWxl
UmVhZGVyTWFjLmgiCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvRmls
ZVJlYWRlci5oIgorI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KKyNpbmNsdWRlIDxDb3JlRm91
bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBBdWRpb0J1ZmZlckxpc3QqIGNyZWF0ZUF1ZGlvQnVmZmVyTGlzdChzaXplX3QgbnVtYmVyT2ZC
dWZmZXJzKQoreworICAgIFVJbnQzMiBidWZmZXJMaXN0U2l6ZSA9IHNpemVvZihBdWRpb0J1ZmZl
ckxpc3QpIC0gc2l6ZW9mKEF1ZGlvQnVmZmVyKTsKKyAgICBidWZmZXJMaXN0U2l6ZSArPSBudW1i
ZXJPZkJ1ZmZlcnMgKiBzaXplb2YoQXVkaW9CdWZmZXIpOworCisgICAgQXVkaW9CdWZmZXJMaXN0
KiBidWZmZXJMaXN0ID0gc3RhdGljX2Nhc3Q8QXVkaW9CdWZmZXJMaXN0Kj4oY2FsbG9jKDEsIGJ1
ZmZlckxpc3RTaXplKSk7CisgICAgaWYgKGJ1ZmZlckxpc3QpCisgICAgICAgIGJ1ZmZlckxpc3Qt
Pm1OdW1iZXJCdWZmZXJzID0gbnVtYmVyT2ZCdWZmZXJzOworCisgICAgcmV0dXJuIGJ1ZmZlckxp
c3Q7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoQXVkaW9CdWZmZXJM
aXN0KiBidWZmZXJMaXN0KQoreworICAgIGZyZWUoYnVmZmVyTGlzdCk7Cit9CisKK0F1ZGlvRmls
ZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKGNvbnN0IGNoYXIqIGZpbGVQYXRoKQorICAgIDogbV9k
YXRhKDApCisgICAgLCBtX2RhdGFTaXplKDApCisgICAgLCBtX2ZpbGVQYXRoKGZpbGVQYXRoKQor
ICAgICwgbV9hdWRpb0ZpbGVJRCgwKQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYoMCkKK3sKKyAg
ICBGU1JlZiBmc3JlZjsKKyAgICBPU1N0YXR1cyByZXN1bHQgPSBGU1BhdGhNYWtlUmVmKChVSW50
OCopZmlsZVBhdGgsICZmc3JlZiwgMCk7CisgICAgaWYgKHJlc3VsdCAhPSBub0VycikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ0ZVUkxSZWYgdXJsUmVmID0gQ0ZVUkxDcmVhdGVGcm9tRlNSZWYo
MCwgJmZzcmVmKTsKKyAgICBpZiAoIXVybFJlZikKKyAgICAgICAgcmV0dXJuOworCisgICAgRXh0
QXVkaW9GaWxlT3BlblVSTCh1cmxSZWYsICZtX2V4dEF1ZGlvRmlsZVJlZik7CisKKyAgICBpZiAo
dXJsUmVmKQorICAgICAgICBDRlJlbGVhc2UodXJsUmVmKTsKK30KKworQXVkaW9GaWxlUmVhZGVy
OjpBdWRpb0ZpbGVSZWFkZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQorICAg
IDogbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFTaXplKGRhdGFTaXplKQorICAgICwgbV9maWxl
UGF0aCgwKQorICAgICwgbV9hdWRpb0ZpbGVJRCgwKQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYo
MCkKK3sKKyAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb0ZpbGVPcGVuV2l0aENhbGxiYWNrcyh0
aGlzLCByZWFkUHJvYywgMCwgZ2V0U2l6ZVByb2MsIDAsIDAsICZtX2F1ZGlvRmlsZUlEKTsKKwor
ICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpCisgICAgICAgIHJldHVybjsKKworICAgIHJlc3VsdCA9
IEV4dEF1ZGlvRmlsZVdyYXBBdWRpb0ZpbGVJRChtX2F1ZGlvRmlsZUlELCBmYWxzZSwgJm1fZXh0
QXVkaW9GaWxlUmVmKTsKKyAgICBpZiAocmVzdWx0ICE9IG5vRXJyKQorICAgICAgICBtX2V4dEF1
ZGlvRmlsZVJlZiA9IDA7Cit9CisKK0F1ZGlvRmlsZVJlYWRlcjo6fkF1ZGlvRmlsZVJlYWRlcigp
Cit7CisgICAgaWYgKG1fZXh0QXVkaW9GaWxlUmVmKQorICAgICAgICBFeHRBdWRpb0ZpbGVEaXNw
b3NlKG1fZXh0QXVkaW9GaWxlUmVmKTsKKworICAgIG1fZXh0QXVkaW9GaWxlUmVmID0gMDsKKwor
ICAgIGlmIChtX2F1ZGlvRmlsZUlEKQorICAgICAgICBBdWRpb0ZpbGVDbG9zZShtX2F1ZGlvRmls
ZUlEKTsKKyAgICAgICAgCisgICAgbV9hdWRpb0ZpbGVJRCA9IDA7Cit9CisKK09TU3RhdHVzIEF1
ZGlvRmlsZVJlYWRlcjo6cmVhZFByb2Modm9pZCogY2xpZW50RGF0YSwgU0ludDY0IHBvc2l0aW9u
LCBVSW50MzIgcmVxdWVzdENvdW50LCB2b2lkKiBidWZmZXIsIFVJbnQzMiogYWN0dWFsQ291bnQp
Cit7CisgICAgQXVkaW9GaWxlUmVhZGVyKiBhdWRpb0ZpbGVSZWFkZXIgPSBzdGF0aWNfY2FzdDxB
dWRpb0ZpbGVSZWFkZXIqPihjbGllbnREYXRhKTsKKworICAgIHNpemVfdCBkYXRhU2l6ZSA9IGF1
ZGlvRmlsZVJlYWRlci0+ZGF0YVNpemUoKTsKKyAgICBjb25zdCB2b2lkKiBkYXRhID0gYXVkaW9G
aWxlUmVhZGVyLT5kYXRhKCk7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gMDsKKworICAgIGlm
IChzdGF0aWNfY2FzdDxVSW50NjQ+KHBvc2l0aW9uKSA8IGRhdGFTaXplKSB7CisgICAgICAgIHNp
emVfdCBieXRlc0F2YWlsYWJsZSA9IGRhdGFTaXplIC0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihwb3Np
dGlvbik7CisgICAgICAgIGJ5dGVzVG9SZWFkID0gcmVxdWVzdENvdW50IDw9IGJ5dGVzQXZhaWxh
YmxlID8gcmVxdWVzdENvdW50IDogYnl0ZXNBdmFpbGFibGU7CisgICAgICAgIG1lbWNweShidWZm
ZXIsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSArIHBvc2l0aW9uLCBieXRlc1RvUmVh
ZCk7CisgICAgfSBlbHNlCisgICAgICAgIGJ5dGVzVG9SZWFkID0gMDsKKworICAgIGlmIChhY3R1
YWxDb3VudCkKKyAgICAgICAgKmFjdHVhbENvdW50ID0gYnl0ZXNUb1JlYWQ7CisKKyAgICByZXR1
cm4gbm9FcnI7Cit9CisKK1NJbnQ2NCBBdWRpb0ZpbGVSZWFkZXI6OmdldFNpemVQcm9jKHZvaWQq
IGNsaWVudERhdGEpCit7CisgICAgQXVkaW9GaWxlUmVhZGVyKiBhdWRpb0ZpbGVSZWFkZXIgPSBz
dGF0aWNfY2FzdDxBdWRpb0ZpbGVSZWFkZXIqPihjbGllbnREYXRhKTsKKyAgICByZXR1cm4gYXVk
aW9GaWxlUmVhZGVyLT5kYXRhU2l6ZSgpOworfQorCitBdWRpb0J1cyogQXVkaW9GaWxlUmVhZGVy
OjpjcmVhdGVCdXMoZG91YmxlIHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vKQoreworICAgIGlm
ICghbV9leHRBdWRpb0ZpbGVSZWYpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gR2V0IGZp
bGUncyBkYXRhIGZvcm1hdAorICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG1fZmlsZURhdGFGb3Jt
YXQpOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEV4dEF1ZGlvRmlsZUdldFByb3BlcnR5KG1fZXh0
QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlfRmlsZURhdGFGb3JtYXQsICZzaXpl
LCAmbV9maWxlRGF0YUZvcm1hdCk7CisgICAgaWYgKHJlc3VsdCAhPSBub0VycikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAvLyBOdW1iZXIgb2YgY2hhbm5lbHMKKyAgICBzaXplX3QgbnVtYmVy
T2ZDaGFubmVscyA9IG1fZmlsZURhdGFGb3JtYXQubUNoYW5uZWxzUGVyRnJhbWU7CisKKyAgICAv
LyBOdW1iZXIgb2YgZnJhbWVzCisgICAgU0ludDY0IG51bWJlck9mRnJhbWVzNjQgPSAwOworICAg
IHNpemUgPSBzaXplb2YobnVtYmVyT2ZGcmFtZXM2NCk7CisgICAgcmVzdWx0ID0gRXh0QXVkaW9G
aWxlR2V0UHJvcGVydHkobV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRBdWRpb0ZpbGVQcm9wZXJ0eV9G
aWxlTGVuZ3RoRnJhbWVzLCAmc2l6ZSwgJm51bWJlck9mRnJhbWVzNjQpOworICAgIGlmIChyZXN1
bHQgIT0gbm9FcnIpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gU2FtcGxlLXJhdGUKKyAg
ICBkb3VibGUgZmlsZVNhbXBsZVJhdGUgPSBtX2ZpbGVEYXRhRm9ybWF0Lm1TYW1wbGVSYXRlOwor
CisgICAgLy8gTWFrZSBjbGllbnQgZm9ybWF0IHNhbWUgbnVtYmVyIG9mIGNoYW5uZWxzIGFzIGZp
bGUgZm9ybWF0LCBidXQgdHdlYWsgYSBmZXcgdGhpbmdzLgorICAgIC8vIENsaWVudCBmb3JtYXQg
d2lsbCBiZSBsaW5lYXIgUENNIChjYW5vbmljYWwpLCBhbmQgcG90ZW50aWFsbHkgY2hhbmdlIHNh
bXBsZS1yYXRlLgorICAgIG1fY2xpZW50RGF0YUZvcm1hdCA9IG1fZmlsZURhdGFGb3JtYXQ7CisK
KyAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdElEID0ga0F1ZGlvRm9ybWF0TGluZWFyUENN
OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tRm9ybWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRGbGFn
c0Nhbm9uaWNhbDsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUJpdHNQZXJDaGFubmVsID0gOCAq
IHNpemVvZihBdWRpb1NhbXBsZVR5cGUpOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQ2hhbm5l
bHNQZXJGcmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1G
cmFtZXNQZXJQYWNrZXQgPSAxOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQnl0ZXNQZXJQYWNr
ZXQgPSBzaXplb2YoQXVkaW9TYW1wbGVUeXBlKTsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUJ5
dGVzUGVyRnJhbWUgPSBzaXplb2YoQXVkaW9TYW1wbGVUeXBlKTsKKyAgICBtX2NsaWVudERhdGFG
b3JtYXQubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOwor
CisgICAgaWYgKHNhbXBsZVJhdGUpCisgICAgICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tU2FtcGxl
UmF0ZSA9IHNhbXBsZVJhdGU7CisKKyAgICByZXN1bHQgPSBFeHRBdWRpb0ZpbGVTZXRQcm9wZXJ0
eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVByb3BlcnR5X0NsaWVudERhdGFGb3Jt
YXQsIHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pLCAmbV9jbGllbnREYXRhRm9y
bWF0KTsKKyAgICBpZiAocmVzdWx0ICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IC8vIENoYW5nZSBudW1iZXJPZkZyYW1lczY0IHRvIGRlc3RpbmF0aW9uIHNhbXBsZS1yYXRlCisg
ICAgbnVtYmVyT2ZGcmFtZXM2NCA9IG51bWJlck9mRnJhbWVzNjQgKiAobV9jbGllbnREYXRhRm9y
bWF0Lm1TYW1wbGVSYXRlIC8gZmlsZVNhbXBsZVJhdGUpOworICAgIHNpemVfdCBudW1iZXJPZkZy
YW1lcyA9IHN0YXRpY19jYXN0PHNpemVfdD4obnVtYmVyT2ZGcmFtZXM2NCk7CisKKyAgICBzaXpl
X3QgYnVzQ2hhbm5lbENvdW50ID0gbWl4VG9Nb25vID8gMSA6IG51bWJlck9mQ2hhbm5lbHM7CisK
KyAgICAvLyBDcmVhdGUgQXVkaW9CdXMgd2hlcmUgd2UnbGwgcHV0IHRoZSBQQ00gYXVkaW8gZGF0
YQorICAgIEF1ZGlvQnVzKiBhdWRpb0J1cyA9IG5ldyBBdWRpb0J1cyhidXNDaGFubmVsQ291bnQs
IG51bWJlck9mRnJhbWVzKTsKKyAgICBhdWRpb0J1cy0+c2V0U2FtcGxlUmF0ZShtX2NsaWVudERh
dGFGb3JtYXQubVNhbXBsZVJhdGUpOyAvLyBzYXZlIGZvciBsYXRlcgorCisgICAgQXVkaW9GbG9h
dEFycmF5IGJ1ZkwobnVtYmVyT2ZGcmFtZXMpOworICAgIEF1ZGlvRmxvYXRBcnJheSBidWZSKG51
bWJlck9mRnJhbWVzKTsKKyAgICBmbG9hdCogYnVmZmVyTCA9IGJ1ZkwuZGF0YSgpOworICAgIGZs
b2F0KiBidWZmZXJSID0gYnVmUi5kYXRhKCk7CisKKyAgICAvLyBTZXR1cCBBdWRpb0J1ZmZlckxp
c3QgaW4gcHJlcGFyYXRpb24gZm9yIHJlYWRpbmcKKyAgICBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZl
ckxpc3QgPSBjcmVhdGVBdWRpb0J1ZmZlckxpc3QobnVtYmVyT2ZDaGFubmVscyk7CisKKyAgICBp
ZiAobWl4VG9Nb25vICYmIG51bWJlck9mQ2hhbm5lbHMgPT0gMikgeworICAgICAgICBidWZmZXJM
aXN0LT5tQnVmZmVyc1swXS5tTnVtYmVyQ2hhbm5lbHMgPSAxOworICAgICAgICBidWZmZXJMaXN0
LT5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplID0gbnVtYmVyT2ZGcmFtZXMgKiBzaXplb2YoZmxv
YXQpOworICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1swXS5tRGF0YSA9IGJ1ZmZlckw7CisK
KyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMV0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAg
ICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMV0ubURhdGFCeXRlU2l6ZSA9IG51bWJlck9mRnJh
bWVzICogc2l6ZW9mKGZsb2F0KTsKKyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMV0ubURh
dGEgPSBidWZmZXJSOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCghbWl4VG9Nb25vIHx8
IG51bWJlck9mQ2hhbm5lbHMgPT0gMSk7CisKKyAgICAgICAgLy8gZm9yIFRydWUtc3RlcmVvIChu
dW1iZXJPZkNoYW5uZWxzID09IDQpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tp
XS5tTnVtYmVyQ2hhbm5lbHMgPSAxOworICAgICAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNb
aV0ubURhdGFCeXRlU2l6ZSA9IG51bWJlck9mRnJhbWVzICogc2l6ZW9mKGZsb2F0KTsKKyAgICAg
ICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhID0gYXVkaW9CdXMtPmNoYW5uZWwo
aSktPmRhdGEoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJlYWQgZnJvbSB0aGUgZmls
ZSAob3IgaW4tbWVtb3J5IHZlcnNpb24pCisgICAgVUludDMyIGZyYW1lc1RvUmVhZCA9IG51bWJl
ck9mRnJhbWVzOworICAgIHJlc3VsdCA9IEV4dEF1ZGlvRmlsZVJlYWQobV9leHRBdWRpb0ZpbGVS
ZWYsICZmcmFtZXNUb1JlYWQsIGJ1ZmZlckxpc3QpOworICAgIGlmIChyZXN1bHQgIT0gbm9FcnIp
CisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQqIGRlc3RMID0gYXVkaW9CdXMtPmNoYW5u
ZWwoMCktPmRhdGEoKTsKKworICAgIGlmIChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9
PSAyKSB7CisgICAgICAgIC8vIE1peCBzdGVyZW8gZG93biB0byBtb25vCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGcmFtZXM7IGkrKykKKyAgICAgICAgICAgIGRlc3RM
W2ldID0gMC41ZiAqIChidWZmZXJMW2ldICsgYnVmZmVyUltpXSk7CisgICAgfQorCisgICAgLy8g
Q2xlYW51cAorICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7CisKKyAgICBy
ZXR1cm4gYXVkaW9CdXM7Cit9CisKK0F1ZGlvQnVzKiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGNv
bnN0IGNoYXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZG91YmxlIHNhbXBsZVJhdGUpCit7
CisgICAgQXVkaW9GaWxlUmVhZGVyIHJlYWRlcihmaWxlUGF0aCk7CisgICAgcmV0dXJuIHJlYWRl
ci5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKK30KKworQXVkaW9CdXMqIGNyZWF0
ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNp
emUsIGJvb2wgbWl4VG9Nb25vLCBkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICBBdWRpb0ZpbGVS
ZWFkZXIgcmVhZGVyKGRhdGEsIGRhdGFTaXplKTsKKyAgICByZXR1cm4gcmVhZGVyLmNyZWF0ZUJ1
cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworfQorCit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b0ZpbGVSZWFkZXJNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb0ZpbGVSZWFkZXJNYWMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBdWRpb0ZpbGVSZWFkZXJNYWNfaAorI2RlZmluZSBBdWRpb0ZpbGVSZWFk
ZXJNYWNfaAorCisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvRmlsZS5oPgorI2luY2x1ZGUg
PEF1ZGlvVG9vbGJveC9FeHRlbmRlZEF1ZGlvRmlsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdXM7CisgICAgCisv
LyBXcmFwcGVyIGNsYXNzIGZvciBBdWRpb0ZpbGUgYW5kIEV4dEF1ZGlvRmlsZSBDb3JlQXVkaW8g
QVBJcyBmb3IgcmVhZGluZyBmaWxlcyBhbmQgaW4tbWVtb3J5IHZlcnNpb25zIG9mIHRoZW0uLi4K
KworY2xhc3MgQXVkaW9GaWxlUmVhZGVyIHsKK3B1YmxpYzoKKyAgICBBdWRpb0ZpbGVSZWFkZXIo
Y29uc3QgY2hhciogZmlsZVBhdGgpOworICAgIEF1ZGlvRmlsZVJlYWRlcihjb25zdCB2b2lkKiBk
YXRhLCBzaXplX3QgZGF0YVNpemUpOworICAgIH5BdWRpb0ZpbGVSZWFkZXIoKTsKKworICAgIC8v
IFJldHVybnMgMCBpZiBlcnJvcgorICAgIEF1ZGlvQnVzKiBjcmVhdGVCdXMoZG91YmxlIHNhbXBs
ZVJhdGUsIGJvb2wgbWl4VG9Nb25vKTsKKworICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX2RhdGE7IH0KKyAgICBzaXplX3QgZGF0YVNpemUoKSBjb25zdCB7IHJldHVybiBt
X2RhdGFTaXplOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIE9TU3RhdHVzIHJlYWRQcm9jKHZv
aWQqIGNsaWVudERhdGEsIFNJbnQ2NCBwb3NpdGlvbiwgVUludDMyIHJlcXVlc3RDb3VudCwgdm9p
ZCogYnVmZmVyLCBVSW50MzIqIGFjdHVhbENvdW50KTsKKyAgICBzdGF0aWMgU0ludDY0IGdldFNp
emVQcm9jKHZvaWQqIGNsaWVudERhdGEpOworCisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworICAg
IHNpemVfdCBtX2RhdGFTaXplOworICAgIGNvbnN0IGNoYXIqIG1fZmlsZVBhdGg7CisKKyAgICBB
dWRpb0ZpbGVJRCBtX2F1ZGlvRmlsZUlEOworICAgIEV4dEF1ZGlvRmlsZVJlZiBtX2V4dEF1ZGlv
RmlsZVJlZjsKKworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBtX2ZpbGVEYXRhRm9y
bWF0OworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBtX2NsaWVudERhdGFGb3JtYXQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisgCisjZW5kaWYgLy8gQXVkaW9GaWxlUmVh
ZGVyTWFjX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67588</attachid>
            <date>2010-09-14 12:49:41 -0700</date>
            <delta_ts>2010-09-14 20:19:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36475-20100914124941.patch</filename>
            <type>text/plain</type>
            <size>16657</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzQ4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDktMTQgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBBdWRpb0ZpbGVSZWFkZXIgZmlsZXMgKE1hYyBpbXBsZW1lbnRhdGlv
bikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDc1
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIGF1ZGlvIEFQSSBpcyBub3QgeWV0IGltcGxl
bWVudGVkLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9GaWxlUmVhZGVyLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1ZGlvQnVmZmVyTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXN0cm95QXVkaW9CdWZmZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvRmlsZVJlYWRlcjo6fkF1ZGlvRmlsZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0ZpbGVSZWFkZXI6OnJlYWRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRl
cjo6Z2V0U2l6ZVByb2MpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpjcmVh
dGVCdXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1ZGlvRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9GaWxlUmVhZGVyOjpkYXRhU2l6ZSk6CisKIDIwMTAtMDktMTQgIE9saXZlciBIdW50ICA8b2xp
dmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBQUEMgQnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb0ZpbGVSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0F1ZGlvRmlsZVJlYWRlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb0ZpbGVSZWFkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQXVkaW9GaWxlUmVhZGVyX2gKKyNkZWZpbmUgQXVkaW9GaWxlUmVhZGVy
X2gKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1
ZGlvQnVzOworCisvLyBGb3IgYm90aCBjcmVhdGUgZnVuY3Rpb25zOgorLy8gUGFzcyBpbiAwLjAg
Zm9yIHNhbXBsZVJhdGUgdG8gdXNlIHRoZSBmaWxlJ3Mgc2FtcGxlLXJhdGUsIG90aGVyd2lzZSBh
IHNhbXBsZS1yYXRlIGNvbnZlcnNpb24gdG8gdGhlIHJlcXVlc3RlZAorLy8gc2FtcGxlUmF0ZSB3
aWxsIGJlIG1hZGUgKGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBtYXRjaCB0aGUgZmlsZSdzIHNhbXBs
ZS1yYXRlKS4KKy8vIFRoZSBjcmVhdGVkIGJ1ZmZlciB3aWxsIGhhdmUgaXRzIHNhbXBsZS1yYXRl
IHNldCBjb3JyZWN0bHkgdG8gdGhlIHJlc3VsdC4KKworUGFzc093blB0cjxBdWRpb0J1cz4gY3Jl
YXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRh
U2l6ZSwgYm9vbCBtaXhUb01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKTsKKworUGFzc093blB0cjxB
dWRpb0J1cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCwgYm9v
bCBtaXhUb01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisvLyBNYXkgcGFzcyBpbiAwLjAgZm9yIHNhbXBsZVJhdGUgaW4gd2hpY2ggY2Fz
ZSBpdCB3aWxsIHVzZSB0aGUgQXVkaW9CdXMncyBzYW1wbGVSYXRlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAordm9pZCB3cml0ZUJ1c1RvQXVkaW9GaWxlKEF1ZGlvQnVzKiBidXMsIGNv
bnN0IGNoYXIqIGZpbGVQYXRoLCBkb3VibGUgZmlsZVNhbXBsZVJhdGUpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb0ZpbGVSZWFkZXJfaApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFj
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyTWFj
LmgiCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlci5o
IgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIEF1ZGlvQnVmZmVyTGlzdCogY3JlYXRlQXVkaW9CdWZmZXJM
aXN0KHNpemVfdCBudW1iZXJPZkJ1ZmZlcnMpCit7CisgICAgc2l6ZV90IGJ1ZmZlckxpc3RTaXpl
ID0gc2l6ZW9mKEF1ZGlvQnVmZmVyTGlzdCkgLSBzaXplb2YoQXVkaW9CdWZmZXIpOworICAgIGJ1
ZmZlckxpc3RTaXplICs9IG51bWJlck9mQnVmZmVycyAqIHNpemVvZihBdWRpb0J1ZmZlcik7CisK
KyAgICBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QgPSBzdGF0aWNfY2FzdDxBdWRpb0J1ZmZl
ckxpc3QqPihjYWxsb2MoMSwgYnVmZmVyTGlzdFNpemUpKTsKKyAgICBpZiAoYnVmZmVyTGlzdCkK
KyAgICAgICAgYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZlcnMgPSBudW1iZXJPZkJ1ZmZlcnM7CisK
KyAgICByZXR1cm4gYnVmZmVyTGlzdDsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveUF1ZGlvQnVm
ZmVyTGlzdChBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QpCit7CisgICAgZnJlZShidWZmZXJM
aXN0KTsKK30KKworQXVkaW9GaWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3QgY2hhciog
ZmlsZVBhdGgpCisgICAgOiBtX2RhdGEoMCkKKyAgICAsIG1fZGF0YVNpemUoMCkKKyAgICAsIG1f
ZmlsZVBhdGgoZmlsZVBhdGgpCisgICAgLCBtX2F1ZGlvRmlsZUlEKDApCisgICAgLCBtX2V4dEF1
ZGlvRmlsZVJlZigwKQoreworICAgIEZTUmVmIGZzcmVmOworICAgIE9TU3RhdHVzIHJlc3VsdCA9
IEZTUGF0aE1ha2VSZWYoKFVJbnQ4KilmaWxlUGF0aCwgJmZzcmVmLCAwKTsKKyAgICBpZiAocmVz
dWx0ICE9IG5vRXJyKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlVSTFJlZiB1cmxSZWYgPSBD
RlVSTENyZWF0ZUZyb21GU1JlZigwLCAmZnNyZWYpOworICAgIGlmICghdXJsUmVmKQorICAgICAg
ICByZXR1cm47CisKKyAgICBFeHRBdWRpb0ZpbGVPcGVuVVJMKHVybFJlZiwgJm1fZXh0QXVkaW9G
aWxlUmVmKTsKKworICAgIGlmICh1cmxSZWYpCisgICAgICAgIENGUmVsZWFzZSh1cmxSZWYpOwor
fQorCitBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihjb25zdCB2b2lkKiBkYXRhLCBz
aXplX3QgZGF0YVNpemUpCisgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVNpemUoZGF0
YVNpemUpCisgICAgLCBtX2ZpbGVQYXRoKDApCisgICAgLCBtX2F1ZGlvRmlsZUlEKDApCisgICAg
LCBtX2V4dEF1ZGlvRmlsZVJlZigwKQoreworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvRmls
ZU9wZW5XaXRoQ2FsbGJhY2tzKHRoaXMsIHJlYWRQcm9jLCAwLCBnZXRTaXplUHJvYywgMCwgMCwg
Jm1fYXVkaW9GaWxlSUQpOworCisgICAgaWYgKHJlc3VsdCAhPSBub0VycikKKyAgICAgICAgcmV0
dXJuOworCisgICAgcmVzdWx0ID0gRXh0QXVkaW9GaWxlV3JhcEF1ZGlvRmlsZUlEKG1fYXVkaW9G
aWxlSUQsIGZhbHNlLCAmbV9leHRBdWRpb0ZpbGVSZWYpOworICAgIGlmIChyZXN1bHQgIT0gbm9F
cnIpCisgICAgICAgIG1fZXh0QXVkaW9GaWxlUmVmID0gMDsKK30KKworQXVkaW9GaWxlUmVhZGVy
Ojp+QXVkaW9GaWxlUmVhZGVyKCkKK3sKKyAgICBpZiAobV9leHRBdWRpb0ZpbGVSZWYpCisgICAg
ICAgIEV4dEF1ZGlvRmlsZURpc3Bvc2UobV9leHRBdWRpb0ZpbGVSZWYpOworCisgICAgbV9leHRB
dWRpb0ZpbGVSZWYgPSAwOworCisgICAgaWYgKG1fYXVkaW9GaWxlSUQpCisgICAgICAgIEF1ZGlv
RmlsZUNsb3NlKG1fYXVkaW9GaWxlSUQpOworICAgICAgICAKKyAgICBtX2F1ZGlvRmlsZUlEID0g
MDsKK30KKworT1NTdGF0dXMgQXVkaW9GaWxlUmVhZGVyOjpyZWFkUHJvYyh2b2lkKiBjbGllbnRE
YXRhLCBTSW50NjQgcG9zaXRpb24sIFVJbnQzMiByZXF1ZXN0Q291bnQsIHZvaWQqIGJ1ZmZlciwg
VUludDMyKiBhY3R1YWxDb3VudCkKK3sKKyAgICBBdWRpb0ZpbGVSZWFkZXIqIGF1ZGlvRmlsZVJl
YWRlciA9IHN0YXRpY19jYXN0PEF1ZGlvRmlsZVJlYWRlcio+KGNsaWVudERhdGEpOworCisgICAg
c2l6ZV90IGRhdGFTaXplID0gYXVkaW9GaWxlUmVhZGVyLT5kYXRhU2l6ZSgpOworICAgIGNvbnN0
IHZvaWQqIGRhdGEgPSBhdWRpb0ZpbGVSZWFkZXItPmRhdGEoKTsKKyAgICBzaXplX3QgYnl0ZXNU
b1JlYWQgPSAwOworCisgICAgaWYgKHN0YXRpY19jYXN0PFVJbnQ2ND4ocG9zaXRpb24pIDwgZGF0
YVNpemUpIHsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQXZhaWxhYmxlID0gZGF0YVNpemUgLSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHBvc2l0aW9uKTsKKyAgICAgICAgYnl0ZXNUb1JlYWQgPSByZXF1ZXN0
Q291bnQgPD0gYnl0ZXNBdmFpbGFibGUgPyByZXF1ZXN0Q291bnQgOiBieXRlc0F2YWlsYWJsZTsK
KyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpICsg
cG9zaXRpb24sIGJ5dGVzVG9SZWFkKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYnl0ZXNUb1JlYWQg
PSAwOworCisgICAgaWYgKGFjdHVhbENvdW50KQorICAgICAgICAqYWN0dWFsQ291bnQgPSBieXRl
c1RvUmVhZDsKKworICAgIHJldHVybiBub0VycjsKK30KKworU0ludDY0IEF1ZGlvRmlsZVJlYWRl
cjo6Z2V0U2l6ZVByb2Modm9pZCogY2xpZW50RGF0YSkKK3sKKyAgICBBdWRpb0ZpbGVSZWFkZXIq
IGF1ZGlvRmlsZVJlYWRlciA9IHN0YXRpY19jYXN0PEF1ZGlvRmlsZVJlYWRlcio+KGNsaWVudERh
dGEpOworICAgIHJldHVybiBhdWRpb0ZpbGVSZWFkZXItPmRhdGFTaXplKCk7Cit9CisKK1Bhc3NP
d25QdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGRvdWJsZSBzYW1wbGVS
YXRlLCBib29sIG1peFRvTW9ubykKK3sKKyAgICBpZiAoIW1fZXh0QXVkaW9GaWxlUmVmKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIEdldCBmaWxlJ3MgZGF0YSBmb3JtYXQKKyAgICBVSW50
MzIgc2l6ZSA9IHNpemVvZihtX2ZpbGVEYXRhRm9ybWF0KTsKKyAgICBPU1N0YXR1cyByZXN1bHQg
PSBFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmls
ZVByb3BlcnR5X0ZpbGVEYXRhRm9ybWF0LCAmc2l6ZSwgJm1fZmlsZURhdGFGb3JtYXQpOworICAg
IGlmIChyZXN1bHQgIT0gbm9FcnIpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gTnVtYmVy
IG9mIGNoYW5uZWxzCisgICAgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMgPSBtX2ZpbGVEYXRhRm9y
bWF0Lm1DaGFubmVsc1BlckZyYW1lOworCisgICAgLy8gTnVtYmVyIG9mIGZyYW1lcworICAgIFNJ
bnQ2NCBudW1iZXJPZkZyYW1lczY0ID0gMDsKKyAgICBzaXplID0gc2l6ZW9mKG51bWJlck9mRnJh
bWVzNjQpOworICAgIHJlc3VsdCA9IEV4dEF1ZGlvRmlsZUdldFByb3BlcnR5KG1fZXh0QXVkaW9G
aWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlfRmlsZUxlbmd0aEZyYW1lcywgJnNpemUsICZu
dW1iZXJPZkZyYW1lczY0KTsKKyAgICBpZiAocmVzdWx0ICE9IG5vRXJyKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIC8vIFNhbXBsZS1yYXRlCisgICAgZG91YmxlIGZpbGVTYW1wbGVSYXRlID0g
bV9maWxlRGF0YUZvcm1hdC5tU2FtcGxlUmF0ZTsKKworICAgIC8vIE1ha2UgY2xpZW50IGZvcm1h
dCBzYW1lIG51bWJlciBvZiBjaGFubmVscyBhcyBmaWxlIGZvcm1hdCwgYnV0IHR3ZWFrIGEgZmV3
IHRoaW5ncy4KKyAgICAvLyBDbGllbnQgZm9ybWF0IHdpbGwgYmUgbGluZWFyIFBDTSAoY2Fub25p
Y2FsKSwgYW5kIHBvdGVudGlhbGx5IGNoYW5nZSBzYW1wbGUtcmF0ZS4KKyAgICBtX2NsaWVudERh
dGFGb3JtYXQgPSBtX2ZpbGVEYXRhRm9ybWF0OworCisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1G
b3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQu
bUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NDYW5vbmljYWw7CisgICAgbV9jbGllbnRE
YXRhRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IDggKiBzaXplb2YoQXVkaW9TYW1wbGVUeXBlKTsK
KyAgICBtX2NsaWVudERhdGFGb3JtYXQubUNoYW5uZWxzUGVyRnJhbWUgPSBudW1iZXJPZkNoYW5u
ZWxzOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBt
X2NsaWVudERhdGFGb3JtYXQubUJ5dGVzUGVyUGFja2V0ID0gc2l6ZW9mKEF1ZGlvU2FtcGxlVHlw
ZSk7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1CeXRlc1BlckZyYW1lID0gc2l6ZW9mKEF1ZGlv
U2FtcGxlVHlwZSk7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBrQXVk
aW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKKworICAgIGlmIChzYW1wbGVSYXRlKQorICAg
ICAgICBtX2NsaWVudERhdGFGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOworCisgICAg
cmVzdWx0ID0gRXh0QXVkaW9GaWxlU2V0UHJvcGVydHkobV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRB
dWRpb0ZpbGVQcm9wZXJ0eV9DbGllbnREYXRhRm9ybWF0LCBzaXplb2YoQXVkaW9TdHJlYW1CYXNp
Y0Rlc2NyaXB0aW9uKSwgJm1fY2xpZW50RGF0YUZvcm1hdCk7CisgICAgaWYgKHJlc3VsdCAhPSBu
b0VycikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBDaGFuZ2UgbnVtYmVyT2ZGcmFtZXM2
NCB0byBkZXN0aW5hdGlvbiBzYW1wbGUtcmF0ZQorICAgIG51bWJlck9mRnJhbWVzNjQgPSBudW1i
ZXJPZkZyYW1lczY0ICogKG1fY2xpZW50RGF0YUZvcm1hdC5tU2FtcGxlUmF0ZSAvIGZpbGVTYW1w
bGVSYXRlKTsKKyAgICBzaXplX3QgbnVtYmVyT2ZGcmFtZXMgPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KG51bWJlck9mRnJhbWVzNjQpOworCisgICAgc2l6ZV90IGJ1c0NoYW5uZWxDb3VudCA9IG1peFRv
TW9ubyA/IDEgOiBudW1iZXJPZkNoYW5uZWxzOworCisgICAgLy8gQ3JlYXRlIEF1ZGlvQnVzIHdo
ZXJlIHdlJ2xsIHB1dCB0aGUgUENNIGF1ZGlvIGRhdGEKKyAgICBPd25QdHI8QXVkaW9CdXM+IGF1
ZGlvQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKGJ1c0NoYW5uZWxDb3VudCwgbnVtYmVyT2ZG
cmFtZXMpKTsKKyAgICBhdWRpb0J1cy0+c2V0U2FtcGxlUmF0ZShtX2NsaWVudERhdGFGb3JtYXQu
bVNhbXBsZVJhdGUpOyAvLyBzYXZlIGZvciBsYXRlcgorCisgICAgLy8gT25seSBhbGxvY2F0ZWQg
aW4gdGhlIG1peFRvTW9ubyBjYXNlCisgICAgQXVkaW9GbG9hdEFycmF5IGJ1Zkw7CisgICAgQXVk
aW9GbG9hdEFycmF5IGJ1ZlI7CisgICAgZmxvYXQqIGJ1ZmZlckwgPSAwOworICAgIGZsb2F0KiBi
dWZmZXJSID0gMDsKKyAgICAKKyAgICAvLyBTZXR1cCBBdWRpb0J1ZmZlckxpc3QgaW4gcHJlcGFy
YXRpb24gZm9yIHJlYWRpbmcKKyAgICBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QgPSBjcmVh
dGVBdWRpb0J1ZmZlckxpc3QobnVtYmVyT2ZDaGFubmVscyk7CisKKyAgICBpZiAobWl4VG9Nb25v
ICYmIG51bWJlck9mQ2hhbm5lbHMgPT0gMikgeworICAgICAgICBidWZMLnJlc2l6ZShudW1iZXJP
ZkZyYW1lcyk7CisgICAgICAgIGJ1ZlIucmVzaXplKG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAg
YnVmZmVyTCA9IGJ1ZkwuZGF0YSgpOworICAgICAgICBidWZmZXJSID0gYnVmUi5kYXRhKCk7CisK
KyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAg
ICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubURhdGFCeXRlU2l6ZSA9IG51bWJlck9mRnJh
bWVzICogc2l6ZW9mKGZsb2F0KTsKKyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubURh
dGEgPSBidWZmZXJMOworCisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1OdW1iZXJD
aGFubmVscyA9IDE7CisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1EYXRhQnl0ZVNp
emUgPSBudW1iZXJPZkZyYW1lcyAqIHNpemVvZihmbG9hdCk7CisgICAgICAgIGJ1ZmZlckxpc3Qt
Pm1CdWZmZXJzWzFdLm1EYXRhID0gYnVmZmVyUjsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoIW1peFRvTW9ubyB8fCBudW1iZXJPZkNoYW5uZWxzID09IDEpOworCisgICAgICAgIC8vIGZv
ciBUcnVlLXN0ZXJlbyAobnVtYmVyT2ZDaGFubmVscyA9PSA0KQorICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICAgICAgYnVmZmVy
TGlzdC0+bUJ1ZmZlcnNbaV0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAgICAgICAgICAgIGJ1ZmZl
ckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBudW1iZXJPZkZyYW1lcyAqIHNpemVv
ZihmbG9hdCk7CisgICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSA9IGF1
ZGlvQnVzLT5jaGFubmVsKGkpLT5kYXRhKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBS
ZWFkIGZyb20gdGhlIGZpbGUgKG9yIGluLW1lbW9yeSB2ZXJzaW9uKQorICAgIFVJbnQzMiBmcmFt
ZXNUb1JlYWQgPSBudW1iZXJPZkZyYW1lczsKKyAgICByZXN1bHQgPSBFeHRBdWRpb0ZpbGVSZWFk
KG1fZXh0QXVkaW9GaWxlUmVmLCAmZnJhbWVzVG9SZWFkLCBidWZmZXJMaXN0KTsKKyAgICBpZiAo
cmVzdWx0ICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtaXhUb01vbm8g
JiYgbnVtYmVyT2ZDaGFubmVscyA9PSAyKSB7CisgICAgICAgIC8vIE1peCBzdGVyZW8gZG93biB0
byBtb25vCisgICAgICAgIGZsb2F0KiBkZXN0TCA9IGF1ZGlvQnVzLT5jaGFubmVsKDApLT5kYXRh
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGcmFtZXM7IGkrKykK
KyAgICAgICAgICAgIGRlc3RMW2ldID0gMC41ZiAqIChidWZmZXJMW2ldICsgYnVmZmVyUltpXSk7
CisgICAgfQorCisgICAgLy8gQ2xlYW51cAorICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVm
ZmVyTGlzdCk7CisKKyAgICByZXR1cm4gYXVkaW9CdXMucmVsZWFzZSgpOworfQorCitQYXNzT3du
UHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRo
LCBib29sIG1peFRvTW9ubywgZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAgQXVkaW9GaWxlUmVh
ZGVyIHJlYWRlcihmaWxlUGF0aCk7CisgICAgcmV0dXJuIHJlYWRlci5jcmVhdGVCdXMoc2FtcGxl
UmF0ZSwgbWl4VG9Nb25vKTsKK30KKworUGFzc093blB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJv
bUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9v
bCBtaXhUb01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAgIEF1ZGlvRmlsZVJlYWRlciBy
ZWFkZXIoZGF0YSwgZGF0YVNpemUpOworICAgIHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBs
ZVJhdGUsIG1peFRvTW9ubyk7Cit9CisKK30gLy8gV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJl
YWRlck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlv
RmlsZVJlYWRlck1hYy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQXVkaW9GaWxlUmVhZGVyTWFjLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEF1ZGlvRmlsZVJlYWRlck1hY19oCisjZGVmaW5lIEF1ZGlvRmlsZVJlYWRlck1hY19o
CisKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9GaWxlLmg+CisjaW5jbHVkZSA8QXVkaW9U
b29sYm94L0V4dGVuZGVkQXVkaW9GaWxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKKyAgICAKKy8vIFdyYXBw
ZXIgY2xhc3MgZm9yIEF1ZGlvRmlsZSBhbmQgRXh0QXVkaW9GaWxlIENvcmVBdWRpbyBBUElzIGZv
ciByZWFkaW5nIGZpbGVzIGFuZCBpbi1tZW1vcnkgdmVyc2lvbnMgb2YgdGhlbS4uLgorCitjbGFz
cyBBdWRpb0ZpbGVSZWFkZXIgeworcHVibGljOgorICAgIEF1ZGlvRmlsZVJlYWRlcihjb25zdCBj
aGFyKiBmaWxlUGF0aCk7CisgICAgQXVkaW9GaWxlUmVhZGVyKGNvbnN0IHZvaWQqIGRhdGEsIHNp
emVfdCBkYXRhU2l6ZSk7CisgICAgfkF1ZGlvRmlsZVJlYWRlcigpOworCisgICAgLy8gUmV0dXJu
cyAwIGlmIGVycm9yCisgICAgUGFzc093blB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzKGRvdWJsZSBz
YW1wbGVSYXRlLCBib29sIG1peFRvTW9ubyk7CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgc2l6ZV90IGRhdGFTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhU2l6ZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBPU1N0YXR1cyByZWFkUHJv
Yyh2b2lkKiBjbGllbnREYXRhLCBTSW50NjQgcG9zaXRpb24sIFVJbnQzMiByZXF1ZXN0Q291bnQs
IHZvaWQqIGJ1ZmZlciwgVUludDMyKiBhY3R1YWxDb3VudCk7CisgICAgc3RhdGljIFNJbnQ2NCBn
ZXRTaXplUHJvYyh2b2lkKiBjbGllbnREYXRhKTsKKworICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsK
KyAgICBzaXplX3QgbV9kYXRhU2l6ZTsKKyAgICBjb25zdCBjaGFyKiBtX2ZpbGVQYXRoOworCisg
ICAgQXVkaW9GaWxlSUQgbV9hdWRpb0ZpbGVJRDsKKyAgICBFeHRBdWRpb0ZpbGVSZWYgbV9leHRB
dWRpb0ZpbGVSZWY7CisKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9maWxlRGF0
YUZvcm1hdDsKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9jbGllbnREYXRhRm9y
bWF0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIAorI2VuZGlmIC8vIEF1ZGlvRmls
ZVJlYWRlck1hY19oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>