<?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>147009</bug_id>
          
          <creation_ts>2015-07-16 13:18:30 -0700</creation_ts>
          <short_desc>Web Inspector: Add a function to CSSCompletions to get a list of supported system fonts</short_desc>
          <delta_ts>2015-07-23 13:46:45 -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>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>koivisto</cc>
    
    <cc>mattbaker</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1109937</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-07-16 13:18:30 -0700</bug_when>
    <thetext>In preparation for a Fonts panel/picker in the future, there should be an easy way for the Inspector frontend to retrieve the list of fonts on the system.  Seeing as this is already available in the backend, a protocol should be added to make this list visible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109938</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-07-16 13:19:09 -0700</bug_when>
    <thetext>&lt;rdar://problem/21861152&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109983</commentid>
    <comment_count>2</comment_count>
      <attachid>256928</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-07-16 14:46:08 -0700</bug_when>
    <thetext>Created attachment 256928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109990</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-07-16 15:00:41 -0700</bug_when>
    <thetext>Note, we can&apos;t distribute Arial or Times for legal and ethical reasons, so unfortunately those are not as universal as you had assumed. If we implement this in bug #147018 we could simply remove the &quot;PASS:&quot; and &quot;FAIL:&quot; prefixes from hasFontFamily().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109997</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-07-16 15:13:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Note, we can&apos;t distribute Arial or Times for legal and ethical reasons, so
&gt; unfortunately those are not as universal as you had assumed. If we implement
&gt; this in bug #147018 we could simply remove the &quot;PASS:&quot; and &quot;FAIL:&quot; prefixes
&gt; from hasFontFamily().

Interesting! What fonts can we expect to be on your port? Can we make any assumptions? It would be nice if we can assume a non-empty list with at least 1 or 2 common fonts, but maybe that is not something we can rely on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110004</commentid>
    <comment_count>5</comment_count>
      <attachid>256928</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-07-16 15:23:02 -0700</bug_when>
    <thetext>Comment on attachment 256928
Patch

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

r- for a couple issues, but overall this approach looks good to me. Would be nice to get a nod from Font experts like Myles.

&gt; Source/JavaScriptCore/inspector/protocol/CSS.json:351
&gt; +            &quot;name&quot;: &quot;getSupportedCSSFontFamilyNames&quot;,

I wonder if &quot;CSS&quot; makes sense here.

  (1) we are already in the CSS domain
  (2) this is really asking for the System Font Family Names, and won&apos;t provide Web Font names

A better name may be:

  getSupportedFontFamilyNames
  getSupportedSystemFontFamilyNames

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:718
&gt; +    Vector&lt;String&gt; systemFontFamilies = FontCache::singleton().systemFontFamilies();
&gt; +
&gt; +    for (String familyName : systemFontFamilies)

Style: Drop the empty line and keep these highly related lines together.

&gt; Source/WebCore/platform/graphics/FontCache.h:113
&gt;      // This method is implemented by the platform.

Update this comment, &quot;These methods are implemented by the platform.&quot;

&gt; Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp:104
&gt; +    Vector&lt;String&gt; fontFamilies;
&gt; +    return fontFamilies;

You should point to the bug for implementing this:

    // FIXME: &lt;https://webkit.org/b/147018&gt; Web Inspector: [Freetype] Allow inspector to retrieve a list of system fonts

&gt; Source/WebCore/platform/graphics/ios/FontCacheIOS.mm:468
&gt; +    CFArrayRef availableFontFamilies = CTFontManagerCopyAvailableFontFamilyNames();

We should use RetainPtr to help automate Retain/Release for us. To do that:

    RetainPtr&lt;CFArrayRef&gt; availableFontFamiles = adoptCF(CTFontManagerCopyAvailableFontFamilyNames());

Then you don&apos;t need the release at the bottom of the method.

Style: Same thing about the empty lines here. The top and bottom sure, but in the middle none of the newlines seem significant.

