<?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>92901</bug_id>
          
          <creation_ts>2012-08-01 12:49:30 -0700</creation_ts>
          <short_desc>[chromium] Move compositor HUD font atlas generation out of compositor core</short_desc>
          <delta_ts>2012-08-01 15:26:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>nduca</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>684484</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-01 12:49:30 -0700</bug_when>
    <thetext>[chromium] Move compositor HUD font atlas generation out of compositor core</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684485</commentid>
    <comment_count>1</comment_count>
      <attachid>155864</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-01 12:51:14 -0700</bug_when>
    <thetext>Created attachment 155864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684518</commentid>
    <comment_count>2</comment_count>
      <attachid>155864</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-01 13:28:53 -0700</bug_when>
    <thetext>Comment on attachment 155864
Patch

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

R=me, with some drive-by cleanup comments on code you&apos;re moving around.

&gt; Source/WebCore/platform/graphics/chromium/CompositorHUDFontAtlas.cpp:43
&gt; +#define FONT_HEIGHT 14

Unused?

&gt; Source/WebCore/platform/graphics/chromium/CompositorHUDFontAtlas.cpp:59
&gt; +    fontHeight = 14;
&gt; +
&gt; +    OwnPtr&lt;SkCanvas&gt; canvas = adoptPtr(skia::CreateBitmapCanvas(ATLAS_SIZE, ATLAS_SIZE, false /* opaque */));

This baked in font height and atlas size is kind of a mess, but it&apos;s not your fault.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684540</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-01 13:48:03 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 155864 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155864&amp;action=review
&gt; 
&gt; R=me, with some drive-by cleanup comments on code you&apos;re moving around.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/CompositorHUDFontAtlas.cpp:43
&gt; &gt; +#define FONT_HEIGHT 14
&gt; 
&gt; Unused?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/CompositorHUDFontAtlas.cpp:59
&gt; &gt; +    fontHeight = 14;
&gt; &gt; +
&gt; &gt; +    OwnPtr&lt;SkCanvas&gt; canvas = adoptPtr(skia::CreateBitmapCanvas(ATLAS_SIZE, ATLAS_SIZE, false /* opaque */));
&gt; 
&gt; This baked in font height and atlas size is kind of a mess, but it&apos;s not your fault.

