<?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>48860</bug_id>
          
          <creation_ts>2010-11-02 12:19:37 -0700</creation_ts>
          <short_desc>U+FEFF is rendered as an empty box in a complex script page on Windows</short_desc>
          <delta_ts>2011-04-20 12:14:11 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows Vista</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.youtube.com/watch?v=Kjbmp2FAM1Q</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="Jungshik Shin">jshin</reporter>
          <assigned_to name="Jungshik Shin">jshin</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>mitz</cc>
    
    <cc>playmobil</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303546</commentid>
    <comment_count>0</comment_count>
      <attachid>72712</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2010-11-02 12:19:37 -0700</bug_when>
    <thetext>Created attachment 72712
preliminary patch without layout test yet

This is a chromium bug (http://crbug.com/50337 ). I&apos;m attaching a preliminary patch without a layout test (yet). 

Go to http://www.youtube.com/watch?v=Kjbmp2FAM1Q and comments have some empty boxes sprinkled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386686</commentid>
    <comment_count>1</comment_count>
      <attachid>89799</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-04-15 09:43:07 -0700</bug_when>
    <thetext>Created attachment 89799
updated patch (more generic)

This is more generic than the previous one. A layout test will be uploaded separately for now. After generating expected results, I upload everything together for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386688</commentid>
    <comment_count>2</comment_count>
      <attachid>89800</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-04-15 09:47:05 -0700</bug_when>
    <thetext>Created attachment 89800
layout test (wip) 

I&apos;m going to revise this test. This is a check-point upload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387332</commentid>
    <comment_count>3</comment_count>
      <attachid>89945</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-04-17 01:17:29 -0700</bug_when>
    <thetext>Created attachment 89945
patch for review 

This patch include a layout test. I also filed bug 58741 for Chromium Linux that fails the test (only in DumpRenerTree).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387333</commentid>
    <comment_count>4</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-04-17 01:26:19 -0700</bug_when>
    <thetext>BTW, I confirmed that both Safari Mac and Chrome on Mac with my patch (to treat U+FEFF as zero-width space glyph in simple/complex script paths) pass the test (complex script code path was not change for them and they work as expected). The latest nightly build of Webkit on Windows passes the complex script version and I&apos;m sure it&apos;ll pass the simple script version with U+FEFF added if my patch is applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387340</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-17 02:19:38 -0700</bug_when>
    <thetext>Attachment 89945 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/WebCore/platform/graphics/chromium/UniscribeHelper.h:230:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:790:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:941:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 4 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387866</commentid>
    <comment_count>6</comment_count>
      <attachid>90053</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-04-18 10:53:43 -0700</bug_when>
    <thetext>Created attachment 90053
patch updated to fix style nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388274</commentid>
    <comment_count>7</comment_count>
      <attachid>90053</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-18 20:52:33 -0700</bug_when>
    <thetext>Comment on attachment 90053
patch updated to fix style nits

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

r- primarily due to the questions that I have which hopefully you&apos;ll help me understand.

&gt; Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:790
&gt; +                &amp;&amp; !Font::treatAsZeroWidthSpaceInComplexScript(c))

fwiw, no line break is needed here (but if you wish to have one, go right ahead).

&gt; Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:796
&gt; +            if (Font::treatAsSpace(c)) {

Why not store the result of treatAsSpace (from above) and use the result here?

&gt; Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:798
&gt; +                // but space_width does. Here we find out how off we are from

space_width? (Perhaps you mean spaceWidthWithoutLetterSpacing).

&gt; Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:800
&gt; +                //  then just subtract that diff.

extra space after //

&gt; Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:809
&gt; +            // For characters to treat as zero-width space in complex

Consider
// For characters treated as zero-width spaces in complex

&gt; Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:939
&gt; +        // do not care if a character is zero-width invisible character.

Start with capital letter.

Also, it doesn&apos;t look like this comment adds any value as it just repeats what the code does. If you think a comment is valuable here, explain why the code is skipping zero-width spaces.

Perhaps like this
// Skip zero-width spaces because they are never considered to be missing in a font.

&gt; Source/WebCore/platform/graphics/chromium/UniscribeHelper.cpp:945
&gt; +            || (glyph == properties-&gt;wgInvalid &amp;&amp; glyph != properties-&gt;wgBlank))

No line break needed (but if you wish that is fine).

&gt; LayoutTests/fast/text/zero-width-characters-complex-script.html:18
&gt; +    else if (abWidth &gt; aWidth)

No need for else since the previous if has a return.

&gt; LayoutTests/fast/text/zero-width-characters-complex-script.html:20
&gt; +    else

Ditto.

&gt; LayoutTests/fast/text/zero-width-characters-complex-script.html:29
&gt; +    for (var i = 1; i &lt; 32; ++i) // &gt;

I don&apos;t understand what the comment &quot;&gt;&quot; means.

&gt; LayoutTests/fast/text/zero-width-characters-complex-script.html:30
&gt; +      if (i != 9 &amp;&amp; i != 10 &amp;&amp; i != 13) // ;

Ditto for &quot;;&quot;.

Also consider a 4 space indent (and the same for the next line).

Why are these values omitted (9, 10, 13) (since they are included in treatAsZeroWidthSpaceInComplexScript)?

&gt; LayoutTests/fast/text/zero-width-characters-complex-script.html:38
&gt; +    failedCount += testChar(0xFFFC);

It looks like this doesn&apos;t include everything in treatAsZeroWidthSpaceInComplexScript. Why not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388275</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-18 20:55:12 -0700</bug_when>
    <thetext>Removing [chromium]. This bug is about move than chromium, since it changes treatAsZeroWidthSpace which is used by other ports by adding a check for zeroWidthNoBreakSpace = 0xFEFF; in there.

Adding Dan in case he has any concerns about that part of the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388326</commentid>
    <comment_count>9</comment_count>
      <attachid>90154</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-04-18 23:45:59 -0700</bug_when>
    <thetext>Created attachment 90154
updated patch addressing Levin&apos;s comment

Thank you for the review. I addressed all the review comments. 

(9, 10, 13) are excluded because they&apos;re turned to an actual space before reaching the code in question per HTML(5). Well, you may ask why they&apos;re included in treatAsZeroWidthSpace(InComplexScript) in the first place. Perhaps, they shouldn&apos;t be included, but I haven&apos;t checked other uses of treatAsZeroWidthSpace and leaving it alone in this patch. 

As for not testing other characters in treatAsZeroWidthSpaceInComplexScript, it&apos;s an oversight because I made a new layout test by modifying zero-width-characters.html and didn&apos;t notice that the test does not test for U+007F - U+009F/U+00AD and U+202A - U+202E. 

I guess the latter block is not tested in zero-width-characters.html because they&apos;re BiDi controls and it can mess up the width measurement. I think I can rewrite zero-width-characters.html to test them as well. 

As for the former, I think it&apos;s just an oversight. 