&gt; Source/WebCore/platform/graphics/ios/FontCacheIOS.mm:470
&gt; +    for (CFIndex i = 0; i &lt; CFArrayGetCount(availableFontFamilies); ++i) {

Call me crazy, but most of our code would extract the count out above the loop.

    CFIndex count = CFArrayGetCount(availableFontFamilies);
    for (CFIndex i = 0; i &lt; count; ++i) {

&gt; Source/WebCore/platform/graphics/ios/FontCacheIOS.mm:473
&gt; +        if (CFGetTypeID(CFStringRef) != CFStringGetTypeID()) {

This looks wrong. It should be CFGetTypeID(fontName). r- for this.

&gt; Source/WebCore/platform/graphics/mac/FontCacheMac.mm:534
&gt; +

Same style nit here.

&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:314
&gt; +    Vector&lt;String&gt; fontFamilies;

Same FIXME comment. The bug for this one:

    // FIXME: &lt;https://webkit.org/b/147017&gt; Web Inspector: [Win] Allow inspector to retrieve a list of system fonts

&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:171
&gt; +            CSSAgent.getSupportedCSSFontFamilyNames(fontFamilyNamesCallback);

For iOS 8 backends, CSSAgent.getSupportedCSSFontFamilyNames is not available. You need to check if it is available:

    if (CSSAgent.getSupportedCSSFontFamilyNames)
        CSSAgent.getSupportedCSSFontFamilyNames(fontFamilyNamesCallback);

In which case, you might want to initialize WebInspector.CSSCompletions.cssFontFamilyNames to an empty list to behave reasonably on iOS 8 and earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110006</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-07-16 15:28:53 -0700</bug_when>
    <thetext>(In reply to comment #4) 
&gt; Interesting! What fonts can we expect to be on your port? Can we make any
&gt; assumptions? It would be nice if we can assume a non-empty list with at
&gt; least 1 or 2 common fonts, but maybe that is not something we can rely on.

We install the following fonts to ensure they&apos;re present for layout tests: https://github.com/mrobinson/webkitgtk-test-fonts

I&apos;m pretty sure none of those can be found on Windows or OS X. :( I&apos;m not aware of any requirements we have on the fonts in that repo, except of course they should be legally redistributable (so none of the Microsoft fonts would be permitted, for example).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110031</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-07-16 16:56:23 -0700</bug_when>
    <thetext>&gt; /Volumes/Data/EWS/WebKit/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm:468:40: error: call to unavailable function &apos;CTFontManagerCopyAvailableFontFamilyNames&apos;: not available on iOS
&gt;     CFArrayRef availableFontFamilies = CTFontManagerCopyAvailableFontFamilyNames();

Sounds like a legit iOS build failure. Looks like this CoreText function is only available on Mac, not iOS based on the availability macro:

    CFArrayRef CTFontManagerCopyAvailableFontFamilyNames( void ) CT_AVAILABLE_MAC(10_6);

We will have to come up with another way to do this on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110032</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-07-16 16:57:07 -0700</bug_when>
    <thetext>&gt; (In reply to comment #4) 
&gt; &gt; Interesting! What fonts can we expect to be on your port? Can we make any
&gt; &gt; assumptions? It would be nice if we can assume a non-empty list with at
&gt; &gt; least 1 or 2 common fonts, but maybe that is not something we can rely on.
&gt; 
&gt; We install the following fonts to ensure they&apos;re present for layout tests:
&gt; https://github.com/mrobinson/webkitgtk-test-fonts
&gt; 
&gt; I&apos;m pretty sure none of those can be found on Windows or OS X. :( I&apos;m not
&gt; aware of any requirements we have on the fonts in that repo, except of
&gt; course they should be legally redistributable (so none of the Microsoft
&gt; fonts would be permitted, for example).

We may just have to write this function expecting different cross platform results. As long as we write it in a way that doesn&apos;t need to continuously be updated that should be nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110096</commentid>
    <comment_count>9</comment_count>
      <attachid>256958</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-07-17 00:43:44 -0700</bug_when>
    <thetext>Created attachment 256958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110170</commentid>
    <comment_count>10</comment_count>
      <attachid>256958</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-17 11:40:56 -0700</bug_when>
    <thetext>Comment on attachment 256958
Patch

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

&gt; Source/WebCore/platform/graphics/FontCache.h:117
&gt;      // Also implemented by the platform.

Please delete this comment

&gt; Source/WebCore/platform/graphics/mac/FontCacheMac.mm:532
&gt; +    Vector&lt;String&gt; fontFamilies;

I&apos;m trying to remove all uses of NSFont* from WebKit. Please don&apos;t add more. Instead, use CoreText.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110172</commentid>
    <comment_count>11</comment_count>
      <attachid>256958</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-07-17 11:46:56 -0700</bug_when>
    <thetext>Comment on attachment 256958
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/mac/FontCacheMac.mm:532
&gt;&gt; +    Vector&lt;String&gt; fontFamilies;
&gt; 
&gt; I&apos;m trying to remove all uses of NSFont* from WebKit. Please don&apos;t add more. Instead, use CoreText.

Heh, the version you wrote for iOS here will probably work for Mac here then =P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110173</commentid>
    <comment_count>12</comment_count>
      <attachid>256958</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-17 11:48:04 -0700</bug_when>
    <thetext>Comment on attachment 256958
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/mac/FontCacheMac.mm:532
&gt;&gt;&gt; +    Vector&lt;String&gt; fontFamilies;
&gt;&gt; 
&gt;&gt; I&apos;m trying to remove all uses of NSFont* from WebKit. Please don&apos;t add more. Instead, use CoreText.
&gt; 
&gt; Heh, the version you wrote for iOS here will probably work for Mac here then =P

Yes (though I don&apos;t see anything in the FontCacheIOS.mm implementation of FontCache::systemFontFamilies())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110174</commentid>
    <comment_count>13</comment_count>
      <attachid>256958</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-17 11:49:10 -0700</bug_when>
    <thetext>Comment on attachment 256958
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/mac/FontCacheMac.mm:532
&gt;&gt;&gt;&gt; +    Vector&lt;String&gt; fontFamilies;
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;m trying to remove all uses of NSFont* from WebKit. Please don&apos;t add more. Instead, use CoreText.
&gt;&gt; 
&gt;&gt; Heh, the version you wrote for iOS here will probably work for Mac here then =P
&gt; 
&gt; Yes (though I don&apos;t see anything in the FontCacheIOS.mm implementation of FontCache::systemFontFamilies())

CTFontManagerCopyAvailableFontFamilyNames()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110212</commentid>
    <comment_count>14</comment_count>
      <attachid>256928</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-07-17 14:18:55 -0700</bug_when>
    <thetext>Comment on attachment 256928
Patch

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

&gt; Source/WebCore/platform/graphics/ios/FontCacheIOS.mm:484
&gt; +    Vector&lt;String&gt; fontFamilies;
&gt; +    CFArrayRef availableFontFamilies = CTFontManagerCopyAvailableFontFamilyNames();
&gt; +
&gt; +    for (CFIndex i = 0; i &lt; CFArrayGetCount(availableFontFamilies); ++i) {
&gt; +        CFStringRef fontName = static_cast&lt;CFStringRef&gt;(CFArrayGetValueAtIndex(availableFontFamilies, i));
&gt; +
&gt; +        if (CFGetTypeID(CFStringRef) != CFStringGetTypeID()) {
&gt; +            ASSERT_NOT_REACHED();
&gt; +            continue;
&gt; +        }
&gt; +
&gt; +        fontFamilies.append(fontName);
&gt; +    }
&gt; +
&gt; +    CFRelease(availableFontFamilies);
&gt; +
&gt; +    return fontFamilies;
&gt; +}

This one, with the original review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110666</commentid>
    <comment_count>15</comment_count>
      <attachid>257103</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-07-20 11:10:29 -0700</bug_when>
    <thetext>Created attachment 257103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110683</commentid>
    <comment_count>16</comment_count>
      <attachid>257103</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-07-20 11:30:22 -0700</bug_when>
    <thetext>Comment on attachment 257103
Patch

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

Patch looks good, just a few minor things to cleanup.

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:717
&gt; +    for (String familyName : systemFontFamilies)

I think this can be:

    for (const auto&amp; familyName : systemFontFamilies)

which is slightly simpler and more in line with WebKit style.

&gt; Source/WebCore/platform/graphics/mac/FontCacheMac.mm:533
&gt; +    // CFStringRef period = CFSTR(&quot;.&quot;);

Leftover comment.

&gt; Source/WebCore/platform/graphics/mac/FontCacheMac.mm:542
&gt; +        if (CFStringHasPrefix(fontName, CFSTR(&quot;.&quot;)))

Should have a comment here about why this is, because it may not be obvious to readers.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:76
&gt; +        this.supportedSystemFontFamilyNames = [];

This is actually putting an empty list on an instance of CSSCompletions.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:168
&gt; +            WebInspector.CSSCompletions.supportedSystemFontFamilyNames = fontFamilyNames;

And this is putting a list on the constructor.

We should start with empty lists on the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111094</commentid>
    <comment_count>17</comment_count>
      <attachid>257211</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-07-21 15:48:57 -0700</bug_when>
    <thetext>Created attachment 257211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111130</commentid>
    <comment_count>18</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-21 17:01:22 -0700</bug_when>
    <thetext>CoreText stuff looks fine to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111379</commentid>
    <comment_count>19</comment_count>
      <attachid>257211</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-07-22 12:29:31 -0700</bug_when>
    <thetext>Comment on attachment 257211
Patch

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

r=me

&gt; Source/WebCore/platform/graphics/mac/FontCacheMac.mm:541
&gt; +        // We dont&apos; want to make the hidden system fonts visible and since they

Typo: &quot;dont&apos;&quot; =&gt; &quot;don&apos;t&quot;

&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:166
&gt; +            WebInspector.CSSKeywordCompletions.addPropertyCompletionValues(&quot;font-family&quot;, fontFamilyNames);

Nice! We may also want to add this to &quot;font&quot; which, being a shorthand for font-family, would want to include these completion values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111661</commentid>
    <comment_count>20</comment_count>
      <attachid>257356</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-07-23 10:54:00 -0700</bug_when>
    <thetext>Created attachment 257356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111667</commentid>
    <comment_count>21</comment_count>
      <attachid>257356</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-07-23 11:11:14 -0700</bug_when>
    <thetext>Comment on attachment 257356
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111716</commentid>
    <comment_count>22</comment_count>
      <attachid>257356</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-23 13:25:29 -0700</bug_when>
    <thetext>Comment on attachment 257356
Patch

Clearing flags on attachment: 257356

Committed r187249: &lt;http://trac.webkit.org/changeset/187249&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111717</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-23 13:25:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111729</commentid>
    <comment_count>24</comment_count>
      <attachid>257356</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-07-23 13:46:45 -0700</bug_when>
    <thetext>Comment on attachment 257356
Patch

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

&gt; LayoutTests/inspector/css/get-system-fonts.html:6
&gt; +// Testing that we can get the fonts on the system and that the fonts contain some universal fonts (arial, times, etc).

The test description should live in the &lt;body&gt; of the test.

&gt; LayoutTests/inspector/css/get-system-fonts.html:9
&gt; +        return (fontFamilies.includes(fontFamily) ? &quot;PASS: Includes &quot; : &quot;FAIL: Missing &quot;) + fontFamily;

These test assertions seem a bit unusual. I am trying to wean the inspector tests towards a more traditional testcase and assertion-based approach where possible, rather than relying completely on reference output.

Part of this is to ensure that the only thing that changes between a passing and failing test execution is the &apos;verdict&apos;. The text following PASS or FAIL shouldn&apos;t change unless the test case has been aborted and no further assertions will run. For example, if there was a protocol error when getting font family names, the test should throw an exception and cause the test to abort.

InspectorTest.assert(fontFamilyNames.length &gt;= 5, &quot;At least 5 font family names should be returned.&quot;);
InspectorTest.assert(fontFamilyNames.includes(&quot;Arial&quot;), &quot;The font family names should always include Arial&quot;); // not true for other platforms, btw.

&gt; LayoutTests/inspector/css/get-system-fonts.html:23
&gt; +    CSSAgent.getSupportedSystemFontFamilyNames(fontFamilyNamesCallback);

Since this test doesn&apos;t exercise any model classes, it would be better to use the simpler &quot;protocol-test.js&quot; harness instead and put it in inspector-protocol/css/.

That will also allow you to use Promises rather than callbacks and the TestSuite classes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256928</attachid>
            <date>2015-07-16 14:46:08 -0700</date>
            <delta_ts>2015-07-17 00:43:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147009-20150716144459.patch</filename>
            <type>text/plain</type>
            <size>19270</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQ4YmU5OGNhZGYwNDRhZGUxYWViYTNlMThlMGRj
NTc1YmVhYTVhNWMuLjI2NmRjOTYzOTkzNDNmOTA4MTA4MGRhYTQyZGUxM2QzYTA5MWUwYjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA3LTE2ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgYSBmdW5jdGlvbiB0byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRl
ZCBzeXN0ZW0gZm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uOiBBZGRlZCBnZXRTdXBwb3J0ZWRD
U1NGb250RmFtaWx5TmFtZXMgZnVuY3Rpb24uCisKIDIwMTUtMDctMTUgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gRml4IGFybXY3IGJ1aWxkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDlmMWFiNzQ1MjNhMDYyNTU0NDdiOWMyNzRkMDExNGY4MWM0NTM0MzUuLjNk
ZjhkY2RmYzIyYjcyNzUyZDU5NDhkNzg2ZjkxOGY3Njk3MWQxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAxNS0wNy0xNiAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGEgZnVuY3Rpb24gdG8gQ1NTQ29tcGxldGlv
bnMgdG8gZ2V0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgc3lzdGVtIGZvbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcwMDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBpbnNwZWN0b3IvY3NzL2dl
dC1zeXN0ZW0tZm9udHMuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0
ZWRDU1NGb250RmFtaWx5TmFtZXMpOgorICAgICAgICBHZXRzIHRoZSBsaXN0IG9mIHN5c3RlbSBm
b250cyAoaW1wbGVtZW50ZWQgaW4gZWFjaCBwbGF0Zm9ybSkgYW5kIHJldHVybnMgdGhhdCBsaXN0
LgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6c3lzdGVtRm9udEZhbWlsaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9p
b3MvRm9udENhY2hlSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1G
b250RmFtaWxpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcyk6CisKIDIwMTUtMDct
MTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiB1cGRhdGUgJCQoKSB0byByZXR1cm4gYW4gQXJyYXkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hh
bmdlTG9nCmluZGV4IGVlNmFkYzQ3YzMyZDI5MjNhYWE5MTliYTQ3ZTZhNjVjMWU2ZWNlNjguLmVi
ODExZWEwMGMwMjA2MjNhMDFkN2MwYjNkNGUzOTFiZmY1ZDUyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA3LTE2ICBEZXZpbiBSb3Vzc28gIDxkcm91
c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgYSBmdW5jdGlvbiB0
byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRlZCBzeXN0ZW0gZm9udHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzAwOQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9CYXNlL01haW4uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5hY3RpdmF0ZUV4dHJhRG9tYWlucyk6CisgICAgICAgICogVXNl
ckludGVyZmFjZS9CYXNlL1Rlc3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTQ29tcGxldGlvbnMuZm9u
dEZhbWlseU5hbWVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRp
b25zLnJlcXVlc3RDU1NDb21wbGV0aW9ucyk6CisgICAgICAgIE5vdyBhbHNvIGdyYWJzIHRoZSBs
aXN0IG9mIHN5c3RlbSBmb250IGZhbWlseSBuYW1lcyBhbmQgYWRkcyB0aGF0IGxpc3QgdG8gQ1NT
Q29tcGxldGlvbnMuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVz
dENTU05hbWVDb21wbGV0aW9ucyk6IERlbGV0ZWQuCisKIDIwMTUtMDctMTUgIE1hdHQgQmFrZXIg
IDxtYXR0YmFrZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlc2l6aW5n
IFRpbWVsaW5lUnVsZXIgc2VsZWN0aW9uIG9uIGJvdGggc2lkZXMgZG9lc24ndCB3b3JrIHdpdGgg
c25hcHBpbmcgZW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9DU1MuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvQ1NTLmpzb24KaW5kZXggZjAyMjE2ZGJmMzY1MDAwYWY0ZTZiZjE1MWExNzhkMjZk
YTljYmUzZi4uMjE4ZTRmMjgyNDg1NzZkOTE4YjAzNWJjODUzMWNjMjM0ZjBkNTY2MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uCkBA
IC0zNDgsNiArMzQ4LDEzIEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyBh
bGwgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBuYW1lcy4iCiAgICAgICAgIH0sCiAgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImdldFN1cHBvcnRlZENTU0ZvbnRGYW1pbHlOYW1lcyIsCisg
ICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZvbnRG
YW1pbHlOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmci
IH0sICJkZXNjcmlwdGlvbiI6ICJTdXBwb3J0ZWQgZm9udCBmYW1pbGllcy4iIH0KKyAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyBhbGwgc3VwcG9ydGVk
IENTUyBmb250IGZhbWlsaWVzLiIKKyAgICAgICAgfSwKKyAgICAgICAgewogICAgICAgICAgICAg
Im5hbWUiOiAiZm9yY2VQc2V1ZG9TdGF0ZSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIsICIkcmVmIjogIkRPTS5Ob2RlSWQi
LCAiZGVzY3JpcHRpb24iOiAiVGhlIGVsZW1lbnQgaWQgZm9yIHdoaWNoIHRvIGZvcmNlIHRoZSBw
c2V1ZG8gc3RhdGUuIiB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKaW5kZXggM2QwNjIwODM0ZWIyOGNkZmQwNmI1OGNkNjYyNmJhM2MxNDhlNzE5
MS4uN2NhNzQ0NzE4ZjcyOGQ0Yjk5ZDYwOTkwZjcyNWEwMTc5NGM3MzFmNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAi
Rm9udENhY2hlLmgiCiAjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCkBAIC03MDgs
NiArNzA5LDE4IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yCiAgICAgY3NzUHJvcGVydGllcyA9
IFdURjo6bW92ZShwcm9wZXJ0aWVzKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3VwcG9ydGVkQ1NTRm9udEZhbWlseU5hbWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBmb250RmFtaWx5TmFtZXMpCit7CisgICAgYXV0
byBmYW1pbGllcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgp
OworCisgICAgVmVjdG9yPFN0cmluZz4gc3lzdGVtRm9udEZhbWlsaWVzID0gRm9udENhY2hlOjpz
aW5nbGV0b24oKS5zeXN0ZW1Gb250RmFtaWxpZXMoKTsKKworICAgIGZvciAoU3RyaW5nIGZhbWls
eU5hbWUgOiBzeXN0ZW1Gb250RmFtaWxpZXMpCisgICAgICAgIGZhbWlsaWVzLT5hZGRJdGVtKGZh
bWlseU5hbWUpOworCisgICAgZm9udEZhbWlseU5hbWVzID0gV1RGOjptb3ZlKGZhbWlsaWVzKTsK
K30KKwogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IEluc3BlY3RvckFycmF5JiBmb3JjZWRQ
c2V1ZG9DbGFzc2VzKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvbUFnZW50LT5hc3Nl
cnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCBhNjMwZmU1NjcyYTBjOGI0ZTYyNjFmMjRiNjUw
NTcyNjViMDZkNTExLi45NzMxNDcwMjQ3MTQyMTVmMjkxOGYxZTY3YjA2NmMxOTI5MWFiZTllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtMTE5
LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVy
cm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHJ1bGVJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGFkZFJ1bGUoRXJyb3JT
dHJpbmcmLCBpbnQgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0U3VwcG9ydGVkQ1NTRm9udEZhbWlseU5hbWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgZm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldE5hbWVkRmxvd0NvbGxlY3Rpb24oRXJyb3JTdHJpbmcm
LCBpbnQgZG9jdW1lbnROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4+JiByZXN1bHQpIG92ZXJyaWRlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IDMx
OTg5YWU1NGExY2NhNGMwYzVkYjFlYmFmN2M1YjhmMGRlNGM1ZGIuLmE0ZGMyNDFkZTdmMzQ1Yzgw
Mjk4YzllNGRlODNlOWI2Njg2OGI5ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgogCiAgICAgLy8g
VGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIFJlZlB0cjxG
b250PiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgVmVjdG9yPFN0cmluZz4g
c3lzdGVtRm9udEZhbWlsaWVzKCk7CiAKICAgICAvLyBBbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBw
bGF0Zm9ybS4KICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5
cGUuY3BwCmluZGV4IGIyMzI3MTY3OGRjMWU4NTIyZmRlYTFjMzVjMGU5OWM4YzE2NTk4NTUuLjcx
NmQ0ZDU0NzJjOWFlOTUyZTk2MTZiYzRlNGRjMzk2ODQ4MDQ2NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2Fj
aGVGcmVlVHlwZS5jcHAKQEAgLTk4LDYgKzk4LDEyIEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6
OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
CiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udERhdGEpOwogfQog
CitWZWN0b3I8U3RyaW5nPiBGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcygpCit7CisgICAg
VmVjdG9yPFN0cmluZz4gZm9udEZhbWlsaWVzOworICAgIHJldHVybiBmb250RmFtaWxpZXM7Cit9
CisKIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CiAgICAgLy8gV2Ugd2FudCB0byByZXR1
cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMgcHJldmVudGluZyBG
b250Q29uZmlnCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvRm9udENhY2hlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0ZvbnRDYWNoZUlPUy5tbQppbmRleCBjOTEzMWMyYzg0ODdjNGU3OWI2MmZkYzNhYTI1M2VkM2Rm
NjFhNzhlLi43NmM5MGQ2NzQ5ZWE2NmRlOGIxZWM5MzAyMzg1N2Y5ZDM0ODgxMjk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1Mu
bW0KQEAgLTQ2Miw2ICs0NjIsMjcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAgICByZXR1
cm4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbik7CiB9CiAKK1ZlY3RvcjxTdHJp
bmc+IEZvbnRDYWNoZTo6c3lzdGVtRm9udEZhbWlsaWVzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiBmb250RmFtaWxpZXM7CisgICAgQ0ZBcnJheVJlZiBhdmFpbGFibGVGb250RmFtaWxpZXMgPSBD
VEZvbnRNYW5hZ2VyQ29weUF2YWlsYWJsZUZvbnRGYW1pbHlOYW1lcygpOworCisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGF2YWlsYWJsZUZvbnRGYW1pbGllcyk7
ICsraSkgeworICAgICAgICBDRlN0cmluZ1JlZiBmb250TmFtZSA9IHN0YXRpY19jYXN0PENGU3Ry
aW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF2YWlsYWJsZUZvbnRGYW1pbGllcywgaSkp
OworCisgICAgICAgIGlmIChDRkdldFR5cGVJRChDRlN0cmluZ1JlZikgIT0gQ0ZTdHJpbmdHZXRU
eXBlSUQoKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvbnRGYW1pbGllcy5hcHBlbmQoZm9u
dE5hbWUpOworICAgIH0KKworICAgIENGUmVsZWFzZShhdmFpbGFibGVGb250RmFtaWxpZXMpOwor
CisgICAgcmV0dXJuIGZvbnRGYW1pbGllczsKK30KKwogUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICAv
LyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2Vk
IG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KaW5kZXggNmQ5YzRmOGI0NDIz
NTAwY2ExZDQzMTBhMDdlZTMyZTVlZDllNzA0Ny4uMDUzMDFlMjY1MmI0Y2ExZTkwZmNiMWJmNzQx
YWZhMzUzMTIxM2UzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENhY2hlTWFjLm1tCkBAIC01MjcsNiArNTI3LDE3IEBAIFJlZlB0cjxGb250
PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9u
dCk7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IEZvbnRDYWNoZTo6c3lzdGVtRm9udEZhbWlsaWVzKCkK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBmb250RmFtaWxpZXM7CisgICAgTlNGb250TWFuYWdlciAq
Zm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisKKyAgICBm
b3IgKE5TU3RyaW5nICphdmFpbGFibGVGYW1pbHkgaW4gW2ZvbnRNYW5hZ2VyIGF2YWlsYWJsZUZv
bnRGYW1pbGllc10pCisgICAgICAgIGZvbnRGYW1pbGllcy5hcHBlbmQoYXZhaWxhYmxlRmFtaWx5
KTsKKworICAgIHJldHVybiBmb250RmFtaWxpZXM7Cit9CisKIFJlZlB0cjxGb250PiBGb250Q2Fj
aGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAg
ICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBi
YXNlZCBvbiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYWNoZVdpbi5jcHAKaW5kZXggNDc5Y2I4NTZlMWU4MTI0ZDUyZjNiNWFkMzcwMTkxMWIw
NDZiNTVlMS4uODc4ZjcxNDA0MTMzMTdhZWExY2RiMzc3NzFjOWY3OGU3ZTQyNDEyMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHAKQEAgLTMwOSw2ICszMDksMTIgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVt
RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAgICBy
ZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwogfQogCitWZWN0b3I8U3RyaW5nPiBGb250Q2FjaGU6
OnN5c3RlbUZvbnRGYW1pbGllcygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZm9udEZhbWlsaWVz
OworICAgIHJldHVybiBmb250RmFtaWxpZXM7Cit9CisKIFJlZlB0cjxGb250PiBGb250Q2FjaGU6
OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBmb250LCBBdG9taWNTdHJpbmcmIG91dEZvbnRG
YW1pbHlOYW1lKQogewogICAgIEF0b21pY1N0cmluZyBmYW1pbHlOYW1lID0gU3RyaW5nKGZvbnQu
bGZGYWNlTmFtZSwgd2Nzbmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKaW5kZXgg
YjUwMmYyMGUwMjM5MjFkZTUzZWM2YzNjMDAwYjIwM2NlYWU4ODE1Yy4uYjRlYmYwZmRjNjc3MmY1
ODk3NzNmZjQ3MDIzOWQyYzgxNDBiMjQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpAQCAtOTAsNyArOTAsNyBAQCBXZWJJbnNwZWN0
b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAgICAgICBJbnNwZWN0b3JBZ2VudC5lbmFibGUoKTsK
IAogICAgIC8vIFBlcmZvcm0gb25lLXRpbWUgdGFza3MuCi0gICAgV2ViSW5zcGVjdG9yLkNTU0Nv
bXBsZXRpb25zLnJlcXVlc3RDU1NOYW1lQ29tcGxldGlvbnMoKTsKKyAgICBXZWJJbnNwZWN0b3Iu
Q1NTQ29tcGxldGlvbnMucmVxdWVzdENTU0NvbXBsZXRpb25zKCk7CiAgICAgdGhpcy5fZ2VuZXJh
dGVEaXNjbG9zdXJlVHJpYW5nbGVJbWFnZXMoKTsKIAogICAgIC8vIExpc3RlbiBmb3IgdGhlIFBy
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQgZXZlbnQgYmVmb3JlIHJlZ2lzdGVyaW5nIGZvciBldmVudHMg
c28gb3VyIGNvZGUgZ2V0cyBjYWxsZWQgYmVmb3JlIGFueSBtYW5hZ2VycyBvciBzaWRlYmFycy4K
QEAgLTUwMSw3ICs1MDEsNyBAQCBXZWJJbnNwZWN0b3IuYWN0aXZhdGVFeHRyYURvbWFpbnMgPSBm
dW5jdGlvbihkb21haW5zKQogCiAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuTm90aWZpY2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRl
ZCwgeyJkb21haW5zIjogZG9tYWluc30pOwogCi0gICAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRp
b25zLnJlcXVlc3RDU1NOYW1lQ29tcGxldGlvbnMoKTsKKyAgICBXZWJJbnNwZWN0b3IuQ1NTQ29t
cGxldGlvbnMucmVxdWVzdENTU0NvbXBsZXRpb25zKCk7CiAKICAgICB0aGlzLl91cGRhdGVSZWxv
YWRUb29sYmFyQnV0dG9uKCk7CiAgICAgdGhpcy5fdXBkYXRlRG93bmxvYWRUb29sYmFyQnV0dG9u
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNl
L1Rlc3QuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3Qu
anMKaW5kZXggYTBiZWRjMDk2ZjMwNWQ5MzVlMmFlNTI5ZWY0YjdlYTExN2MxZjRjMy4uMWVkODQ0
YTA3N2I4ZDMyNTE3MjVjNDQyNzhiYmZjMTk2MTZlNWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvVGVzdC5qcwpAQCAtNjksNyArNjksNyBAQCBX
ZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIENvbnNvbGVBZ2VudC5lbmFibGUo
KTsKIAogICAgIC8vIFBlcmZvcm0gb25lLXRpbWUgdGFza3MuCi0gICAgV2ViSW5zcGVjdG9yLkNT
U0NvbXBsZXRpb25zLnJlcXVlc3RDU1NOYW1lQ29tcGxldGlvbnMoKTsKKyAgICBXZWJJbnNwZWN0
b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVzdENTU0NvbXBsZXRpb25zKCk7CiAKICAgICAvLyBHbG9i
YWwgc2V0dGluZ3MuCiAgICAgdGhpcy5zaG93U2hhZG93RE9NU2V0dGluZyA9IG5ldyBXZWJJbnNw
ZWN0b3IuU2V0dGluZygic2hvdy1zaGFkb3ctZG9tIiwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlvbnMuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlv
bnMuanMKaW5kZXggNTU1MTVhOWNmMmFjYjVhMGI4ZDYyY2M5Yzg4YWNlNWRhODE1NjBmMy4uMzNl
YWM0YzhhOTQxOTU0MTQ0YjRlMjlhMmViZDAzNjFmODAxODE2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0
aW9ucy5qcwpAQCAtNzYsNyArNzYsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMgPSBj
bGFzcyBDU1NDb21wbGV0aW9ucwogCiAgICAgLy8gU3RhdGljCiAKLSAgICBzdGF0aWMgcmVxdWVz
dENTU05hbWVDb21wbGV0aW9ucygpCisgICAgc3RhdGljIHJlcXVlc3RDU1NDb21wbGV0aW9ucygp
CiAgICAgewogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLmNzc05hbWVD
b21wbGV0aW9ucykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1OCw4ICsxNTgsMTggQEAgV2Vi
SW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zID0gY2xhc3MgQ1NTQ29tcGxldGlvbnMKICAgICAgICAg
ICAgIHVwZGF0ZUNvZGVNaXJyb3JDU1NNb2RlKCJ0ZXh0L3gtc2NzcyIpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKHdpbmRvdy5DU1NBZ2VudCkKKyAgICAgICAgZnVuY3Rpb24gZm9udEZhbWls
eU5hbWVzQ2FsbGJhY2soZXJyb3IsIGZvbnRGYW1pbHlOYW1lcykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLmNzc0ZvbnRGYW1pbHlOYW1lcyA9IGZvbnRGYW1p
bHlOYW1lczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cuQ1NTQWdlbnQpIHsKICAg
ICAgICAgICAgIENTU0FnZW50LmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMocHJvcGVydHlOYW1l
c0NhbGxiYWNrKTsKKyAgICAgICAgICAgIENTU0FnZW50LmdldFN1cHBvcnRlZENTU0ZvbnRGYW1p
bHlOYW1lcyhmb250RmFtaWx5TmFtZXNDYWxsYmFjayk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICAvLyBQdWJsaWMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCA4MzQ2MDNmMDVmNDlhNTk1YTc2MmFiYmE4NmNkNDVjZWY4MDI3
YjMxLi5hM2IzOGE1MTNhNTI0YTc2NWU3OWUwNDliNzM4ZTkxZjE5ODcwMGIzIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTUtMDctMTYgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBhIGZ1bmN0aW9uIHRvIENTU0NvbXBsZXRp
b25zIHRvIGdldCBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHN5c3RlbSBmb250cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MDA5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2tpcCB0aGUgZ2V0LXN5c3RlbS1m
b250cyB0ZXN0IHVudGlsIGl0IGlzIGltcGxlbWVudGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Vm
bC9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zOgorCisgICAgICAg
IEFkZGVkIHRoZSBnZXQtc3lzdGVtLWZvbnRzIHRlc3QgdGhhdCByZXR1cm5zIHRoZSBsaXN0IG9m
IHN5c3RlbSBmb250cy4KKyAgICAgICAgKiBpbnNwZWN0b3IvY3NzL2dldC1zeXN0ZW0tZm9udHMt
ZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY3NzL2dldC1zeXN0ZW0tZm9udHMu
aHRtbDoKKwogMjAxNS0wNy0xNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVwZGF0ZSAkJCgpIHRvIHJldHVybiBhbiBBcnJh
eQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9nZXQtc3lzdGVtLWZvbnRz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5c3RlbS1mb250
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmUzMTYxYmUwYWExMDQwNjE2MzRiYjA5YTg0MDQ2
ZTM2NmJiNzc2YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3Mv
Z2V0LXN5c3RlbS1mb250cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACitIYXMgYXQgbGVh
c3QgNSBmb250czogdHJ1ZQorUEFTUzogSW5jbHVkZXMgQXJpYWwKK1BBU1M6IEluY2x1ZGVzIFRp
bWVzCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5c3RlbS1m
b250cy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9nZXQtc3lzdGVtLWZvbnRzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmNlZGZlNGRhYzBiZGQxY2FmOGM3MDkzOWE5ZDAxYmNjMzgxZWQzMgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5c3RlbS1m
b250cy5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisvLyBUZXN0
aW5nIHRoYXQgd2UgY2FuIGdldCB0aGUgZm9udHMgb24gdGhlIHN5c3RlbSBhbmQgdGhhdCB0aGUg
Zm9udHMgY29udGFpbiBzb21lIHVuaXZlcnNhbCBmb250cyAoYXJpYWwsIHRpbWVzLCBldGMpLgor
ZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBmdW5jdGlvbiBoYXNGb250RmFtaWx5KGZvbnRGYW1pbGll
cywgZm9udEZhbWlseSkgeworICAgICAgICByZXR1cm4gKGZvbnRGYW1pbGllcy5pbmNsdWRlcyhm
b250RmFtaWx5KSA/ICJQQVNTOiBJbmNsdWRlcyAiIDogIkZBSUw6IE1pc3NpbmcgIikgKyBmb250
RmFtaWx5OworICAgIH0KKworICAgIGZ1bmN0aW9uIGZvbnRGYW1pbHlOYW1lc0NhbGxiYWNrKGVy
cm9yLCBmb250RmFtaWx5TmFtZXMpIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoIWVy
cm9yLCAiRXJyb3IgaW4gZ2V0dGluZyBmb250IGZhbWlseSBuYW1lcy4iKTsKKworICAgICAgICBp
ZiAoIWVycm9yKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiSGFzIGF0IGxlYXN0
IDUgZm9udHM6ICIgKyAoZm9udEZhbWlseU5hbWVzLmxlbmd0aCA+PSA1KSk7CisgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmxvZyhoYXNGb250RmFtaWx5KGZvbnRGYW1pbHlOYW1lcywgIkFyaWFs
IikpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coaGFzRm9udEZhbWlseShmb250RmFt
aWx5TmFtZXMsICJUaW1lcyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIEluc3BlY3RvclRlc3Qu
Y29tcGxldGVUZXN0KCk7CisgICAgfQorICAgIENTU0FnZW50LmdldFN1cHBvcnRlZENTU0ZvbnRG
YW1pbHlOYW1lcyhmb250RmFtaWx5TmFtZXNDYWxsYmFjayk7Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj48L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDllMjdhYzYzZWNiMjZkZTEzOTc1
MmU0ZDYxYTEwZTZiNjA3MzVlNDkuLmY1NzNlMDhhMDRkZGI2NTFlY2EwNDQwNWE0OTBkMjlkYzE2
MGJhYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCkBAIC02
NjAsNiArNjYwLDggQEAgd2Via2l0Lm9yZy9iLzEzNjIyNyBtYXRobWwvdmVyeS1sYXJnZS1zdHJl
dGNoeS1vcGVyYXRvcnMuaHRtbCBbIENyYXNoIFRpbWVvdXQgUGEKIAogI3dlYmtpdC5vcmcvYi8x
NDIxNTggaW5zcGVjdG9yLXByb3RvY29sL2RvbS9yZW1vdmUtbXVsdGlwbGUtbm9kZXMuaHRtbCBb
IENyYXNoIFBhc3MgXQogCit3ZWJraXQub3JnL2IvMTQ3MDE4IGluc3BlY3Rvci9jc3MvZ2V0LXN5
c3RlbS1mb250cy5odG1sIFsgU2tpcCBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCiAjIEZMQUtZIFRFU1RTCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBiNGQ2NzIwZTBiMjA1
MTMwNGZjOTdiODUxYmJkNDExYTY2MjAxNmNmLi41N2NiYjExOTY5YTE2YjdhNTg3OTdiZmE4Y2Ux
MjhkMjJiMDg3NmY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9u
cwpAQCAtMTMxOSw2ICsxMzE5LDcgQEAgd2Via2l0Lm9yZy9iLzEzNzY5OCBtZWRpYS92aWRlby1j
b250cm9scy1kcmFnLmh0bWwgWyBUaW1lb3V0IF0KIAogd2Via2l0Lm9yZy9iLzEzOTM2MiBpbnNw
ZWN0b3IvY3NzL3BzZXVkby1lbGVtZW50LW1hdGNoZXMuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0
Lm9yZy9iLzEzOTM2MiBpbnNwZWN0b3IvY3NzL3NlbGVjdG9yLXNwZWNpZmljaXR5Lmh0bWwgWyBU
aW1lb3V0IFBhc3MgXQord2Via2l0Lm9yZy9iLzE0NzAxOCBpbnNwZWN0b3IvY3NzL2dldC1zeXN0
ZW0tZm9udHMuaHRtbCBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMTM5MzYzIG1lZGlhL21lZGlh
LWNvbnRyb2xzLXRpbWVsaW5lLXVwZGF0ZXMuaHRtbCBbIFRpbWVvdXQgXQogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGFkODJiN2M0NjdmOGU3MTJjZjM1
MzU0ZGQyZDk1YmFkZWQxMTQ4MGEuLjA2OWJjZGQ4NGIwYzgyMzYxMjZjNGJlY2ZjNDkwYWMwMjJh
YTczMDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zCkBAIC0y
MzU5LDYgKzIzNTksOCBAQCBpbnNwZWN0b3IvZG9tL2NvbnRlbnQtbm9kZS1yZWdpb24taW5mby5o
dG1sIFsgQ3Jhc2ggUGFzcyBGYWlsdXJlIFRpbWVvdXQgXQogaW5zcGVjdG9yL2Nzcy9zZWxlY3Rv
ci1zcGVjaWZpY2l0eS5odG1sIFsgU2tpcCBdCiBpbnNwZWN0b3IvY3NzL3BzZXVkby1lbGVtZW50
LW1hdGNoZXMuaHRtbCBbIFNraXAgXQogCit3ZWJraXQub3JnL2IvMTQ3MDE3IGluc3BlY3Rvci9j
c3MvZ2V0LXN5c3RlbS1mb250cy5odG1sIFsgU2tpcCBdCisKICMgSW5zcGVjdG9yIFByb3RvY29s
CiB3ZWJraXQub3JnL2IvMTQwNTEwIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci90ZXJtaW5h
dGUtZGVkaWNhdGVkLXdvcmtlci13aGlsZS1wYXVzZWQuaHRtbCBbIFNraXAgXSAgIyBDcmFzaGlu
ZwogaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3BhdXNlLW9uLWFzc2VydC5odG1sIFsgU2tp
cCBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256958</attachid>
            <date>2015-07-17 00:43:44 -0700</date>
            <delta_ts>2015-07-20 11:10:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147009-20150717004234.patch</filename>
            <type>text/plain</type>
            <size>19511</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQ4YmU5OGNhZGYwNDRhZGUxYWViYTNlMThlMGRj
NTc1YmVhYTVhNWMuLjAwZDRkMGU5MDMwYjc4OTJiN2QzYWYwZDA5YzAzOTFmZmI2NGE1YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA3LTE2ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgYSBmdW5jdGlvbiB0byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRl
ZCBzeXN0ZW0gZm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uOiBBZGRlZCBnZXRTdXBwb3J0ZWRT
eXN0ZW1Gb250RmFtaWx5TmFtZXMgZnVuY3Rpb24uCisKIDIwMTUtMDctMTUgIEJyZW50IEZ1bGdo
YW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gRml4IGFybXY3IGJ1aWxk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDlmMWFiNzQ1MjNhMDYyNTU0NDdiOWMyNzRkMDExNGY4MWM0NTM0MzUu
LmI2NDhmZDZlNjNhYzRiM2YwNjQ3NDgzNzE1NjI2MDM1YzI2ZmI1MmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNiBAQAorMjAxNS0wNy0xNiAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5j
b20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGEgZnVuY3Rpb24gdG8gQ1NTQ29tcGxl
dGlvbnMgdG8gZ2V0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgc3lzdGVtIGZvbnRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcwMDkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBpbnNwZWN0b3IvY3Nz
L2dldC1zeXN0ZW0tZm9udHMuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBw
b3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMpOgorICAgICAgICBHZXRzIHRoZSBsaXN0IG9mIHN5
c3RlbSBmb250cyAoaW1wbGVtZW50ZWQgaW4gZWFjaCBwbGF0Zm9ybSkgYW5kIHJldHVybnMgdGhh
dCBsaXN0LgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6c3lzdGVtRm9udEZhbWlsaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvRm9udENhY2hlSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpz
eXN0ZW1Gb250RmFtaWxpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q2FjaGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1p
bGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcyk6CisKIDIw
MTUtMDctMTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiB1cGRhdGUgJCQoKSB0byByZXR1cm4gYW4gQXJyYXkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCmluZGV4IGVlNmFkYzQ3YzMyZDI5MjNhYWE5MTliYTQ3ZTZhNjVjMWU2ZWNl
NjguLmViODExZWEwMGMwMjA2MjNhMDFkN2MwYjNkNGUzOTFiZmY1ZDUyYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA3LTE2ICBEZXZpbiBSb3Vzc28g
IDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgYSBmdW5j
dGlvbiB0byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRlZCBzeXN0ZW0g
Zm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NzAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9CYXNlL01haW4uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5hY3RpdmF0ZUV4dHJhRG9tYWlucyk6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9h
ZGVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTQ29tcGxldGlv
bnMuZm9udEZhbWlseU5hbWVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0Nv
bXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0aW9ucyk6CisgICAgICAgIE5vdyBhbHNvIGdyYWJz
IHRoZSBsaXN0IG9mIHN5c3RlbSBmb250IGZhbWlseSBuYW1lcyBhbmQgYWRkcyB0aGF0IGxpc3Qg
dG8gQ1NTQ29tcGxldGlvbnMuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMu
cmVxdWVzdENTU05hbWVDb21wbGV0aW9ucyk6IERlbGV0ZWQuCisKIDIwMTUtMDctMTUgIE1hdHQg
QmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJl
c2l6aW5nIFRpbWVsaW5lUnVsZXIgc2VsZWN0aW9uIG9uIGJvdGggc2lkZXMgZG9lc24ndCB3b3Jr
IHdpdGggc25hcHBpbmcgZW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KaW5kZXggZjAyMjE2ZGJmMzY1MDAwYWY0ZTZiZjE1MWEx
NzhkMjZkYTljYmUzZi4uMWIzMjY0YmY0ZGMzY2E5YTQ3NGMxMWNiYzc0MWY4NzVkYzQzNTk1OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1Mu
anNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5q
c29uCkBAIC0zNDgsNiArMzQ4LDEzIEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0
dXJucyBhbGwgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBuYW1lcy4iCiAgICAgICAgIH0sCiAgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlO
YW1lcyIsCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImZvbnRGYW1pbHlOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0sICJkZXNjcmlwdGlvbiI6ICJTdXBwb3J0ZWQgc3lzdGVtIGZvbnQgZmFtaWxp
ZXMuIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJldHVy
bnMgYWxsIHN1cHBvcnRlZCBzeXN0ZW0gZm9udCBmYW1pbHkgbmFtZXMuIgorICAgICAgICB9LAor
ICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJmb3JjZVBzZXVkb1N0YXRlIiwKICAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm9kZUlk
IiwgIiRyZWYiOiAiRE9NLk5vZGVJZCIsICJkZXNjcmlwdGlvbiI6ICJUaGUgZWxlbWVudCBpZCBm
b3Igd2hpY2ggdG8gZm9yY2UgdGhlIHBzZXVkbyBzdGF0ZS4iIH0sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCAzZDA2MjA4MzRlYjI4Y2Rm
ZDA2YjU4Y2Q2NjI2YmEzYzE0OGU3MTkxLi4zYzkwMGI0MmE3NWY3ZjhhYWE0YTcwNzNmNDM2OTE2
Y2VjOTZkMzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxh
Y2Vob2xkZXIuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJIVE1MSGVhZEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yRE9NQWdlbnQuaCIKQEAgLTcwOCw2ICs3MDksMTcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0
b3IKICAgICBjc3NQcm9wZXJ0aWVzID0gV1RGOjptb3ZlKHByb3BlcnRpZXMpOwogfQogCit2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoRXJy
b3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIGZv
bnRGYW1pbHlOYW1lcykKK3sKKyAgICBhdXRvIGZhbWlsaWVzID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBzeXN0ZW1G
b250RmFtaWxpZXMgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnN5c3RlbUZvbnRGYW1pbGllcygp
OworICAgIGZvciAoU3RyaW5nIGZhbWlseU5hbWUgOiBzeXN0ZW1Gb250RmFtaWxpZXMpCisgICAg
ICAgIGZhbWlsaWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOworCisgICAgZm9udEZhbWlseU5hbWVz
ID0gV1RGOjptb3ZlKGZhbWlsaWVzKTsKK30KKwogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9y
Y2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0
IEluc3BlY3RvckFycmF5JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQogewogICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBtX2RvbUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCBhNjMw
ZmU1NjcyYTBjOGI0ZTYyNjFmMjRiNjUwNTcyNjViMDZkNTExLi5lY2UwMjk5MzljY2RhMDEwOThj
MWFkZjM4Nzc2ZjYwZTYzMWFiNTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuaApAQCAtMTE5LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBpbnQgY29udGV4dE5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VwcG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVz
KEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYg
Zm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldE5hbWVk
Rmxvd0NvbGxlY3Rpb24oRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVk
Rmxvdz4+JiByZXN1bHQpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IDMxOTg5YWU1NGExY2NhNGMwYzVkYjFlYmFmN2M1Yjhm
MGRlNGM1ZGIuLjE5N2Y4NzhkYWFlZTRjYWU2ZDc0Njk1YTFhYjRkNmM3MjFjZDcxNTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xMTAsOCAr
MTEwLDkgQEAgY2xhc3MgRm9udENhY2hlIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgRm9udENhY2hlJiBzaW5nbGV0b24oKTsKIAotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGlt
cGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBs
ZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCiAgICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBGb250KiBvcmlnaW5h
bEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBzeXN0ZW1Gb250RmFtaWxpZXMo
KTsKIAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQg
cGxhdGZvcm1Jbml0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5kZXggYjIzMjcx
Njc4ZGMxZTg1MjJmZGVhMWMzNWMwZTk5YzhjMTY1OTg1NS4uYzdhN2VhOGMxNDE0NzdlY2RiYWFj
NTFlMzVlNWM1OGFiYmVlYjg1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAt
OTgsNiArOTgsMTMgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAgICByZXR1cm4gZm9udEZv
clBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250RGF0YSk7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IEZv
bnRDYWNoZTo6c3lzdGVtRm9udEZhbWlsaWVzKCkKK3sKKyAgICAvLyBGSVhNRTogPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzE0NzAxOD4gV2ViIEluc3BlY3RvcjogW0ZyZWV0eXBlXSBBbGxvdyBpbnNw
ZWN0b3IgdG8gcmV0cmlldmUgYSBsaXN0IG9mIHN5c3RlbSBmb250cworICAgIFZlY3RvcjxTdHJp
bmc+IGZvbnRGYW1pbGllczsKKyAgICByZXR1cm4gZm9udEZhbWlsaWVzOworfQorCiBSZWY8Rm9u
dD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKQogewogICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJh
Y2sgZm9udCBoZXJlLCBvdGhlcndpc2UgdGhlIGxvZ2ljIHByZXZlbnRpbmcgRm9udENvbmZpZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNo
ZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJ
T1MubW0KaW5kZXggYzkxMzFjMmM4NDg3YzRlNzliNjJmZGMzYWEyNTNlZDNkZjYxYTc4ZS4uMzFm
YTZkMzA2MGM1YTE2OGRiNjgzOTIyNTU3NTU2YmMxNTExODI0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCkBAIC00NjIs
NiArNDYyLDEzIEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAgcmV0dXJuIGxhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pOwogfQogCitWZWN0b3I8U3RyaW5nPiBGb250Q2Fj
aGU6OnN5c3RlbUZvbnRGYW1pbGllcygpCit7CisgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtp
dC5vcmcvYi8xNDcwMzM+IFdlYiBJbnNwZWN0b3I6IFtpT1NdIEFsbG93IGluc3BlY3RvciB0byBy
ZXRyaWV2ZSBhIGxpc3Qgb2Ygc3lzdGVtIGZvbnRzCisgICAgVmVjdG9yPFN0cmluZz4gZm9udEZh
bWlsaWVzOworICAgIHJldHVybiBmb250RmFtaWxpZXM7Cit9CisKIFJlZlB0cjxGb250PiBGb250
Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7
CiAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRj
aCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCmluZGV4IDZkOWM0
ZjhiNDQyMzUwMGNhMWQ0MzEwYTA3ZWUzMmU1ZWQ5ZTcwNDcuLjJhMDUyYjc0ZDJiYTg1Njk1MDJm
MzYxNTVhYjUwMzI4MGFhYTUxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQpAQCAtNTI3LDYgKzUyNywxNiBAQCBSZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVy
bmF0ZUZvbnQpOwogfQogCitWZWN0b3I8U3RyaW5nPiBGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1p
bGllcygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZm9udEZhbWlsaWVzOworICAgIE5TRm9udE1h
bmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwor
ICAgIGZvciAoTlNTdHJpbmcgKmF2YWlsYWJsZUZhbWlseSBpbiBbZm9udE1hbmFnZXIgYXZhaWxh
YmxlRm9udEZhbWlsaWVzXSkKKyAgICAgICAgZm9udEZhbWlsaWVzLmFwcGVuZChhdmFpbGFibGVG
YW1pbHkpOworCisgICAgcmV0dXJuIGZvbnRGYW1pbGllczsKK30KKwogUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
IHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1h
dGNoIGJhc2VkIG9uIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCA0NzljYjg1NmUxZTgxMjRkNTJmM2I1YWQzNzAx
OTExYjA0NmI1NWUxLi5hZmE0ODQxZWRmOTY5ZGYyZTRkYjE1NDU1MGNhMWZkOGMyMzE2MTU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENh
Y2hlV2luLmNwcApAQCAtMzA5LDYgKzMwOSwxMyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpz
eXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcgog
ICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IEZvbnRD
YWNoZTo6c3lzdGVtRm9udEZhbWlsaWVzKCkKK3sKKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE0NzAxNz4gV2ViIEluc3BlY3RvcjogW1dpbl0gQWxsb3cgaW5zcGVjdG9yIHRv
IHJldHJpZXZlIGEgbGlzdCBvZiBzeXN0ZW0gZm9udHMKKyAgICBWZWN0b3I8U3RyaW5nPiBmb250
RmFtaWxpZXM7CisgICAgcmV0dXJuIGZvbnRGYW1pbGllczsKK30KKwogUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0b21pY1N0cmluZyYg
b3V0Rm9udEZhbWlseU5hbWUpCiB7CiAgICAgQXRvbWljU3RyaW5nIGZhbWlseU5hbWUgPSBTdHJp
bmcoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2Uv
TWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5q
cwppbmRleCBiNTAyZjIwZTAyMzkyMWRlNTNlYzZjM2MwMDBiMjAzY2VhZTg4MTVjLi5iNGViZjBm
ZGM2NzcyZjU4OTc3M2ZmNDcwMjM5ZDJjODE0MGIyNDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC05MCw3ICs5MCw3IEBAIFdl
Ykluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgICAgIEluc3BlY3RvckFnZW50LmVu
YWJsZSgpOwogCiAgICAgLy8gUGVyZm9ybSBvbmUtdGltZSB0YXNrcy4KLSAgICBXZWJJbnNwZWN0
b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVzdENTU05hbWVDb21wbGV0aW9ucygpOworICAgIFdlYklu
c3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTQ29tcGxldGlvbnMoKTsKICAgICB0aGlz
Ll9nZW5lcmF0ZURpc2Nsb3N1cmVUcmlhbmdsZUltYWdlcygpOwogCiAgICAgLy8gTGlzdGVuIGZv
ciB0aGUgUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCBldmVudCBiZWZvcmUgcmVnaXN0ZXJpbmcgZm9y
IGV2ZW50cyBzbyBvdXIgY29kZSBnZXRzIGNhbGxlZCBiZWZvcmUgYW55IG1hbmFnZXJzIG9yIHNp
ZGViYXJzLgpAQCAtNTAxLDcgKzUwMSw3IEBAIFdlYkluc3BlY3Rvci5hY3RpdmF0ZUV4dHJhRG9t
YWlucyA9IGZ1bmN0aW9uKGRvbWFpbnMpCiAKICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Ob3RpZmljYXRpb24uRXh0cmFEb21haW5z
QWN0aXZhdGVkLCB7ImRvbWFpbnMiOiBkb21haW5zfSk7CiAKLSAgICBXZWJJbnNwZWN0b3IuQ1NT
Q29tcGxldGlvbnMucmVxdWVzdENTU05hbWVDb21wbGV0aW9ucygpOworICAgIFdlYkluc3BlY3Rv
ci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTQ29tcGxldGlvbnMoKTsKIAogICAgIHRoaXMuX3Vw
ZGF0ZVJlbG9hZFRvb2xiYXJCdXR0b24oKTsKICAgICB0aGlzLl91cGRhdGVEb3dubG9hZFRvb2xi
YXJCdXR0b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0Jhc2UvVGVzdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jh
c2UvVGVzdC5qcwppbmRleCBhMGJlZGMwOTZmMzA1ZDkzNWUyYWU1MjllZjRiN2VhMTE3YzFmNGMz
Li4xZWQ4NDRhMDc3YjhkMzI1MTcyNWM0NDI3OGJiZmMxOTYxNmU1YzUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzCkBAIC02OSw3ICs2
OSw3IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgQ29uc29sZUFnZW50
LmVuYWJsZSgpOwogCiAgICAgLy8gUGVyZm9ybSBvbmUtdGltZSB0YXNrcy4KLSAgICBXZWJJbnNw
ZWN0b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVzdENTU05hbWVDb21wbGV0aW9ucygpOworICAgIFdl
Ykluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTQ29tcGxldGlvbnMoKTsKIAogICAg
IC8vIEdsb2JhbCBzZXR0aW5ncy4KICAgICB0aGlzLnNob3dTaGFkb3dET01TZXR0aW5nID0gbmV3
IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJzaG93LXNoYWRvdy1kb20iLCB0cnVlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0
aW9ucy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1ND
b21wbGV0aW9ucy5qcwppbmRleCA1NTUxNWE5Y2YyYWNiNWEwYjhkNjJjYzljODhhY2U1ZGE4MTU2
MGYzLi5lOTUxNWU1ZjQ0NjBiOTM5M2NmNTRlOTNhNmFjNTFhYzM3ODA3NzA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlv
bnMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NT
U0NvbXBsZXRpb25zLmpzCkBAIC03MiwxMSArNzIsMTMgQEAgV2ViSW5zcGVjdG9yLkNTU0NvbXBs
ZXRpb25zID0gY2xhc3MgQ1NTQ29tcGxldGlvbnMKICAgICAgICAgdGhpcy5fdmFsdWVzLnNvcnQo
KTsKIAogICAgICAgICB0aGlzLl9hY2NlcHRFbXB0eVByZWZpeCA9IGFjY2VwdEVtcHR5UHJlZml4
OworCisgICAgICAgIHRoaXMuc3VwcG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVzID0gW107CiAg
ICAgfQogCiAgICAgLy8gU3RhdGljCiAKLSAgICBzdGF0aWMgcmVxdWVzdENTU05hbWVDb21wbGV0
aW9ucygpCisgICAgc3RhdGljIHJlcXVlc3RDU1NDb21wbGV0aW9ucygpCiAgICAgewogICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLmNzc05hbWVDb21wbGV0aW9ucykKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTE1OCw4ICsxNjAsMjAgQEAgV2ViSW5zcGVjdG9yLkNTU0Nv
bXBsZXRpb25zID0gY2xhc3MgQ1NTQ29tcGxldGlvbnMKICAgICAgICAgICAgIHVwZGF0ZUNvZGVN
aXJyb3JDU1NNb2RlKCJ0ZXh0L3gtc2NzcyIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdp
bmRvdy5DU1NBZ2VudCkKKyAgICAgICAgZnVuY3Rpb24gZm9udEZhbWlseU5hbWVzQ2FsbGJhY2so
ZXJyb3IsIGZvbnRGYW1pbHlOYW1lcykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm9y
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkNT
U0NvbXBsZXRpb25zLnN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcyA9IGZvbnRGYW1pbHlO
YW1lczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cuQ1NTQWdlbnQpIHsKICAgICAg
ICAgICAgIENTU0FnZW50LmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMocHJvcGVydHlOYW1lc0Nh
bGxiYWNrKTsKKworICAgICAgICAgICAgaWYgKENTU0FnZW50LmdldFN1cHBvcnRlZFN5c3RlbUZv
bnRGYW1pbHlOYW1lcykKKyAgICAgICAgICAgICAgICBDU1NBZ2VudC5nZXRTdXBwb3J0ZWRTeXN0
ZW1Gb250RmFtaWx5TmFtZXMoZm9udEZhbWlseU5hbWVzQ2FsbGJhY2spOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gUHVibGljCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODM0NjAzZjA1ZjQ5YTU5NWE3NjJhYmJhODZj
ZDQ1Y2VmODAyN2IzMS4uYTNiMzhhNTEzYTUyNGE3NjVlNzllMDQ5YjczOGU5MWYxOTg3MDBiMyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE1LTA3LTE2ICBEZXZpbiBSb3Vzc28gIDxkcm91c3Nv
QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgYSBmdW5jdGlvbiB0byBD
U1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRlZCBzeXN0ZW0gZm9udHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzAwOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNraXAgdGhlIGdl
dC1zeXN0ZW0tZm9udHMgdGVzdCB1bnRpbCBpdCBpcyBpbXBsZW1lbnRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVz
dEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoK
KworICAgICAgICBBZGRlZCB0aGUgZ2V0LXN5c3RlbS1mb250cyB0ZXN0IHRoYXQgcmV0dXJucyB0
aGUgbGlzdCBvZiBzeXN0ZW0gZm9udHMuCisgICAgICAgICogaW5zcGVjdG9yL2Nzcy9nZXQtc3lz
dGVtLWZvbnRzLWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Nzcy9nZXQtc3lz
dGVtLWZvbnRzLmh0bWw6CisKIDIwMTUtMDctMTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB1cGRhdGUgJCQoKSB0byByZXR1
cm4gYW4gQXJyYXkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5
c3RlbS1mb250cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL2dldC1z
eXN0ZW0tZm9udHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlMzE2MWJlMGFhMTA0MDYxNjM0
YmIwOWE4NDA0NmUzNjZiYjc3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvY3NzL2dldC1zeXN0ZW0tZm9udHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAor
SGFzIGF0IGxlYXN0IDUgZm9udHM6IHRydWUKK1BBU1M6IEluY2x1ZGVzIEFyaWFsCitQQVNTOiBJ
bmNsdWRlcyBUaW1lcworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL2dl
dC1zeXN0ZW0tZm9udHMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5c3Rl
bS1mb250cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzZWYyNzRjNThhY2M3MDVhY2JmY2VlMjZmNjM4Zjg3
MDY4NjJiODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL2dl
dC1zeXN0ZW0tZm9udHMuaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorLy8gVGVzdGluZyB0aGF0IHdlIGNhbiBnZXQgdGhlIGZvbnRzIG9uIHRoZSBzeXN0ZW0gYW5k
IHRoYXQgdGhlIGZvbnRzIGNvbnRhaW4gc29tZSB1bml2ZXJzYWwgZm9udHMgKGFyaWFsLCB0aW1l
cywgZXRjKS4KK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgZnVuY3Rpb24gaGFzRm9udEZhbWlseShm
b250RmFtaWxpZXMsIGZvbnRGYW1pbHkpIHsKKyAgICAgICAgcmV0dXJuIChmb250RmFtaWxpZXMu
aW5jbHVkZXMoZm9udEZhbWlseSkgPyAiUEFTUzogSW5jbHVkZXMgIiA6ICJGQUlMOiBNaXNzaW5n
ICIpICsgZm9udEZhbWlseTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmb250RmFtaWx5TmFtZXND
YWxsYmFjayhlcnJvciwgZm9udEZhbWlseU5hbWVzKSB7CisgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KCFlcnJvciwgIkVycm9yIGluIGdldHRpbmcgZm9udCBmYW1pbHkgbmFtZXMuIik7CisK
KyAgICAgICAgaWYgKCFlcnJvcikgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkhh
cyBhdCBsZWFzdCA1IGZvbnRzOiAiICsgKGZvbnRGYW1pbHlOYW1lcy5sZW5ndGggPj0gNSkpOwor
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coaGFzRm9udEZhbWlseShmb250RmFtaWx5TmFt
ZXMsICJBcmlhbCIpKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKGhhc0ZvbnRGYW1p
bHkoZm9udEZhbWlseU5hbWVzLCAiVGltZXMiKSk7CisgICAgICAgIH0KKworICAgICAgICBJbnNw
ZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgIH0KKyAgICBDU1NBZ2VudC5nZXRTdXBwb3J0
ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoZm9udEZhbWlseU5hbWVzQ2FsbGJhY2spOworfQorPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+PC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA5ZTI3YWM2
M2VjYjI2ZGUxMzk3NTJlNGQ2MWExMGU2YjYwNzM1ZTQ5Li5mNTczZTA4YTA0ZGRiNjUxZWNhMDQ0
MDVhNDkwZDI5ZGMxNjBiYWJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwv
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtNjYwLDYgKzY2MCw4IEBAIHdlYmtpdC5vcmcvYi8xMzYyMjcgbWF0aG1sL3Zl
cnktbGFyZ2Utc3RyZXRjaHktb3BlcmF0b3JzLmh0bWwgWyBDcmFzaCBUaW1lb3V0IFBhCiAKICN3
ZWJraXQub3JnL2IvMTQyMTU4IGluc3BlY3Rvci1wcm90b2NvbC9kb20vcmVtb3ZlLW11bHRpcGxl
LW5vZGVzLmh0bWwgWyBDcmFzaCBQYXNzIF0KIAord2Via2l0Lm9yZy9iLzE0NzAxOCBpbnNwZWN0
b3IvY3NzL2dldC1zeXN0ZW0tZm9udHMuaHRtbCBbIFNraXAgXQorCiAjLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwogIyBGTEFLWSBURVNUUwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0
YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
YjRkNjcyMGUwYjIwNTEzMDRmYzk3Yjg1MWJiZDQxMWE2NjIwMTZjZi4uNTdjYmIxMTk2OWExNmI3
YTU4Nzk3YmZhOGNlMTI4ZDIyYjA4NzZmNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTEzMTksNiArMTMxOSw3IEBAIHdlYmtpdC5vcmcvYi8xMzc2OTgg
bWVkaWEvdmlkZW8tY29udHJvbHMtZHJhZy5odG1sIFsgVGltZW91dCBdCiAKIHdlYmtpdC5vcmcv
Yi8xMzkzNjIgaW5zcGVjdG9yL2Nzcy9wc2V1ZG8tZWxlbWVudC1tYXRjaGVzLmh0bWwgWyBUaW1l
b3V0IF0KIHdlYmtpdC5vcmcvYi8xMzkzNjIgaW5zcGVjdG9yL2Nzcy9zZWxlY3Rvci1zcGVjaWZp
Y2l0eS5odG1sIFsgVGltZW91dCBQYXNzIF0KK3dlYmtpdC5vcmcvYi8xNDcwMTggaW5zcGVjdG9y
L2Nzcy9nZXQtc3lzdGVtLWZvbnRzLmh0bWwgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzEzOTM2
MyBtZWRpYS9tZWRpYS1jb250cm9scy10aW1lbGluZS11cGRhdGVzLmh0bWwgWyBUaW1lb3V0IF0K
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhZDgyYjdj
NDY3ZjhlNzEyY2YzNTM1NGRkMmQ5NWJhZGVkMTE0ODBhLi4wNjliY2RkODRiMGM4MjM2MTI2YzRi
ZWNmYzQ5MGFjMDIyYWE3MzA3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVj
dGF0aW9ucwpAQCAtMjM1OSw2ICsyMzU5LDggQEAgaW5zcGVjdG9yL2RvbS9jb250ZW50LW5vZGUt
cmVnaW9uLWluZm8uaHRtbCBbIENyYXNoIFBhc3MgRmFpbHVyZSBUaW1lb3V0IF0KIGluc3BlY3Rv
ci9jc3Mvc2VsZWN0b3Itc3BlY2lmaWNpdHkuaHRtbCBbIFNraXAgXQogaW5zcGVjdG9yL2Nzcy9w
c2V1ZG8tZWxlbWVudC1tYXRjaGVzLmh0bWwgWyBTa2lwIF0KIAord2Via2l0Lm9yZy9iLzE0NzAx
NyBpbnNwZWN0b3IvY3NzL2dldC1zeXN0ZW0tZm9udHMuaHRtbCBbIFNraXAgXQorCiAjIEluc3Bl
Y3RvciBQcm90b2NvbAogd2Via2l0Lm9yZy9iLzE0MDUxMCBpbnNwZWN0b3ItcHJvdG9jb2wvZGVi
dWdnZXIvdGVybWluYXRlLWRlZGljYXRlZC13b3JrZXItd2hpbGUtcGF1c2VkLmh0bWwgWyBTa2lw
IF0gICMgQ3Jhc2hpbmcKIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9wYXVzZS1vbi1hc3Nl
cnQuaHRtbCBbIFNraXAgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257103</attachid>
            <date>2015-07-20 11:10:29 -0700</date>
            <delta_ts>2015-07-21 15:48:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147009-20150720110916.patch</filename>
            <type>text/plain</type>
            <size>19963</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQ4YmU5OGNhZGYwNDRhZGUxYWViYTNlMThlMGRj
NTc1YmVhYTVhNWMuLjAwZDRkMGU5MDMwYjc4OTJiN2QzYWYwZDA5YzAzOTFmZmI2NGE1YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA3LTE2ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgYSBmdW5jdGlvbiB0byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRl
ZCBzeXN0ZW0gZm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uOiBBZGRlZCBnZXRTdXBwb3J0ZWRT
eXN0ZW1Gb250RmFtaWx5TmFtZXMgZnVuY3Rpb24uCisKIDIwMTUtMDctMTUgIEJyZW50IEZ1bGdo
YW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gRml4IGFybXY3IGJ1aWxk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDlmMWFiNzQ1MjNhMDYyNTU0NDdiOWMyNzRkMDExNGY4MWM0NTM0MzUu
LjU5OTc0YWU2MmRjYjBhMDU4ZWQ0NDEwYzBmYzAxNWIzODExNDAxMDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNiBAQAorMjAxNS0wNy0yMCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5j
b20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGEgZnVuY3Rpb24gdG8gQ1NTQ29tcGxl
dGlvbnMgdG8gZ2V0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgc3lzdGVtIGZvbnRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcwMDkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBpbnNwZWN0b3IvY3Nz
L2dldC1zeXN0ZW0tZm9udHMuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBw
b3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMpOgorICAgICAgICBHZXRzIHRoZSBsaXN0IG9mIHN5
c3RlbSBmb250cyAoaW1wbGVtZW50ZWQgaW4gZWFjaCBwbGF0Zm9ybSkgYW5kIHJldHVybnMgdGhh
dCBsaXN0LgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6c3lzdGVtRm9udEZhbWlsaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvRm9udENhY2hlSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpz
eXN0ZW1Gb250RmFtaWxpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q2FjaGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1p
bGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcyk6CisKIDIw
MTUtMDctMTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiB1cGRhdGUgJCQoKSB0byByZXR1cm4gYW4gQXJyYXkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCmluZGV4IGVlNmFkYzQ3YzMyZDI5MjNhYWE5MTliYTQ3ZTZhNjVjMWU2ZWNl
NjguLmViODExZWEwMGMwMjA2MjNhMDFkN2MwYjNkNGUzOTFiZmY1ZDUyYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA3LTE2ICBEZXZpbiBSb3Vzc28g
IDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgYSBmdW5j
dGlvbiB0byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRlZCBzeXN0ZW0g
Zm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NzAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9CYXNlL01haW4uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5hY3RpdmF0ZUV4dHJhRG9tYWlucyk6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9h
ZGVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTQ29tcGxldGlv
bnMuZm9udEZhbWlseU5hbWVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0Nv
bXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0aW9ucyk6CisgICAgICAgIE5vdyBhbHNvIGdyYWJz
IHRoZSBsaXN0IG9mIHN5c3RlbSBmb250IGZhbWlseSBuYW1lcyBhbmQgYWRkcyB0aGF0IGxpc3Qg
dG8gQ1NTQ29tcGxldGlvbnMuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMu
cmVxdWVzdENTU05hbWVDb21wbGV0aW9ucyk6IERlbGV0ZWQuCisKIDIwMTUtMDctMTUgIE1hdHQg
QmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJl
c2l6aW5nIFRpbWVsaW5lUnVsZXIgc2VsZWN0aW9uIG9uIGJvdGggc2lkZXMgZG9lc24ndCB3b3Jr
IHdpdGggc25hcHBpbmcgZW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KaW5kZXggZjAyMjE2ZGJmMzY1MDAwYWY0ZTZiZjE1MWEx
NzhkMjZkYTljYmUzZi4uMWIzMjY0YmY0ZGMzY2E5YTQ3NGMxMWNiYzc0MWY4NzVkYzQzNTk1OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1Mu
anNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5q
c29uCkBAIC0zNDgsNiArMzQ4LDEzIEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0
dXJucyBhbGwgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBuYW1lcy4iCiAgICAgICAgIH0sCiAgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlO
YW1lcyIsCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImZvbnRGYW1pbHlOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0sICJkZXNjcmlwdGlvbiI6ICJTdXBwb3J0ZWQgc3lzdGVtIGZvbnQgZmFtaWxp
ZXMuIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJldHVy
bnMgYWxsIHN1cHBvcnRlZCBzeXN0ZW0gZm9udCBmYW1pbHkgbmFtZXMuIgorICAgICAgICB9LAor
ICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJmb3JjZVBzZXVkb1N0YXRlIiwKICAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm9kZUlk
IiwgIiRyZWYiOiAiRE9NLk5vZGVJZCIsICJkZXNjcmlwdGlvbiI6ICJUaGUgZWxlbWVudCBpZCBm
b3Igd2hpY2ggdG8gZm9yY2UgdGhlIHBzZXVkbyBzdGF0ZS4iIH0sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCAzZDA2MjA4MzRlYjI4Y2Rm
ZDA2YjU4Y2Q2NjI2YmEzYzE0OGU3MTkxLi4zYzkwMGI0MmE3NWY3ZjhhYWE0YTcwNzNmNDM2OTE2
Y2VjOTZkMzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxh
Y2Vob2xkZXIuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJIVE1MSGVhZEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yRE9NQWdlbnQuaCIKQEAgLTcwOCw2ICs3MDksMTcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0
b3IKICAgICBjc3NQcm9wZXJ0aWVzID0gV1RGOjptb3ZlKHByb3BlcnRpZXMpOwogfQogCit2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoRXJy
b3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIGZv
bnRGYW1pbHlOYW1lcykKK3sKKyAgICBhdXRvIGZhbWlsaWVzID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBzeXN0ZW1G
b250RmFtaWxpZXMgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnN5c3RlbUZvbnRGYW1pbGllcygp
OworICAgIGZvciAoU3RyaW5nIGZhbWlseU5hbWUgOiBzeXN0ZW1Gb250RmFtaWxpZXMpCisgICAg
ICAgIGZhbWlsaWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOworCisgICAgZm9udEZhbWlseU5hbWVz
ID0gV1RGOjptb3ZlKGZhbWlsaWVzKTsKK30KKwogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9y
Y2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0
IEluc3BlY3RvckFycmF5JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQogewogICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBtX2RvbUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCBhNjMw
ZmU1NjcyYTBjOGI0ZTYyNjFmMjRiNjUwNTcyNjViMDZkNTExLi5lY2UwMjk5MzljY2RhMDEwOThj
MWFkZjM4Nzc2ZjYwZTYzMWFiNTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuaApAQCAtMTE5LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBpbnQgY29udGV4dE5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VwcG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVz
KEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYg
Zm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldE5hbWVk
Rmxvd0NvbGxlY3Rpb24oRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVk
Rmxvdz4+JiByZXN1bHQpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IDMxOTg5YWU1NGExY2NhNGMwYzVkYjFlYmFmN2M1Yjhm
MGRlNGM1ZGIuLjE3NmEzMzAyYWIzMDE5MTgzNzdkYWFjNGUzZmM5YThmN2NjNDQwYWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xMTAsMTAg
KzExMCw5IEBAIGNsYXNzIEZvbnRDYWNoZSB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIEZvbnRDYWNoZSYgc2luZ2xldG9uKCk7CiAKLSAgICAvLyBUaGlzIG1ldGhvZCBpcyBp
bXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1w
bGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIFJlZlB0cjxGb250PiBzeXN0ZW1GYWxsYmFj
a0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udCogb3JpZ2lu
YWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBBbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBwbGF0
Zm9ybS4KKyAgICBWZWN0b3I8U3RyaW5nPiBzeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAgICB2b2lk
IHBsYXRmb3JtSW5pdCgpOwogCiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJl
ZVR5cGUuY3BwCmluZGV4IGIyMzI3MTY3OGRjMWU4NTIyZmRlYTFjMzVjMGU5OWM4YzE2NTk4NTUu
LmM3YTdlYThjMTQxNDc3ZWNkYmFhYzUxZTM1ZTVjNThhYmJlZWI4NWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTk4LDYgKzk4LDEzIEBAIFJlZlB0cjxGb250PiBGb250Q2Fj
aGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udERhdGEpOwog
fQogCitWZWN0b3I8U3RyaW5nPiBGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcygpCit7Cisg
ICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDcwMTg+IFdlYiBJbnNwZWN0b3I6
IFtGcmVldHlwZV0gQWxsb3cgaW5zcGVjdG9yIHRvIHJldHJpZXZlIGEgbGlzdCBvZiBzeXN0ZW0g
Zm9udHMKKyAgICBWZWN0b3I8U3RyaW5nPiBmb250RmFtaWxpZXM7CisgICAgcmV0dXJuIGZvbnRG
YW1pbGllczsKK30KKwogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICAvLyBXZSB3
YW50IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBw
cmV2ZW50aW5nIEZvbnRDb25maWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCmluZGV4IGM5MTMxYzJjODQ4N2M0ZTc5YjYyZmRj
M2FhMjUzZWQzZGY2MWE3OGUuLjMxZmE2ZDMwNjBjNWExNjhkYjY4MzkyMjU1NzU1NmJjMTUxMTgy
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250
Q2FjaGVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Zv
bnRDYWNoZUlPUy5tbQpAQCAtNDYyLDYgKzQ2MiwxMyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cgogICAgIHJldHVybiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKIH0KIAor
VmVjdG9yPFN0cmluZz4gRm9udENhY2hlOjpzeXN0ZW1Gb250RmFtaWxpZXMoKQoreworICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ3MDMzPiBXZWIgSW5zcGVjdG9yOiBbaU9T
XSBBbGxvdyBpbnNwZWN0b3IgdG8gcmV0cmlldmUgYSBsaXN0IG9mIHN5c3RlbSBmb250cworICAg
IFZlY3RvcjxTdHJpbmc+IGZvbnRGYW1pbGllczsKKyAgICByZXR1cm4gZm9udEZhbWlsaWVzOwor
fQorCiBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3By
aWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRz
IGluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENhY2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
YWNoZU1hYy5tbQppbmRleCA2ZDljNGY4YjQ0MjM1MDBjYTFkNDMxMGEwN2VlMzJlNWVkOWU3MDQ3
Li5jNTI1YmJhNjA4ZWU2NTc3NzBjYzI1NDcyY2I1NmUzM2JiY2VjNGEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KQEAg
LTUyNyw2ICs1MjcsMjUgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAgICByZXR1cm4gZm9u
dEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAorVmVjdG9yPFN0cmluZz4gRm9u
dENhY2hlOjpzeXN0ZW1Gb250RmFtaWxpZXMoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGZvbnRG
YW1pbGllczsKKyAgICAvLyBDRlN0cmluZ1JlZiBwZXJpb2QgPSBDRlNUUigiLiIpOworICAgIFJl
dGFpblB0cjxDRkFycmF5UmVmPiBhdmFpbGFibGVGb250RmFtaWxpZXMgPSBhZG9wdENGKENURm9u
dE1hbmFnZXJDb3B5QXZhaWxhYmxlRm9udEZhbWlseU5hbWVzKCkpOworICAgIENGSW5kZXggY291
bnQgPSBDRkFycmF5R2V0Q291bnQoYXZhaWxhYmxlRm9udEZhbWlsaWVzLmdldCgpKTsKKyAgICBm
b3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENGU3RyaW5nUmVm
IGZvbnROYW1lID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoYXZhaWxhYmxlRm9udEZhbWlsaWVzLmdldCgpLCBpKSk7CisgICAgICAgIGlmIChDRkdldFR5
cGVJRChmb250TmFtZSkgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoQ0ZTdHJpbmdIYXNQcmVmaXgoZm9udE5hbWUsIENGU1RSKCIuIikpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGZvbnRGYW1pbGllcy5hcHBlbmQoZm9udE5hbWUpOwor
ICAgIH0KKyAgICByZXR1cm4gZm9udEZhbWlsaWVzOworfQorCiBSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewog
ICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2gg
YmFzZWQgb24gCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IDQ3OWNiODU2ZTFlODEyNGQ1MmYzYjVhZDM3MDE5MTFi
MDQ2YjU1ZTEuLmFmYTQ4NDFlZGY5NjlkZjJlNGRiMTU0NTUwY2ExZmQ4YzIzMTYxNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVX
aW4uY3BwCkBAIC0zMDksNiArMzA5LDEzIEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3Rl
bUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAg
cmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAorVmVjdG9yPFN0cmluZz4gRm9udENhY2hl
OjpzeXN0ZW1Gb250RmFtaWxpZXMoKQoreworICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTQ3MDE3PiBXZWIgSW5zcGVjdG9yOiBbV2luXSBBbGxvdyBpbnNwZWN0b3IgdG8gcmV0
cmlldmUgYSBsaXN0IG9mIHN5c3RlbSBmb250cworICAgIFZlY3RvcjxTdHJpbmc+IGZvbnRGYW1p
bGllczsKKyAgICByZXR1cm4gZm9udEZhbWlsaWVzOworfQorCiBSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbWljU3RyaW5nJiBvdXRG
b250RmFtaWx5TmFtZSkKIHsKICAgICBBdG9taWNTdHJpbmcgZmFtaWx5TmFtZSA9IFN0cmluZyhm
b250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWlu
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCmlu
ZGV4IGI1MDJmMjBlMDIzOTIxZGU1M2VjNmMzYzAwMGIyMDNjZWFlODgxNWMuLmI0ZWJmMGZkYzY3
NzJmNTg5NzczZmY0NzAyMzlkMmM4MTQwYjI0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTkwLDcgKzkwLDcgQEAgV2ViSW5z
cGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgSW5zcGVjdG9yQWdlbnQuZW5hYmxl
KCk7CiAKICAgICAvLyBQZXJmb3JtIG9uZS10aW1lIHRhc2tzLgotICAgIFdlYkluc3BlY3Rvci5D
U1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTTmFtZUNvbXBsZXRpb25zKCk7CisgICAgV2ViSW5zcGVj
dG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0aW9ucygpOwogICAgIHRoaXMuX2dl
bmVyYXRlRGlzY2xvc3VyZVRyaWFuZ2xlSW1hZ2VzKCk7CiAKICAgICAvLyBMaXN0ZW4gZm9yIHRo
ZSBQcm92aXNpb25hbExvYWRTdGFydGVkIGV2ZW50IGJlZm9yZSByZWdpc3RlcmluZyBmb3IgZXZl
bnRzIHNvIG91ciBjb2RlIGdldHMgY2FsbGVkIGJlZm9yZSBhbnkgbWFuYWdlcnMgb3Igc2lkZWJh
cnMuCkBAIC01MDEsNyArNTAxLDcgQEAgV2ViSW5zcGVjdG9yLmFjdGl2YXRlRXh0cmFEb21haW5z
ID0gZnVuY3Rpb24oZG9tYWlucykKIAogICAgIHRoaXMubm90aWZpY2F0aW9ucy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLk5vdGlmaWNhdGlvbi5FeHRyYURvbWFpbnNBY3Rp
dmF0ZWQsIHsiZG9tYWlucyI6IGRvbWFpbnN9KTsKIAotICAgIFdlYkluc3BlY3Rvci5DU1NDb21w
bGV0aW9ucy5yZXF1ZXN0Q1NTTmFtZUNvbXBsZXRpb25zKCk7CisgICAgV2ViSW5zcGVjdG9yLkNT
U0NvbXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0aW9ucygpOwogCiAgICAgdGhpcy5fdXBkYXRl
UmVsb2FkVG9vbGJhckJ1dHRvbigpOwogICAgIHRoaXMuX3VwZGF0ZURvd25sb2FkVG9vbGJhckJ1
dHRvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
QmFzZS9UZXN0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9U
ZXN0LmpzCmluZGV4IGEwYmVkYzA5NmYzMDVkOTM1ZTJhZTUyOWVmNGI3ZWExMTdjMWY0YzMuLjFl
ZDg0NGEwNzdiOGQzMjUxNzI1YzQ0Mjc4YmJmYzE5NjE2ZTVjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvVGVzdC5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanMKQEAgLTY5LDcgKzY5LDcg
QEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICBDb25zb2xlQWdlbnQuZW5h
YmxlKCk7CiAKICAgICAvLyBQZXJmb3JtIG9uZS10aW1lIHRhc2tzLgotICAgIFdlYkluc3BlY3Rv
ci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTTmFtZUNvbXBsZXRpb25zKCk7CisgICAgV2ViSW5z
cGVjdG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0aW9ucygpOwogCiAgICAgLy8g
R2xvYmFsIHNldHRpbmdzLgogICAgIHRoaXMuc2hvd1NoYWRvd0RPTVNldHRpbmcgPSBuZXcgV2Vi
SW5zcGVjdG9yLlNldHRpbmcoInNob3ctc2hhZG93LWRvbSIsIHRydWUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25z
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBs
ZXRpb25zLmpzCmluZGV4IDU1NTE1YTljZjJhY2I1YTBiOGQ2MmNjOWM4OGFjZTVkYTgxNTYwZjMu
LmU5NTE1ZTVmNDQ2MGI5MzkzY2Y1NGU5M2E2YWM1MWFjMzc4MDc3MDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29t
cGxldGlvbnMuanMKQEAgLTcyLDExICs3MiwxMyBAQCBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlv
bnMgPSBjbGFzcyBDU1NDb21wbGV0aW9ucwogICAgICAgICB0aGlzLl92YWx1ZXMuc29ydCgpOwog
CiAgICAgICAgIHRoaXMuX2FjY2VwdEVtcHR5UHJlZml4ID0gYWNjZXB0RW1wdHlQcmVmaXg7CisK
KyAgICAgICAgdGhpcy5zdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMgPSBbXTsKICAgICB9
CiAKICAgICAvLyBTdGF0aWMKIAotICAgIHN0YXRpYyByZXF1ZXN0Q1NTTmFtZUNvbXBsZXRpb25z
KCkKKyAgICBzdGF0aWMgcmVxdWVzdENTU0NvbXBsZXRpb25zKCkKICAgICB7CiAgICAgICAgIGlm
IChXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMuY3NzTmFtZUNvbXBsZXRpb25zKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMTU4LDggKzE2MCwyMCBAQCBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxl
dGlvbnMgPSBjbGFzcyBDU1NDb21wbGV0aW9ucwogICAgICAgICAgICAgdXBkYXRlQ29kZU1pcnJv
ckNTU01vZGUoInRleHQveC1zY3NzIik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2luZG93
LkNTU0FnZW50KQorICAgICAgICBmdW5jdGlvbiBmb250RmFtaWx5TmFtZXNDYWxsYmFjayhlcnJv
ciwgZm9udEZhbWlseU5hbWVzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJyb3IpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuQ1NTQ29t
cGxldGlvbnMuc3VwcG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVzID0gZm9udEZhbWlseU5hbWVz
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpbmRvdy5DU1NBZ2VudCkgewogICAgICAgICAg
ICAgQ1NTQWdlbnQuZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhwcm9wZXJ0eU5hbWVzQ2FsbGJh
Y2spOworCisgICAgICAgICAgICBpZiAoQ1NTQWdlbnQuZ2V0U3VwcG9ydGVkU3lzdGVtRm9udEZh
bWlseU5hbWVzKQorICAgICAgICAgICAgICAgIENTU0FnZW50LmdldFN1cHBvcnRlZFN5c3RlbUZv
bnRGYW1pbHlOYW1lcyhmb250RmFtaWx5TmFtZXNDYWxsYmFjayk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBQdWJsaWMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4MzQ2MDNmMDVmNDlhNTk1YTc2MmFiYmE4NmNkNDVj
ZWY4MDI3YjMxLi5hM2IzOGE1MTNhNTI0YTc2NWU3OWUwNDliNzM4ZTkxZjE5ODcwMGIzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMDctMTYgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBw
bGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBhIGZ1bmN0aW9uIHRvIENTU0Nv
bXBsZXRpb25zIHRvIGdldCBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHN5c3RlbSBmb250cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MDA5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2tpcCB0aGUgZ2V0LXN5
c3RlbS1mb250cyB0ZXN0IHVudGlsIGl0IGlzIGltcGxlbWVudGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zOgorCisg
ICAgICAgIEFkZGVkIHRoZSBnZXQtc3lzdGVtLWZvbnRzIHRlc3QgdGhhdCByZXR1cm5zIHRoZSBs
aXN0IG9mIHN5c3RlbSBmb250cy4KKyAgICAgICAgKiBpbnNwZWN0b3IvY3NzL2dldC1zeXN0ZW0t
Zm9udHMtZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY3NzL2dldC1zeXN0ZW0t
Zm9udHMuaHRtbDoKKwogMjAxNS0wNy0xNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVwZGF0ZSAkJCgpIHRvIHJldHVybiBh
biBBcnJheQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9nZXQtc3lzdGVt
LWZvbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5c3Rl
bS1mb250cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmUzMTYxYmUwYWExMDQwNjE2MzRiYjA5
YTg0MDQ2ZTM2NmJiNzc2YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9jc3MvZ2V0LXN5c3RlbS1mb250cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACitIYXMg
YXQgbGVhc3QgNSBmb250czogdHJ1ZQorUEFTUzogSW5jbHVkZXMgQXJpYWwKK1BBU1M6IEluY2x1
ZGVzIFRpbWVzCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5
c3RlbS1mb250cy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9nZXQtc3lzdGVtLWZv
bnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODNlZjI3NGM1OGFjYzcwNWFjYmZjZWUyNmY2MzhmODcwNjg2
MmI4NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5
c3RlbS1mb250cy5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cisv
LyBUZXN0aW5nIHRoYXQgd2UgY2FuIGdldCB0aGUgZm9udHMgb24gdGhlIHN5c3RlbSBhbmQgdGhh
dCB0aGUgZm9udHMgY29udGFpbiBzb21lIHVuaXZlcnNhbCBmb250cyAoYXJpYWwsIHRpbWVzLCBl
dGMpLgorZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBmdW5jdGlvbiBoYXNGb250RmFtaWx5KGZvbnRG
YW1pbGllcywgZm9udEZhbWlseSkgeworICAgICAgICByZXR1cm4gKGZvbnRGYW1pbGllcy5pbmNs
dWRlcyhmb250RmFtaWx5KSA/ICJQQVNTOiBJbmNsdWRlcyAiIDogIkZBSUw6IE1pc3NpbmcgIikg
KyBmb250RmFtaWx5OworICAgIH0KKworICAgIGZ1bmN0aW9uIGZvbnRGYW1pbHlOYW1lc0NhbGxi
YWNrKGVycm9yLCBmb250RmFtaWx5TmFtZXMpIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3Nl
cnQoIWVycm9yLCAiRXJyb3IgaW4gZ2V0dGluZyBmb250IGZhbWlseSBuYW1lcy4iKTsKKworICAg
ICAgICBpZiAoIWVycm9yKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiSGFzIGF0
IGxlYXN0IDUgZm9udHM6ICIgKyAoZm9udEZhbWlseU5hbWVzLmxlbmd0aCA+PSA1KSk7CisgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZyhoYXNGb250RmFtaWx5KGZvbnRGYW1pbHlOYW1lcywg
IkFyaWFsIikpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coaGFzRm9udEZhbWlseShm
b250RmFtaWx5TmFtZXMsICJUaW1lcyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIEluc3BlY3Rv
clRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgfQorICAgIENTU0FnZW50LmdldFN1cHBvcnRlZFN5
c3RlbUZvbnRGYW1pbHlOYW1lcyhmb250RmFtaWx5TmFtZXNDYWxsYmFjayk7Cit9Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj48L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDllMjdhYzYzZWNi
MjZkZTEzOTc1MmU0ZDYxYTEwZTZiNjA3MzVlNDkuLmY1NzNlMDhhMDRkZGI2NTFlY2EwNDQwNWE0
OTBkMjlkYzE2MGJhYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRp
b25zCkBAIC02NjAsNiArNjYwLDggQEAgd2Via2l0Lm9yZy9iLzEzNjIyNyBtYXRobWwvdmVyeS1s
YXJnZS1zdHJldGNoeS1vcGVyYXRvcnMuaHRtbCBbIENyYXNoIFRpbWVvdXQgUGEKIAogI3dlYmtp
dC5vcmcvYi8xNDIxNTggaW5zcGVjdG9yLXByb3RvY29sL2RvbS9yZW1vdmUtbXVsdGlwbGUtbm9k
ZXMuaHRtbCBbIENyYXNoIFBhc3MgXQogCit3ZWJraXQub3JnL2IvMTQ3MDE4IGluc3BlY3Rvci9j
c3MvZ2V0LXN5c3RlbS1mb250cy5odG1sIFsgU2tpcCBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCiAjIEZMQUtZIFRFU1RTCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlv
bnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBiNGQ2
NzIwZTBiMjA1MTMwNGZjOTdiODUxYmJkNDExYTY2MjAxNmNmLi41N2NiYjExOTY5YTE2YjdhNTg3
OTdiZmE4Y2UxMjhkMjJiMDg3NmY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucwpAQCAtMTMxOSw2ICsxMzE5LDcgQEAgd2Via2l0Lm9yZy9iLzEzNzY5OCBtZWRp
YS92aWRlby1jb250cm9scy1kcmFnLmh0bWwgWyBUaW1lb3V0IF0KIAogd2Via2l0Lm9yZy9iLzEz
OTM2MiBpbnNwZWN0b3IvY3NzL3BzZXVkby1lbGVtZW50LW1hdGNoZXMuaHRtbCBbIFRpbWVvdXQg
XQogd2Via2l0Lm9yZy9iLzEzOTM2MiBpbnNwZWN0b3IvY3NzL3NlbGVjdG9yLXNwZWNpZmljaXR5
Lmh0bWwgWyBUaW1lb3V0IFBhc3MgXQord2Via2l0Lm9yZy9iLzE0NzAxOCBpbnNwZWN0b3IvY3Nz
L2dldC1zeXN0ZW0tZm9udHMuaHRtbCBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMTM5MzYzIG1l
ZGlhL21lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLXVwZGF0ZXMuaHRtbCBbIFRpbWVvdXQgXQogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGFkODJiN2M0Njdm
OGU3MTJjZjM1MzU0ZGQyZDk1YmFkZWQxMTQ4MGEuLjA2OWJjZGQ4NGIwYzgyMzYxMjZjNGJlY2Zj
NDkwYWMwMjJhYTczMDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRp
b25zCkBAIC0yMzU5LDYgKzIzNTksOCBAQCBpbnNwZWN0b3IvZG9tL2NvbnRlbnQtbm9kZS1yZWdp
b24taW5mby5odG1sIFsgQ3Jhc2ggUGFzcyBGYWlsdXJlIFRpbWVvdXQgXQogaW5zcGVjdG9yL2Nz
cy9zZWxlY3Rvci1zcGVjaWZpY2l0eS5odG1sIFsgU2tpcCBdCiBpbnNwZWN0b3IvY3NzL3BzZXVk
by1lbGVtZW50LW1hdGNoZXMuaHRtbCBbIFNraXAgXQogCit3ZWJraXQub3JnL2IvMTQ3MDE3IGlu
c3BlY3Rvci9jc3MvZ2V0LXN5c3RlbS1mb250cy5odG1sIFsgU2tpcCBdCisKICMgSW5zcGVjdG9y
IFByb3RvY29sCiB3ZWJraXQub3JnL2IvMTQwNTEwIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dl
ci90ZXJtaW5hdGUtZGVkaWNhdGVkLXdvcmtlci13aGlsZS1wYXVzZWQuaHRtbCBbIFNraXAgXSAg
IyBDcmFzaGluZwogaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3BhdXNlLW9uLWFzc2VydC5o
dG1sIFsgU2tpcCBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257211</attachid>
            <date>2015-07-21 15:48:57 -0700</date>
            <delta_ts>2015-07-23 10:53:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147009-20150721154744.patch</filename>
            <type>text/plain</type>
            <size>20022</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQ4YmU5OGNhZGYwNDRhZGUxYWViYTNlMThlMGRj
NTc1YmVhYTVhNWMuLjAwZDRkMGU5MDMwYjc4OTJiN2QzYWYwZDA5YzAzOTFmZmI2NGE1YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA3LTE2ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgYSBmdW5jdGlvbiB0byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRl
ZCBzeXN0ZW0gZm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uOiBBZGRlZCBnZXRTdXBwb3J0ZWRT
eXN0ZW1Gb250RmFtaWx5TmFtZXMgZnVuY3Rpb24uCisKIDIwMTUtMDctMTUgIEJyZW50IEZ1bGdo
YW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gRml4IGFybXY3IGJ1aWxk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDlmMWFiNzQ1MjNhMDYyNTU0NDdiOWMyNzRkMDExNGY4MWM0NTM0MzUu
LjVlNThlNWQ3MDc4YWIzMGNiYTlmNGRkZDMwMzQzZTU3Mjc2NmVmMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNiBAQAorMjAxNS0wNy0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5j
b20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGEgZnVuY3Rpb24gdG8gQ1NTQ29tcGxl
dGlvbnMgdG8gZ2V0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgc3lzdGVtIGZvbnRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcwMDkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBpbnNwZWN0b3IvY3Nz
L2dldC1zeXN0ZW0tZm9udHMuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBw
b3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMpOgorICAgICAgICBHZXRzIHRoZSBsaXN0IG9mIHN5
c3RlbSBmb250cyAoaW1wbGVtZW50ZWQgaW4gZWFjaCBwbGF0Zm9ybSkgYW5kIHJldHVybnMgdGhh
dCBsaXN0LgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6c3lzdGVtRm9udEZhbWlsaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvRm9udENhY2hlSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpz
eXN0ZW1Gb250RmFtaWxpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q2FjaGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1p
bGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcyk6CisKIDIw
MTUtMDctMTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiB1cGRhdGUgJCQoKSB0byByZXR1cm4gYW4gQXJyYXkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCmluZGV4IGVlNmFkYzQ3YzMyZDI5MjNhYWE5MTliYTQ3ZTZhNjVjMWU2ZWNl
NjguLjFjOGJlNjVmNjM3YzU2NTA1NjRhMjQ1NWQ3YWJmOTc3YTQzY2I4MmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE1LTA3LTIxICBEZXZpbiBSb3Vzc28g
IDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgYSBmdW5j
dGlvbiB0byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRlZCBzeXN0ZW0g
Zm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NzAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9CYXNlL01haW4uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5hY3RpdmF0ZUV4dHJhRG9tYWlucyk6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9h
ZGVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTQ29tcGxldGlv
bnMuZm9udEZhbWlseU5hbWVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0Nv
bXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0aW9ucyk6CisgICAgICAgIE5vdyBhbHNvIGdyYWJz
IHRoZSBsaXN0IG9mIHN5c3RlbSBmb250IGZhbWlseSBuYW1lcyBhbmQgYWRkcyB0aGF0IGxpc3Qg
dG8gdGhlIGV4aXN0aW5nIGNvbXBsZXRpb24KKyAgICAgICAgbGlzdCBmb3IgZm9udC1mYW1pbHkg
aW4gQ1NTS2V5d29yZENvbXBsZXRpb25zLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0NvbXBs
ZXRpb25zLnJlcXVlc3RDU1NOYW1lQ29tcGxldGlvbnMpOiBEZWxldGVkLgorCiAyMDE1LTA3LTE1
ICBNYXR0IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBSZXNpemluZyBUaW1lbGluZVJ1bGVyIHNlbGVjdGlvbiBvbiBib3RoIHNpZGVzIGRvZXNu
J3Qgd29yayB3aXRoIHNuYXBwaW5nIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uCmluZGV4IGYwMjIxNmRiZjM2NTAwMGFmNGU2
YmYxNTFhMTc4ZDI2ZGE5Y2JlM2YuLjFiMzI2NGJmNGRjM2NhOWE0NzRjMTFjYmM3NDFmODc1ZGM0
MzU5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvQ1NTLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9DU1MuanNvbgpAQCAtMzQ4LDYgKzM0OCwxMyBAQAogICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlJldHVybnMgYWxsIHN1cHBvcnRlZCBDU1MgcHJvcGVydHkgbmFtZXMuIgogICAgICAgICB9
LAogICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250
RmFtaWx5TmFtZXMiLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJmb250RmFtaWx5TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9LCAiZGVzY3JpcHRpb24iOiAiU3VwcG9ydGVkIHN5c3RlbSBmb250
IGZhbWlsaWVzLiIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJSZXR1cm5zIGFsbCBzdXBwb3J0ZWQgc3lzdGVtIGZvbnQgZmFtaWx5IG5hbWVzLiIKKyAgICAg
ICAgfSwKKyAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiZm9yY2VQc2V1ZG9TdGF0ZSIs
CiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im5vZGVJZCIsICIkcmVmIjogIkRPTS5Ob2RlSWQiLCAiZGVzY3JpcHRpb24iOiAiVGhlIGVsZW1l
bnQgaWQgZm9yIHdoaWNoIHRvIGZvcmNlIHRoZSBwc2V1ZG8gc3RhdGUuIiB9LApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggM2QwNjIwODM0
ZWIyOGNkZmQwNmI1OGNkNjYyNmJhM2MxNDhlNzE5MS4uZGRhOWI4ODY5OTE5ZjlhZWMzZDIwYTFl
YmZhOGI2MDNmNDY3MThhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ29udGVudFNlY3Vy
aXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZVBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiSFRN
TEhlYWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckRPTUFnZW50LmgiCkBAIC03MDgsNiArNzA5LDE3IEBAIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SW5zcGVjdG9yCiAgICAgY3NzUHJvcGVydGllcyA9IFdURjo6bW92ZShwcm9wZXJ0aWVzKTsKIH0K
IAordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkU3lzdGVtRm9udEZhbWlseU5h
bWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+JiBmb250RmFtaWx5TmFtZXMpCit7CisgICAgYXV0byBmYW1pbGllcyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworCisgICAgVmVjdG9yPFN0cmluZz4g
c3lzdGVtRm9udEZhbWlsaWVzID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250RmFt
aWxpZXMoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGZhbWlseU5hbWUgOiBzeXN0ZW1Gb250RmFt
aWxpZXMpCisgICAgICAgIGZhbWlsaWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOworCisgICAgZm9u
dEZhbWlseU5hbWVzID0gV1RGOjptb3ZlKGZhbWlsaWVzKTsKK30KKwogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQsIGNvbnN0IEluc3BlY3RvckFycmF5JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQogewogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvbUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5n
LCBub2RlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
aAppbmRleCBhNjMwZmU1NjcyYTBjOGI0ZTYyNjFmMjRiNjUwNTcyNjViMDZkNTExLi5lY2UwMjk5
MzljY2RhMDEwOThjMWFkZjM4Nzc2ZjYwZTYzMWFiNTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtMTE5LDYgKzExOSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBpbnQgY29udGV4dE5v
ZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFN1
cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYg
cmVzdWx0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VwcG9ydGVkU3lzdGVtRm9u
dEZhbWlseU5hbWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmb3JjZVBz
ZXVkb1N0YXRlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JBcnJheSYgZm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIGdldE5hbWVkRmxvd0NvbGxlY3Rpb24oRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2Rl
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Ok5hbWVkRmxvdz4+JiByZXN1bHQpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IDMxOTg5YWU1NGExY2NhNGMwYzVk
YjFlYmFmN2M1YjhmMGRlNGM1ZGIuLjE3NmEzMzAyYWIzMDE5MTgzNzdkYWFjNGUzZmM5YThmN2Nj
NDQwYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5o
CkBAIC0xMTAsMTAgKzExMCw5IEBAIGNsYXNzIEZvbnRDYWNoZSB7CiBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIEZvbnRDYWNoZSYgc2luZ2xldG9uKCk7CiAKLSAgICAvLyBUaGlz
IG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCisgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIFJlZlB0cjxGb250PiBz
eXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
Rm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBBbHNvIGltcGxlbWVudGVk
IGJ5IHRoZSBwbGF0Zm9ybS4KKyAgICBWZWN0b3I8U3RyaW5nPiBzeXN0ZW1Gb250RmFtaWxpZXMo
KTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwogCiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hl
RnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGIyMzI3MTY3OGRjMWU4NTIyZmRlYTFjMzVjMGU5
OWM4YzE2NTk4NTUuLmM3YTdlYThjMTQxNDc3ZWNkYmFhYzUxZTM1ZTVjNThhYmJlZWI4NWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTk4LDYgKzk4LDEzIEBAIFJlZlB0cjxG
b250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRl
Rm9udERhdGEpOwogfQogCitWZWN0b3I8U3RyaW5nPiBGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1p
bGllcygpCit7CisgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDcwMTg+IFdl
YiBJbnNwZWN0b3I6IFtGcmVldHlwZV0gQWxsb3cgaW5zcGVjdG9yIHRvIHJldHJpZXZlIGEgbGlz
dCBvZiBzeXN0ZW0gZm9udHMKKyAgICBWZWN0b3I8U3RyaW5nPiBmb250RmFtaWxpZXM7CisgICAg
cmV0dXJuIGZvbnRGYW1pbGllczsKK30KKwogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsK
ICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNl
IHRoZSBsb2dpYyBwcmV2ZW50aW5nIEZvbnRDb25maWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCmluZGV4IGM5MTMxYzJjODQ4
N2M0ZTc5YjYyZmRjM2FhMjUzZWQzZGY2MWE3OGUuLjMxZmE2ZDMwNjBjNWExNjhkYjY4MzkyMjU1
NzU1NmJjMTUxMTgyNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQpAQCAtNDYyLDYgKzQ2MiwxMyBAQCBSZWZQdHI8Rm9u
dD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcgogICAgIHJldHVybiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0
aW9uKTsKIH0KIAorVmVjdG9yPFN0cmluZz4gRm9udENhY2hlOjpzeXN0ZW1Gb250RmFtaWxpZXMo
KQoreworICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ3MDMzPiBXZWIgSW5z
cGVjdG9yOiBbaU9TXSBBbGxvdyBpbnNwZWN0b3IgdG8gcmV0cmlldmUgYSBsaXN0IG9mIHN5c3Rl
bSBmb250cworICAgIFZlY3RvcjxTdHJpbmc+IGZvbnRGYW1pbGllczsKKyAgICByZXR1cm4gZm9u
dEZhbWlsaWVzOworfQorCiBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIC8vIEF0dGVtcHQgdG8gZmlu
ZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNl
IG9mIGtleXdvcmRzIGluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENhY2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQppbmRleCA2ZDljNGY4YjQ0MjM1MDBjYTFkNDMxMGEwN2Vl
MzJlNWVkOWU3MDQ3Li42NTUxN2FkYzJhZDVkNWRhZjExOGQwM2QyMmIxZGRjOTQ3OWRjNTQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hl
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2Fj
aGVNYWMubW0KQEAgLTUyNyw2ICs1MjcsMjYgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lz
dGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAg
ICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAorVmVjdG9y
PFN0cmluZz4gRm9udENhY2hlOjpzeXN0ZW1Gb250RmFtaWxpZXMoKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IGZvbnRGYW1pbGllczsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXZhaWxhYmxl
Rm9udEZhbWlsaWVzID0gYWRvcHRDRihDVEZvbnRNYW5hZ2VyQ29weUF2YWlsYWJsZUZvbnRGYW1p
bHlOYW1lcygpKTsKKyAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF2YWlsYWJs
ZUZvbnRGYW1pbGllcy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBDRlN0cmluZ1JlZiBmb250TmFtZSA9IHN0YXRpY19jYXN0PENGU3Ry
aW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF2YWlsYWJsZUZvbnRGYW1pbGllcy5nZXQo
KSwgaSkpOworICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoZm9udE5hbWUpICE9IENGU3RyaW5nR2V0
VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9udCcgd2FudCB0byBtYWtl
IHRoZSBoaWRkZW4gc3lzdGVtIGZvbnRzIHZpc2libGUgYW5kIHNpbmNlIHRoZXkKKyAgICAgICAg
Ly8gYWxsIGJlZ2luIHdpdGggYSBwZXJpb2QsIGlnbm9yZSBhbGwgZm9udHMgdGhhdCBiZWdpbiB3
aXRoIGEgcGVyaW9kLgorICAgICAgICBpZiAoQ0ZTdHJpbmdIYXNQcmVmaXgoZm9udE5hbWUsIENG
U1RSKCIuIikpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvbnRGYW1pbGllcy5h
cHBlbmQoZm9udE5hbWUpOworICAgIH0KKyAgICByZXR1cm4gZm9udEZhbWlsaWVzOworfQorCiBS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uKQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBm
b250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IDQ3OWNiODU2ZTFlODEy
NGQ1MmYzYjVhZDM3MDE5MTFiMDQ2YjU1ZTEuLmFmYTQ4NDFlZGY5NjlkZjJlNGRiMTU0NTUwY2Ex
ZmQ4YzIzMTYxNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCkBAIC0zMDksNiArMzA5LDEzIEBAIFJlZlB0cjxGb250
PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyCiAgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAorVmVjdG9y
PFN0cmluZz4gRm9udENhY2hlOjpzeXN0ZW1Gb250RmFtaWxpZXMoKQoreworICAgIC8vIEZJWE1F
OiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ3MDE3PiBXZWIgSW5zcGVjdG9yOiBbV2luXSBBbGxv
dyBpbnNwZWN0b3IgdG8gcmV0cmlldmUgYSBsaXN0IG9mIHN5c3RlbSBmb250cworICAgIFZlY3Rv
cjxTdHJpbmc+IGZvbnRGYW1pbGllczsKKyAgICByZXR1cm4gZm9udEZhbWlsaWVzOworfQorCiBS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwg
QXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKICAgICBBdG9taWNTdHJpbmcgZmFt
aWx5TmFtZSA9IFN0cmluZyhmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1l
LCBMRl9GQUNFU0laRSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQmFzZS9NYWluLmpzCmluZGV4IGI1MDJmMjBlMDIzOTIxZGU1M2VjNmMzYzAwMGIyMDNjZWFl
ODgxNWMuLmI0ZWJmMGZkYzY3NzJmNTg5NzczZmY0NzAyMzlkMmM4MTQwYjI0ODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTkw
LDcgKzkwLDcgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgSW5z
cGVjdG9yQWdlbnQuZW5hYmxlKCk7CiAKICAgICAvLyBQZXJmb3JtIG9uZS10aW1lIHRhc2tzLgot
ICAgIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTTmFtZUNvbXBsZXRpb25z
KCk7CisgICAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0aW9u
cygpOwogICAgIHRoaXMuX2dlbmVyYXRlRGlzY2xvc3VyZVRyaWFuZ2xlSW1hZ2VzKCk7CiAKICAg
ICAvLyBMaXN0ZW4gZm9yIHRoZSBQcm92aXNpb25hbExvYWRTdGFydGVkIGV2ZW50IGJlZm9yZSBy
ZWdpc3RlcmluZyBmb3IgZXZlbnRzIHNvIG91ciBjb2RlIGdldHMgY2FsbGVkIGJlZm9yZSBhbnkg
bWFuYWdlcnMgb3Igc2lkZWJhcnMuCkBAIC01MDEsNyArNTAxLDcgQEAgV2ViSW5zcGVjdG9yLmFj
dGl2YXRlRXh0cmFEb21haW5zID0gZnVuY3Rpb24oZG9tYWlucykKIAogICAgIHRoaXMubm90aWZp
Y2F0aW9ucy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLk5vdGlmaWNhdGlv
bi5FeHRyYURvbWFpbnNBY3RpdmF0ZWQsIHsiZG9tYWlucyI6IGRvbWFpbnN9KTsKIAotICAgIFdl
Ykluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTTmFtZUNvbXBsZXRpb25zKCk7Cisg
ICAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0aW9ucygpOwog
CiAgICAgdGhpcy5fdXBkYXRlUmVsb2FkVG9vbGJhckJ1dHRvbigpOwogICAgIHRoaXMuX3VwZGF0
ZURvd25sb2FkVG9vbGJhckJ1dHRvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzCmluZGV4IGEwYmVkYzA5NmYzMDVkOTM1ZTJhZTUyOWVm
NGI3ZWExMTdjMWY0YzMuLjFlZDg0NGEwNzdiOGQzMjUxNzI1YzQ0Mjc4YmJmYzE5NjE2ZTVjNTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvVGVz
dC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3Qu
anMKQEAgLTY5LDcgKzY5LDcgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAg
ICBDb25zb2xlQWdlbnQuZW5hYmxlKCk7CiAKICAgICAvLyBQZXJmb3JtIG9uZS10aW1lIHRhc2tz
LgotICAgIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTTmFtZUNvbXBsZXRp
b25zKCk7CisgICAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0
aW9ucygpOwogCiAgICAgLy8gR2xvYmFsIHNldHRpbmdzLgogICAgIHRoaXMuc2hvd1NoYWRvd0RP
TVNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoInNob3ctc2hhZG93LWRvbSIsIHRy
dWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0NTU0NvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzCmluZGV4IDU1NTE1YTljZjJhY2I1YTBiOGQ2MmNj
OWM4OGFjZTVkYTgxNTYwZjMuLjk3MDkxYzIzZTdmOWFiZWUxYzQ1NjM5MjIyYTYyNzkzNGZhYWNm
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9DU1NDb21wbGV0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlvbnMuanMKQEAgLTc2LDcgKzc2LDcgQEAgV2ViSW5zcGVj
dG9yLkNTU0NvbXBsZXRpb25zID0gY2xhc3MgQ1NTQ29tcGxldGlvbnMKIAogICAgIC8vIFN0YXRp
YwogCi0gICAgc3RhdGljIHJlcXVlc3RDU1NOYW1lQ29tcGxldGlvbnMoKQorICAgIHN0YXRpYyBy
ZXF1ZXN0Q1NTQ29tcGxldGlvbnMoKQogICAgIHsKICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5D
U1NDb21wbGV0aW9ucy5jc3NOYW1lQ29tcGxldGlvbnMpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNTgsOCArMTU4LDIwIEBAIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucyA9IGNsYXNzIENT
U0NvbXBsZXRpb25zCiAgICAgICAgICAgICB1cGRhdGVDb2RlTWlycm9yQ1NTTW9kZSgidGV4dC94
LXNjc3MiKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh3aW5kb3cuQ1NTQWdlbnQpCisgICAg
ICAgIGZ1bmN0aW9uIGZvbnRGYW1pbHlOYW1lc0NhbGxiYWNrKGVycm9yLCBmb250RmFtaWx5TmFt
ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5DU1NLZXl3b3JkQ29tcGxldGlvbnMu
YWRkUHJvcGVydHlDb21wbGV0aW9uVmFsdWVzKCJmb250LWZhbWlseSIsIGZvbnRGYW1pbHlOYW1l
cyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2luZG93LkNTU0FnZW50KSB7CiAgICAgICAg
ICAgICBDU1NBZ2VudC5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKHByb3BlcnR5TmFtZXNDYWxs
YmFjayk7CisKKyAgICAgICAgICAgIGlmIChDU1NBZ2VudC5nZXRTdXBwb3J0ZWRTeXN0ZW1Gb250
RmFtaWx5TmFtZXMpCisgICAgICAgICAgICAgICAgQ1NTQWdlbnQuZ2V0U3VwcG9ydGVkU3lzdGVt
Rm9udEZhbWlseU5hbWVzKGZvbnRGYW1pbHlOYW1lc0NhbGxiYWNrKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIFB1YmxpYwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgzNDYwM2YwNWY0OWE1OTVhNzYyYWJiYTg2Y2Q0
NWNlZjgwMjdiMzEuLmEzYjM4YTUxM2E1MjRhNzY1ZTc5ZTA0OWI3MzhlOTFmMTk4NzAwYjMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0wNy0xNiAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGEgZnVuY3Rpb24gdG8gQ1NT
Q29tcGxldGlvbnMgdG8gZ2V0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgc3lzdGVtIGZvbnRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcwMDkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTa2lwIHRoZSBnZXQt
c3lzdGVtLWZvbnRzIHRlc3QgdW50aWwgaXQgaXMgaW1wbGVtZW50ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RF
eHBlY3RhdGlvbnM6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnM6CisK
KyAgICAgICAgQWRkZWQgdGhlIGdldC1zeXN0ZW0tZm9udHMgdGVzdCB0aGF0IHJldHVybnMgdGhl
IGxpc3Qgb2Ygc3lzdGVtIGZvbnRzLgorICAgICAgICAqIGluc3BlY3Rvci9jc3MvZ2V0LXN5c3Rl
bS1mb250cy1leHBlY3RlZC5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9jc3MvZ2V0LXN5c3Rl
bS1mb250cy5odG1sOgorCiAyMDE1LTA3LTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdXBkYXRlICQkKCkgdG8gcmV0dXJu
IGFuIEFycmF5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL2dldC1zeXN0
ZW0tZm9udHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9nZXQtc3lz
dGVtLWZvbnRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZTMxNjFiZTBhYTEwNDA2MTYzNGJi
MDlhODQwNDZlMzY2YmI3NzZjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2Nzcy9nZXQtc3lzdGVtLWZvbnRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK0hh
cyBhdCBsZWFzdCA1IGZvbnRzOiB0cnVlCitQQVNTOiBJbmNsdWRlcyBBcmlhbAorUEFTUzogSW5j
bHVkZXMgVGltZXMKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9nZXQt
c3lzdGVtLWZvbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL2dldC1zeXN0ZW0t
Zm9udHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2VmMjc0YzU4YWNjNzA1YWNiZmNlZTI2ZjYzOGY4NzA2
ODYyYjg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9nZXQt
c3lzdGVtLWZvbnRzLmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0
cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
Ky8vIFRlc3RpbmcgdGhhdCB3ZSBjYW4gZ2V0IHRoZSBmb250cyBvbiB0aGUgc3lzdGVtIGFuZCB0
aGF0IHRoZSBmb250cyBjb250YWluIHNvbWUgdW5pdmVyc2FsIGZvbnRzIChhcmlhbCwgdGltZXMs
IGV0YykuCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGZ1bmN0aW9uIGhhc0ZvbnRGYW1pbHkoZm9u
dEZhbWlsaWVzLCBmb250RmFtaWx5KSB7CisgICAgICAgIHJldHVybiAoZm9udEZhbWlsaWVzLmlu
Y2x1ZGVzKGZvbnRGYW1pbHkpID8gIlBBU1M6IEluY2x1ZGVzICIgOiAiRkFJTDogTWlzc2luZyAi
KSArIGZvbnRGYW1pbHk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZm9udEZhbWlseU5hbWVzQ2Fs
bGJhY2soZXJyb3IsIGZvbnRGYW1pbHlOYW1lcykgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmFz
c2VydCghZXJyb3IsICJFcnJvciBpbiBnZXR0aW5nIGZvbnQgZmFtaWx5IG5hbWVzLiIpOworCisg
ICAgICAgIGlmICghZXJyb3IpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJIYXMg
YXQgbGVhc3QgNSBmb250czogIiArIChmb250RmFtaWx5TmFtZXMubGVuZ3RoID49IDUpKTsKKyAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKGhhc0ZvbnRGYW1pbHkoZm9udEZhbWlseU5hbWVz
LCAiQXJpYWwiKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZyhoYXNGb250RmFtaWx5
KGZvbnRGYW1pbHlOYW1lcywgIlRpbWVzIikpOworICAgICAgICB9CisKKyAgICAgICAgSW5zcGVj
dG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICB9CisgICAgQ1NTQWdlbnQuZ2V0U3VwcG9ydGVk
U3lzdGVtRm9udEZhbWlseU5hbWVzKGZvbnRGYW1pbHlOYW1lc0NhbGxiYWNrKTsKK30KKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPjwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOWUyN2FjNjNl
Y2IyNmRlMTM5NzUyZTRkNjFhMTBlNmI2MDczNWU0OS4uZjU3M2UwOGEwNGRkYjY1MWVjYTA0NDA1
YTQ5MGQyOWRjMTYwYmFiYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTY2MCw2ICs2NjAsOCBAQCB3ZWJraXQub3JnL2IvMTM2MjI3IG1hdGhtbC92ZXJ5
LWxhcmdlLXN0cmV0Y2h5LW9wZXJhdG9ycy5odG1sIFsgQ3Jhc2ggVGltZW91dCBQYQogCiAjd2Vi
a2l0Lm9yZy9iLzE0MjE1OCBpbnNwZWN0b3ItcHJvdG9jb2wvZG9tL3JlbW92ZS1tdWx0aXBsZS1u
b2Rlcy5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKK3dlYmtpdC5vcmcvYi8xNDcwMTggaW5zcGVjdG9y
L2Nzcy9nZXQtc3lzdGVtLWZvbnRzLmh0bWwgWyBTa2lwIF0KKwogIy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KICMgRkxBS1kgVEVTVFMKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0
aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGI0
ZDY3MjBlMGIyMDUxMzA0ZmM5N2I4NTFiYmQ0MTFhNjYyMDE2Y2YuLjU3Y2JiMTE5NjlhMTZiN2E1
ODc5N2JmYThjZTEyOGQyMmIwODc2ZjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0
RXhwZWN0YXRpb25zCkBAIC0xMzE5LDYgKzEzMTksNyBAQCB3ZWJraXQub3JnL2IvMTM3Njk4IG1l
ZGlhL3ZpZGVvLWNvbnRyb2xzLWRyYWcuaHRtbCBbIFRpbWVvdXQgXQogCiB3ZWJraXQub3JnL2Iv
MTM5MzYyIGluc3BlY3Rvci9jc3MvcHNldWRvLWVsZW1lbnQtbWF0Y2hlcy5odG1sIFsgVGltZW91
dCBdCiB3ZWJraXQub3JnL2IvMTM5MzYyIGluc3BlY3Rvci9jc3Mvc2VsZWN0b3Itc3BlY2lmaWNp
dHkuaHRtbCBbIFRpbWVvdXQgUGFzcyBdCit3ZWJraXQub3JnL2IvMTQ3MDE4IGluc3BlY3Rvci9j
c3MvZ2V0LXN5c3RlbS1mb250cy5odG1sIFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcvYi8xMzkzNjMg
bWVkaWEvbWVkaWEtY29udHJvbHMtdGltZWxpbmUtdXBkYXRlcy5odG1sIFsgVGltZW91dCBdCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYWQ4MmI3YzQ2
N2Y4ZTcxMmNmMzUzNTRkZDJkOTViYWRlZDExNDgwYS4uMDY5YmNkZDg0YjBjODIzNjEyNmM0YmVj
ZmM0OTBhYzAyMmFhNzMwNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTIzNTksNiArMjM1OSw4IEBAIGluc3BlY3Rvci9kb20vY29udGVudC1ub2RlLXJl
Z2lvbi1pbmZvLmh0bWwgWyBDcmFzaCBQYXNzIEZhaWx1cmUgVGltZW91dCBdCiBpbnNwZWN0b3Iv
Y3NzL3NlbGVjdG9yLXNwZWNpZmljaXR5Lmh0bWwgWyBTa2lwIF0KIGluc3BlY3Rvci9jc3MvcHNl
dWRvLWVsZW1lbnQtbWF0Y2hlcy5odG1sIFsgU2tpcCBdCiAKK3dlYmtpdC5vcmcvYi8xNDcwMTcg
aW5zcGVjdG9yL2Nzcy9nZXQtc3lzdGVtLWZvbnRzLmh0bWwgWyBTa2lwIF0KKwogIyBJbnNwZWN0
b3IgUHJvdG9jb2wKIHdlYmtpdC5vcmcvYi8xNDA1MTAgaW5zcGVjdG9yLXByb3RvY29sL2RlYnVn
Z2VyL3Rlcm1pbmF0ZS1kZWRpY2F0ZWQtd29ya2VyLXdoaWxlLXBhdXNlZC5odG1sIFsgU2tpcCBd
ICAjIENyYXNoaW5nCiBpbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvcGF1c2Utb24tYXNzZXJ0
Lmh0bWwgWyBTa2lwIF0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257356</attachid>
            <date>2015-07-23 10:54:00 -0700</date>
            <delta_ts>2015-07-23 13:25:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147009-20150723105245.patch</filename>
            <type>text/plain</type>
            <size>20138</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQ4YmU5OGNhZGYwNDRhZGUxYWViYTNlMThlMGRj
NTc1YmVhYTVhNWMuLjAwZDRkMGU5MDMwYjc4OTJiN2QzYWYwZDA5YzAzOTFmZmI2NGE1YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA3LTE2ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgYSBmdW5jdGlvbiB0byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRl
ZCBzeXN0ZW0gZm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uOiBBZGRlZCBnZXRTdXBwb3J0ZWRT
eXN0ZW1Gb250RmFtaWx5TmFtZXMgZnVuY3Rpb24uCisKIDIwMTUtMDctMTUgIEJyZW50IEZ1bGdo
YW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gRml4IGFybXY3IGJ1aWxk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDlmMWFiNzQ1MjNhMDYyNTU0NDdiOWMyNzRkMDExNGY4MWM0NTM0MzUu
LjJjYjNhMGY1Y2QxZTJhYmRlOTAwNzljODA2NzIxMjVjODM1N2QxMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNiBAQAorMjAxNS0wNy0yMyAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5j
b20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGEgZnVuY3Rpb24gdG8gQ1NTQ29tcGxl
dGlvbnMgdG8gZ2V0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgc3lzdGVtIGZvbnRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcwMDkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBpbnNwZWN0b3IvY3Nz
L2dldC1zeXN0ZW0tZm9udHMuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBw
b3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMpOgorICAgICAgICBHZXRzIHRoZSBsaXN0IG9mIHN5
c3RlbSBmb250cyAoaW1wbGVtZW50ZWQgaW4gZWFjaCBwbGF0Zm9ybSkgYW5kIHJldHVybnMgdGhh
dCBsaXN0LgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6c3lzdGVtRm9udEZhbWlsaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvRm9udENhY2hlSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpz
eXN0ZW1Gb250RmFtaWxpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q2FjaGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1p
bGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcyk6CisKIDIw
MTUtMDctMTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiB1cGRhdGUgJCQoKSB0byByZXR1cm4gYW4gQXJyYXkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCmluZGV4IGVlNmFkYzQ3YzMyZDI5MjNhYWE5MTliYTQ3ZTZhNjVjMWU2ZWNl
NjguLmRiOTBjZTYyMDk0ZDRhNjgzOGFjNDBhZDBjYmQ0NTA1OWM2YzUxNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE1LTA3LTIzICBEZXZpbiBSb3Vzc28g
IDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgYSBmdW5j
dGlvbiB0byBDU1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRlZCBzeXN0ZW0g
Zm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NzAwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9CYXNlL01haW4uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5hY3RpdmF0ZUV4dHJhRG9tYWlucyk6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9h
ZGVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1ZXN0Q1NTQ29tcGxldGlv
bnMuZm9udEZhbWlseU5hbWVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0Nv
bXBsZXRpb25zLnJlcXVlc3RDU1NDb21wbGV0aW9ucyk6CisgICAgICAgIE5vdyBhbHNvIGdyYWJz
IHRoZSBsaXN0IG9mIHN5c3RlbSBmb250IGZhbWlseSBuYW1lcyBhbmQgYWRkcyB0aGF0IGxpc3Qg
dG8gdGhlIGV4aXN0aW5nIGNvbXBsZXRpb24KKyAgICAgICAgbGlzdCBmb3IgYm90aCBmb250IGFu
ZCBmb250LWZhbWlseSBpbiBDU1NLZXl3b3JkQ29tcGxldGlvbnMuCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVzdENTU05hbWVDb21wbGV0aW9ucyk6IERlbGV0ZWQu
CisKIDIwMTUtMDctMTUgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFJlc2l6aW5nIFRpbWVsaW5lUnVsZXIgc2VsZWN0aW9uIG9uIGJv
dGggc2lkZXMgZG9lc24ndCB3b3JrIHdpdGggc25hcHBpbmcgZW5hYmxlZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KaW5kZXggZjAyMjE2
ZGJmMzY1MDAwYWY0ZTZiZjE1MWExNzhkMjZkYTljYmUzZi4uMWIzMjY0YmY0ZGMzY2E5YTQ3NGMx
MWNiYzc0MWY4NzVkYzQzNTk1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0NTUy5qc29uCkBAIC0zNDgsNiArMzQ4LDEzIEBACiAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyBhbGwgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBuYW1l
cy4iCiAgICAgICAgIH0sCiAgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImdldFN1cHBv
cnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcyIsCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImZvbnRGYW1pbHlOYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJkZXNjcmlwdGlvbiI6ICJTdXBwb3J0
ZWQgc3lzdGVtIGZvbnQgZmFtaWxpZXMuIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlJldHVybnMgYWxsIHN1cHBvcnRlZCBzeXN0ZW0gZm9udCBmYW1pbHkg
bmFtZXMuIgorICAgICAgICB9LAorICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJmb3Jj
ZVBzZXVkb1N0YXRlIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibm9kZUlkIiwgIiRyZWYiOiAiRE9NLk5vZGVJZCIsICJkZXNjcmlwdGlv
biI6ICJUaGUgZWxlbWVudCBpZCBmb3Igd2hpY2ggdG8gZm9yY2UgdGhlIHBzZXVkbyBzdGF0ZS4i
IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApp
bmRleCAzZDA2MjA4MzRlYjI4Y2RmZDA2YjU4Y2Q2NjI2YmEzYzE0OGU3MTkxLi5kZGE5Yjg4Njk5
MTlmOWFlYzNkMjBhMWViZmE4YjYwM2Y0NjcxOGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRl
ICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIK
ICNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKQEAgLTcwOCw2ICs3MDksMTcgQEAg
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxJbnNwZWN0b3IKICAgICBjc3NQcm9wZXJ0aWVzID0gV1RGOjptb3ZlKHBy
b3BlcnRpZXMpOwogfQogCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRTeXN0
ZW1Gb250RmFtaWx5TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4mIGZvbnRGYW1pbHlOYW1lcykKK3sKKyAgICBhdXRvIGZhbWlsaWVz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiBzeXN0ZW1Gb250RmFtaWxpZXMgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigp
LnN5c3RlbUZvbnRGYW1pbGllcygpOworICAgIGZvciAoY29uc3QgYXV0byYgZmFtaWx5TmFtZSA6
IHN5c3RlbUZvbnRGYW1pbGllcykKKyAgICAgICAgZmFtaWxpZXMtPmFkZEl0ZW0oZmFtaWx5TmFt
ZSk7CisKKyAgICBmb250RmFtaWx5TmFtZXMgPSBXVEY6Om1vdmUoZmFtaWxpZXMpOworfQorCiB2
b2lkIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgSW5zcGVjdG9yQXJyYXkmIGZvcmNlZFBzZXVkb0Ns
YXNzZXMpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9tQWdlbnQtPmFzc2VydEVsZW1l
bnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5oCmluZGV4IGE2MzBmZTU2NzJhMGM4YjRlNjI2MWYyNGI2NTA1NzI2NWIw
NmQ1MTEuLmVjZTAyOTkzOWNjZGEwMTA5OGMxYWRmMzg3NzZmNjBlNjMxYWI1ODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC0xMTksNiArMTE5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJp
bmcmLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcnVsZUlkLCBjb25zdCBTdHJp
bmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYg
cmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkUnVsZShFcnJvclN0cmluZyYs
IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1By
b3BlcnR5SW5mbz4+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRTdXBw
b3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0TmFtZWRGbG93Q29sbGVjdGlvbihFcnJvclN0cmluZyYsIGlu
dCBkb2N1bWVudE5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93Pj4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggMzE5ODlh
ZTU0YTFjY2E0YzBjNWRiMWViYWY3YzViOGYwZGU0YzVkYi4uMTc2YTMzMDJhYjMwMTkxODM3N2Rh
YWM0ZTNmYzlhOGY3Y2M0NDBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmgKQEAgLTExMCwxMCArMTEwLDkgQEAgY2xhc3MgRm9udENhY2hlIHsKIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRm9udENhY2hlJiBzaW5nbGV0b24oKTsK
IAotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KKyAg
ICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCiAgICAg
UmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIEFs
c28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgorICAgIFZlY3RvcjxTdHJpbmc+IHN5c3Rl
bUZvbnRGYW1pbGllcygpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAKICNpZiBQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5kZXggYjIzMjcxNjc4ZGMxZTg1
MjJmZGVhMWMzNWMwZTk5YzhjMTY1OTg1NS4uYzdhN2VhOGMxNDE0NzdlY2RiYWFjNTFlMzVlNWM1
OGFiYmVlYjg1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtOTgsNiArOTgs
MTMgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJz
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAgICByZXR1cm4gZm9udEZvclBsYXRmb3Jt
RGF0YShhbHRlcm5hdGVGb250RGF0YSk7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IEZvbnRDYWNoZTo6
c3lzdGVtRm9udEZhbWlsaWVzKCkKK3sKKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzE0NzAxOD4gV2ViIEluc3BlY3RvcjogW0ZyZWV0eXBlXSBBbGxvdyBpbnNwZWN0b3IgdG8g
cmV0cmlldmUgYSBsaXN0IG9mIHN5c3RlbSBmb250cworICAgIFZlY3RvcjxTdHJpbmc+IGZvbnRG
YW1pbGllczsKKyAgICByZXR1cm4gZm9udEZhbWlsaWVzOworfQorCiBSZWY8Rm9udD4gRm9udENh
Y2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKQogewogICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJhY2sgZm9udCBo
ZXJlLCBvdGhlcndpc2UgdGhlIGxvZ2ljIHByZXZlbnRpbmcgRm9udENvbmZpZwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KaW5k
ZXggYzkxMzFjMmM4NDg3YzRlNzliNjJmZGMzYWEyNTNlZDNkZjYxYTc4ZS4uMzFmYTZkMzA2MGM1
YTE2OGRiNjgzOTIyNTU3NTU2YmMxNTExODI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCkBAIC00NjIsNiArNDYyLDEz
IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAgcmV0dXJuIGxhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoZGVzY3JpcHRpb24pOwogfQogCitWZWN0b3I8U3RyaW5nPiBGb250Q2FjaGU6OnN5c3Rl
bUZvbnRGYW1pbGllcygpCit7CisgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8x
NDcwMzM+IFdlYiBJbnNwZWN0b3I6IFtpT1NdIEFsbG93IGluc3BlY3RvciB0byByZXRyaWV2ZSBh
IGxpc3Qgb2Ygc3lzdGVtIGZvbnRzCisgICAgVmVjdG9yPFN0cmluZz4gZm9udEZhbWlsaWVzOwor
ICAgIHJldHVybiBmb250RmFtaWxpZXM7Cit9CisKIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNp
bWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgLy8g
QXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBv
biB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCmluZGV4IDZkOWM0ZjhiNDQyMzUw
MGNhMWQ0MzEwYTA3ZWUzMmU1ZWQ5ZTcwNDcuLjM4NWY5NjM1ZTBhY2E3YTZmZTAwNGQzYzI5MWU2
M2NiZWVhMTAzNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250Q2FjaGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQpAQCAtNTI3LDYgKzUyNywyNiBAQCBSZWZQdHI8Rm9udD4g
Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcgogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQp
OwogfQogCitWZWN0b3I8U3RyaW5nPiBGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcygpCit7
CisgICAgVmVjdG9yPFN0cmluZz4gZm9udEZhbWlsaWVzOworICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBhdmFpbGFibGVGb250RmFtaWxpZXMgPSBhZG9wdENGKENURm9udE1hbmFnZXJDb3B5QXZh
aWxhYmxlRm9udEZhbWlseU5hbWVzKCkpOworICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0
Q291bnQoYXZhaWxhYmxlRm9udEZhbWlsaWVzLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENGU3RyaW5nUmVmIGZvbnROYW1lID0gc3Rh
dGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXZhaWxhYmxlRm9u
dEZhbWlsaWVzLmdldCgpLCBpKSk7CisgICAgICAgIGlmIChDRkdldFR5cGVJRChmb250TmFtZSkg
IT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvIG1ha2UgdGhlIGhpZGRlbiBzeXN0ZW0gZm9udHMgdmlzaWJsZSBhbmQgc2luY2Ug
dGhleQorICAgICAgICAvLyBhbGwgYmVnaW4gd2l0aCBhIHBlcmlvZCwgaWdub3JlIGFsbCBmb250
cyB0aGF0IGJlZ2luIHdpdGggYSBwZXJpb2QuCisgICAgICAgIGlmIChDRlN0cmluZ0hhc1ByZWZp
eChmb250TmFtZSwgQ0ZTVFIoIi4iKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Zm9udEZhbWlsaWVzLmFwcGVuZChmb250TmFtZSk7CisgICAgfQorICAgIHJldHVybiBmb250RmFt
aWxpZXM7Cit9CisKIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFu
IGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKaW5kZXgg
NDc5Y2I4NTZlMWU4MTI0ZDUyZjNiNWFkMzcwMTkxMWIwNDZiNTVlMS4uYWZhNDg0MWVkZjk2OWRm
MmU0ZGIxNTQ1NTBjYTFmZDhjMjMxNjE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAgLTMwOSw2ICszMDksMTMg
QEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgp
OwogfQogCitWZWN0b3I8U3RyaW5nPiBGb250Q2FjaGU6OnN5c3RlbUZvbnRGYW1pbGllcygpCit7
CisgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDcwMTc+IFdlYiBJbnNwZWN0
b3I6IFtXaW5dIEFsbG93IGluc3BlY3RvciB0byByZXRyaWV2ZSBhIGxpc3Qgb2Ygc3lzdGVtIGZv
bnRzCisgICAgVmVjdG9yPFN0cmluZz4gZm9udEZhbWlsaWVzOworICAgIHJldHVybiBmb250RmFt
aWxpZXM7Cit9CisKIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBM
T0dGT05UJiBmb250LCBBdG9taWNTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKQogewogICAgIEF0
b21pY1N0cmluZyBmYW1pbHlOYW1lID0gU3RyaW5nKGZvbnQubGZGYWNlTmFtZSwgd2Nzbmxlbihm
b250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKaW5kZXggYjUwMmYyMGUwMjM5MjFkZTUzZWM2
YzNjMDAwYjIwM2NlYWU4ODE1Yy4uYjRlYmYwZmRjNjc3MmY1ODk3NzNmZjQ3MDIzOWQyYzgxNDBi
MjQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFz
ZS9NYWluLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2Uv
TWFpbi5qcwpAQCAtOTAsNyArOTAsNyBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24o
KQogICAgICAgICBJbnNwZWN0b3JBZ2VudC5lbmFibGUoKTsKIAogICAgIC8vIFBlcmZvcm0gb25l
LXRpbWUgdGFza3MuCi0gICAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RDU1NO
YW1lQ29tcGxldGlvbnMoKTsKKyAgICBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVz
dENTU0NvbXBsZXRpb25zKCk7CiAgICAgdGhpcy5fZ2VuZXJhdGVEaXNjbG9zdXJlVHJpYW5nbGVJ
bWFnZXMoKTsKIAogICAgIC8vIExpc3RlbiBmb3IgdGhlIFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQg
ZXZlbnQgYmVmb3JlIHJlZ2lzdGVyaW5nIGZvciBldmVudHMgc28gb3VyIGNvZGUgZ2V0cyBjYWxs
ZWQgYmVmb3JlIGFueSBtYW5hZ2VycyBvciBzaWRlYmFycy4KQEAgLTUwMSw3ICs1MDEsNyBAQCBX
ZWJJbnNwZWN0b3IuYWN0aXZhdGVFeHRyYURvbWFpbnMgPSBmdW5jdGlvbihkb21haW5zKQogCiAg
ICAgdGhpcy5ub3RpZmljYXRpb25zLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0
b3IuTm90aWZpY2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwgeyJkb21haW5zIjogZG9tYWlu
c30pOwogCi0gICAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RDU1NOYW1lQ29t
cGxldGlvbnMoKTsKKyAgICBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucmVxdWVzdENTU0Nv
bXBsZXRpb25zKCk7CiAKICAgICB0aGlzLl91cGRhdGVSZWxvYWRUb29sYmFyQnV0dG9uKCk7CiAg
ICAgdGhpcy5fdXBkYXRlRG93bmxvYWRUb29sYmFyQnV0dG9uKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanMKaW5kZXggYTBiZWRjMDk2ZjMw
NWQ5MzVlMmFlNTI5ZWY0YjdlYTExN2MxZjRjMy4uMWVkODQ0YTA3N2I4ZDMyNTE3MjVjNDQyNzhi
YmZjMTk2MTZlNWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQmFzZS9UZXN0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0Jhc2UvVGVzdC5qcwpAQCAtNjksNyArNjksNyBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0g
ZnVuY3Rpb24oKQogICAgIENvbnNvbGVBZ2VudC5lbmFibGUoKTsKIAogICAgIC8vIFBlcmZvcm0g
b25lLXRpbWUgdGFza3MuCi0gICAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnJlcXVlc3RD
U1NOYW1lQ29tcGxldGlvbnMoKTsKKyAgICBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucmVx
dWVzdENTU0NvbXBsZXRpb25zKCk7CiAKICAgICAvLyBHbG9iYWwgc2V0dGluZ3MuCiAgICAgdGhp
cy5zaG93U2hhZG93RE9NU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygic2hvdy1z
aGFkb3ctZG9tIiwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlvbnMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlvbnMuanMKaW5kZXggNTU1MTVhOWNm
MmFjYjVhMGI4ZDYyY2M5Yzg4YWNlNWRhODE1NjBmMy4uNDdmZTY3ZTJmNWMwNjk1MzIyOWZmODFl
NDIwZjI3MDhlM2VkNmY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qcwpAQCAtNzYsNyArNzYs
NyBAQCBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMgPSBjbGFzcyBDU1NDb21wbGV0aW9ucwog
CiAgICAgLy8gU3RhdGljCiAKLSAgICBzdGF0aWMgcmVxdWVzdENTU05hbWVDb21wbGV0aW9ucygp
CisgICAgc3RhdGljIHJlcXVlc3RDU1NDb21wbGV0aW9ucygpCiAgICAgewogICAgICAgICBpZiAo
V2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLmNzc05hbWVDb21wbGV0aW9ucykKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTE1OCw4ICsxNTgsMjEgQEAgV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRp
b25zID0gY2xhc3MgQ1NTQ29tcGxldGlvbnMKICAgICAgICAgICAgIHVwZGF0ZUNvZGVNaXJyb3JD
U1NNb2RlKCJ0ZXh0L3gtc2NzcyIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpbmRvdy5D
U1NBZ2VudCkKKyAgICAgICAgZnVuY3Rpb24gZm9udEZhbWlseU5hbWVzQ2FsbGJhY2soZXJyb3Is
IGZvbnRGYW1pbHlOYW1lcykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm9yKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkNTU0tleXdv
cmRDb21wbGV0aW9ucy5hZGRQcm9wZXJ0eUNvbXBsZXRpb25WYWx1ZXMoImZvbnQtZmFtaWx5Iiwg
Zm9udEZhbWlseU5hbWVzKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5DU1NLZXl3b3JkQ29t
cGxldGlvbnMuYWRkUHJvcGVydHlDb21wbGV0aW9uVmFsdWVzKCJmb250IiwgZm9udEZhbWlseU5h
bWVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cuQ1NTQWdlbnQpIHsKICAgICAg
ICAgICAgIENTU0FnZW50LmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMocHJvcGVydHlOYW1lc0Nh
bGxiYWNrKTsKKworICAgICAgICAgICAgaWYgKENTU0FnZW50LmdldFN1cHBvcnRlZFN5c3RlbUZv
bnRGYW1pbHlOYW1lcykKKyAgICAgICAgICAgICAgICBDU1NBZ2VudC5nZXRTdXBwb3J0ZWRTeXN0
ZW1Gb250RmFtaWx5TmFtZXMoZm9udEZhbWlseU5hbWVzQ2FsbGJhY2spOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gUHVibGljCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODM0NjAzZjA1ZjQ5YTU5NWE3NjJhYmJhODZj
ZDQ1Y2VmODAyN2IzMS4uYTNiMzhhNTEzYTUyNGE3NjVlNzllMDQ5YjczOGU5MWYxOTg3MDBiMyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE1LTA3LTE2ICBEZXZpbiBSb3Vzc28gIDxkcm91c3Nv
QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgYSBmdW5jdGlvbiB0byBD
U1NDb21wbGV0aW9ucyB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRlZCBzeXN0ZW0gZm9udHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzAwOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNraXAgdGhlIGdl
dC1zeXN0ZW0tZm9udHMgdGVzdCB1bnRpbCBpdCBpcyBpbXBsZW1lbnRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVz
dEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoK
KworICAgICAgICBBZGRlZCB0aGUgZ2V0LXN5c3RlbS1mb250cyB0ZXN0IHRoYXQgcmV0dXJucyB0
aGUgbGlzdCBvZiBzeXN0ZW0gZm9udHMuCisgICAgICAgICogaW5zcGVjdG9yL2Nzcy9nZXQtc3lz
dGVtLWZvbnRzLWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Nzcy9nZXQtc3lz
dGVtLWZvbnRzLmh0bWw6CisKIDIwMTUtMDctMTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB1cGRhdGUgJCQoKSB0byByZXR1
cm4gYW4gQXJyYXkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5
c3RlbS1mb250cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL2dldC1z
eXN0ZW0tZm9udHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlMzE2MWJlMGFhMTA0MDYxNjM0
YmIwOWE4NDA0NmUzNjZiYjc3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvY3NzL2dldC1zeXN0ZW0tZm9udHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAor
SGFzIGF0IGxlYXN0IDUgZm9udHM6IHRydWUKK1BBU1M6IEluY2x1ZGVzIEFyaWFsCitQQVNTOiBJ
bmNsdWRlcyBUaW1lcworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL2dl
dC1zeXN0ZW0tZm9udHMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3MvZ2V0LXN5c3Rl
bS1mb250cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzZWYyNzRjNThhY2M3MDVhY2JmY2VlMjZmNjM4Zjg3
MDY4NjJiODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL2dl
dC1zeXN0ZW0tZm9udHMuaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorLy8gVGVzdGluZyB0aGF0IHdlIGNhbiBnZXQgdGhlIGZvbnRzIG9uIHRoZSBzeXN0ZW0gYW5k
IHRoYXQgdGhlIGZvbnRzIGNvbnRhaW4gc29tZSB1bml2ZXJzYWwgZm9udHMgKGFyaWFsLCB0aW1l
cywgZXRjKS4KK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgZnVuY3Rpb24gaGFzRm9udEZhbWlseShm
b250RmFtaWxpZXMsIGZvbnRGYW1pbHkpIHsKKyAgICAgICAgcmV0dXJuIChmb250RmFtaWxpZXMu
aW5jbHVkZXMoZm9udEZhbWlseSkgPyAiUEFTUzogSW5jbHVkZXMgIiA6ICJGQUlMOiBNaXNzaW5n
ICIpICsgZm9udEZhbWlseTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmb250RmFtaWx5TmFtZXND
YWxsYmFjayhlcnJvciwgZm9udEZhbWlseU5hbWVzKSB7CisgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KCFlcnJvciwgIkVycm9yIGluIGdldHRpbmcgZm9udCBmYW1pbHkgbmFtZXMuIik7CisK
KyAgICAgICAgaWYgKCFlcnJvcikgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkhh
cyBhdCBsZWFzdCA1IGZvbnRzOiAiICsgKGZvbnRGYW1pbHlOYW1lcy5sZW5ndGggPj0gNSkpOwor
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coaGFzRm9udEZhbWlseShmb250RmFtaWx5TmFt
ZXMsICJBcmlhbCIpKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKGhhc0ZvbnRGYW1p
bHkoZm9udEZhbWlseU5hbWVzLCAiVGltZXMiKSk7CisgICAgICAgIH0KKworICAgICAgICBJbnNw
ZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgIH0KKyAgICBDU1NBZ2VudC5nZXRTdXBwb3J0
ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoZm9udEZhbWlseU5hbWVzQ2FsbGJhY2spOworfQorPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+PC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA5ZTI3YWM2
M2VjYjI2ZGUxMzk3NTJlNGQ2MWExMGU2YjYwNzM1ZTQ5Li5mNTczZTA4YTA0ZGRiNjUxZWNhMDQ0
MDVhNDkwZDI5ZGMxNjBiYWJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwv
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtNjYwLDYgKzY2MCw4IEBAIHdlYmtpdC5vcmcvYi8xMzYyMjcgbWF0aG1sL3Zl
cnktbGFyZ2Utc3RyZXRjaHktb3BlcmF0b3JzLmh0bWwgWyBDcmFzaCBUaW1lb3V0IFBhCiAKICN3
ZWJraXQub3JnL2IvMTQyMTU4IGluc3BlY3Rvci1wcm90b2NvbC9kb20vcmVtb3ZlLW11bHRpcGxl
LW5vZGVzLmh0bWwgWyBDcmFzaCBQYXNzIF0KIAord2Via2l0Lm9yZy9iLzE0NzAxOCBpbnNwZWN0
b3IvY3NzL2dldC1zeXN0ZW0tZm9udHMuaHRtbCBbIFNraXAgXQorCiAjLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwogIyBGTEFLWSBURVNUUwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0
YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXgg
YjRkNjcyMGUwYjIwNTEzMDRmYzk3Yjg1MWJiZDQxMWE2NjIwMTZjZi4uNTdjYmIxMTk2OWExNmI3
YTU4Nzk3YmZhOGNlMTI4ZDIyYjA4NzZmNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTEzMTksNiArMTMxOSw3IEBAIHdlYmtpdC5vcmcvYi8xMzc2OTgg
bWVkaWEvdmlkZW8tY29udHJvbHMtZHJhZy5odG1sIFsgVGltZW91dCBdCiAKIHdlYmtpdC5vcmcv
Yi8xMzkzNjIgaW5zcGVjdG9yL2Nzcy9wc2V1ZG8tZWxlbWVudC1tYXRjaGVzLmh0bWwgWyBUaW1l
b3V0IF0KIHdlYmtpdC5vcmcvYi8xMzkzNjIgaW5zcGVjdG9yL2Nzcy9zZWxlY3Rvci1zcGVjaWZp
Y2l0eS5odG1sIFsgVGltZW91dCBQYXNzIF0KK3dlYmtpdC5vcmcvYi8xNDcwMTggaW5zcGVjdG9y
L2Nzcy9nZXQtc3lzdGVtLWZvbnRzLmh0bWwgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzEzOTM2
MyBtZWRpYS9tZWRpYS1jb250cm9scy10aW1lbGluZS11cGRhdGVzLmh0bWwgWyBUaW1lb3V0IF0K
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhZDgyYjdj
NDY3ZjhlNzEyY2YzNTM1NGRkMmQ5NWJhZGVkMTE0ODBhLi4wNjliY2RkODRiMGM4MjM2MTI2YzRi
ZWNmYzQ5MGFjMDIyYWE3MzA3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVj
dGF0aW9ucwpAQCAtMjM1OSw2ICsyMzU5LDggQEAgaW5zcGVjdG9yL2RvbS9jb250ZW50LW5vZGUt
cmVnaW9uLWluZm8uaHRtbCBbIENyYXNoIFBhc3MgRmFpbHVyZSBUaW1lb3V0IF0KIGluc3BlY3Rv
ci9jc3Mvc2VsZWN0b3Itc3BlY2lmaWNpdHkuaHRtbCBbIFNraXAgXQogaW5zcGVjdG9yL2Nzcy9w
c2V1ZG8tZWxlbWVudC1tYXRjaGVzLmh0bWwgWyBTa2lwIF0KIAord2Via2l0Lm9yZy9iLzE0NzAx
NyBpbnNwZWN0b3IvY3NzL2dldC1zeXN0ZW0tZm9udHMuaHRtbCBbIFNraXAgXQorCiAjIEluc3Bl
Y3RvciBQcm90b2NvbAogd2Via2l0Lm9yZy9iLzE0MDUxMCBpbnNwZWN0b3ItcHJvdG9jb2wvZGVi
dWdnZXIvdGVybWluYXRlLWRlZGljYXRlZC13b3JrZXItd2hpbGUtcGF1c2VkLmh0bWwgWyBTa2lw
IF0gICMgQ3Jhc2hpbmcKIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9wYXVzZS1vbi1hc3Nl
cnQuaHRtbCBbIFNraXAgXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>