Ouch... that was clearly directed at me.  =(

At the time I coded this, we didn&apos;t (and we still don&apos;t, i think?) care about how flexible and powerful the HUD code was.  So I opted to make those variables into private macros so that they should be easy to make into run-time args that are given to the font atlas when we really want to.  As long as we also handle the error of when the font size cannot fully fit into the desired atlas size.

Feel free to make a bug on me if you had some reason for us to refactor it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684642</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-01 15:19:45 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 155864 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155864&amp;action=review
&gt; &gt; 
&gt; &gt; R=me, with some drive-by cleanup comments on code you&apos;re moving around.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/CompositorHUDFontAtlas.cpp:43
&gt; &gt; &gt; +#define FONT_HEIGHT 14
&gt; &gt; 
&gt; &gt; Unused?

Will remove, thanks for catching it.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/CompositorHUDFontAtlas.cpp:59
&gt; &gt; &gt; +    fontHeight = 14;
&gt; &gt; &gt; +
&gt; &gt; &gt; +    OwnPtr&lt;SkCanvas&gt; canvas = adoptPtr(skia::CreateBitmapCanvas(ATLAS_SIZE, ATLAS_SIZE, false /* opaque */));
&gt; &gt; 
&gt; &gt; This baked in font height and atlas size is kind of a mess, but it&apos;s not your fault.
&gt; 
&gt; Ouch... that was clearly directed at me.  =(
&gt; 
&gt; At the time I coded this, we didn&apos;t (and we still don&apos;t, i think?) care about how flexible and powerful the HUD code was.  So I opted to make those variables into private macros so that they should be easy to make into run-time args that are given to the font atlas when we really want to.  As long as we also handle the error of when the font size cannot fully fit into the desired atlas size.
&gt; 
&gt; Feel free to make a bug on me if you had some reason for us to refactor it.

I don&apos;t think any action is required, it&apos;s good enough for what we need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684650</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-01 15:26:40 -0700</bug_when>
    <thetext>Committed r124375: &lt;http://trac.webkit.org/changeset/124375&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155864</attachid>
            <date>2012-08-01 12:51:14 -0700</date>
            <delta_ts>2012-08-01 13:28:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92901-20120801125056.patch</filename>
            <type>text/plain</type>
            <size>20981</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzA5YzgyNDNlMDkzNTU0
NTA0MzJmODA5OTNlYzUzYWQ2MWM4NmJhNi4uNDRiNmJhZTU3ZWJiNWFlOTE0OTM4YTk1N2IyOGRk
M2IzNGQ4MDNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA4LTAxICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIGNvbXBvc2l0b3IgSFVEIGZvbnQgYXRsYXMgZ2VuZXJhdGlvbiBvdXQgb2YgY29tcG9zaXRv
ciBjb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MjkwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgbW92ZXMgdGhlIGZvbnQgYXRsYXMgZ2VuZXJhdGlvbiBvdXQgb2YgQ0NGb250QXRsYXMgaW50
byBhIHNlcGFyYXRlIGhlbHBlciBjbGFzcyBhbmQgcG9ydHMgdGhlIENDRm9udEF0bGFzCisgICAg
ICAgIHRleHQgZHJhd2luZyBjb2RlIG92ZXIgdG8gdXNlIHNraWEgZGlyZWN0bHkuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29tcG9zaXRvckhVREZvbnRBdGxhcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp3cmFwUG9zaXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdG9ySFVERm9udEF0bGFzOjpnZW5lcmF0ZUZvbnRBdGxhcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcG9zaXRvckhVREZvbnRBdGxhcy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29tcG9zaXRvckhVREZvbnRBdGxhcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGb250QXRsYXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NGb250QXRsYXM6OkNDRm9udEF0bGFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRm9udEF0bGFzOjp+Q0NGb250QXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NGb250QXRsYXM6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NGb250QXRsYXM6
OmRyYXdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRm9udEF0bGFzOjpkcmF3T25lTGluZU9m
VGV4dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRm9udEF0bGFzOjpkcmF3RGVidWdB
dGxhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGb250QXRs
YXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NGb250QXRsYXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXlMYXllcklt
cGwuY3BwOgorCiAyMDEyLTA3LTMxICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2Ugc2tpYSBkaXJlY3RseSBpbiBDQ0hlYWRzVXBE
aXNwbGF5TGF5ZXJJbXBsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYmQwOThhZTIxYjZmYTc0MTczZjVk
NzEwOGU5YTk0MTYyMzJkY2ZjYi4uNDAzOWI2NzUyMWQ5MWMyNTFjNDQ2ODk2NDIwNGU0YmVjM2M4
NDZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODI0NCw2ICs4MjQ0LDggQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBvc2l0b3JIVURGb250QXRsYXMuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9ySFVE
Rm9udEF0bGFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRnJhbWVCdWZmZXJTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db21wb3NpdG9ySFVERm9udEF0bGFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBvc2l0b3JIVURGb250QXRsYXMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk0N2YzOGY1M2NkOWU2ZGI2NjQwZTNlNjU1MDJkNmI1YjA5MGI5NDYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21w
b3NpdG9ySFVERm9udEF0bGFzLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNvbXBvc2l0b3JIVURGb250QXRsYXMuaCIKKworI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0Rl
dmljZS5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9y
bV9jYW52YXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjZGVmaW5lIEFUTEFTX1NJWkUg
MTI4CisjZGVmaW5lIEZPTlRfSEVJR0hUIDE0CisKK3N0YXRpYyB2b2lkIHdyYXBQb3NpdGlvbklm
TmVlZGVkKEludFBvaW50JiBwb3NpdGlvbiwgaW50IHRleHRXaWR0aCwgaW50IHRleHRIZWlnaHQp
Cit7CisgICAgaWYgKHBvc2l0aW9uLngoKSArIHRleHRXaWR0aCA+IEFUTEFTX1NJWkUpCisgICAg
ICAgIHBvc2l0aW9uID0gSW50UG9pbnQoMCwgcG9zaXRpb24ueSgpICsgdGV4dEhlaWdodCk7Cit9
CisKKy8vIFBhaW50cyB0aGUgZm9udCBpbnRvIHRoZSBhdGxhcywgZnJvbSBsZWZ0LXRvLXJpZ2h0
LCB0b3AtdG8tYm90dG9tLCBzdGFydGluZyBhdAorLy8gc3RhcnRpbmdQb3NpdGlvbi4gQXQgdGhl
IHNhbWUgdGltZSwgaXQgdXBkYXRlcyB0aGUgYXNjaWktdG8tSW50UmVjdCBtYXBwaW5nIGZvcgor
Ly8gZWFjaCBjaGFyYWN0ZXIuIEJ5IGRvaW5nIHRoaW5ncyB0aGlzIHdheSwgaXQgaXMgcG9zc2li
bGUgdG8gc3VwcG9ydCB2YXJpYWJsZS13aWR0aAorLy8gZm9udHMgYW5kIG11bHRpcGxlIGZvbnRz
IG9uIHRoZSBzYW1lIGF0bGFzLgorU2tCaXRtYXAgQ29tcG9zaXRvckhVREZvbnRBdGxhczo6Z2Vu
ZXJhdGVGb250QXRsYXMoSW50UmVjdCBhc2NpaVRvUmVjdFRhYmxlWzEyOF0sIGludCYgZm9udEhl
aWdodCkKK3sKKyAgICBmb250SGVpZ2h0ID0gMTQ7CisKKyAgICBPd25QdHI8U2tDYW52YXM+IGNh
bnZhcyA9IGFkb3B0UHRyKHNraWE6OkNyZWF0ZUJpdG1hcENhbnZhcyhBVExBU19TSVpFLCBBVExB
U19TSVpFLCBmYWxzZSAvKiBvcGFxdWUgKi8pKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEg
cGxhdGZvcm1Db250ZXh0KGNhbnZhcy5nZXQoKSk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldERy
YXdpbmdUb0ltYWdlQnVmZmVyKHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dCBhdGxhc0NvbnRl
eHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICAvLyBDbGVhciB0aGUgZW50aXJlIHRleHR1cmUg
YXRsYXMgdG8gdHJhbnNwYXJlbnQgYmVmb3JlIGRyYXdpbmcgZm9udHMuCisgICAgYXRsYXNDb250
ZXh0LnNldEZpbGxDb2xvcihDb2xvcigwLCAwLCAwLCAwKSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgYXRsYXNDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCBBVExBU19TSVpFLCBB
VExBU19TSVpFKSk7CisKKyAgICAvLyBGSVhNRTogbW9ub3NwYWNlIGZvbnQgZG9lcyBub3Qgd29y
ayBhcyBleHBlY3RlZC4KKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3Nw
YWNlRmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWln
aHQpOworCisgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50
ZXI7CisKKyAgICBpbnQgdGV4dEhlaWdodCA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVs
U2l6ZSgpOworICAgIEludFBvaW50IHBvc2l0aW9uKDAsIHRleHRIZWlnaHQpOworICAgIC8vIFRo
aXMgaXMgYSBkaXJ0eSBsaXR0bGUgdHJpY2sgdG8gYWNjb3VudCBmb3Igb3ZlcmhhbmcgbGV0dGVy
cyBsaWtlIGcsIHAsIGouCisgICAgaW50IGluZmxhdGlvbiA9IHRleHRIZWlnaHQgLyAzOworCisg
ICAgRm9udCBmb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CisgICAgZm9udC51cGRhdGUoMCk7
CisKKyAgICBDb2xvciBmb250Q29sb3IoMjU1LCAwLCAwKTsKKyAgICBhdGxhc0NvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoZm9udENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBhdGxhc0Nv
bnRleHQuc2V0RmlsbENvbG9yKGZvbnRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisKKyAg
ICAvLyBGaXJzdCwgZHJhdyBhIGdlbmVyaWMgcmVjdCB0aGF0IHdpbGwgYmUgdXNlZCBmb3Igc3Bl
Y2lhbCBhbmQgdW5rbm93biBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBub3RoaW5nIGVsc2UgdG8gcmVu
ZGVyLgorICAgIHsKKyAgICAgICAgaW50IHRleHRXaWR0aCA9IHRleHRIZWlnaHQgLyAyOworICAg
ICAgICB3cmFwUG9zaXRpb25JZk5lZWRlZChwb3NpdGlvbiwgdGV4dFdpZHRoLCB0ZXh0SGVpZ2h0
ICsgaW5mbGF0aW9uKTsKKyAgICAgICAgYXRsYXNDb250ZXh0LnN0cm9rZVJlY3QoRmxvYXRSZWN0
KEZsb2F0UG9pbnQocG9zaXRpb24ueCgpICsgMSwgcG9zaXRpb24ueSgpIC0gdGV4dEhlaWdodCAr
IDEgKyBpbmZsYXRpb24pLCBGbG9hdFNpemUodGV4dFdpZHRoIC0gMiwgdGV4dEhlaWdodCAtIDIg
LSBpbmZsYXRpb24pKSwgMSk7CisKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVjdCB0aGF0
IHdvdWxkIGJlIGNvcGllZCB3aGVuIGRyYXdpbmcgdGhpcyBnbHlwaCBmcm9tIHRoZSBhdGxhcy4K
KyAgICAgICAgYXNjaWlUb1JlY3RUYWJsZVswXSA9IEludFJlY3QoSW50UG9pbnQocG9zaXRpb24u
eCgpLCBwb3NpdGlvbi55KCkgLSB0ZXh0SGVpZ2h0KSwgSW50U2l6ZSh0ZXh0V2lkdGgsIHRleHRI
ZWlnaHQgKyBpbmZsYXRpb24pKTsKKworICAgICAgICAvLyBJbmNyZW1lbnQgdG8gdGhlIHBvc2l0
aW9uIHdoZXJlIHRoZSBuZXh0IGdseXBoIHdpbGwgYmUgcGxhY2VkLgorICAgICAgICBwb3NpdGlv
bi5zZXRYKHBvc2l0aW9uLngoKSArIHRleHRXaWR0aCk7CisgICAgfQorCisgICAgLy8gVGhlbiwg
ZHJhdyB0aGUgQVNDSUkgY2hhcmFjdGVycy4KKyAgICBmb3IgKExDaGFyIGkgPSAxOyBpIDwgMTI4
OyArK2kpIHsKKyAgICAgICAgaWYgKGkgPCAzMikgeworICAgICAgICAgICAgLy8gU3BlY2lhbCBj
aGFyYWN0ZXJzIHdpbGwgc2ltcGx5IHVzZSB0aGUgdGhlIGRlZmF1bHQgZ2x5cGguCisgICAgICAg
ICAgICBhc2NpaVRvUmVjdFRhYmxlW2ldID0gYXNjaWlUb1JlY3RUYWJsZVswXTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHN0cjsKKyAgICAgICAg
c3RyLmFwcGVuZChpKTsKKyAgICAgICAgVGV4dFJ1biB0ZXh0KHN0cik7CisKKyAgICAgICAgaW50
IHRleHRXaWR0aCA9IHJvdW5kKGZvbnQud2lkdGgodGV4dCkpOworICAgICAgICB3cmFwUG9zaXRp
b25JZk5lZWRlZChwb3NpdGlvbiwgdGV4dFdpZHRoLCB0ZXh0SGVpZ2h0ICsgaW5mbGF0aW9uKTsK
KyAgICAgICAgYXRsYXNDb250ZXh0LmRyYXdUZXh0KGZvbnQsIHRleHQsIHBvc2l0aW9uKTsKKwor
ICAgICAgICAvLyBJbml0aWFsaXplIHRoZSByZWN0IHRoYXQgd291bGQgYmUgY29waWVkIHdoZW4g
ZHJhd2luZyB0aGlzIGdseXBoIGZyb20gdGhlIGF0bGFzLgorICAgICAgICBhc2NpaVRvUmVjdFRh
YmxlW2ldID0gSW50UmVjdChJbnRQb2ludChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSAtIHRl
eHRIZWlnaHQpLCBJbnRTaXplKHRleHRXaWR0aCwgdGV4dEhlaWdodCArIGluZmxhdGlvbikpOwor
CisgICAgICAgIC8vIEluY3JlbWVudCB0byB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIG5leHQgZ2x5
cGggd2lsbCBiZSBwbGFjZWQuCisgICAgICAgIHBvc2l0aW9uLnNldFgocG9zaXRpb24ueCgpICsg
dGV4dFdpZHRoKTsKKyAgICB9CisKKyAgICBTa0JpdG1hcCBjb3B5OworICAgIGNvbnN0IFNrQml0
bWFwJiBzb3VyY2UgPSBjYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwor
ICAgIHNvdXJjZS5jb3B5VG8oJmNvcHksIHNvdXJjZS5jb25maWcoKSk7CisgICAgcmV0dXJuIGNv
cHk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBvc2l0b3JIVURGb250QXRsYXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBvc2l0b3JIVURG
b250QXRsYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTJjNmQxNmYxYWQ5ZDdhNWMyODU0YjlkNzE4YTQ3Nzgx
MzBlNTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29tcG9zaXRvckhVREZvbnRBdGxhcy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENvbXBvc2l0b3JIVURGb250QXRsYXNfaAorI2RlZmluZSBDb21wb3NpdG9y
SFVERm9udEF0bGFzX2gKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTa0JpdG1h
cC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbXBvc2l0b3JIVURGb250QXRs
YXMgeworcHVibGljOgorICAgIC8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBjYW4g
Z2VuZXJhdGUgYSBmb250IGF0bGFzIHN1aXRhYmxlIGZvciB0aGUgY29tcG9zaXRvcidzIGhlYWRz
IHVwIGRpc3BsYXkuCisgICAgLy8gUmV0dXJucyBhIGJpdG1hcCBjb250YWluaW5nIGdseXBocyBh
bmQgcG9wdWxhdGVzIGFzY2lpVG9SZWN0VGFibGUgd2l0aCB0aGUKKyAgICAvLyBsb2NhdGlvbiBv
ZiBlYWNoIGdseXBoLgorICAgIHN0YXRpYyBTa0JpdG1hcCBnZW5lcmF0ZUZvbnRBdGxhcyhJbnRS
ZWN0IGFzY2lpVG9SZWN0VGFibGVbMTI4XSwgaW50JiBmb250SGVpZ2h0KTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENvbXBvc2l0b3JIVURGb250QXRsYXNfaAor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0ZvbnRBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0ZvbnRBdGxhcy5jcHAKaW5kZXggOTFjODE5MjZmZjU0Y2FhZjhhYTIxNDBiYTZk
NjY5M2Y0MTE5YjEwMC4uOTM0MDYzMTNmOTIwNDg0ZDkxMzkyMWZkOGVjOTg1N2NiODgyOWFmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NGb250QXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDRm9udEF0bGFzLmNwcApAQCAtMjcsMTUxICsyNyw2OSBAQAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJDQ0ZvbnRBdGxhcy5oIgogCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnREZXNj
cmlwdGlvbi5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIkNvbXBvc2l0b3JIVURG
b250QXRsYXMuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgImNjL0NDUHJveHku
aCIKIAotI2RlZmluZSBBVExBU19TSVpFIDEyOAotI2RlZmluZSBGT05UX0hFSUdIVCAxNAotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIAogQ0NGb250QXRs
YXM6OkNDRm9udEF0bGFzKCkKLSAgICA6IG1fZm9udEhlaWdodChGT05UX0hFSUdIVCkKKyAgICA6
IG1fZm9udEhlaWdodCgwKQogewogfQogCi1zdGF0aWMgdm9pZCB3cmFwUG9zaXRpb25JZk5lZWRl
ZChJbnRQb2ludCYgcG9zaXRpb24sIGludCB0ZXh0V2lkdGgsIGludCB0ZXh0SGVpZ2h0KQotewot
ICAgIGlmIChwb3NpdGlvbi54KCkgKyB0ZXh0V2lkdGggPiBBVExBU19TSVpFKQotICAgICAgICBw
b3NpdGlvbiA9IEludFBvaW50KDAsIHBvc2l0aW9uLnkoKSArIHRleHRIZWlnaHQpOwotfQogCi12
b2lkIENDRm9udEF0bGFzOjpnZW5lcmF0ZUF0bGFzRm9yRm9udChHcmFwaGljc0NvbnRleHQqIGF0
bGFzQ29udGV4dCwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0
IENvbG9yJiBmb250Q29sb3IsIGNvbnN0IEludFBvaW50JiBzdGFydGluZ1Bvc2l0aW9uLCBJbnRS
ZWN0IGFzY2lpVG9BdGxhc1RhYmxlWzEyOF0pCitDQ0ZvbnRBdGxhczo6fkNDRm9udEF0bGFzKCkK
IHsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX2F0
bGFzKTsKLQotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVu
dGVyOwotCi0gICAgSW50UG9pbnQgcG9zaXRpb24gPSBzdGFydGluZ1Bvc2l0aW9uOwotICAgIGlu
dCB0ZXh0SGVpZ2h0ID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7Ci0gICAg
Ly8gVGhpcyBpcyBhIGRpcnR5IGxpdHRsZSB0cmljayB0byBhY2NvdW50IGZvciBvdmVyaGFuZyBs
ZXR0ZXJzIGxpa2UgZywgcCwgai4KLSAgICBpbnQgaW5mbGF0aW9uID0gdGV4dEhlaWdodCAvIDM7
Ci0KLSAgICBGb250IGZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKLSAgICBmb250LnVwZGF0
ZSgwKTsKLQotICAgIGF0bGFzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoZm9udENvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKLSAgICBhdGxhc0NvbnRleHQtPnNldEZpbGxDb2xvcihmb250Q29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotCi0gICAgLy8gRmlyc3QsIGRyYXcgYSBnZW5lcmlj
IHJlY3QgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHNwZWNpYWwgYW5kIHVua25vd24gY2hhcmFjdGVy
cyB0aGF0IGhhdmUgbm90aGluZyBlbHNlIHRvIHJlbmRlci4KLSAgICB7Ci0gICAgICAgIGludCB0
ZXh0V2lkdGggPSB0ZXh0SGVpZ2h0IC8gMjsKLSAgICAgICAgd3JhcFBvc2l0aW9uSWZOZWVkZWQo
cG9zaXRpb24sIHRleHRXaWR0aCwgdGV4dEhlaWdodCArIGluZmxhdGlvbik7Ci0gICAgICAgIGF0
bGFzQ29udGV4dC0+c3Ryb2tlUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludChwb3NpdGlvbi54KCkg
KyAxLCBwb3NpdGlvbi55KCkgLSB0ZXh0SGVpZ2h0ICsgMSArIGluZmxhdGlvbiksIEZsb2F0U2l6
ZSh0ZXh0V2lkdGggLSAyLCB0ZXh0SGVpZ2h0IC0gMiAtIGluZmxhdGlvbikpLCAxKTsKLQotICAg
ICAgICAvLyBJbml0aWFsaXplIHRoZSByZWN0IHRoYXQgd291bGQgYmUgY29waWVkIHdoZW4gZHJh
d2luZyB0aGlzIGdseXBoIGZyb20gdGhlIGF0bGFzLgotICAgICAgICBhc2NpaVRvQXRsYXNUYWJs
ZVswXSA9IEludFJlY3QoSW50UG9pbnQocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkgLSB0ZXh0
SGVpZ2h0KSwgSW50U2l6ZSh0ZXh0V2lkdGgsIHRleHRIZWlnaHQgKyBpbmZsYXRpb24pKTsKLQot
ICAgICAgICAvLyBJbmNyZW1lbnQgdG8gdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBuZXh0IGdseXBo
IHdpbGwgYmUgcGxhY2VkLgotICAgICAgICBwb3NpdGlvbi5zZXRYKHBvc2l0aW9uLngoKSArIHRl
eHRXaWR0aCk7Ci0gICAgfQotCi0gICAgLy8gVGhlbiwgZHJhdyB0aGUgQVNDSUkgY2hhcmFjdGVy
cy4KLSAgICBmb3IgKExDaGFyIGkgPSAxOyBpIDwgMTI4OyArK2kpIHsKLSAgICAgICAgaWYgKGkg
PCAzMikgewotICAgICAgICAgICAgLy8gU3BlY2lhbCBjaGFyYWN0ZXJzIHdpbGwgc2ltcGx5IHVz
ZSB0aGUgdGhlIGRlZmF1bHQgZ2x5cGguCi0gICAgICAgICAgICBhc2NpaVRvQXRsYXNUYWJsZVtp
XSA9IGFzY2lpVG9BdGxhc1RhYmxlWzBdOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBTdHJpbmcgc3RyOwotICAgICAgICBzdHIuYXBwZW5kKGkpOwotICAgICAg
ICBUZXh0UnVuIHRleHQoc3RyKTsKLQotICAgICAgICBpbnQgdGV4dFdpZHRoID0gcm91bmQoZm9u
dC53aWR0aCh0ZXh0KSk7Ci0gICAgICAgIHdyYXBQb3NpdGlvbklmTmVlZGVkKHBvc2l0aW9uLCB0
ZXh0V2lkdGgsIHRleHRIZWlnaHQgKyBpbmZsYXRpb24pOwotICAgICAgICBhdGxhc0NvbnRleHQt
PmRyYXdUZXh0KGZvbnQsIHRleHQsIHBvc2l0aW9uKTsKLQotICAgICAgICAvLyBJbml0aWFsaXpl
IHRoZSByZWN0IHRoYXQgd291bGQgYmUgY29waWVkIHdoZW4gZHJhd2luZyB0aGlzIGdseXBoIGZy
b20gdGhlIGF0bGFzLgotICAgICAgICBhc2NpaVRvQXRsYXNUYWJsZVtpXSA9IEludFJlY3QoSW50
UG9pbnQocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkgLSB0ZXh0SGVpZ2h0KSwgSW50U2l6ZSh0
ZXh0V2lkdGgsIHRleHRIZWlnaHQgKyBpbmZsYXRpb24pKTsKLQotICAgICAgICAvLyBJbmNyZW1l
bnQgdG8gdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBuZXh0IGdseXBoIHdpbGwgYmUgcGxhY2VkLgot
ICAgICAgICBwb3NpdGlvbi5zZXRYKHBvc2l0aW9uLngoKSArIHRleHRXaWR0aCk7Ci0gICAgfQog
fQogCiB2b2lkIENDRm9udEF0bGFzOjppbml0aWFsaXplKCkKIHsKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNNYWluVGhyZWFkKCkpOwogCi0gICAgLy8gV2UgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8g
YmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBhdGxhcyBkaWQgbm90IGV4aXN0IHlldC4gV2Ug
c2hvdWxkIGJlIGF3YXJlIGlmIHRoYXQncyBub3QgdHJ1ZS4KLSAgICBBU1NFUlQoIW1fYXRsYXMp
OwotCi0gICAgbV9hdGxhcyA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZShBVExBU19TSVpF
LCBBVExBU19TSVpFKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBhdGxhc0NvbnRleHQgPSBtX2F0
bGFzLT5jb250ZXh0KCk7Ci0KLSAgICAvLyBDbGVhciB0aGUgZW50aXJlIHRleHR1cmUgYXRsYXMg
dG8gdHJhbnNwYXJlbnQgYmVmb3JlIGRyYXdpbmcgZm9udHMuCi0gICAgYXRsYXNDb250ZXh0LT5z
ZXRGaWxsQ29sb3IoQ29sb3IoMCwgMCwgMCwgMCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAg
IGF0bGFzQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KDAsIDAsIEFUTEFTX1NJWkUsIEFUTEFT
X1NJWkUpKTsKLQotICAgIC8vIEZJWE1FOiBtb25vc3BhY2UgZm9udCBkb2VzIG5vdCB3b3JrIGFz
IGV4cGVjdGVkLgotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VG
YW1pbHkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobV9mb250SGVpZ2h0
KTsKLSAgICBnZW5lcmF0ZUF0bGFzRm9yRm9udChhdGxhc0NvbnRleHQsIGZvbnREZXNjcmlwdGlv
biwgQ29sb3IoMjU1LCAwLCAwKSwgSW50UG9pbnQoMCwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
UGl4ZWxTaXplKCkpLCBtX2FzY2lpVG9SZWN0VGFibGUpOworICAgIG1fYXRsYXMgPSBDb21wb3Np
dG9ySFVERm9udEF0bGFzOjpnZW5lcmF0ZUZvbnRBdGxhcyhtX2FzY2lpVG9SZWN0VGFibGUsIG1f
Zm9udEhlaWdodCk7CiB9CiAKIHZvaWQgQ0NGb250QXRsYXM6OmRyYXdUZXh0KFNrQ2FudmFzKiBj
YW52YXMsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb3NpdGlvbiwg
Y29uc3QgSW50U2l6ZSYgY2xpcCkgY29uc3QKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwotICAgIEFTU0VSVChtX2F0bGFzKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGxp
bmVzOwogICAgIHRleHQuc3BsaXQoJ1xuJywgbGluZXMpOwogCi0gICAgUGxhdGZvcm1Db250ZXh0
U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RHJh
d2luZ1RvSW1hZ2VCdWZmZXIodHJ1ZSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBs
YXRmb3JtQ29udGV4dCk7Ci0KICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IGRlc3RQb3NpdGlvbjsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGRyYXdPbmVMaW5lT2ZUZXh0SW50ZXJuYWwoJmNvbnRleHQsIGxpbmVzW2ldLCBwb3NpdGlvbik7
CisgICAgICAgIGRyYXdPbmVMaW5lT2ZUZXh0SW50ZXJuYWwoY2FudmFzLCBsaW5lc1tpXSwgcG9z
aXRpb24pOwogICAgICAgICBwb3NpdGlvbi5zZXRZKHBvc2l0aW9uLnkoKSArIG1fZm9udEhlaWdo
dCk7CiAgICAgICAgIGlmIChwb3NpdGlvbi55KCkgPiBjbGlwLmhlaWdodCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIH0KIAotdm9pZCBDQ0ZvbnRBdGxhczo6ZHJhd09uZUxpbmVPZlRl
eHRJbnRlcm5hbChHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGNvbnN0IFN0cmluZyYg
dGV4dExpbmUsIGNvbnN0IEludFBvaW50JiBkZXN0UG9zaXRpb24pIGNvbnN0Cit2b2lkIENDRm9u
dEF0bGFzOjpkcmF3T25lTGluZU9mVGV4dEludGVybmFsKFNrQ2FudmFzKiBjYW52YXMsIGNvbnN0
IFN0cmluZyYgdGV4dExpbmUsIGNvbnN0IEludFBvaW50JiBkZXN0UG9zaXRpb24pIGNvbnN0CiB7
CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9hdGxh
cyk7CiAKICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IGRlc3RQb3NpdGlvbjsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGV4dExpbmUubGVuZ3RoKCk7ICsraSkgewogICAgICAgICAvLyBJ
ZiB0aGUgQVNDSUkgY29kZSBpcyBvdXQgb2YgYm91bmRzLCB0aGVuIGluZGV4IDAgaXMgdXNlZCwg
d2hpY2ggaXMganVzdCBhIHBsYWluIHJlY3RhbmdsZSBnbHlwaC4KICAgICAgICAgaW50IGFzY2lp
SW5kZXggPSAodGV4dExpbmVbaV0gPCAxMjgpID8gdGV4dExpbmVbaV0gOiAwOwogICAgICAgICBJ
bnRSZWN0IGdseXBoQm91bmRzID0gbV9hc2NpaVRvUmVjdFRhYmxlW2FzY2lpSW5kZXhdOwotICAg
ICAgICB0YXJnZXRDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9hdGxhcy5nZXQoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgcG9zaXRpb24sIGdseXBoQm91bmRzKTsKKyAgICAgICAgU2tJUmVjdCBz
b3VyY2UgPSBnbHlwaEJvdW5kczsKKyAgICAgICAgY2FudmFzLT5kcmF3Qml0bWFwUmVjdChtX2F0
bGFzLCAmc291cmNlLCBTa1JlY3Q6Ok1ha2VYWVdIKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgp
LCBnbHlwaEJvdW5kcy53aWR0aCgpLCBnbHlwaEJvdW5kcy5oZWlnaHQoKSkpOwogICAgICAgICBw
b3NpdGlvbi5zZXRYKHBvc2l0aW9uLngoKSArIGdseXBoQm91bmRzLndpZHRoKCkpOwogICAgIH0K
IH0KIAotdm9pZCBDQ0ZvbnRBdGxhczo6ZHJhd0RlYnVnQXRsYXMoR3JhcGhpY3NDb250ZXh0KiB0
YXJnZXRDb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvc2l0aW9uKSBjb25zdAordm9pZCBD
Q0ZvbnRBdGxhczo6ZHJhd0RlYnVnQXRsYXMoU2tDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UG9p
bnQmIGRlc3RQb3NpdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOwotICAgIEFTU0VSVChtX2F0bGFzKTsKIAotICAgIHRhcmdldENvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcihtX2F0bGFzLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UG9zaXRp
b24sIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShBVExBU19TSVpFLCBBVExBU19T
SVpFKSkpOworICAgIFNrSVJlY3Qgc291cmNlID0gU2tJUmVjdDo6TWFrZVdIKG1fYXRsYXMud2lk
dGgoKSwgbV9hdGxhcy5oZWlnaHQoKSk7CisgICAgY2FudmFzLT5kcmF3Qml0bWFwUmVjdChtX2F0
bGFzLCAmc291cmNlLCBTa1JlY3Q6Ok1ha2VYWVdIKGRlc3RQb3NpdGlvbi54KCksIGRlc3RQb3Np
dGlvbi55KCksIG1fYXRsYXMud2lkdGgoKSwgbV9hdGxhcy5oZWlnaHQoKSkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZvbnRBdGxhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NGb250QXRsYXMuaAppbmRleCA4YmQ3NzdlOTAyNmE5
YTk3MWQzMmRlYjZlMjg0YzdjZWExYzE5NTJiLi5kZDE2ZTI1OWJkNGY4ODUzMjNiYzUyOGEwYmYx
NDU1ZWQ4NjE3ZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0ZvbnRBdGxhcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRm9udEF0bGFzLmgKQEAgLTI3LDcgKzI3LDggQEAKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zOCw5ICszOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ29sb3I7CiBjbGFzcyBGb250RGVzY3JpcHRpb247Ci1jbGFzcyBJbnRQb2lu
dDsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRQb2lu
dDsKK2NsYXNzIEludFNpemU7CiAKIC8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYmFzaWMgYWJpbGl0
eSB0byBkcmF3IHRleHQgb250byB0aGUgaGVhZHMtdXAgZGlzcGxheS4KIC8vIEl0IG11c3QgYmUg
aW5pdGlhbGl6ZWQgb24gdGhlIG1haW4gdGhyZWFkLCBhbmQgaXQgY2FuIG9ubHkgZHJhdyB0ZXh0
IG9uIHRoZSBpbXBsIHRocmVhZC4KQEAgLTUxLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0ZvbnRBdGxhcygpKTsKICAgICB9CisgICAgfkND
Rm9udEF0bGFzKCk7CiAKICAgICAvLyBDcmVhdGVzIHRoZSBmb250IGF0bGFzLgogICAgIC8vIC0g
U2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KQEAgLTY1LDIxICs2Nywx
NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3VGV4dChTa0NhbnZhcyosIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgY2xpcCkg
Y29uc3Q7CiAKICAgICAvLyBEcmF3cyB0aGUgZW50aXJlIGF0bGFzIGF0IHRoZSBzcGVjaWZpZWQg
cG9zaXRpb24sIGp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAgICB2b2lkIGRyYXdEZWJ1
Z0F0bGFzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiBkZXN0UG9zaXRpb24pIGNv
bnN0OworICAgIHZvaWQgZHJhd0RlYnVnQXRsYXMoU2tDYW52YXMqLCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvc2l0aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBDQ0ZvbnRBdGxhcygpOwogCi0g
ICAgLy8gUGFpbnRzIHRoZSBmb250IGludG8gdGhlIGF0bGFzLCBmcm9tIGxlZnQtdG8tcmlnaHQs
IHRvcC10by1ib3R0b20sIHN0YXJ0aW5nIGF0Ci0gICAgLy8gc3RhcnRpbmdQb3NpdGlvbi4gQXQg
dGhlIHNhbWUgdGltZSwgaXQgdXBkYXRlcyB0aGUgYXNjaWktdG8tSW50UmVjdCBtYXBwaW5nIGZv
cgotICAgIC8vIGVhY2ggY2hhcmFjdGVyLiBCeSBkb2luZyB0aGluZ3MgdGhpcyB3YXksIGl0IGlz
IHBvc3NpYmxlIHRvIHN1cHBvcnQgdmFyaWFibGUtd2lkdGgKLSAgICAvLyBmb250cyBhbmQgbXVs
dGlwbGUgZm9udHMgb24gdGhlIHNhbWUgYXRsYXMuCi0gICAgdm9pZCBnZW5lcmF0ZUF0bGFzRm9y
Rm9udChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBDb2xv
ciYgZm9udENvbG9yLCBjb25zdCBJbnRQb2ludCYgc3RhcnRpbmdQb3NpdGlvbiwgSW50UmVjdCBh
c2NpaVRvQXRsYXNUYWJsZVsxMjhdKTsKLQotICAgIHZvaWQgZHJhd09uZUxpbmVPZlRleHRJbnRl
cm5hbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvc2l0aW9uKSBjb25zdDsKKyAgICB2b2lkIGRyYXdPbmVMaW5lT2ZUZXh0SW50ZXJuYWwoU2tD
YW52YXMqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBJbnRQb2ludCYgZGVzdFBvc2l0aW9uKSBjb25z
dDsKIAogICAgIC8vIFRoZSBhY3R1YWwgdGV4dHVyZSBhdGxhcyBjb250YWluaW5nIGFsbCB0aGUg
cHJlLXJlbmRlcmVkIGdseXBocy4KLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fYXRsYXM7Cisg
ICAgU2tCaXRtYXAgbV9hdGxhczsKIAogICAgIC8vIFRoZSBsb29rLXVwIHRhYmxlcyBtYXBwaW5n
IGFzY2lpIGNoYXJhY3RlcnMgdG8gdGhlaXIgSW50UmVjdCBsb2NhdGlvbnMgb24gdGhlIGF0bGFz
LgogICAgIEludFJlY3QgbV9hc2NpaVRvUmVjdFRhYmxlWzEyOF07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5
TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXlMYXllckltcGwuY3BwCmluZGV4IDA4NGM5YjAxOTVhM2Y0OGEw
Mjc3MTI1ZGIyMDFiNjU2MGEyOTcwODYuLmMxZjE3ZmVkMWVkZTg1ODBmMjFiM2MwYzgxMThkNWJm
ODQ1NDA3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXlMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXlMYXllcklt
cGwuY3BwCkBAIC0zMCwxMSArMzAsMTQgQEAKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1BhaW50
LmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z1JlY3RIaXN0b3J5LmgiCiAjaW5jbHVkZSAiY2MvQ0NG
b250QXRsYXMuaCIKICNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0ZUNvdW50ZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NRdWFkU2luay5oIgor
I2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgogI2luY2x1ZGUgPHB1YmxpYy9X
ZWJDb21wb3NpdG9yVGV4dHVyZVF1YWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAo=
</data>
<flag name="review"
          id="165423"
          type_id="1"
          status="+"
          setter="enne"
    />
          </attachment>
      

    </bug>

</bugzilla>