I&apos;ll revise that test in a separate CL to address both issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388329</commentid>
    <comment_count>10</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-04-18 23:49:37 -0700</bug_when>
    <thetext>(In reply to comment #9)

&gt; I&apos;ll revise that test in a separate CL to address both issues.

To clarify: 
zero-width-characters-complex-script.html does test two blocks mentioned. What I&apos;m gonna revise in a separate patch is the existing test (zero-width-characters.html).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388335</commentid>
    <comment_count>11</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-04-19 00:01:23 -0700</bug_when>
    <thetext>I also attached a &apos;diagnosis-friendly&apos; test to bug 58741 for Linux Chrome (it just fails one character, but other ports may fail more and want to know which ones fail).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388635</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-19 11:22:21 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84264 might have broken Chromium Win Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388710</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-19 12:40:46 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84271 might have broken SnowLeopard Intel Release (Tests)
The following tests are not passing:
plugins/mouse-click-iframe-to-plugin.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388770</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-19 14:01:04 -0700</bug_when>
    <thetext>The test added by this change is failing on Qt:
http://build.webkit.org/builders/Qt%20Linux%20Release/builds/31631</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389419</commentid>
    <comment_count>15</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-04-20 12:14:11 -0700</bug_when>
    <thetext>bug 58741 was revised to track both Chrome Linux (DRT) and Qt Linux test failures.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72712</attachid>
            <date>2010-11-02 12:19:37 -0700</date>
            <delta_ts>2011-04-15 09:43:07 -0700</delta_ts>
            <desc>preliminary patch without layout test yet</desc>
            <filename>feff.patch</filename>
            <type>text/plain</type>
            <size>14255</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IEQ6L3NyYy9jci90cnVuay9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBEOi9zcmMvY3IvdHJ1bmsvc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3BwCShy
ZXZpc2lvbiA3MDQ0MSkNCisrKyBEOi9zcmMvY3IvdHJ1bmsvc3JjL3RoaXJkX3BhcnR5L1dlYktp
dC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRS
dW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNDIsNyArNDIsOCBAQA0KICAgICA6IFVuaXNjcmli
ZUhlbHBlcihydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIHJ1bi5ydGwoKSwNCiAgICAg
ICAgICAgICAgICAgICAgICAgZm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5oZm9u
dCgpLA0KICAgICAgICAgICAgICAgICAgICAgICBmb250LnByaW1hcnlGb250KCktPnBsYXRmb3Jt
RGF0YSgpLnNjcmlwdENhY2hlKCksDQotICAgICAgICAgICAgICAgICAgICAgIGZvbnQucHJpbWFy
eUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2NyaXB0Rm9udFByb3BlcnRpZXMoKSkNCisgICAgICAg
ICAgICAgICAgICAgICAgZm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zY3JpcHRG
b250UHJvcGVydGllcygpLA0KKyAgICAgICAgICAgICAgICAgICAgICBmb250LnByaW1hcnlGb250
KCktPnNwYWNlR2x5cGgoKSkNCiAgICAgLCBtX2ZvbnQoJmZvbnQpDQogICAgICwgbV9mb250SW5k
ZXgoMCkNCiB7DQpAQCAtNjgsNyArNjksNyBAQA0KICAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENh
Y2hlLA0KICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIGZvbnRQcm9wZXJ0aWVzKQ0KICAgICA6
IFVuaXNjcmliZUhlbHBlcihpbnB1dCwgaW5wdXRMZW5ndGgsIGlzUnRsLCBoZm9udCwNCi0gICAg
ICAgICAgICAgICAgICAgICAgc2NyaXB0Q2FjaGUsIGZvbnRQcm9wZXJ0aWVzKQ0KKyAgICAgICAg
ICAgICAgICAgICAgICBzY3JpcHRDYWNoZSwgZm9udFByb3BlcnRpZXMsIDApDQogICAgICwgbV9m
b250KDApDQogICAgICwgbV9mb250SW5kZXgoLTEpDQogew0KSW5kZXg6IEQ6L3NyYy9jci90cnVu
ay9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEQ6L3NyYy9jci90cnVu
ay9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uaAkocmV2aXNpb24gNzA0NDEpDQorKysgRDovc3JjL2Ny
L3RydW5rL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oCSh3b3JraW5nIGNvcHkpDQpAQCAtNzgsNyAr
NzgsNyBAQA0KIC8vIGludGwyIHBhZ2UtY3ljbGVyIHRlc3QgaXMgbm90aWNlYWJseSBzbG93ZXIg
d2l0aCBvbmUgb3V0IHBhcmFtIHRoYW4NCiAvLyB0aGUgY3VycmVudCB2ZXJzaW9uIGFsdGhvdWdo
IHRoZSBzdWJzZXF1ZW50IDkgcGFzc2VzIHRha2UgYWJvdXQgdGhlDQogLy8gc2FtZSB0aW1lLg0K
LWJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksIGludCBzdHlsZSwg
TE9HRk9OVCosIGludCogYXNjZW50LCBIRk9OVCosIFNDUklQVF9DQUNIRSoqKTsNCitib29sIGdl
dERlcml2ZWRGb250RGF0YShjb25zdCBVQ2hhciogZmFtaWx5LCBpbnQgc3R5bGUsIExPR0ZPTlQq
LCBpbnQqIGFzY2VudCwgSEZPTlQqLCBTQ1JJUFRfQ0FDSEUqKiwgV09SRCogc3BhY2VHbHlwaCk7
DQogDQogZW51bSB7DQogICAgIEZvbnRTdHlsZU5vcm1hbCA9IDAsDQpJbmRleDogRDovc3JjL2Ny
L3RydW5rL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEQ6L3NyYy9jci90cnVu
ay9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVW5pc2NyaWJlSGVscGVyLmgJKHJldmlzaW9uIDcwNDQxKQ0KKysrIEQ6L3NyYy9jci90cnVu
ay9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVW5pc2NyaWJlSGVscGVyLmgJKHdvcmtpbmcgY29weSkNCkBAIC03Niw3ICs3Niw4IEBADQog
ICAgICAgICAgICAgICAgICAgICBib29sIGlzUnRsLA0KICAgICAgICAgICAgICAgICAgICAgSEZP
TlQsDQogICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfQ0FDSEUqLA0KLSAgICAgICAgICAgICAg
ICAgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKik7DQorICAgICAgICAgICAgICAgICAgICBTQ1JJ
UFRfRk9OVFBST1BFUlRJRVMqLA0KKyAgICAgICAgICAgICAgICAgICAgV09SRCk7DQogDQogICAg
IHZpcnR1YWwgflVuaXNjcmliZUhlbHBlcigpOw0KIA0KQEAgLTIyNSw3ICsyMjYsOCBAQA0KICAg
ICAgICAgICAgIDogbV9wcmVQYWRkaW5nKDApDQogICAgICAgICAgICAgLCBtX2hmb250KE5VTEwp
DQogICAgICAgICAgICAgLCBtX3NjcmlwdENhY2hlKE5VTEwpDQotICAgICAgICAgICAgLCBtX2Fz
Y2VudE9mZnNldCgwKSB7DQorICAgICAgICAgICAgLCBtX2FzY2VudE9mZnNldCgwKQ0KKyAgICAg
ICAgICAgICwgbV9zcGFjZUdseXBoKDApIHsNCiAgICAgICAgICAgICBtX2FiYy5hYmNBID0gMDsN
CiAgICAgICAgICAgICBtX2FiYy5hYmNCID0gMDsNCiAgICAgICAgICAgICBtX2FiYy5hYmNDID0g
MDsNCkBAIC0zMTksNiArMzIxLDggQEANCiAgICAgICAgIC8vIHdoZW4gZHJhd2luZyBhIHN0cmlu
ZywgdG8gYWxpZ24gbXVsdGlwbGUgcnVucyByZW5kZXJlZCB3aXRoDQogICAgICAgICAvLyBkaWZm
ZXJlbnQgZm9udHMuDQogICAgICAgICBpbnQgbV9hc2NlbnRPZmZzZXQ7DQorDQorICAgICAgICBX
T1JEIG1fc3BhY2VHbHlwaDsNCiAgICAgfTsNCiANCiAgICAgLy8gQ29tcHV0ZXMgdGhlIHJ1bnNf
IGFycmF5IGZyb20gdGhlIHRleHQgcnVuLg0KQEAgLTM0Myw2ICszNDcsMTAgQEANCiAgICAgLy8g
UmV0dXJucyB0aGUgdG90YWwgd2lkdGggb2YgYSBzaW5nbGUgaXRlbS4NCiAgICAgaW50IGFkdmFu
Y2VGb3JJdGVtKGludCkgY29uc3Q7DQogDQorICAgIGJvb2wgY29udGFpbnNNaXNzaW5nR2x5cGhz
KGNvbnN0IFNoYXBpbmcmLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
Q1JJUFRfSVRFTSYsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNDUklQ
VF9GT05UUFJPUEVSVElFUyopIGNvbnN0Ow0KKw0KICAgICAvLyBTaGFwZXMgYSBydW4gKHBvaW50
ZWQgdG8gYnkgfGlucHV0fCkgdXNpbmcgfGhmb250fCBmaXJzdC4NCiAgICAgLy8gVHJpZXMgYSBz
ZXJpZXMgb2YgZm9udHMgc3BlY2lmaWVkIHJldHJpZXZlZCB3aXRoIE5leHRXaW5Gb250RGF0YQ0K
ICAgICAvLyBhbmQgZmluYWxseSBhIGZvbnQgY292ZXJpbmcgY2hhcmFjdGVycyBpbiB8KmlucHV0
fC4gQSBzdHJpbmcgcG9pbnRlZA0KQEAgLTM4NCw2ICszOTIsNyBAQA0KICAgICBpbnQgbV9hc2Nl
bnQ7DQogICAgIExPR0ZPTlQgbV9sb2dmb250Ow0KICAgICBpbnQgbV9zdHlsZTsNCisgICAgV09S
RCBtX3NwYWNlR2x5cGg7DQogDQogICAgIC8vIE9wdGlvbnMsIHNlZSB0aGUgZ2V0dGVycy9zZXR0
ZXJzIGFib3ZlLg0KICAgICBib29sIG1fZGlyZWN0aW9uYWxPdmVycmlkZTsNCkluZGV4OiBEOi9z
cmMvY3IvdHJ1bmsvc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBEOi9zcmMv
Y3IvdHJ1bmsvc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAJKHJldmlzaW9uIDcwNDQxKQ0KKysrIEQ6L3Ny
Yy9jci90cnVuay9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTU2LDYg
KzU2LDcgQEANCiAvLyB3aXRoIGRlZmF1bHQvaW52YWxpZC9ibGFuayBnbHlwaHMuIFRoZXJlZm9y
ZSwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZ2x5cGgNCiAvLyBhcnJheSByZXR1cm5lZCBieSBT
Y3JpcHRTaGFwZSBjb250YWlucyBhbnkgb2YgdGhvc2UgZ2x5cGhzIHRvIG1ha2UNCiAvLyBzdXJl
IHRoYXQgdGhlIHRleHQgcnVuIGlzIHJlbmRlcmVkIHN1Y2Nlc3NmdWxseS4NCisjaWYgMA0KIHN0
YXRpYyBib29sIGNvbnRhaW5zTWlzc2luZ0dseXBocyhXT1JEICpnbHlwaHMsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogcHJvcGVydGllcykNCkBAIC02
OSw2ICs3MCw3IEBADQogDQogICAgIHJldHVybiBmYWxzZTsNCiB9DQorI2VuZGlmDQogDQogLy8g
SEZPTlQgaXMgdGhlICdpbmNhcm5hdGlvbicgb2YgJ2V2ZXJ5dGhpbmcnIGFib3V0IGZvbnQsIGJ1
dCBpdCdzIGFuIG9wYXF1ZQ0KIC8vIGhhbmRsZSBhbmQgd2UgY2FuJ3QgZGlyZWN0bHkgcXVlcnkg
aXQgdG8gbWFrZSBhIG5ldyBIRk9OVCBzaGFyaW5nDQpAQCAtMTAyLDEzICsxMDQsMTUgQEANCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNSdGwsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBIRk9OVCBoZm9udCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNDUklQVF9DQUNIRSogc2NyaXB0Q2FjaGUsDQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIGZvbnRQcm9wZXJ0aWVzKQ0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBmb250
UHJvcGVydGllcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQgc3BhY2VH
bHlwaCkNCiAgICAgOiBtX2lucHV0KGlucHV0KQ0KICAgICAsIG1faW5wdXRMZW5ndGgoaW5wdXRM
ZW5ndGgpDQogICAgICwgbV9pc1J0bChpc1J0bCkNCiAgICAgLCBtX2hmb250KGhmb250KQ0KICAg
ICAsIG1fc2NyaXB0Q2FjaGUoc2NyaXB0Q2FjaGUpDQogICAgICwgbV9mb250UHJvcGVydGllcyhm
b250UHJvcGVydGllcykNCisgICAgLCBtX3NwYWNlR2x5cGgoc3BhY2VHbHlwaCkNCiAgICAgLCBt
X2RpcmVjdGlvbmFsT3ZlcnJpZGUoZmFsc2UpDQogICAgICwgbV9pbmhpYml0TGlnYXRlKGZhbHNl
KQ0KICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQ0KQEAgLTU0Niw2ICs1NTAsNyBAQA0KICAgICBT
Q1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlID0gbV9zY3JpcHRDYWNoZTsNCiAgICAgU0NSSVBUX0ZP
TlRQUk9QRVJUSUVTKiBmb250UHJvcGVydGllcyA9IG1fZm9udFByb3BlcnRpZXM7DQogICAgIGlu
dCBhc2NlbnQgPSBtX2FzY2VudDsNCisgICAgV09SRCBzcGFjZUdseXBoID0gbV9zcGFjZUdseXBo
Ow0KICAgICBIREMgdGVtcERDID0gMDsNCiAgICAgSEdESU9CSiBvbGRGb250ID0gMDsNCiAgICAg
SFJFU1VMVCBocjsNCkBAIC02MDEsNyArNjA2LDcgQEANCiAgICAgICAgIH0gZWxzZSBpZiAoaHIg
PT0gRV9PVVRPRk1FTU9SWSkgew0KICAgICAgICAgICAgIG51bUdseXBocyAqPSAyOw0KICAgICAg
ICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfSBlbHNlIGlmIChTVUNDRUVERUQoaHIpICYmIChs
YXN0RmFsbGJhY2tUcmllZCB8fCAhY29udGFpbnNNaXNzaW5nR2x5cGhzKCZzaGFwaW5nLm1fZ2x5
cGhzWzBdLCBnZW5lcmF0ZWRHbHlwaHMsIGZvbnRQcm9wZXJ0aWVzKSkpDQorICAgICAgICB9IGVs
c2UgaWYgKFNVQ0NFRURFRChocikgJiYgKGxhc3RGYWxsYmFja1RyaWVkIHx8ICFjb250YWluc01p
c3NpbmdHbHlwaHMoc2hhcGluZywgcnVuLCBmb250UHJvcGVydGllcykpKQ0KICAgICAgICAgICAg
IGJyZWFrOw0KIA0KICAgICAgICAgLy8gVGhlIGN1cnJlbnQgZm9udCBjYW4ndCByZW5kZXIgdGhp
cyBydW4uIGNsZWFyIERDIGFuZCB0cnkNCkBAIC02MzIsNyArNjM3LDkgQEANCiAgICAgICAgICAg
ICBjb25zdCBVQ2hhciAqZmFtaWx5ID0gZ2V0RmFsbGJhY2tGYW1pbHkoaW5wdXQsIGl0ZW1MZW5n
dGgsDQogICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHksIDAs
IDApOw0KICAgICAgICAgICAgIGJvb2wgZm9udE9rID0gZ2V0RGVyaXZlZEZvbnREYXRhKGZhbWls
eSwgbV9zdHlsZSwgJm1fbG9nZm9udCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmFzY2VudCwgJmhmb250LCAmc2NyaXB0Q2FjaGUpOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhc2NlbnQsICZoZm9udCwgJnNj
cmlwdENhY2hlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZzcGFjZUdseXBoKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgDQogDQogICAgICAgICAgICAgaWYgKCFmb250T2spIHsNCiAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhpcyBHZXREZXJpdmVkRm9udERhdGEgaXMgY2FsbGVkIGZyb20gdGhlIHJlbmRlcmVy
IGl0DQpAQCAtNjQ0LDcgKzY1MSw4IEBADQogDQogICAgICAgICAgICAgICAgIC8vIFRyeSBhZ2Fp
bi4NCiAgICAgICAgICAgICAgICAgZm9udE9rID0gZ2V0RGVyaXZlZEZvbnREYXRhKGZhbWlseSwg
bV9zdHlsZSwgJm1fbG9nZm9udCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmYXNjZW50LCAmaGZvbnQsICZzY3JpcHRDYWNoZSk7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXNjZW50LCAmaGZvbnQsICZzY3JpcHRD
YWNoZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcGFj
ZUdseXBoKTsNCiAgICAgICAgICAgICAgICAgQVNTRVJUKGZvbnRPayk7DQogICAgICAgICAgICAg
fQ0KIA0KQEAgLTY3Myw2ICs2ODEsNyBAQA0KICAgICAvLyBiZWNhdXNlIGl0J3Mgbm90IHVzZWQg
ZWxzZXdoZXJlLg0KICAgICBzaGFwaW5nLm1faGZvbnQgPSBoZm9udDsNCiAgICAgc2hhcGluZy5t
X3NjcmlwdENhY2hlID0gc2NyaXB0Q2FjaGU7DQorICAgIHNoYXBpbmcubV9zcGFjZUdseXBoID0g
c3BhY2VHbHlwaDsNCiANCiAgICAgLy8gVGhlIGFzY2VudCBvZiBhIGZvbnQgZm9yIHRoaXMgcnVu
IGNhbiBiZSBkaWZmZXJlbnQgZnJvbQ0KICAgICAvLyB0aGF0IG9mIHRoZSBwcmltYXJ5IGZvbnQg
c28gdGhhdCB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YNCkBAIC04MDcsMTIgKzgxNiwyMSBAQA0K
ICAgICAgICAgU2hhcGluZyYgc2hhcGluZyA9IG1fc2hhcGVzW3J1bl07DQogDQogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNoYXBpbmcuY2hhckxlbmd0aCgpOyBpKyspIHsNCi0gICAgICAg
ICAgICBpZiAoIXRyZWF0QXNTcGFjZShtX2lucHV0W21fcnVuc1tydW5dLmlDaGFyUG9zICsgaV0p
KQ0KKyAgICAgICAgICAgIFVDaGFyIGMgPSBtX2lucHV0W21fcnVuc1tydW5dLmlDaGFyUG9zICsg
aV07DQorICAgICAgICAgICAgaWYgKCF0cmVhdEFzU3BhY2UoYykgJiYgYyAhPSAweEZFRkYpDQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KIA0KICAgICAgICAgICAgIGludCBnbHlwaEluZGV4
ID0gc2hhcGluZy5tX2xvZ3NbaV07DQogICAgICAgICAgICAgaW50IGN1cnJlbnRBZHZhbmNlID0g
c2hhcGluZy5tX2FkdmFuY2VbZ2x5cGhJbmRleF07DQogDQorICAgICAgICAgICAgaWYgKGMgPT0g
MHhGRUZGKSB7DQorICAgICAgICAgICAgICAgIHNoYXBpbmcubV9hZHZhbmNlW2dseXBoSW5kZXhd
ID0gMDsNCisgICAgICAgICAgICAgICAgc2hhcGluZy5tX29mZnNldHNbZ2x5cGhJbmRleF0uZHUg
PSAwOw0KKyAgICAgICAgICAgICAgICBzaGFwaW5nLm1fb2Zmc2V0c1tnbHlwaEluZGV4XS5kdiA9
IDA7DQorICAgICAgICAgICAgICAgIHNoYXBpbmcubV9nbHlwaHNbZ2x5cGhJbmRleF0gPSBzaGFw
aW5nLm1fc3BhY2VHbHlwaDsNCisgICAgICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICAg
ICAgfQ0KKw0KICAgICAgICAgICAgIC8vIGN1cnJlbnRBZHZhbmNlIGRvZXMgbm90IGluY2x1ZGUg
YWRkaXRpb25hbCBsZXR0ZXItc3BhY2luZywgYnV0DQogICAgICAgICAgICAgLy8gc3BhY2Vfd2lk
dGggZG9lcy4gSGVyZSB3ZSBmaW5kIG91dCBob3cgb2ZmIHdlIGFyZSBmcm9tIHRoZQ0KICAgICAg
ICAgICAgIC8vIGNvcnJlY3Qgd2lkdGggZm9yIHRoZSBzcGFjZSBub3QgaW5jbHVkaW5nIGxldHRl
ci1zcGFjaW5nLCB0aGVuDQpAQCAtOTI5LDQgKzk0NywyMSBAQA0KICAgICByZXR1cm4gc2hhcGlu
Zy5tX3ByZVBhZGRpbmcgKyBqdXN0aWZpY2F0aW9uOw0KIH0NCiANCitib29sIFVuaXNjcmliZUhl
bHBlcjo6Y29udGFpbnNNaXNzaW5nR2x5cGhzKGNvbnN0IFNoYXBpbmcmIHNoYXBpbmcsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTQ1JJUFRfSVRF
TSYgcnVuLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBwcm9wZXJ0aWVzKSBjb25zdA0KK3sNCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaGFwaW5nLmNoYXJMZW5ndGgoKTsgaSsrKSB7DQorICAgICAgICBV
Q2hhciBjID0gbV9pbnB1dFtydW4uaUNoYXJQb3MgKyBpXTsNCisgICAgICAgIGlmIChjID09IDB4
RkVGRiB8fCBjID09IDB4MjAwQikgY29udGludWU7DQorICAgICAgICBpbnQgZ2x5cGhJbmRleCA9
IHNoYXBpbmcubV9sb2dzW2ldOw0KKyAgICAgICAgV09SRCBnbHlwaCA9IHNoYXBpbmcubV9nbHlw
aHNbZ2x5cGhJbmRleF07DQorICAgICAgICBpZiAoZ2x5cGggPT0gcHJvcGVydGllcy0+d2dEZWZh
dWx0DQorICAgICAgICAgICAgfHwgKGdseXBoID09IHByb3BlcnRpZXMtPndnSW52YWxpZCAmJiBn
bHlwaCAhPSBwcm9wZXJ0aWVzLT53Z0JsYW5rKSkNCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsN
CisgICAgfQ0KKyAgICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKw0KIH0gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlDQpJbmRleDogRDovc3JjL2NyL3RydW5rL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHANCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBEOi9zcmMvY3IvdHJ1bmsvc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAkocmV2aXNpb24gNzA0NDEpDQorKysg
RDovc3JjL2NyL3RydW5rL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0xOTEsNiAr
MTkxLDkgQEANCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAob2JqZWN0UmVw
bGFjZW1lbnRDaGFyYWN0ZXIgJiB+KEdseXBoUGFnZTo6c2l6ZSAtIDEpKSkgew0KICAgICAgICAg
ICAgICAgICAgICAgLy8gT2JqZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlciBtdXN0IG5vdCByZW5k
ZXIgYXQgYWxsLg0KICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW29iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVyIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7DQorICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc3RhcnQgPT0gKHplcm9XaWR0aE5vQnJlYWtTcGFjZSAmIH4oR2x5cGhQYWdlOjpz
aXplIC0gMSkpKSB7DQorICAgICAgICAgICAgICAgICAgICAvLyBaV05CUy9CT00gbXVzdCBub3Qg
cmVuZGVyIGF0IGFsbC4NCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclt6ZXJvV2lkdGhOb0Jy
ZWFrU3BhY2UgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsNCiAgICAgICAgICAgICAgICAgfQ0K
ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IEds
eXBoUGFnZTo6c2l6ZSAqIDI7DQpJbmRleDogRDovc3JjL2NyL3RydW5rL3NyYy90aGlyZF9wYXJ0
eS9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBEOi9zcmMvY3IvdHJ1bmsvc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gNzA0NDEpDQorKysgRDovc3JjL2NyL3RydW5rL3Ny
Yy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdv
cmtpbmcgY29weSkNCkBAIC0xOTIsNyArMTkyLDcgQEANCiANCiAgICAgRm9udFNlbGVjdG9yKiBm
b250U2VsZWN0b3IoKSBjb25zdDsNCiAgICAgc3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFy
IGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSBu
b0JyZWFrU3BhY2U7IH0NCi0gICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlKFVD
aGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMg
PT0gc29mdEh5cGhlbiB8fCAoYyA+PSAweDIwMGMgJiYgYyA8PSAweDIwMGYpIHx8IChjID49IDB4
MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlcjsg
fQ0KKyAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1
cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwgMHhBMCkgfHwgYyA9PSBzb2Z0SHlwaGVu
IHx8IChjID49IDB4MjAwYyAmJiBjIDw9IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJhICYmIGMgPD0g
MHgyMDJlKSB8fCBjID09IHplcm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBjID09IG9iamVjdFJlcGxh
Y2VtZW50Q2hhcmFjdGVyOyB9DQogDQogICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIgbm9ybWFsaXpl
U3BhY2VzKFVDaGFyIGNoYXJhY3RlcikNCiAgICAgew0KSW5kZXg6IEQ6L3NyYy9jci90cnVuay9z
cmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gRDovc3JjL2NyL3RydW5r
L3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDcwNDQxKQ0KKysrIEQ6L3NyYy9j
ci90cnVuay9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjUw
LDE3ICsyNTAsMzEgQEANCiAgICAgcmV0dXJuIGdvdE1ldHJpY3MgPyB0bS50bUFzY2VudCA6IGtV
bmRlZmluZWRBc2NlbnQ7DQogfQ0KIA0KK1dPUkQgZ2V0U3BhY2VHbHlwaChIRk9OVCBoZm9udCkg
DQorew0KKyAgICBIREMgZGMgPSBHZXREQygwKTsNCisgICAgSEdESU9CSiBvbGRGb250ID0gU2Vs
ZWN0T2JqZWN0KGRjLCBoZm9udCk7DQorICAgIFdDSEFSIHNwYWNlID0gTCcgJzsNCisgICAgV09S
RCBzcGFjZUdseXBoID0gMDsNCisgICAgR2V0R2x5cGhJbmRpY2VzKGRjLCAmc3BhY2UsIDEsICZz
cGFjZUdseXBoLCAwKTsNCisgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsNCisgICAgUmVs
ZWFzZURDKDAsIGRjKTsNCisgICAgcmV0dXJuIHNwYWNlR2x5cGg7DQorfQ0KKw0KIHN0cnVjdCBG
b250RGF0YSB7DQogICAgIEZvbnREYXRhKCkNCiAgICAgICAgIDogaGZvbnQoMCkNCiAgICAgICAg
ICwgYXNjZW50KGtVbmRlZmluZWRBc2NlbnQpDQogICAgICAgICAsIHNjcmlwdENhY2hlKDApDQor
ICAgICAgICAsIHNwYWNlR2x5cGgoMCkNCiAgICAgew0KICAgICB9DQogDQogICAgIEhGT05UIGhm
b250Ow0KICAgICBpbnQgYXNjZW50Ow0KICAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBzY3JpcHRD
YWNoZTsNCisgICAgV09SRCBzcGFjZUdseXBoOw0KIH07DQogDQogLy8gQWdhaW4sIHVzaW5nIGhh
c2hfbWFwIGRvZXMgbm90IGVhcm4gdXMgbXVjaCBoZXJlLiAgcGFnZV9jeWNsZXJfdGVzdCBpbnRs
Mg0KQEAgLTM3OSw3ICszOTMsOCBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgIExPR0ZPTlQq
IGxvZ2ZvbnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBhc2NlbnQsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgSEZPTlQqIGhmb250LA0KLSAgICAgICAgICAgICAgICAgICAgICAg
IFNDUklQVF9DQUNIRSoqIHNjcmlwdENhY2hlKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIFND
UklQVF9DQUNIRSoqIHNjcmlwdENhY2hlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQq
IHNwYWNlR2x5cGgpDQogew0KICAgICBBU1NFUlQobG9nZm9udCk7DQogICAgIEFTU0VSVChmYW1p
bHkpOw0KQEAgLTQwOCw2ICs0MjMsNyBAQA0KICAgICAgICAgLy8gY2FjaGUgaXQgc28gdGhhdCB3
ZSB3b24ndCBoYXZlIHRvIGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0IG9uY2UNCiAgICAgICAgIC8v
IG1vcmUgZm9yIEhGT05UIG5leHQgdGltZS4NCiAgICAgICAgIGRlcml2ZWQtPmFzY2VudCA9IGdl
dEFzY2VudChkZXJpdmVkLT5oZm9udCk7DQorICAgICAgICBkZXJpdmVkLT5zcGFjZUdseXBoID0g
Z2V0U3BhY2VHbHlwaChkZXJpdmVkLT5oZm9udCk7DQogICAgIH0gZWxzZSB7DQogICAgICAgICBk
ZXJpdmVkID0gJml0ZXItPnNlY29uZDsNCiAgICAgICAgIC8vIExhc3QgdGltZSwgR2V0QXNjZW50
IGZhaWxlZCBzbyB0aGF0IG9ubHkgSEZPTlQgd2FzDQpAQCAtNDE5LDYgKzQzNSw3IEBADQogICAg
ICpoZm9udCA9IGRlcml2ZWQtPmhmb250Ow0KICAgICAqYXNjZW50ID0gZGVyaXZlZC0+YXNjZW50
Ow0KICAgICAqc2NyaXB0Q2FjaGUgPSAmKGRlcml2ZWQtPnNjcmlwdENhY2hlKTsNCisgICAgKnNw
YWNlR2x5cGggPSBkZXJpdmVkLT5zcGFjZUdseXBoOw0KICAgICByZXR1cm4gKmFzY2VudCAhPSBr
VW5kZWZpbmVkQXNjZW50Ow0KIH0NCiANCkluZGV4OiBEOi9zcmMvY3IvdHJ1bmsvc3JjL3RoaXJk
X3BhcnR5L1dlYktpdC9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQ2hhcmFjdGVyTmFtZXMuaA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIEQ6L3NyYy9jci90cnVuay9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9DaGFyYWN0ZXJOYW1lcy5oCShyZXZpc2lvbiA3MDQ0MSkNCisrKyBE
Oi9zcmMvY3IvdHJ1bmsvc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQ2hhcmFjdGVyTmFtZXMuaAkod29ya2luZyBjb3B5KQ0KQEAgLTcwLDYgKzcwLDcgQEANCiBj
b25zdCBVQ2hhciB6ZXJvV2lkdGhKb2luZXIgPSAweDIwMEQ7DQogY29uc3QgVUNoYXIgemVyb1dp
ZHRoTm9uSm9pbmVyID0gMHgyMDBDOw0KIGNvbnN0IFVDaGFyIHplcm9XaWR0aFNwYWNlID0gMHgy
MDBCOw0KK2NvbnN0IFVDaGFyIHplcm9XaWR0aE5vQnJlYWtTcGFjZSA9IDB4RkVGRjsNCiANCiB9
DQogDQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89799</attachid>
            <date>2011-04-15 09:43:07 -0700</date>
            <delta_ts>2011-04-17 01:17:29 -0700</delta_ts>
            <desc>updated patch (more generic)</desc>
            <filename>wk.feff.patch</filename>
            <type>text/plain</type>
            <size>17512</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAkocmV2
aXNpb24gODM4MDcpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBACiBjb25zdCBVQ2hhciB6ZXJvV2lk
dGhKb2luZXIgPSAweDIwMEQ7CiBjb25zdCBVQ2hhciB6ZXJvV2lkdGhOb25Kb2luZXIgPSAweDIw
MEM7CiBjb25zdCBVQ2hhciB6ZXJvV2lkdGhTcGFjZSA9IDB4MjAwQjsKK2NvbnN0IFVDaGFyIHpl
cm9XaWR0aE5vQnJlYWtTcGFjZSA9IDB4RkVGRjsKIAogfSAvLyBuYW1lc3BhY2UgVW5pY29kZQog
fSAvLyBuYW1lc3BhY2UgV1RGCkBAIC0xMzgsNSArMTM5LDYgQEAKIHVzaW5nIFdURjo6VW5pY29k
ZTo6emVyb1dpZHRoSm9pbmVyOwogdXNpbmcgV1RGOjpVbmljb2RlOjp6ZXJvV2lkdGhOb25Kb2lu
ZXI7CiB1c2luZyBXVEY6OlVuaWNvZGU6Onplcm9XaWR0aFNwYWNlOwordXNpbmcgV1RGOjpVbmlj
b2RlOjp6ZXJvV2lkdGhOb0JyZWFrU3BhY2U7CiAKICNlbmRpZiAvLyBDaGFyYWN0ZXJOYW1lc19o
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2Rl
LmNwcAkocmV2aXNpb24gODM4MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZVRyZWVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw5IEBACiAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0
ZXIgJiB+KEdseXBoUGFnZTo6c2l6ZSAtIDEpKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBP
YmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCiAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlcltvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT0g
KHplcm9XaWR0aE5vQnJlYWtTcGFjZSAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAg
ICAgICAgICAgICAgICAgICBidWZmZXJbemVyb1dpZHRoTm9CcmVha1NwYWNlIC0gc3RhcnRdID0g
emVyb1dpZHRoU3BhY2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemUgKiAyOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDgzODA3KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw2ICsxNzQsNyBA
QAogICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250
RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQ
b2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQg
ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHbHlwaEJ1
ZmZlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAg
ICB2b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgZmxvYXQg
ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEdseXBoQnVmZmVyKiwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVy
ZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0
KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBo
cykgY29uc3Q7CiAgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OwpAQCAtMjAzLDcgKzIwNCw4IEBACiAKICAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3Rv
cigpIGNvbnN0OwogICAgIHN0YXRpYyBib29sIHRyZWF0QXNTcGFjZShVQ2hhciBjKSB7IHJldHVy
biBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gbm9CcmVha1NwYWNl
OyB9Ci0gICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0
dXJuIGMgPCAweDIwIHx8IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0gc29mdEh5cGhl
biB8fCAoYyA+PSAweDIwMGMgJiYgYyA8PSAweDIwMGYpIHx8IChjID49IDB4MjAyYSAmJiBjIDw9
IDB4MjAyZSkgfHwgYyA9PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjsgfQorICAgIHN0YXRp
YyBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiB0cmVhdEFzWmVy
b1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoYykgfHwgYyA9PSAweDIwMGMgfHwgYyA9PSAweDIw
MGQ7IH0KKyAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3Jp
cHQoVUNoYXIgYykgeyByZXR1cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwgMHhBMCkg
fHwgYyA9PSBzb2Z0SHlwaGVuIHx8IChjID49IDB4MjAwZSAmJiBjIDw9IDB4MjAwZikgfHwgKGMg
Pj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHplcm9XaWR0aE5vQnJlYWtTcGFjZSB8
fCBjID09IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9CiAgICAgc3RhdGljIGJvb2wgY2Fu
UmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpOwogCiAgICAgc3RhdGljIGlubGluZSBVQ2hh
ciBub3JtYWxpemVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5oCShyZXZpc2lv
biA4MzgwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJl
SGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDggQEAKICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBpc1J0bCwKICAgICAgICAgICAgICAgICAgICAgSEZPTlQsCiAgICAgICAgICAg
ICAgICAgICAgIFNDUklQVF9DQUNIRSosCi0gICAgICAgICAgICAgICAgICAgIFNDUklQVF9GT05U
UFJPUEVSVElFUyopOworICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMq
LAorICAgICAgICAgICAgICAgICAgICBXT1JEKTsKIAogICAgIHZpcnR1YWwgflVuaXNjcmliZUhl
bHBlcigpOwogCkBAIC0yMjUsNyArMjI2LDggQEAKICAgICAgICAgICAgIDogbV9wcmVQYWRkaW5n
KDApCiAgICAgICAgICAgICAsIG1faGZvbnQoTlVMTCkKICAgICAgICAgICAgICwgbV9zY3JpcHRD
YWNoZShOVUxMKQotICAgICAgICAgICAgLCBtX2FzY2VudE9mZnNldCgwKSB7CisgICAgICAgICAg
ICAsIG1fYXNjZW50T2Zmc2V0KDApCisgICAgICAgICAgICAsIG1fc3BhY2VHbHlwaCgwKSB7CiAg
ICAgICAgICAgICBtX2FiYy5hYmNBID0gMDsKICAgICAgICAgICAgIG1fYWJjLmFiY0IgPSAwOwog
ICAgICAgICAgICAgbV9hYmMuYWJjQyA9IDA7CkBAIC0zMTksNiArMzIxLDggQEAKICAgICAgICAg
Ly8gd2hlbiBkcmF3aW5nIGEgc3RyaW5nLCB0byBhbGlnbiBtdWx0aXBsZSBydW5zIHJlbmRlcmVk
IHdpdGgKICAgICAgICAgLy8gZGlmZmVyZW50IGZvbnRzLgogICAgICAgICBpbnQgbV9hc2NlbnRP
ZmZzZXQ7CisKKyAgICAgICAgV09SRCBtX3NwYWNlR2x5cGg7CiAgICAgfTsKIAogICAgIC8vIENv
bXB1dGVzIHRoZSBydW5zXyBhcnJheSBmcm9tIHRoZSB0ZXh0IHJ1bi4KQEAgLTM0Myw2ICszNDcs
MTAgQEAKICAgICAvLyBSZXR1cm5zIHRoZSB0b3RhbCB3aWR0aCBvZiBhIHNpbmdsZSBpdGVtLgog
ICAgIGludCBhZHZhbmNlRm9ySXRlbShpbnQpIGNvbnN0OwogCisgICAgYm9vbCBjb250YWluc01p
c3NpbmdHbHlwaHMoY29uc3QgU2hhcGluZyYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU0NSSVBUX0lURU0mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFNDUklQVF9GT05UUFJPUEVSVElFUyopIGNvbnN0OworCiAgICAgLy8gU2hhcGVzIGEgcnVu
IChwb2ludGVkIHRvIGJ5IHxpbnB1dHwpIHVzaW5nIHxoZm9udHwgZmlyc3QuCiAgICAgLy8gVHJp
ZXMgYSBzZXJpZXMgb2YgZm9udHMgc3BlY2lmaWVkIHJldHJpZXZlZCB3aXRoIE5leHRXaW5Gb250
RGF0YQogICAgIC8vIGFuZCBmaW5hbGx5IGEgZm9udCBjb3ZlcmluZyBjaGFyYWN0ZXJzIGluIHwq
aW5wdXR8LiBBIHN0cmluZyBwb2ludGVkCkBAIC0zODQsNiArMzkyLDcgQEAKICAgICBpbnQgbV9h
c2NlbnQ7CiAgICAgTE9HRk9OVCBtX2xvZ2ZvbnQ7CiAgICAgaW50IG1fc3R5bGU7CisgICAgV09S
RCBtX3NwYWNlR2x5cGg7CiAKICAgICAvLyBPcHRpb25zLCBzZWUgdGhlIGdldHRlcnMvc2V0dGVy
cyBhYm92ZS4KICAgICBib29sIG1fZGlyZWN0aW9uYWxPdmVycmlkZTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5j
cHAJKHJldmlzaW9uIDgzODA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9VbmlzY3JpYmVIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAK
ICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9u
dFV0aWxzQ2hyb21pdW1XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAj
aW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKQEAgLTQxLDM1ICs0MiwxNSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZWUgd2hlcmUgd29yZCBz
cGFjaW5nIHNob3VsZCBiZSBhcHBsaWVkIGluc2lkZQotLy8gcnVucy4gTm90ZSB0aGF0IHRoaXMg
bXVzdCBtYXRjaCBGb250Ojp0cmVhdEFzU3BhY2Ugc28gd2UgYWxsIGFncmVlIHdoZXJlCi0vLyBh
bmQgaG93IG11Y2ggc3BhY2UgdGhpcyBpcywgc28gd2UgZG9uJ3Qgd2FudCB0byBkbyBtb3JlIGdl
bmVyYWwgVW5pY29kZQotLy8gImlzIHRoaXMgYSB3b3JkIGJyZWFrIiB0aGluZy4KLXN0YXRpYyBi
b29sIHRyZWF0QXNTcGFjZShVQ2hhciBjKQotewotICAgIHJldHVybiBjID09ICcgJyB8fCBjID09
ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gMHgwMEEwOwotfQotCiAvLyBTQ1JJUFRfRk9OVFBS
T1BFUlRJRVMgY29udGFpbnMgZ2x5cGggaW5kaWNlcyBmb3IgZGVmYXVsdCwgaW52YWxpZAogLy8g
YW5kIGJsYW5rIGdseXBocy4gSnVzdCBiZWNhdXNlIFNjcmlwdFNoYXBlIHN1Y2NlZWRzIGRvZXMg
bm90IG1lYW4KIC8vIHRoYXQgYSB0ZXh0IHJ1biBpcyByZW5kZXJlZCBjb3JyZWN0bHkuIFNvbWUg
Y2hhcmFjdGVycyBtYXkgYmUgcmVuZGVyZWQKIC8vIHdpdGggZGVmYXVsdC9pbnZhbGlkL2JsYW5r
IGdseXBocy4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBnbHlwaAogLy8gYXJy
YXkgcmV0dXJuZWQgYnkgU2NyaXB0U2hhcGUgY29udGFpbnMgYW55IG9mIHRob3NlIGdseXBocyB0
byBtYWtlCiAvLyBzdXJlIHRoYXQgdGhlIHRleHQgcnVuIGlzIHJlbmRlcmVkIHN1Y2Nlc3NmdWxs
eS4KLXN0YXRpYyBib29sIGNvbnRhaW5zTWlzc2luZ0dseXBocyhXT1JEICpnbHlwaHMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIHByb3BlcnRpZXMpCi17
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoZ2x5
cGhzW2ldID09IHByb3BlcnRpZXMtPndnRGVmYXVsdAotICAgICAgICAgICAgfHwgKGdseXBoc1tp
XSA9PSBwcm9wZXJ0aWVzLT53Z0ludmFsaWQKLSAgICAgICAgICAgICYmIGdseXBoc1tpXSAhPSBw
cm9wZXJ0aWVzLT53Z0JsYW5rKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyNp
ZiAwCisjZW5kaWYKIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQogLy8gSEZPTlQgaXMgdGhlICdp
bmNhcm5hdGlvbicgb2YgJ2V2ZXJ5dGhpbmcnIGFib3V0IGZvbnQsIGJ1dCBpdCdzIGFuIG9wYXF1
ZQogLy8gaGFuZGxlIGFuZCB3ZSBjYW4ndCBkaXJlY3RseSBxdWVyeSBpdCB0byBtYWtlIGEgbmV3
IEhGT05UIHNoYXJpbmcKIC8vIGl0cyBjaGFyYWN0ZXJpc3RpY3MgKGhlaWdodCwgc3R5bGUsIGV0
YykgZXhjZXB0IGZvciBmYW1pbHkgbmFtZS4KQEAgLTEwMiwxMyArODMsMTUgQEAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1J0bCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSEZPTlQgaGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDUklQVF9DQUNIRSogc2NyaXB0Q2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogZm9udFByb3BlcnRpZXMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogZm9udFByb3BlcnRpZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQgc3BhY2VHbHlwaCkKICAgICA6
IG1faW5wdXQoaW5wdXQpCiAgICAgLCBtX2lucHV0TGVuZ3RoKGlucHV0TGVuZ3RoKQogICAgICwg
bV9pc1J0bChpc1J0bCkKICAgICAsIG1faGZvbnQoaGZvbnQpCiAgICAgLCBtX3NjcmlwdENhY2hl
KHNjcmlwdENhY2hlKQogICAgICwgbV9mb250UHJvcGVydGllcyhmb250UHJvcGVydGllcykKKyAg
ICAsIG1fc3BhY2VHbHlwaChzcGFjZUdseXBoKQogICAgICwgbV9kaXJlY3Rpb25hbE92ZXJyaWRl
KGZhbHNlKQogICAgICwgbV9pbmhpYml0TGlnYXRlKGZhbHNlKQogICAgICwgbV9sZXR0ZXJTcGFj
aW5nKDApCkBAIC01NDYsNiArNTI5LDcgQEAKICAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hl
ID0gbV9zY3JpcHRDYWNoZTsKICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIGZvbnRQcm9wZXJ0
aWVzID0gbV9mb250UHJvcGVydGllczsKICAgICBpbnQgYXNjZW50ID0gbV9hc2NlbnQ7CisgICAg
V09SRCBzcGFjZUdseXBoID0gbV9zcGFjZUdseXBoOwogICAgIEhEQyB0ZW1wREMgPSAwOwogICAg
IEhHRElPQkogb2xkRm9udCA9IDA7CiAgICAgSFJFU1VMVCBocjsKQEAgLTYwMSw3ICs1ODUsNyBA
QAogICAgICAgICB9IGVsc2UgaWYgKGhyID09IEVfT1VUT0ZNRU1PUlkpIHsKICAgICAgICAgICAg
IG51bUdseXBocyAqPSAyOwogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoU1VDQ0VFREVEKGhyKSAmJiAobGFzdEZhbGxiYWNrVHJpZWQgfHwgIWNvbnRhaW5zTWlzc2lu
Z0dseXBocygmc2hhcGluZy5tX2dseXBoc1swXSwgZ2VuZXJhdGVkR2x5cGhzLCBmb250UHJvcGVy
dGllcykpKQorICAgICAgICB9IGVsc2UgaWYgKFNVQ0NFRURFRChocikgJiYgKGxhc3RGYWxsYmFj
a1RyaWVkIHx8ICFjb250YWluc01pc3NpbmdHbHlwaHMoc2hhcGluZywgcnVuLCBmb250UHJvcGVy
dGllcykpKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gVGhlIGN1cnJlbnQgZm9u
dCBjYW4ndCByZW5kZXIgdGhpcyBydW4uIGNsZWFyIERDIGFuZCB0cnkKQEAgLTYzMiw3ICs2MTYs
OSBAQAogICAgICAgICAgICAgY29uc3QgVUNoYXIgKmZhbWlseSA9IGdldEZhbGxiYWNrRmFtaWx5
KGlucHV0LCBpdGVtTGVuZ3RoLAogICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6U3Rh
bmRhcmRGYW1pbHksIDAsIDApOwogICAgICAgICAgICAgYm9vbCBmb250T2sgPSBnZXREZXJpdmVk
Rm9udERhdGEoZmFtaWx5LCBtX3N0eWxlLCAmbV9sb2dmb250LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhc2NlbnQsICZoZm9udCwgJnNjcmlwdENhY2hl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhc2NlbnQs
ICZoZm9udCwgJnNjcmlwdENhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJnNwYWNlR2x5cGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICBpZiAoIWZvbnRPaykgewogICAgICAgICAg
ICAgICAgIC8vIElmIHRoaXMgR2V0RGVyaXZlZEZvbnREYXRhIGlzIGNhbGxlZCBmcm9tIHRoZSBy
ZW5kZXJlciBpdApAQCAtNjQ0LDcgKzYzMCw4IEBACiAKICAgICAgICAgICAgICAgICAvLyBUcnkg
YWdhaW4uCiAgICAgICAgICAgICAgICAgZm9udE9rID0gZ2V0RGVyaXZlZEZvbnREYXRhKGZhbWls
eSwgbV9zdHlsZSwgJm1fbG9nZm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZhc2NlbnQsICZoZm9udCwgJnNjcmlwdENhY2hlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFzY2VudCwgJmhmb250LCAmc2NyaXB0
Q2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcGFj
ZUdseXBoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoZm9udE9rKTsKICAgICAgICAgICAgIH0K
IApAQCAtNjczLDYgKzY2MCw3IEBACiAgICAgLy8gYmVjYXVzZSBpdCdzIG5vdCB1c2VkIGVsc2V3
aGVyZS4KICAgICBzaGFwaW5nLm1faGZvbnQgPSBoZm9udDsKICAgICBzaGFwaW5nLm1fc2NyaXB0
Q2FjaGUgPSBzY3JpcHRDYWNoZTsKKyAgICBzaGFwaW5nLm1fc3BhY2VHbHlwaCA9IHNwYWNlR2x5
cGg7CiAKICAgICAvLyBUaGUgYXNjZW50IG9mIGEgZm9udCBmb3IgdGhpcyBydW4gY2FuIGJlIGRp
ZmZlcmVudCBmcm9tCiAgICAgLy8gdGhhdCBvZiB0aGUgcHJpbWFyeSBmb250IHNvIHRoYXQgd2Ug
bmVlZCB0byBrZWVwIHRyYWNrIG9mCkBAIC04MDcsMjEgKzc5NSwzNiBAQAogICAgICAgICBTaGFw
aW5nJiBzaGFwaW5nID0gbV9zaGFwZXNbcnVuXTsKIAogICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNoYXBpbmcuY2hhckxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghdHJlYXRB
c1NwYWNlKG1faW5wdXRbbV9ydW5zW3J1bl0uaUNoYXJQb3MgKyBpXSkpCisgICAgICAgICAgICBV
Q2hhciBjID0gbV9pbnB1dFttX3J1bnNbcnVuXS5pQ2hhclBvcyArIGldOworICAgICAgICAgICAg
aWYgKCFGb250Ojp0cmVhdEFzU3BhY2UoYykgJiYKKyAgICAgICAgICAgICAgICAhRm9udDo6dHJl
YXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgICAgICBpbnQgZ2x5cGhJbmRleCA9IHNoYXBpbmcubV9sb2dzW2ld
OwogICAgICAgICAgICAgaW50IGN1cnJlbnRBZHZhbmNlID0gc2hhcGluZy5tX2FkdmFuY2VbZ2x5
cGhJbmRleF07CiAKLSAgICAgICAgICAgIC8vIGN1cnJlbnRBZHZhbmNlIGRvZXMgbm90IGluY2x1
ZGUgYWRkaXRpb25hbCBsZXR0ZXItc3BhY2luZywgYnV0Ci0gICAgICAgICAgICAvLyBzcGFjZV93
aWR0aCBkb2VzLiBIZXJlIHdlIGZpbmQgb3V0IGhvdyBvZmYgd2UgYXJlIGZyb20gdGhlCi0gICAg
ICAgICAgICAvLyBjb3JyZWN0IHdpZHRoIGZvciB0aGUgc3BhY2Ugbm90IGluY2x1ZGluZyBsZXR0
ZXItc3BhY2luZywgdGhlbgotICAgICAgICAgICAgLy8ganVzdCBzdWJ0cmFjdCB0aGF0IGRpZmYu
Ci0gICAgICAgICAgICBpbnQgZGlmZiA9IGN1cnJlbnRBZHZhbmNlIC0gc3BhY2VXaWR0aFdpdGhv
dXRMZXR0ZXJTcGFjaW5nOwotICAgICAgICAgICAgLy8gVGhlIHNoYXBpbmcgY2FuIGNvbnNpc3Qg
b2YgYSBydW4gb2YgdGV4dCwgc28gb25seSBzdWJ0cmFjdCB0aGUKLSAgICAgICAgICAgIC8vIGRp
ZmZlcmVuY2UgaW4gdGhlIHdpZHRoIG9mIHRoZSBnbHlwaC4KLSAgICAgICAgICAgIHNoYXBpbmcu
bV9hZHZhbmNlW2dseXBoSW5kZXhdIC09IGRpZmY7Ci0gICAgICAgICAgICBzaGFwaW5nLm1fYWJj
LmFiY0IgLT0gZGlmZjsKKyAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoYykpIHsK
KyAgICAgICAgICAgICAgICAvLyBjdXJyZW50QWR2YW5jZSBkb2VzIG5vdCBpbmNsdWRlIGFkZGl0
aW9uYWwgbGV0dGVyLXNwYWNpbmcsCisgICAgICAgICAgICAgICAgLy8gYnV0IHNwYWNlX3dpZHRo
IGRvZXMuIEhlcmUgd2UgZmluZCBvdXQgaG93IG9mZiB3ZSBhcmUgZnJvbQorICAgICAgICAgICAg
ICAgIC8vIHRoZSBjb3JyZWN0IHdpZHRoIGZvciB0aGUgc3BhY2Ugbm90IGluY2x1ZGluZyBsZXR0
ZXItc3BhY2luZywKKyAgICAgICAgICAgICAgICAvLyAgdGhlbiBqdXN0IHN1YnRyYWN0IHRoYXQg
ZGlmZi4KKyAgICAgICAgICAgICAgICBpbnQgZGlmZiA9IGN1cnJlbnRBZHZhbmNlIC0gc3BhY2VX
aWR0aFdpdGhvdXRMZXR0ZXJTcGFjaW5nOworICAgICAgICAgICAgICAgIC8vIFRoZSBzaGFwaW5n
IGNhbiBjb25zaXN0IG9mIGEgcnVuIG9mIHRleHQsIHNvIG9ubHkgc3VidHJhY3QKKyAgICAgICAg
ICAgICAgICAvLyB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgd2lkdGggb2YgdGhlIGdseXBoLgorICAg
ICAgICAgICAgICAgIHNoYXBpbmcubV9hZHZhbmNlW2dseXBoSW5kZXhdIC09IGRpZmY7CisgICAg
ICAgICAgICAgICAgc2hhcGluZy5tX2FiYy5hYmNCIC09IGRpZmY7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZvciBjaGFyYWN0ZXJz
IHRvIHRyZWF0IGFzIHplcm8td2lkdGggc3BhY2UgaW4gY29tcGxleAorICAgICAgICAgICAgLy8g
c2NyaXB0cywgc2V0IHRoZSBhZHZhbmNlIHdpZHRoIHRvIHplcm8sIGFkanVzdAorICAgICAgICAg
ICAgLy8gfGFiY0J8IG9mIHRoZSBjdXJyZW50IHJ1biBhY2NvcmRpbmdseSBhbmQgc2V0IAorICAg
ICAgICAgICAgLy8gdGhlIGdseXBoIHRvIG1fc3BhY2VHbHlwaC4KKyAgICAgICAgICAgIHNoYXBp
bmcubV9hZHZhbmNlW2dseXBoSW5kZXhdID0gMDsKKyAgICAgICAgICAgIHNoYXBpbmcubV9hYmMu
YWJjQiAtPSBjdXJyZW50QWR2YW5jZTsKKyAgICAgICAgICAgIHNoYXBpbmcubV9vZmZzZXRzW2ds
eXBoSW5kZXhdLmR1ID0gMDsKKyAgICAgICAgICAgIHNoYXBpbmcubV9vZmZzZXRzW2dseXBoSW5k
ZXhdLmR2ID0gMDsKKyAgICAgICAgICAgIHNoYXBpbmcubV9nbHlwaHNbZ2x5cGhJbmRleF0gPSBz
aGFwaW5nLm1fc3BhY2VHbHlwaDsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTg3Miw3ICs4NzUs
NyBAQAogICAgICAgICAvLyBleHRyYSB3b3Jkc3BhY2luZyBhbW91bnQgZm9yIHRoZSBnbHlwaHMg
dGhleSBjb3JyZXNwb25kIHRvLgogICAgICAgICBpZiAobV93b3JkU3BhY2luZyAhPSAwKSB7CiAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNoYXBpbmcuY2hhckxlbmd0aCgpOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIXRyZWF0QXNTcGFjZShtX2lucHV0W21fcnVuc1tydW5d
LmlDaGFyUG9zICsgaV0pKQorICAgICAgICAgICAgICAgIGlmICghRm9udDo6dHJlYXRBc1NwYWNl
KG1faW5wdXRbbV9ydW5zW3J1bl0uaUNoYXJQb3MgKyBpXSkpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgLy8gVGhlIGNoYXIgaW4gcXVlc3Rpb24gaXMg
YSB3b3JkIHNlcGFyYXRvci4uLgpAQCAtOTI5LDQgKzkzMiwyOCBAQAogICAgIHJldHVybiBzaGFw
aW5nLm1fcHJlUGFkZGluZyArIGp1c3RpZmljYXRpb247CiB9CiAKKy8vIFNDUklQVF9GT05UUFJP
UEVSVElFUyBjb250YWlucyBnbHlwaCBpbmRpY2VzIGZvciBkZWZhdWx0LCBpbnZhbGlkCisvLyBh
bmQgYmxhbmsgZ2x5cGhzLiBKdXN0IGJlY2F1c2UgU2NyaXB0U2hhcGUgc3VjY2VlZHMgZG9lcyBu
b3QgbWVhbgorLy8gdGhhdCBhIHRleHQgcnVuIGlzIHJlbmRlcmVkIGNvcnJlY3RseS4gU29tZSBj
aGFyYWN0ZXJzIG1heSBiZSByZW5kZXJlZAorLy8gd2l0aCBkZWZhdWx0L2ludmFsaWQvYmxhbmsg
Z2x5cGhzLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGdseXBoCisvLyBhcnJh
eSByZXR1cm5lZCBieSBTY3JpcHRTaGFwZSBjb250YWlucyBhbnkgb2YgdGhvc2UgZ2x5cGhzIHRv
IG1ha2UKKy8vIHN1cmUgdGhhdCB0aGUgdGV4dCBydW4gaXMgcmVuZGVyZWQgc3VjY2Vzc2Z1bGx5
LgorCitib29sIFVuaXNjcmliZUhlbHBlcjo6Y29udGFpbnNNaXNzaW5nR2x5cGhzKGNvbnN0IFNo
YXBpbmcmIHNoYXBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNDUklQVF9JVEVNJiBydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFNDUklQVF9GT05UUFJPUEVSVElFUyogcHJvcGVydGllcykg
Y29uc3QKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNoYXBpbmcuY2hhckxlbmd0aCgpOyBp
KyspIHsKKyAgICAgICAgVUNoYXIgYyA9IG1faW5wdXRbcnVuLmlDaGFyUG9zICsgaV07CisgICAg
ICAgIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoYykpIGNv
bnRpbnVlOworICAgICAgICBpbnQgZ2x5cGhJbmRleCA9IHNoYXBpbmcubV9sb2dzW2ldOworICAg
ICAgICBXT1JEIGdseXBoID0gc2hhcGluZy5tX2dseXBoc1tnbHlwaEluZGV4XTsKKyAgICAgICAg
aWYgKGdseXBoID09IHByb3BlcnRpZXMtPndnRGVmYXVsdAorICAgICAgICAgICAgfHwgKGdseXBo
ID09IHByb3BlcnRpZXMtPndnSW52YWxpZCAmJiBnbHlwaCAhPSBwcm9wZXJ0aWVzLT53Z0JsYW5r
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVu
LmNwcAkocmV2aXNpb24gODM4MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw4IEBACiAgICAgOiBVbmlzY3JpYmVIZWxwZXIocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0
aCgpLCBydW4ucnRsKCksCiAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wcmltYXJ5Rm9udCgp
LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpLAogICAgICAgICAgICAgICAgICAgICAgIGZvbnQucHJp
bWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2NyaXB0Q2FjaGUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICBmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLnNjcmlwdEZvbnRQcm9w
ZXJ0aWVzKCkpCisgICAgICAgICAgICAgICAgICAgICAgZm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0
Zm9ybURhdGEoKS5zY3JpcHRGb250UHJvcGVydGllcygpLAorICAgICAgICAgICAgICAgICAgICAg
IGZvbnQucHJpbWFyeUZvbnQoKS0+c3BhY2VHbHlwaCgpKQogICAgICwgbV9mb250KCZmb250KQog
ICAgICwgbV9mb250SW5kZXgoMCkKIHsKQEAgLTY5LDcgKzcwLDcgQEAKICAgICBTQ1JJUFRfQ0FD
SEUqIHNjcmlwdENhY2hlLAogICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogZm9udFByb3BlcnRp
ZXMpCiAgICAgOiBVbmlzY3JpYmVIZWxwZXIoaW5wdXQsIGlucHV0TGVuZ3RoLCBpc1J0bCwgaGZv
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q2FjaGUsIGZvbnRQcm9wZXJ0aWVzKQor
ICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdENhY2hlLCBmb250UHJvcGVydGllcywgMCkKICAg
ICAsIG1fZm9udCgwKQogICAgICwgbV9mb250SW5kZXgoLTEpCiB7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1
bVdpbi5oCShyZXZpc2lvbiA4MzgwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgs
NyBAQAogLy8gaW50bDIgcGFnZS1jeWNsZXIgdGVzdCBpcyBub3RpY2VhYmx5IHNsb3dlciB3aXRo
IG9uZSBvdXQgcGFyYW0gdGhhbgogLy8gdGhlIGN1cnJlbnQgdmVyc2lvbiBhbHRob3VnaCB0aGUg
c3Vic2VxdWVudCA5IHBhc3NlcyB0YWtlIGFib3V0IHRoZQogLy8gc2FtZSB0aW1lLgotYm9vbCBn
ZXREZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwgaW50IHN0eWxlLCBMT0dGT05U
KiwgaW50KiBhc2NlbnQsIEhGT05UKiwgU0NSSVBUX0NBQ0hFKiopOworYm9vbCBnZXREZXJpdmVk
Rm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwgaW50IHN0eWxlLCBMT0dGT05UKiwgaW50KiBh
c2NlbnQsIEhGT05UKiwgU0NSSVBUX0NBQ0hFKiosIFdPUkQqIHNwYWNlR2x5cGgpOwogCiBlbnVt
IHsKICAgICBGb250U3R5bGVOb3JtYWwgPSAwLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAJ
KHJldmlzaW9uIDgzODA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250VXRpbHNDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCwxNyArMjUwLDMx
IEBACiAgICAgcmV0dXJuIGdvdE1ldHJpY3MgPyB0bS50bUFzY2VudCA6IGtVbmRlZmluZWRBc2Nl
bnQ7CiB9CiAKK1dPUkQgZ2V0U3BhY2VHbHlwaChIRk9OVCBoZm9udCkgCit7CisgICAgSERDIGRj
ID0gR2V0REMoMCk7CisgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGRjLCBoZm9u
dCk7CisgICAgV0NIQVIgc3BhY2UgPSBMJyAnOworICAgIFdPUkQgc3BhY2VHbHlwaCA9IDA7Cisg
ICAgR2V0R2x5cGhJbmRpY2VzKGRjLCAmc3BhY2UsIDEsICZzcGFjZUdseXBoLCAwKTsKKyAgICBT
ZWxlY3RPYmplY3QoZGMsIG9sZEZvbnQpOworICAgIFJlbGVhc2VEQygwLCBkYyk7CisgICAgcmV0
dXJuIHNwYWNlR2x5cGg7Cit9CisKIHN0cnVjdCBGb250RGF0YSB7CiAgICAgRm9udERhdGEoKQog
ICAgICAgICA6IGhmb250KDApCiAgICAgICAgICwgYXNjZW50KGtVbmRlZmluZWRBc2NlbnQpCiAg
ICAgICAgICwgc2NyaXB0Q2FjaGUoMCkKKyAgICAgICAgLCBzcGFjZUdseXBoKDApCiAgICAgewog
ICAgIH0KIAogICAgIEhGT05UIGhmb250OwogICAgIGludCBhc2NlbnQ7CiAgICAgbXV0YWJsZSBT
Q1JJUFRfQ0FDSEUgc2NyaXB0Q2FjaGU7CisgICAgV09SRCBzcGFjZUdseXBoOwogfTsKIAogLy8g
QWdhaW4sIHVzaW5nIGhhc2hfbWFwIGRvZXMgbm90IGVhcm4gdXMgbXVjaCBoZXJlLiAgcGFnZV9j
eWNsZXJfdGVzdCBpbnRsMgpAQCAtMzc5LDcgKzM5Myw4IEBACiAgICAgICAgICAgICAgICAgICAg
ICAgICBMT0dGT05UKiBsb2dmb250LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBhc2Nl
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBIRk9OVCogaGZvbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBTQ1JJUFRfQ0FDSEUqKiBzY3JpcHRDYWNoZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFNDUklQVF9DQUNIRSoqIHNjcmlwdENhY2hlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgV09SRCogc3BhY2VHbHlwaCkKIHsKICAgICBBU1NFUlQobG9nZm9udCk7CiAgICAgQVNTRVJU
KGZhbWlseSk7CkBAIC00MDgsNiArNDIzLDcgQEAKICAgICAgICAgLy8gY2FjaGUgaXQgc28gdGhh
dCB3ZSB3b24ndCBoYXZlIHRvIGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0IG9uY2UKICAgICAgICAg
Ly8gbW9yZSBmb3IgSEZPTlQgbmV4dCB0aW1lLgogICAgICAgICBkZXJpdmVkLT5hc2NlbnQgPSBn
ZXRBc2NlbnQoZGVyaXZlZC0+aGZvbnQpOworICAgICAgICBkZXJpdmVkLT5zcGFjZUdseXBoID0g
Z2V0U3BhY2VHbHlwaChkZXJpdmVkLT5oZm9udCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZGVy
aXZlZCA9ICZpdGVyLT5zZWNvbmQ7CiAgICAgICAgIC8vIExhc3QgdGltZSwgR2V0QXNjZW50IGZh
aWxlZCBzbyB0aGF0IG9ubHkgSEZPTlQgd2FzCkBAIC00MTksNiArNDM1LDcgQEAKICAgICAqaGZv
bnQgPSBkZXJpdmVkLT5oZm9udDsKICAgICAqYXNjZW50ID0gZGVyaXZlZC0+YXNjZW50OwogICAg
ICpzY3JpcHRDYWNoZSA9ICYoZGVyaXZlZC0+c2NyaXB0Q2FjaGUpOworICAgICpzcGFjZUdseXBo
ID0gZGVyaXZlZC0+c3BhY2VHbHlwaDsKICAgICByZXR1cm4gKmFzY2VudCAhPSBrVW5kZWZpbmVk
QXNjZW50OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>89800</attachid>
            <date>2011-04-15 09:47:05 -0700</date>
            <delta_ts>2011-04-17 01:17:29 -0700</delta_ts>
            <desc>layout test (wip) </desc>
            <filename>zero-width-characters-complex-script.html</filename>
            <type>text/html</type>
            <size>1742</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">PGhlYWQ+CjxzY3JpcHQ+CgpmdW5jdGlvbiB0ZXN0Q2hhcihjaCkKewogICAgdmFyIGEgPSAiXHUw
OTE1XHUwOTNFIgogICAgdmFyIGIgPSAiXHUwOTE2IjsKICAgIHZhciBzcGFuID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNoYXJhY3RlcnMiKTsKICAgIHNwYW4uZmlyc3RDaGlsZC5kYXRhID0g
YSArIGI7CiAgICB2YXIgYWJXaWR0aCA9IHNwYW4ub2Zmc2V0V2lkdGg7CiAgICBzcGFuLmZpcnN0
Q2hpbGQuZGF0YSA9IGE7CiAgICB2YXIgYVdpZHRoID0gc3Bhbi5vZmZzZXRXaWR0aDsKICAgIHNw
YW4uZmlyc3RDaGlsZC5kYXRhID0gYSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpICsgYjsKICAg
IHZhciBhYldpdGhDaFdpZHRoID0gc3Bhbi5vZmZzZXRXaWR0aDsKCiAgICB2YXIgY29kZXBvaW50
ID0gIlUrIiArIGNoLnRvU3RyaW5nKDE2KTsKICAgIGlmIChhYldpdGhDaFdpZHRoID4gYWJXaWR0
aCkKICAgICAgICByZXN1bHQgPSAiRkFJTDogIiArIGNvZGVwb2ludCArICIgaGFzICBub24temVy
byB3aWR0aC4iOwogICAgZWxzZSBpZiAoYWJXaWR0aCA+IGFXaWR0aCkKICAgICAgICByZXN1bHQg
PSAiUEFTUzogIiArIGNvZGVwb2ludCArICJoYXMgIHplcm8gd2lkdGguIjsKICAgIGVsc2UKICAg
ICAgICByZXN1bHQgPSAiRkFJTDogV2lkdGggbWVhc3VyZW1lbnQgc2VlbXMgdG8gaGF2ZSBmYWls
ZWQgZm9yICIgKyBjb2RlcG9pbnQgOwogICAgdmFyIGN1cnJlbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJlc3VsdCIpLmlubmVySFRNTCA9IGN1cnJlbnQgKyAiPGJyPiIgKyByZXN1bHQ7Cn0KZnVuY3Rp
b24gdGVzdCgpCnsKICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgZm9yICh2YXIgaSA9IDE7IGkg
PCAzMjsgKytpKSAvLyA+CiAgICAgICAgICB0ZXN0Q2hhcihpKTsgCiAgICAvLyBaV0ogKFUrMjAw
QykgYW5kIFpXTkogKFUrMjAwRCkgYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgdGhleQogICAgLy8gY2Fu
IGFmZmVjdCB0aGUgcmVuZGVyaW5nIGluIGNvbXBsZXggc2NyaXB0IHRleHQuCiAgICB0ZXN0Q2hh
cigweDIwMEIpOwogICAgdGVzdENoYXIoMHgyMDBFKTsKICAgIHRlc3RDaGFyKDB4MjAwRik7CiAg
ICB0ZXN0Q2hhcigweEZFRkYpOwogICAgLy90ZXN0Q2hhcigweEZGRkMpOwoKICAgIHZhciB0ZXN0
QXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0QXJlYSIpOwogICAgdGVzdEFyZWEu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXN0QXJlYSk7Cn0KPC9zY3JpcHQ+CjwvaGVhZD4KPGJv
ZHkgb25sb2FkPSJ0ZXN0KCkiPgo8cD5UaGlzIHRlc3QgY2hlY2tzIHZhcmlvdXMgY2hhcmFjdGVy
cyB0aGF0IHNob3VsZCBhbHdheXMgYmUgemVybyB3aWR0aCB0byBlbnN1cmUgdGhhdCB0aGV5IGFy
ZS4KVGhlIFdlYktpdCB0ZXh0IHN5c3RlbSBlbnN1cmVzIHRoaXMgaW4gYSB3YXkgdGhhdCdzIGlu
ZGVwZW5kZW50IG9mIHRoZSBmb250cyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS48L3A+CjxwIHN0
eWxlPSJmb250LWZhbWlseTogbW9ub3NwYWNlOyIgaWQ9InJlc3VsdCI+PC9wPgo8cCBpZD0idGVz
dEFyZWEiPjxzcGFuIGlkPSJjaGFyYWN0ZXJzIj4mI3gwOTE1OyYjeDA5NGQ7JiN4MDkxNjsmI3gw
OTNFOyYjeDA5MTY7PC9zcGFuPjwvcD4KPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89945</attachid>
            <date>2011-04-17 01:17:29 -0700</date>
            <delta_ts>2011-04-18 10:53:43 -0700</delta_ts>
            <desc>patch for review </desc>
            <filename>48860.patch.2b</filename>
            <type>text/plain</type>
            <size>26269</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODQxMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDQtMTcgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFUrRkVGRiAoWmVy
byB3aWR0aCBuby1icmVhayBzcGFjZSkgdG8gQ2hhcmFjdGVyTmFtZXMuaC4KKyAgICAgICAgSXQn
cyBhZGRlZCB0byB0aGUgbGlzdCBvZiBjaGFyYWN0ZXJzIHRvIHRyZWF0IGFzIHplcm8td2lkdGgK
KyAgICAgICAgaW4gV2ViQ29yZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDg4NjAKKworICAgICAgICAqIHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg6CisKIDIwMTEtMDQtMTYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAkocmV2aXNp
b24gODQwOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBjb25zdCBVQ2hhciB5ZW5T
aWduID0gMHgwMEE1OwogY29uc3QgVUNoYXIgemVyb1dpZHRoSm9pbmVyID0gMHgyMDBEOwogY29u
c3QgVUNoYXIgemVyb1dpZHRoTm9uSm9pbmVyID0gMHgyMDBDOwogY29uc3QgVUNoYXIgemVyb1dp
ZHRoU3BhY2UgPSAweDIwMEI7Citjb25zdCBVQ2hhciB6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgPSAw
eEZFRkY7CiAKIH0gLy8gbmFtZXNwYWNlIFVuaWNvZGUKIH0gLy8gbmFtZXNwYWNlIFdURgpAQCAt
MTM4LDUgKzEzOSw2IEBAIHVzaW5nIFdURjo6VW5pY29kZTo6eWVuU2lnbjsKIHVzaW5nIFdURjo6
VW5pY29kZTo6emVyb1dpZHRoSm9pbmVyOwogdXNpbmcgV1RGOjpVbmljb2RlOjp6ZXJvV2lkdGhO
b25Kb2luZXI7CiB1c2luZyBXVEY6OlVuaWNvZGU6Onplcm9XaWR0aFNwYWNlOwordXNpbmcgV1RG
OjpVbmljb2RlOjp6ZXJvV2lkdGhOb0JyZWFrU3BhY2U7CiAKICNlbmRpZiAvLyBDaGFyYWN0ZXJO
YW1lc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDEwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDExLTA0LTE3ICBK
dW5nc2hpayBTaGluICA8anNoaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgVStGRUZGIGJlIHRyZWF0ZWQgYXMgYSB6
ZXJvLXdpZHRoIGNoYXJhY3RlciBpbiBib3RoCisgICAgICAgIHNpbXBsZSBzY3JpcHQgYW5kIGNv
bXBsZXggc2NyaXB0IGNvZGUgcGF0aHMuIEluIENocm9taXVtCisgICAgICAgIFdpbmRvd3MsIFVu
aXNjcmliZUhlbHBlciBuZWVkcyBhIHJhdGhlciBleHRlbnNpdmUgY2hhbmdlcworICAgICAgICBz
dW1tYXJpemVkIGJlbG93LiAgT3RoZXIgcG9ydHMgbmVlZCBtaW5vciBjaGFuZ2VzLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODg2MAorCisgICAg
ICAgIFRlc3Q6IGZhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMtY29tcGxleC1zY3JpcHQu
aHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKTogVStGRUZGIGlzIGFkZGVkIHRvIHRo
ZSBsaXN0CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNv
bXBsZXhTY3JpcHQpOiBBZGRlZC4gU2FtZSBhcyB0aGUgYWJvdmUgZXhjZXB0IHRoYXQgWldOSiBh
bmQgWldKIGFyZSBleGNsdWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBh
Z2VUcmVlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6aW5p
dGlhbGl6ZVBhZ2UpOiBVK0ZFRkYgaXMgbWFkZSB0byBoYXZlIHplcm8td2lkdGggY2hhcmFjdGVy
cyBpbiBzaW1wbGUgc2NyaXB0IChmYXN0KSBjb2RlIHBhdGguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udE1hcDo6Z2V0U3BhY2VHbHlwaCk6IEFkZGVkIHRvIGdldCB0aGUgZ2lkIGZvciBz
cGFjZSBnbHlwaCB0byB1c2UgaW4gYWRqdXN0U3BhY2VBZHZhbmNlIHdoZW4gemVyby13aWR0aCBn
bHlwaCBjaGFyYWN0ZXIgaGFzIGEgbm9uLXplcm8gd2lkdGggYW5kIHBvdGVudGlhbGx5ICd2aXNp
YmxlJyBnbHlwaC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRNYXA6OkZvbnREYXRhOjpGb250RGF0
YSk6IHNwYWNlR2x5cGggbWVtYmVyIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVyaXZl
ZEZvbnREYXRhKTogc3BhY2VHbHlwaCBpcyByZXRyaWV2ZWQgYXMgd2VsbC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXI6OlVuaXNjcmliZUhlbHBlcik6IG1fc3BhY2VH
bHlwaCBhZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZUhlbHBlcjo6c2hhcGUpOiBz
cGFjZUdseXBoIGlzIG9idGFpbmVkIHN0b3JlZCBmb3IgYSBmb250IHRyaWVkIGZvciBlYWNoIGl0
ZW0uCisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXI6OmFkanVzdFNwYWNlQWR2YW5j
ZXMpOiBGb3IgemVyby13aWR0aCBjb21wbGV4IHNjcmlwdCBjaGFyYWN0ZXJzLCBzZXQgdGhlIGFk
dmFuY2Ugd2lkdGggdG8gemVybyBhbmQgcmVwbGFjZSBhIG5vbi16ZXJvLXdpZHRoL3Zpc2libGUg
Z2x5cGggd2l0aCBhIHNwYWNlIGdseXBoLgorICAgICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVs
cGVyOjphcHBseVNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVscGVyOjpj
b250YWluc01pc3NpbmdHbHlwaHMpOiB0dXJuZWQgdG8gYSBtZW1iZXIgZnVuY3Rpb24gYmVjYXVz
ZSBpdCBjYW5ub3Qgd29yayBvbiBnbHlwaHMgYWxvbmUgYW55IG1vcmUgYnV0IG5lZWQgdG8gdGFr
ZSBpbnRvIGFjY291bnQgYSBjaGFyYWN0ZXIgY29ycmVzcG9uZGluZyB0byBhIGdseXBoCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmg6IAorICAg
ICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVscGVyOjpTaGFwaW5nOjpTaGFwaW5nKTogbV9zcGFj
ZUdseXBoIGlzIGFkZGVkCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5p
c2NyaWJlSGVscGVyVGV4dFJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxw
ZXJUZXh0UnVuOjpVbmlzY3JpYmVIZWxwZXJUZXh0UnVuKTogV2hlbiBjYWxsaW5nIFVuaXNjcmli
ZXJIZWxwZXIsIGFkZCBhIG5ldyBhcmd1bWVudCBmb3Igc3BhY2VHbHlwaC4KKwogMjAxMS0wNC0x
NiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CShyZXZpc2lvbiA4NDA5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw4IEBAIHB1YmxpYzoKIAogICAgIEZv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgdHJlYXRB
c1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdc
bicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KLSAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dp
ZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwg
MHhBMCkgfHwgYyA9PSBzb2Z0SHlwaGVuIHx8IChjID49IDB4MjAwYyAmJiBjIDw9IDB4MjAwZikg
fHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVyOyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlKFVDaGFy
IGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjKSB8fCBj
ID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQorICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJv
V2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVybiBjIDwgMHgyMCB8fCAo
YyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4gfHwgKGMgPj0gMHgyMDBl
ICYmIGMgPD0gMHgyMDBmKSB8fCAoYyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmUpIHx8IGMgPT0g
emVyb1dpZHRoTm9CcmVha1NwYWNlIHx8IGMgPT0gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7
IH0KICAgICBzdGF0aWMgYm9vbCBjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYyk7CiAK
ICAgICBzdGF0aWMgaW5saW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhQYWdlVHJlZU5vZGUuY3BwCShyZXZpc2lvbiA4NDA5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkxLDYgKzE5MSw5IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGMK
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIE9iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgbXVzdCBub3QgcmVuZGVyIGF0IGFsbC4K
ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW29iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyIC0g
c3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFy
dCA9PSAoemVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gWldOQlMvQk9NIG11c3Qgbm90IHJlbmRlciBhdCBhbGwu
CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclt6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZSAqIDI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRp
bHNDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA4NDA5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGls
c0Nocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDE3ICsyNTAsMzEgQEAgaW50
IGdldEFzY2VudChIRk9OVCBoZm9udCkKICAgICByZXR1cm4gZ290TWV0cmljcyA/IHRtLnRtQXNj
ZW50IDoga1VuZGVmaW5lZEFzY2VudDsKIH0KIAorV09SRCBnZXRTcGFjZUdseXBoKEhGT05UIGhm
b250KSAKK3sKKyAgICBIREMgZGMgPSBHZXREQygwKTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBT
ZWxlY3RPYmplY3QoZGMsIGhmb250KTsKKyAgICBXQ0hBUiBzcGFjZSA9IEwnICc7CisgICAgV09S
RCBzcGFjZUdseXBoID0gMDsKKyAgICBHZXRHbHlwaEluZGljZXMoZGMsICZzcGFjZSwgMSwgJnNw
YWNlR2x5cGgsIDApOworICAgIFNlbGVjdE9iamVjdChkYywgb2xkRm9udCk7CisgICAgUmVsZWFz
ZURDKDAsIGRjKTsKKyAgICByZXR1cm4gc3BhY2VHbHlwaDsKK30KKwogc3RydWN0IEZvbnREYXRh
IHsKICAgICBGb250RGF0YSgpCiAgICAgICAgIDogaGZvbnQoMCkKICAgICAgICAgLCBhc2NlbnQo
a1VuZGVmaW5lZEFzY2VudCkKICAgICAgICAgLCBzY3JpcHRDYWNoZSgwKQorICAgICAgICAsIHNw
YWNlR2x5cGgoMCkKICAgICB7CiAgICAgfQogCiAgICAgSEZPTlQgaGZvbnQ7CiAgICAgaW50IGFz
Y2VudDsKICAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBzY3JpcHRDYWNoZTsKKyAgICBXT1JEIHNw
YWNlR2x5cGg7CiB9OwogCiAvLyBBZ2FpbiwgdXNpbmcgaGFzaF9tYXAgZG9lcyBub3QgZWFybiB1
cyBtdWNoIGhlcmUuICBwYWdlX2N5Y2xlcl90ZXN0IGludGwyCkBAIC0zNzksNyArMzkzLDggQEAg
Ym9vbCBnZXREZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbQogICAgICAgICAgICAgICAg
ICAgICAgICAgTE9HRk9OVCogbG9nZm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCog
YXNjZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgSEZPTlQqIGhmb250LAotICAgICAgICAg
ICAgICAgICAgICAgICAgU0NSSVBUX0NBQ0hFKiogc2NyaXB0Q2FjaGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1JJUFRfQ0FDSEUqKiBzY3JpcHRDYWNoZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFdPUkQqIHNwYWNlR2x5cGgpCiB7CiAgICAgQVNTRVJUKGxvZ2ZvbnQpOwogICAgIEFT
U0VSVChmYW1pbHkpOwpAQCAtNDA4LDYgKzQyMyw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRh
KGNvbnN0IFVDaGFyKiBmYW0KICAgICAgICAgLy8gY2FjaGUgaXQgc28gdGhhdCB3ZSB3b24ndCBo
YXZlIHRvIGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0IG9uY2UKICAgICAgICAgLy8gbW9yZSBmb3Ig
SEZPTlQgbmV4dCB0aW1lLgogICAgICAgICBkZXJpdmVkLT5hc2NlbnQgPSBnZXRBc2NlbnQoZGVy
aXZlZC0+aGZvbnQpOworICAgICAgICBkZXJpdmVkLT5zcGFjZUdseXBoID0gZ2V0U3BhY2VHbHlw
aChkZXJpdmVkLT5oZm9udCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZGVyaXZlZCA9ICZpdGVy
LT5zZWNvbmQ7CiAgICAgICAgIC8vIExhc3QgdGltZSwgR2V0QXNjZW50IGZhaWxlZCBzbyB0aGF0
IG9ubHkgSEZPTlQgd2FzCkBAIC00MTksNiArNDM1LDcgQEAgYm9vbCBnZXREZXJpdmVkRm9udERh
dGEoY29uc3QgVUNoYXIqIGZhbQogICAgICpoZm9udCA9IGRlcml2ZWQtPmhmb250OwogICAgICph
c2NlbnQgPSBkZXJpdmVkLT5hc2NlbnQ7CiAgICAgKnNjcmlwdENhY2hlID0gJihkZXJpdmVkLT5z
Y3JpcHRDYWNoZSk7CisgICAgKnNwYWNlR2x5cGggPSBkZXJpdmVkLT5zcGFjZUdseXBoOwogICAg
IHJldHVybiAqYXNjZW50ICE9IGtVbmRlZmluZWRBc2NlbnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFV0aWxzQ2hyb21pdW1XaW4uaAkocmV2aXNpb24gODQwOTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIGNvbnN0IFVDaGFyKiBnZXRGYWxsYmFja0ZhbWls
eShjb25zdCBVQ2gKIC8vIGludGwyIHBhZ2UtY3ljbGVyIHRlc3QgaXMgbm90aWNlYWJseSBzbG93
ZXIgd2l0aCBvbmUgb3V0IHBhcmFtIHRoYW4KIC8vIHRoZSBjdXJyZW50IHZlcnNpb24gYWx0aG91
Z2ggdGhlIHN1YnNlcXVlbnQgOSBwYXNzZXMgdGFrZSBhYm91dCB0aGUKIC8vIHNhbWUgdGltZS4K
LWJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksIGludCBzdHlsZSwg
TE9HRk9OVCosIGludCogYXNjZW50LCBIRk9OVCosIFNDUklQVF9DQUNIRSoqKTsKK2Jvb2wgZ2V0
RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksIGludCBzdHlsZSwgTE9HRk9OVCos
IGludCogYXNjZW50LCBIRk9OVCosIFNDUklQVF9DQUNIRSoqLCBXT1JEKiBzcGFjZUdseXBoKTsK
IAogZW51bSB7CiAgICAgRm9udFN0eWxlTm9ybWFsID0gMCwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJl
SGVscGVyLmNwcAkocmV2aXNpb24gODQwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw2ICszMyw3IEBACiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKKyNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udFV0aWxzQ2hyb21pdW1XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKQEAgLTQxLDM1ICs0Miw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNl
ZSB3aGVyZSB3b3JkIHNwYWNpbmcgc2hvdWxkIGJlIGFwcGxpZWQgaW5zaWRlCi0vLyBydW5zLiBO
b3RlIHRoYXQgdGhpcyBtdXN0IG1hdGNoIEZvbnQ6OnRyZWF0QXNTcGFjZSBzbyB3ZSBhbGwgYWdy
ZWUgd2hlcmUKLS8vIGFuZCBob3cgbXVjaCBzcGFjZSB0aGlzIGlzLCBzbyB3ZSBkb24ndCB3YW50
IHRvIGRvIG1vcmUgZ2VuZXJhbCBVbmljb2RlCi0vLyAiaXMgdGhpcyBhIHdvcmQgYnJlYWsiIHRo
aW5nLgotc3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIGMg
PT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAweDAwQTA7Ci19Ci0KLS8v
IFNDUklQVF9GT05UUFJPUEVSVElFUyBjb250YWlucyBnbHlwaCBpbmRpY2VzIGZvciBkZWZhdWx0
LCBpbnZhbGlkCi0vLyBhbmQgYmxhbmsgZ2x5cGhzLiBKdXN0IGJlY2F1c2UgU2NyaXB0U2hhcGUg
c3VjY2VlZHMgZG9lcyBub3QgbWVhbgotLy8gdGhhdCBhIHRleHQgcnVuIGlzIHJlbmRlcmVkIGNv
cnJlY3RseS4gU29tZSBjaGFyYWN0ZXJzIG1heSBiZSByZW5kZXJlZAotLy8gd2l0aCBkZWZhdWx0
L2ludmFsaWQvYmxhbmsgZ2x5cGhzLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhl
IGdseXBoCi0vLyBhcnJheSByZXR1cm5lZCBieSBTY3JpcHRTaGFwZSBjb250YWlucyBhbnkgb2Yg
dGhvc2UgZ2x5cGhzIHRvIG1ha2UKLS8vIHN1cmUgdGhhdCB0aGUgdGV4dCBydW4gaXMgcmVuZGVy
ZWQgc3VjY2Vzc2Z1bGx5Lgotc3RhdGljIGJvb2wgY29udGFpbnNNaXNzaW5nR2x5cGhzKFdPUkQg
KmdseXBocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyog
cHJvcGVydGllcykKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIGlmIChnbHlwaHNbaV0gPT0gcHJvcGVydGllcy0+d2dEZWZhdWx0Ci0gICAgICAgICAg
ICB8fCAoZ2x5cGhzW2ldID09IHByb3BlcnRpZXMtPndnSW52YWxpZAotICAgICAgICAgICAgJiYg
Z2x5cGhzW2ldICE9IHByb3BlcnRpZXMtPndnQmxhbmspKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiAvLyBIRk9OVCBpcyB0aGUgJ2lu
Y2FybmF0aW9uJyBvZiAnZXZlcnl0aGluZycgYWJvdXQgZm9udCwgYnV0IGl0J3MgYW4gb3BhcXVl
CiAvLyBoYW5kbGUgYW5kIHdlIGNhbid0IGRpcmVjdGx5IHF1ZXJ5IGl0IHRvIG1ha2UgYSBuZXcg
SEZPTlQgc2hhcmluZwogLy8gaXRzIGNoYXJhY3RlcmlzdGljcyAoaGVpZ2h0LCBzdHlsZSwgZXRj
KSBleGNlcHQgZm9yIGZhbWlseSBuYW1lLgpAQCAtMTAyLDEzICs3NCwxNSBAQCBVbmlzY3JpYmVI
ZWxwZXI6OlVuaXNjcmliZUhlbHBlcihjb25zdCBVCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaXNSdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhGT05U
IGhmb250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfQ0FDSEUqIHNj
cmlwdENhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfRk9OVFBS
T1BFUlRJRVMqIGZvbnRQcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIGZvbnRQcm9wZXJ0aWVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXT1JEIHNwYWNlR2x5cGgpCiAgICAgOiBtX2lucHV0KGlucHV0KQog
ICAgICwgbV9pbnB1dExlbmd0aChpbnB1dExlbmd0aCkKICAgICAsIG1faXNSdGwoaXNSdGwpCiAg
ICAgLCBtX2hmb250KGhmb250KQogICAgICwgbV9zY3JpcHRDYWNoZShzY3JpcHRDYWNoZSkKICAg
ICAsIG1fZm9udFByb3BlcnRpZXMoZm9udFByb3BlcnRpZXMpCisgICAgLCBtX3NwYWNlR2x5cGgo
c3BhY2VHbHlwaCkKICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShmYWxzZSkKICAgICAsIG1f
aW5oaWJpdExpZ2F0ZShmYWxzZSkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQpAQCAtNTQ2LDYg
KzUyMCw3IEBAIGJvb2wgVW5pc2NyaWJlSGVscGVyOjpzaGFwZShjb25zdCBVQ2hhcioKICAgICBT
Q1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlID0gbV9zY3JpcHRDYWNoZTsKICAgICBTQ1JJUFRfRk9O
VFBST1BFUlRJRVMqIGZvbnRQcm9wZXJ0aWVzID0gbV9mb250UHJvcGVydGllczsKICAgICBpbnQg
YXNjZW50ID0gbV9hc2NlbnQ7CisgICAgV09SRCBzcGFjZUdseXBoID0gbV9zcGFjZUdseXBoOwog
ICAgIEhEQyB0ZW1wREMgPSAwOwogICAgIEhHRElPQkogb2xkRm9udCA9IDA7CiAgICAgSFJFU1VM
VCBocjsKQEAgLTYwMSw3ICs1NzYsNyBAQCBib29sIFVuaXNjcmliZUhlbHBlcjo6c2hhcGUoY29u
c3QgVUNoYXIqCiAgICAgICAgIH0gZWxzZSBpZiAoaHIgPT0gRV9PVVRPRk1FTU9SWSkgewogICAg
ICAgICAgICAgbnVtR2x5cGhzICo9IDI7CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fSBlbHNlIGlmIChTVUNDRUVERUQoaHIpICYmIChsYXN0RmFsbGJhY2tUcmllZCB8fCAhY29udGFp
bnNNaXNzaW5nR2x5cGhzKCZzaGFwaW5nLm1fZ2x5cGhzWzBdLCBnZW5lcmF0ZWRHbHlwaHMsIGZv
bnRQcm9wZXJ0aWVzKSkpCisgICAgICAgIH0gZWxzZSBpZiAoU1VDQ0VFREVEKGhyKSAmJiAobGFz
dEZhbGxiYWNrVHJpZWQgfHwgIWNvbnRhaW5zTWlzc2luZ0dseXBocyhzaGFwaW5nLCBydW4sIGZv
bnRQcm9wZXJ0aWVzKSkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvLyBUaGUgY3Vy
cmVudCBmb250IGNhbid0IHJlbmRlciB0aGlzIHJ1bi4gY2xlYXIgREMgYW5kIHRyeQpAQCAtNjMy
LDcgKzYwNyw5IEBAIGJvb2wgVW5pc2NyaWJlSGVscGVyOjpzaGFwZShjb25zdCBVQ2hhcioKICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyICpmYW1pbHkgPSBnZXRGYWxsYmFja0ZhbWlseShpbnB1dCwg
aXRlbUxlbmd0aCwKICAgICAgICAgICAgICAgICBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFt
aWx5LCAwLCAwKTsKICAgICAgICAgICAgIGJvb2wgZm9udE9rID0gZ2V0RGVyaXZlZEZvbnREYXRh
KGZhbWlseSwgbV9zdHlsZSwgJm1fbG9nZm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmYXNjZW50LCAmaGZvbnQsICZzY3JpcHRDYWNoZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXNjZW50LCAmaGZvbnQs
ICZzY3JpcHRDYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZzcGFjZUdseXBoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKIAogICAgICAgICAgICAgaWYgKCFmb250T2spIHsKICAgICAgICAgICAgICAgICAv
LyBJZiB0aGlzIEdldERlcml2ZWRGb250RGF0YSBpcyBjYWxsZWQgZnJvbSB0aGUgcmVuZGVyZXIg
aXQKQEAgLTY0NCw3ICs2MjEsOCBAQCBib29sIFVuaXNjcmliZUhlbHBlcjo6c2hhcGUoY29uc3Qg
VUNoYXIqCiAKICAgICAgICAgICAgICAgICAvLyBUcnkgYWdhaW4uCiAgICAgICAgICAgICAgICAg
Zm9udE9rID0gZ2V0RGVyaXZlZEZvbnREYXRhKGZhbWlseSwgbV9zdHlsZSwgJm1fbG9nZm9udCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhc2NlbnQsICZo
Zm9udCwgJnNjcmlwdENhY2hlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmFzY2VudCwgJmhmb250LCAmc2NyaXB0Q2FjaGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcGFjZUdseXBoKTsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoZm9udE9rKTsKICAgICAgICAgICAgIH0KIApAQCAtNjczLDYgKzY1MSw3IEBAIGJv
b2wgVW5pc2NyaWJlSGVscGVyOjpzaGFwZShjb25zdCBVQ2hhcioKICAgICAvLyBiZWNhdXNlIGl0
J3Mgbm90IHVzZWQgZWxzZXdoZXJlLgogICAgIHNoYXBpbmcubV9oZm9udCA9IGhmb250OwogICAg
IHNoYXBpbmcubV9zY3JpcHRDYWNoZSA9IHNjcmlwdENhY2hlOworICAgIHNoYXBpbmcubV9zcGFj
ZUdseXBoID0gc3BhY2VHbHlwaDsKIAogICAgIC8vIFRoZSBhc2NlbnQgb2YgYSBmb250IGZvciB0
aGlzIHJ1biBjYW4gYmUgZGlmZmVyZW50IGZyb20KICAgICAvLyB0aGF0IG9mIHRoZSBwcmltYXJ5
IGZvbnQgc28gdGhhdCB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YKQEAgLTgwNywyMSArNzg2LDM2
IEBAIHZvaWQgVW5pc2NyaWJlSGVscGVyOjphZGp1c3RTcGFjZUFkdmFuY2UKICAgICAgICAgU2hh
cGluZyYgc2hhcGluZyA9IG1fc2hhcGVzW3J1bl07CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaGFwaW5nLmNoYXJMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXRyZWF0
QXNTcGFjZShtX2lucHV0W21fcnVuc1tydW5dLmlDaGFyUG9zICsgaV0pKQorICAgICAgICAgICAg
VUNoYXIgYyA9IG1faW5wdXRbbV9ydW5zW3J1bl0uaUNoYXJQb3MgKyBpXTsKKyAgICAgICAgICAg
IGlmICghRm9udDo6dHJlYXRBc1NwYWNlKGMpICYmCisgICAgICAgICAgICAgICAgIUZvbnQ6OnRy
ZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICAgICAgaW50IGdseXBoSW5kZXggPSBzaGFwaW5nLm1fbG9nc1tp
XTsKICAgICAgICAgICAgIGludCBjdXJyZW50QWR2YW5jZSA9IHNoYXBpbmcubV9hZHZhbmNlW2ds
eXBoSW5kZXhdOwogCi0gICAgICAgICAgICAvLyBjdXJyZW50QWR2YW5jZSBkb2VzIG5vdCBpbmNs
dWRlIGFkZGl0aW9uYWwgbGV0dGVyLXNwYWNpbmcsIGJ1dAotICAgICAgICAgICAgLy8gc3BhY2Vf
d2lkdGggZG9lcy4gSGVyZSB3ZSBmaW5kIG91dCBob3cgb2ZmIHdlIGFyZSBmcm9tIHRoZQotICAg
ICAgICAgICAgLy8gY29ycmVjdCB3aWR0aCBmb3IgdGhlIHNwYWNlIG5vdCBpbmNsdWRpbmcgbGV0
dGVyLXNwYWNpbmcsIHRoZW4KLSAgICAgICAgICAgIC8vIGp1c3Qgc3VidHJhY3QgdGhhdCBkaWZm
LgotICAgICAgICAgICAgaW50IGRpZmYgPSBjdXJyZW50QWR2YW5jZSAtIHNwYWNlV2lkdGhXaXRo
b3V0TGV0dGVyU3BhY2luZzsKLSAgICAgICAgICAgIC8vIFRoZSBzaGFwaW5nIGNhbiBjb25zaXN0
IG9mIGEgcnVuIG9mIHRleHQsIHNvIG9ubHkgc3VidHJhY3QgdGhlCi0gICAgICAgICAgICAvLyBk
aWZmZXJlbmNlIGluIHRoZSB3aWR0aCBvZiB0aGUgZ2x5cGguCi0gICAgICAgICAgICBzaGFwaW5n
Lm1fYWR2YW5jZVtnbHlwaEluZGV4XSAtPSBkaWZmOwotICAgICAgICAgICAgc2hhcGluZy5tX2Fi
Yy5hYmNCIC09IGRpZmY7CisgICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGMpKSB7
CisgICAgICAgICAgICAgICAgLy8gY3VycmVudEFkdmFuY2UgZG9lcyBub3QgaW5jbHVkZSBhZGRp
dGlvbmFsIGxldHRlci1zcGFjaW5nLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBzcGFjZV93aWR0
aCBkb2VzLiBIZXJlIHdlIGZpbmQgb3V0IGhvdyBvZmYgd2UgYXJlIGZyb20KKyAgICAgICAgICAg
ICAgICAvLyB0aGUgY29ycmVjdCB3aWR0aCBmb3IgdGhlIHNwYWNlIG5vdCBpbmNsdWRpbmcgbGV0
dGVyLXNwYWNpbmcsCisgICAgICAgICAgICAgICAgLy8gIHRoZW4ganVzdCBzdWJ0cmFjdCB0aGF0
IGRpZmYuCisgICAgICAgICAgICAgICAgaW50IGRpZmYgPSBjdXJyZW50QWR2YW5jZSAtIHNwYWNl
V2lkdGhXaXRob3V0TGV0dGVyU3BhY2luZzsKKyAgICAgICAgICAgICAgICAvLyBUaGUgc2hhcGlu
ZyBjYW4gY29uc2lzdCBvZiBhIHJ1biBvZiB0ZXh0LCBzbyBvbmx5IHN1YnRyYWN0CisgICAgICAg
ICAgICAgICAgLy8gdGhlIGRpZmZlcmVuY2UgaW4gdGhlIHdpZHRoIG9mIHRoZSBnbHlwaC4KKyAg
ICAgICAgICAgICAgICBzaGFwaW5nLm1fYWR2YW5jZVtnbHlwaEluZGV4XSAtPSBkaWZmOworICAg
ICAgICAgICAgICAgIHNoYXBpbmcubV9hYmMuYWJjQiAtPSBkaWZmOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGb3IgY2hhcmFjdGVy
cyB0byB0cmVhdCBhcyB6ZXJvLXdpZHRoIHNwYWNlIGluIGNvbXBsZXgKKyAgICAgICAgICAgIC8v
IHNjcmlwdHMsIHNldCB0aGUgYWR2YW5jZSB3aWR0aCB0byB6ZXJvLCBhZGp1c3QKKyAgICAgICAg
ICAgIC8vIHxhYmNCfCBvZiB0aGUgY3VycmVudCBydW4gYWNjb3JkaW5nbHkgYW5kIHNldCAKKyAg
ICAgICAgICAgIC8vIHRoZSBnbHlwaCB0byBtX3NwYWNlR2x5cGguCisgICAgICAgICAgICBzaGFw
aW5nLm1fYWR2YW5jZVtnbHlwaEluZGV4XSA9IDA7CisgICAgICAgICAgICBzaGFwaW5nLm1fYWJj
LmFiY0IgLT0gY3VycmVudEFkdmFuY2U7CisgICAgICAgICAgICBzaGFwaW5nLm1fb2Zmc2V0c1tn
bHlwaEluZGV4XS5kdSA9IDA7CisgICAgICAgICAgICBzaGFwaW5nLm1fb2Zmc2V0c1tnbHlwaElu
ZGV4XS5kdiA9IDA7CisgICAgICAgICAgICBzaGFwaW5nLm1fZ2x5cGhzW2dseXBoSW5kZXhdID0g
c2hhcGluZy5tX3NwYWNlR2x5cGg7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04NzIsNyArODY2
LDcgQEAgdm9pZCBVbmlzY3JpYmVIZWxwZXI6OmFwcGx5U3BhY2luZygpCiAgICAgICAgIC8vIGV4
dHJhIHdvcmRzcGFjaW5nIGFtb3VudCBmb3IgdGhlIGdseXBocyB0aGV5IGNvcnJlc3BvbmQgdG8u
CiAgICAgICAgIGlmIChtX3dvcmRTcGFjaW5nICE9IDApIHsKICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2hhcGluZy5jaGFyTGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgICAg
IGlmICghdHJlYXRBc1NwYWNlKG1faW5wdXRbbV9ydW5zW3J1bl0uaUNoYXJQb3MgKyBpXSkpCisg
ICAgICAgICAgICAgICAgaWYgKCFGb250Ojp0cmVhdEFzU3BhY2UobV9pbnB1dFttX3J1bnNbcnVu
XS5pQ2hhclBvcyArIGldKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgICAgICAgICAvLyBUaGUgY2hhciBpbiBxdWVzdGlvbiBpcyBhIHdvcmQgc2VwYXJhdG9yLi4u
CkBAIC05MjksNCArOTIzLDMwIEBAIGludCBVbmlzY3JpYmVIZWxwZXI6OmFkdmFuY2VGb3JJdGVt
KGludAogICAgIHJldHVybiBzaGFwaW5nLm1fcHJlUGFkZGluZyArIGp1c3RpZmljYXRpb247CiB9
CiAKKy8vIFNDUklQVF9GT05UUFJPUEVSVElFUyBjb250YWlucyBnbHlwaCBpbmRpY2VzIGZvciBk
ZWZhdWx0LCBpbnZhbGlkCisvLyBhbmQgYmxhbmsgZ2x5cGhzLiBKdXN0IGJlY2F1c2UgU2NyaXB0
U2hhcGUgc3VjY2VlZHMgZG9lcyBub3QgbWVhbgorLy8gdGhhdCBhIHRleHQgcnVuIGlzIHJlbmRl
cmVkIGNvcnJlY3RseS4gU29tZSBjaGFyYWN0ZXJzIG1heSBiZSByZW5kZXJlZAorLy8gd2l0aCBk
ZWZhdWx0L2ludmFsaWQvYmxhbmsgZ2x5cGhzLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gY2hlY2sg
aWYgdGhlIGdseXBoCisvLyBhcnJheSByZXR1cm5lZCBieSBTY3JpcHRTaGFwZSBjb250YWlucyBh
bnkgb2YgdGhvc2UgZ2x5cGhzIHRvIG1ha2UKKy8vIHN1cmUgdGhhdCB0aGUgdGV4dCBydW4gaXMg
cmVuZGVyZWQgc3VjY2Vzc2Z1bGx5LgorLy8gSG93ZXZlciwgd2Ugc2hvdWxkIG5vdCBzdWJqZWN0
IHplcm8td2lkdGggY2hhcmFjdGVycyB0byB0aGlzIHRlc3QuCisKK2Jvb2wgVW5pc2NyaWJlSGVs
cGVyOjpjb250YWluc01pc3NpbmdHbHlwaHMoY29uc3QgU2hhcGluZyYgc2hhcGluZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU0NSSVBUX0lURU0m
IHJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBwcm9wZXJ0aWVzKSBjb25zdAoreworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2hhcGluZy5jaGFyTGVuZ3RoKCk7IGkrKykgeworICAgICAgICBVQ2hhciBj
ID0gbV9pbnB1dFtydW4uaUNoYXJQb3MgKyBpXTsKKyAgICAgICAgLy8gZG8gbm90IGNhcmUgaWYg
YSBjaGFyYWN0ZXIgaXMgemVyby13aWR0aCBpbnZpc2libGUgY2hhcmFjdGVyLgorICAgICAgICBp
ZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpKSBjb250aW51
ZTsKKyAgICAgICAgaW50IGdseXBoSW5kZXggPSBzaGFwaW5nLm1fbG9nc1tpXTsKKyAgICAgICAg
V09SRCBnbHlwaCA9IHNoYXBpbmcubV9nbHlwaHNbZ2x5cGhJbmRleF07CisgICAgICAgIGlmIChn
bHlwaCA9PSBwcm9wZXJ0aWVzLT53Z0RlZmF1bHQKKyAgICAgICAgICAgIHx8IChnbHlwaCA9PSBw
cm9wZXJ0aWVzLT53Z0ludmFsaWQgJiYgZ2x5cGggIT0gcHJvcGVydGllcy0+d2dCbGFuaykpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisK
IH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuaAkocmV2
aXNpb24gODQwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9VbmlzY3JpYmVIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNSdGwsCiAgICAgICAgICAgICAgICAgICAg
IEhGT05ULAogICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfQ0FDSEUqLAotICAgICAgICAgICAg
ICAgICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqKTsKKyAgICAgICAgICAgICAgICAgICAgU0NS
SVBUX0ZPTlRQUk9QRVJUSUVTKiwKKyAgICAgICAgICAgICAgICAgICAgV09SRCk7CiAKICAgICB2
aXJ0dWFsIH5VbmlzY3JpYmVIZWxwZXIoKTsKIApAQCAtMjI1LDcgKzIyNiw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICA6IG1fcHJlUGFkZGluZygwKQogICAgICAgICAgICAgLCBtX2hmb250KE5V
TEwpCiAgICAgICAgICAgICAsIG1fc2NyaXB0Q2FjaGUoTlVMTCkKLSAgICAgICAgICAgICwgbV9h
c2NlbnRPZmZzZXQoMCkgeworICAgICAgICAgICAgLCBtX2FzY2VudE9mZnNldCgwKQorICAgICAg
ICAgICAgLCBtX3NwYWNlR2x5cGgoMCkgewogICAgICAgICAgICAgbV9hYmMuYWJjQSA9IDA7CiAg
ICAgICAgICAgICBtX2FiYy5hYmNCID0gMDsKICAgICAgICAgICAgIG1fYWJjLmFiY0MgPSAwOwpA
QCAtMzE5LDYgKzMyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHdoZW4gZHJhd2luZyBhIHN0
cmluZywgdG8gYWxpZ24gbXVsdGlwbGUgcnVucyByZW5kZXJlZCB3aXRoCiAgICAgICAgIC8vIGRp
ZmZlcmVudCBmb250cy4KICAgICAgICAgaW50IG1fYXNjZW50T2Zmc2V0OworCisgICAgICAgIFdP
UkQgbV9zcGFjZUdseXBoOwogICAgIH07CiAKICAgICAvLyBDb21wdXRlcyB0aGUgcnVuc18gYXJy
YXkgZnJvbSB0aGUgdGV4dCBydW4uCkBAIC0zNDMsNiArMzQ3LDEwIEBAIHByaXZhdGU6CiAgICAg
Ly8gUmV0dXJucyB0aGUgdG90YWwgd2lkdGggb2YgYSBzaW5nbGUgaXRlbS4KICAgICBpbnQgYWR2
YW5jZUZvckl0ZW0oaW50KSBjb25zdDsKIAorICAgIGJvb2wgY29udGFpbnNNaXNzaW5nR2x5cGhz
KGNvbnN0IFNoYXBpbmcmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFND
UklQVF9JVEVNJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTQ1JJUFRf
Rk9OVFBST1BFUlRJRVMqKSBjb25zdDsKKwogICAgIC8vIFNoYXBlcyBhIHJ1biAocG9pbnRlZCB0
byBieSB8aW5wdXR8KSB1c2luZyB8aGZvbnR8IGZpcnN0LgogICAgIC8vIFRyaWVzIGEgc2VyaWVz
IG9mIGZvbnRzIHNwZWNpZmllZCByZXRyaWV2ZWQgd2l0aCBOZXh0V2luRm9udERhdGEKICAgICAv
LyBhbmQgZmluYWxseSBhIGZvbnQgY292ZXJpbmcgY2hhcmFjdGVycyBpbiB8KmlucHV0fC4gQSBz
dHJpbmcgcG9pbnRlZApAQCAtMzg0LDYgKzM5Miw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fYXNj
ZW50OwogICAgIExPR0ZPTlQgbV9sb2dmb250OwogICAgIGludCBtX3N0eWxlOworICAgIFdPUkQg
bV9zcGFjZUdseXBoOwogCiAgICAgLy8gT3B0aW9ucywgc2VlIHRoZSBnZXR0ZXJzL3NldHRlcnMg
YWJvdmUuCiAgICAgYm9vbCBtX2RpcmVjdGlvbmFsT3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmNwcAkocmV2aXNpb24gODQwOTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsOCBAQCBVbmlzY3JpYmVIZWxwZXJUZXh0
UnVuOjpVbmlzY3JpYmVIZWxwZXJUCiAgICAgOiBVbmlzY3JpYmVIZWxwZXIocnVuLmNoYXJhY3Rl
cnMoKSwgcnVuLmxlbmd0aCgpLCBydW4ucnRsKCksCiAgICAgICAgICAgICAgICAgICAgICAgZm9u
dC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpLAogICAgICAgICAgICAgICAg
ICAgICAgIGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2NyaXB0Q2FjaGUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICBmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgp
LnNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkpCisgICAgICAgICAgICAgICAgICAgICAgZm9udC5wcmlt
YXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zY3JpcHRGb250UHJvcGVydGllcygpLAorICAgICAg
ICAgICAgICAgICAgICAgIGZvbnQucHJpbWFyeUZvbnQoKS0+c3BhY2VHbHlwaCgpKQogICAgICwg
bV9mb250KCZmb250KQogICAgICwgbV9mb250SW5kZXgoMCkKIHsKQEAgLTY5LDcgKzcwLDcgQEAg
VW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6VW5pc2NyaWJlSGVscGVyVAogICAgIFNDUklQVF9DQUNI
RSogc2NyaXB0Q2FjaGUsCiAgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBmb250UHJvcGVydGll
cykKICAgICA6IFVuaXNjcmliZUhlbHBlcihpbnB1dCwgaW5wdXRMZW5ndGgsIGlzUnRsLCBoZm9u
dCwKLSAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRDYWNoZSwgZm9udFByb3BlcnRpZXMpCisg
ICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q2FjaGUsIGZvbnRQcm9wZXJ0aWVzLCAwKQogICAg
ICwgbV9mb250KDApCiAgICAgLCBtX2ZvbnRJbmRleCgtMSkKIHsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDg0MTAwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTEtMDQtMTcgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEg
Y29tcGxleC1zY3JpcHQgdmVyc2lvbiBvZiB6ZXJvLXdpZHRoLWNoYXJhY3RlcnMuaHRtbC4KKyAg
ICAgICAgYW5kIGFkZCBVK0ZFRkYgdG8gemVyby13aWR0aC1jaGFyYWN0ZXJzLmh0bWwgCisgICAg
ICAgIENocm9taXVtIExpbnV4IGZhaWxzIHRoZSB0ZXN0IGJlY2F1c2UgVStGRUZGIGlzIHJlbmRl
cmVkCisgICAgICAgIHdpdGggYSBub24temVybyB3aWR0aCBnbHlwaC4KKyAgICAgICAgRmlsZWQg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg3NDEgYW5kIG5vdGVkCisg
ICAgICAgIGFzIHN1Y2ggaW4gdGVzdF9leHBlY3RhdGlvbi50eHQuCisgICAgICAgIAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4NjAKKworICAgICAg
ICAqIGZhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMtY29tcGxleC1zY3JpcHQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvemVyby13aWR0aC1jaGFyYWN0ZXJz
LWNvbXBsZXgtc2NyaXB0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC96ZXJvLXdp
ZHRoLWNoYXJhY3RlcnMuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQ6CisKIDIwMTEtMDQtMTYgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxl
LmNvbT4KIAogICAgICAgICBVcGRhdGVkIHJlc3VsdHMgZm9yIGZhc3QvYmxvY2svZmxvYXQvMDMy
Lmh0bWwgYWZ0ZXIgcjg0MDk2LiBGaWxlZCBodHRwOi8vd2Via2l0Lm9yZy9iLzU4NzM2IHRvCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvemVyby13aWR0aC1jaGFyYWN0ZXJzLWNvbXBsZXgt
c2NyaXB0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3RleHQv
emVyby13aWR0aC1jaGFyYWN0ZXJzLWNvbXBsZXgtc2NyaXB0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMtY29t
cGxleC1zY3JpcHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Ro
aXMgdGVzdCBjaGVja3MgdmFyaW91cyBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIGFsd2F5cyBiZSB6
ZXJvIHdpZHRoIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHdoZW4gZW5jbG9zZWQgYnkgY29tcGxl
eCBzY3JpcHQgY2hhcmFjdGVycy4gVGhlIFdlYktpdCB0ZXh0IHN5c3RlbSBlbnN1cmVzIHRoaXMg
aW4gYSB3YXkgdGhhdCdzIGluZGVwZW5kZW50IG9mIHRoZSBmb250cyBpbnN0YWxsZWQgb24gdGhl
IHN5c3RlbS4KKworUEFTUzogQWxsIGNoYXJhY3RlcnMgaGFkIHplcm8td2lkdGguCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3RleHQvemVyby13aWR0aC1jaGFyYWN0ZXJzLWNvbXBsZXgtc2NyaXB0
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3plcm8td2lkdGgtY2hh
cmFjdGVycy1jb21wbGV4LXNjcmlwdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0L3plcm8td2lkdGgtY2hhcmFjdGVycy1jb21wbGV4LXNjcmlwdC5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHRl
c3RDaGFyKGNoKQoreworICAgIHZhciBhID0gIlx1MDkxNVx1MDkzRSIKKyAgICB2YXIgYiA9ICJc
dTA5MTYiOworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoYXJhY3Rl
cnMiKTsKKyAgICBzcGFuLmZpcnN0Q2hpbGQuZGF0YSA9IGEgKyBiOworICAgIHZhciBhYldpZHRo
ID0gc3Bhbi5vZmZzZXRXaWR0aDsKKyAgICBzcGFuLmZpcnN0Q2hpbGQuZGF0YSA9IGE7CisgICAg
dmFyIGFXaWR0aCA9IHNwYW4ub2Zmc2V0V2lkdGg7CisgICAgc3Bhbi5maXJzdENoaWxkLmRhdGEg
PSBhICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaCkgKyBiOworICAgIHZhciBhYldpdGhDaFdpZHRo
ID0gc3Bhbi5vZmZzZXRXaWR0aDsKKworICAgIGlmIChhYldpdGhDaFdpZHRoID4gYWJXaWR0aCkK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZSBpZiAoYWJXaWR0aCA+IGFXaWR0aCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKK30KKworZnVuY3Rpb24g
dGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIHZhciBmYWlsZWRDb3VudCA9
IDA7CisgICAgZm9yICh2YXIgaSA9IDE7IGkgPCAzMjsgKytpKSAvLyA+CisgICAgICBpZiAoaSAh
PSA5ICYmIGkgIT0gMTAgJiYgaSAhPSAxMykgLy8gOworICAgICAgICBmYWlsZWRDb3VudCArPSB0
ZXN0Q2hhcihpKTsKKyAgICAvLyBaV0ogKFUrMjAwQykgYW5kIFpXTkogKFUrMjAwRCkgYXJlIGV4
Y2x1ZGVkIGJlY2F1c2UgdGhleQorICAgIC8vIGNhbiBhZmZlY3QgdGhlIHJlbmRlcmluZyBpbiBj
b21wbGV4IHNjcmlwdCB0ZXh0LgorICAgIGZhaWxlZENvdW50ICs9IHRlc3RDaGFyKDB4MjAwQik7
CisgICAgZmFpbGVkQ291bnQgKz0gdGVzdENoYXIoMHgyMDBFKTsKKyAgICBmYWlsZWRDb3VudCAr
PSB0ZXN0Q2hhcigweDIwMEYpOworICAgIGZhaWxlZENvdW50ICs9IHRlc3RDaGFyKDB4RkVGRik7
CisgICAgZmFpbGVkQ291bnQgKz0gdGVzdENoYXIoMHhGRkZDKTsKKworICAgIHZhciB0ZXN0QXJl
YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0QXJlYSIpOworICAgIHRlc3RBcmVhLnBh
cmVudE5vZGUucmVtb3ZlQ2hpbGQodGVzdEFyZWEpOworCisgICAgaWYgKGZhaWxlZENvdW50ID4g
MCkgCisgICAgICAgIHJlc3VsdCA9ICJGQUlMOiAiICsgZmFpbGVkQ291bnQgKyAiIGNoYXJhY3Rl
cnMgaGFkIG5vbi16ZXJvIHdpZHRoIiArCisgICAgICAgICAgICAgICAgICIgb3IgZmFpbGVkIHRv
IGdldCBtZWFzdXJlZC4iOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gIlBBU1M6IEFsbCBj
aGFyYWN0ZXJzIGhhZCB6ZXJvLXdpZHRoLiI7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJlc3VsdCIpLmZpcnN0Q2hpbGQuZGF0YSA9IHJlc3VsdDsKK30KKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+VGhpcyB0ZXN0IGNoZWNrcyB2YXJpb3VzIGNo
YXJhY3RlcnMgdGhhdCBzaG91bGQgYWx3YXlzIGJlIHplcm8gd2lkdGggdG8gZW5zdXJlIHRoYXQg
dGhleSBhcmUgd2hlbiBlbmNsb3NlZCBieSBjb21wbGV4IHNjcmlwdCBjaGFyYWN0ZXJzLgorVGhl
IFdlYktpdCB0ZXh0IHN5c3RlbSBlbnN1cmVzIHRoaXMgaW4gYSB3YXkgdGhhdCdzIGluZGVwZW5k
ZW50IG9mIHRoZSBmb250cyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS48L3A+Cis8cCBpZD0icmVz
dWx0Ij5GQUlMOiBTY3JpcHQgZGlkIG5vdCBydW4gdG8gY29tcGxldGlvbi48L3A+Cis8cCBpZD0i
dGVzdEFyZWEiPjxzcGFuIGlkPSJjaGFyYWN0ZXJzIj4mI3gwOTE1OyYjeDA5M0U7JiN4MDkxNjs8
L3NwYW4+PC9wPgorPC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3plcm8td2lk
dGgtY2hhcmFjdGVycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC96
ZXJvLXdpZHRoLWNoYXJhY3RlcnMuaHRtbAkocmV2aXNpb24gODQwOTkpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3RleHQvemVyby13aWR0aC1jaGFyYWN0ZXJzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEzLDYgKzEzLDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgdGVzdFN0cmluZyArPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKDB4MjAwRCk7CiAgICAgdGVzdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJD
b2RlKDB4MjAwRSk7CiAgICAgdGVzdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjAw
Rik7CisgICAgdGVzdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RkVGRik7CiAgICAg
dGVzdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RkZGQyk7CiAgICAgdmFyIHNwYW4g
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhcmFjdGVycyIpOwogICAgIHZhciBhYldpZHRo
ID0gc3Bhbi5vZmZzZXRXaWR0aDsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHJldmlzaW9uIDg0MDk5KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0zNTM0LDQgKzM1MzQsNSBAQCBCVUdNT1JSSVRBIDogZmFzdC9odG1sL2RldGFp
bHMtcmVtb3ZlLXN1CiBCVUdNT1JSSVRBIDogZmFzdC9odG1sL2RldGFpbHMtd3JpdGluZy1tb2Rl
Lmh0bWwgPSBGQUlMCiAKIEJVR1dLNTg2MTkgR1BVIExJTlVYIFdJTiA6IG1lZGlhL3ZpZGVvLXZv
bHVtZS1zbGlkZXIuaHRtbCA9IElNQUdFCitCVUdXSzU4NzQxIExJTlVYIDogZmFzdC90ZXh0L3pl
cm8td2lkdGgtY2hhcmFjdGVycy1jb21wbGV4LXNjcmlwdC5odG1sID0gRkFJTAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90053</attachid>
            <date>2011-04-18 10:53:43 -0700</date>
            <delta_ts>2011-04-18 23:45:59 -0700</delta_ts>
            <desc>patch updated to fix style nits</desc>
            <filename>48860.patch.2c</filename>
            <type>text/plain</type>
            <size>26410</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODQxMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDQtMTcgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFUrRkVGRiAoWmVy
byB3aWR0aCBuby1icmVhayBzcGFjZSkgdG8gQ2hhcmFjdGVyTmFtZXMuaC4KKyAgICAgICAgSXQn
cyBhZGRlZCB0byB0aGUgbGlzdCBvZiBjaGFyYWN0ZXJzIHRvIHRyZWF0IGFzIHplcm8td2lkdGgK
KyAgICAgICAgaW4gV2ViQ29yZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDg4NjAKKworICAgICAgICAqIHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg6CisKIDIwMTEtMDQtMTYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAkocmV2aXNp
b24gODQwOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBjb25zdCBVQ2hhciB5ZW5T
aWduID0gMHgwMEE1OwogY29uc3QgVUNoYXIgemVyb1dpZHRoSm9pbmVyID0gMHgyMDBEOwogY29u
c3QgVUNoYXIgemVyb1dpZHRoTm9uSm9pbmVyID0gMHgyMDBDOwogY29uc3QgVUNoYXIgemVyb1dp
ZHRoU3BhY2UgPSAweDIwMEI7Citjb25zdCBVQ2hhciB6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgPSAw
eEZFRkY7CiAKIH0gLy8gbmFtZXNwYWNlIFVuaWNvZGUKIH0gLy8gbmFtZXNwYWNlIFdURgpAQCAt
MTM4LDUgKzEzOSw2IEBAIHVzaW5nIFdURjo6VW5pY29kZTo6eWVuU2lnbjsKIHVzaW5nIFdURjo6
VW5pY29kZTo6emVyb1dpZHRoSm9pbmVyOwogdXNpbmcgV1RGOjpVbmljb2RlOjp6ZXJvV2lkdGhO
b25Kb2luZXI7CiB1c2luZyBXVEY6OlVuaWNvZGU6Onplcm9XaWR0aFNwYWNlOwordXNpbmcgV1RG
OjpVbmljb2RlOjp6ZXJvV2lkdGhOb0JyZWFrU3BhY2U7CiAKICNlbmRpZiAvLyBDaGFyYWN0ZXJO
YW1lc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDEwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDExLTA0LTE3ICBK
dW5nc2hpayBTaGluICA8anNoaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgVStGRUZGIGJlIHRyZWF0ZWQgYXMgYSB6
ZXJvLXdpZHRoIGNoYXJhY3RlciBpbiBib3RoCisgICAgICAgIHNpbXBsZSBzY3JpcHQgYW5kIGNv
bXBsZXggc2NyaXB0IGNvZGUgcGF0aHMuIEluIENocm9taXVtCisgICAgICAgIFdpbmRvd3MsIFVu
aXNjcmliZUhlbHBlciBuZWVkcyBhIHJhdGhlciBleHRlbnNpdmUgY2hhbmdlcworICAgICAgICBz
dW1tYXJpemVkIGJlbG93LiAgT3RoZXIgcG9ydHMgbmVlZCBtaW5vciBjaGFuZ2VzLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODg2MAorCisgICAg
ICAgIFRlc3Q6IGZhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMtY29tcGxleC1zY3JpcHQu
aHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKTogVStGRUZGIGlzIGFkZGVkIHRvIHRo
ZSBsaXN0CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNv
bXBsZXhTY3JpcHQpOiBBZGRlZC4gU2FtZSBhcyB0aGUgYWJvdmUgZXhjZXB0IHRoYXQgWldOSiBh
bmQgWldKIGFyZSBleGNsdWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBh
Z2VUcmVlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6aW5p
dGlhbGl6ZVBhZ2UpOiBVK0ZFRkYgaXMgbWFkZSB0byBoYXZlIHplcm8td2lkdGggY2hhcmFjdGVy
cyBpbiBzaW1wbGUgc2NyaXB0IChmYXN0KSBjb2RlIHBhdGguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udE1hcDo6Z2V0U3BhY2VHbHlwaCk6IEFkZGVkIHRvIGdldCB0aGUgZ2lkIGZvciBz
cGFjZSBnbHlwaCB0byB1c2UgaW4gYWRqdXN0U3BhY2VBZHZhbmNlIHdoZW4gemVyby13aWR0aCBn
bHlwaCBjaGFyYWN0ZXIgaGFzIGEgbm9uLXplcm8gd2lkdGggYW5kIHBvdGVudGlhbGx5ICd2aXNp
YmxlJyBnbHlwaC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRNYXA6OkZvbnREYXRhOjpGb250RGF0
YSk6IHNwYWNlR2x5cGggbWVtYmVyIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVyaXZl
ZEZvbnREYXRhKTogc3BhY2VHbHlwaCBpcyByZXRyaWV2ZWQgYXMgd2VsbC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXI6OlVuaXNjcmliZUhlbHBlcik6IG1fc3BhY2VH
bHlwaCBhZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZUhlbHBlcjo6c2hhcGUpOiBz
cGFjZUdseXBoIGlzIG9idGFpbmVkIHN0b3JlZCBmb3IgYSBmb250IHRyaWVkIGZvciBlYWNoIGl0
ZW0uCisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXI6OmFkanVzdFNwYWNlQWR2YW5j
ZXMpOiBGb3IgemVyby13aWR0aCBjb21wbGV4IHNjcmlwdCBjaGFyYWN0ZXJzLCBzZXQgdGhlIGFk
dmFuY2Ugd2lkdGggdG8gemVybyBhbmQgcmVwbGFjZSBhIG5vbi16ZXJvLXdpZHRoL3Zpc2libGUg
Z2x5cGggd2l0aCBhIHNwYWNlIGdseXBoLgorICAgICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVs
cGVyOjphcHBseVNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVscGVyOjpj
b250YWluc01pc3NpbmdHbHlwaHMpOiB0dXJuZWQgdG8gYSBtZW1iZXIgZnVuY3Rpb24gYmVjYXVz
ZSBpdCBjYW5ub3Qgd29yayBvbiBnbHlwaHMgYWxvbmUgYW55IG1vcmUgYnV0IG5lZWQgdG8gdGFr
ZSBpbnRvIGFjY291bnQgYSBjaGFyYWN0ZXIgY29ycmVzcG9uZGluZyB0byBhIGdseXBoCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmg6IAorICAg
ICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVscGVyOjpTaGFwaW5nOjpTaGFwaW5nKTogbV9zcGFj
ZUdseXBoIGlzIGFkZGVkCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5p
c2NyaWJlSGVscGVyVGV4dFJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxw
ZXJUZXh0UnVuOjpVbmlzY3JpYmVIZWxwZXJUZXh0UnVuKTogV2hlbiBjYWxsaW5nIFVuaXNjcmli
ZXJIZWxwZXIsIGFkZCBhIG5ldyBhcmd1bWVudCBmb3Igc3BhY2VHbHlwaC4KKwogMjAxMS0wNC0x
NiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CShyZXZpc2lvbiA4NDA5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw4IEBAIHB1YmxpYzoKIAogICAgIEZv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgdHJlYXRB
c1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdc
bicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KLSAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dp
ZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwg
MHhBMCkgfHwgYyA9PSBzb2Z0SHlwaGVuIHx8IChjID49IDB4MjAwYyAmJiBjIDw9IDB4MjAwZikg
fHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVyOyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlKFVDaGFy
IGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjKSB8fCBj
ID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQorICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJv
V2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVybiBjIDwgMHgyMCB8fCAo
YyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4gfHwgKGMgPj0gMHgyMDBl
ICYmIGMgPD0gMHgyMDBmKSB8fCAoYyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmUpIHx8IGMgPT0g
emVyb1dpZHRoTm9CcmVha1NwYWNlIHx8IGMgPT0gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7
IH0KICAgICBzdGF0aWMgYm9vbCBjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYyk7CiAK
ICAgICBzdGF0aWMgaW5saW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhQYWdlVHJlZU5vZGUuY3BwCShyZXZpc2lvbiA4NDA5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkxLDYgKzE5MSw5IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGMK
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIE9iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgbXVzdCBub3QgcmVuZGVyIGF0IGFsbC4K
ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW29iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyIC0g
c3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFy
dCA9PSAoemVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gWldOQlMvQk9NIG11c3Qgbm90IHJlbmRlciBhdCBhbGwu
CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclt6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZSAqIDI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRp
bHNDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA4NDA5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGls
c0Nocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDE3ICsyNTAsMzEgQEAgaW50
IGdldEFzY2VudChIRk9OVCBoZm9udCkKICAgICByZXR1cm4gZ290TWV0cmljcyA/IHRtLnRtQXNj
ZW50IDoga1VuZGVmaW5lZEFzY2VudDsKIH0KIAorV09SRCBnZXRTcGFjZUdseXBoKEhGT05UIGhm
b250KSAKK3sKKyAgICBIREMgZGMgPSBHZXREQygwKTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBT
ZWxlY3RPYmplY3QoZGMsIGhmb250KTsKKyAgICBXQ0hBUiBzcGFjZSA9IEwnICc7CisgICAgV09S
RCBzcGFjZUdseXBoID0gMDsKKyAgICBHZXRHbHlwaEluZGljZXMoZGMsICZzcGFjZSwgMSwgJnNw
YWNlR2x5cGgsIDApOworICAgIFNlbGVjdE9iamVjdChkYywgb2xkRm9udCk7CisgICAgUmVsZWFz
ZURDKDAsIGRjKTsKKyAgICByZXR1cm4gc3BhY2VHbHlwaDsKK30KKwogc3RydWN0IEZvbnREYXRh
IHsKICAgICBGb250RGF0YSgpCiAgICAgICAgIDogaGZvbnQoMCkKICAgICAgICAgLCBhc2NlbnQo
a1VuZGVmaW5lZEFzY2VudCkKICAgICAgICAgLCBzY3JpcHRDYWNoZSgwKQorICAgICAgICAsIHNw
YWNlR2x5cGgoMCkKICAgICB7CiAgICAgfQogCiAgICAgSEZPTlQgaGZvbnQ7CiAgICAgaW50IGFz
Y2VudDsKICAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBzY3JpcHRDYWNoZTsKKyAgICBXT1JEIHNw
YWNlR2x5cGg7CiB9OwogCiAvLyBBZ2FpbiwgdXNpbmcgaGFzaF9tYXAgZG9lcyBub3QgZWFybiB1
cyBtdWNoIGhlcmUuICBwYWdlX2N5Y2xlcl90ZXN0IGludGwyCkBAIC0zNzksNyArMzkzLDggQEAg
Ym9vbCBnZXREZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbQogICAgICAgICAgICAgICAg
ICAgICAgICAgTE9HRk9OVCogbG9nZm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCog
YXNjZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgSEZPTlQqIGhmb250LAotICAgICAgICAg
ICAgICAgICAgICAgICAgU0NSSVBUX0NBQ0hFKiogc2NyaXB0Q2FjaGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1JJUFRfQ0FDSEUqKiBzY3JpcHRDYWNoZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFdPUkQqIHNwYWNlR2x5cGgpCiB7CiAgICAgQVNTRVJUKGxvZ2ZvbnQpOwogICAgIEFT
U0VSVChmYW1pbHkpOwpAQCAtNDA4LDYgKzQyMyw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRh
KGNvbnN0IFVDaGFyKiBmYW0KICAgICAgICAgLy8gY2FjaGUgaXQgc28gdGhhdCB3ZSB3b24ndCBo
YXZlIHRvIGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0IG9uY2UKICAgICAgICAgLy8gbW9yZSBmb3Ig
SEZPTlQgbmV4dCB0aW1lLgogICAgICAgICBkZXJpdmVkLT5hc2NlbnQgPSBnZXRBc2NlbnQoZGVy
aXZlZC0+aGZvbnQpOworICAgICAgICBkZXJpdmVkLT5zcGFjZUdseXBoID0gZ2V0U3BhY2VHbHlw
aChkZXJpdmVkLT5oZm9udCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZGVyaXZlZCA9ICZpdGVy
LT5zZWNvbmQ7CiAgICAgICAgIC8vIExhc3QgdGltZSwgR2V0QXNjZW50IGZhaWxlZCBzbyB0aGF0
IG9ubHkgSEZPTlQgd2FzCkBAIC00MTksNiArNDM1LDcgQEAgYm9vbCBnZXREZXJpdmVkRm9udERh
dGEoY29uc3QgVUNoYXIqIGZhbQogICAgICpoZm9udCA9IGRlcml2ZWQtPmhmb250OwogICAgICph
c2NlbnQgPSBkZXJpdmVkLT5hc2NlbnQ7CiAgICAgKnNjcmlwdENhY2hlID0gJihkZXJpdmVkLT5z
Y3JpcHRDYWNoZSk7CisgICAgKnNwYWNlR2x5cGggPSBkZXJpdmVkLT5zcGFjZUdseXBoOwogICAg
IHJldHVybiAqYXNjZW50ICE9IGtVbmRlZmluZWRBc2NlbnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFV0aWxzQ2hyb21pdW1XaW4uaAkocmV2aXNpb24gODQwOTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIGNvbnN0IFVDaGFyKiBnZXRGYWxsYmFja0ZhbWls
eShjb25zdCBVQ2gKIC8vIGludGwyIHBhZ2UtY3ljbGVyIHRlc3QgaXMgbm90aWNlYWJseSBzbG93
ZXIgd2l0aCBvbmUgb3V0IHBhcmFtIHRoYW4KIC8vIHRoZSBjdXJyZW50IHZlcnNpb24gYWx0aG91
Z2ggdGhlIHN1YnNlcXVlbnQgOSBwYXNzZXMgdGFrZSBhYm91dCB0aGUKIC8vIHNhbWUgdGltZS4K
LWJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksIGludCBzdHlsZSwg
TE9HRk9OVCosIGludCogYXNjZW50LCBIRk9OVCosIFNDUklQVF9DQUNIRSoqKTsKK2Jvb2wgZ2V0
RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksIGludCBzdHlsZSwgTE9HRk9OVCos
IGludCogYXNjZW50LCBIRk9OVCosIFNDUklQVF9DQUNIRSoqLCBXT1JEKiBzcGFjZUdseXBoKTsK
IAogZW51bSB7CiAgICAgRm9udFN0eWxlTm9ybWFsID0gMCwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJl
SGVscGVyLmNwcAkocmV2aXNpb24gODQwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw0NSArMzEsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVbmlzY3JpYmVI
ZWxwZXIuaCIKIAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQorI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJGb250VXRpbHNDaHJvbWl1bVdpbi5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dFNraWEuaCIKICNpbmNsdWRlICJTa2lhRm9udFdpbi5oIgogI2luY2x1ZGUgIlNrUG9pbnQuaCIK
KyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2VlIHdoZXJl
IHdvcmQgc3BhY2luZyBzaG91bGQgYmUgYXBwbGllZCBpbnNpZGUKLS8vIHJ1bnMuIE5vdGUgdGhh
dCB0aGlzIG11c3QgbWF0Y2ggRm9udDo6dHJlYXRBc1NwYWNlIHNvIHdlIGFsbCBhZ3JlZSB3aGVy
ZQotLy8gYW5kIGhvdyBtdWNoIHNwYWNlIHRoaXMgaXMsIHNvIHdlIGRvbid0IHdhbnQgdG8gZG8g
bW9yZSBnZW5lcmFsIFVuaWNvZGUKLS8vICJpcyB0aGlzIGEgd29yZCBicmVhayIgdGhpbmcuCi1z
dGF0aWMgYm9vbCB0cmVhdEFzU3BhY2UoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gYyA9PSAnICcg
fHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09IDB4MDBBMDsKLX0KLQotLy8gU0NSSVBU
X0ZPTlRQUk9QRVJUSUVTIGNvbnRhaW5zIGdseXBoIGluZGljZXMgZm9yIGRlZmF1bHQsIGludmFs
aWQKLS8vIGFuZCBibGFuayBnbHlwaHMuIEp1c3QgYmVjYXVzZSBTY3JpcHRTaGFwZSBzdWNjZWVk
cyBkb2VzIG5vdCBtZWFuCi0vLyB0aGF0IGEgdGV4dCBydW4gaXMgcmVuZGVyZWQgY29ycmVjdGx5
LiBTb21lIGNoYXJhY3RlcnMgbWF5IGJlIHJlbmRlcmVkCi0vLyB3aXRoIGRlZmF1bHQvaW52YWxp
ZC9ibGFuayBnbHlwaHMuIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZ2x5cGgK
LS8vIGFycmF5IHJldHVybmVkIGJ5IFNjcmlwdFNoYXBlIGNvbnRhaW5zIGFueSBvZiB0aG9zZSBn
bHlwaHMgdG8gbWFrZQotLy8gc3VyZSB0aGF0IHRoZSB0ZXh0IHJ1biBpcyByZW5kZXJlZCBzdWNj
ZXNzZnVsbHkuCi1zdGF0aWMgYm9vbCBjb250YWluc01pc3NpbmdHbHlwaHMoV09SRCAqZ2x5cGhz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBwcm9wZXJ0
aWVzKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
aWYgKGdseXBoc1tpXSA9PSBwcm9wZXJ0aWVzLT53Z0RlZmF1bHQKLSAgICAgICAgICAgIHx8IChn
bHlwaHNbaV0gPT0gcHJvcGVydGllcy0+d2dJbnZhbGlkCi0gICAgICAgICAgICAmJiBnbHlwaHNb
aV0gIT0gcHJvcGVydGllcy0+d2dCbGFuaykpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIC8vIEhGT05UIGlzIHRoZSAnaW5jYXJuYXRp
b24nIG9mICdldmVyeXRoaW5nJyBhYm91dCBmb250LCBidXQgaXQncyBhbiBvcGFxdWUKIC8vIGhh
bmRsZSBhbmQgd2UgY2FuJ3QgZGlyZWN0bHkgcXVlcnkgaXQgdG8gbWFrZSBhIG5ldyBIRk9OVCBz
aGFyaW5nCiAvLyBpdHMgY2hhcmFjdGVyaXN0aWNzIChoZWlnaHQsIHN0eWxlLCBldGMpIGV4Y2Vw
dCBmb3IgZmFtaWx5IG5hbWUuCkBAIC0xMDIsMTMgKzczLDE1IEBAIFVuaXNjcmliZUhlbHBlcjo6
VW5pc2NyaWJlSGVscGVyKGNvbnN0IFUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc1J0bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEZPTlQgaGZvbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQVF9DQUNIRSogc2NyaXB0Q2Fj
aGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQVF9GT05UUFJPUEVSVElF
UyogZm9udFByb3BlcnRpZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQ
VF9GT05UUFJPUEVSVElFUyogZm9udFByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdPUkQgc3BhY2VHbHlwaCkKICAgICA6IG1faW5wdXQoaW5wdXQpCiAgICAgLCBt
X2lucHV0TGVuZ3RoKGlucHV0TGVuZ3RoKQogICAgICwgbV9pc1J0bChpc1J0bCkKICAgICAsIG1f
aGZvbnQoaGZvbnQpCiAgICAgLCBtX3NjcmlwdENhY2hlKHNjcmlwdENhY2hlKQogICAgICwgbV9m
b250UHJvcGVydGllcyhmb250UHJvcGVydGllcykKKyAgICAsIG1fc3BhY2VHbHlwaChzcGFjZUds
eXBoKQogICAgICwgbV9kaXJlY3Rpb25hbE92ZXJyaWRlKGZhbHNlKQogICAgICwgbV9pbmhpYml0
TGlnYXRlKGZhbHNlKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCkBAIC01NDYsNiArNTE5LDcg
QEAgYm9vbCBVbmlzY3JpYmVIZWxwZXI6OnNoYXBlKGNvbnN0IFVDaGFyKgogICAgIFNDUklQVF9D
QUNIRSogc2NyaXB0Q2FjaGUgPSBtX3NjcmlwdENhY2hlOwogICAgIFNDUklQVF9GT05UUFJPUEVS
VElFUyogZm9udFByb3BlcnRpZXMgPSBtX2ZvbnRQcm9wZXJ0aWVzOwogICAgIGludCBhc2NlbnQg
PSBtX2FzY2VudDsKKyAgICBXT1JEIHNwYWNlR2x5cGggPSBtX3NwYWNlR2x5cGg7CiAgICAgSERD
IHRlbXBEQyA9IDA7CiAgICAgSEdESU9CSiBvbGRGb250ID0gMDsKICAgICBIUkVTVUxUIGhyOwpA
QCAtNjAxLDcgKzU3NSw3IEBAIGJvb2wgVW5pc2NyaWJlSGVscGVyOjpzaGFwZShjb25zdCBVQ2hh
cioKICAgICAgICAgfSBlbHNlIGlmIChociA9PSBFX09VVE9GTUVNT1JZKSB7CiAgICAgICAgICAg
ICBudW1HbHlwaHMgKj0gMjsKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2Ug
aWYgKFNVQ0NFRURFRChocikgJiYgKGxhc3RGYWxsYmFja1RyaWVkIHx8ICFjb250YWluc01pc3Np
bmdHbHlwaHMoJnNoYXBpbmcubV9nbHlwaHNbMF0sIGdlbmVyYXRlZEdseXBocywgZm9udFByb3Bl
cnRpZXMpKSkKKyAgICAgICAgfSBlbHNlIGlmIChTVUNDRUVERUQoaHIpICYmIChsYXN0RmFsbGJh
Y2tUcmllZCB8fCAhY29udGFpbnNNaXNzaW5nR2x5cGhzKHNoYXBpbmcsIHJ1biwgZm9udFByb3Bl
cnRpZXMpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIFRoZSBjdXJyZW50IGZv
bnQgY2FuJ3QgcmVuZGVyIHRoaXMgcnVuLiBjbGVhciBEQyBhbmQgdHJ5CkBAIC02MzIsNyArNjA2
LDkgQEAgYm9vbCBVbmlzY3JpYmVIZWxwZXI6OnNoYXBlKGNvbnN0IFVDaGFyKgogICAgICAgICAg
ICAgY29uc3QgVUNoYXIgKmZhbWlseSA9IGdldEZhbGxiYWNrRmFtaWx5KGlucHV0LCBpdGVtTGVu
Z3RoLAogICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHksIDAs
IDApOwogICAgICAgICAgICAgYm9vbCBmb250T2sgPSBnZXREZXJpdmVkRm9udERhdGEoZmFtaWx5
LCBtX3N0eWxlLCAmbV9sb2dmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZhc2NlbnQsICZoZm9udCwgJnNjcmlwdENhY2hlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhc2NlbnQsICZoZm9udCwgJnNjcmlw
dENhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNw
YWNlR2x5cGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogCiAgICAgICAgICAgICBpZiAoIWZvbnRPaykgewogICAgICAgICAgICAgICAgIC8vIElmIHRo
aXMgR2V0RGVyaXZlZEZvbnREYXRhIGlzIGNhbGxlZCBmcm9tIHRoZSByZW5kZXJlciBpdApAQCAt
NjQ0LDcgKzYyMCw4IEBAIGJvb2wgVW5pc2NyaWJlSGVscGVyOjpzaGFwZShjb25zdCBVQ2hhcioK
IAogICAgICAgICAgICAgICAgIC8vIFRyeSBhZ2Fpbi4KICAgICAgICAgICAgICAgICBmb250T2sg
PSBnZXREZXJpdmVkRm9udERhdGEoZmFtaWx5LCBtX3N0eWxlLCAmbV9sb2dmb250LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFzY2VudCwgJmhmb250LCAm
c2NyaXB0Q2FjaGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmYXNjZW50LCAmaGZvbnQsICZzY3JpcHRDYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnNwYWNlR2x5cGgpOwogICAgICAgICAgICAgICAgIEFTU0VS
VChmb250T2spOwogICAgICAgICAgICAgfQogCkBAIC02NzMsNiArNjUwLDcgQEAgYm9vbCBVbmlz
Y3JpYmVIZWxwZXI6OnNoYXBlKGNvbnN0IFVDaGFyKgogICAgIC8vIGJlY2F1c2UgaXQncyBub3Qg
dXNlZCBlbHNld2hlcmUuCiAgICAgc2hhcGluZy5tX2hmb250ID0gaGZvbnQ7CiAgICAgc2hhcGlu
Zy5tX3NjcmlwdENhY2hlID0gc2NyaXB0Q2FjaGU7CisgICAgc2hhcGluZy5tX3NwYWNlR2x5cGgg
PSBzcGFjZUdseXBoOwogCiAgICAgLy8gVGhlIGFzY2VudCBvZiBhIGZvbnQgZm9yIHRoaXMgcnVu
IGNhbiBiZSBkaWZmZXJlbnQgZnJvbQogICAgIC8vIHRoYXQgb2YgdGhlIHByaW1hcnkgZm9udCBz
byB0aGF0IHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZgpAQCAtODA3LDIxICs3ODUsMzYgQEAgdm9p
ZCBVbmlzY3JpYmVIZWxwZXI6OmFkanVzdFNwYWNlQWR2YW5jZQogICAgICAgICBTaGFwaW5nJiBz
aGFwaW5nID0gbV9zaGFwZXNbcnVuXTsKIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNo
YXBpbmcuY2hhckxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghdHJlYXRBc1NwYWNl
KG1faW5wdXRbbV9ydW5zW3J1bl0uaUNoYXJQb3MgKyBpXSkpCisgICAgICAgICAgICBVQ2hhciBj
ID0gbV9pbnB1dFttX3J1bnNbcnVuXS5pQ2hhclBvcyArIGldOworICAgICAgICAgICAgaWYgKCFG
b250Ojp0cmVhdEFzU3BhY2UoYykKKyAgICAgICAgICAgICAgICAmJiAhRm9udDo6dHJlYXRBc1pl
cm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICBpbnQgZ2x5cGhJbmRleCA9IHNoYXBpbmcubV9sb2dzW2ldOwogICAg
ICAgICAgICAgaW50IGN1cnJlbnRBZHZhbmNlID0gc2hhcGluZy5tX2FkdmFuY2VbZ2x5cGhJbmRl
eF07CiAKLSAgICAgICAgICAgIC8vIGN1cnJlbnRBZHZhbmNlIGRvZXMgbm90IGluY2x1ZGUgYWRk
aXRpb25hbCBsZXR0ZXItc3BhY2luZywgYnV0Ci0gICAgICAgICAgICAvLyBzcGFjZV93aWR0aCBk
b2VzLiBIZXJlIHdlIGZpbmQgb3V0IGhvdyBvZmYgd2UgYXJlIGZyb20gdGhlCi0gICAgICAgICAg
ICAvLyBjb3JyZWN0IHdpZHRoIGZvciB0aGUgc3BhY2Ugbm90IGluY2x1ZGluZyBsZXR0ZXItc3Bh
Y2luZywgdGhlbgotICAgICAgICAgICAgLy8ganVzdCBzdWJ0cmFjdCB0aGF0IGRpZmYuCi0gICAg
ICAgICAgICBpbnQgZGlmZiA9IGN1cnJlbnRBZHZhbmNlIC0gc3BhY2VXaWR0aFdpdGhvdXRMZXR0
ZXJTcGFjaW5nOwotICAgICAgICAgICAgLy8gVGhlIHNoYXBpbmcgY2FuIGNvbnNpc3Qgb2YgYSBy
dW4gb2YgdGV4dCwgc28gb25seSBzdWJ0cmFjdCB0aGUKLSAgICAgICAgICAgIC8vIGRpZmZlcmVu
Y2UgaW4gdGhlIHdpZHRoIG9mIHRoZSBnbHlwaC4KLSAgICAgICAgICAgIHNoYXBpbmcubV9hZHZh
bmNlW2dseXBoSW5kZXhdIC09IGRpZmY7Ci0gICAgICAgICAgICBzaGFwaW5nLm1fYWJjLmFiY0Ig
LT0gZGlmZjsKKyAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoYykpIHsKKyAgICAg
ICAgICAgICAgICAvLyBjdXJyZW50QWR2YW5jZSBkb2VzIG5vdCBpbmNsdWRlIGFkZGl0aW9uYWwg
bGV0dGVyLXNwYWNpbmcsCisgICAgICAgICAgICAgICAgLy8gYnV0IHNwYWNlX3dpZHRoIGRvZXMu
IEhlcmUgd2UgZmluZCBvdXQgaG93IG9mZiB3ZSBhcmUgZnJvbQorICAgICAgICAgICAgICAgIC8v
IHRoZSBjb3JyZWN0IHdpZHRoIGZvciB0aGUgc3BhY2Ugbm90IGluY2x1ZGluZyBsZXR0ZXItc3Bh
Y2luZywKKyAgICAgICAgICAgICAgICAvLyAgdGhlbiBqdXN0IHN1YnRyYWN0IHRoYXQgZGlmZi4K
KyAgICAgICAgICAgICAgICBpbnQgZGlmZiA9IGN1cnJlbnRBZHZhbmNlIC0gc3BhY2VXaWR0aFdp
dGhvdXRMZXR0ZXJTcGFjaW5nOworICAgICAgICAgICAgICAgIC8vIFRoZSBzaGFwaW5nIGNhbiBj
b25zaXN0IG9mIGEgcnVuIG9mIHRleHQsIHNvIG9ubHkgc3VidHJhY3QKKyAgICAgICAgICAgICAg
ICAvLyB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgd2lkdGggb2YgdGhlIGdseXBoLgorICAgICAgICAg
ICAgICAgIHNoYXBpbmcubV9hZHZhbmNlW2dseXBoSW5kZXhdIC09IGRpZmY7CisgICAgICAgICAg
ICAgICAgc2hhcGluZy5tX2FiYy5hYmNCIC09IGRpZmY7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZvciBjaGFyYWN0ZXJzIHRvIHRy
ZWF0IGFzIHplcm8td2lkdGggc3BhY2UgaW4gY29tcGxleAorICAgICAgICAgICAgLy8gc2NyaXB0
cywgc2V0IHRoZSBhZHZhbmNlIHdpZHRoIHRvIHplcm8sIGFkanVzdAorICAgICAgICAgICAgLy8g
fGFiY0J8IG9mIHRoZSBjdXJyZW50IHJ1biBhY2NvcmRpbmdseSBhbmQgc2V0IAorICAgICAgICAg
ICAgLy8gdGhlIGdseXBoIHRvIG1fc3BhY2VHbHlwaCAoaW52aXNpYmxlKS4KKyAgICAgICAgICAg
IHNoYXBpbmcubV9hZHZhbmNlW2dseXBoSW5kZXhdID0gMDsKKyAgICAgICAgICAgIHNoYXBpbmcu
bV9hYmMuYWJjQiAtPSBjdXJyZW50QWR2YW5jZTsKKyAgICAgICAgICAgIHNoYXBpbmcubV9vZmZz
ZXRzW2dseXBoSW5kZXhdLmR1ID0gMDsKKyAgICAgICAgICAgIHNoYXBpbmcubV9vZmZzZXRzW2ds
eXBoSW5kZXhdLmR2ID0gMDsKKyAgICAgICAgICAgIHNoYXBpbmcubV9nbHlwaHNbZ2x5cGhJbmRl
eF0gPSBzaGFwaW5nLm1fc3BhY2VHbHlwaDsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTg3Miw3
ICs4NjUsNyBAQCB2b2lkIFVuaXNjcmliZUhlbHBlcjo6YXBwbHlTcGFjaW5nKCkKICAgICAgICAg
Ly8gZXh0cmEgd29yZHNwYWNpbmcgYW1vdW50IGZvciB0aGUgZ2x5cGhzIHRoZXkgY29ycmVzcG9u
ZCB0by4KICAgICAgICAgaWYgKG1fd29yZFNwYWNpbmcgIT0gMCkgewogICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaGFwaW5nLmNoYXJMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCF0cmVhdEFzU3BhY2UobV9pbnB1dFttX3J1bnNbcnVuXS5pQ2hhclBvcyArIGld
KSkKKyAgICAgICAgICAgICAgICBpZiAoIUZvbnQ6OnRyZWF0QXNTcGFjZShtX2lucHV0W21fcnVu
c1tydW5dLmlDaGFyUG9zICsgaV0pKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgICAgIC8vIFRoZSBjaGFyIGluIHF1ZXN0aW9uIGlzIGEgd29yZCBzZXBhcmF0
b3IuLi4KQEAgLTkyOSw0ICs5MjIsMzEgQEAgaW50IFVuaXNjcmliZUhlbHBlcjo6YWR2YW5jZUZv
ckl0ZW0oaW50CiAgICAgcmV0dXJuIHNoYXBpbmcubV9wcmVQYWRkaW5nICsganVzdGlmaWNhdGlv
bjsKIH0KIAorLy8gU0NSSVBUX0ZPTlRQUk9QRVJUSUVTIGNvbnRhaW5zIGdseXBoIGluZGljZXMg
Zm9yIGRlZmF1bHQsIGludmFsaWQKKy8vIGFuZCBibGFuayBnbHlwaHMuIEp1c3QgYmVjYXVzZSBT
Y3JpcHRTaGFwZSBzdWNjZWVkcyBkb2VzIG5vdCBtZWFuCisvLyB0aGF0IGEgdGV4dCBydW4gaXMg
cmVuZGVyZWQgY29ycmVjdGx5LiBTb21lIGNoYXJhY3RlcnMgbWF5IGJlIHJlbmRlcmVkCisvLyB3
aXRoIGRlZmF1bHQvaW52YWxpZC9ibGFuayBnbHlwaHMuIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBj
aGVjayBpZiB0aGUgZ2x5cGgKKy8vIGFycmF5IHJldHVybmVkIGJ5IFNjcmlwdFNoYXBlIGNvbnRh
aW5zIGFueSBvZiB0aG9zZSBnbHlwaHMgdG8gbWFrZQorLy8gc3VyZSB0aGF0IHRoZSB0ZXh0IHJ1
biBpcyByZW5kZXJlZCBzdWNjZXNzZnVsbHkuCisvLyBIb3dldmVyLCB3ZSBzaG91bGQgbm90IHN1
YmplY3QgemVyby13aWR0aCBjaGFyYWN0ZXJzIHRvIHRoaXMgdGVzdC4KKworYm9vbCBVbmlzY3Jp
YmVIZWxwZXI6OmNvbnRhaW5zTWlzc2luZ0dseXBocyhjb25zdCBTaGFwaW5nJiBzaGFwaW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTQ1JJUFRf
SVRFTSYgcnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIHByb3BlcnRpZXMpIGNvbnN0Cit7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaGFwaW5nLmNoYXJMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFVD
aGFyIGMgPSBtX2lucHV0W3J1bi5pQ2hhclBvcyArIGldOworICAgICAgICAvLyBkbyBub3QgY2Fy
ZSBpZiBhIGNoYXJhY3RlciBpcyB6ZXJvLXdpZHRoIGludmlzaWJsZSBjaGFyYWN0ZXIuCisgICAg
ICAgIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoYykpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaW50IGdseXBoSW5kZXggPSBzaGFwaW5nLm1f
bG9nc1tpXTsKKyAgICAgICAgV09SRCBnbHlwaCA9IHNoYXBpbmcubV9nbHlwaHNbZ2x5cGhJbmRl
eF07CisgICAgICAgIGlmIChnbHlwaCA9PSBwcm9wZXJ0aWVzLT53Z0RlZmF1bHQKKyAgICAgICAg
ICAgIHx8IChnbHlwaCA9PSBwcm9wZXJ0aWVzLT53Z0ludmFsaWQgJiYgZ2x5cGggIT0gcHJvcGVy
dGllcy0+d2dCbGFuaykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Vbmlz
Y3JpYmVIZWxwZXIuaAkocmV2aXNpb24gODQwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NzYsNyArNzYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNSdGwsCiAg
ICAgICAgICAgICAgICAgICAgIEhGT05ULAogICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfQ0FD
SEUqLAotICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqKTsKKyAgICAg
ICAgICAgICAgICAgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiwKKyAgICAgICAgICAgICAgICAg
ICAgV09SRCk7CiAKICAgICB2aXJ0dWFsIH5VbmlzY3JpYmVIZWxwZXIoKTsKIApAQCAtMjI1LDcg
KzIyNiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICA6IG1fcHJlUGFkZGluZygwKQogICAgICAg
ICAgICAgLCBtX2hmb250KE5VTEwpCiAgICAgICAgICAgICAsIG1fc2NyaXB0Q2FjaGUoTlVMTCkK
LSAgICAgICAgICAgICwgbV9hc2NlbnRPZmZzZXQoMCkgeworICAgICAgICAgICAgLCBtX2FzY2Vu
dE9mZnNldCgwKQorICAgICAgICAgICAgLCBtX3NwYWNlR2x5cGgoMCkKKyAgICAgICAgewogICAg
ICAgICAgICAgbV9hYmMuYWJjQSA9IDA7CiAgICAgICAgICAgICBtX2FiYy5hYmNCID0gMDsKICAg
ICAgICAgICAgIG1fYWJjLmFiY0MgPSAwOwpAQCAtMzE5LDYgKzMyMiw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIHdoZW4gZHJhd2luZyBhIHN0cmluZywgdG8gYWxpZ24gbXVsdGlwbGUgcnVucyBy
ZW5kZXJlZCB3aXRoCiAgICAgICAgIC8vIGRpZmZlcmVudCBmb250cy4KICAgICAgICAgaW50IG1f
YXNjZW50T2Zmc2V0OworCisgICAgICAgIFdPUkQgbV9zcGFjZUdseXBoOwogICAgIH07CiAKICAg
ICAvLyBDb21wdXRlcyB0aGUgcnVuc18gYXJyYXkgZnJvbSB0aGUgdGV4dCBydW4uCkBAIC0zNDMs
NiArMzQ4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gUmV0dXJucyB0aGUgdG90YWwgd2lkdGggb2Yg
YSBzaW5nbGUgaXRlbS4KICAgICBpbnQgYWR2YW5jZUZvckl0ZW0oaW50KSBjb25zdDsKIAorICAg
IGJvb2wgY29udGFpbnNNaXNzaW5nR2x5cGhzKGNvbnN0IFNoYXBpbmcmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFNDUklQVF9JVEVNJiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqKSBjb25zdDsKKwogICAg
IC8vIFNoYXBlcyBhIHJ1biAocG9pbnRlZCB0byBieSB8aW5wdXR8KSB1c2luZyB8aGZvbnR8IGZp
cnN0LgogICAgIC8vIFRyaWVzIGEgc2VyaWVzIG9mIGZvbnRzIHNwZWNpZmllZCByZXRyaWV2ZWQg
d2l0aCBOZXh0V2luRm9udERhdGEKICAgICAvLyBhbmQgZmluYWxseSBhIGZvbnQgY292ZXJpbmcg
Y2hhcmFjdGVycyBpbiB8KmlucHV0fC4gQSBzdHJpbmcgcG9pbnRlZApAQCAtMzg0LDYgKzM5Myw3
IEBAIHByaXZhdGU6CiAgICAgaW50IG1fYXNjZW50OwogICAgIExPR0ZPTlQgbV9sb2dmb250Owog
ICAgIGludCBtX3N0eWxlOworICAgIFdPUkQgbV9zcGFjZUdseXBoOwogCiAgICAgLy8gT3B0aW9u
cywgc2VlIHRoZSBnZXR0ZXJzL3NldHRlcnMgYWJvdmUuCiAgICAgYm9vbCBtX2RpcmVjdGlvbmFs
T3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmNwcAko
cmV2aXNpb24gODQwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsOCBAQCBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuOjpVbmlzY3JpYmVIZWxwZXJUCiAgICAgOiBV
bmlzY3JpYmVIZWxwZXIocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCBydW4ucnRsKCks
CiAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEo
KS5oZm9udCgpLAogICAgICAgICAgICAgICAgICAgICAgIGZvbnQucHJpbWFyeUZvbnQoKS0+cGxh
dGZvcm1EYXRhKCkuc2NyaXB0Q2FjaGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBmb250LnBy
aW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLnNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgZm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zY3Jp
cHRGb250UHJvcGVydGllcygpLAorICAgICAgICAgICAgICAgICAgICAgIGZvbnQucHJpbWFyeUZv
bnQoKS0+c3BhY2VHbHlwaCgpKQogICAgICwgbV9mb250KCZmb250KQogICAgICwgbV9mb250SW5k
ZXgoMCkKIHsKQEAgLTY5LDcgKzcwLDcgQEAgVW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6VW5pc2Ny
aWJlSGVscGVyVAogICAgIFNDUklQVF9DQUNIRSogc2NyaXB0Q2FjaGUsCiAgICAgU0NSSVBUX0ZP
TlRQUk9QRVJUSUVTKiBmb250UHJvcGVydGllcykKICAgICA6IFVuaXNjcmliZUhlbHBlcihpbnB1
dCwgaW5wdXRMZW5ndGgsIGlzUnRsLCBoZm9udCwKLSAgICAgICAgICAgICAgICAgICAgICBzY3Jp
cHRDYWNoZSwgZm9udFByb3BlcnRpZXMpCisgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q2Fj
aGUsIGZvbnRQcm9wZXJ0aWVzLCAwKQogICAgICwgbV9mb250KDApCiAgICAgLCBtX2ZvbnRJbmRl
eCgtMSkKIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MTAwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDQtMTcgIEp1bmdzaGlr
IFNoaW4gIDxqc2hpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgY29tcGxleC1zY3JpcHQgdmVyc2lvbiBvZiB6ZXJv
LXdpZHRoLWNoYXJhY3RlcnMuaHRtbC4KKyAgICAgICAgYW5kIGFkZCBVK0ZFRkYgdG8gemVyby13
aWR0aC1jaGFyYWN0ZXJzLmh0bWwgCisgICAgICAgIENocm9taXVtIExpbnV4IGZhaWxzIHRoZSB0
ZXN0IGJlY2F1c2UgVStGRUZGIGlzIHJlbmRlcmVkCisgICAgICAgIHdpdGggYSBub24temVybyB3
aWR0aCBnbHlwaC4KKyAgICAgICAgRmlsZWQgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTg3NDEgYW5kIG5vdGVkCisgICAgICAgIGFzIHN1Y2ggaW4gdGVzdF9leHBlY3Rh
dGlvbi50eHQuCisgICAgICAgIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDg4NjAKKworICAgICAgICAqIGZhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJh
Y3RlcnMtY29tcGxleC1zY3JpcHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L3RleHQvemVyby13aWR0aC1jaGFyYWN0ZXJzLWNvbXBsZXgtc2NyaXB0Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMuaHRtbDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTEtMDQtMTYg
IERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGVkIHJlc3Vs
dHMgZm9yIGZhc3QvYmxvY2svZmxvYXQvMDMyLmh0bWwgYWZ0ZXIgcjg0MDk2LiBGaWxlZCBodHRw
Oi8vd2Via2l0Lm9yZy9iLzU4NzM2IHRvCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvemVy
by13aWR0aC1jaGFyYWN0ZXJzLWNvbXBsZXgtc2NyaXB0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3RleHQvemVyby13aWR0aC1jaGFyYWN0ZXJzLWNvbXBsZXgt
c2NyaXB0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvdGV4
dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMtY29tcGxleC1zY3JpcHQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgdGVzdCBjaGVja3MgdmFyaW91cyBjaGFyYWN0
ZXJzIHRoYXQgc2hvdWxkIGFsd2F5cyBiZSB6ZXJvIHdpZHRoIHRvIGVuc3VyZSB0aGF0IHRoZXkg
YXJlIHdoZW4gZW5jbG9zZWQgYnkgY29tcGxleCBzY3JpcHQgY2hhcmFjdGVycy4gVGhlIFdlYktp
dCB0ZXh0IHN5c3RlbSBlbnN1cmVzIHRoaXMgaW4gYSB3YXkgdGhhdCdzIGluZGVwZW5kZW50IG9m
IHRoZSBmb250cyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KKworUEFTUzogQWxsIGNoYXJhY3Rl
cnMgaGFkIHplcm8td2lkdGguCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvemVyby13aWR0
aC1jaGFyYWN0ZXJzLWNvbXBsZXgtc2NyaXB0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC90ZXh0L3plcm8td2lkdGgtY2hhcmFjdGVycy1jb21wbGV4LXNjcmlwdC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3plcm8td2lkdGgtY2hhcmFjdGVy
cy1jb21wbGV4LXNjcmlwdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACis8aGVh
ZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHRlc3RDaGFyKGNoKQoreworICAgIHZhciBhID0gIlx1
MDkxNVx1MDkzRSIKKyAgICB2YXIgYiA9ICJcdTA5MTYiOworICAgIHZhciBzcGFuID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNoYXJhY3RlcnMiKTsKKyAgICBzcGFuLmZpcnN0Q2hpbGQuZGF0
YSA9IGEgKyBiOworICAgIHZhciBhYldpZHRoID0gc3Bhbi5vZmZzZXRXaWR0aDsKKyAgICBzcGFu
LmZpcnN0Q2hpbGQuZGF0YSA9IGE7CisgICAgdmFyIGFXaWR0aCA9IHNwYW4ub2Zmc2V0V2lkdGg7
CisgICAgc3Bhbi5maXJzdENoaWxkLmRhdGEgPSBhICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaCkg
KyBiOworICAgIHZhciBhYldpdGhDaFdpZHRoID0gc3Bhbi5vZmZzZXRXaWR0aDsKKworICAgIGlm
IChhYldpdGhDaFdpZHRoID4gYWJXaWR0aCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZSBp
ZiAoYWJXaWR0aCA+IGFXaWR0aCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gMTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgIHZhciBmYWlsZWRDb3VudCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDE7IGkgPCAz
MjsgKytpKSAvLyA+CisgICAgICBpZiAoaSAhPSA5ICYmIGkgIT0gMTAgJiYgaSAhPSAxMykgLy8g
OworICAgICAgICBmYWlsZWRDb3VudCArPSB0ZXN0Q2hhcihpKTsKKyAgICAvLyBaV0ogKFUrMjAw
QykgYW5kIFpXTkogKFUrMjAwRCkgYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgdGhleQorICAgIC8vIGNh
biBhZmZlY3QgdGhlIHJlbmRlcmluZyBpbiBjb21wbGV4IHNjcmlwdCB0ZXh0LgorICAgIGZhaWxl
ZENvdW50ICs9IHRlc3RDaGFyKDB4MjAwQik7CisgICAgZmFpbGVkQ291bnQgKz0gdGVzdENoYXIo
MHgyMDBFKTsKKyAgICBmYWlsZWRDb3VudCArPSB0ZXN0Q2hhcigweDIwMEYpOworICAgIGZhaWxl
ZENvdW50ICs9IHRlc3RDaGFyKDB4RkVGRik7CisgICAgZmFpbGVkQ291bnQgKz0gdGVzdENoYXIo
MHhGRkZDKTsKKworICAgIHZhciB0ZXN0QXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0QXJlYSIpOworICAgIHRlc3RBcmVhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVzdEFyZWEp
OworCisgICAgaWYgKGZhaWxlZENvdW50ID4gMCkgCisgICAgICAgIHJlc3VsdCA9ICJGQUlMOiAi
ICsgZmFpbGVkQ291bnQgKyAiIGNoYXJhY3RlcnMgaGFkIG5vbi16ZXJvIHdpZHRoIiArCisgICAg
ICAgICAgICAgICAgICIgb3IgZmFpbGVkIHRvIGdldCBtZWFzdXJlZC4iOworICAgIGVsc2UKKyAg
ICAgICAgcmVzdWx0ID0gIlBBU1M6IEFsbCBjaGFyYWN0ZXJzIGhhZCB6ZXJvLXdpZHRoLiI7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmZpcnN0Q2hpbGQuZGF0YSA9IHJl
c3VsdDsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+
VGhpcyB0ZXN0IGNoZWNrcyB2YXJpb3VzIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYWx3YXlzIGJl
IHplcm8gd2lkdGggdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgd2hlbiBlbmNsb3NlZCBieSBjb21w
bGV4IHNjcmlwdCBjaGFyYWN0ZXJzLgorVGhlIFdlYktpdCB0ZXh0IHN5c3RlbSBlbnN1cmVzIHRo
aXMgaW4gYSB3YXkgdGhhdCdzIGluZGVwZW5kZW50IG9mIHRoZSBmb250cyBpbnN0YWxsZWQgb24g
dGhlIHN5c3RlbS48L3A+Cis8cCBpZD0icmVzdWx0Ij5GQUlMOiBTY3JpcHQgZGlkIG5vdCBydW4g
dG8gY29tcGxldGlvbi48L3A+Cis8cCBpZD0idGVzdEFyZWEiPjxzcGFuIGlkPSJjaGFyYWN0ZXJz
Ij4mI3gwOTE1OyYjeDA5M0U7JiN4MDkxNjs8L3NwYW4+PC9wPgorPC9ib2R5PgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC90ZXh0L3plcm8td2lkdGgtY2hhcmFjdGVycy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMuaHRtbAkocmV2
aXNpb24gODQwOTkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvemVyby13aWR0aC1jaGFyYWN0
ZXJzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDcgQEAgZnVuY3Rpb24gdGVzdCgp
CiAgICAgdGVzdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjAwRCk7CiAgICAgdGVz
dFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjAwRSk7CiAgICAgdGVzdFN0cmluZyAr
PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjAwRik7CisgICAgdGVzdFN0cmluZyArPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKDB4RkVGRik7CiAgICAgdGVzdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJD
b2RlKDB4RkZGQyk7CiAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hh
cmFjdGVycyIpOwogICAgIHZhciBhYldpZHRoID0gc3Bhbi5vZmZzZXRXaWR0aDsKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQJKHJldmlzaW9uIDg0MDk5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNTM0LDQgKzM1MzQsNSBAQCBC
VUdNT1JSSVRBIDogZmFzdC9odG1sL2RldGFpbHMtcmVtb3ZlLXN1CiBCVUdNT1JSSVRBIDogZmFz
dC9odG1sL2RldGFpbHMtd3JpdGluZy1tb2RlLmh0bWwgPSBGQUlMCiAKIEJVR1dLNTg2MTkgR1BV
IExJTlVYIFdJTiA6IG1lZGlhL3ZpZGVvLXZvbHVtZS1zbGlkZXIuaHRtbCA9IElNQUdFCitCVUdX
SzU4NzQxIExJTlVYIDogZmFzdC90ZXh0L3plcm8td2lkdGgtY2hhcmFjdGVycy1jb21wbGV4LXNj
cmlwdC5odG1sID0gRkFJTAogCg==
</data>
<flag name="review"
          id="82770"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90154</attachid>
            <date>2011-04-18 23:45:59 -0700</date>
            <delta_ts>2011-04-19 06:33:14 -0700</delta_ts>
            <desc>updated patch addressing Levin&apos;s comment</desc>
            <filename>48860.patch.2d</filename>
            <type>text/plain</type>
            <size>26987</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODQxMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDQtMTcgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFUrRkVGRiAoWmVy
byB3aWR0aCBuby1icmVhayBzcGFjZSkgdG8gQ2hhcmFjdGVyTmFtZXMuaC4KKyAgICAgICAgSXQn
cyBhZGRlZCB0byB0aGUgbGlzdCBvZiBjaGFyYWN0ZXJzIHRvIHRyZWF0IGFzIHplcm8td2lkdGgK
KyAgICAgICAgaW4gV2ViQ29yZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDg4NjAKKworICAgICAgICAqIHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg6CisKIDIwMTEtMDQtMTYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAkocmV2aXNp
b24gODQwOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBjb25zdCBVQ2hhciB5ZW5T
aWduID0gMHgwMEE1OwogY29uc3QgVUNoYXIgemVyb1dpZHRoSm9pbmVyID0gMHgyMDBEOwogY29u
c3QgVUNoYXIgemVyb1dpZHRoTm9uSm9pbmVyID0gMHgyMDBDOwogY29uc3QgVUNoYXIgemVyb1dp
ZHRoU3BhY2UgPSAweDIwMEI7Citjb25zdCBVQ2hhciB6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgPSAw
eEZFRkY7CiAKIH0gLy8gbmFtZXNwYWNlIFVuaWNvZGUKIH0gLy8gbmFtZXNwYWNlIFdURgpAQCAt
MTM4LDUgKzEzOSw2IEBAIHVzaW5nIFdURjo6VW5pY29kZTo6eWVuU2lnbjsKIHVzaW5nIFdURjo6
VW5pY29kZTo6emVyb1dpZHRoSm9pbmVyOwogdXNpbmcgV1RGOjpVbmljb2RlOjp6ZXJvV2lkdGhO
b25Kb2luZXI7CiB1c2luZyBXVEY6OlVuaWNvZGU6Onplcm9XaWR0aFNwYWNlOwordXNpbmcgV1RG
OjpVbmljb2RlOjp6ZXJvV2lkdGhOb0JyZWFrU3BhY2U7CiAKICNlbmRpZiAvLyBDaGFyYWN0ZXJO
YW1lc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDEwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDExLTA0LTE3ICBK
dW5nc2hpayBTaGluICA8anNoaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgVStGRUZGIGJlIHRyZWF0ZWQgYXMgYSB6
ZXJvLXdpZHRoIGNoYXJhY3RlciBpbiBib3RoCisgICAgICAgIHNpbXBsZSBzY3JpcHQgYW5kIGNv
bXBsZXggc2NyaXB0IGNvZGUgcGF0aHMuIEluIENocm9taXVtCisgICAgICAgIFdpbmRvd3MsIFVu
aXNjcmliZUhlbHBlciBuZWVkcyBhIHJhdGhlciBleHRlbnNpdmUgY2hhbmdlcworICAgICAgICBz
dW1tYXJpemVkIGJlbG93LiAgT3RoZXIgcG9ydHMgbmVlZCBtaW5vciBjaGFuZ2VzLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODg2MAorCisgICAg
ICAgIFRlc3Q6IGZhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMtY29tcGxleC1zY3JpcHQu
aHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKTogVStGRUZGIGlzIGFkZGVkIHRvIHRo
ZSBsaXN0CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNv
bXBsZXhTY3JpcHQpOiBBZGRlZC4gU2FtZSBhcyB0aGUgYWJvdmUgZXhjZXB0IHRoYXQgWldOSiBh
bmQgWldKIGFyZSBleGNsdWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBh
Z2VUcmVlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6aW5p
dGlhbGl6ZVBhZ2UpOiBVK0ZFRkYgaXMgbWFkZSB0byBoYXZlIHplcm8td2lkdGggY2hhcmFjdGVy
cyBpbiBzaW1wbGUgc2NyaXB0IChmYXN0KSBjb2RlIHBhdGguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udE1hcDo6Z2V0U3BhY2VHbHlwaCk6IEFkZGVkIHRvIGdldCB0aGUgZ2lkIGZvciBz
cGFjZSBnbHlwaCB0byB1c2UgaW4gYWRqdXN0U3BhY2VBZHZhbmNlIHdoZW4gemVyby13aWR0aCBn
bHlwaCBjaGFyYWN0ZXIgaGFzIGEgbm9uLXplcm8gd2lkdGggYW5kIHBvdGVudGlhbGx5ICd2aXNp
YmxlJyBnbHlwaC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRNYXA6OkZvbnREYXRhOjpGb250RGF0
YSk6IHNwYWNlR2x5cGggbWVtYmVyIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVyaXZl
ZEZvbnREYXRhKTogc3BhY2VHbHlwaCBpcyByZXRyaWV2ZWQgYXMgd2VsbC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXI6OlVuaXNjcmliZUhlbHBlcik6IG1fc3BhY2VH
bHlwaCBhZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZUhlbHBlcjo6c2hhcGUpOiBz
cGFjZUdseXBoIGlzIG9idGFpbmVkIHN0b3JlZCBmb3IgYSBmb250IHRyaWVkIGZvciBlYWNoIGl0
ZW0uCisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXI6OmFkanVzdFNwYWNlQWR2YW5j
ZXMpOiBGb3IgemVyby13aWR0aCBjb21wbGV4IHNjcmlwdCBjaGFyYWN0ZXJzLCBzZXQgdGhlIGFk
dmFuY2Ugd2lkdGggdG8gemVybyBhbmQgcmVwbGFjZSBhIG5vbi16ZXJvLXdpZHRoL3Zpc2libGUg
Z2x5cGggd2l0aCBhIHNwYWNlIGdseXBoLgorICAgICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVs
cGVyOjphcHBseVNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVscGVyOjpj
b250YWluc01pc3NpbmdHbHlwaHMpOiB0dXJuZWQgdG8gYSBtZW1iZXIgZnVuY3Rpb24gYmVjYXVz
ZSBpdCBjYW5ub3Qgd29yayBvbiBnbHlwaHMgYWxvbmUgYW55IG1vcmUgYnV0IG5lZWQgdG8gdGFr
ZSBpbnRvIGFjY291bnQgYSBjaGFyYWN0ZXIgY29ycmVzcG9uZGluZyB0byBhIGdseXBoCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmg6IAorICAg
ICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVscGVyOjpTaGFwaW5nOjpTaGFwaW5nKTogbV9zcGFj
ZUdseXBoIGlzIGFkZGVkCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5p
c2NyaWJlSGVscGVyVGV4dFJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxw
ZXJUZXh0UnVuOjpVbmlzY3JpYmVIZWxwZXJUZXh0UnVuKTogV2hlbiBjYWxsaW5nIFVuaXNjcmli
ZXJIZWxwZXIsIGFkZCBhIG5ldyBhcmd1bWVudCBmb3Igc3BhY2VHbHlwaC4KKwogMjAxMS0wNC0x
NiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CShyZXZpc2lvbiA4NDA5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw4IEBAIHB1YmxpYzoKIAogICAgIEZv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgdHJlYXRB
c1NwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdc
bicgfHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KLSAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dp
ZHRoU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwg
MHhBMCkgfHwgYyA9PSBzb2Z0SHlwaGVuIHx8IChjID49IDB4MjAwYyAmJiBjIDw9IDB4MjAwZikg
fHwgKGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IG9iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVyOyB9CisgICAgc3RhdGljIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlKFVDaGFy
IGMpIHsgcmV0dXJuIHRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjKSB8fCBj
ID09IDB4MjAwYyB8fCBjID09IDB4MjAwZDsgfQorICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJv
V2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVybiBjIDwgMHgyMCB8fCAo
YyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4gfHwgKGMgPj0gMHgyMDBl
ICYmIGMgPD0gMHgyMDBmKSB8fCAoYyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmUpIHx8IGMgPT0g
emVyb1dpZHRoTm9CcmVha1NwYWNlIHx8IGMgPT0gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7
IH0KICAgICBzdGF0aWMgYm9vbCBjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYyk7CiAK
ICAgICBzdGF0aWMgaW5saW5lIFVDaGFyIG5vcm1hbGl6ZVNwYWNlcyhVQ2hhciBjaGFyYWN0ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhQYWdlVHJlZU5vZGUuY3BwCShyZXZpc2lvbiA4NDA5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkxLDYgKzE5MSw5IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGMK
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIE9iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgbXVzdCBub3QgcmVuZGVyIGF0IGFsbC4K
ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW29iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyIC0g
c3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFy
dCA9PSAoemVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gWldOQlMvQk9NIG11c3Qgbm90IHJlbmRlciBhdCBhbGwu
CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclt6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZSAqIDI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRp
bHNDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA4NDA5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGls
c0Nocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDE3ICsyNTAsMzEgQEAgaW50
IGdldEFzY2VudChIRk9OVCBoZm9udCkKICAgICByZXR1cm4gZ290TWV0cmljcyA/IHRtLnRtQXNj
ZW50IDoga1VuZGVmaW5lZEFzY2VudDsKIH0KIAorV09SRCBnZXRTcGFjZUdseXBoKEhGT05UIGhm
b250KSAKK3sKKyAgICBIREMgZGMgPSBHZXREQygwKTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBT
ZWxlY3RPYmplY3QoZGMsIGhmb250KTsKKyAgICBXQ0hBUiBzcGFjZSA9IEwnICc7CisgICAgV09S
RCBzcGFjZUdseXBoID0gMDsKKyAgICBHZXRHbHlwaEluZGljZXMoZGMsICZzcGFjZSwgMSwgJnNw
YWNlR2x5cGgsIDApOworICAgIFNlbGVjdE9iamVjdChkYywgb2xkRm9udCk7CisgICAgUmVsZWFz
ZURDKDAsIGRjKTsKKyAgICByZXR1cm4gc3BhY2VHbHlwaDsKK30KKwogc3RydWN0IEZvbnREYXRh
IHsKICAgICBGb250RGF0YSgpCiAgICAgICAgIDogaGZvbnQoMCkKICAgICAgICAgLCBhc2NlbnQo
a1VuZGVmaW5lZEFzY2VudCkKICAgICAgICAgLCBzY3JpcHRDYWNoZSgwKQorICAgICAgICAsIHNw
YWNlR2x5cGgoMCkKICAgICB7CiAgICAgfQogCiAgICAgSEZPTlQgaGZvbnQ7CiAgICAgaW50IGFz
Y2VudDsKICAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBzY3JpcHRDYWNoZTsKKyAgICBXT1JEIHNw
YWNlR2x5cGg7CiB9OwogCiAvLyBBZ2FpbiwgdXNpbmcgaGFzaF9tYXAgZG9lcyBub3QgZWFybiB1
cyBtdWNoIGhlcmUuICBwYWdlX2N5Y2xlcl90ZXN0IGludGwyCkBAIC0zNzksNyArMzkzLDggQEAg
Ym9vbCBnZXREZXJpdmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbQogICAgICAgICAgICAgICAg
ICAgICAgICAgTE9HRk9OVCogbG9nZm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCog
YXNjZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgSEZPTlQqIGhmb250LAotICAgICAgICAg
ICAgICAgICAgICAgICAgU0NSSVBUX0NBQ0hFKiogc2NyaXB0Q2FjaGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1JJUFRfQ0FDSEUqKiBzY3JpcHRDYWNoZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFdPUkQqIHNwYWNlR2x5cGgpCiB7CiAgICAgQVNTRVJUKGxvZ2ZvbnQpOwogICAgIEFT
U0VSVChmYW1pbHkpOwpAQCAtNDA4LDYgKzQyMyw3IEBAIGJvb2wgZ2V0RGVyaXZlZEZvbnREYXRh
KGNvbnN0IFVDaGFyKiBmYW0KICAgICAgICAgLy8gY2FjaGUgaXQgc28gdGhhdCB3ZSB3b24ndCBo
YXZlIHRvIGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0IG9uY2UKICAgICAgICAgLy8gbW9yZSBmb3Ig
SEZPTlQgbmV4dCB0aW1lLgogICAgICAgICBkZXJpdmVkLT5hc2NlbnQgPSBnZXRBc2NlbnQoZGVy
aXZlZC0+aGZvbnQpOworICAgICAgICBkZXJpdmVkLT5zcGFjZUdseXBoID0gZ2V0U3BhY2VHbHlw
aChkZXJpdmVkLT5oZm9udCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZGVyaXZlZCA9ICZpdGVy
LT5zZWNvbmQ7CiAgICAgICAgIC8vIExhc3QgdGltZSwgR2V0QXNjZW50IGZhaWxlZCBzbyB0aGF0
IG9ubHkgSEZPTlQgd2FzCkBAIC00MTksNiArNDM1LDcgQEAgYm9vbCBnZXREZXJpdmVkRm9udERh
dGEoY29uc3QgVUNoYXIqIGZhbQogICAgICpoZm9udCA9IGRlcml2ZWQtPmhmb250OwogICAgICph
c2NlbnQgPSBkZXJpdmVkLT5hc2NlbnQ7CiAgICAgKnNjcmlwdENhY2hlID0gJihkZXJpdmVkLT5z
Y3JpcHRDYWNoZSk7CisgICAgKnNwYWNlR2x5cGggPSBkZXJpdmVkLT5zcGFjZUdseXBoOwogICAg
IHJldHVybiAqYXNjZW50ICE9IGtVbmRlZmluZWRBc2NlbnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFV0aWxzQ2hyb21pdW1XaW4uaAkocmV2aXNpb24gODQwOTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIGNvbnN0IFVDaGFyKiBnZXRGYWxsYmFja0ZhbWls
eShjb25zdCBVQ2gKIC8vIGludGwyIHBhZ2UtY3ljbGVyIHRlc3QgaXMgbm90aWNlYWJseSBzbG93
ZXIgd2l0aCBvbmUgb3V0IHBhcmFtIHRoYW4KIC8vIHRoZSBjdXJyZW50IHZlcnNpb24gYWx0aG91
Z2ggdGhlIHN1YnNlcXVlbnQgOSBwYXNzZXMgdGFrZSBhYm91dCB0aGUKIC8vIHNhbWUgdGltZS4K
LWJvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksIGludCBzdHlsZSwg
TE9HRk9OVCosIGludCogYXNjZW50LCBIRk9OVCosIFNDUklQVF9DQUNIRSoqKTsKK2Jvb2wgZ2V0
RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksIGludCBzdHlsZSwgTE9HRk9OVCos
IGludCogYXNjZW50LCBIRk9OVCosIFNDUklQVF9DQUNIRSoqLCBXT1JEKiBzcGFjZUdseXBoKTsK
IAogZW51bSB7CiAgICAgRm9udFN0eWxlTm9ybWFsID0gMCwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJl
SGVscGVyLmNwcAkocmV2aXNpb24gODQwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw0NSArMzEsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVbmlzY3JpYmVI
ZWxwZXIuaCIKIAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQorI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJGb250VXRpbHNDaHJvbWl1bVdpbi5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dFNraWEuaCIKICNpbmNsdWRlICJTa2lhRm9udFdpbi5oIgogI2luY2x1ZGUgIlNrUG9pbnQuaCIK
KyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2VlIHdoZXJl
IHdvcmQgc3BhY2luZyBzaG91bGQgYmUgYXBwbGllZCBpbnNpZGUKLS8vIHJ1bnMuIE5vdGUgdGhh
dCB0aGlzIG11c3QgbWF0Y2ggRm9udDo6dHJlYXRBc1NwYWNlIHNvIHdlIGFsbCBhZ3JlZSB3aGVy
ZQotLy8gYW5kIGhvdyBtdWNoIHNwYWNlIHRoaXMgaXMsIHNvIHdlIGRvbid0IHdhbnQgdG8gZG8g
bW9yZSBnZW5lcmFsIFVuaWNvZGUKLS8vICJpcyB0aGlzIGEgd29yZCBicmVhayIgdGhpbmcuCi1z
dGF0aWMgYm9vbCB0cmVhdEFzU3BhY2UoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gYyA9PSAnICcg
fHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09IDB4MDBBMDsKLX0KLQotLy8gU0NSSVBU
X0ZPTlRQUk9QRVJUSUVTIGNvbnRhaW5zIGdseXBoIGluZGljZXMgZm9yIGRlZmF1bHQsIGludmFs
aWQKLS8vIGFuZCBibGFuayBnbHlwaHMuIEp1c3QgYmVjYXVzZSBTY3JpcHRTaGFwZSBzdWNjZWVk
cyBkb2VzIG5vdCBtZWFuCi0vLyB0aGF0IGEgdGV4dCBydW4gaXMgcmVuZGVyZWQgY29ycmVjdGx5
LiBTb21lIGNoYXJhY3RlcnMgbWF5IGJlIHJlbmRlcmVkCi0vLyB3aXRoIGRlZmF1bHQvaW52YWxp
ZC9ibGFuayBnbHlwaHMuIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZ2x5cGgK
LS8vIGFycmF5IHJldHVybmVkIGJ5IFNjcmlwdFNoYXBlIGNvbnRhaW5zIGFueSBvZiB0aG9zZSBn
bHlwaHMgdG8gbWFrZQotLy8gc3VyZSB0aGF0IHRoZSB0ZXh0IHJ1biBpcyByZW5kZXJlZCBzdWNj
ZXNzZnVsbHkuCi1zdGF0aWMgYm9vbCBjb250YWluc01pc3NpbmdHbHlwaHMoV09SRCAqZ2x5cGhz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBwcm9wZXJ0
aWVzKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
aWYgKGdseXBoc1tpXSA9PSBwcm9wZXJ0aWVzLT53Z0RlZmF1bHQKLSAgICAgICAgICAgIHx8IChn
bHlwaHNbaV0gPT0gcHJvcGVydGllcy0+d2dJbnZhbGlkCi0gICAgICAgICAgICAmJiBnbHlwaHNb
aV0gIT0gcHJvcGVydGllcy0+d2dCbGFuaykpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIC8vIEhGT05UIGlzIHRoZSAnaW5jYXJuYXRp
b24nIG9mICdldmVyeXRoaW5nJyBhYm91dCBmb250LCBidXQgaXQncyBhbiBvcGFxdWUKIC8vIGhh
bmRsZSBhbmQgd2UgY2FuJ3QgZGlyZWN0bHkgcXVlcnkgaXQgdG8gbWFrZSBhIG5ldyBIRk9OVCBz
aGFyaW5nCiAvLyBpdHMgY2hhcmFjdGVyaXN0aWNzIChoZWlnaHQsIHN0eWxlLCBldGMpIGV4Y2Vw
dCBmb3IgZmFtaWx5IG5hbWUuCkBAIC0xMDIsMTMgKzczLDE1IEBAIFVuaXNjcmliZUhlbHBlcjo6
VW5pc2NyaWJlSGVscGVyKGNvbnN0IFUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc1J0bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEZPTlQgaGZvbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQVF9DQUNIRSogc2NyaXB0Q2Fj
aGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQVF9GT05UUFJPUEVSVElF
UyogZm9udFByb3BlcnRpZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQ
VF9GT05UUFJPUEVSVElFUyogZm9udFByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdPUkQgc3BhY2VHbHlwaCkKICAgICA6IG1faW5wdXQoaW5wdXQpCiAgICAgLCBt
X2lucHV0TGVuZ3RoKGlucHV0TGVuZ3RoKQogICAgICwgbV9pc1J0bChpc1J0bCkKICAgICAsIG1f
aGZvbnQoaGZvbnQpCiAgICAgLCBtX3NjcmlwdENhY2hlKHNjcmlwdENhY2hlKQogICAgICwgbV9m
b250UHJvcGVydGllcyhmb250UHJvcGVydGllcykKKyAgICAsIG1fc3BhY2VHbHlwaChzcGFjZUds
eXBoKQogICAgICwgbV9kaXJlY3Rpb25hbE92ZXJyaWRlKGZhbHNlKQogICAgICwgbV9pbmhpYml0
TGlnYXRlKGZhbHNlKQogICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCkBAIC01NDYsNiArNTE5LDcg
QEAgYm9vbCBVbmlzY3JpYmVIZWxwZXI6OnNoYXBlKGNvbnN0IFVDaGFyKgogICAgIFNDUklQVF9D
QUNIRSogc2NyaXB0Q2FjaGUgPSBtX3NjcmlwdENhY2hlOwogICAgIFNDUklQVF9GT05UUFJPUEVS
VElFUyogZm9udFByb3BlcnRpZXMgPSBtX2ZvbnRQcm9wZXJ0aWVzOwogICAgIGludCBhc2NlbnQg
PSBtX2FzY2VudDsKKyAgICBXT1JEIHNwYWNlR2x5cGggPSBtX3NwYWNlR2x5cGg7CiAgICAgSERD
IHRlbXBEQyA9IDA7CiAgICAgSEdESU9CSiBvbGRGb250ID0gMDsKICAgICBIUkVTVUxUIGhyOwpA
QCAtNjAxLDcgKzU3NSw3IEBAIGJvb2wgVW5pc2NyaWJlSGVscGVyOjpzaGFwZShjb25zdCBVQ2hh
cioKICAgICAgICAgfSBlbHNlIGlmIChociA9PSBFX09VVE9GTUVNT1JZKSB7CiAgICAgICAgICAg
ICBudW1HbHlwaHMgKj0gMjsKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2Ug
aWYgKFNVQ0NFRURFRChocikgJiYgKGxhc3RGYWxsYmFja1RyaWVkIHx8ICFjb250YWluc01pc3Np
bmdHbHlwaHMoJnNoYXBpbmcubV9nbHlwaHNbMF0sIGdlbmVyYXRlZEdseXBocywgZm9udFByb3Bl
cnRpZXMpKSkKKyAgICAgICAgfSBlbHNlIGlmIChTVUNDRUVERUQoaHIpICYmIChsYXN0RmFsbGJh
Y2tUcmllZCB8fCAhY29udGFpbnNNaXNzaW5nR2x5cGhzKHNoYXBpbmcsIHJ1biwgZm9udFByb3Bl
cnRpZXMpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIFRoZSBjdXJyZW50IGZv
bnQgY2FuJ3QgcmVuZGVyIHRoaXMgcnVuLiBjbGVhciBEQyBhbmQgdHJ5CkBAIC02MzIsNyArNjA2
LDkgQEAgYm9vbCBVbmlzY3JpYmVIZWxwZXI6OnNoYXBlKGNvbnN0IFVDaGFyKgogICAgICAgICAg
ICAgY29uc3QgVUNoYXIgKmZhbWlseSA9IGdldEZhbGxiYWNrRmFtaWx5KGlucHV0LCBpdGVtTGVu
Z3RoLAogICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHksIDAs
IDApOwogICAgICAgICAgICAgYm9vbCBmb250T2sgPSBnZXREZXJpdmVkRm9udERhdGEoZmFtaWx5
LCBtX3N0eWxlLCAmbV9sb2dmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZhc2NlbnQsICZoZm9udCwgJnNjcmlwdENhY2hlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhc2NlbnQsICZoZm9udCwgJnNjcmlw
dENhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNw
YWNlR2x5cGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogCiAgICAgICAgICAgICBpZiAoIWZvbnRPaykgewogICAgICAgICAgICAgICAgIC8vIElmIHRo
aXMgR2V0RGVyaXZlZEZvbnREYXRhIGlzIGNhbGxlZCBmcm9tIHRoZSByZW5kZXJlciBpdApAQCAt
NjQ0LDcgKzYyMCw4IEBAIGJvb2wgVW5pc2NyaWJlSGVscGVyOjpzaGFwZShjb25zdCBVQ2hhcioK
IAogICAgICAgICAgICAgICAgIC8vIFRyeSBhZ2Fpbi4KICAgICAgICAgICAgICAgICBmb250T2sg
PSBnZXREZXJpdmVkRm9udERhdGEoZmFtaWx5LCBtX3N0eWxlLCAmbV9sb2dmb250LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFzY2VudCwgJmhmb250LCAm
c2NyaXB0Q2FjaGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmYXNjZW50LCAmaGZvbnQsICZzY3JpcHRDYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnNwYWNlR2x5cGgpOwogICAgICAgICAgICAgICAgIEFTU0VS
VChmb250T2spOwogICAgICAgICAgICAgfQogCkBAIC02NzMsNiArNjUwLDcgQEAgYm9vbCBVbmlz
Y3JpYmVIZWxwZXI6OnNoYXBlKGNvbnN0IFVDaGFyKgogICAgIC8vIGJlY2F1c2UgaXQncyBub3Qg
dXNlZCBlbHNld2hlcmUuCiAgICAgc2hhcGluZy5tX2hmb250ID0gaGZvbnQ7CiAgICAgc2hhcGlu
Zy5tX3NjcmlwdENhY2hlID0gc2NyaXB0Q2FjaGU7CisgICAgc2hhcGluZy5tX3NwYWNlR2x5cGgg
PSBzcGFjZUdseXBoOwogCiAgICAgLy8gVGhlIGFzY2VudCBvZiBhIGZvbnQgZm9yIHRoaXMgcnVu
IGNhbiBiZSBkaWZmZXJlbnQgZnJvbQogICAgIC8vIHRoYXQgb2YgdGhlIHByaW1hcnkgZm9udCBz
byB0aGF0IHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZgpAQCAtODA2LDIyICs3ODQsMzkgQEAgdm9p
ZCBVbmlzY3JpYmVIZWxwZXI6OmFkanVzdFNwYWNlQWR2YW5jZQogICAgIGZvciAoc2l6ZV90IHJ1
biA9IDA7IHJ1biA8IG1fcnVucy5zaXplKCk7IHJ1bisrKSB7CiAgICAgICAgIFNoYXBpbmcmIHNo
YXBpbmcgPSBtX3NoYXBlc1tydW5dOwogCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb3AgaXMg
bm90IFVURi0xNi1zYWZlLiBVbmljb2RlIDYuMCBoYXMgYSBjb3VwbGUKKyAgICAgICAgLy8gb2Yg
Y29tcGxleCBzY3JpcHQgYmxvY2tzIGluIFBsYW5lIDEuCiAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2hhcGluZy5jaGFyTGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKCF0cmVh
dEFzU3BhY2UobV9pbnB1dFttX3J1bnNbcnVuXS5pQ2hhclBvcyArIGldKSkKKyAgICAgICAgICAg
IFVDaGFyIGMgPSBtX2lucHV0W21fcnVuc1tydW5dLmlDaGFyUG9zICsgaV07CisgICAgICAgICAg
ICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnQ6OnRyZWF0QXNTcGFjZShjKTsKKyAgICAgICAgICAg
IGlmICghdHJlYXRBc1NwYWNlICYmICFGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBs
ZXhTY3JpcHQoYykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlu
dCBnbHlwaEluZGV4ID0gc2hhcGluZy5tX2xvZ3NbaV07CiAgICAgICAgICAgICBpbnQgY3VycmVu
dEFkdmFuY2UgPSBzaGFwaW5nLm1fYWR2YW5jZVtnbHlwaEluZGV4XTsKIAotICAgICAgICAgICAg
Ly8gY3VycmVudEFkdmFuY2UgZG9lcyBub3QgaW5jbHVkZSBhZGRpdGlvbmFsIGxldHRlci1zcGFj
aW5nLCBidXQKLSAgICAgICAgICAgIC8vIHNwYWNlX3dpZHRoIGRvZXMuIEhlcmUgd2UgZmluZCBv
dXQgaG93IG9mZiB3ZSBhcmUgZnJvbSB0aGUKLSAgICAgICAgICAgIC8vIGNvcnJlY3Qgd2lkdGgg
Zm9yIHRoZSBzcGFjZSBub3QgaW5jbHVkaW5nIGxldHRlci1zcGFjaW5nLCB0aGVuCi0gICAgICAg
ICAgICAvLyBqdXN0IHN1YnRyYWN0IHRoYXQgZGlmZi4KLSAgICAgICAgICAgIGludCBkaWZmID0g
Y3VycmVudEFkdmFuY2UgLSBzcGFjZVdpZHRoV2l0aG91dExldHRlclNwYWNpbmc7Ci0gICAgICAg
ICAgICAvLyBUaGUgc2hhcGluZyBjYW4gY29uc2lzdCBvZiBhIHJ1biBvZiB0ZXh0LCBzbyBvbmx5
IHN1YnRyYWN0IHRoZQotICAgICAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiB0aGUgd2lkdGggb2Yg
dGhlIGdseXBoLgotICAgICAgICAgICAgc2hhcGluZy5tX2FkdmFuY2VbZ2x5cGhJbmRleF0gLT0g
ZGlmZjsKLSAgICAgICAgICAgIHNoYXBpbmcubV9hYmMuYWJjQiAtPSBkaWZmOworICAgICAgICAg
ICAgaWYgKHRyZWF0QXNTcGFjZSkgeworICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRBZHZhbmNl
IGRvZXMgbm90IGluY2x1ZGUgYWRkaXRpb25hbCBsZXR0ZXItc3BhY2luZywKKyAgICAgICAgICAg
ICAgICAvLyBidXQgbV9zcGFjZVdpZHRoIGRvZXMuIEhlcmUgd2UgZmluZCBvdXQgaG93IG9mZiB3
ZSBhcmUgZnJvbQorICAgICAgICAgICAgICAgIC8vIHRoZSBjb3JyZWN0IHdpZHRoIChzcGFjZVdp
ZHRoV2l0aG91dExldHRlclNwYWNpbmcpIGFuZAorICAgICAgICAgICAgICAgIC8vIGp1c3Qgc3Vi
dHJhY3QgdGhhdCBkaWZmLgorICAgICAgICAgICAgICAgIGludCBkaWZmID0gY3VycmVudEFkdmFu
Y2UgLSBzcGFjZVdpZHRoV2l0aG91dExldHRlclNwYWNpbmc7CisgICAgICAgICAgICAgICAgLy8g
VGhlIHNoYXBpbmcgY2FuIGNvbnNpc3Qgb2YgYSBydW4gb2YgdGV4dCwgc28gb25seSBzdWJ0cmFj
dAorICAgICAgICAgICAgICAgIC8vIHRoZSBkaWZmZXJlbmNlIGluIHRoZSB3aWR0aCBvZiB0aGUg
Z2x5cGguCisgICAgICAgICAgICAgICAgc2hhcGluZy5tX2FkdmFuY2VbZ2x5cGhJbmRleF0gLT0g
ZGlmZjsKKyAgICAgICAgICAgICAgICBzaGFwaW5nLm1fYWJjLmFiY0IgLT0gZGlmZjsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRm9y
IGNoYXJhY3RlcnMgdHJlYXRlZCBhcyB6ZXJvLXdpZHRoIHNwYWNlIGluIGNvbXBsZXgKKyAgICAg
ICAgICAgIC8vIHNjcmlwdHMsIHNldCB0aGUgYWR2YW5jZSB3aWR0aCB0byB6ZXJvLCBhZGp1c3QK
KyAgICAgICAgICAgIC8vIHxhYmNCfCBvZiB0aGUgY3VycmVudCBydW4gYWNjb3JkaW5nbHkgYW5k
IHNldCAKKyAgICAgICAgICAgIC8vIHRoZSBnbHlwaCB0byBtX3NwYWNlR2x5cGggKGludmlzaWJs
ZSkuCisgICAgICAgICAgICBzaGFwaW5nLm1fYWR2YW5jZVtnbHlwaEluZGV4XSA9IDA7CisgICAg
ICAgICAgICBzaGFwaW5nLm1fYWJjLmFiY0IgLT0gY3VycmVudEFkdmFuY2U7CisgICAgICAgICAg
ICBzaGFwaW5nLm1fb2Zmc2V0c1tnbHlwaEluZGV4XS5kdSA9IDA7CisgICAgICAgICAgICBzaGFw
aW5nLm1fb2Zmc2V0c1tnbHlwaEluZGV4XS5kdiA9IDA7CisgICAgICAgICAgICBzaGFwaW5nLm1f
Z2x5cGhzW2dseXBoSW5kZXhdID0gc2hhcGluZy5tX3NwYWNlR2x5cGg7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC04NzIsNyArODY3LDcgQEAgdm9pZCBVbmlzY3JpYmVIZWxwZXI6OmFwcGx5U3Bh
Y2luZygpCiAgICAgICAgIC8vIGV4dHJhIHdvcmRzcGFjaW5nIGFtb3VudCBmb3IgdGhlIGdseXBo
cyB0aGV5IGNvcnJlc3BvbmQgdG8uCiAgICAgICAgIGlmIChtX3dvcmRTcGFjaW5nICE9IDApIHsK
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2hhcGluZy5jaGFyTGVuZ3RoKCk7IGkr
KykgewotICAgICAgICAgICAgICAgIGlmICghdHJlYXRBc1NwYWNlKG1faW5wdXRbbV9ydW5zW3J1
bl0uaUNoYXJQb3MgKyBpXSkpCisgICAgICAgICAgICAgICAgaWYgKCFGb250Ojp0cmVhdEFzU3Bh
Y2UobV9pbnB1dFttX3J1bnNbcnVuXS5pQ2hhclBvcyArIGldKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAvLyBUaGUgY2hhciBpbiBxdWVzdGlvbiBp
cyBhIHdvcmQgc2VwYXJhdG9yLi4uCkBAIC05MjksNCArOTI0LDMxIEBAIGludCBVbmlzY3JpYmVI
ZWxwZXI6OmFkdmFuY2VGb3JJdGVtKGludAogICAgIHJldHVybiBzaGFwaW5nLm1fcHJlUGFkZGlu
ZyArIGp1c3RpZmljYXRpb247CiB9CiAKKy8vIFNDUklQVF9GT05UUFJPUEVSVElFUyBjb250YWlu
cyBnbHlwaCBpbmRpY2VzIGZvciBkZWZhdWx0LCBpbnZhbGlkCisvLyBhbmQgYmxhbmsgZ2x5cGhz
LiBKdXN0IGJlY2F1c2UgU2NyaXB0U2hhcGUgc3VjY2VlZHMgZG9lcyBub3QgbWVhbgorLy8gdGhh
dCBhIHRleHQgcnVuIGlzIHJlbmRlcmVkIGNvcnJlY3RseS4gU29tZSBjaGFyYWN0ZXJzIG1heSBi
ZSByZW5kZXJlZAorLy8gd2l0aCBkZWZhdWx0L2ludmFsaWQvYmxhbmsgZ2x5cGhzLiBUaGVyZWZv
cmUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGdseXBoCisvLyBhcnJheSByZXR1cm5lZCBieSBT
Y3JpcHRTaGFwZSBjb250YWlucyBhbnkgb2YgdGhvc2UgZ2x5cGhzIHRvIG1ha2UKKy8vIHN1cmUg
dGhhdCB0aGUgdGV4dCBydW4gaXMgcmVuZGVyZWQgc3VjY2Vzc2Z1bGx5LgorLy8gSG93ZXZlciwg
d2Ugc2hvdWxkIG5vdCBzdWJqZWN0IHplcm8td2lkdGggY2hhcmFjdGVycyB0byB0aGlzIHRlc3Qu
CisKK2Jvb2wgVW5pc2NyaWJlSGVscGVyOjpjb250YWluc01pc3NpbmdHbHlwaHMoY29uc3QgU2hh
cGluZyYgc2hhcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU0NSSVBUX0lURU0mIHJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBwcm9wZXJ0aWVzKSBj
b25zdAoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2hhcGluZy5jaGFyTGVuZ3RoKCk7IGkr
KykgeworICAgICAgICBVQ2hhciBjID0gbV9pbnB1dFtydW4uaUNoYXJQb3MgKyBpXTsKKyAgICAg
ICAgLy8gU2tpcCB6ZXJvLXdpZHRoIHNwYWNlIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5J3JlIG5v
dCBjb25zaWRlcmVkIHRvIGJlIG1pc3NpbmcgaW4gYSBmb250LgorICAgICAgICBpZiAoRm9udDo6
dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGMpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGludCBnbHlwaEluZGV4ID0gc2hhcGluZy5tX2xvZ3NbaV07CisgICAg
ICAgIFdPUkQgZ2x5cGggPSBzaGFwaW5nLm1fZ2x5cGhzW2dseXBoSW5kZXhdOworICAgICAgICBp
ZiAoZ2x5cGggPT0gcHJvcGVydGllcy0+d2dEZWZhdWx0CisgICAgICAgICAgICB8fCAoZ2x5cGgg
PT0gcHJvcGVydGllcy0+d2dJbnZhbGlkICYmIGdseXBoICE9IHByb3BlcnRpZXMtPndnQmxhbmsp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmgJ
KHJldmlzaW9uIDg0MDk5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVW5pc2NyaWJlSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICBib29sIGlzUnRsLAogICAgICAgICAgICAgICAg
ICAgICBIRk9OVCwKICAgICAgICAgICAgICAgICAgICAgU0NSSVBUX0NBQ0hFKiwKLSAgICAgICAg
ICAgICAgICAgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKik7CisgICAgICAgICAgICAgICAgICAg
IFNDUklQVF9GT05UUFJPUEVSVElFUyosCisgICAgICAgICAgICAgICAgICAgIFdPUkQpOwogCiAg
ICAgdmlydHVhbCB+VW5pc2NyaWJlSGVscGVyKCk7CiAKQEAgLTIyNSw3ICsyMjYsOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgOiBtX3ByZVBhZGRpbmcoMCkKICAgICAgICAgICAgICwgbV9oZm9u
dChOVUxMKQogICAgICAgICAgICAgLCBtX3NjcmlwdENhY2hlKE5VTEwpCi0gICAgICAgICAgICAs
IG1fYXNjZW50T2Zmc2V0KDApIHsKKyAgICAgICAgICAgICwgbV9hc2NlbnRPZmZzZXQoMCkKKyAg
ICAgICAgICAgICwgbV9zcGFjZUdseXBoKDApCisgICAgICAgIHsKICAgICAgICAgICAgIG1fYWJj
LmFiY0EgPSAwOwogICAgICAgICAgICAgbV9hYmMuYWJjQiA9IDA7CiAgICAgICAgICAgICBtX2Fi
Yy5hYmNDID0gMDsKQEAgLTMxOSw2ICszMjIsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyB3aGVu
IGRyYXdpbmcgYSBzdHJpbmcsIHRvIGFsaWduIG11bHRpcGxlIHJ1bnMgcmVuZGVyZWQgd2l0aAog
ICAgICAgICAvLyBkaWZmZXJlbnQgZm9udHMuCiAgICAgICAgIGludCBtX2FzY2VudE9mZnNldDsK
KworICAgICAgICBXT1JEIG1fc3BhY2VHbHlwaDsKICAgICB9OwogCiAgICAgLy8gQ29tcHV0ZXMg
dGhlIHJ1bnNfIGFycmF5IGZyb20gdGhlIHRleHQgcnVuLgpAQCAtMzQzLDYgKzM0OCwxMCBAQCBw
cml2YXRlOgogICAgIC8vIFJldHVybnMgdGhlIHRvdGFsIHdpZHRoIG9mIGEgc2luZ2xlIGl0ZW0u
CiAgICAgaW50IGFkdmFuY2VGb3JJdGVtKGludCkgY29uc3Q7CiAKKyAgICBib29sIGNvbnRhaW5z
TWlzc2luZ0dseXBocyhjb25zdCBTaGFwaW5nJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTQ1JJUFRfSVRFTSYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKikgY29uc3Q7CisKICAgICAvLyBTaGFwZXMgYSBy
dW4gKHBvaW50ZWQgdG8gYnkgfGlucHV0fCkgdXNpbmcgfGhmb250fCBmaXJzdC4KICAgICAvLyBU
cmllcyBhIHNlcmllcyBvZiBmb250cyBzcGVjaWZpZWQgcmV0cmlldmVkIHdpdGggTmV4dFdpbkZv
bnREYXRhCiAgICAgLy8gYW5kIGZpbmFsbHkgYSBmb250IGNvdmVyaW5nIGNoYXJhY3RlcnMgaW4g
fCppbnB1dHwuIEEgc3RyaW5nIHBvaW50ZWQKQEAgLTM4NCw2ICszOTMsNyBAQCBwcml2YXRlOgog
ICAgIGludCBtX2FzY2VudDsKICAgICBMT0dGT05UIG1fbG9nZm9udDsKICAgICBpbnQgbV9zdHls
ZTsKKyAgICBXT1JEIG1fc3BhY2VHbHlwaDsKIAogICAgIC8vIE9wdGlvbnMsIHNlZSB0aGUgZ2V0
dGVycy9zZXR0ZXJzIGFib3ZlLgogICAgIGJvb2wgbV9kaXJlY3Rpb25hbE92ZXJyaWRlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVs
cGVyVGV4dFJ1bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHAJKHJldmlzaW9uIDg0MDk5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJl
SGVscGVyVGV4dFJ1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDggQEAgVW5pc2Ny
aWJlSGVscGVyVGV4dFJ1bjo6VW5pc2NyaWJlSGVscGVyVAogICAgIDogVW5pc2NyaWJlSGVscGVy
KHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSwgcnVuLnJ0bCgpLAogICAgICAgICAgICAg
ICAgICAgICAgIGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICBmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLnNj
cmlwdENhY2hlKCksCi0gICAgICAgICAgICAgICAgICAgICAgZm9udC5wcmltYXJ5Rm9udCgpLT5w
bGF0Zm9ybURhdGEoKS5zY3JpcHRGb250UHJvcGVydGllcygpKQorICAgICAgICAgICAgICAgICAg
ICAgIGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2NyaXB0Rm9udFByb3BlcnRp
ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICBmb250LnByaW1hcnlGb250KCktPnNwYWNlR2x5
cGgoKSkKICAgICAsIG1fZm9udCgmZm9udCkKICAgICAsIG1fZm9udEluZGV4KDApCiB7CkBAIC02
OSw3ICs3MCw3IEBAIFVuaXNjcmliZUhlbHBlclRleHRSdW46OlVuaXNjcmliZUhlbHBlclQKICAg
ICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlLAogICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyog
Zm9udFByb3BlcnRpZXMpCiAgICAgOiBVbmlzY3JpYmVIZWxwZXIoaW5wdXQsIGlucHV0TGVuZ3Ro
LCBpc1J0bCwgaGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q2FjaGUsIGZvbnRQ
cm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdENhY2hlLCBmb250UHJvcGVy
dGllcywgMCkKICAgICAsIG1fZm9udCgwKQogICAgICwgbV9mb250SW5kZXgoLTEpCiB7CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA4NDEwMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTA0LTE3ICBKdW5nc2hpayBTaGluICA8anNoaW5A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBhIGNvbXBsZXgtc2NyaXB0IHZlcnNpb24gb2YgemVyby13aWR0aC1jaGFyYWN0
ZXJzLmh0bWwuCisgICAgICAgIGFuZCBhZGQgVStGRUZGIHRvIHplcm8td2lkdGgtY2hhcmFjdGVy
cy5odG1sIAorICAgICAgICBDaHJvbWl1bSBMaW51eCBmYWlscyB0aGUgdGVzdCBiZWNhdXNlIFUr
RkVGRiBpcyByZW5kZXJlZAorICAgICAgICB3aXRoIGEgbm9uLXplcm8gd2lkdGggZ2x5cGguCisg
ICAgICAgIEZpbGVkIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NzQx
IGFuZCBub3RlZAorICAgICAgICBhcyBzdWNoIGluIHRlc3RfZXhwZWN0YXRpb24udHh0LgorICAg
ICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
ODYwCisKKyAgICAgICAgKiBmYXN0L3RleHQvemVyby13aWR0aC1jaGFyYWN0ZXJzLWNvbXBsZXgt
c2NyaXB0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L3plcm8td2lk
dGgtY2hhcmFjdGVycy1jb21wbGV4LXNjcmlwdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L3RleHQvemVyby13aWR0aC1jaGFyYWN0ZXJzLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorCiAyMDExLTA0LTE2ICBEYW4gQmVybnN0ZWlu
ICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlZCByZXN1bHRzIGZvciBmYXN0L2Js
b2NrL2Zsb2F0LzAzMi5odG1sIGFmdGVyIHI4NDA5Ni4gRmlsZWQgaHR0cDovL3dlYmtpdC5vcmcv
Yi81ODczNiB0bwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3plcm8td2lkdGgtY2hhcmFj
dGVycy1jb21wbGV4LXNjcmlwdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC90ZXh0L3plcm8td2lkdGgtY2hhcmFjdGVycy1jb21wbGV4LXNjcmlwdC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvemVyby13aWR0aC1j
aGFyYWN0ZXJzLWNvbXBsZXgtc2NyaXB0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzIEBACitUaGlzIHRlc3QgY2hlY2tzIHZhcmlvdXMgY2hhcmFjdGVycyB0aGF0IHNob3Vs
ZCBhbHdheXMgYmUgemVybyB3aWR0aCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSB3aGVuIGVuY2xv
c2VkIGJ5IGNvbXBsZXggc2NyaXB0IGNoYXJhY3RlcnMuIFRoZSBXZWJLaXQgdGV4dCBzeXN0ZW0g
ZW5zdXJlcyB0aGlzIGluIGEgd2F5IHRoYXQncyBpbmRlcGVuZGVudCBvZiB0aGUgZm9udHMgaW5z
dGFsbGVkIG9uIHRoZSBzeXN0ZW0uCisKK1BBU1M6IEFsbCBjaGFyYWN0ZXJzIGhhZCB6ZXJvLXdp
ZHRoLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3plcm8td2lkdGgtY2hhcmFjdGVycy1j
b21wbGV4LXNjcmlwdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC96
ZXJvLXdpZHRoLWNoYXJhY3RlcnMtY29tcGxleC1zY3JpcHQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMtY29tcGxleC1zY3Jp
cHQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorPGhlYWQ+Cis8c2NyaXB0Pgor
CitmdW5jdGlvbiB0ZXN0Q2hhcihjaCkKK3sKKyAgICAvLyBTdHJpbmdzIGEgYW5kIGIgc2VsZWN0
ZWQgaGVyZSBkbyBub3QgaGF2ZSBhbnkgJ2ludGVyYWN0aW9uJyBiZXR3ZWVuIHRoZW0uCisgICAg
dmFyIGEgPSAiXHUwOTE1XHUwOTNFIgorICAgIHZhciBiID0gIlx1MDkxNiI7CisgICAgdmFyIHNw
YW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhcmFjdGVycyIpOworICAgIHNwYW4uZmly
c3RDaGlsZC5kYXRhID0gYSArIGI7CisgICAgdmFyIGFiV2lkdGggPSBzcGFuLm9mZnNldFdpZHRo
OworICAgIHNwYW4uZmlyc3RDaGlsZC5kYXRhID0gYTsKKyAgICB2YXIgYVdpZHRoID0gc3Bhbi5v
ZmZzZXRXaWR0aDsKKyAgICBzcGFuLmZpcnN0Q2hpbGQuZGF0YSA9IGEgKyBTdHJpbmcuZnJvbUNo
YXJDb2RlKGNoKSArIGI7CisgICAgdmFyIGFiV2l0aENoV2lkdGggPSBzcGFuLm9mZnNldFdpZHRo
OworCisgICAgaWYgKGFiV2l0aENoV2lkdGggPiBhYldpZHRoKQorICAgICAgICByZXR1cm4gMTsK
KyAgICBpZiAoYWJXaWR0aCA+IGFXaWR0aCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IDE7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICB2YXIgZmFpbGVkQ291bnQgPSAwOworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMzI7ICsraSkK
KyAgICAgICAgaWYgKGkgIT0gOSAmJiBpICE9IDEwICYmIGkgIT0gMTMpCisgICAgICAgICAgICBm
YWlsZWRDb3VudCArPSB0ZXN0Q2hhcihpKTsKKworICAgIGZvciAodmFyIGkgPSAweDdGOyBpIDwg
MHhBMDsgKytpKQorICAgICAgICBmYWlsZWRDb3VudCArPSB0ZXN0Q2hhcihpKTsKKyAgICBmYWls
ZWRDb3VudCArPSB0ZXN0Q2hhcigweEFEKTsKKyAgICAvLyBaV0ogKFUrMjAwQykgYW5kIFpXTkog
KFUrMjAwRCkgYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgdGhleQorICAgIC8vIGNhbiBhZmZlY3QgdGhl
IHJlbmRlcmluZyBpbiBjb21wbGV4IHNjcmlwdCB0ZXh0LgorICAgIGZhaWxlZENvdW50ICs9IHRl
c3RDaGFyKDB4MjAwQik7CisgICAgZmFpbGVkQ291bnQgKz0gdGVzdENoYXIoMHgyMDBFKTsKKyAg
ICBmYWlsZWRDb3VudCArPSB0ZXN0Q2hhcigweDIwMEYpOworICAgIGZhaWxlZENvdW50ICs9IHRl
c3RDaGFyKDB4MjAyQSk7CisgICAgZmFpbGVkQ291bnQgKz0gdGVzdENoYXIoMHgyMDJCKTsKKyAg
ICBmYWlsZWRDb3VudCArPSB0ZXN0Q2hhcigweDIwMkMpOworICAgIGZhaWxlZENvdW50ICs9IHRl
c3RDaGFyKDB4MjAyRCk7CisgICAgZmFpbGVkQ291bnQgKz0gdGVzdENoYXIoMHgyMDJFKTsKKyAg
ICBmYWlsZWRDb3VudCArPSB0ZXN0Q2hhcigweEZFRkYpOworICAgIGZhaWxlZENvdW50ICs9IHRl
c3RDaGFyKDB4RkZGQyk7CisKKyAgICB2YXIgdGVzdEFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidGVzdEFyZWEiKTsKKyAgICB0ZXN0QXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRl
c3RBcmVhKTsKKworICAgIGlmIChmYWlsZWRDb3VudCA+IDApIAorICAgICAgICByZXN1bHQgPSAi
RkFJTDogIiArIGZhaWxlZENvdW50ICsgIiBjaGFyYWN0ZXJzIGhhZCBub24temVybyB3aWR0aCIg
KworICAgICAgICAgICAgICAgICAiIG9yIGZhaWxlZCB0byBnZXQgbWVhc3VyZWQuIjsKKyAgICBl
bHNlCisgICAgICAgIHJlc3VsdCA9ICJQQVNTOiBBbGwgY2hhcmFjdGVycyBoYWQgemVyby13aWR0
aC4iOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5maXJzdENoaWxkLmRh
dGEgPSByZXN1bHQ7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgp
Ij4KKzxwPlRoaXMgdGVzdCBjaGVja3MgdmFyaW91cyBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIGFs
d2F5cyBiZSB6ZXJvIHdpZHRoIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHdoZW4gZW5jbG9zZWQg
YnkgY29tcGxleCBzY3JpcHQgY2hhcmFjdGVycy4KK1RoZSBXZWJLaXQgdGV4dCBzeXN0ZW0gZW5z
dXJlcyB0aGlzIGluIGEgd2F5IHRoYXQncyBpbmRlcGVuZGVudCBvZiB0aGUgZm9udHMgaW5zdGFs
bGVkIG9uIHRoZSBzeXN0ZW0uPC9wPgorPHAgaWQ9InJlc3VsdCI+RkFJTDogU2NyaXB0IGRpZCBu
b3QgcnVuIHRvIGNvbXBsZXRpb24uPC9wPgorPHAgaWQ9InRlc3RBcmVhIj48c3BhbiBpZD0iY2hh
cmFjdGVycyI+JiN4MDkxNTsmI3gwOTNFOyYjeDA5MTY7PC9zcGFuPjwvcD4KKzwvYm9keT4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3RleHQvemVyby13aWR0aC1jaGFyYWN0ZXJzLmh0
bWwJKHJldmlzaW9uIDg0MDk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3plcm8td2lkdGgt
Y2hhcmFjdGVycy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw3IEBAIGZ1bmN0aW9u
IHRlc3QoKQogICAgIHRlc3RTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDIwMEQpOwog
ICAgIHRlc3RTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDIwMEUpOwogICAgIHRlc3RT
dHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDIwMEYpOworICAgIHRlc3RTdHJpbmcgKz0g
U3RyaW5nLmZyb21DaGFyQ29kZSgweEZFRkYpOwogICAgIHRlc3RTdHJpbmcgKz0gU3RyaW5nLmZy
b21DaGFyQ29kZSgweEZGRkMpOwogICAgIHZhciBzcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNoYXJhY3RlcnMiKTsKICAgICB2YXIgYWJXaWR0aCA9IHNwYW4ub2Zmc2V0V2lkdGg7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3Rh
dGlvbnMudHh0CShyZXZpc2lvbiA4NDA5OSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzUzNCw0ICszNTM0
LDUgQEAgQlVHTU9SUklUQSA6IGZhc3QvaHRtbC9kZXRhaWxzLXJlbW92ZS1zdQogQlVHTU9SUklU
QSA6IGZhc3QvaHRtbC9kZXRhaWxzLXdyaXRpbmctbW9kZS5odG1sID0gRkFJTAogCiBCVUdXSzU4
NjE5IEdQVSBMSU5VWCBXSU4gOiBtZWRpYS92aWRlby12b2x1bWUtc2xpZGVyLmh0bWwgPSBJTUFH
RQorQlVHV0s1ODc0MSBMSU5VWCA6IGZhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMtY29t
cGxleC1zY3JpcHQuaHRtbCA9IEZBSUwKIAo=
</data>
<flag name="review"
          id="82876"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>