<?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>12033</bug_id>
          
          <creation_ts>2006-12-29 20:58:39 -0800</creation_ts>
          <short_desc>SVG needs ability to calculate path lengths</short_desc>
          <delta_ts>2006-12-31 14:08:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>
          
          <blocked>11975</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>38940</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-29 20:58:39 -0800</bug_when>
    <thetext>SVG needs ability to calculate path lengths

This is arguably a platform bug as much as an SVG bug.

SVG requires the ability to calculate path lengths.  Both total path length, as well as the ability to identify a segment at a given length along a path.

Calculating the length of a bezier curve is non-trivial, and most algorithms use successive approximation of the curve length.

We have several options here:
1.  I expect CoreGraphics (or some other library on OS X) has this functionality (possibly not via public methods) that with a little help from the Apple folks, we could find and expose via WebKitSystemInterface.
2.  mozilla has their own code for this: http://lxr.mozilla.org/seamonkey/source/content/svg/content/src/nsSVGPathSeg.cpp#90 which we potentially could borrow, since I believe mozilla&apos;s triple license is compatible with WebKit&apos;s BSD/LGPL licensing.
4.  There may be some other library or code snippet out there that we could use
5.  We could write our own.  I&apos;m sure one of us has a CS book which documents a decent algorithm or two.  There are also various guides on the web: (e.g. http://72.14.203.104/search?q=cache:lXe763sRSqMJ:www.cs.uiowa.edu/~kearney/22c196Spring03/ArcLengthParameterization.ppt+approximate+bezier+curve+length&amp;hl=en&amp;gl=us&amp;ct=clnk&amp;cd=5&amp;client=safari)

In any case, this will require a non-trivial amount of effort, but the results of which enable quite a few SVG features (including text-on-path).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38937</commentid>
    <comment_count>1</comment_count>
      <attachid>12116</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-29 23:27:54 -0800</bug_when>
    <thetext>Created attachment 12116
first (incomplete) stab

What can I say?  I felt inspired.

It&apos;s kinda amusing how the 100+ lines of mozilla code which I used to start this, *completely* morphed and turned into about 20 lines of WebKit code.

This is still not done.  This only supports calculating path lengths from Path objects, not yet from SVGPathSegList objects, but that second part won&apos;t be hard to add.

When adding the SVGPathSegList code, we&apos;ll also add the ability to walk a path and find the segment at a specific length.

The only tricky part about adding the SVGPathSegList support is handling SVG Arc segments.  There is additional mozilla code we can use to convert from Arcs to curves however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38656</commentid>
    <comment_count>2</comment_count>
      <attachid>12136</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-31 10:45:03 -0800</bug_when>
    <thetext>Created attachment 12136
Working patch

I decided to chuck the little remaining mozilla code and re-wrote it.  We use a similar text length algorithm, but (IMO) a much nicer implementation thereof.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38659</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-31 12:00:57 -0800</bug_when>
    <thetext>*** Bug 11975 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38669</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-12-31 14:08:20 -0800</bug_when>
    <thetext>Landed in r18493.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12116</attachid>
            <date>2006-12-29 23:27:54 -0800</date>
            <delta_ts>2006-12-31 10:45:03 -0800</delta_ts>
            <desc>first (incomplete) stab</desc>
            <filename>stab.patch</filename>
            <type>text/plain</type>
            <size>14056</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhMZW5ndGhTdXBwb3J0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aExlbmd0aFN1cHBvcnQuaAkocmV2aXNpb24gMCkKKysr
IHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhMZW5ndGhTdXBwb3J0LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQYXRoTGVuZ3RoU3VwcG9ydF9ICisjZGVmaW5l
IFBhdGhMZW5ndGhTdXBwb3J0X0gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3Mg
UGF0aExlbmd0aFN1cHBvcnQgeworICAgICAgICBzdGF0aWMgY2FsY3VsYXRlTGVuZ3RoKGNvbnN0
IFBhdGgmKTsKKyAgICAgICAgCisgICAgICAgIGZsb2F0IGRpc3RhbmNlTGluZShjb25zdCBGbG9h
dFBvaW50JiBzdGFydCwgY29uc3QgRmxvYXRQb2ludCYgZW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gc3FydGYoKGVuZC54IC0gc3RhcnQueCkgKiAoZW5kLnggLSBzdGFydC54KSAr
IChlbmQueSAtIHN0YXJ0LnkpICogKGVuZC55IC0gc3RhcnQueSkpOworICAgICAgICB9CisgICAg
ICAgIGZsb2F0IGRpc3RhbmNlQmV6aWVyUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
LCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sLCBjb25zdCBGbG9hdFBvaW50JiBlbmQpOworICAg
ICAgICBmbG9hdCBkaXN0YW5jZUJlemllckN1YmljKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0LCBj
b25zdCBGbG9hdFBvaW50JiBjb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbDIsIGNv
bnN0IEZsb2F0UG9pbnQmIGVuZCk7CisgICAgfTsKKyAgICAKK30KKworI2VuZGlmCkluZGV4OiBw
bGF0Zm9ybS9ncmFwaGljcy9QYXRoTGVuZ3RoU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aExlbmd0aFN1cHBvcnQuY3BwCShyZXZpc2lvbiAwKQorKysgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aExlbmd0aFN1cHBvcnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE5MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRXJpYyBTZWlkZWwgKGVy
aWNAd2Via2l0Lm9yZykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqCisgKgorICogUG9ydGlvbnMgb2YgdGhpcyBjb2RlIG9yaWdpbmF0ZSBmcm9tIHRoZSBN
b3ppbGxhIFNWRyBwcm9qZWN0LCBhbmQgYXJlIHVzZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgTEdQTDoKKyAqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisg
KiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5t
b3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGlj
ZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBs
aW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIEluaXRpYWwgRGV2
ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBDcm9jb2RpbGUgQ2xpcHMgTHRkLi4K
KyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmln
aHQgKEMpIDIwMDEKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqICAgQWxleCBGcml0emUgPGFsZXguZnJpdHpl
QGNyb2NvZGlsZS1jbGlwcy5jb20+IChvcmlnaW5hbCBhdXRob3IpCisgKgorICogQWx0ZXJuYXRp
dmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVy
bXMgb2YKKyAqIGVpdGhlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLAorICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3
aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxp
Y2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz
ZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBv
ZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8K
KyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
TVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9u
cyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHBy
b3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBk
ZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRo
ZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBhdGhMZW5ndGhTdXBwb3J0LmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBFcnJvciB0aHJlc2hvbGQgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGxlbmd0aCBv
ZiBCZXppZXIgY3VydmVzCitzdGF0aWMgY29uc3QgZmxvYXQga1BhdGhTZWdtZW50TGVuZ3RoVG9s
ZXJhbmNlID0gMC4wMDAwMDAxZjsKKworc3RhdGljIGlubGluZSBGbG9hdFBvaW50IGFkZEFuZERp
dmlkZUJ5Mihjb25zdCBGbG9hdFBvaW50JiBmaXJzdCwgY29uc3QgRmxvYXRQb2ludCYgc2Vjb25k
KQoreworICAgIHJldHVybiBGbG9hdFBvaW50KChmaXJzdC54ICsgc2Vjb25kLngpIC8gMiwgKGZp
cnN0LnkgKyBzZWNvbmQueSkgLyAyKTsKK30KKworc3RhdGljIHZvaWQgc3BsaXRRdWFkcmF0aWNC
ZXppZXIoRmxvYXRQb2ludCogY3VydmUsIEZsb2F0UG9pbnQqIGxlZnQsIEZsb2F0UG9pbnQqIHJp
Z2h0KQoreworICAgIGxlZnRbMF0gPSBjdXJ2ZVswXTsKKyAgICByaWdodFsyXSA9IGN1cnZlWzJd
OworICAgIGxlZnRbMV0gPSBhZGRBbmREaXZpZGVCeTIoY3VydmVbMF0sIGN1cnZlWzFdKTsKKyAg
ICByaWdodFsxXSA9IGFkZEFuZERpdmlkZUJ5MihjdXJ2ZVsxXSwgY3VydmVbMl0pOworICAgIGxl
ZnRbMl0gPSByaWdodFswXSA9IGFkZEFuZERpdmlkZUJ5MihsZWZ0WzFdLCByaWdodFsxXSk7Cit9
CisKK3N0YXRpYyB2b2lkIHNwbGl0Q3ViaWNCZXppZXIoRmxvYXRQb2ludCogY3VydmUsIEZsb2F0
UG9pbnQqIGxlZnQsIEZsb2F0UG9pbnQqIHJpZ2h0KQoreyAgICAKKyAgICBGbG9hdFBvaW50IGN1
cnZlMVRvQ3VydmUyID0gYWRkQW5kRGl2aWRlQnkyKGN1cnZlWzFdLCBjdXJ2ZVsyXSk7CisgICAg
CisgICAgbGVmdFswXSA9IGN1cnZlWzBdOworICAgIGxlZnRbMV0gPSBhZGRBbmREaXZpZGVCeTIo
Y3VydmVbMF0sIGN1cnZlWzFdKTsKKyAgICBsZWZ0WzJdID0gYWRkQW5kRGl2aWRlQnkyKGxlZnRb
MV0sIGN1cnZlMVRvQ3VydmUyKTsKKworICAgIHJpZ2h0WzNdID0gY3VydmVbM107CisgICAgcmln
aHRbMl0gPSBhZGRBbmREaXZpZGVCeTIoY3VydmVbMl0sIGN1cnZlWzNdKTsKKyAgICByaWdodFsx
XSA9IGFkZEFuZERpdmlkZUJ5MihyaWdodFsyXSwgY3VydmUxVG9DdXJ2ZTIpOworICAgIAorICAg
IGxlZnRbM10gPSByaWdodFswXSA9IGFkZEFuZERpdmlkZUJ5MihsZWZ0WzJdLCByaWdodFsxXSk7
Cit9CisKK3N0YXRpYyBmbG9hdCBiZXppZXJMZW5ndGgoRmxvYXRQb2ludCogY3VydmUsIHVuc2ln
bmVkIHBvaW50c0NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnNwbGl0
RnVuY3Rpb24pKEZsb2F0UG9pbnQqLCBGbG9hdFBvaW50KiwgRmxvYXRQb2ludCopKQoreworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGxvb3AgaW5zdGVhZCBvZiByZWN1cnNpdmUKKyAg
ICBGbG9hdFBvaW50IGxlZnRbNF07CisgICAgRmxvYXRQb2ludCByaWdodFs0XTsKKyAgICBmbG9h
dCBsZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2ludHNDb3VudCAt
IDE7IGkrKykKKyAgICAgICAgbGVuZ3RoICs9IFBhdGhMZW5ndGhTdXBwb3J0OjpkaXN0YW5jZShj
dXJ2ZVtpXSwgY3VydmVbaSArIDFdKTsKKyAgICAKKyAgICBmbG9hdCBkaXN0ID0gUGF0aExlbmd0
aFN1cHBvcnQ6OmRpc3RhbmNlKGN1cnZlWzBdLCBjdXJ2ZVtwb2ludHNDb3VudCAtIDFdKTsKKyAg
ICBpZiAobGVuZ3RoIC0gZGlzdCA+IGtQYXRoU2VnbWVudExlbmd0aFRvbGVyYW5jZSkgeworICAg
ICAgICBzcGxpdEZ1bmN0aW9uKGN1cnZlLCBsZWZ0LCByaWdodCk7CisgICAgICAgIHJldHVybiBi
ZXppZXJMZW5ndGgobGVmdCwgcG9pbnRzQ291bnQsIHNwbGl0KSArIGJlemllckxlbmd0aChyaWdo
dCwgcG9pbnRzQ291bnQsIHNwbGl0KTsKKyAgICB9CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwor
c3RydWN0IFNWR1BhdGhTZWdUcmF2ZXJzYWxTdGF0ZSB7CisgICAgRmxvYXRQb2ludCBjdXJyZW50
OworICAgIEZsb2F0UG9pbnQgc3RhcnQ7CisgICAgRmxvYXRQb2ludCBjb250cm9sMTsKKyAgICBG
bG9hdFBvaW50IGNvbnRyb2wyOworICAgIGZsb2F0IGxlbmd0aDsKKyAgICAKKyAgICBTVkdQYXRo
U2VnVHJhdmVyc2FsU3RhdGUoKSA6IGxlbmd0aCgwKSB7IH0KKyAgICAKKyAgICBmbG9hdCBjbG9z
ZVN1YnBhdGgoKQorICAgIHsKKyAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSBQYXRoTGVuZ3RoU3Vw
cG9ydDo6ZGlzdGFuY2UoY3VycmVudCwgc3RhcnQpOworICAgICAgICBzdGFydCA9IGNvbnRyb2wx
ID0gY29udHJvbDIgPSBjdXJyZW50OworICAgICAgICByZXR1cm4gZGlzdGFuY2U7CisgICAgfQor
ICAgIAorICAgIGZsb2F0IG1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICB7Cisg
ICAgICAgIGN1cnJlbnQgPSBzdGFydCA9IGNvbnRyb2wxID0gY29udHJvbDIgPSBwb2ludDsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGZsb2F0IGxpbmVUbyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKKyAgICB7CisgICAgICAgIGZsb2F0IGRpc3RhbmNlID0gUGF0aExlbmd0
aFN1cHBvcnQ6OmRpc3RhbmNlKGN1cnJlbnQsIHBvaW50KTsKKyAgICAgICAgY3VycmVudCA9IGNv
bnRyb2wxID0gY29udHJvbDIgPSBwb2ludDsKKyAgICAgICAgcmV0dXJuIGRpc3RhbmNlOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHF1YWRUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sLCBj
b25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCisgICAgeworICAgICAgICBGbG9hdFBvaW50IGN1cnZl
WzNdID0geyB0cy5jdXJyZW50LCBuZXdDb250cm9sLCBuZXdFbmQgfTsKKyAgICAgICAgZmxvYXQg
ZGlzdGFuY2UgPSBiZXppZXJMZW5ndGgoY3VydmUsIDMsIHNwbGl0UXVhZHJhdGljQmV6aWVyKTsK
KyAgICAgICAgdHMuY29udHJvbDEgPSBuZXdDb250cm9sOworICAgICAgICB0cy5jb250cm9sMiA9
IHRzLmN1cnJlbnQgPSBuZXdFbmQ7CisgICAgICAgIHJldHVybiBkaXN0YW5jZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wxLCBjb25z
dCBGbG9hdFBvaW50JiBuZXdDb250cm9sMiwgY29uc3QgRmxvYXRQb2ludCAmbmV3RW5kKQorICAg
IHsKKyAgICAgICAgRmxvYXRQb2ludCBjdXJ2ZVs0XSA9IHt0cy5jdXJyZW50LCBuZXdDb250cm9s
MSwgbmV3Q29udHJvbDIsIG5ld0VuZCB9OworICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IGJlemll
ckxlbmd0aChjdXJ2ZSwgNCwgc3BsaXRDdWJpY0Jlemllcik7CisgICAgICAgIHRzLmNvbnRyb2wx
ID0gdHMuY3VycmVudCA9IG5ld0VuZDsKKyAgICAgICAgdHMuY29udHJvbDIgPSBuZXdDb250cm9s
MjsKKyAgICAgICAgcmV0dXJuIGRpc3RhbmNlOworICAgIH0KK307CisKK1BhdGhMZW5ndGhTdXBw
b3J0OjpjYWxjdWxhdGVMZW5ndGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBTVkdQYXRoU2Vn
VHJhdmVyc2FsU3RhdGUgdHJhdmVyc2FsU3RhdGU7CisgICAgcGF0aC5hcHBseSgmdHJhdmVyc2Fs
U3RhdGUsIHBhdGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24pOworICAgIHJldHVybiB0cmF2ZXJzYWxT
dGF0ZS5sZW5ndGg7Cit9CisKK3ZvaWQgcGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbih2b2lkKiBp
bmZvLCBjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBTVkdQYXRoU2VnVHJhdmVy
c2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRlID0gaW5mbzsKKyAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5
cGUpIHsKKyAgICAgICAgY2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OgorICAgICAgICAgICAg
dHJhdmVyc2FsU3RhdGUubGVuZ3RoICs9IHRyYXZlcnNhbFN0YXRlLm1vdmVUbyhwb2ludHNbMF0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRMaW5lVG9Q
b2ludDoKKyAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLmxlbmd0aCArPSB0cmF2ZXJzYWxTdGF0
ZS5saW5lVG8ocG9pbnRzWzBdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBh
dGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRl
Lmxlbmd0aCArPSB0cmF2ZXJzYWxTdGF0ZS5xdWFkVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9p
bnQ6CisgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5sZW5ndGggKz0gdHJhdmVyc2FsU3RhdGUu
Y3VydmVUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgorICAgICAgICAgICAg
dHJhdmVyc2FsU3RhdGUubGVuZ3RoICs9IHRyYXZlcnNhbFN0YXRlLmNsb3NlU3VicGF0aCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9CisKSW5kZXg6IFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NDgzKQorKysgV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDU0LDYgKzIwNTQsOCBAQAogCQlBODhBRDUw
QzA5NTI0OEYwMDAxREQxOTYgLyogU1ZHWm9vbUFuZFBhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEY4RUMwODk3MDFGNDAwQkE1MTE0IC8qIFNW
R1pvb21BbmRQYW4uaCAqLzsgfTsKIAkJQTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1YXJ0
ekNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg1RDdBMkYwODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQlBODhBRDVBQTA5NTI1MTMxMDAxREQxOTYgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMw
RjZGQjA4OTcwMUYxMDBCQTUxMTQgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi87IH07CisJ
CUE4OERENDg3MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRoTGVuZ3RoU3VwcG9ydC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg4REQ0ODYwQjQ2MjlBMzAw
QzAyOTkwIC8qIFBhdGhMZW5ndGhTdXBwb3J0LmggKi87IH07CisJCUE4OERENDg5MEI0NjI5QjAw
MEMwMjk5MCAvKiBQYXRoTGVuZ3RoU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyogUGF0aExl
bmd0aFN1cHBvcnQuY3BwICovOyB9OwogCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovOyB9OwogCQlBODk5
NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8q
IEJpdG1hcEltYWdlLmNwcCAqLzsgfTsKIAkJQThDNEE3RkQwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0
eWxlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QzRBN0VCMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ4MDYsNiArNDgwOCw4
IEBACiAJCUE4NzFERkRGMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJSZXBsYWNlZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyUmVwbGFjZWQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg3MURGRTAwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlcldp
ZGdldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyV2lkZ2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzFERkUxMEExNTM3NkIwMEIxMkE2OCAv
KiBSZW5kZXJXaWRnZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlcldpZGdldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4OERENDg2
MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRoTGVuZ3RoU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXRoTGVuZ3RoU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyogUGF0aExlbmd0aFN1cHBvcnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGF0aExlbmd0aFN1cHBv
cnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODkwREYxQjA5MzA5NzQ4MDA1
MTNGODggLyogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJQTg5MERGMUMwOTMwOTc0ODAwNTEzRjg4IC8qIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQTg5MERG
MUQwOTMwOTc0ODAwNTEzRjg4IC8qIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdTdHlsZWRMb2Nh
dGFibGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwpAQCAtODQ4NSw2ICs4NDg5LDggQEAKIAkJCQlCMjc1MzU0ODBCMDUzODE0
MDAyQ0U2NEYgLyogSW50U2l6ZUhhc2guaCAqLywKIAkJCQlCMjc1MzU0OTBCMDUzODE0MDAyQ0U2
NEYgLyogbWFjICovLAogCQkJCUIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmNwcCAq
LywKKwkJCQlBODhERDQ4NjBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aExlbmd0aFN1cHBvcnQuaCAq
LywKKwkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyogUGF0aExlbmd0aFN1cHBvcnQuY3Bw
ICovLAogCQkJCUIyNzUzNTUzMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmggKi8sCiAJCQkJQjI3
NTM1NTQwQjA1MzgxNDAwMkNFNjRGIC8qIFBlbi5jcHAgKi8sCiAJCQkJQjI3NTM1NTUwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBlbi5oICovLApAQCAtMTA4NzgsNiArMTA4ODQsNyBAQAogCQkJCUFBQ0Y3
QzRFMEI0MkVFNjAwMDA4MEJEOCAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QzlERDI4MEI0Mzc0MjYwMDk3ODgzQSAvKiBTVkdJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThDOUUwOTUwQjQzQTUyNTAwOTc4ODNBIC8qIFNWR0ltYWdlRW1wdHlDbGllbnRz
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBODhERDQ4NzBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aExl
bmd0aFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTIyMDUsNiArMTIyMTIsNyBAQAogCQkJ
CUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBQUNGN0M0RjBCNDJFRTYwMDAwODBCRDggLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4QzlERDI3MEI0Mzc0MjYwMDk3ODgzQSAvKiBTVkdJbWFn
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODhERDQ4OTBCNDYyOUIwMDBDMDI5OTAgLyogUGF0
aExlbmd0aFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12136</attachid>
            <date>2006-12-31 10:45:03 -0800</date>
            <delta_ts>2006-12-31 14:07:35 -0800</delta_ts>
            <desc>Working patch</desc>
            <filename>pathlength.patch</filename>
            <type>text/plain</type>
            <size>18655</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDky
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDYtMTIt
MzEgIEVyaWMgU2VpZGVsICA8ZXJpY0Blc2VpZGVsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcGF0aCBsZW5ndGggbWVhc3Vy
aW5nIGZvciBTVkdQYXRoRWxlbWVudDo6Z2V0VG90YWxMZW5ndGggYW5kIGZyaWVuZHMuCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDMzCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1BhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50
OjpnZXRUb3RhbExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6Z2V0
UG9pbnRBdExlbmd0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpwb2ludEF0TGVu
Z3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjptaWRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZUxpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UXVhZHJhdGljQmV6aWVyOjpRdWFkcmF0aWNCZXppZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UXVhZHJhdGljQmV6aWVyOjphcHByb3hpbWF0ZURpc3RhbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlF1YWRyYXRpY0Jlemllcjo6c3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3ViaWNCZXppZXI6OkN1YmljQmV6aWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1YmljQmV6aWVy
OjphcHByb3hpbWF0ZURpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1YmljQmV6aWVyOjpz
cGxpdCk6CisgICAgICAgIChXZWJDb3JlOjpjdXJ2ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6OlBhdGhUcmF2ZXJzYWxTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoVHJhdmVyc2FsU3RhdGU6OmNsb3NlU3VicGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJh
dmVyc2FsU3RhdGU6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVHJhdmVyc2FsU3Rh
dGU6OnF1YWRyYXRpY0JlemllclRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxT
dGF0ZTo6Y3ViaWNCZXppZXJUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRy
YXZlcnNhbFN0YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGF0aFRyYXZlcnNhbFN0
YXRlOjopOgorCiAyMDA2LTEyLTMxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTWl0ei4KSW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE4NDg1KQorKysgV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDU0LDYgKzIwNTQsOCBAQAogCQlBODhBRDUwQzA5NTI0OEYwMDAx
REQxOTYgLyogU1ZHWm9vbUFuZFBhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThDMEY4RUMwODk3MDFGNDAwQkE1MTE0IC8qIFNWR1pvb21BbmRQYW4u
aCAqLzsgfTsKIAkJQTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1YXJ0ekNvcmUuZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1
RDdBMkYwODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovOyB9OwogCQlB
ODhBRDVBQTA5NTI1MTMxMDAxREQxOTYgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRjZGQjA4OTcwMUYx
MDBCQTUxMTQgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi87IH07CisJCUE4OERENDg3MEI0
NjI5QTMwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OERENDg2MEI0NjI5QTMwMEMwMjk5MCAvKiBQ
YXRoVHJhdmVyc2FsU3RhdGUuaCAqLzsgfTsKKwkJQTg4REQ0ODkwQjQ2MjlCMDAwQzAyOTkwIC8q
IFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0
YXRlLmNwcCAqLzsgfTsKIAkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODk5NDMy
NjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCAqLzsgfTsKIAkJQTg5OTQzMjkwQjQy
MzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OTk0MzI3MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJ
bWFnZS5jcHAgKi87IH07CiAJCUE4QzRBN0ZEMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEM0
QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODA2LDYgKzQ4MDgsOCBAQAogCQlB
ODcxREZERjBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFjZWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJlcGxhY2VkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4NzFERkUwMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRnZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcldpZGdldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBODcxREZFMTBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVy
V2lkZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJX
aWRnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODhERDQ4NjBCNDYyOUEz
MDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OTBERjFCMDkzMDk3NDgwMDUxM0Y4
OCAvKiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQlBODkwREYxQzA5MzA5NzQ4MDA1MTNGODggLyogU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBODkwREYxRDA5
MzA5NzQ4MDA1MTNGODggLyogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CkBAIC04NDg1LDYgKzg0ODksOCBAQAogCQkJCUIyNzUzNTQ4MEIwNTM4MTQwMDJD
RTY0RiAvKiBJbnRTaXplSGFzaC5oICovLAogCQkJCUIyNzUzNTQ5MEIwNTM4MTQwMDJDRTY0RiAv
KiBtYWMgKi8sCiAJCQkJQjI3NTM1NTIwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGguY3BwICovLAor
CQkJCUE4OERENDg2MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuaCAqLywK
KwkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAq
LywKIAkJCQlCMjc1MzU1MzBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oICovLAogCQkJCUIyNzUz
NTU0MEIwNTM4MTQwMDJDRTY0RiAvKiBQZW4uY3BwICovLAogCQkJCUIyNzUzNTU1MEIwNTM4MTQw
MDJDRTY0RiAvKiBQZW4uaCAqLywKQEAgLTEwODc4LDYgKzEwODg0LDcgQEAKIAkJCQlBQUNGN0M0
RTBCNDJFRTYwMDAwODBCRDggLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEM5REQyODBCNDM3NDI2MDA5Nzg4M0EgLyogU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QzlFMDk1MEI0M0E1MjUwMDk3ODgzQSAvKiBTVkdJbWFnZUVtcHR5Q2xpZW50cy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTg4REQ0ODcwQjQ2MjlBMzAwQzAyOTkwIC8qIFBhdGhUcmF2
ZXJzYWxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMjIwNSw2ICsxMjIxMiw3IEBACiAJCQkJ
QTg5OTQzMjkwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUFBQ0Y3QzRGMEI0MkVFNjAwMDA4MEJEOCAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThDOUREMjcwQjQzNzQyNjAwOTc4ODNBIC8qIFNWR0ltYWdl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4OERENDg5MEI0NjI5QjAwMEMwMjk5MCAvKiBQYXRo
VHJhdmVyc2FsU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0
aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE4NDg1KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksMTIgKzU5LDEzIEBAIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR1BhdGhFbGUKIAogZG91YmxlIFNWR1BhdGhFbGVtZW50OjpnZXRUb3RhbExlbmd0aCgpCiB7
Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRvUGF0aERhdGEoKS5sZW5ndGgoKTsKIH0KIAot
RmxvYXRQb2ludCBTVkdQYXRoRWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aChkb3VibGUgLypkaXN0
YW5jZSovKQorRmxvYXRQb2ludCBTVkdQYXRoRWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aChkb3Vi
bGUgZGlzdGFuY2UpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyAgICBib29sIG9rID0g
ZmFsc2U7CisgICAgcmV0dXJuIHRvUGF0aERhdGEoKS5wb2ludEF0TGVuZ3RoKGRpc3RhbmNlLCBv
ayk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgU1ZHUGF0aEVsZW1lbnQ6OmdldFBhdGhTZWdBdExlbmd0
aChkb3VibGUpCkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAkocmV2aXNpb24gMTg0ODUpCisrKyBwbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDYyIEBACiAK
ICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiUGF0aFRyYXZlcnNhbFN0YXRlLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAKIGNvbnN0IGRvdWJsZSBRVUFSVEVSID0gMC41NTI7IC8vIGFwcHJv
eGltYXRpb24gb2YgY29udHJvbCBwb2ludCBwb3NpdGlvbnMgb24gYSBiZXppZXIKLSAgICAgICAg
ICAgICAgICAgICAgICAvLyB0byBzaW11bGF0ZSBhIHF1YXJ0ZXIgb2YgYSBjaXJjbGUuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzaW11bGF0ZSBhIHF1YXJ0ZXIgb2YgYSBj
aXJjbGUuCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQgcGF0aExlbmd0aEFwcGxpZXJGdW5j
dGlvbih2b2lkKiBpbmZvLCBjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBQYXRo
VHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRlID0gKnN0YXRpY19jYXN0PFBhdGhUcmF2ZXJz
YWxTdGF0ZSo+KGluZm8pOworICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3MpCisgICAg
ICAgIHJldHVybjsKKyAgICBGbG9hdFBvaW50KiBwb2ludHMgPSBlbGVtZW50LT5wb2ludHM7Cisg
ICAgZmxvYXQgc2VnbWVudExlbmd0aCA9IDAuZjsKKyAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5cGUp
IHsKKyAgICAgICAgY2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OgorICAgICAgICAgICAgc2Vn
bWVudExlbmd0aCA9IHRyYXZlcnNhbFN0YXRlLm1vdmVUbyhwb2ludHNbMF0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDoKKyAgICAg
ICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5saW5lVG8ocG9pbnRzWzBdKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZl
VG9Qb2ludDoKKyAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5xdWFk
cmF0aWNCZXppZXJUbyhwb2ludHNbMF0sIHBvaW50c1sxXSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgICAgIHNl
Z21lbnRMZW5ndGggPSB0cmF2ZXJzYWxTdGF0ZS5jdWJpY0JlemllclRvKHBvaW50c1swXSwgcG9p
bnRzWzFdLCBwb2ludHNbMl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0
aEVsZW1lbnRDbG9zZVN1YnBhdGg6CisgICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gdHJhdmVy
c2FsU3RhdGUuY2xvc2VTdWJwYXRoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAg
dHJhdmVyc2FsU3RhdGUubV90b3RhbExlbmd0aCArPSBzZWdtZW50TGVuZ3RoOworICAgIGlmICgo
dHJhdmVyc2FsU3RhdGUubV9hY3Rpb24gPT0gUGF0aFRyYXZlcnNhbFN0YXRlOjpUcmF2ZXJzYWxQ
b2ludEF0TGVuZ3RoKQorICAgICAmJiAodHJhdmVyc2FsU3RhdGUubV90b3RhbExlbmd0aCA+IHRy
YXZlcnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE5lZWQg
dG8gYWN0dWFsbHkgZmluZCB0aGUgZXhhY3QgcG9pbnQgYW5kIGNoYW5nZSBtX2N1cnJlbnQKKyAg
ICAgICAgdHJhdmVyc2FsU3RhdGUubV9zdWNjZXNzID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Zsb2F0
IFBhdGg6Omxlbmd0aCgpCit7CisgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRl
KFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsVG90YWxMZW5ndGgpOworICAgIGFwcGx5KCZ0
cmF2ZXJzYWxTdGF0ZSwgcGF0aExlbmd0aEFwcGxpZXJGdW5jdGlvbik7CisgICAgcmV0dXJuIHRy
YXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGg7Cit9CisKK0Zsb2F0UG9pbnQgUGF0aDo6cG9pbnRB
dExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKQoreworICAgIFBhdGhUcmF2ZXJzYWxTdGF0
ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBvaW50QXRMZW5n
dGgpOworICAgIHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCA9IGxlbmd0aDsKKyAgICBh
cHBseSgmdHJhdmVyc2FsU3RhdGUsIHBhdGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24pOworICAgIG9r
ID0gdHJhdmVyc2FsU3RhdGUubV9zdWNjZXNzOworICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0ZS5t
X2N1cnJlbnQ7Cit9CisKIFBhdGggUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShjb25zdCBG
bG9hdFJlY3QmIHJlY3RhbmdsZSwgY29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1JhZGlpKQogewog
ICAgIFBhdGggcGF0aDsKSW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDE4NDg1KQorKysgcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
LCBXaW5kUnVsZSBydWxlID0gUlVMRV9OT05aRVJPKSBjb25zdDsKICAgICAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgZmxvYXQgbGVuZ3RoKCk7
CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9r
KTsKIAogICAgICAgICB2b2lkIGNsZWFyKCk7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
OwpJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCShyZXZpc2lv
biAwKQorKysgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEVy
aWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBh
dGhUcmF2ZXJzYWxTdGF0ZS5oIgorCisjaW5jbHVkZSAiUGF0aC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBrUGF0aFNlZ21lbnRMZW5ndGhUb2xlcmFuY2Ug
PSAwLjAwMDAxZjsKKworc3RhdGljIGlubGluZSBGbG9hdFBvaW50IG1pZFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIGZpcnN0LCBjb25zdCBGbG9hdFBvaW50JiBzZWNvbmQpCit7CisgICAgcmV0dXJu
IEZsb2F0UG9pbnQoKGZpcnN0LngoKSArIHNlY29uZC54KCkpIC8gMiwgKGZpcnN0LnkoKSArIHNl
Y29uZC55KCkpIC8gMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZGlzdGFuY2VMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0LCBjb25zdCBGbG9hdFBvaW50JiBlbmQpCit7CisgICAgcmV0
dXJuIHNxcnRmKChlbmQueCgpIC0gc3RhcnQueCgpKSAqIChlbmQueCgpIC0gc3RhcnQueCgpKSAr
IChlbmQueSgpIC0gc3RhcnQueSgpKSAqIChlbmQueSgpIC0gc3RhcnQueSgpKSk7Cit9CisKK3N0
cnVjdCBRdWFkcmF0aWNCZXppZXIgeworICAgIFF1YWRyYXRpY0JlemllcigpIHsgfQorICAgIFF1
YWRyYXRpY0Jlemllcihjb25zdCBGbG9hdFBvaW50JiBzLCBjb25zdCBGbG9hdFBvaW50JiBjLCBj
b25zdCBGbG9hdFBvaW50JiBlKQorICAgICAgICA6IHN0YXJ0KHMpCisgICAgICAgICwgY29udHJv
bChjKQorICAgICAgICAsIGVuZChlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZmxvYXQgYXBw
cm94aW1hdGVEaXN0YW5jZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGlzdGFuY2VM
aW5lKHN0YXJ0LCBjb250cm9sKSArIGRpc3RhbmNlTGluZShjb250cm9sLCBlbmQpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNwbGl0KFF1YWRyYXRpY0JlemllciYgbGVmdCwgUXVhZHJhdGljQmV6
aWVyJiByaWdodCkgY29uc3QKKyAgICB7CisgICAgICAgIGxlZnQuY29udHJvbCA9IG1pZFBvaW50
KHN0YXJ0LCBjb250cm9sKTsKKyAgICAgICAgcmlnaHQuY29udHJvbCA9IG1pZFBvaW50KGNvbnRy
b2wsIGVuZCk7CisgICAgICAgIAorICAgICAgICBGbG9hdFBvaW50IGxlZnRDb250cm9sVG9SaWdo
dENvbnRyb2wgPSBtaWRQb2ludChsZWZ0LmNvbnRyb2wsIHJpZ2h0LmNvbnRyb2wpOworICAgICAg
ICBsZWZ0LmVuZCA9IGxlZnRDb250cm9sVG9SaWdodENvbnRyb2w7CisgICAgICAgIHJpZ2h0LnN0
YXJ0ID0gbGVmdENvbnRyb2xUb1JpZ2h0Q29udHJvbDsKKworICAgICAgICBsZWZ0LnN0YXJ0ID0g
c3RhcnQ7CisgICAgICAgIHJpZ2h0LmVuZCA9IGVuZDsKKyAgICB9CisgICAgCisgICAgRmxvYXRQ
b2ludCBzdGFydDsKKyAgICBGbG9hdFBvaW50IGNvbnRyb2w7CisgICAgRmxvYXRQb2ludCBlbmQ7
Cit9OworCitzdHJ1Y3QgQ3ViaWNCZXppZXIgeworICAgIEN1YmljQmV6aWVyKCkgeyB9CisgICAg
Q3ViaWNCZXppZXIoY29uc3QgRmxvYXRQb2ludCYgcywgY29uc3QgRmxvYXRQb2ludCYgYzEsIGNv
bnN0IEZsb2F0UG9pbnQmIGMyLCBjb25zdCBGbG9hdFBvaW50JiBlKQorICAgICAgICA6IHN0YXJ0
KHMpCisgICAgICAgICwgY29udHJvbDEoYzEpCisgICAgICAgICwgY29udHJvbDIoYzIpCisgICAg
ICAgICwgZW5kKGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBmbG9hdCBhcHByb3hpbWF0ZURp
c3RhbmNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkaXN0YW5jZUxpbmUoc3RhcnQs
IGNvbnRyb2wxKSArIGRpc3RhbmNlTGluZShjb250cm9sMSwgY29udHJvbDIpICsgZGlzdGFuY2VM
aW5lKGNvbnRyb2wyLCBlbmQpOworICAgIH0KKyAgICAgICAgCisgICAgdm9pZCBzcGxpdChDdWJp
Y0JlemllciYgbGVmdCwgQ3ViaWNCZXppZXImIHJpZ2h0KSBjb25zdAorICAgIHsgICAgCisgICAg
ICAgIEZsb2F0UG9pbnQgc3RhcnRUb0NvbnRyb2wxID0gbWlkUG9pbnQoY29udHJvbDEsIGNvbnRy
b2wyKTsKKyAgICAgICAgCisgICAgICAgIGxlZnQuc3RhcnQgPSBzdGFydDsKKyAgICAgICAgbGVm
dC5jb250cm9sMSA9IG1pZFBvaW50KHN0YXJ0LCBjb250cm9sMSk7CisgICAgICAgIGxlZnQuY29u
dHJvbDIgPSBtaWRQb2ludChsZWZ0LmNvbnRyb2wxLCBzdGFydFRvQ29udHJvbDEpOworICAgICAg
ICAKKyAgICAgICAgcmlnaHQuY29udHJvbDIgPSBtaWRQb2ludChjb250cm9sMiwgZW5kKTsKKyAg
ICAgICAgcmlnaHQuY29udHJvbDEgPSBtaWRQb2ludChyaWdodC5jb250cm9sMiwgc3RhcnRUb0Nv
bnRyb2wxKTsKKyAgICAgICAgcmlnaHQuZW5kID0gZW5kOworICAgICAgICAKKyAgICAgICAgRmxv
YXRQb2ludCBsZWZ0Q29udHJvbDJUb1JpZ2h0Q29udHJvbDEgPSBtaWRQb2ludChsZWZ0LmNvbnRy
b2wyLCByaWdodC5jb250cm9sMSk7CisgICAgICAgIGxlZnQuZW5kID0gbGVmdENvbnRyb2wyVG9S
aWdodENvbnRyb2wxOworICAgICAgICByaWdodC5zdGFydCA9IGxlZnRDb250cm9sMlRvUmlnaHRD
b250cm9sMTsKKyAgICB9CisgICAgCisgICAgRmxvYXRQb2ludCBzdGFydDsKKyAgICBGbG9hdFBv
aW50IGNvbnRyb2wxOworICAgIEZsb2F0UG9pbnQgY29udHJvbDI7CisgICAgRmxvYXRQb2ludCBl
bmQ7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBDdXJ2ZVR5cGU+CitzdGF0aWMgZmxvYXQgY3VydmVM
ZW5ndGgoQ3VydmVUeXBlIGN1cnZlKQoreworICAgIFZlY3RvcjxDdXJ2ZVR5cGU+IGN1cnZlU3Rh
Y2s7CisgICAgY3VydmVTdGFjay5hcHBlbmQoY3VydmUpOworCisgICAgZmxvYXQgdG90YWxMZW5n
dGggPSAwLmY7CisgICAgZG8geworICAgICAgICBmbG9hdCBsZW5ndGggPSBjdXJ2ZS5hcHByb3hp
bWF0ZURpc3RhbmNlKCk7CisgICAgICAgIGlmICgobGVuZ3RoIC0gZGlzdGFuY2VMaW5lKGN1cnZl
LnN0YXJ0LCBjdXJ2ZS5lbmQpKSA+IGtQYXRoU2VnbWVudExlbmd0aFRvbGVyYW5jZSkgeworICAg
ICAgICAgICAgQ3VydmVUeXBlIGxlZnQsIHJpZ2h0OworICAgICAgICAgICAgY3VydmUuc3BsaXQo
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgY3VydmUgPSBsZWZ0OworICAgICAgICAgICAgY3Vy
dmVTdGFjay5hcHBlbmQocmlnaHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG90
YWxMZW5ndGggKz0gbGVuZ3RoOworICAgICAgICAgICAgY3VydmUgPSBjdXJ2ZVN0YWNrLmxhc3Qo
KTsKKyAgICAgICAgICAgIGN1cnZlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICB9CisgICAg
fSB3aGlsZSAoIWN1cnZlU3RhY2suaXNFbXB0eSgpKTsKKyAgICAKKyAgICByZXR1cm4gdG90YWxM
ZW5ndGg7Cit9CisKK1BhdGhUcmF2ZXJzYWxTdGF0ZTo6UGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhU
cmF2ZXJzYWxBY3Rpb24gYWN0aW9uKQorICAgIDogbV9hY3Rpb24oYWN0aW9uKQorICAgICwgbV9z
dWNjZXNzKGZhbHNlKQorICAgICwgbV90b3RhbExlbmd0aCgwLmYpCisgICAgLCBtX3NlZ21lbnRJ
bmRleCgwKQorICAgICwgbV9kZXNpcmVkTGVuZ3RoKDAuZikKK3sKK30KKworZmxvYXQgUGF0aFRy
YXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgoKQoreworICAgIGZsb2F0IGRpc3RhbmNlID0gZGlz
dGFuY2VMaW5lKG1fY3VycmVudCwgbV9zdGFydCk7CisgICAgbV9zdGFydCA9IG1fY29udHJvbDEg
PSBtX2NvbnRyb2wyID0gbV9jdXJyZW50OworICAgIHJldHVybiBkaXN0YW5jZTsKK30KKworZmxv
YXQgUGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7
CisgICAgbV9jdXJyZW50ID0gbV9zdGFydCA9IG1fY29udHJvbDEgPSBtX2NvbnRyb2wyID0gcG9p
bnQ7CisgICAgcmV0dXJuIDA7Cit9CisKK2Zsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bGluZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGZsb2F0IGRpc3RhbmNlID0gZGlzdGFu
Y2VMaW5lKG1fY3VycmVudCwgcG9pbnQpOworICAgIG1fY3VycmVudCA9IG1fY29udHJvbDEgPSBt
X2NvbnRyb2wyID0gcG9pbnQ7CisgICAgcmV0dXJuIGRpc3RhbmNlOworfQorCitmbG9hdCBQYXRo
VHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0Nv
bnRyb2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCkKK3sKKyAgICBmbG9hdCBkaXN0YW5jZSA9
IGN1cnZlTGVuZ3RoPFF1YWRyYXRpY0Jlemllcj4oUXVhZHJhdGljQmV6aWVyKG1fY3VycmVudCwg
bmV3Q29udHJvbCwgbmV3RW5kKSk7CisgICAgbV9jb250cm9sMSA9IG5ld0NvbnRyb2w7CisgICAg
bV9jb250cm9sMiA9IG1fY3VycmVudCA9IG5ld0VuZDsKKyAgICByZXR1cm4gZGlzdGFuY2U7Cit9
CisKK2Zsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6Y3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBv
aW50JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDIsIGNvbnN0IEZs
b2F0UG9pbnQmIG5ld0VuZCkKK3sKKyAgICBmbG9hdCBkaXN0YW5jZSA9IGN1cnZlTGVuZ3RoPEN1
YmljQmV6aWVyPihDdWJpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wxLCBuZXdDb250cm9s
MiwgbmV3RW5kKSk7CisgICAgbV9jb250cm9sMSA9IG1fY3VycmVudCA9IG5ld0VuZDsKKyAgICBt
X2NvbnRyb2wyID0gbmV3Q29udHJvbDI7CisgICAgcmV0dXJuIGRpc3RhbmNlOworfQorCit9CisK
SW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oCShyZXZpc2lvbiAwKQor
KysgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQYXRoVHJhdmVyc2FsU3RhdGVfSAorI2Rl
ZmluZSBQYXRoVHJhdmVyc2FsU3RhdGVfSAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNs
YXNzIFBhdGg7CisgICAgCisgICAgY2xhc3MgUGF0aFRyYXZlcnNhbFN0YXRlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGVudW0gUGF0aFRyYXZlcnNhbEFjdGlvbiB7CisgICAgICAgICAgICBUcmF2
ZXJzYWxUb3RhbExlbmd0aCwKKyAgICAgICAgICAgIFRyYXZlcnNhbFBvaW50QXRMZW5ndGgsCisg
ICAgICAgICAgICBUcmF2ZXJzYWxTZWdtZW50QXRMZW5ndGgsIC8vIG5vdCB5ZXQgaW1wbGVtZW50
ZWQKKyAgICAgICAgICAgIFRyYXZlcnNhbFBvaW50QW5kQW5nbGVzRm9yT2Zmc2V0cyAvLyBub3Qg
eWV0IGltcGxlbWVudGVkCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBQYXRoVHJhdmVy
c2FsU3RhdGUoUGF0aFRyYXZlcnNhbEFjdGlvbik7CisgICAgICAgIAorICAgICAgICBmbG9hdCBj
bG9zZVN1YnBhdGgoKTsKKyAgICAgICAgZmxvYXQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsK
KyAgICAgICAgZmxvYXQgbGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgZmxvYXQg
cXVhZHJhdGljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgRmxv
YXRQb2ludCYgbmV3RW5kKTsKKyAgICAgICAgZmxvYXQgY3ViaWNCZXppZXJUbyhjb25zdCBGbG9h
dFBvaW50JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDIsIGNvbnN0
IEZsb2F0UG9pbnQmIG5ld0VuZCk7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgUGF0
aFRyYXZlcnNhbEFjdGlvbiBtX2FjdGlvbjsKKyAgICAgICAgYm9vbCBtX3N1Y2Nlc3M7CisgICAg
ICAgIAorICAgICAgICBGbG9hdFBvaW50IG1fY3VycmVudDsKKyAgICAgICAgRmxvYXRQb2ludCBt
X3N0YXJ0OworICAgICAgICBGbG9hdFBvaW50IG1fY29udHJvbDE7CisgICAgICAgIEZsb2F0UG9p
bnQgbV9jb250cm9sMjsKKyAgICAgICAgCisgICAgICAgIGZsb2F0IG1fdG90YWxMZW5ndGg7Cisg
ICAgICAgIHVuc2lnbmVkIG1fc2VnbWVudEluZGV4OyAvLyBmb3Igc2VnbWVudCBmaW5kaW5nIChu
b3QgaW1wbGVtZW50ZWQpCisgICAgICAgIGZsb2F0IG1fZGVzaXJlZExlbmd0aDsKKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBmb3IgKG5vbi1pbXBsZW1lbnRlZCkgdGV4dC1vbi1wYXRoIGxh
eW91dAorICAgICAgICBWZWN0b3I8ZmxvYXQ+IG1fb2Zmc2V0czsKKyAgICAgICAgVmVjdG9yPCBz
dGQ6OnBhaXI8RmxvYXRQb2ludCwgZmxvYXQ+ID4gbV9wb2ludEFuZEFuZ2xlczsKKyAgICB9OyAg
ICAKK30KKworI2VuZGlmCg==
</data>
<flag name="review"
          id="4486"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>