<?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>22339</bug_id>
          
          <creation_ts>2008-11-18 11:34:32 -0800</creation_ts>
          <short_desc>Support Indian web sites with EOT by on-the-fly transcoding to Unicode</short_desc>
          <delta_ts>2013-02-11 14:12:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>14637</blocked>
    
    <blocked>24906</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jungshik Shin">jshin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>ian</cc>
    
    <cc>jdaggett</cc>
    
    <cc>mike</cc>
    
    <cc>mjs</cc>
    
    <cc>nickshanks</cc>
    
    <cc>prunthaban</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>99192</commentid>
    <comment_count>0</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2008-11-18 11:34:32 -0800</bug_when>
    <thetext>In a mail thread http://lists.macosforge.org/pipermail/webkit-dev/2008-October/005493.html

we decided not to support EOT in webkit. Instead, Maciej came up with a brilliant idea of using the facility for &apos;text-transform&apos; to convert the content of a text-node (font-encoded) to Unicode on the fly. This transcoding will be triggered by a pre-configured list of (web site, font) pairs. Which transcoder to use will be keyed by (web site, font) as well. 

Prunthaban has looked into implementing transcoders to webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104074</commentid>
    <comment_count>1</comment_count>
      <attachid>26367</attachid>
    <who name="Prunthaban">prunthaban</who>
    <bug_when>2009-01-02 05:55:01 -0800</bug_when>
    <thetext>Created attachment 26367
Patch to support on-the-fly transcoding for one font

This patch gives the whole framework to support transcoding on-the-fly when a page is rendered. All transcoder related code is protected by ENABLE(TRANSCODER) condition. The different classes used in this patch are to facilitate transcoding. There are 2 abstract classes which needs to be inherited to add support for new fonts/languages.
Encoder - This class is responsible for transforming the ASCII content into an intermediate form.
Converter - This class converts the intermediate form into the target language.

This patch at present supports one type of font encoding (TSCII - http://www.tscii.org/ A standardized Tamil font). The site I have used to test the code is &apos;www.kalkiweekly.com&apos; a weekly tamil magazine. 
At present the Singleton class Transformer stores the allowed list of sites and fonts. The domain-font list is hardcoded now. I think this should be fine because we do not have any plans to extend this framework to support all dynamic fonts (which will be equal to supporting EOT). Each encoder needs one class (which peroforms look-up and additional processing when required). The size of the look-up table is on average not more than 200-300 entries. 
The entire logic behind this transcoding has been taken from padma.mozdev.org an open source Javascript based transcoder. I have done some automation to convert the tables in Padma to look-up tables in C++. So once we decide what fonts and domains we are going to allow, it should not take much time to develop the corresponding Converters &amp; Encoders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104104</commentid>
    <comment_count>2</comment_count>
      <attachid>26367</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-02 10:16:53 -0800</bug_when>
    <thetext>Comment on attachment 26367
Patch to support on-the-fly transcoding for one font

Thanks for taking this on! I think this feature will be good for WebKit.

I&apos;m a little disappointed at how much code you&apos;re putting up for review all at once. This includes both the &quot;transcode based on font&quot; infrastructure, but also some new codecs for Tamil and TSCII.

I don&apos;t think it&apos;s good to have the transcoding be based on the origin of the web page. We don&apos;t want the same content to work differently when it&apos;s on different servers. We should use the font family names alone, and not involve the security origin!

I think the concept we want here is that certain font names require re-decoding the characters. So the interface to that would be a single function, something like this:

    TextEncoding encodingForFont(const AtomicString&amp; familyName);

Or perhaps like this:

    TextEncoding encodingForFont(const FontFamily&amp;);

That function can go in platform/text or possibly in the rendering directory.

You&apos;d give that map a font family name and ask it if there&apos;s a special encoding. If there is, the encoding would be represented by a TextEncoding object. To transcode, we&apos;d first re-encode by using TextEncoding::encode on the text, using the encoding of the web page the text was found in, document()-&gt;decoder()-&gt;encoding(), to convert the text back from UTF-16 into the original bytes. Then we&apos;d re-decode those original bytes by using TextEncoding::decode on the bytes, using the text encoding returned by encodingForFont. This would give us new, corrected UTF-16. Something like this:

    CString reencodedBytes = document()-&gt;decoder()-&gt;encoding().encode(characters, length, QuestionMarksForUnencodables);
    bool sawError;
    String transcodedText = fontBasedEncoding.decode(reencodedBytes.data(), reencodedBytes.length(), false, sawError);

If we do not already have suitable codecs for TSCII and Tamil -- and I&apos;m surprised that ICU does not include these -- then the right way to add those is to add them via the TextCodec machinery, in the platform/text directory along with the other codecs. TextEncodingRegistry.cpp is the starting point where the various codecs register the encoding names they can handle.

We definitely don&apos;t need a new directory for transcoding functions in the render tree code!

&gt; +2009-01-02  prunthaban  &lt;prunthaban@google.com&gt;

This should have your full name, not just your login name.

&gt; +        Test: fast/css/font-face-transcoder.html

The ChangeLog entry needs to describe what you&apos;ve changed. It should include the URL of the bug, title of the bug, and a description of the changes.

Ideally, each file and function should have comments about what changed. Although for new files it&apos;s better to omit the list of functions, even though the prepare-ChangeLog script generates it. So, for example, you&apos;d want a comment about RenderText::styleDidChange explaining the change to that function, but you wouldn&apos;t want Encoder::maximumLookupLength.

&gt; +#if ENABLE(TRANSCODER)

The global setting is called TRANSCODER, but that seems like far too vague a name. Transcoding could mean many different things, and we need something that&apos;s more specific. That&apos;s a problem with many of the names in your patch. You&apos;re sharing the namespace with the rest of WebCore, so you need specific enough names.

For example, you have Transcoder and Transformer. Not a clear distinction between the two. All these classes need more specific names. But also I don&apos;t think they need to exist (see my suggested design above).

In general, this design uses too many separate objects that each have to be allocated separately and too many different function calls. I believe it&apos;s going to be unnecessarily inefficient because of that.

&gt; +    if (isTranscoderText()) {
&gt; +        m_text = transcode(String(m_text-&gt;characters(), m_text-&gt;length()));
&gt; +    }

Single line if statements should not have braces around them in the WebKit coding style.

This code is going to run on every style change and risks slowing down browsing on sites that don&apos;t involve the specially-named fonts. We have to design this isTranscoderText function and how it&apos;s used in the render tree so that it is very fast. I think that means that we need a design where the font family makes the decision about whether transcoding is involved and that gets stored rather than being recomputed each time styleDidChange on each RenderText object. I think the right place to store this is probably the WebCore::Font object.

&gt; +    String origin = document()-&gt;securityOrigin()-&gt;domain();
&gt; +    Transformer* trans = transformer();

There&apos;s no need to abbreviate the name of the local variable like this, and we try to avoid that. Our preferred style is to either use the transformer() function directly without a local variable at all, or if there is a real efficiency reason to use a local variable, we do this:

    Transformer* transformer = this-&gt;transformer();

&gt; +PassRefPtr&lt;StringImpl&gt; RenderText::transcode(String text)

Functions should almost never take a String argument, because that unnecessarily churns the reference count of the string. Instead the argument should be const String&amp;, or in some cases it should be a character pointer and a length.

&gt; +    String family = style()-&gt;font().family().family().string();
&gt; +    String transformed = transformer()-&gt;convert(text, family);
&gt; +    return StringImpl::create(transformed.characters(),transformed.length());

Need a space after the comma.

This is an unnecessarily inefficient idiom here. We already have the string in a StringImpl, and then you create a new one by calling StringImpl::create; that copies all the characters for no good reason. I think the return value should just be a String, but if you really find it useful to have the return value be a PassRefPtr&lt;StringImpl&gt;, you should return transformed.impl(). WebCore strings are immutable, so there&apos;s almost never a need to copy them.

&gt; +#if ENABLE(TRANSCODER)
&gt; +    bool isTranscoderText() const;
&gt; +    PassRefPtr&lt;StringImpl&gt; transcode(String);
&gt; +#endif

These functions should be private, not public.

The function name isTranscoderText is not good. The text isn&apos;t &quot;transcoder text&quot;, so &quot;is transcoder text&quot; is not the right name for it. Perhaps textNeedsTranscoding() is a good name. 

&gt; +class Converter {
&gt; +public:
&gt; +    virtual String transcode(UChar) = 0;
&gt; +};

This is much too vague a name for a class. A &quot;converter&quot; could convert anything into anything else. It needs a more specific name, one that mentions transcoding I think. But we shouldn&apos;t have this at all, so it&apos;s not worth commenting on it in too much detail.

The interface to this class is unnecessarily inefficient. Typically we don&apos;t want to make a separate function call for each character. Functions normally work on runs of characters for efficiency&apos;s sake. Further, returning a String for each character means doing multiple memory allocations per character. You need an API that takes efficiency into account. For example, you could have an API that takes both an input and output UChar buffer with some rules about the size of the buffer that allow it to be allocated on the stack.

&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;DynamicParser.h&quot;
&gt; +#include &quot;Syllable.h&quot;
&gt; +#include &quot;Transcoder.h&quot;
&gt; +#include &lt;wtf/PassRefPtr.h&gt;
&gt; +#include &quot;StringImpl.h&quot;

There should be a blank line after DynamicParser.h, the main header of the file. Then the includes should be sorted with the &quot;sort&quot; tool. Thus, StringImpl.h should be higher up the list.

&gt; +DynamicParser::DynamicParser(String input, Encoder* encoder)

Should be const String&amp;.

&gt; +String DynamicParser::removeRedundantSymbols()
&gt; +{
&gt; +    String output = &quot;&quot;;
&gt; +    for (int i = 0; i &lt; m_text.length(); i++) {
&gt; +        UChar c = m_text[i];
&gt; +        if (!m_encoder-&gt;isRedundant(c))
&gt; +            output.append(c);
&gt; +    }
&gt; +    return output;
&gt; +}

No function should append characters to a String object one character at a time. That&apos;s extremely inefficient. Instead you should use a Vector&lt;UChar&gt; and then convert the vector to a string at the end using the String::adopt function.

&gt; +        }
&gt; +        else {

The close brace goes on the same line as the else in the WebKit coding style.

&gt; \ No newline at end of file

Please put newlines at the end of the file.

I&apos;m going to stop commenting on the details of the specific transcoder you wrote at this point. The more important point is that since this is a translation from one encoding to another, it should use the TextCodec API and be in the platform/text directory, not in the WebCore/rendering directory. There probably doesn&apos;t need to be a WebCore/rendering/transcoder directory at all.
&gt; +TSCIIEncoder::TSCIIEncoder()

Is TSCII an encoding that&apos;s not supported by ICU? Do we really need a custom codec in WebKit for this? The heavy use of strings in these encoders is going to make it unnecessarily slow.

review- for now; lets try a new patch that either adds the new codecs or adds the new machinery for special decoding, but not both. We can test the decoding machinery using some codec that&apos;s already supported and a special font name.

The main tricky part here is adding this machinery without slowing down browsing that doesn&apos;t involve the special fonts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104513</commentid>
    <comment_count>3</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-01-05 17:06:57 -0800</bug_when>
    <thetext>Great that this is coming along ! Thank you, Prunthaban !

I think TSCII support should be in a separate bug. Actually, I&apos;d rather not support it at all.  Well, I added it to Gecko a long time ago, but in 2009, I&apos;d rather not.  Anyway, that should be separate from this bug and has to be implemented by adding a converter for TSCII (as Darin wrote). 

To Darin: no, TSCII is not a part of the ICU.  

As for converting back to the byte streama(using windows-1252 - the claimed encoding of Indian pages) and then back again to Unicode (using a font-specific encoding), I&apos;m afraid it&apos;s too a roundabout way.  Maciej&apos;s original idea in the webkit list was to treat the transcoding as a form of &apos;text-transform&apos;. That means working entirely in the Unicode space.  

IMHO, ICU&apos;s Transformer APIs [1] are good for that kind (m-to-n) of transformation (Unicode to Unicode). The downside is that there are webkit ports that do not use ICU.  For that, I suggested (offline?) that we add a helper class/function that will be implemented using ICU (for ports that use ICU) and implemented with something else for ports that do not use ICU. The advantage is that the amount of the code to implement that in ports using ICU would be much smaller than what &apos;s in the patch. There may be an issue with loading/storing the transformation rules for font-based-encodings. (we don&apos;t want to build all those rules - a few dozens of them - as a part of webkit binary but rather want to load if/when necessary).



[1] http://www.icu-project.org/userguide/Transform.html
    http://www.icu-project.org/userguide/TransformRule.html



</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104858</commentid>
    <comment_count>4</comment_count>
    <who name="Prunthaban">prunthaban</who>
    <bug_when>2009-01-08 03:37:41 -0800</bug_when>
    <thetext>Thanks for the review comments.
Let me explain why I have chosen this approach. 
There are few dozen Indic fonts and each of them has their own glyf-to-ascii mapping. Now if we really want to write transformation rules for them from scratch, I am afraid it cannot be done by one person. It requires good understanding of how conjuncts are handled in that particular language. Considering these limitations, we needed an alternate method where we can develop these codecs with least effort. Padma plug-in ( http://padma.mozdev.org ) seems to be the right choice because
1) It has an active developer community which is constantly improving it.
2) It supports almost all major fonts in all major indic languages.
3) Some of the Padma developers showed interest in helping to port the Javascript code to C++.

The logic behind the code (present in this patch) were directly taken from Padma. The main transcoder code base (Syllable and Parser classes) are written to handle all types of fonts. They transform the ASCII characters into an intermediate form before transforming them again into Unicode. They find this approach easy and flexible. There were some re-arranging of characters done to simplify the look-up process.

If we take the ICU path, then we need to write all the font transformation rules and we need to have people having knowledge of each language and font (I presume that is the case - I have not worked with ICU in the past. If I am wrong, let me know).

Regarding simplifying the look-up process and minimize the number of classes, I am not sure to what extent we can simplify it because the code depends on Padma. By taking the Padma-way, it should be easier to maintain and update (whenever Padma code-base is updated).

Let me know your thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104881</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-08 09:10:17 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; As for converting back to the byte streama(using windows-1252 - the claimed
&gt; encoding of Indian pages) and then back again to Unicode (using a font-specific
&gt; encoding), I&apos;m afraid it&apos;s too a roundabout way.  Maciej&apos;s original idea in the
&gt; webkit list was to treat the transcoding as a form of &apos;text-transform&apos;. That
&gt; means working entirely in the Unicode space.

I don&apos;t agree. I believe the point here is that we have decoded the byte stream incorrectly because we didn&apos;t realize the font requires a particular encoding. We need to undo that and then re-decode.

You&apos;ve stated that this should be done entirely in the Unicode space, but I don&apos;t agree. This is working around incorrect decoding, so what it should be doing is new decoding. I agree that it&apos;s transcoding, but the cleanest model is to use re-decoding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104907</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-08 11:29:41 -0800</bug_when>
    <thetext>For the record (and as discussed previously offline), I think that we should consider using the existing Padma JavaScript code without adaptation. The cases where transcoding is needed are becoming more and more rare, so the expediency of re-using the whole code base may outweigh performance and even architecture concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105844</commentid>
    <comment_count>7</comment_count>
    <who name="Prunthaban">prunthaban</who>
    <bug_when>2009-01-14 21:29:54 -0800</bug_when>
    <thetext>Hi,

Before submitting a new patch, I would like to get clarification on certain issues.
The current encoding machinery I use is from Padma and the Padma architecture is different from the current TextEncoding machinery of Webkit.
(i) Padma uses a generic code base to transcode any font. These generic routines do bulk of the pre-processing. When you need to add a new font, it is enough to add two look-up tables and pass the corresponding objects to this transcoder.
(ii) Padma converts the ASCII characters into an intermediate form before converting them into unicode characters of a particular language (So there is an additional level in the transcoding).

Now, if we want to use the TextEncoding architecture of Webkit, (if my understanding is correct) we need to have one TextEncoding class for each font we add. But as I stated earlier, Padma transcoders share ~80% code across fonts &amp; languages and the only way we can achieve this is to make those TextEncoding objects call the corresponding routines in the Padma implementation. So effectively we will still have all the Padma architecture hidden behind an additional level of TextEncoding objects.

If we need to get rid of the Padma code-base, then we need to write encoders for each font from scratch which is a big effort.

The main classes used in this implementation are,
1) Syllable
2) Parser
3) DynamicParser
4) Converter
5) Encoder

The first 3 classes are the core of the transcoding API. Additionally each font requires one Encoder and each language requires a Converter. We need to pass the encoder and converter to the API to perform transcoding on any font (Other than this there is one Singleton and another static helper class with helper methods).

So after looking into the TextEncoding API of WebKit, I am not sure how we can simplify the existing Padma architecture by using TextEncoding.
What are your thoughts on this?

Regards,
Prunthaban</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106023</commentid>
    <comment_count>8</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-01-15 22:44:25 -0800</bug_when>
    <thetext>I agree with Alexey and Prunthaban that the ability to use a bunch of pre-written custom transcoders is a huge benefit. And since this is a legacy compatibility feature, I would say that outweighs the desire to take the cleaner approach of undecoding and then re-decoding to unicode.

I also think the origin restrictions are ok, based on what we have heard; the idea is to limit further propagation of mis-encoded text using custom fonts. However, having such restrictions may make it hard to create layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106455</commentid>
    <comment_count>9</comment_count>
      <attachid>26892</attachid>
    <who name="Prunthaban">prunthaban</who>
    <bug_when>2009-01-21 03:57:39 -0800</bug_when>
    <thetext>Created attachment 26892
Patch to support on-the-fly transcoding for one font (new version)

Here is a summary of changes made in this new patch:

* The naming of classes has been changed. Earlier I had Transformer and Transcoder. One of the classes were removed (the functionality has been moved to a common class because they are very similar). Now the class is called FontTranscoder. Other classes has been renamed as well as per Darin&apos;s review comments.
* The global setting is renamed to TEXT_TRANSCODER. I think this should be fine.
* The efficiency of the transcoding process has been improved in this new patch. I have made the converters to act on a range of UChars in one shot. Also all String building methods now use Vector&lt;UChar&gt; to build the string and finally use String::adopt().
* The classes has been moved under platform/text. But I am still keeping them under a special directory because we need to add a dozen more Encoders and Converters. So I felt it will be good to keep them separate. If it is ok to have all of them directly under platform/text then we can move it there. Let me know your thoughts on this.
* All the review comments by Darin has been taken care of except using the TextCodec machinery of WebKit. As I mentioned in my previous mail, this implementation is based on Padma. The Padma architecture allows us to add new encoders (for each font. Based on our requirement we might add a dozen fonts initially) and converters (one for each language)  easily. They just plug-in to the existing code base. Instead, if we use one TextCodec for each font, then these codecs should either duplicate the logic or rely on external (Padma based) classes to do the transcoding. In the latter case the TextCodec will simply add one new layer to the transcoding process. Also the current implementation does not exactly fit into a code-decode process. The current implementation converts text (in a particular indic font) into an intermediate form and this intermediate form (there is no decoding logic from intermediate form to the initial font) will get converted into the target language. Considering the difference in architecture, I am still keeping the transcoding machinery separate.
* The TSCII Encoder I have added is just one encoder. There will be atleast a dozen more (once we figure out what are the major sites we want to support).
* Site based restriction for transcoding has been removed. As mjs suggested, if we want to bring it back we can do so., Let me know whether we need this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107446</commentid>
    <comment_count>10</comment_count>
    <who name="Prunthaban">prunthaban</who>
    <bug_when>2009-01-28 19:20:48 -0800</bug_when>
    <thetext>When can I expect a review for this? 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109830</commentid>
    <comment_count>11</comment_count>
      <attachid>26892</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-16 00:00:37 -0800</bug_when>
    <thetext>Comment on attachment 26892
Patch to support on-the-fly transcoding for one font (new version)

Wow, if the world ever needed a for loop, looks like this might be it!

   m_lookupTable.set(String(in + 0, 1), String(out + 0, 1));
 125     m_lookupTable.set(String(in + 1, 1), String(out + 1, 1));
 126</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109831</commentid>
    <comment_count>12</comment_count>
    <who name="Prunthaban">prunthaban</who>
    <bug_when>2009-02-16 00:47:46 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 26892 [review])
&gt; Wow, if the world ever needed a for loop, looks like this might be it!
&gt; 
&gt;    m_lookupTable.set(String(in + 0, 1), String(out + 0, 1));
&gt;  125     m_lookupTable.set(String(in + 1, 1), String(out + 1, 1));
&gt;  126 
&gt; 
The problem is the Strings are not always of length 1 and they do not follow an order. I should have still had the length in an array and used a for loop. But then we will ultimately end up having two extra arrays with numbers filled in and a loop accumulating the start index. This part of the code was generated from Padma JS file using an automated program I have written (so that it will be easier to do the same for other fonts) and it was easier to keep it this way. If for readability, the loop based approach is preferred, I will change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110658</commentid>
    <comment_count>13</comment_count>
      <attachid>26892</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-23 16:37:01 -0800</bug_when>
    <thetext>Comment on attachment 26892
Patch to support on-the-fly transcoding for one font (new version)

&gt; + virtual Vector&lt;UChar&gt; transcode(const UChar* characters, int length) = 0;

Returning a Vector&lt;UChar&gt; is inefficient, because it requires copying the entire vector; it&apos;s not reference counted or anything like that. Instead the transcoder should take a Vector&lt;UChar&gt;&amp; as an &quot;out&quot; parameter and put the result into the vector.

&gt; +#if ENABLE(TEXT_TRANSCODER)
&gt; +    , m_isTranscodableFont(transcoder()-&gt;isSupportedFont(family().family().string()))
&gt; +#endif

How many different Font objects are created when browsing? Will this additional function call and hash table overhead have measurable performance impact? If not, why not?

&gt; +#include &quot;StringImpl.h&quot;

This include should not be needed. Please double check there are no extra includes.

&gt; +namespace WebCore
&gt; +{

The brace should go on the same line.

&gt; +DynamicParser::DynamicParser(const String&amp; input, FontEncoder* encoder)
&gt; +    : Parser(input, encoder)

Ownership is unclear to me. What guarantees the lifetime of the FontEncoder?

&gt; +    if (encoder-&gt;isPreprocessRequired())

Name should be isPreprocessingRequired.

&gt; +    m_length = m_text.length();

Why store a separate m_length if it&apos;s always the same as m_text.length()?

&gt; +    m_hasSuffixes = m_encoder-&gt;hasSuffixes();

Why store m_hasSuffixes rather than calling m_encoder-&gt;hasSuffixes() each time?

&gt; +String DynamicParser::removeRedundantSymbols()
&gt; +{
&gt; +    Vector&lt;UChar&gt; response;
&gt; +    for (int i = 0; i &lt; m_text.length(); i++) {
&gt; +        UChar c = m_text[i];
&gt; +        if (!m_encoder-&gt;isRedundant(c))
&gt; +            response.append(c);
&gt; +    }
&gt; +    return String::adopt(response);
&gt; +}

For better performance, it would be best to just return m_text as-is if there are no redundant symbols rather than constructing a new String object. You should do a reserveCapacity on the vector since it typically will be about the same length as m_text. The index should be size_t, not int.

&gt; +                String lookupKey = m_text.substring(m_index, i);

The substring operation requires memory allocation so it is expensive. Is there a way to do this without allocating new strings all the time?

&gt; +    String gunintam = syllable.gunintam();
&gt; +    if (gunintam.length() == 2)
&gt; +        syllable.setGunintam(m_encoder-&gt;handleTwoPartVowelSigns(gunintam[0], gunintam[1]));

If guintam is always two characters, then I suggest returning two characters rather than allocating a string.

&gt; +#include &quot;FontEncoder.h&quot;
&gt; +#include &quot;Parser.h&quot;
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;Syllable.h&quot;

You need to include &quot;Parser.h&quot; here, but all of the other includes seem unnecssary.

&gt; +    DynamicParser(const String&amp; input, FontEncoder* encoder);

In WebKit code we leave out argument names that are clear based on only the type. For example &quot;encoder&quot; would be omitted here.

&gt; +    virtual bool handleConsonantTermination(Syllable&amp; syllable);

And &quot;syllable&quot; here.

&gt; +    virtual bool isCurrentSyllableComplete(SyllableType type);

And &quot;type&quot; here.

&gt; +#include &quot;PlatformString.h&quot;

This file doesn&apos;t use String, it uses Vector and UChar, so it should include the headers for those, not &quot;PlatformString.h&quot;.

&gt; +namespace WebCore
&gt; +{

Brace goes up on previous line.

&gt; +    virtual String preprocessMessage(const String&amp;);
&gt; +    virtual bool isPreprocessRequired();
&gt; +    virtual bool hasSuffixes();
&gt; +    virtual bool isOverloaded(const String&amp;);
&gt; +    virtual bool isSuffixSymbol(const String&amp;);
&gt; +    virtual bool isPrefixSymbol(const String&amp;);
&gt; +
&gt; +    virtual String lookup(const String&amp; key) = 0;
&gt; +    virtual String handleTwoPartVowelSigns(UChar a, UChar b) = 0;

The names &quot;a&quot; and &quot;b&quot; should be omitted here.

The interface here is heavy on use of String; this will cause the text to have to be put into lots of separate String objects. Could these functions instead work some other way so they won&apos;t require so much memory allocation?

&gt; Property changes on: WebCore/platform/text/transcoder/FontEncoder.h
&gt; ___________________________________________________________________
&gt; Name: svn:executable
&gt;    + *

Please do not submit patches with executable source files.

&gt; +const SyllableType FontTranscoder::type[] = {TypeAccuMod, TypeAccuMod, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeHalluMod, TypeUnknown, TypeUnknown, TypeDigit, TypeDigit, 
&gt; +    TypeDigit, TypeDigit, TypeDigit, TypeDigit, TypeDigit, TypeDigit, TypeDigit, 
&gt; +    TypeDigit, TypeGunintam, TypeGunintam, TypeGunintam, TypeGunintam, 
&gt; +    TypeUnknown, TypeUnknown, TypeAccu, TypeAccu, TypeAccu, TypeAccu, TypeAccu, 
&gt; +    TypeAccu, TypeAccu, TypeAccu, TypeAccu, TypeAccu, TypeAccu, TypeAccu, 
&gt; +    TypeAccu, TypeAccu, TypeAccu, TypeAccu, TypeAccu, TypeAccu, TypeAccu, 
&gt; +    TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, 
&gt; +    TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, 
&gt; +    TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, 
&gt; +    TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, 
&gt; +    TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, 
&gt; +    TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, 
&gt; +    TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, 
&gt; +    TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeHallu, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeDigit, TypeDigit, TypeDigit, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeHalluMod, TypeHalluMod, TypeAccuMod, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeGunintam, TypeGunintam, TypeGunintam, TypeGunintam, TypeGunintam, 
&gt; +    TypeGunintam, TypeGunintam, TypeGunintam, TypeGunintam, TypeGunintam, 
&gt; +    TypeGunintam, TypeGunintam, TypeGunintam, TypeGunintam, TypeGunintam, 
&gt; +    TypeGunintam, TypeGunintam, TypeVattu, TypeHallu, TypeVattu, TypeHallu, 
&gt; +    TypeVattu, TypeVattu, TypeHallu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, 
&gt; +    TypeHallu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, TypeHallu, 
&gt; +    TypeVattu, TypeHallu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, 
&gt; +    TypeVattu, TypeVattu, TypeVattu, TypeHallu, TypeVattu, TypeVattu, TypeVattu, 
&gt; +    TypeVattu, TypeVattu, TypeHallu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, 
&gt; +    TypeVattu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, 
&gt; +    TypeVattu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, TypeVattu, 
&gt; +    TypeVattu, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, 
&gt; +    TypeUnknown, TypeUnknown, TypeUnknown, TypeUnknown, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeHalfForm, 
&gt; +    TypeHalfForm, TypeHalfForm, TypeHalfForm, TypeUnknown };

Formatting here doesn&apos;t put braces where we normally would.

&gt; +    // Assign index to fonts
&gt; +    m_encoderIndex.set(&quot;InaiMathiNewTSC&quot;,0);
&gt; +
&gt; +    m_converterIndex.set(&quot;InaiMathiNewTSC&quot;,0);

Why not put the actual pointers into these maps? I don&apos;t see a reason to have them go indirectly through array indices. And why not have a single map with a struct that holds both the encoder and the converter?

&gt; +    m_transcodableSites.add(&quot;www.kalkiweekly.com&quot;);

Requiring a particular host name seems like a bad idea. I think the font name should be enough. Did we already discuss this?

&gt; +bool FontTranscoder::isTranscodableSite(const String&amp; origin) const
&gt; +{
&gt; +    return m_transcodableSites.contains(origin);
&gt; +}

Why no check for empty string here?

&gt; +String FontTranscoder::convert(const String&amp; text, const String&amp; font)
&gt; +{
&gt; +    if (!m_encoderIndex.contains(font) || !m_converterIndex.contains(font))
&gt; +        return text;
&gt; +    int encoderIndex = m_encoderIndex.get(font);
&gt; +    int converterIndex = m_converterIndex.get(font);

This is a poor idiom because it does extra hash table lookups. With a find call you can both check if something is in the map and get at the value that&apos;s in there. That&apos;s twice as fast as doing a contains followed by a get. By making this a single map you can make this four times faster.

&gt; +    Parser* parser = new DynamicParser(text, m_encoders[encoderIndex]);

You should use OwnPtr here rather than an explicit call to delete.

&gt; +class FontTranscoder {
&gt; +public:
&gt; +    static const int baseIndex = 0xEC00;
&gt; +    static const int baseStart = 0xEC22;
&gt; +    static const int baseEnd   = 0xEC68;
&gt; +    static const int dependentStart = 0xECA2;
&gt; +    static const int dependentEnd   = 0xECE8;
&gt; +    static const int halfStart = 0xED33;
&gt; +    static const int halfEnd   = 0xED68;
&gt; +    static const int vattuStart = 0xECB3;
&gt; +    static const int vattuEnd   = 0xECE8;
&gt; +
&gt; +    // Constants definitions
&gt; +    static const UChar anusvara = 0xEC00;
&gt; +    static const UChar visarga = 0xEC01;
&gt; +    static const UChar pollu = 0xEC02;
&gt; +    static const UChar chillu = 0xEC0D;
&gt; +    static const UChar syllbreak = 0xEC7B;
&gt; +    static const UChar nukta = 0xEC7C;
&gt; +    static const UChar ardhavisarga = 0xEC7D;
&gt; +    static const UChar tippi = 0xEC7E;
&gt; +    static const UChar addak = 0xEC7F;
&gt; +    static const UChar ekonkar = 0xEC80;
&gt; +    static const UChar virama = 0xEC02;
&gt; +    static const UChar chandrakkala = 0xEC02;
&gt; +    static const UChar pulli = 0xEC02;
&gt; +    static const UChar halant = 0xEC02;
&gt; +    static const UChar hasant = 0xEC02;
&gt; +    static const UChar candrabindu = 0xEC03;
&gt; +    static const UChar avagraha = 0xEC04;
&gt; +    static const UChar yati = 0xEC05;
&gt; +    static const UChar udAtta = 0xEC06;
&gt; +    static const UChar anudAtta = 0xEC07;
&gt; +    static const UChar svarita = 0xEC08;
&gt; +    static const UChar guru = 0xEC09;
&gt; +    static const UChar laghu = 0xEC0A;
&gt; +    static const UChar danda = 0xEC0B;
&gt; +    static const UChar ddanda = 0xEC0C;
&gt; +    static const UChar abbrev = 0xEC0E;
&gt; +    static const UChar om = 0xEC0F;
&gt; +    static const UChar digitZERO = 0xEC10;
&gt; +    static const UChar digitONE = 0xEC11;
&gt; +    static const UChar digitTWO = 0xEC12;
&gt; +    static const UChar digitTHREE = 0xEC13;
&gt; +    static const UChar digitFOUR = 0xEC14;
&gt; +    static const UChar digitFIVE = 0xEC15;
&gt; +    static const UChar digitSIX = 0xEC16;
&gt; +    static const UChar digitSEVEN = 0xEC17;
&gt; +    static const UChar digitEIGHT = 0xEC18;
&gt; +    static const UChar digitNINE = 0xEC19;
&gt; +    static const UChar vowelA = 0xEC20;
&gt; +    static const UChar vowelSHTA = 0xEC21;
&gt; +    static const UChar vowelAA = 0xEC22;
&gt; +    static const UChar vowelI = 0xEC23;
&gt; +    static const UChar vowelII = 0xEC24;
&gt; +    static const UChar vowelU = 0xEC25;
&gt; +    static const UChar vowelUU = 0xEC26;
&gt; +    static const UChar vowelR = 0xEC27;
&gt; +    static const UChar vowelRR = 0xEC28;
&gt; +    static const UChar vowelL = 0xEC29;
&gt; +    static const UChar vowelLL = 0xEC2A;
&gt; +    static const UChar vowelCDRE = 0xEC2B;
&gt; +    static const UChar vowelE = 0xEC2C;
&gt; +    static const UChar vowelEE = 0xEC2D;
&gt; +    static const UChar vowelAI = 0xEC2E;
&gt; +    static const UChar vowelCDRO = 0xEC2F;
&gt; +    static const UChar vowelO = 0xEC30;
&gt; +    static const UChar vowelOO = 0xEC31;
&gt; +    static const UChar vowelAU = 0xEC32;
&gt; +    static const UChar consntKA = 0xEC33;
&gt; +    static const UChar consntQA = 0xEC34;
&gt; +    static const UChar consntKHA = 0xEC35;
&gt; +    static const UChar consntKHHA = 0xEC36;
&gt; +    static const UChar consntGA = 0xEC37;
&gt; +    static const UChar consntGHA = 0xEC38;
&gt; +    static const UChar consntGHHA = 0xEC39;
&gt; +    static const UChar consntNGA = 0xEC3A;
&gt; +    static const UChar consntCA = 0xEC3B;
&gt; +    static const UChar consntCHA = 0xEC3C;
&gt; +    static const UChar consntJA = 0xEC3D;
&gt; +    static const UChar consntZA = 0xEC3E;
&gt; +    static const UChar consntJHA = 0xEC3F;
&gt; +    static const UChar consntNYA = 0xEC40;
&gt; +    static const UChar consntTTA = 0xEC41;
&gt; +    static const UChar consntTTHA = 0xEC42;
&gt; +    static const UChar consntDDA = 0xEC43;
&gt; +    static const UChar consntDDDHA = 0xEC44;
&gt; +    static const UChar consntDDHA = 0xEC45;
&gt; +    static const UChar consntRHA = 0xEC46;
&gt; +    static const UChar consntNNA = 0xEC47;
&gt; +    static const UChar consntTA = 0xEC48;
&gt; +    static const UChar consntTHA = 0xEC49;
&gt; +    static const UChar consntDA = 0xEC4A;
&gt; +    static const UChar consntDHA = 0xEC4B;
&gt; +    static const UChar consntNA = 0xEC4C;
&gt; +    static const UChar consntNNNA = 0xEC4D;
&gt; +    static const UChar consntPA = 0xEC4E;
&gt; +    static const UChar consntFA = 0xEC4F;
&gt; +    static const UChar consntPHA = 0xEC50;
&gt; +    static const UChar consntBA = 0xEC51;
&gt; +    static const UChar consntBHA = 0xEC52;
&gt; +    static const UChar consntMA = 0xEC53;
&gt; +    static const UChar consntYA = 0xEC54;
&gt; +    static const UChar consntYYA = 0xEC55;
&gt; +    static const UChar consntRA = 0xEC56;
&gt; +    static const UChar consntRRA = 0xEC57;
&gt; +    static const UChar consntLA = 0xEC58;
&gt; +    static const UChar consntLLA = 0xEC59;
&gt; +    static const UChar consntZHA = 0xEC5A;
&gt; +    static const UChar consntVA = 0xEC5B;
&gt; +    static const UChar consntSHA = 0xEC5C;
&gt; +    static const UChar consntSSA = 0xEC5D;
&gt; +    static const UChar consntSA = 0xEC5E;
&gt; +    static const UChar consntHA = 0xEC5F;
&gt; +    static const UChar consntTSA = 0xEC60;
&gt; +    static const UChar consntDJA = 0xEC61;
&gt; +    static const UChar consntGGA = 0xEC62;
&gt; +    static const UChar consntJJA = 0xEC63;
&gt; +    static const UChar consntDDDA = 0xEC64;
&gt; +    static const UChar consntBBA = 0xEC65;
&gt; +    static const UChar consntRAMD = 0xEC66;
&gt; +    static const UChar consntRALD = 0xEC67;
&gt; +    static const UChar consntKHANDATA = 0xEC68;
&gt; +    static const UChar vowelsnAA = 0xECA2;
&gt; +    static const UChar vowelsnI = 0xECA3;
&gt; +    static const UChar vowelsnII = 0xECA4;
&gt; +    static const UChar vowelsnU = 0xECA5;
&gt; +    static const UChar vowelsnUU = 0xECA6;
&gt; +    static const UChar vowelsnR = 0xECA7;
&gt; +    static const UChar vowelsnRR = 0xECA8;
&gt; +    static const UChar vowelsnL = 0xECA9;
&gt; +    static const UChar vowelsnLL = 0xECAA;
&gt; +    static const UChar vowelsnCDRE = 0xECAB;
&gt; +    static const UChar vowelsnE = 0xECAC;
&gt; +    static const UChar vowelsnEE = 0xECAD;
&gt; +    static const UChar vowelsnAI = 0xECAE;
&gt; +    static const UChar vowelsnCDRO = 0xECAF;
&gt; +    static const UChar vowelsnO = 0xECB0;
&gt; +    static const UChar vowelsnOO = 0xECB1;
&gt; +    static const UChar vowelsnAU = 0xECB2;
&gt; +    static const UChar vowelsnEELEN = 0xEC1A;
&gt; +    static const UChar vowelsnAILEN = 0xEC1B;
&gt; +    static const UChar vowelsnAULEN = 0xEC1C;
&gt; +    static const UChar vowelsnIILEN = 0xEC1D;
&gt; +    static const UChar vattuKA = 0xECB3;
&gt; +    static const UChar vattuQA = 0xECB4;
&gt; +    static const UChar vattuKHA = 0xECB5;
&gt; +    static const UChar vattuKHHA = 0xECB6;
&gt; +    static const UChar vattuGA = 0xECB7;
&gt; +    static const UChar vattuGHA = 0xECB8;
&gt; +    static const UChar vattuGHHA = 0xECB9;
&gt; +    static const UChar vattuNGA = 0xECBA;
&gt; +    static const UChar vattuCA = 0xECBB;
&gt; +    static const UChar vattuCHA = 0xECBC;
&gt; +    static const UChar vattuJA = 0xECBD;
&gt; +    static const UChar vattuZA = 0xECBE;
&gt; +    static const UChar vattuJHA = 0xECBF;
&gt; +    static const UChar vattuNYA = 0xECC0;
&gt; +    static const UChar vattuTTA = 0xECC1;
&gt; +    static const UChar vattuTTHA = 0xECC2;
&gt; +    static const UChar vattuDDA = 0xECC3;
&gt; +    static const UChar vattuDDDHA = 0xECC4;
&gt; +    static const UChar vattuDDHA = 0xECC5;
&gt; +    static const UChar vattuRHA = 0xECC6;
&gt; +    static const UChar vattuNNA = 0xECC7;
&gt; +    static const UChar vattuTA = 0xECC8;
&gt; +    static const UChar vattuTHA = 0xECC9;
&gt; +    static const UChar vattuDA = 0xECCA;
&gt; +    static const UChar vattuDHA = 0xECCB;
&gt; +    static const UChar vattuNA = 0xECCC;
&gt; +    static const UChar vattuNNNA = 0xECCD;
&gt; +    static const UChar vattuPA = 0xECCE;
&gt; +    static const UChar vattuFA = 0xECCF;
&gt; +    static const UChar vattuPHA = 0xECD0;
&gt; +    static const UChar vattuBA = 0xECD1;
&gt; +    static const UChar vattuBHA = 0xECD2;
&gt; +    static const UChar vattuMA = 0xECD3;
&gt; +    static const UChar vattuYA = 0xECD4;
&gt; +    static const UChar vattuYYA = 0xECD5;
&gt; +    static const UChar vattuRA = 0xECD6;
&gt; +    static const UChar vattuRRA = 0xECD7;
&gt; +    static const UChar vattuLA = 0xECD8;
&gt; +    static const UChar vattuLLA = 0xECD9;
&gt; +    static const UChar vattuZHA = 0xECDA;
&gt; +    static const UChar vattuVA = 0xECDB;
&gt; +    static const UChar vattuSHA = 0xECDC;
&gt; +    static const UChar vattuSSA = 0xECDD;
&gt; +    static const UChar vattuSA = 0xECDE;
&gt; +    static const UChar vattuHA = 0xECDF;
&gt; +    static const UChar vattuTSA = 0xECE0;
&gt; +    static const UChar vattuDJA = 0xECE1;
&gt; +    static const UChar vattuGGA = 0xECE2;
&gt; +    static const UChar vattuJJA = 0xECE3;
&gt; +    static const UChar vattuDDDA = 0xECE4;
&gt; +    static const UChar vattuBBA = 0xECE5;
&gt; +    static const UChar vattuRAMD = 0xECE6;
&gt; +    static const UChar vattuRALD = 0xECE7;
&gt; +    static const UChar vattuKHANDATA = 0xECE8;
&gt; +    static const UChar halffmKA = 0xED33;
&gt; +    static const UChar halffmQA = 0xED34;
&gt; +    static const UChar halffmKHA = 0xED35;
&gt; +    static const UChar halffmKHHA = 0xED36;
&gt; +    static const UChar halffmGA = 0xED37;
&gt; +    static const UChar halffmGHA = 0xED38;
&gt; +    static const UChar halffmGHHA = 0xED39;
&gt; +    static const UChar halffmNGA = 0xED3A;
&gt; +    static const UChar halffmCA = 0xED3B;
&gt; +    static const UChar halffmCHA = 0xED3C;
&gt; +    static const UChar halffmJA = 0xED3D;
&gt; +    static const UChar halffmZA = 0xED3E;
&gt; +    static const UChar halffmJHA = 0xED3F;
&gt; +    static const UChar halffmNYA = 0xED40;
&gt; +    static const UChar halffmTTA = 0xED41;
&gt; +    static const UChar halffmTTHA = 0xED42;
&gt; +    static const UChar halffmDDA = 0xED43;
&gt; +    static const UChar halffmDDDHA = 0xED44;
&gt; +    static const UChar halffmDDHA = 0xED45;
&gt; +    static const UChar halffmRHA = 0xED46;
&gt; +    static const UChar halffmNNA = 0xED47;
&gt; +    static const UChar halffmTA = 0xED48;
&gt; +    static const UChar halffmTHA = 0xED49;
&gt; +    static const UChar halffmDA = 0xED4A;
&gt; +    static const UChar halffmDHA = 0xED4B;
&gt; +    static const UChar halffmNA = 0xED4C;
&gt; +    static const UChar halffmNNNA = 0xED4D;
&gt; +    static const UChar halffmPA = 0xED4E;
&gt; +    static const UChar halffmFA = 0xED4F;
&gt; +    static const UChar halffmPHA = 0xED50;
&gt; +    static const UChar halffmBA = 0xED51;
&gt; +    static const UChar halffmBHA = 0xED52;
&gt; +    static const UChar halffmMA = 0xED53;
&gt; +    static const UChar halffmYA = 0xED54;
&gt; +    static const UChar halffmYYA = 0xED55;
&gt; +    static const UChar halffmRA = 0xED56;
&gt; +    static const UChar halffmRRA = 0xED57;
&gt; +    static const UChar halffmLA = 0xED58;
&gt; +    static const UChar halffmLLA = 0xED59;
&gt; +    static const UChar halffmZHA = 0xED5A;
&gt; +    static const UChar halffmVA = 0xED5B;
&gt; +    static const UChar halffmSHA = 0xED5C;
&gt; +    static const UChar halffmSSA = 0xED5D;
&gt; +    static const UChar halffmSA = 0xED5E;
&gt; +    static const UChar halffmHA = 0xED5F;
&gt; +    static const UChar halffmTSA = 0xED60;
&gt; +    static const UChar halffmDJA = 0xED61;
&gt; +    static const UChar halffmGGA = 0xED62;
&gt; +    static const UChar halffmJJA = 0xED63;
&gt; +    static const UChar halffmDDDA = 0xED64;
&gt; +    static const UChar halffmBBA = 0xED65;
&gt; +    static const UChar halffmRAMD = 0xED66;
&gt; +    static const UChar halffmRALD = 0xED67;
&gt; +    static const UChar halffmKHANDATA = 0xED68;
&gt; +    static const UChar digitTEN = 0xEC70;
&gt; +    static const UChar digitHUNDRED = 0xEC71;
&gt; +    static const UChar digitTHOUSAND = 0xEC72;
&gt; +    static const UChar signDAY = 0xEC73;
&gt; +    static const UChar signMONTH = 0xEC74;
&gt; +    static const UChar signYEAR = 0xEC75;
&gt; +    static const UChar signDEBIT = 0xEC76;
&gt; +    static const UChar signCREDIT = 0xEC77;
&gt; +    static const UChar signASABOVE = 0xEC78;
&gt; +    static const UChar signRUPEE = 0xEC79;
&gt; +    static const UChar signNUMBER = 0xEC7A;
&gt; +
&gt; +    static const UChar UniCodeSharedNUKTA    = 0x093C;
&gt; +    static const UChar UniCodeSharedAVAGRAHA = 0x093D;
&gt; +    static const UChar UniCodeSharedOM       = 0x0950;
&gt; +    static const UChar UniCodeSharedUDATTA   = 0x0951;
&gt; +    static const UChar UniCodeSharedANUDATTA = 0x0952;
&gt; +    static const UChar UniCodeSharedSVARITA  = 0x0951;
&gt; +    static const UChar UniCodeSharedDANDA    = 0x0964;
&gt; +    static const UChar UniCodeSharedDDANDA   = 0x0965;
&gt; +    static const UChar UniCodeSharedabbrev   = 0x0970;
&gt; +    static const UChar UniCodeSharedZWNJ     = 0x200C;
&gt; +    static const UChar UniCodeSharedZWJ      = 0x200D;

Unicode doesn&apos;t have a capital &quot;C&quot;.

I don&apos;t understand why these constants are part of the public interface to FontTranscoder. Can we put them somewhere else?

&gt; +    static String fastVattu(UChar code)
&gt; +    {
&gt; +        String response = &quot;&quot;;
&gt; +        response.append(static_cast&lt;UChar&gt;(code + 0x80));
&gt; +        return response;
&gt; +    }

To construct a single-character string, you should initialize a character and then:

    return String(&amp;character, 1);

But don&apos;t do it. Don&apos;t create interfaces that require allocating a string (two calls to the memory allocator, and reference counting overhead) to hold a single character!

&gt; +    static String baseForm(const String&amp; input) 
&gt; +    {
&gt; +        Vector&lt;UChar&gt; response;
&gt; +        for (int i = 0; i &lt; input.length(); i++) {
&gt; +            UChar code = input[i];
&gt; +            if (code &gt;= dependentStart &amp;&amp; code &lt;= dependentEnd)
&gt; +                response.append(static_cast&lt;UChar&gt;(code - 0x80));
&gt; +            if (code &gt;= halfStart &amp;&amp; code &lt;= halfEnd)
&gt; +                response.append(static_cast&lt;UChar&gt;(code - 0x100));
&gt; +        }
&gt; +        return String::adopt(response);
&gt; +    }

I don&apos;t understand why these helper functions are public members of the FontTranscoder class. There&apos;s no need for clients using this class to see these. Lets find somewhere else to put these. These functions use strings way too much -- it&apos;s going to make the code slow!

&gt; +                if(!value.isNull())
&gt; +                    break;

Need a space after the &quot;if&quot; here.

&gt; +void Parser::process(const String&amp; value, const String&amp; key, Syllable&amp; current
&gt; +                     ,bool prefix, bool suffix)

Comma goes at the end of the previous line, not the start of the next line.

Also, we frown on the use of bools for things like &quot;prefix&quot; and &quot;suffix&quot;. Makes the code hard to understand at the call site.

&gt; +typedef enum 
&gt; +{
&gt; +    TransformerUnicode,
&gt; +    TransformerISCII,
&gt; +    TransformerITrans,
&gt; +    TransformerTSCII,
&gt; +    TransformerTAB,
&gt; +    TransformerTAM,
&gt; +    TransformerDynamicFonts
&gt; +} TransformerType;

This is the C language way to do an enum. In C++ you can just do:

    enum TransformerType {
    };

&gt; +    void process(const String&amp; value
&gt; +            ,const String&amp; key
&gt; +            ,Syllable&amp; syllable
&gt; +            ,bool prefix = false
&gt; +            ,bool suffix = false);

Commas in the wrong place here.

&gt; +    for (int i = 0; i &lt; input.length(); i++) {
&gt; +        if (i != 0)
&gt; +            type = FontTranscoder::getType(input[i]);
&gt; +        if (type == TypeAccu || type == TypeDigit || type == TypeHallu 
&gt; +            || type == TypeUnknown)
&gt; +            m_body.append(input[i]);
&gt; +        else if (type == TypeHalfForm) {
&gt; +            if (suffix)
&gt; +                m_body.insert(input.characters() + i,1,0);
&gt; +            else
&gt; +                m_body.append(input[i]);
&gt; +        } else if (type == TypeGunintam) {
&gt; +            if (prefix)
&gt; +                m_prefixGunintam.append(input[i]);
&gt; +            else
&gt; +                m_gunintam.append(input[i]);
&gt; +        } else if (type == TypeVattu) {
&gt; +            if (prefix)
&gt; +                m_prefixVattu.append(input[i]);
&gt; +            else
&gt; +                m_body.append(input[i]);
&gt; +        } else if (type == TypeAccuMod)
&gt; +            m_vowelModifier.append(input[i]);
&gt; +        else if (type == TypeHalluMod)
&gt; +            m_consonantModifier.append(input[i]);
&gt; +    }

Building a String object a character at a time is going to be excruciatingly slow. You need a better idiom for this, perhaps using Vector&lt;UChar&gt; instead.

&gt; +public:
&gt; +    static const UChar visarga = 0x00B7;
&gt; +    static const UChar vowelA = 0x00AB;
&gt; +    static const UChar vowelAA = 0x00AC;
&gt; +    static const UChar vowelI1 = 0x00AD;
&gt; +    static const UChar vowelI2 = 0x00FE;
&gt; +    static const UChar vowelII = 0x00AE;
&gt; +    static const UChar vowelU = 0x00AF;
&gt; +    static const UChar vowelUU = 0x00B0;
&gt; +    static const UChar vowelE = 0x00B1;
&gt; +    static const UChar vowelEE = 0x00B2;
&gt; +    static const UChar vowelAI = 0x00B3;
&gt; +    static const UChar vowelO = 0x00B4;
&gt; +    static const UChar vowelOO = 0x00B5;
&gt; +    static const UChar vowelAU = 0x00B6;
&gt; +    static const UChar consntKA = 0x00B8;
&gt; +    static const UChar consntNGA = 0x00B9;
&gt; +    static const UChar consntCA = 0x00BA;
&gt; +    static const UChar consntJA = 0x0192;
&gt; +    static const UChar consntNYA = 0x00BB;
&gt; +    static const UChar consntTTA = 0x00BC;
&gt; +    static const UChar consntNNA = 0x00BD;
&gt; +    static const UChar consntTA = 0x00BE;
&gt; +    static const UChar consntNA = 0x00BF;
&gt; +    static const UChar consntNNNA = 0x00C9;
&gt; +    static const UChar consntPA = 0x00C0;
&gt; +    static const UChar consntMA = 0x00C1;
&gt; +    static const UChar consntYA = 0x00C2;
&gt; +    static const UChar consntRA = 0x00C3;
&gt; +    static const UChar consntLA = 0x00C4;
&gt; +    static const UChar consntVA = 0x00C5;
&gt; +    static const UChar consntZHA = 0x00C6;
&gt; +    static const UChar consntLLA = 0x00C7;
&gt; +    static const UChar consntRRA = 0x00C8;
&gt; +    static const UChar consntSSA = 0x201E;
&gt; +    static const UChar consntSA = 0x2026;
&gt; +    static const UChar consntHA = 0x2020;
&gt; +    static const UChar conjctKSH = 0x2021;
&gt; +    static const UChar conjctSRII = 0x201A;
&gt; +    static const UChar vowelsnAA = 0x00A1;
&gt; +    static const UChar vowelsnI = 0x00A2;
&gt; +    static const UChar vowelsnII = 0x00A3;
&gt; +    static const UChar vowelsnU = 0x00A4;
&gt; +    static const UChar vowelsnUU = 0x00A5;
&gt; +    static const UChar vowelsnE = 0x00A6;
&gt; +    static const UChar vowelsnEE = 0x00A7;
&gt; +    static const UChar vowelsnAI = 0x00A8;
&gt; +    static const UChar vowelsnAULEN = 0x00AA;
&gt; +    static const UChar comboKPULLI = 0x00EC;
&gt; +    static const UChar comboNGPULLI = 0x00ED;
&gt; +    static const UChar comboCPULLI = 0x00EE;
&gt; +    static const UChar comboJPULLI = 0x02C6;
&gt; +    static const UChar comboNYPULLI = 0x00EF;
&gt; +    static const UChar comboTTPULLI = 0x00F0;
&gt; +    static const UChar comboNNPULLI = 0x00F1;
&gt; +    static const UChar comboTPULLI = 0x00F2;
&gt; +    static const UChar comboNPULLI = 0x00F3;
&gt; +    static const UChar comboNNNPULLI = 0x00FD;
&gt; +    static const UChar comboPPULLI = 0x00F4;
&gt; +    static const UChar comboMPULLI = 0x00F5;
&gt; +    static const UChar comboYPULLI = 0x00F6;
&gt; +    static const UChar comboRPULLI = 0x00F7;
&gt; +    static const UChar comboLPULLI = 0x00F8;
&gt; +    static const UChar comboVPULLI = 0x00F9;
&gt; +    static const UChar comboZHPULLI = 0x00FA;
&gt; +    static const UChar comboLLPULLI = 0x00FB;
&gt; +    static const UChar comboSSPULLI = 0x2030;
&gt; +    static const UChar comboSPULLI = 0x0160;
&gt; +    static const UChar comboHPULLI = 0x2039;
&gt; +    static const UChar comboRRPULLI = 0x00FC;
&gt; +    static const UChar comboKSHPULLI = 0x0152;
&gt; +    static const UChar comboTTI = 0x00CA;
&gt; +    static const UChar comboTTII = 0x00CB;
&gt; +    static const UChar comboKU = 0x00CC;
&gt; +    static const UChar comboKUU = 0x00DC;
&gt; +    static const UChar comboNGU = 0x2122;
&gt; +    static const UChar comboNGUU = 0x203A;
&gt; +    static const UChar comboCU = 0x00CD;
&gt; +    static const UChar comboCUU = 0x00DD;
&gt; +    static const UChar comboNYU = 0x0161;
&gt; +    static const UChar comboNYUU = 0x0153;
&gt; +    static const UChar comboTTU = 0x00CE;
&gt; +    static const UChar comboTTUU = 0x00DE;
&gt; +    static const UChar comboNNU = 0x00CF;
&gt; +    static const UChar comboNNUU = 0x00DF;
&gt; +    static const UChar comboTU = 0x00D0;
&gt; +    static const UChar comboTUU = 0x00E0;
&gt; +    static const UChar comboNU = 0x00D1;
&gt; +    static const UChar comboNUU = 0x00E1;
&gt; +    static const UChar comboNNNU = 0x00DB;
&gt; +    static const UChar comboNNNUU = 0x00EB;
&gt; +    static const UChar comboPU = 0x00D2;
&gt; +    static const UChar comboPUU = 0x00E2;
&gt; +    static const UChar comboMU = 0x00D3;
&gt; +    static const UChar comboMUU = 0x00E3;
&gt; +    static const UChar comboYU = 0x00D4;
&gt; +    static const UChar comboYUU = 0x00E4;
&gt; +    static const UChar comboRU = 0x00D5;
&gt; +    static const UChar comboRUU = 0x00E5;
&gt; +    static const UChar comboLU = 0x00D6;
&gt; +    static const UChar comboLUU = 0x00E6;
&gt; +    static const UChar comboVU = 0x00D7;
&gt; +    static const UChar comboVUU = 0x00E7;
&gt; +    static const UChar comboZHU = 0x00D8;
&gt; +    static const UChar comboZHUU = 0x00E8;
&gt; +    static const UChar comboLLU = 0x00D9;
&gt; +    static const UChar comboLLUU = 0x00E9;
&gt; +    static const UChar comboRRU = 0x00DA;
&gt; +    static const UChar comboRRUU = 0x00EA;
&gt; +    static const UChar digitZERO = 0x20AC;
&gt; +    static const UChar digitONE = 0x0081;
&gt; +    static const UChar digitTWO = 0x008D;
&gt; +    static const UChar digitTHREE = 0x017D;
&gt; +    static const UChar digitFOUR = 0x008F;
&gt; +    static const UChar digitFIVE = 0x0090;
&gt; +    static const UChar digitSIX = 0x2022;
&gt; +    static const UChar digitSEVEN = 0x2013;
&gt; +    static const UChar digitEIGHT = 0x2014;
&gt; +    static const UChar digitNINE = 0x02DC;
&gt; +    static const UChar digitTEN = 0x009D;
&gt; +    static const UChar digitHUNDRED = 0x017E;
&gt; +    static const UChar digitTHOUSAND = 0x0178;
&gt; +    static const UChar LQTSINGLE = 0x2018;
&gt; +    static const UChar RQTSINGLE = 0x2019;
&gt; +    static const UChar LQTDOUBLE = 0x201C;
&gt; +    static const UChar RQTDOUBLE = 0x201D;
&gt; +    static const UChar COPYRIGGHT = 0x00A9;

These should be private unless they are part of the public interface to this class. Ideally they shouldn&apos;t be class members at all. They could just go inside the .cpp file.

In general, names for Unicode characters should go into the CharacterNames.h header and should be the names from the Unicode specification, without any runs of all capital letters. For example: copyrightSign.

&gt; -    if (oldTransform != style()-&gt;textTransform() || oldSecurity != style()-&gt;textSecurity()) {
&gt; +    if (oldTransform != style()-&gt;textTransform() || oldSecurity != style()-&gt;textSecurity()
&gt; +#if ENABLE(TEXT_TRANSCODER)
&gt; +        || style()-&gt;font().isTranscodableFont()
&gt; +#endif

This check seems wrong. It doesn&apos;t even check if the font changed. If it&apos;s the same font, we have no reason to re-transcode.

&gt; +#if ENABLE(TEXT_TRANSCODER)
&gt; +    if (style()-&gt;font().isTranscodableFont())
&gt; +        m_text = transcode(String(m_text-&gt;characters(), m_text-&gt;length()));
&gt; +#endif

Should just be String(m_text) here -- this code unnecessarily makes a deep copy.

&gt;  #include &quot;RenderObject.h&quot;
&gt; +#include &lt;wtf/HashSet.h&gt;
&gt; +#include &lt;wtf/HashMap.h&gt;

Why did you add these includes?

&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; @@ -147,6 +151,9 @@ private:
&gt;      bool containsOnlyWhitespace(unsigned from, unsigned len) const;
&gt;      int widthFromCache(const Font&amp;, int start, int len, int xPos) const;
&gt;      bool isAllASCII() const { return m_isAllASCII; }
&gt; +#if ENABLE(TEXT_TRANSCODER)
&gt; +    PassRefPtr&lt;StringImpl&gt; transcode(String text);
&gt; +#endif

The argument type should be &quot;const String&amp;&quot;, not &quot;String&quot;. The return type should probably just be String rather than PassRefPtr&lt;StringImpl&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111032</commentid>
    <comment_count>14</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-02-25 14:09:59 -0800</bug_when>
    <thetext>&gt; In general, names for Unicode characters should go into the CharacterNames.h
&gt; header and should be the names from the Unicode specification, without any runs
&gt; of all capital letters. For example: copyrightSign.

Some of them in this patch are real Unicode character names while others are not. For instance, the following line :

   static const UChar comboZHUU = 0x00E8;

does not mean that U+00E8 is &apos;comboZHUU&apos; in a Tamil font but means that &apos;U+00E8&apos; (a Unicode character we have after converting to Unicode assuming that the text encoding is Windows-1252) actually represents &apos;comboZHUU&apos; in a font-encoded font in effect. 

&gt; Requiring a particular host name seems like a bad idea. I think the font name
&gt; should be enough. Did we already discuss this?

We have discussed this before. In a sense, it&apos;s a policy issue. 

I believe font names are sufficiently unique to identify corresponding font encodings without a host name. For instance, when fontFoo was converted to a real Unicode-based font, its name is usually changed, too (like fontFoo_U or something like that). And, I haven&apos;t seen two Indic font-encoded fonts with the same name but with different &apos;font encodings&apos; (but, that does not mean that there are none).

On the other hand, we do not want this convention (of using &apos;font-encoded fonts&apos;) to spread further than where they&apos;re used now. Using (font, host) pairs as keys rather than font alone would limit our support to a finite set of sites. 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111042</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-25 14:39:57 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; In general, names for Unicode characters should go into the CharacterNames.h
&gt; &gt; header and should be the names from the Unicode specification, without any runs
&gt; &gt; of all capital letters. For example: copyrightSign.
&gt; 
&gt; Some of them in this patch are real Unicode character names while others are
&gt; not. For instance, the following line :
&gt; 
&gt;    static const UChar comboZHUU = 0x00E8;

Yes, those should not go in CharacterNames.h.

&gt; &gt; Requiring a particular host name seems like a bad idea. I think the font name
&gt; &gt; should be enough. Did we already discuss this?
&gt; 
&gt; We have discussed this before. In a sense, it&apos;s a policy issue.
&gt; 
&gt; I believe font names are sufficiently unique to identify corresponding font
&gt; encodings without a host name. For instance, when fontFoo was converted to a
&gt; real Unicode-based font, its name is usually changed, too (like fontFoo_U or
&gt; something like that). And, I haven&apos;t seen two Indic font-encoded fonts with the
&gt; same name but with different &apos;font encodings&apos; (but, that does not mean that
&gt; there are none).
&gt; 
&gt; On the other hand, we do not want this convention (of using &apos;font-encoded
&gt; fonts&apos;) to spread further than where they&apos;re used now. Using (font, host) pairs
&gt; as keys rather than font alone would limit our support to a finite set of
&gt; sites.

Given this justification, I&apos;d prefer to omit the host name rule. I don&apos;t think that our browsers&apos; behavior will be sufficient to affect the website developers behavior unless we had much larger market share.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111078</commentid>
    <comment_count>16</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-02-25 16:47:20 -0800</bug_when>
    <thetext>BTW, I&apos;m afraid Tamil script is not such a good target script for  a proof-of-concept implementation because it does not have some of complexities other Indic scripts have. Devanagari script (for Hindi) would be better, IMHO. I guess the interface defined for FontEncoder is not sufficient for scripts more complex than Tamil. 

Well, I realize that exactly the same argument can be used to advocate for Tamil as the target for this pilot implementation. (it&apos;s simpler and easier to implement). And, because the code was ported from Padma which can handle other Indic scripts, perhaps, I should not be worried. :-)

As for TSCII (comment #3 and comment #4), it&apos;s different from other Indic font encodings in that it does not &apos;infringe&apos; upon the ASCII range. In a TSCII-encoded html file,  bytes for &apos;&lt;&apos;, &apos;&gt;&apos;, &apos;d&apos;, &apos;i&apos;, &apos;v&apos; have the same meaning as in ASCII. So, we can convert the html document in TSCII as **a whole** to Unicode. And, Tamil being simpler than other Indic scripts, this may be the case of other Tamil font encodings as well. 

In most other font encodings, the document-wide conversion does not work because what 0x61, 0x62, 0x41 mean varies within a single document depending on what font is in effect. When they&apos;re in text nodes that are enclosed by &apos;&lt;font face=&quot;fontHindiFoo&quot;&gt;&apos; or styled with &apos;font-family: fontHindiFoo&apos;, they represent some fragments of Indic syllables/grapheme clusters. So, transcoding has to be limited to those text nodes. 

In practice, I admit that this distinction is not that important except that having TSCII text decoder would speed up the rendering of TSCII-encoded documents because with that, TSCII-encoded documents do not have to go through what&apos;s being added in this bug. 

In conclusion, I&apos;m taking back what I wrote about the need to implement TSCII in a separate bug. 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111079</commentid>
    <comment_count>17</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-02-25 16:49:51 -0800</bug_when>
    <thetext>(In reply to comment #15)

&gt; Given this justification, I&apos;d prefer to omit the host name rule. I don&apos;t think
&gt; that our browsers&apos; behavior will be sufficient to affect the website developers
&gt; behavior unless we had much larger market share.

I wish we had larger influence :-). Anyway, I&apos;m fine with that.  I wonder what Ian and Mike think of that. 


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146122</commentid>
    <comment_count>18</comment_count>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2009-09-10 01:37:00 -0700</bug_when>
    <thetext>For people doing Unicode evangelism, there is now an AAT font available for Malayalam:
http://sites.google.com/site/macmalayalam/

This is in addition to the excellent Bengali support provided by Ekushey:
http://ekushey.org/?page/osx

And the three fonts I converted, for Kannada, Telugu and Sinhala:
http://web.nickshanks.com/fonts/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179852</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-12 09:28:56 -0800</bug_when>
    <thetext>I think we should do this for the Japanese yen sign first to get the scaffolding in place. It&apos;s a much simpler case and lets us work out the machinery without involving the more-complex transcoding required for the Indian-script cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247730</commentid>
    <comment_count>20</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2010-07-07 13:53:04 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I think we should do this for the Japanese yen sign first to get the scaffolding in place. It&apos;s a much simpler case and lets us work out the machinery without involving the more-complex transcoding required for the Indian-script cases.

What do you think of doing something similar to handle better &apos;MS Office-exported html files&quot;?  Those html files have :

&lt;font face=&quot;webdings&quot;&gt;abc 123&lt;/font&gt; : to get some dingbats   
&lt;font face=&quot;Symbol&quot;&gt;S&lt;/font&gt;  :  to get Greek Capital Sigma   

Some webkit ports pass a test (for the strict W3C CHARMOD interpretation) at  

http://www.hixie.ch/tests/adhoc/css/fonts/family/006.html

while others don&apos;t. 

I&apos;m not so fond of bending rules so much, but ....   
(BTW, Chromium has a bug filed to pass the test : http://crbug.com/3766 )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247766</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-07 14:39:28 -0700</bug_when>
    <thetext>Yes, I think that would be a nice thing to do. We track Symbol font support as bug 14637, which is currently marked as blocked by transcoding bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752822</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-27 12:48:41 -0700</bug_when>
    <thetext>I&apos;m curious if there is any updated context for this bug? or if it&apos;s just as important as it sounded in &apos;09, just 3 years later? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769071</commentid>
    <comment_count>23</comment_count>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2012-11-16 03:32:11 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; I haven&apos;t seen two Indic font-encoded fonts with the same name but with different &apos;font encodings&apos; (but, that does not mean that there are none).

I am responsible for one such font. There once was a custom-encoded 8-bit font called &quot;Kedage&quot;, intended for Windows users. An OpenType, Unicode version of it was made, and christened &quot;Kedage Unicode&quot;. I ported this Unicode font to AAT and released it as &quot;Kedage&quot;. I chose not to append Unicode because there was no history an an existing font with that name on the platform, so deemed the differentiator unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830110</commentid>
    <comment_count>24</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2013-02-11 14:12:24 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; I&apos;m curious if there is any updated context for this bug? or if it&apos;s just as important as it sounded in &apos;09, just 3 years later? :)

The Unicode is much more widely used than before, but still there are quite a lot of pages in one of Indian languages using this &apos;font hack encoding&apos;. We still have a continuous stream of &apos;cryptic bug reports&apos; from India saying that &apos;Tamil (put any Indic languages)&apos; web page is rendered with gibberish. Most of them, if not all, refers to font-encoded web pages. 


In case of Chrome (as with Firefox), we implemented a transcoding extension, Padma ( https://chrome.google.com/webstore/detail/padma/ngifghlmhidnielinpjdkkiadocdffbi?hl=en ) to work around this problem. 

Unfortunately, this does not help Chrome on Android because Chrome on Android does not support an extension, yet. 

Recently, we realized that there are two &apos;pseudo-Unicode/font-based encodings&apos; widely used for Burmese/Myanmar. [1]  In a sense, it&apos;s even worse because the pages are apparently in UTF-8 but Unicode code points are interpreted differently than what&apos;s specified by Unicode. Nonetheless, they can be handled in a similar way as font-encoded Indic pages. 


[1] They&apos;re Zawgyi and San Myanmar. Even though Unicode-based Burmese fonts have been freely available (e.g. Padauk and Mynamar 3), Zawgyi and &apos;San Myanmar&apos; were used apparently for the easier input.  BTW, Windows 8 is the first version of Windows with a Burmese/Myanmar font included.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26367</attachid>
            <date>2009-01-02 05:55:01 -0800</date>
            <delta_ts>2009-01-21 03:57:39 -0800</delta_ts>
            <desc>Patch to support on-the-fly transcoding for one font</desc>
            <filename>Transcoding.txt</filename>
            <type>text/plain</type>
            <size>111594</size>
            <attacher name="Prunthaban">prunthaban</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTU0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAyIEBACisyMDA5LTAxLTAyICBwcnVudGhhYmFuICA8cHJ1bnRoYWJhbkBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3Q6IGZhc3QvY3NzL2ZvbnQtZmFjZS10cmFuc2NvZGVyLmh0bWwKKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnN0
eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnNldFRleHRJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojppc1RyYW5zY29kZXJUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnRyYW5zY29kZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvdHJhbnNjb2RlcjogQWRk
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3RyYW5zY29kZXIvQ29udmVydGVyLmg6IEFkZGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy90cmFuc2NvZGVyL0R5bmFtaWNQYXJzZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNQYXJzZXI6OkR5bmFtaWNQYXJzZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY1BhcnNlcjo6cmVtb3ZlUmVkdW5kYW50U3ltYm9scyk6CisgICAg
ICAgIChXZWJDb3JlOjpEeW5hbWljUGFyc2VyOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNQYXJzZXI6OmhhbmRsZUNvbnNvbmFudFRlcm1pbmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkR5bmFtaWNQYXJzZXI6OmlzQ3VycmVudFN5bGxhYmxlQ29tcGxldGUpOgorICAgICAgICAq
IHJlbmRlcmluZy90cmFuc2NvZGVyL0R5bmFtaWNQYXJzZXIuaDogQWRkZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3RyYW5zY29kZXIvRW5jb2Rlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RW5jb2Rlcjo6RW5jb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpFbmNvZGVyOjptYXhpbXVt
TG9va3VwTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkVuY29kZXI6OmlzUmVkdW5kYW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkVuY29kZXI6OnByZXByb2Nlc3NNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVuY29kZXI6OmlzUHJlcHJvY2Vzc1JlcXVpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVuY29kZXI6Omhhc1N1ZmZpeGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVuY29kZXI6Omlz
T3ZlcmxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbmNvZGVyOjppc1N1ZmZpeFN5bWJvbCk6
CisgICAgICAgIChXZWJDb3JlOjpFbmNvZGVyOjppc1ByZWZpeFN5bWJvbCk6CisgICAgICAgICog
cmVuZGVyaW5nL3RyYW5zY29kZXIvRW5jb2Rlci5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvdHJhbnNjb2Rlci9QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhcnNl
cjo6UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlcjo6bmV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXJzZXI6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6UGFyc2VyOjptb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlcjo6aGFuZGxlQ29uc29uYW50VGVybWluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UGFyc2VyOjppc0N1cnJlbnRTeWxsYWJsZUNvbXBsZXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBhcnNlcjo6dXBkYXRlU3ltYm9sVHlwZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3RyYW5zY29kZXIvUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
KToKKyAgICAgICAgKiByZW5kZXJpbmcvdHJhbnNjb2Rlci9TeWxsYWJsZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3lsbGFibGU6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
eWxsYWJsZTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlN5bGxhYmxlOjpmb2xkR3VuaW50
YW0pOgorICAgICAgICAoV2ViQ29yZTo6U3lsbGFibGU6OmZvbGRDb25zb25hbnRNb2RpZmllcnMp
OgorICAgICAgICAoV2ViQ29yZTo6U3lsbGFibGU6OmdldFN5bGxhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN5bGxhYmxlOjpndW5pbnRhbSk6CisgICAgICAgIChXZWJDb3JlOjpTeWxsYWJsZTo6
c2V0R3VuaW50YW0pOgorICAgICAgICAqIHJlbmRlcmluZy90cmFuc2NvZGVyL1N5bGxhYmxlLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlN5bGxhYmxl
OjpTeWxsYWJsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3RyYW5zY29kZXIvVFNDSUlFbmNvZGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUU0NJSUVuY29kZXI6OlRTQ0lJRW5jb2Rl
cik6CisgICAgICAgIChXZWJDb3JlOjpUU0NJSUVuY29kZXI6OmlzUmVkdW5kYW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRTQ0lJRW5jb2Rlcjo6cHJlcHJvY2Vzc01lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6VFNDSUlFbmNvZGVyOjppc1ByZXByb2Nlc3NSZXF1aXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUU0NJSUVuY29kZXI6Omhhc1N1ZmZpeGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRT
Q0lJRW5jb2Rlcjo6aXNPdmVybG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRTQ0lJRW5jb2Rl
cjo6aXNTdWZmaXhTeW1ib2wpOgorICAgICAgICAoV2ViQ29yZTo6VFNDSUlFbmNvZGVyOjppc1By
ZWZpeFN5bWJvbCk6CisgICAgICAgIChXZWJDb3JlOjpUU0NJSUVuY29kZXI6OmhhbmRsZVR3b1Bh
cnRWb3dlbFNpZ25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRTQ0lJRW5jb2Rlcjo6bG9va3VwKToK
KyAgICAgICAgKiByZW5kZXJpbmcvdHJhbnNjb2Rlci9UU0NJSUVuY29kZXIuaDogQWRkZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL3RyYW5zY29kZXIvVGFtaWxDb252ZXJ0ZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRhbWlsQ29udmVydGVyOjpUYW1pbENvbnZlcnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUYW1pbENvbnZlcnRlcjo6dHJhbnNjb2RlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvdHJhbnNjb2Rlci9UYW1pbENvbnZlcnRlci5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvdHJhbnNjb2Rlci9UcmFuc2NvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjopOgorICAgICAgICAqIHJlbmRlcmluZy90cmFuc2NvZGVyL1RyYW5zY29kZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2NvZGVyOjpUcmFuc2NvZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zY29kZXI6OmlzVm93ZWwpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNjb2Rl
cjo6aXNTcGVjaWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zY29kZXI6OmlzQ29uc29uYW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zY29kZXI6OmlzRGlnaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6VHJhbnNjb2Rlcjo6aXNHdW5pbnRhbSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Nv
ZGVyOjppc1ZhdHR1KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zY29kZXI6OmlzSGFsZkZvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNjb2Rlcjo6Z2V0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpUcmFuc2NvZGVyOjpmYXN0VmF0dHUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNjb2Rl
cjo6ZmFzdEhhbGZGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zY29kZXI6OmJhc2VGb3Jt
RnJvbVZhdHR1KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zY29kZXI6OmJhc2VGb3JtRnJvbUhh
bGZGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zY29kZXI6OmRlcGVuZGVudEZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhbnNjb2Rlcjo6aGFsZkZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhbnNjb2Rlcjo6YmFzZUZvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy90cmFuc2NvZGVy
L1RyYW5zZm9ybWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1lcjo6
VHJhbnNmb3JtZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtZXI6On5UcmFuc2Zvcm1l
cik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1lcjo6aXNTdXBwb3J0ZWRGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybWVyOjppc1RyYW5zY29kYWJsZVNpdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNmb3JtZXI6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpU
cmFuc2Zvcm1lcjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1lcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL3RyYW5zY29kZXIvVHJhbnNmb3JtZXIuaDogQWRkZWQuCisKIDIw
MDktMDEtMDEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJl
dmlzaW9uIDM5NTQxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1lci5oIgogI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQWx3
YXlzSW5saW5lLmg+CkBAIC0xMDQsNyArMTA2LDEwIEBAIHZvaWQgUmVuZGVyVGV4dDo6c3R5bGVE
aWRDaGFuZ2UoUmVuZGVyU3QKICAgICBFVGV4dFRyYW5zZm9ybSBvbGRUcmFuc2Zvcm0gPSBvbGRT
dHlsZSA/IG9sZFN0eWxlLT50ZXh0VHJhbnNmb3JtKCkgOiBUVE5PTkU7CiAgICAgRVRleHRTZWN1
cml0eSBvbGRTZWN1cml0eSA9IG9sZFN0eWxlID8gb2xkU3R5bGUtPnRleHRTZWN1cml0eSgpIDog
VFNOT05FOwogCi0gICAgaWYgKG9sZFRyYW5zZm9ybSAhPSBzdHlsZSgpLT50ZXh0VHJhbnNmb3Jt
KCkgfHwgb2xkU2VjdXJpdHkgIT0gc3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkKKyAgICBpZiAob2xk
VHJhbnNmb3JtICE9IHN0eWxlKCktPnRleHRUcmFuc2Zvcm0oKSB8fCBvbGRTZWN1cml0eSAhPSBz
dHlsZSgpLT50ZXh0U2VjdXJpdHkoKSAKKyNpZiBFTkFCTEUoVFJBTlNDT0RFUikKKyAgICAgICAg
fHwgaXNUcmFuc2NvZGVyVGV4dCgpCisjZW5kaWYKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICB8
fCBpc1NWR1RleHQoKSAvKiBBbGwgU1ZHIHRleHQgaGFzIHRvIGJlIHRyYW5zZm9ybWVkICovCiAj
ZW5kaWYKQEAgLTg5Myw2ICs4OTgsMTIgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJu
YWwoUGFzc1JlZgogICAgIG1fdGV4dCA9IHRleHQ7CiAgICAgQVNTRVJUKG1fdGV4dCk7CiAKKyNp
ZiBFTkFCTEUoVFJBTlNDT0RFUikgICAgCisgICAgaWYgKGlzVHJhbnNjb2RlclRleHQoKSkgewor
ICAgICAgICBtX3RleHQgPSB0cmFuc2NvZGUoU3RyaW5nKG1fdGV4dC0+Y2hhcmFjdGVycygpLCBt
X3RleHQtPmxlbmd0aCgpKSk7CisgICAgfQorI2VuZGlmCisKICAgICBtX3RleHQgPSBtX3RleHQt
PnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIAogI2lmIEVOQUJM
RShTVkcpCkBAIC0xMjExLDYgKzEyMjIsMjUgQEAgdm9pZCBSZW5kZXJUZXh0OjpjaGVja0NvbnNp
c3RlbmN5KCkgY29ucwogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoVFJBTlNDT0RFUikKK2Jvb2wg
UmVuZGVyVGV4dDo6aXNUcmFuc2NvZGVyVGV4dCgpIGNvbnN0Cit7CisgICAgU3RyaW5nIG9yaWdp
biA9IGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmRvbWFpbigpOworICAgIFRyYW5zZm9y
bWVyKiB0cmFucyA9IHRyYW5zZm9ybWVyKCk7CisgICAgaWYgKCFkb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5pc0xvY2FsKCkgJiYgIXRyYW5zLT5pc1RyYW5zY29kYWJsZVNpdGUob3JpZ2lu
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFN0cmluZyBmYW1pbHkgPSBzdHlsZSgpLT5m
b250KCkuZmFtaWx5KCkuZmFtaWx5KCkuc3RyaW5nKCk7CisgICAgcmV0dXJuIHRyYW5zLT5pc1N1
cHBvcnRlZEZvbnQoZmFtaWx5KTsKK30KKworUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBSZW5kZXJU
ZXh0Ojp0cmFuc2NvZGUoU3RyaW5nIHRleHQpCit7CisgICAgU3RyaW5nIGZhbWlseSA9IHN0eWxl
KCktPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmcoKTsKKyAgICBTdHJpbmcgdHJhbnNm
b3JtZWQgPSB0cmFuc2Zvcm1lcigpLT5jb252ZXJ0KHRleHQsIGZhbWlseSk7CisgICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmNyZWF0ZSh0cmFuc2Zvcm1lZC5jaGFyYWN0ZXJzKCksdHJhbnNmb3JtZWQu
bGVuZ3RoKCkpOworfQorI2VuZGlmCisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiAzOTU0MSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsMTIgQEAK
ICNpZm5kZWYgUmVuZGVyVGV4dF9oCiAjZGVmaW5lIFJlbmRlclRleHRfaAogCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTMxLDYgKzEzNiwx
MSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKIAorI2lm
IEVOQUJMRShUUkFOU0NPREVSKQorICAgIGJvb2wgaXNUcmFuc2NvZGVyVGV4dCgpIGNvbnN0Owor
ICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJhbnNjb2RlKFN0cmluZyk7CisjZW5kaWYKKyAg
ICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoUmVuZGVyU3R5
bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL3RyYW5zY29kZXIvQ29udmVydGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvdHJhbnNjb2Rlci9Db252ZXJ0ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL3RyYW5zY29kZXIvQ29udmVydGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvbnZlcnRlcl9oCisjZGVmaW5lIENvbnZlcnRlcl9o
CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENvbnZlcnRlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBTdHJpbmcgdHJhbnNjb2Rl
KFVDaGFyKSA9IDA7Cit9OworfQorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNv
cmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvQ29udmVydGVyLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2NvZGVyL0R5
bmFtaWNQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29k
ZXIvRHluYW1pY1BhcnNlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy90
cmFuc2NvZGVyL0R5bmFtaWNQYXJzZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEeW5hbWljUGFyc2Vy
LmgiCisjaW5jbHVkZSAiU3lsbGFibGUuaCIKKyNpbmNsdWRlICJUcmFuc2NvZGVyLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlCit7CitEeW5hbWljUGFyc2VyOjpE
eW5hbWljUGFyc2VyKFN0cmluZyBpbnB1dCwgRW5jb2RlciogZW5jb2RlcikKKyAgICA6IFBhcnNl
cihpbnB1dCwgZW5jb2RlcikKK3sKKyAgICBpZiAoZW5jb2Rlci0+aXNQcmVwcm9jZXNzUmVxdWly
ZWQoKSkKKyAgICAgICAgbV90ZXh0ID0gZW5jb2Rlci0+cHJlcHJvY2Vzc01lc3NhZ2UobV90ZXh0
KTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dCA9IHJlbW92ZVJlZHVuZGFudFN5bWJvbHMoKTsK
KyAgICBtX2xlbmd0aCA9IG1fdGV4dC5sZW5ndGgoKTsKKyAgICBtX2hhc1N1ZmZpeGVzID0gbV9l
bmNvZGVyLT5oYXNTdWZmaXhlcygpOworfQorCitTdHJpbmcgRHluYW1pY1BhcnNlcjo6cmVtb3Zl
UmVkdW5kYW50U3ltYm9scygpCit7CisgICAgU3RyaW5nIG91dHB1dCA9ICIiOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbV90ZXh0Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgVUNoYXIgYyA9
IG1fdGV4dFtpXTsKKyAgICAgICAgaWYgKCFtX2VuY29kZXItPmlzUmVkdW5kYW50KGMpKQorICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZChjKTsKKyAgICB9CisgICAgcmV0dXJuIG91dHB1dDsKK30K
KworU3RyaW5nIER5bmFtaWNQYXJzZXI6Om5leHQoKQoreworICAgIFN5bGxhYmxlIHJlc3BvbnNl
OworICAgIGludCByZW1haW5pbmcgPSBtX2xlbmd0aCAtIG1faW5kZXg7CisgICAgZm9yICg7IHJl
bWFpbmluZyA+IDA7IHJlbWFpbmluZyA9IG1fbGVuZ3RoIC0gbV9pbmRleCkgeworICAgICAgICBT
dHJpbmcga2V5OworICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAgaWYgKG1fa2V5Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgaW50IG1heCA9IG1fZW5jb2Rlci0+bWF4aW11bUxvb2t1
cExlbmd0aCgpOworICAgICAgICAgICAgaW50IG1heExvb2t1cExlbmd0aCA9IHJlbWFpbmluZyA+
IG1heCA/IG1heCA6IHJlbWFpbmluZzsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1heExv
b2t1cExlbmd0aDsgaSA+IDA7IGktLSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBsb29rdXBL
ZXkgPSBtX3RleHQuc3Vic3RyaW5nKG1faW5kZXgsIGkpOworICAgICAgICAgICAgICAgIFN0cmlu
ZyBsb29rdXBWYWx1ZSA9IG1fZW5jb2Rlci0+bG9va3VwKGxvb2t1cEtleSk7CisgICAgICAgICAg
ICAgICAgaWYgKGxvb2t1cFZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChrZXkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gbG9va3VwS2V5
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAga2V5ID0gbG9va3VwS2V5OworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGxv
b2t1cFZhbHVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghbV9l
bmNvZGVyLT5pc092ZXJsb2FkZWQobG9va3VwS2V5KSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB2YWx1ZSA9IG1fdmFsdWU7CisgICAgICAgICAgICBrZXkgPSBtX2tleTsKKyAgICAgICAgICAg
IG1fa2V5ID0gIiI7CisgICAgICAgICAgICBtX3ZhbHVlID0gIiI7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgc3VmZml4ID0gZmFsc2U7CisgICAgICAgIGlmIChtX2hhc1N1ZmZp
eGVzKQorICAgICAgICAgICAgc3VmZml4ID0gbV9lbmNvZGVyLT5pc1N1ZmZpeFN5bWJvbChrZXkp
OworICAgICAgICBwcm9jZXNzKHZhbHVlLCBrZXksIHJlc3BvbnNlLCBtX2VuY29kZXItPmlzUHJl
Zml4U3ltYm9sKGtleSksc3VmZml4KTsKKyAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlID09IFBh
cnNlclN0YXRlU3RhcnQpIAorICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmdldFN5bGxhYmxl
KCk7CisgICAgfQorCisgICAgaWYgKCFyZXNwb25zZS5sZW5ndGgoKSkKKyAgICAgICAgaGFuZGxl
Q29uc29uYW50VGVybWluYXRpb24ocmVzcG9uc2UpOworICAgIHJldHVybiByZXNwb25zZS5nZXRT
eWxsYWJsZSgpOworfQorCitib29sIER5bmFtaWNQYXJzZXI6OmhhbmRsZUNvbnNvbmFudFRlcm1p
bmF0aW9uKFN5bGxhYmxlJiBzeWxsYWJsZSkKK3sKKyAgICBzeWxsYWJsZS5mb2xkR3VuaW50YW0o
KTsKKyAgICBzeWxsYWJsZS5mb2xkQ29uc29uYW50TW9kaWZpZXJzKCk7CisKKyAgICBTdHJpbmcg
Z3VuaW50YW0gPSBzeWxsYWJsZS5ndW5pbnRhbSgpOworICAgIGlmIChndW5pbnRhbS5sZW5ndGgo
KSA9PSAyKQorICAgICAgICBzeWxsYWJsZS5zZXRHdW5pbnRhbShtX2VuY29kZXItPmhhbmRsZVR3
b1BhcnRWb3dlbFNpZ25zKGd1bmludGFtWzBdLCBndW5pbnRhbVsxXSkpOworICAgIHJldHVybiB0
cnVlOworCit9CisKK2Jvb2wgRHluYW1pY1BhcnNlcjo6aXNDdXJyZW50U3lsbGFibGVDb21wbGV0
ZShTeWxsYWJsZVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3JlbmRl
cmluZy90cmFuc2NvZGVyL0R5bmFtaWNQYXJzZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmV4
ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9EeW5h
bWljUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9E
eW5hbWljUGFyc2VyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2Nv
ZGVyL0R5bmFtaWNQYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgRHluYW1pY1BhcnNlcl9oCisjZGVmaW5lIER5bmFtaWNQYXJzZXJfaAorCisj
aW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlN5bGxhYmxlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQYXJzZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEeW5hbWljUGFyc2VyIDogcHVibGljIFBhcnNlciB7CitwdWJsaWM6CisgICAg
RHluYW1pY1BhcnNlcihTdHJpbmcgaW5wdXQsIEVuY29kZXIqIGVuY29kZXIpOworICAgIHZpcnR1
YWwgU3RyaW5nIG5leHQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ29uc29uYW50VGVybWlu
YXRpb24oU3lsbGFibGUmIHN5bGxhYmxlKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50U3ls
bGFibGVDb21wbGV0ZShTeWxsYWJsZVR5cGUgdHlwZSk7CisKK3ByaXZhdGU6CisgICAgU3RyaW5n
IHJlbW92ZVJlZHVuZGFudFN5bWJvbHMoKTsKKworcHJpdmF0ZToKKyAgICBib29sIG1faGFzU3Vm
Zml4ZXM7Cit9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9y
ZW5kZXJpbmcvdHJhbnNjb2Rlci9EeW5hbWljUGFyc2VyLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2NvZGVyL0Vu
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvRW5j
b2Rlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2NvZGVyL0Vu
Y29kZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKworRW5jb2Rlcjo6RW5jb2RlcihpbnQgbWF4TG9v
a3VwTGVuZ3RoKQorICAgIDogbV9tYXhMb29rdXBMZW5ndGgobWF4TG9va3VwTGVuZ3RoKQorewor
fQorCitpbnQgRW5jb2Rlcjo6bWF4aW11bUxvb2t1cExlbmd0aCgpCit7CisgICAgcmV0dXJuIG1f
bWF4TG9va3VwTGVuZ3RoOworfQorCitib29sIEVuY29kZXI6OmlzUmVkdW5kYW50KFVDaGFyKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIEVuY29kZXI6OnByZXByb2Nlc3NNZXNz
YWdlKFN0cmluZyBtZXNzYWdlKQoreworICAgIHJldHVybiBtZXNzYWdlOworfQorCitib29sIEVu
Y29kZXI6OmlzUHJlcHJvY2Vzc1JlcXVpcmVkKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRW5jb2Rlcjo6aGFzU3VmZml4ZXMoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBFbmNvZGVyOjppc092ZXJsb2FkZWQoU3RyaW5nKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBFbmNvZGVyOjppc1N1ZmZpeFN5bWJvbChTdHJpbmcpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEVuY29kZXI6OmlzUHJlZml4U3ltYm9sKFN0cmluZykKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9FbmNvZGVyLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3RyYW5zY29kZXIvRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL3RyYW5zY29kZXIvRW5jb2Rlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvdHJhbnNjb2Rlci9FbmNvZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEVuY29kZXJfaAorI2RlZmluZSBFbmNvZGVyX2gKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRW5jb2Rl
ciB7CitwdWJsaWM6CisgICAgRW5jb2RlcihpbnQgbWF4TG9va3VwTGVuZ3RoKTsKKworICAgIHZp
cnR1YWwgaW50IG1heGltdW1Mb29rdXBMZW5ndGgoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWR1
bmRhbnQoVUNoYXIpOworICAgIHZpcnR1YWwgU3RyaW5nIHByZXByb2Nlc3NNZXNzYWdlKFN0cmlu
Zyk7CisgICAgdmlydHVhbCBib29sIGlzUHJlcHJvY2Vzc1JlcXVpcmVkKCk7CisgICAgdmlydHVh
bCBib29sIGhhc1N1ZmZpeGVzKCk7CisgICAgdmlydHVhbCBib29sIGlzT3ZlcmxvYWRlZChTdHJp
bmcpOworICAgIHZpcnR1YWwgYm9vbCBpc1N1ZmZpeFN5bWJvbChTdHJpbmcpOworICAgIHZpcnR1
YWwgYm9vbCBpc1ByZWZpeFN5bWJvbChTdHJpbmcpOworCisgICAgdmlydHVhbCBTdHJpbmcgbG9v
a3VwKFN0cmluZyBrZXkpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBoYW5kbGVUd29QYXJ0Vm93
ZWxTaWducyhVQ2hhciBhLCBVQ2hhciBiKSA9IDA7CisKK3ByaXZhdGU6CisgICAgaW50IG1fbWF4
TG9va3VwTGVuZ3RoOworfTsKKworfQorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvRW5jb2Rlci5oCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3Zu
OmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9Q
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvUGFy
c2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvUGFy
c2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiU3lsbGFibGUuaCIK
KyNpbmNsdWRlICJUcmFuc2NvZGVyLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlICJTdHJpbmdJbXBsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFj
ZSBXZWJDb3JlCit7CitQYXJzZXI6OlBhcnNlcihTdHJpbmcgaW5wdXQsIEVuY29kZXIqIGVuY29k
ZXIpCisgICAgOiBtX2luZGV4KDApCisgICAgLCBtX3RleHQoaW5wdXQpCisgICAgLCBtX2xlbmd0
aChpbnB1dC5sZW5ndGgoKSkKKyAgICAsIG1fZW5jb2RlcihlbmNvZGVyKQorICAgICwgbV9jdXJy
ZW50U3RhdGUoUGFyc2VyU3RhdGVTdGFydCkKKyAgICAsIG1fa2V5KCIiKQorICAgICwgbV92YWx1
ZSgiIikKK3sKKworfQorCitTdHJpbmcgUGFyc2VyOjpuZXh0KCkKK3sKKyAgICBTeWxsYWJsZSBy
ZXNwb25zZTsKKyAgICBpbnQgcmVtYWluaW5nID0gbV9sZW5ndGggLSBtX2luZGV4OworICAgIGZv
ciAoOyByZW1haW5pbmcgPiAwOyByZW1haW5pbmcgPSBtX2xlbmd0aCAtIG1faW5kZXgpIHsKKyAg
ICAgICAgU3RyaW5nIGtleTsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAgIGlmICgh
bV9rZXkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbnQgbWF4ID0gbV9lbmNvZGVyLT5tYXhp
bXVtTG9va3VwTGVuZ3RoKCk7CisgICAgICAgICAgICBpbnQgbWF4TG9va3VwTGVuZ3RoID0gcmVt
YWluaW5nID4gbWF4ID8gbWF4IDogcmVtYWluaW5nOworCisgICAgICAgICAgICBmb3IgKGludCBp
ID0gbWF4TG9va3VwTGVuZ3RoOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAga2V5ID0g
bV90ZXh0LnN1YnN0cmluZyhtX2luZGV4LCBpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1f
ZW5jb2Rlci0+bG9va3VwKGtleSk7CisgICAgICAgICAgICAgICAgaWYoIXZhbHVlLmlzTnVsbCgp
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZTsKKyAgICAgICAgICAg
IGtleSA9IG1fa2V5OworICAgICAgICAgICAgbV9rZXkgPSAiIjsKKyAgICAgICAgICAgIG1fdmFs
dWUgPSAiIjsKKyAgICAgICAgfQorCisgICAgICAgIHByb2Nlc3ModmFsdWUsIGtleSwgcmVzcG9u
c2UpOworICAgICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gUGFyc2VyU3RhdGVTdGFydCkgCisg
ICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZ2V0U3lsbGFibGUoKTsKKyAgICB9CisKKyAgICBp
ZiAobV9jdXJyZW50U3RhdGUgPT0gUGFyc2VyU3RhdGVDb25zb25hbnQpIAorICAgICAgICBoYW5k
bGVDb25zb25hbnRUZXJtaW5hdGlvbihyZXNwb25zZSk7CisgICAgcmV0dXJuIHJlc3BvbnNlLmdl
dFN5bGxhYmxlKCk7Cit9CisKK3ZvaWQgUGFyc2VyOjpwcm9jZXNzKFN0cmluZyB2YWx1ZSwgU3Ry
aW5nIGtleSwgU3lsbGFibGUmIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICxib29sIHBy
ZWZpeCwgYm9vbCBzdWZmaXgpCit7CisgICAgU3lsbGFibGVUeXBlIG9sZFR5cGUgPSBUeXBlVW5r
bm93bjsKKyAgICBTdHJpbmcgc3ltYm9sID0gdmFsdWU7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5
KCkpIAorICAgICAgICBvbGRUeXBlID0gVHJhbnNjb2Rlcjo6Z2V0VHlwZShzeW1ib2xbMF0pOwor
ICAgIGVsc2UKKyAgICAgICAgc3ltYm9sID0ga2V5OworCisgICAgU3lsbGFibGVUeXBlIHR5cGUg
PSB1cGRhdGVTeW1ib2xUeXBlKG9sZFR5cGUpOworICAgIGlmICh0eXBlICE9IG9sZFR5cGUpIAor
ICAgICAgICBzeW1ib2wgPSBUcmFuc2NvZGVyOjpkZXBlbmRlbnRGb3JtKHN5bWJvbCk7CisKKyAg
ICBzd2l0Y2ggKG1fY3VycmVudFN0YXRlKSB7CisgICAgY2FzZSBQYXJzZXJTdGF0ZVN0YXJ0Ogor
ICAgIGNhc2UgUGFyc2VyU3RhdGVQcmVmaXg6CisgICAgICAgIG1faW5kZXggKz0ga2V5Lmxlbmd0
aCgpOworICAgICAgICBjdXJyZW50LnVwZGF0ZShzeW1ib2wsIHR5cGUsIHByZWZpeCwgc3VmZml4
KTsKKyAgICAgICAgaWYgKHByZWZpeCkKKyAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gUGFy
c2VyU3RhdGVQcmVmaXg7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0g
VHlwZUFjY3UgfHwgdHlwZSA9PSBUeXBlRGlnaXQgfHwgdHlwZSA9PSBUeXBlVW5rbm93bikKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IFBhcnNlclN0YXRlU3RhcnQ7CisgICAgICAg
ICAgICBlbHNlIGlmICh0eXBlID09IFR5cGVIYWxsdSkKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTdGF0ZSA9IFBhcnNlclN0YXRlQ29uc29uYW50OworICAgICAgICAgICAgZWxzZSBpZiAodHlw
ZSA9PSBUeXBlSGFsZkZvcm0pCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSBQYXJz
ZXJTdGF0ZUhhbGZGb3JtOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFN0YXRlID0gUGFyc2VyU3RhdGVTdGFydDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIFBhcnNlclN0YXRlQ29uc29uYW50OgorICAgIGNhc2UgUGFyc2VyU3RhdGVI
YWxmRm9ybToKKyAgICAgICAgaW50IG5leHRUeXBlcyA9IFR5cGVBY2N1IHwgVHlwZURpZ2l0IHwg
VHlwZVVua25vd247CisgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBQYXJzZXJTdGF0ZUNv
bnNvbmFudCkKKyAgICAgICAgICAgIG5leHRUeXBlcyB8PSBUeXBlSGFsbHUgfCBUeXBlSGFsZkZv
cm07CisgICAgICAgIGlmICgoKHR5cGUgJiBuZXh0VHlwZXMpIHx8IHByZWZpeCkgJiYgIXN1ZmZp
eCkgeworICAgICAgICAgICAgbV9rZXkgPSBrZXk7CisgICAgICAgICAgICBtX3ZhbHVlID0gdmFs
dWU7CisgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IFBhcnNlclN0YXRlU3RhcnQ7CisgICAg
ICAgICAgICBoYW5kbGVDb25zb25hbnRUZXJtaW5hdGlvbihjdXJyZW50KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBQYXJz
ZXJTdGF0ZUhhbGZGb3JtICYmIHR5cGUgPT0gVHlwZUhhbGx1KQorICAgICAgICAgICAgbV9jdXJy
ZW50U3RhdGUgPSBQYXJzZXJTdGF0ZUNvbnNvbmFudDsKKyAgICAgICAgbV9pbmRleCArPSBrZXku
bGVuZ3RoKCk7CisgICAgICAgIGlmIChpc0N1cnJlbnRTeWxsYWJsZUNvbXBsZXRlKHR5cGUpKSAK
KyAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gUGFyc2VyU3RhdGVTdGFydDsKKyAgICAgICAg
Y3VycmVudC51cGRhdGUoc3ltYm9sLCB0eXBlLCBwcmVmaXgsIHN1ZmZpeCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKK2Jvb2wgUGFyc2VyOjptb3JlKCkKK3sKKyAgICByZXR1cm4gbV9p
bmRleCA8IG1fbGVuZ3RoOworfQorCitib29sIFBhcnNlcjo6aGFuZGxlQ29uc29uYW50VGVybWlu
YXRpb24oU3lsbGFibGUmIHN5bGxhYmxlKQoreworICAgIHJldHVybiBmYWxzZTsKKworfQorCiti
b29sIFBhcnNlcjo6aXNDdXJyZW50U3lsbGFibGVDb21wbGV0ZShTeWxsYWJsZVR5cGUgdHlwZSkK
K3sKKyAgICByZXR1cm4gdHlwZSA9PSBUeXBlQWNjdU1vZCB8fCB0eXBlID09IFR5cGVHdW5pbnRh
bSB8fCB0eXBlID09IFR5cGVIYWxsdU1vZDsKK30KKworU3lsbGFibGVUeXBlIFBhcnNlcjo6dXBk
YXRlU3ltYm9sVHlwZShTeWxsYWJsZVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZTsKK30K
KworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvUGFyc2VyLmNwcApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIv
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9QYXJz
ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvUGFyc2Vy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBhcnNl
cl9oCisjZGVmaW5lIFBhcnNlcl9oCisKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5jbHVkZSAi
U3lsbGFibGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBUcmFuc2Zvcm1lclVuaWNvZGUsCisgICAgVHJh
bnNmb3JtZXJJU0NJSSwKKyAgICBUcmFuc2Zvcm1lcklUcmFucywKKyAgICBUcmFuc2Zvcm1lclRT
Q0lJLAorICAgIFRyYW5zZm9ybWVyVEFCLAorICAgIFRyYW5zZm9ybWVyVEFNLAorICAgIFRyYW5z
Zm9ybWVyRHluYW1pY0ZvbnRzCit9IFRyYW5zZm9ybWVyVHlwZTsKKwordHlwZWRlZiBlbnVtCit7
CisgICAgUGFyc2VyU3RhdGVTdGFydCwKKyAgICBQYXJzZXJTdGF0ZUNvbnNvbmFudCwKKyAgICBQ
YXJzZXJTdGF0ZVByZWZpeCwKKyAgICBQYXJzZXJTdGF0ZUhhbGZGb3JtCit9IFBhcnNlclN0YXRl
OworCisKK2NsYXNzIFBhcnNlciB7CitwdWJsaWM6CisgICAgUGFyc2VyKFN0cmluZyBpbnB1dCwg
RW5jb2RlciogZW5jb2Rlcik7CisgICAgdm9pZCBwcm9jZXNzKFN0cmluZyB2YWx1ZQorICAgICAg
ICAgICAgLFN0cmluZyBrZXkKKyAgICAgICAgICAgICxTeWxsYWJsZSYgc3lsbGFibGUKKyAgICAg
ICAgICAgICxib29sIHByZWZpeCA9IGZhbHNlCisgICAgICAgICAgICAsYm9vbCBzdWZmaXggPSBm
YWxzZSk7CisgICAgdmlydHVhbCBTdHJpbmcgbmV4dCgpOworCisgICAgdmlydHVhbCBib29sIG1v
cmUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ29uc29uYW50VGVybWluYXRpb24oU3lsbGFi
bGUmIHN5bGxhYmxlKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50U3lsbGFibGVDb21wbGV0
ZShTeWxsYWJsZVR5cGUgdHlwZSk7CisgICAgdmlydHVhbCBTeWxsYWJsZVR5cGUgdXBkYXRlU3lt
Ym9sVHlwZShTeWxsYWJsZVR5cGUgdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBFbmNvZGVyKiBt
X2VuY29kZXI7CisgICAgU3RyaW5nIG1fa2V5OworICAgIFN0cmluZyBtX3ZhbHVlOworICAgIGlu
dCBtX2luZGV4OworICAgIGludCBtX2xlbmd0aDsKKyAgICBTdHJpbmcgbV90ZXh0OworICAgIFBh
cnNlclN0YXRlIG1fY3VycmVudFN0YXRlOworfTsKKworfQorCisjZW5kaWYKClByb3BlcnR5IGNo
YW5nZXMgb246IFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvUGFyc2VyLmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy90
cmFuc2NvZGVyL1N5bGxhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy90
cmFuc2NvZGVyL1N5bGxhYmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L3RyYW5zY29kZXIvU3lsbGFibGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeWxsYWJsZS5oIgorI2lu
Y2x1ZGUgIlRyYW5zY29kZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNl
IFdlYkNvcmUKK3sKKwordm9pZCBTeWxsYWJsZTo6dXBkYXRlKFN0cmluZyBpbnB1dCwgU3lsbGFi
bGVUeXBlIHR5cGUKKyAgICAgICAgLGJvb2wgcHJlZml4LCBib29sIHN1ZmZpeCkKK3sKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkg
IT0gMCkKKyAgICAgICAgICAgIHR5cGUgPSBUcmFuc2NvZGVyOjpnZXRUeXBlKGlucHV0W2ldKTsK
KyAgICAgICAgaWYgKHR5cGUgPT0gVHlwZUFjY3UgfHwgdHlwZSA9PSBUeXBlRGlnaXQgfHwgdHlw
ZSA9PSBUeXBlSGFsbHUgCisgICAgICAgICAgICB8fCB0eXBlID09IFR5cGVVbmtub3duKQorICAg
ICAgICAgICAgbV9ib2R5LmFwcGVuZChpbnB1dFtpXSk7CisgICAgICAgIGVsc2UgaWYgKHR5cGUg
PT0gVHlwZUhhbGZGb3JtKSB7CisgICAgICAgICAgICBpZiAoc3VmZml4KQorICAgICAgICAgICAg
ICAgIG1fYm9keS5pbnNlcnQoaW5wdXQuY2hhcmFjdGVycygpICsgaSwxLDApOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYm9keS5hcHBlbmQoaW5wdXRbaV0pOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVHlwZUd1bmludGFtKSB7CisgICAgICAgICAg
ICBpZihwcmVmaXgpCisgICAgICAgICAgICAgICAgbV9wcmVmaXhHdW5pbnRhbS5hcHBlbmQoaW5w
dXRbaV0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ3VuaW50YW0uYXBw
ZW5kKGlucHV0W2ldKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFR5cGVW
YXR0dSkgeworICAgICAgICAgICAgaWYocHJlZml4KQorICAgICAgICAgICAgICAgIG1fcHJlZml4
VmF0dHUuYXBwZW5kKGlucHV0W2ldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX2JvZHkuYXBwZW5kKGlucHV0W2ldKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0
eXBlID09IFR5cGVBY2N1TW9kKQorICAgICAgICAgICAgbV92b3dlbE1vZGlmaWVyLmFwcGVuZChp
bnB1dFtpXSk7CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVHlwZUhhbGx1TW9kKQorICAgICAg
ICAgICAgbV9jb25zb25hbnRNb2RpZmllci5hcHBlbmQoaW5wdXRbaV0pOworICAgIH0KK30KKwor
aW50IFN5bGxhYmxlOjpsZW5ndGgoKQoreworICAgIHJldHVybiBtX2JvZHkubGVuZ3RoKCkgKyBt
X3ByZWZpeEd1bmludGFtLmxlbmd0aCgpIAorICAgICAgICArIG1fZ3VuaW50YW0ubGVuZ3RoKCkg
KyBtX3ByZWZpeFZhdHR1Lmxlbmd0aCgpCisgICAgICAgICsgbV92b3dlbE1vZGlmaWVyLmxlbmd0
aCgpICsgbV9jb25zb25hbnRNb2RpZmllci5sZW5ndGgoKTsKK30KKwordm9pZCBTeWxsYWJsZTo6
Zm9sZEd1bmludGFtKCkKK3sKKyAgICBtX2d1bmludGFtICs9IG1fcHJlZml4R3VuaW50YW07Cisg
ICAgbV9wcmVmaXhHdW5pbnRhbSA9ICIiOworfQorCit2b2lkIFN5bGxhYmxlOjpmb2xkQ29uc29u
YW50TW9kaWZpZXJzKCkKK3sKKyAgICBtX2JvZHkgKz0gbV9wcmVmaXhWYXR0dTsKKyAgICBtX3By
ZWZpeFZhdHR1ID0gIiI7Cit9CisKK1N0cmluZyBTeWxsYWJsZTo6Z2V0U3lsbGFibGUoKQorewor
ICAgIHJldHVybiBtX2JvZHkgKyBtX2NvbnNvbmFudE1vZGlmaWVyICsgbV9ndW5pbnRhbSArIG1f
dm93ZWxNb2RpZmllcjsKK30KKworU3RyaW5nIFN5bGxhYmxlOjpndW5pbnRhbSgpCit7CisgICAg
cmV0dXJuIG1fZ3VuaW50YW07Cit9CisKK3ZvaWQgU3lsbGFibGU6OnNldEd1bmludGFtKFN0cmlu
ZyBndW5pbnRhbSkgCit7CisgICAgbV9ndW5pbnRhbSA9IGd1bmludGFtOworfQorCit9ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9yZW5k
ZXJpbmcvdHJhbnNjb2Rlci9TeWxsYWJsZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2NvZGVyL1N5bGxhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9TeWxsYWJsZS5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9TeWxsYWJsZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTeWxsYWJs
ZV9oCisjZGVmaW5lIFN5bGxhYmxlX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVHlwZUFjY3UgPSAweDAw
MDEsCisgICAgVHlwZUd1bmludGFtID0gMHgwMDAyLAorICAgIFR5cGVBY2N1TW9kID0gMHgwMDA0
LAorICAgIFR5cGVEaWdpdCA9IDB4MDAwOCwKKyAgICBUeXBlVmF0dHUgPSAweDAwMTAsCisgICAg
VHlwZUhhbGx1ID0gMHgwMDIwLAorICAgIFR5cGVIYWxsdU1vZCA9IDB4MDA0MCwKKyAgICBUeXBl
SGFsZkZvcm0gPSAweDAwODAsCisgICAgVHlwZVVua25vd24gPSAweDAxMDAKK30gU3lsbGFibGVU
eXBlOworCitjbGFzcyBTeWxsYWJsZSB7CitwdWJsaWM6CisgICAgU3lsbGFibGUoKQorICAgICAg
ICA6IG1fYm9keSgiIikKKyAgICAgICAgLCBtX3ByZWZpeEd1bmludGFtKCIiKQorICAgICAgICAs
IG1fZ3VuaW50YW0oIiIpCisgICAgICAgICwgbV9wcmVmaXhWYXR0dSgiIikKKyAgICAgICAgLCBt
X3Zvd2VsTW9kaWZpZXIoIiIpCisgICAgICAgICwgbV9jb25zb25hbnRNb2RpZmllcigiIikKKyAg
ICB7CisgICAgfQorICAgIFN0cmluZyBndW5pbnRhbSgpOworICAgIHZvaWQgc2V0R3VuaW50YW0o
U3RyaW5nIGd1bmludGFtKTsKKyAgICB2b2lkIHVwZGF0ZShTdHJpbmcgaW5wdXQKKyAgICAgICAg
LFN5bGxhYmxlVHlwZSB0eXBlCisgICAgICAgICxib29sIHByZWZpeAorICAgICAgICAsYm9vbCBz
dWZmaXgpOworICAgIGludCBsZW5ndGgoKTsKKyAgICB2b2lkIGZvbGRHdW5pbnRhbSgpOworICAg
IHZvaWQgZm9sZENvbnNvbmFudE1vZGlmaWVycygpOworICAgIFN0cmluZyBnZXRTeWxsYWJsZSgp
OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX2JvZHk7CisgICAgU3RyaW5nIG1fcHJlZml4R3Vu
aW50YW07CisgICAgU3RyaW5nIG1fZ3VuaW50YW07CisgICAgU3RyaW5nIG1fcHJlZml4VmF0dHU7
CisgICAgU3RyaW5nIG1fdm93ZWxNb2RpZmllcjsKKyAgICBTdHJpbmcgbV9jb25zb25hbnRNb2Rp
ZmllcjsKK307CisKK30KKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3Jl
bmRlcmluZy90cmFuc2NvZGVyL1N5bGxhYmxlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2NvZGVyL1RTQ0lJRW5j
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9UU0NJ
SUVuY29kZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rl
ci9UU0NJSUVuY29kZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUU0NJSUVuY29kZXIuaCIKKyNpbmNs
dWRlICJUcmFuc2NvZGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBX
ZWJDb3JlCit7CisKK1RTQ0lJRW5jb2Rlcjo6VFNDSUlFbmNvZGVyKCkKKyAgICA6IEVuY29kZXIo
MSkKK3sKKyAgICBVQ2hhciBpbltdID0ge3Zpc2FyZ2EsIHZvd2VsQSwgdm93ZWxBQSwgdm93ZWxJ
MSwgdm93ZWxJMiwgdm93ZWxJSSwgdm93ZWxVLCAKKyAgICAgICAgdm93ZWxVVSwgdm93ZWxFLCB2
b3dlbEVFLCB2b3dlbEFJLCB2b3dlbE8sIHZvd2VsT08sIHZvd2VsQVUsIGNvbnNudEtBLCAKKyAg
ICAgICAgY29uc250TkdBLCBjb25zbnRDQSwgY29uc250SkEsIGNvbnNudE5ZQSwgY29uc250VFRB
LCBjb25zbnROTkEsIGNvbnNudFRBLCAKKyAgICAgICAgY29uc250TkEsIGNvbnNudE5OTkEsIGNv
bnNudFBBLCBjb25zbnRNQSwgY29uc250WUEsIGNvbnNudFJBLCBjb25zbnRMQSwgCisgICAgICAg
IGNvbnNudFZBLCBjb25zbnRTU0EsIGNvbnNudFNBLCBjb25zbnRIQSwgY29uc250TExBLCBjb25z
bnRaSEEsIGNvbnNudFJSQSwgCisgICAgICAgIGNvbmpjdEtTSCwgY29uamN0U1JJSSwgdm93ZWxz
bkFBLCB2b3dlbHNuSSwgdm93ZWxzbklJLCB2b3dlbHNuVSwgCisgICAgICAgIHZvd2Vsc25VVSwg
dm93ZWxzbkUsIHZvd2Vsc25FRSwgdm93ZWxzbkFJLCB2b3dlbHNuQVVMRU4sIGNvbWJvS1UsIAor
ICAgICAgICBjb21ib0tVVSwgY29tYm9LUFVMTEksIGNvbWJvTkdVLCBjb21ib05HVVUsIGNvbWJv
TkdQVUxMSSwgY29tYm9DVSwgCisgICAgICAgIGNvbWJvQ1VVLCBjb21ib0NQVUxMSSwgY29tYm9K
UFVMTEksIGNvbWJvTllVLCBjb21ib05ZVVUsIGNvbWJvTllQVUxMSSwgCisgICAgICAgIGNvbWJv
VFRJLCBjb21ib1RUSUksIGNvbWJvVFRVLCBjb21ib1RUVVUsIGNvbWJvVFRQVUxMSSwgY29tYm9O
TlUsIAorICAgICAgICBjb21ib05OVVUsIGNvbWJvTk5QVUxMSSwgY29tYm9UVSwgY29tYm9UVVUs
IGNvbWJvVFBVTExJLCBjb21ib05VLCAKKyAgICAgICAgY29tYm9OVVUsIGNvbWJvTlBVTExJLCBj
b21ib05OTlUsIGNvbWJvTk5OVVUsIGNvbWJvTk5OUFVMTEksIGNvbWJvUFUsIAorICAgICAgICBj
b21ib1BVVSwgY29tYm9QUFVMTEksIGNvbWJvTVUsIGNvbWJvTVVVLCBjb21ib01QVUxMSSwgY29t
Ym9ZVSwgY29tYm9ZVVUsIAorICAgICAgICBjb21ib1lQVUxMSSwgY29tYm9SVSwgY29tYm9SVVUs
IGNvbWJvUlBVTExJLCBjb21ib0xVLCBjb21ib0xVVSwgCisgICAgICAgIGNvbWJvTFBVTExJLCBj
b21ib1ZVLCBjb21ib1ZVVSwgY29tYm9WUFVMTEksIGNvbWJvU1NQVUxMSSwgY29tYm9TUFVMTEks
IAorICAgICAgICBjb21ib0hQVUxMSSwgY29tYm9MTFUsIGNvbWJvTExVVSwgY29tYm9MTFBVTExJ
LCBjb21ib1pIVSwgY29tYm9aSFVVLCAKKyAgICAgICAgY29tYm9aSFBVTExJLCBjb21ib1JSVSwg
Y29tYm9SUlVVLCBjb21ib1JSUFVMTEksIGNvbWJvS1NIUFVMTEksIAorICAgICAgICBMUVRTSU5H
TEUsIFJRVFNJTkdMRSwgTFFURE9VQkxFLCBSUVRET1VCTEUsIGRpZ2l0WkVSTywgZGlnaXRPTkUs
IAorICAgICAgICBkaWdpdFRXTywgZGlnaXRUSFJFRSwgZGlnaXRGT1VSLCBkaWdpdEZJVkUsIGRp
Z2l0U0lYLCBkaWdpdFNFVkVOLCAKKyAgICAgICAgZGlnaXRFSUdIVCwgZGlnaXROSU5FLCBkaWdp
dFRFTiwgZGlnaXRIVU5EUkVELCBkaWdpdFRIT1VTQU5EIH07IAorCisgICAgVUNoYXIgb3V0W10g
PSB7VHJhbnNjb2Rlcjo6dmlzYXJnYSwgVHJhbnNjb2Rlcjo6dm93ZWxBLCBUcmFuc2NvZGVyOjp2
b3dlbEFBLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6dm93ZWxJLCBUcmFuc2NvZGVyOjp2b3dlbEks
IFRyYW5zY29kZXI6OnZvd2VsSUksIAorICAgICAgICBUcmFuc2NvZGVyOjp2b3dlbFUsIFRyYW5z
Y29kZXI6OnZvd2VsVVUsIFRyYW5zY29kZXI6OnZvd2VsRSwgCisgICAgICAgIFRyYW5zY29kZXI6
OnZvd2VsRUUsIFRyYW5zY29kZXI6OnZvd2VsQUksIFRyYW5zY29kZXI6OnZvd2VsTywgCisgICAg
ICAgIFRyYW5zY29kZXI6OnZvd2VsT08sIFRyYW5zY29kZXI6OnZvd2VsQVUsIFRyYW5zY29kZXI6
OmNvbnNudEtBLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6Y29uc250TkdBLCBUcmFuc2NvZGVyOjpj
b25zbnRDQSwgVHJhbnNjb2Rlcjo6Y29uc250SkEsIAorICAgICAgICBUcmFuc2NvZGVyOjpjb25z
bnROWUEsIFRyYW5zY29kZXI6OmNvbnNudFRUQSwgVHJhbnNjb2Rlcjo6Y29uc250Tk5BLCAKKyAg
ICAgICAgVHJhbnNjb2Rlcjo6Y29uc250VEEsIFRyYW5zY29kZXI6OmNvbnNudE5BLCBUcmFuc2Nv
ZGVyOjpjb25zbnROTk5BLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6Y29uc250UEEsIFRyYW5zY29k
ZXI6OmNvbnNudE1BLCBUcmFuc2NvZGVyOjpjb25zbnRZQSwgCisgICAgICAgIFRyYW5zY29kZXI6
OmNvbnNudFJBLCBUcmFuc2NvZGVyOjpjb25zbnRMQSwgVHJhbnNjb2Rlcjo6Y29uc250VkEsIAor
ICAgICAgICBUcmFuc2NvZGVyOjpjb25zbnRTU0EsIFRyYW5zY29kZXI6OmNvbnNudFNBLCBUcmFu
c2NvZGVyOjpjb25zbnRIQSwgCisgICAgICAgIFRyYW5zY29kZXI6OmNvbnNudExMQSwgVHJhbnNj
b2Rlcjo6Y29uc250WkhBLCBUcmFuc2NvZGVyOjpjb25zbnRSUkEsIAorICAgICAgICBUcmFuc2Nv
ZGVyOjpjb25zbnRLQSAsIFRyYW5zY29kZXI6OnZhdHR1U1NBLCBUcmFuc2NvZGVyOjpjb25zbnRT
QSAsIAorICAgICAgICBUcmFuc2NvZGVyOjp2YXR0dVJBICwgVHJhbnNjb2Rlcjo6dm93ZWxzbklJ
LCBUcmFuc2NvZGVyOjp2b3dlbHNuQUEsIAorICAgICAgICBUcmFuc2NvZGVyOjp2b3dlbHNuSSwg
VHJhbnNjb2Rlcjo6dm93ZWxzbklJLCBUcmFuc2NvZGVyOjp2b3dlbHNuVSwgCisgICAgICAgIFRy
YW5zY29kZXI6OnZvd2Vsc25VVSwgVHJhbnNjb2Rlcjo6dm93ZWxzbkUsIFRyYW5zY29kZXI6OnZv
d2Vsc25FRSwgCisgICAgICAgIFRyYW5zY29kZXI6OnZvd2Vsc25BSSwgVHJhbnNjb2Rlcjo6dm93
ZWxzbkFVTEVOLCBUcmFuc2NvZGVyOjpjb25zbnRLQSAsIAorICAgICAgICBUcmFuc2NvZGVyOjp2
b3dlbHNuVSwgVHJhbnNjb2Rlcjo6Y29uc250S0EgLCBUcmFuc2NvZGVyOjp2b3dlbHNuVVUsIAor
ICAgICAgICBUcmFuc2NvZGVyOjpjb25zbnRLQSAsIFRyYW5zY29kZXI6OnB1bGxpLCBUcmFuc2Nv
ZGVyOjpjb25zbnROR0EgLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6dm93ZWxzblUsIFRyYW5zY29k
ZXI6OmNvbnNudE5HQSAsIFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAgIFRyYW5zY29k
ZXI6OmNvbnNudE5HQSAsIFRyYW5zY29kZXI6OnB1bGxpLCBUcmFuc2NvZGVyOjpjb25zbnRDQSAs
IAorICAgICAgICBUcmFuc2NvZGVyOjp2b3dlbHNuVSwgVHJhbnNjb2Rlcjo6Y29uc250Q0EgLCBU
cmFuc2NvZGVyOjp2b3dlbHNuVVUsIAorICAgICAgICBUcmFuc2NvZGVyOjpjb25zbnRDQSAsIFRy
YW5zY29kZXI6OnB1bGxpLCBUcmFuc2NvZGVyOjpjb25zbnRKQSAsIAorICAgICAgICBUcmFuc2Nv
ZGVyOjpwdWxsaSwgVHJhbnNjb2Rlcjo6Y29uc250TllBICwgVHJhbnNjb2Rlcjo6dm93ZWxzblUs
IAorICAgICAgICBUcmFuc2NvZGVyOjpjb25zbnROWUEgLCBUcmFuc2NvZGVyOjp2b3dlbHNuVVUs
IFRyYW5zY29kZXI6OmNvbnNudE5ZQSAsIAorICAgICAgICBUcmFuc2NvZGVyOjpwdWxsaSwgVHJh
bnNjb2Rlcjo6Y29uc250VFRBICwgVHJhbnNjb2Rlcjo6dm93ZWxzbkksIAorICAgICAgICBUcmFu
c2NvZGVyOjpjb25zbnRUVEEgLCBUcmFuc2NvZGVyOjp2b3dlbHNuSUksIFRyYW5zY29kZXI6OmNv
bnNudFRUQSAsIAorICAgICAgICBUcmFuc2NvZGVyOjp2b3dlbHNuVSwgVHJhbnNjb2Rlcjo6Y29u
c250VFRBICwgVHJhbnNjb2Rlcjo6dm93ZWxzblVVLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6Y29u
c250VFRBICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6OmNvbnNudE5OQSAsIAorICAg
ICAgICBUcmFuc2NvZGVyOjp2b3dlbHNuVSwgVHJhbnNjb2Rlcjo6Y29uc250Tk5BICwgVHJhbnNj
b2Rlcjo6dm93ZWxzblVVLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6Y29uc250Tk5BICwgVHJhbnNj
b2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6OmNvbnNudFRBICwgCisgICAgICAgIFRyYW5zY29kZXI6
OnZvd2Vsc25VLCBUcmFuc2NvZGVyOjpjb25zbnRUQSAsIFRyYW5zY29kZXI6OnZvd2Vsc25VVSwg
CisgICAgICAgIFRyYW5zY29kZXI6OmNvbnNudFRBICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5z
Y29kZXI6OmNvbnNudE5BICwgCisgICAgICAgIFRyYW5zY29kZXI6OnZvd2Vsc25VLCBUcmFuc2Nv
ZGVyOjpjb25zbnROQSAsIFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAgIFRyYW5zY29k
ZXI6OmNvbnNudE5BICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6OmNvbnNudE5OTkEg
LCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6dm93ZWxzblUsIFRyYW5zY29kZXI6OmNvbnNudE5OTkEg
LCBUcmFuc2NvZGVyOjp2b3dlbHNuVVUsIAorICAgICAgICBUcmFuc2NvZGVyOjpjb25zbnROTk5B
ICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6OmNvbnNudFBBICwgCisgICAgICAgIFRy
YW5zY29kZXI6OnZvd2Vsc25VLCBUcmFuc2NvZGVyOjpjb25zbnRQQSAsIFRyYW5zY29kZXI6OnZv
d2Vsc25VVSwgCisgICAgICAgIFRyYW5zY29kZXI6OmNvbnNudFBBICwgVHJhbnNjb2Rlcjo6cHVs
bGksIFRyYW5zY29kZXI6OmNvbnNudE1BICwgCisgICAgICAgIFRyYW5zY29kZXI6OnZvd2Vsc25V
LCBUcmFuc2NvZGVyOjpjb25zbnRNQSAsIFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAg
IFRyYW5zY29kZXI6OmNvbnNudE1BICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6OmNv
bnNudFlBICwgCisgICAgICAgIFRyYW5zY29kZXI6OnZvd2Vsc25VLCBUcmFuc2NvZGVyOjpjb25z
bnRZQSAsIFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAgIFRyYW5zY29kZXI6OmNvbnNu
dFlBICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6OmNvbnNudFJBICwgCisgICAgICAg
IFRyYW5zY29kZXI6OnZvd2Vsc25VLCBUcmFuc2NvZGVyOjpjb25zbnRSQSAsIFRyYW5zY29kZXI6
OnZvd2Vsc25VVSwgCisgICAgICAgIFRyYW5zY29kZXI6OmNvbnNudFJBICwgVHJhbnNjb2Rlcjo6
cHVsbGksIFRyYW5zY29kZXI6OmNvbnNudExBICwgCisgICAgICAgIFRyYW5zY29kZXI6OnZvd2Vs
c25VLCBUcmFuc2NvZGVyOjpjb25zbnRMQSAsIFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAg
ICAgIFRyYW5zY29kZXI6OmNvbnNudExBICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6
OmNvbnNudFZBICwgCisgICAgICAgIFRyYW5zY29kZXI6OnZvd2Vsc25VLCBUcmFuc2NvZGVyOjpj
b25zbnRWQSAsIFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAgIFRyYW5zY29kZXI6OmNv
bnNudFZBICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6OmNvbnNudFNTQSAsIAorICAg
ICAgICBUcmFuc2NvZGVyOjpwdWxsaSwgVHJhbnNjb2Rlcjo6Y29uc250U0EgLCBUcmFuc2NvZGVy
OjpwdWxsaSwgCisgICAgICAgIFRyYW5zY29kZXI6OmNvbnNudEhBICwgVHJhbnNjb2Rlcjo6cHVs
bGksIFRyYW5zY29kZXI6OmNvbnNudExMQSAsIAorICAgICAgICBUcmFuc2NvZGVyOjp2b3dlbHNu
VSwgVHJhbnNjb2Rlcjo6Y29uc250TExBICwgVHJhbnNjb2Rlcjo6dm93ZWxzblVVLCAKKyAgICAg
ICAgVHJhbnNjb2Rlcjo6Y29uc250TExBICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6
OmNvbnNudFpIQSAsIAorICAgICAgICBUcmFuc2NvZGVyOjp2b3dlbHNuVSwgVHJhbnNjb2Rlcjo6
Y29uc250WkhBICwgVHJhbnNjb2Rlcjo6dm93ZWxzblVVLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6
Y29uc250WkhBICwgVHJhbnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6OmNvbnNudFJSQSAsIAor
ICAgICAgICBUcmFuc2NvZGVyOjp2b3dlbHNuVSwgVHJhbnNjb2Rlcjo6Y29uc250UlJBICwgVHJh
bnNjb2Rlcjo6dm93ZWxzblVVLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6Y29uc250UlJBICwgVHJh
bnNjb2Rlcjo6cHVsbGksIFRyYW5zY29kZXI6OmNvbnNudEtBICwgCisgICAgICAgIFRyYW5zY29k
ZXI6OnZhdHR1U1NBICwgVHJhbnNjb2Rlcjo6cHVsbGksIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMs
IDB4MjAxRCwgCisgICAgICAgIFRyYW5zY29kZXI6OmRpZ2l0WkVSTywgVHJhbnNjb2Rlcjo6ZGln
aXRPTkUsIFRyYW5zY29kZXI6OmRpZ2l0VFdPLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6ZGlnaXRU
SFJFRSwgVHJhbnNjb2Rlcjo6ZGlnaXRGT1VSLCBUcmFuc2NvZGVyOjpkaWdpdEZJVkUsIAorICAg
ICAgICBUcmFuc2NvZGVyOjpkaWdpdFNJWCwgVHJhbnNjb2Rlcjo6ZGlnaXRTRVZFTiwgVHJhbnNj
b2Rlcjo6ZGlnaXRFSUdIVCwgCisgICAgICAgIFRyYW5zY29kZXI6OmRpZ2l0TklORSwgVHJhbnNj
b2Rlcjo6ZGlnaXRURU4sIFRyYW5zY29kZXI6OmRpZ2l0SFVORFJFRCwgCisgICAgICAgIFRyYW5z
Y29kZXI6OmRpZ2l0VEhPVVNBTkQgfTsKKworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhp
biArIDAsIDEpLCBTdHJpbmcob3V0ICsgMCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0
cmluZyhpbiArIDEsIDEpLCBTdHJpbmcob3V0ICsgMSwgMSkpOworICAgIG1fbG9va3VwVGFibGUu
c2V0KFN0cmluZyhpbiArIDIsIDEpLCBTdHJpbmcob3V0ICsgMiwgMSkpOworICAgIG1fbG9va3Vw
VGFibGUuc2V0KFN0cmluZyhpbiArIDMsIDEpLCBTdHJpbmcob3V0ICsgMywgMSkpOworICAgIG1f
bG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDQsIDEpLCBTdHJpbmcob3V0ICsgNCwgMSkpOwor
ICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDUsIDEpLCBTdHJpbmcob3V0ICsgNSwg
MSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDYsIDEpLCBTdHJpbmcob3V0
ICsgNiwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDcsIDEpLCBTdHJp
bmcob3V0ICsgNywgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDgsIDEp
LCBTdHJpbmcob3V0ICsgOCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiAr
IDksIDEpLCBTdHJpbmcob3V0ICsgOSwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmlu
ZyhpbiArIDEwLCAxKSwgU3RyaW5nKG91dCArIDEwLCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5z
ZXQoU3RyaW5nKGluICsgMTEsIDEpLCBTdHJpbmcob3V0ICsgMTEsIDEpKTsKKyAgICBtX2xvb2t1
cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMiwgMSksIFN0cmluZyhvdXQgKyAxMiwgMSkpOworICAg
IG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDEzLCAxKSwgU3RyaW5nKG91dCArIDEzLCAx
KSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTQsIDEpLCBTdHJpbmcob3V0
ICsgMTQsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxNSwgMSksIFN0
cmluZyhvdXQgKyAxNSwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDE2
LCAxKSwgU3RyaW5nKG91dCArIDE2LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5n
KGluICsgMTcsIDEpLCBTdHJpbmcob3V0ICsgMTcsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNl
dChTdHJpbmcoaW4gKyAxOCwgMSksIFN0cmluZyhvdXQgKyAxOCwgMSkpOworICAgIG1fbG9va3Vw
VGFibGUuc2V0KFN0cmluZyhpbiArIDE5LCAxKSwgU3RyaW5nKG91dCArIDE5LCAxKSk7CisgICAg
bV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMjAsIDEpLCBTdHJpbmcob3V0ICsgMjAsIDEp
KTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAyMSwgMSksIFN0cmluZyhvdXQg
KyAyMSwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDIyLCAxKSwgU3Ry
aW5nKG91dCArIDIyLCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMjMs
IDEpLCBTdHJpbmcob3V0ICsgMjMsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmco
aW4gKyAyNCwgMSksIFN0cmluZyhvdXQgKyAyNCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0
KFN0cmluZyhpbiArIDI1LCAxKSwgU3RyaW5nKG91dCArIDI1LCAxKSk7CisgICAgbV9sb29rdXBU
YWJsZS5zZXQoU3RyaW5nKGluICsgMjYsIDEpLCBTdHJpbmcob3V0ICsgMjYsIDEpKTsKKyAgICBt
X2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAyNywgMSksIFN0cmluZyhvdXQgKyAyNywgMSkp
OworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDI4LCAxKSwgU3RyaW5nKG91dCAr
IDI4LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMjksIDEpLCBTdHJp
bmcob3V0ICsgMjksIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAzMCwg
MSksIFN0cmluZyhvdXQgKyAzMCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhp
biArIDMxLCAxKSwgU3RyaW5nKG91dCArIDMxLCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQo
U3RyaW5nKGluICsgMzIsIDEpLCBTdHJpbmcob3V0ICsgMzIsIDEpKTsKKyAgICBtX2xvb2t1cFRh
YmxlLnNldChTdHJpbmcoaW4gKyAzMywgMSksIFN0cmluZyhvdXQgKyAzMywgMSkpOworICAgIG1f
bG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDM0LCAxKSwgU3RyaW5nKG91dCArIDM0LCAxKSk7
CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMzUsIDEpLCBTdHJpbmcob3V0ICsg
MzUsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAzNiwgMSksIFN0cmlu
ZyhvdXQgKyAzNiwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDM3LCAx
KSwgU3RyaW5nKG91dCArIDM4LCAzKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGlu
ICsgMzgsIDEpLCBTdHJpbmcob3V0ICsgNDEsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChT
dHJpbmcoaW4gKyAzOSwgMSksIFN0cmluZyhvdXQgKyA0MiwgMSkpOworICAgIG1fbG9va3VwVGFi
bGUuc2V0KFN0cmluZyhpbiArIDQwLCAxKSwgU3RyaW5nKG91dCArIDQzLCAxKSk7CisgICAgbV9s
b29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNDEsIDEpLCBTdHJpbmcob3V0ICsgNDQsIDEpKTsK
KyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA0MiwgMSksIFN0cmluZyhvdXQgKyA0
NSwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDQzLCAxKSwgU3RyaW5n
KG91dCArIDQ2LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNDQsIDEp
LCBTdHJpbmcob3V0ICsgNDcsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4g
KyA0NSwgMSksIFN0cmluZyhvdXQgKyA0OCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0
cmluZyhpbiArIDQ2LCAxKSwgU3RyaW5nKG91dCArIDQ5LCAxKSk7CisgICAgbV9sb29rdXBUYWJs
ZS5zZXQoU3RyaW5nKGluICsgNDcsIDEpLCBTdHJpbmcob3V0ICsgNTAsIDIpKTsKKyAgICBtX2xv
b2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA0OCwgMSksIFN0cmluZyhvdXQgKyA1MiwgMikpOwor
ICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDQ5LCAxKSwgU3RyaW5nKG91dCArIDU0
LCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNTAsIDEpLCBTdHJpbmco
b3V0ICsgNTYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA1MSwgMSks
IFN0cmluZyhvdXQgKyA1OCwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiAr
IDUyLCAxKSwgU3RyaW5nKG91dCArIDYwLCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3Ry
aW5nKGluICsgNTMsIDEpLCBTdHJpbmcob3V0ICsgNjIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxl
LnNldChTdHJpbmcoaW4gKyA1NCwgMSksIFN0cmluZyhvdXQgKyA2NCwgMikpOworICAgIG1fbG9v
a3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDU1LCAxKSwgU3RyaW5nKG91dCArIDY2LCAyKSk7Cisg
ICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNTYsIDEpLCBTdHJpbmcob3V0ICsgNjgs
IDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA1NywgMSksIFN0cmluZyhv
dXQgKyA3MCwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDU4LCAxKSwg
U3RyaW5nKG91dCArIDcyLCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsg
NTksIDEpLCBTdHJpbmcob3V0ICsgNzQsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJp
bmcoaW4gKyA2MCwgMSksIFN0cmluZyhvdXQgKyA3NiwgMikpOworICAgIG1fbG9va3VwVGFibGUu
c2V0KFN0cmluZyhpbiArIDYxLCAxKSwgU3RyaW5nKG91dCArIDc4LCAyKSk7CisgICAgbV9sb29r
dXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNjIsIDEpLCBTdHJpbmcob3V0ICsgODAsIDIpKTsKKyAg
ICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA2MywgMSksIFN0cmluZyhvdXQgKyA4Miwg
MikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDY0LCAxKSwgU3RyaW5nKG91
dCArIDg0LCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNjUsIDEpLCBT
dHJpbmcob3V0ICsgODYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA2
NiwgMSksIFN0cmluZyhvdXQgKyA4OCwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmlu
ZyhpbiArIDY3LCAxKSwgU3RyaW5nKG91dCArIDkwLCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5z
ZXQoU3RyaW5nKGluICsgNjgsIDEpLCBTdHJpbmcob3V0ICsgOTIsIDIpKTsKKyAgICBtX2xvb2t1
cFRhYmxlLnNldChTdHJpbmcoaW4gKyA2OSwgMSksIFN0cmluZyhvdXQgKyA5NCwgMikpOworICAg
IG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDcwLCAxKSwgU3RyaW5nKG91dCArIDk2LCAy
KSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNzEsIDEpLCBTdHJpbmcob3V0
ICsgOTgsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3MiwgMSksIFN0
cmluZyhvdXQgKyAxMDAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3
MywgMSksIFN0cmluZyhvdXQgKyAxMDIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJp
bmcoaW4gKyA3NCwgMSksIFN0cmluZyhvdXQgKyAxMDQsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxl
LnNldChTdHJpbmcoaW4gKyA3NSwgMSksIFN0cmluZyhvdXQgKyAxMDYsIDIpKTsKKyAgICBtX2xv
b2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3NiwgMSksIFN0cmluZyhvdXQgKyAxMDgsIDIpKTsK
KyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3NywgMSksIFN0cmluZyhvdXQgKyAx
MTAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3OCwgMSksIFN0cmlu
ZyhvdXQgKyAxMTIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3OSwg
MSksIFN0cmluZyhvdXQgKyAxMTQsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmco
aW4gKyA4MCwgMSksIFN0cmluZyhvdXQgKyAxMTYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNl
dChTdHJpbmcoaW4gKyA4MSwgMSksIFN0cmluZyhvdXQgKyAxMTgsIDIpKTsKKyAgICBtX2xvb2t1
cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4MiwgMSksIFN0cmluZyhvdXQgKyAxMjAsIDIpKTsKKyAg
ICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4MywgMSksIFN0cmluZyhvdXQgKyAxMjIs
IDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4NCwgMSksIFN0cmluZyhv
dXQgKyAxMjQsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4NSwgMSks
IFN0cmluZyhvdXQgKyAxMjYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4g
KyA4NiwgMSksIFN0cmluZyhvdXQgKyAxMjgsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChT
dHJpbmcoaW4gKyA4NywgMSksIFN0cmluZyhvdXQgKyAxMzAsIDIpKTsKKyAgICBtX2xvb2t1cFRh
YmxlLnNldChTdHJpbmcoaW4gKyA4OCwgMSksIFN0cmluZyhvdXQgKyAxMzIsIDIpKTsKKyAgICBt
X2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4OSwgMSksIFN0cmluZyhvdXQgKyAxMzQsIDIp
KTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5MCwgMSksIFN0cmluZyhvdXQg
KyAxMzYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5MSwgMSksIFN0
cmluZyhvdXQgKyAxMzgsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5
MiwgMSksIFN0cmluZyhvdXQgKyAxNDAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJp
bmcoaW4gKyA5MywgMSksIFN0cmluZyhvdXQgKyAxNDIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxl
LnNldChTdHJpbmcoaW4gKyA5NCwgMSksIFN0cmluZyhvdXQgKyAxNDQsIDIpKTsKKyAgICBtX2xv
b2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5NSwgMSksIFN0cmluZyhvdXQgKyAxNDYsIDIpKTsK
KyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5NiwgMSksIFN0cmluZyhvdXQgKyAx
NDgsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5NywgMSksIFN0cmlu
ZyhvdXQgKyAxNTAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5OCwg
MSksIFN0cmluZyhvdXQgKyAxNTIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmco
aW4gKyA5OSwgMSksIFN0cmluZyhvdXQgKyAxNTQsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNl
dChTdHJpbmcoaW4gKyAxMDAsIDEpLCBTdHJpbmcob3V0ICsgMTU2LCAyKSk7CisgICAgbV9sb29r
dXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTAxLCAxKSwgU3RyaW5nKG91dCArIDE1OCwgMikpOwor
ICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDEwMiwgMSksIFN0cmluZyhvdXQgKyAx
NjAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMDMsIDEpLCBTdHJp
bmcob3V0ICsgMTYyLCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTA0
LCAxKSwgU3RyaW5nKG91dCArIDE2NCwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmlu
ZyhpbiArIDEwNSwgMSksIFN0cmluZyhvdXQgKyAxNjYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxl
LnNldChTdHJpbmcoaW4gKyAxMDYsIDEpLCBTdHJpbmcob3V0ICsgMTY4LCAyKSk7CisgICAgbV9s
b29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTA3LCAxKSwgU3RyaW5nKG91dCArIDE3MCwgMykp
OworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDEwOCwgMSksIFN0cmluZyhvdXQg
KyAxNzMsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMDksIDEpLCBT
dHJpbmcob3V0ICsgMTc0LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsg
MTEwLCAxKSwgU3RyaW5nKG91dCArIDE3NSwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0
cmluZyhpbiArIDExMSwgMSksIFN0cmluZyhvdXQgKyAxNzYsIDEpKTsKKyAgICBtX2xvb2t1cFRh
YmxlLnNldChTdHJpbmcoaW4gKyAxMTIsIDEpLCBTdHJpbmcob3V0ICsgMTc3LCAxKSk7CisgICAg
bV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTEzLCAxKSwgU3RyaW5nKG91dCArIDE3OCwg
MSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDExNCwgMSksIFN0cmluZyhv
dXQgKyAxNzksIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMTUsIDEp
LCBTdHJpbmcob3V0ICsgMTgwLCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGlu
ICsgMTE2LCAxKSwgU3RyaW5nKG91dCArIDE4MSwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0
KFN0cmluZyhpbiArIDExNywgMSksIFN0cmluZyhvdXQgKyAxODIsIDEpKTsKKyAgICBtX2xvb2t1
cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMTgsIDEpLCBTdHJpbmcob3V0ICsgMTgzLCAxKSk7Cisg
ICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTE5LCAxKSwgU3RyaW5nKG91dCArIDE4
NCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDEyMCwgMSksIFN0cmlu
ZyhvdXQgKyAxODUsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMjEs
IDEpLCBTdHJpbmcob3V0ICsgMTg2LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5n
KGluICsgMTIyLCAxKSwgU3RyaW5nKG91dCArIDE4NywgMSkpOworICAgIG1fbG9va3VwVGFibGUu
c2V0KFN0cmluZyhpbiArIDEyMywgMSksIFN0cmluZyhvdXQgKyAxODgsIDEpKTsKKyAgICBtX2xv
b2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMjQsIDEpLCBTdHJpbmcob3V0ICsgMTg5LCAxKSk7
Cit9CisKK2Jvb2wgVFNDSUlFbmNvZGVyOjppc1JlZHVuZGFudChVQ2hhcikKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK1N0cmluZyBUU0NJSUVuY29kZXI6OnByZXByb2Nlc3NNZXNzYWdlKFN0
cmluZyBtZXNzYWdlKQoreworICAgIHJldHVybiBtZXNzYWdlOworfQorCitib29sIFRTQ0lJRW5j
b2Rlcjo6aXNQcmVwcm9jZXNzUmVxdWlyZWQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFRTQ0lJRW5jb2Rlcjo6aGFzU3VmZml4ZXMoKQoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBUU0NJSUVuY29kZXI6OmlzT3ZlcmxvYWRlZChTdHJpbmcpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFRTQ0lJRW5jb2Rlcjo6aXNTdWZmaXhTeW1ib2woU3RyaW5nKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUU0NJSUVuY29kZXI6OmlzUHJlZml4U3lt
Ym9sKFN0cmluZyB0ZXh0KQoreworICAgIFVDaGFyIGNvZGUgPSB0ZXh0WzBdOworICAgIHJldHVy
biAoY29kZSA9PSB2b3dlbHNuRSB8fCBjb2RlID09IHZvd2Vsc25FRSB8fCBjb2RlID09IHZvd2Vs
c25BSSk7Cit9CisKK1N0cmluZyBUU0NJSUVuY29kZXI6OmhhbmRsZVR3b1BhcnRWb3dlbFNpZ25z
KFVDaGFyIGEsIFVDaGFyIGIpCit7CisgICAgVUNoYXIgY29kZXNbMl07CisgICAgaW50IHNpemUg
PSAxOworCisgICAgaWYgKGIgPT0gVHJhbnNjb2Rlcjo6dm93ZWxzbkUgJiYgYSA9PSBUcmFuc2Nv
ZGVyOjp2b3dlbHNuQUEpCisgICAgICAgIGNvZGVzWzBdID0gVHJhbnNjb2Rlcjo6dm93ZWxzbk87
CisgICAgZWxzZSBpZiAoYiA9PSBUcmFuc2NvZGVyOjp2b3dlbHNuRUUgJiYgYSA9PSBUcmFuc2Nv
ZGVyOjp2b3dlbHNuQUEpCisgICAgICAgIGNvZGVzWzBdID0gVHJhbnNjb2Rlcjo6dm93ZWxzbk9P
OworICAgIGVsc2UgaWYgKGIgPT0gVHJhbnNjb2Rlcjo6dm93ZWxzbkUgJiYgYSA9PSBUcmFuc2Nv
ZGVyOjp2b3dlbHNuQVVMRU4pCisgICAgICAgIGNvZGVzWzFdID0gVHJhbnNjb2Rlcjo6dm93ZWxz
bkFVOworICAgIGVsc2UgeworICAgICAgICBjb2Rlc1swXSA9IGE7CisgICAgICAgIGNvZGVzWzFd
ID0gYjsKKyAgICAgICAgc2l6ZSA9IDI7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcoY29kZXMs
IHNpemUpOworfQorCitTdHJpbmcgVFNDSUlFbmNvZGVyOjpsb29rdXAoU3RyaW5nIGtleSkKK3sK
KyAgICBpZiAobV9sb29rdXBUYWJsZS5jb250YWlucyhrZXkpKQorICAgICAgICByZXR1cm4gbV9s
b29rdXBUYWJsZS5nZXQoa2V5KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3JlbmRl
cmluZy90cmFuc2NvZGVyL1RTQ0lJRW5jb2Rlci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhl
Y3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2NvZGVyL1RTQ0lJ
RW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvVFND
SUlFbmNvZGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2NvZGVy
L1RTQ0lJRW5jb2Rlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgVFNDSUlFbmNvZGVyX2gKKyNkZWZpbmUgVFNDSUlFbmNvZGVyX2gKKworI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUg
IkVuY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFRTQ0lJRW5jb2RlciA6IHB1YmxpYyBFbmNvZGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgdmlzYXJnYSA9IDB4MDBCNzsKKyAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgdm93ZWxBID0gMHgwMEFCOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbEFBID0g
MHgwMEFDOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbEkxID0gMHgwMEFEOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciB2b3dlbEkyID0gMHgwMEZFOworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciB2b3dlbElJID0gMHgwMEFFOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbFUgPSAweDAw
QUY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsVVUgPSAweDAwQjA7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIHZvd2VsRSA9IDB4MDBCMTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93
ZWxFRSA9IDB4MDBCMjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxBSSA9IDB4MDBCMzsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxPID0gMHgwMEI0OworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciB2b3dlbE9PID0gMHgwMEI1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbEFV
ID0gMHgwMEI2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRLQSA9IDB4MDBCODsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250TkdBID0gMHgwMEI5OworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBjb25zbnRDQSA9IDB4MDBCQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250
SkEgPSAweDAxOTI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudE5ZQSA9IDB4MDBCQjsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250VFRBID0gMHgwMEJDOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBjb25zbnROTkEgPSAweDAwQkQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNv
bnNudFRBID0gMHgwMEJFOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnROQSA9IDB4MDBC
RjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250Tk5OQSA9IDB4MDBDOTsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgY29uc250UEEgPSAweDAwQzA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGNvbnNudE1BID0gMHgwMEMxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRZQSA9IDB4
MDBDMjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250UkEgPSAweDAwQzM7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIGNvbnNudExBID0gMHgwMEM0OworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBjb25zbnRWQSA9IDB4MDBDNTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250WkhBID0g
MHgwMEM2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRMTEEgPSAweDAwQzc7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudFJSQSA9IDB4MDBDODsKKyAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgY29uc250U1NBID0gMHgyMDFFOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRT
QSA9IDB4MjAyNjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250SEEgPSAweDIwMjA7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbmpjdEtTSCA9IDB4MjAyMTsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgY29uamN0U1JJSSA9IDB4MjAxQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93
ZWxzbkFBID0gMHgwMEExOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuSSA9IDB4MDBB
MjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbklJID0gMHgwMEEzOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciB2b3dlbHNuVSA9IDB4MDBBNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dm93ZWxzblVVID0gMHgwMEE1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuRSA9IDB4
MDBBNjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbkVFID0gMHgwMEE3OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuQUkgPSAweDAwQTg7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHZvd2Vsc25BVUxFTiA9IDB4MDBBQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9L
UFVMTEkgPSAweDAwRUM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTkdQVUxMSSA9IDB4
MDBFRDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9DUFVMTEkgPSAweDAwRUU7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvSlBVTExJID0gMHgwMkM2OworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBjb21ib05ZUFVMTEkgPSAweDAwRUY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNv
bWJvVFRQVUxMSSA9IDB4MDBGMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9OTlBVTExJ
ID0gMHgwMEYxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1RQVUxMSSA9IDB4MDBGMjsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9OUFVMTEkgPSAweDAwRjM7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGNvbWJvTk5OUFVMTEkgPSAweDAwRkQ7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIGNvbWJvUFBVTExJID0gMHgwMEY0OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib01Q
VUxMSSA9IDB4MDBGNTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9ZUFVMTEkgPSAweDAw
RjY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvUlBVTExJID0gMHgwMEY3OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBjb21ib0xQVUxMSSA9IDB4MDBGODsKKyAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgY29tYm9WUFVMTEkgPSAweDAwRjk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJv
WkhQVUxMSSA9IDB4MDBGQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9MTFBVTExJID0g
MHgwMEZCOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1NTUFVMTEkgPSAweDIwMzA7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvU1BVTExJID0gMHgwMTYwOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBjb21ib0hQVUxMSSA9IDB4MjAzOTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
Y29tYm9SUlBVTExJID0gMHgwMEZDOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib0tTSFBV
TExJID0gMHgwMTUyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1RUSSA9IDB4MDBDQTsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9UVElJID0gMHgwMENCOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBjb21ib0tVID0gMHgwMENDOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21i
b0tVVSA9IDB4MDBEQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9OR1UgPSAweDIxMjI7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTkdVVSA9IDB4MjAzQTsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgY29tYm9DVSA9IDB4MDBDRDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29t
Ym9DVVUgPSAweDAwREQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTllVID0gMHgwMTYx
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib05ZVVUgPSAweDAxNTM7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGNvbWJvVFRVID0gMHgwMENFOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBj
b21ib1RUVVUgPSAweDAwREU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTk5VID0gMHgw
MENGOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib05OVVUgPSAweDAwREY7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIGNvbWJvVFUgPSAweDAwRDA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGNvbWJvVFVVID0gMHgwMEUwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib05VID0gMHgw
MEQxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib05VVSA9IDB4MDBFMTsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgY29tYm9OTk5VID0gMHgwMERCOworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBjb21ib05OTlVVID0gMHgwMEVCOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1BVID0g
MHgwMEQyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1BVVSA9IDB4MDBFMjsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgY29tYm9NVSA9IDB4MDBEMzsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgY29tYm9NVVUgPSAweDAwRTM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvWVUgPSAw
eDAwRDQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvWVVVID0gMHgwMEU0OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBjb21ib1JVID0gMHgwMEQ1OworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBjb21ib1JVVSA9IDB4MDBFNTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9MVSA9IDB4
MDBENjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9MVVUgPSAweDAwRTY7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIGNvbWJvVlUgPSAweDAwRDc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGNvbWJvVlVVID0gMHgwMEU3OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1pIVSA9IDB4
MDBEODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9aSFVVID0gMHgwMEU4OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBjb21ib0xMVSA9IDB4MDBEOTsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgY29tYm9MTFVVID0gMHgwMEU5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1JSVSA9
IDB4MDBEQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9SUlVVID0gMHgwMEVBOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdFpFUk8gPSAweDIwQUM7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGRpZ2l0T05FID0gMHgwMDgxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdFRX
TyA9IDB4MDA4RDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRUSFJFRSA9IDB4MDE3RDsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRGT1VSID0gMHgwMDhGOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBkaWdpdEZJVkUgPSAweDAwOTA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRp
Z2l0U0lYID0gMHgyMDIyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdFNFVkVOID0gMHgy
MDEzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdEVJR0hUID0gMHgyMDE0OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBkaWdpdE5JTkUgPSAweDAyREM7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIGRpZ2l0VEVOID0gMHgwMDlEOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdEhVTkRS
RUQgPSAweDAxN0U7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0VEhPVVNBTkQgPSAweDAx
Nzg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIExRVFNJTkdMRSA9IDB4MjAxODsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgUlFUU0lOR0xFID0gMHgyMDE5OworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBMUVRET1VCTEUgPSAweDIwMUM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIFJRVERPVUJMRSA9
IDB4MjAxRDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgQ09QWVJJR0dIVCA9IDB4MDBBOTsKKwor
ICAgIFRTQ0lJRW5jb2RlcigpOworICAgIHZpcnR1YWwgU3RyaW5nIGxvb2t1cChTdHJpbmcga2V5
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWR1bmRhbnQoVUNoYXIpOworICAgIHZpcnR1YWwgU3Ry
aW5nIHByZXByb2Nlc3NNZXNzYWdlKFN0cmluZyk7CisgICAgdmlydHVhbCBib29sIGlzUHJlcHJv
Y2Vzc1JlcXVpcmVkKCk7CisgICAgdmlydHVhbCBib29sIGhhc1N1ZmZpeGVzKCk7CisgICAgdmly
dHVhbCBib29sIGlzT3ZlcmxvYWRlZChTdHJpbmcpOworICAgIHZpcnR1YWwgYm9vbCBpc1N1ZmZp
eFN5bWJvbChTdHJpbmcpOworICAgIHZpcnR1YWwgYm9vbCBpc1ByZWZpeFN5bWJvbChTdHJpbmcp
OworICAgIHZpcnR1YWwgU3RyaW5nIGhhbmRsZVR3b1BhcnRWb3dlbFNpZ25zKFVDaGFyIGEsIFVD
aGFyIGIpOworCitwcml2YXRlOgorICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fbG9va3Vw
VGFibGU7Cit9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9y
ZW5kZXJpbmcvdHJhbnNjb2Rlci9UU0NJSUVuY29kZXIuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpl
eGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvVGFt
aWxDb252ZXJ0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29k
ZXIvVGFtaWxDb252ZXJ0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
dHJhbnNjb2Rlci9UYW1pbENvbnZlcnRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRhbWlsQ29udmVy
dGVyLmgiCisjaW5jbHVkZSAiVHJhbnNjb2Rlci5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
CituYW1lc3BhY2UgV2ViQ29yZQoreworCitUYW1pbENvbnZlcnRlcjo6VGFtaWxDb252ZXJ0ZXIo
KQoreworICAgIFVDaGFyIG91dFtdID0ge2FudXN2YXJhLCB2aXNhcmdhLCBtaXNjVklSQU1BLCBt
aXNjVklSQU1BLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6VW5pQ29kZVNoYXJlZFpXSiwgbWlzY1ZJ
UkFNQSwgVHJhbnNjb2Rlcjo6VW5pQ29kZVNoYXJlZFpXTkosIAorICAgICAgICBUcmFuc2NvZGVy
OjpVbmlDb2RlU2hhcmVkQVZBR1JBSEEsIFRyYW5zY29kZXI6OlVuaUNvZGVTaGFyZWRVREFUVEEs
IAorICAgICAgICBUcmFuc2NvZGVyOjpVbmlDb2RlU2hhcmVkQU5VREFUVEEsIFRyYW5zY29kZXI6
OlVuaUNvZGVTaGFyZWRTVkFSSVRBLCAKKyAgICAgICAgVHJhbnNjb2Rlcjo6VW5pQ29kZVNoYXJl
ZERBTkRBLCBUcmFuc2NvZGVyOjpVbmlDb2RlU2hhcmVkRERBTkRBLCAKKyAgICAgICAgVHJhbnNj
b2Rlcjo6VW5pQ29kZVNoYXJlZGFiYnJldiwgVHJhbnNjb2Rlcjo6VW5pQ29kZVNoYXJlZE9NLCBk
aWdpdFpFUk8sIAorICAgICAgICBkaWdpdE9ORSwgZGlnaXRUV08sIGRpZ2l0VEhSRUUsIGRpZ2l0
Rk9VUiwgZGlnaXRGSVZFLCBkaWdpdFNJWCwgCisgICAgICAgIGRpZ2l0U0VWRU4sIGRpZ2l0RUlH
SFQsIGRpZ2l0TklORSwgZGlnaXRURU4sIGRpZ2l0SFVORFJFRCwgZGlnaXRUSE9VU0FORCwgCisg
ICAgICAgIGxldHRlckEsIGxldHRlckFBLCBsZXR0ZXJJLCBsZXR0ZXJJSSwgbGV0dGVyVSwgbGV0
dGVyVVUsIGxldHRlckUsIAorICAgICAgICBsZXR0ZXJFRSwgbGV0dGVyQUksIGxldHRlck8sIGxl
dHRlck9PLCBsZXR0ZXJBVSwgbGV0dGVyS0EsIGxldHRlck5HQSwgCisgICAgICAgIGxldHRlckNB
LCBsZXR0ZXJKQSwgbGV0dGVyTllBLCBsZXR0ZXJUVEEsIGxldHRlck5OQSwgbGV0dGVyVEEsIGxl
dHRlck5BLCAKKyAgICAgICAgbGV0dGVyTk5OQSwgbGV0dGVyUEEsIGxldHRlck1BLCBsZXR0ZXJZ
QSwgbGV0dGVyUkEsIGxldHRlckxBLCBsZXR0ZXJWQSwgCisgICAgICAgIGxldHRlclNIQSwgbGV0
dGVyU1NBLCBsZXR0ZXJTQSwgbGV0dGVySEEsIGxldHRlckxMQSwgbGV0dGVyWkhBLCAKKyAgICAg
ICAgbGV0dGVyUlJBLCB2b3dlbHNuQUEsIHZvd2Vsc25JLCB2b3dlbHNuSUksIHZvd2Vsc25VLCB2
b3dlbHNuVVUsIHZvd2Vsc25FLCAKKyAgICAgICAgdm93ZWxzbkVFLCB2b3dlbHNuQUksIHZvd2Vs
c25PLCB2b3dlbHNuT08sIHZvd2Vsc25BVSwgbWlzY0FVTEVOLCBzaWduREFZLCAKKyAgICAgICAg
c2lnbk1PTlRILCBzaWduWUVBUiwgc2lnbkRFQklULCBzaWduQ1JFRElULCBzaWduQVNBQk9WRSwg
c2lnblJVUEVFLCAKKyAgICAgICAgc2lnbk5VTUJFUiwgbGV0dGVyQSwgbGV0dGVyRSwgbGV0dGVy
TywgbGV0dGVyS0EsIGxldHRlcktBLCBsZXR0ZXJLQSwgCisgICAgICAgIGxldHRlcktBLCBsZXR0
ZXJLQSwgbGV0dGVyS0EsIGxldHRlckNBLCBsZXR0ZXJKQSwgbGV0dGVySkEsIGxldHRlclRUQSwg
CisgICAgICAgIGxldHRlclRUQSwgbGV0dGVyVFRBLCBsZXR0ZXJUVEEsIGxldHRlclRUQSwgbGV0
dGVyVEEsIGxldHRlclRBLCBsZXR0ZXJUQSwgCisgICAgICAgIGxldHRlclBBLCBsZXR0ZXJQQSwg
bGV0dGVyUEEsIGxldHRlclBBLCBsZXR0ZXJZQSwgdm93ZWxzbkUsIHZvd2Vsc25PIH07CisKKyAg
ICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmFudXN2YXJhIC0gVHJhbnNjb2Rlcjo6YmFzZUlu
ZGV4XSA9IFN0cmluZyhvdXQgKyAwLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6
OnZpc2FyZ2EgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDEsIDEpOwor
ICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6cHVsbGkgLSBUcmFuc2NvZGVyOjpiYXNlSW5k
ZXhdID0gU3RyaW5nKG91dCArIDIsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6
Y2hpbGx1IC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAzLCAyKTsKKyAg
ICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OnN5bGxicmVhayAtIFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgNSwgMik7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVy
OjphdmFncmFoYSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNywgMSk7
CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjp1ZEF0dGEgLSBUcmFuc2NvZGVyOjpiYXNl
SW5kZXhdID0gU3RyaW5nKG91dCArIDgsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rl
cjo6YW51ZEF0dGEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDksIDEp
OworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6c3Zhcml0YSAtIFRyYW5zY29kZXI6OmJh
c2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMTAsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNj
b2Rlcjo6ZGFuZGEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDExLCAx
KTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmRkYW5kYSAtIFRyYW5zY29kZXI6OmJh
c2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMTIsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNj
b2Rlcjo6YWJicmV2IC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAxMywg
MSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpvbSAtIFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgMTQsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rl
cjo6ZGlnaXRaRVJPIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAxNSwg
MSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpkaWdpdE9ORSAtIFRyYW5zY29kZXI6
OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMTYsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJh
bnNjb2Rlcjo6ZGlnaXRUV08gLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCAr
IDE3LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmRpZ2l0VEhSRUUgLSBUcmFu
c2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDE4LCAxKTsKKyAgICBtX2xvb2t1cFRh
YmxlW1RyYW5zY29kZXI6OmRpZ2l0Rk9VUiAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJp
bmcob3V0ICsgMTksIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6ZGlnaXRGSVZF
IC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAyMCwgMSk7CisgICAgbV9s
b29rdXBUYWJsZVtUcmFuc2NvZGVyOjpkaWdpdFNJWCAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0g
PSBTdHJpbmcob3V0ICsgMjEsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6ZGln
aXRTRVZFTiAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMjIsIDEpOwor
ICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6ZGlnaXRFSUdIVCAtIFRyYW5zY29kZXI6OmJh
c2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMjMsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNj
b2Rlcjo6ZGlnaXROSU5FIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAy
NCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpkaWdpdFRFTiAtIFRyYW5zY29k
ZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMjUsIDEpOworICAgIG1fbG9va3VwVGFibGVb
VHJhbnNjb2Rlcjo6ZGlnaXRIVU5EUkVEIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmlu
ZyhvdXQgKyAyNiwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpkaWdpdFRIT1VT
QU5EIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAyNywgMSk7CisgICAg
bV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjp2b3dlbEEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhd
ID0gU3RyaW5nKG91dCArIDI4LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OnZv
d2VsQUEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDI5LCAxKTsKKyAg
ICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OnZvd2VsSSAtIFRyYW5zY29kZXI6OmJhc2VJbmRl
eF0gPSBTdHJpbmcob3V0ICsgMzAsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6
dm93ZWxJSSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMzEsIDEpOwor
ICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6dm93ZWxVIC0gVHJhbnNjb2Rlcjo6YmFzZUlu
ZGV4XSA9IFN0cmluZyhvdXQgKyAzMiwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVy
Ojp2b3dlbFVVIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAzMywgMSk7
CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjp2b3dlbEUgLSBUcmFuc2NvZGVyOjpiYXNl
SW5kZXhdID0gU3RyaW5nKG91dCArIDM0LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29k
ZXI6OnZvd2VsRUUgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDM1LCAx
KTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OnZvd2VsQUkgLSBUcmFuc2NvZGVyOjpi
YXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDM2LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5z
Y29kZXI6OnZvd2VsTyAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMzcs
IDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6dm93ZWxPTyAtIFRyYW5zY29kZXI6
OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMzgsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJh
bnNjb2Rlcjo6dm93ZWxBVSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsg
MzksIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6Y29uc250S0EgLSBUcmFuc2Nv
ZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDQwLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxl
W1RyYW5zY29kZXI6OmNvbnNudE5HQSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmco
b3V0ICsgNDEsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6Y29uc250Q0EgLSBU
cmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDQyLCAxKTsKKyAgICBtX2xvb2t1
cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNudEpBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0
cmluZyhvdXQgKyA0MywgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRO
WUEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDQ0LCAxKTsKKyAgICBt
X2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNudFRUQSAtIFRyYW5zY29kZXI6OmJhc2VJbmRl
eF0gPSBTdHJpbmcob3V0ICsgNDUsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6
Y29uc250Tk5BIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA0NiwgMSk7
CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRUQSAtIFRyYW5zY29kZXI6OmJh
c2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNDcsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNj
b2Rlcjo6Y29uc250TkEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDQ4
LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNudE5OTkEgLSBUcmFuc2Nv
ZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDQ5LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxl
W1RyYW5zY29kZXI6OmNvbnNudFBBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhv
dXQgKyA1MCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRNQSAtIFRy
YW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNTEsIDEpOworICAgIG1fbG9va3Vw
VGFibGVbVHJhbnNjb2Rlcjo6Y29uc250WUEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3Ry
aW5nKG91dCArIDUyLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNudFJB
IC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA1MywgMSk7CisgICAgbV9s
b29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRMQSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0g
PSBTdHJpbmcob3V0ICsgNTQsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6Y29u
c250VkEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDU1LCAxKTsKKyAg
ICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNudFNIQSAtIFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgNTYsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rl
cjo6Y29uc250U1NBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA1Nywg
MSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRTQSAtIFRyYW5zY29kZXI6
OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNTgsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJh
bnNjb2Rlcjo6Y29uc250SEEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCAr
IDU5LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNudExMQSAtIFRyYW5z
Y29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNjAsIDEpOworICAgIG1fbG9va3VwVGFi
bGVbVHJhbnNjb2Rlcjo6Y29uc250WkhBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmlu
ZyhvdXQgKyA2MSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRSUkEg
LSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDYyLCAxKTsKKyAgICBtX2xv
b2t1cFRhYmxlW1RyYW5zY29kZXI6OnZvd2Vsc25BQSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0g
PSBTdHJpbmcob3V0ICsgNjMsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6dm93
ZWxzbkkgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDY0LCAxKTsKKyAg
ICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OnZvd2Vsc25JSSAtIFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgNjUsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rl
cjo6dm93ZWxzblUgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDY2LCAx
KTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OnZvd2Vsc25VVSAtIFRyYW5zY29kZXI6
OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNjcsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJh
bnNjb2Rlcjo6dm93ZWxzbkUgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCAr
IDY4LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OnZvd2Vsc25FRSAtIFRyYW5z
Y29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNjksIDEpOworICAgIG1fbG9va3VwVGFi
bGVbVHJhbnNjb2Rlcjo6dm93ZWxzbkFJIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmlu
ZyhvdXQgKyA3MCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjp2b3dlbHNuTyAt
IFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNzEsIDEpOworICAgIG1fbG9v
a3VwVGFibGVbVHJhbnNjb2Rlcjo6dm93ZWxzbk9PIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9
IFN0cmluZyhvdXQgKyA3MiwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjp2b3dl
bHNuQVUgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDczLCAxKTsKKyAg
ICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OnZvd2Vsc25BVUxFTiAtIFRyYW5zY29kZXI6OmJh
c2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNzQsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNj
b2Rlcjo6c2lnbkRBWSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNzUs
IDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6c2lnbk1PTlRIIC0gVHJhbnNjb2Rl
cjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA3NiwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtU
cmFuc2NvZGVyOjpzaWduWUVBUiAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0
ICsgNzcsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6c2lnbkRFQklUIC0gVHJh
bnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA3OCwgMSk7CisgICAgbV9sb29rdXBU
YWJsZVtUcmFuc2NvZGVyOjpzaWduQ1JFRElUIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0
cmluZyhvdXQgKyA3OSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpzaWduQVNB
Qk9WRSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgODAsIDEpOworICAg
IG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6c2lnblJVUEVFIC0gVHJhbnNjb2Rlcjo6YmFzZUlu
ZGV4XSA9IFN0cmluZyhvdXQgKyA4MSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVy
OjpzaWduTlVNQkVSIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA4Miwg
MSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjp2b3dlbFNIVEEgLSBUcmFuc2NvZGVy
OjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDgzLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1Ry
YW5zY29kZXI6OnZvd2VsQ0RSRSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0
ICsgODQsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6dm93ZWxDRFJPIC0gVHJh
bnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA4NSwgMSk7CisgICAgbV9sb29rdXBU
YWJsZVtUcmFuc2NvZGVyOjpjb25zbnRRQSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJp
bmcob3V0ICsgODYsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6Y29uc250S0hB
IC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA4NywgMSk7CisgICAgbV9s
b29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRLSEhBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4
XSA9IFN0cmluZyhvdXQgKyA4OCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpj
b25zbnRHQSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgODksIDEpOwor
ICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6Y29uc250R0hBIC0gVHJhbnNjb2Rlcjo6YmFz
ZUluZGV4XSA9IFN0cmluZyhvdXQgKyA5MCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2Nv
ZGVyOjpjb25zbnRHSEhBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA5
MSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRDSEEgLSBUcmFuc2Nv
ZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDkyLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxl
W1RyYW5zY29kZXI6OmNvbnNudFpBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhv
dXQgKyA5MywgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRKSEEgLSBU
cmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDk0LCAxKTsKKyAgICBtX2xvb2t1
cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNudFRUSEEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0g
U3RyaW5nKG91dCArIDk1LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNu
dEREQSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgOTYsIDEpOworICAg
IG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6Y29uc250RERIQSAtIFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgOTcsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rl
cjo6Y29uc250RERESEEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDk4
LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNudFJIQSAtIFRyYW5zY29k
ZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgOTksIDEpOworICAgIG1fbG9va3VwVGFibGVb
VHJhbnNjb2Rlcjo6Y29uc250VEhBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhv
dXQgKyAxMDAsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6Y29uc250REEgLSBU
cmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDEwMSwgMSk7CisgICAgbV9sb29r
dXBUYWJsZVtUcmFuc2NvZGVyOjpjb25zbnRESEEgLSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0g
U3RyaW5nKG91dCArIDEwMiwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtUcmFuc2NvZGVyOjpjb25z
bnRGQSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMTAzLCAxKTsKKyAg
ICBtX2xvb2t1cFRhYmxlW1RyYW5zY29kZXI6OmNvbnNudFBIQSAtIFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgMTA0LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW1RyYW5zY29k
ZXI6OmNvbnNudEJBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAxMDUs
IDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6Y29uc250QkhBIC0gVHJhbnNjb2Rl
cjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAxMDYsIDEpOworICAgIG1fbG9va3VwVGFibGVb
VHJhbnNjb2Rlcjo6Y29uc250WVlBIC0gVHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhv
dXQgKyAxMDcsIDEpOworICAgIG1fbG9va3VwVGFibGVbVHJhbnNjb2Rlcjo6dm93ZWxzbkNEUkUg
LSBUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDEwOCwgMSk7CisgICAgbV9s
b29rdXBUYWJsZVtUcmFuc2NvZGVyOjp2b3dlbHNuQ0RSTyAtIFRyYW5zY29kZXI6OmJhc2VJbmRl
eF0gPSBTdHJpbmcob3V0ICsgMTA5LCAxKTsKKworfQorCitTdHJpbmcgVGFtaWxDb252ZXJ0ZXI6
OnRyYW5zY29kZShVQ2hhciBjb2RlKQoreworICAgIGlmIChjb2RlIDwgVHJhbnNjb2Rlcjo6YmFz
ZUluZGV4KSB7CisgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gIiI7CisgICAgICAgcmVzcG9uc2Uu
YXBwZW5kKGNvZGUpOworICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisgICAgcmV0dXJu
IG1fbG9va3VwVGFibGVbY29kZSAtIFRyYW5zY29kZXI6OmJhc2VJbmRleF07Cit9CisKKworfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUv
cmVuZGVyaW5nL3RyYW5zY29kZXIvVGFtaWxDb252ZXJ0ZXIuY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rl
ci9UYW1pbENvbnZlcnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5z
Y29kZXIvVGFtaWxDb252ZXJ0ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L3RyYW5zY29kZXIvVGFtaWxDb252ZXJ0ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFRhbWlsQ29udmVydGVyX2gKKyNkZWZpbmUgVGFtaWxDb252
ZXJ0ZXJfaAorCisjaW5jbHVkZSAiQ29udmVydGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUYW1pbENvbnZlcnRlciA6IHB1
YmxpYyBDb252ZXJ0ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBVQ2hhciBhbnVzdmFy
YSA9IDB4MEI4MjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmlzYXJnYSA9IDB4MEI4MzsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyQSA9IDB4MEI4NTsKKyAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgbGV0dGVyQUEgPSAweDBCODY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlckkg
PSAweDBCODc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlcklJID0gMHgwQjg4OworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJVID0gMHgwQjg5OworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBsZXR0ZXJVVSA9IDB4MEI4QTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyRSA9
IDB4MEI4RTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyRUUgPSAweDBCOEY7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGxldHRlckFJID0gMHgwQjkwOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBsZXR0ZXJPID0gMHgwQjkyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJPTyA9
IDB4MEI5MzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyQVUgPSAweDBCOTQ7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGxldHRlcktBID0gMHgwQjk1OworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBsZXR0ZXJOR0EgPSAweDBCOTk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlckNB
ID0gMHgwQjlBOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJKQSA9IDB4MEI5QzsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyTllBID0gMHgwQjlFOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBsZXR0ZXJUVEEgPSAweDBCOUY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRl
ck5OQSA9IDB4MEJBMzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyVEEgPSAweDBCQTQ7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlck5BID0gMHgwQkE4OworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBsZXR0ZXJOTk5BID0gMHgwQkE5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBs
ZXR0ZXJQQSA9IDB4MEJBQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyTUEgPSAweDBC
QUU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlcllBID0gMHgwQkFGOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBsZXR0ZXJSQSA9IDB4MEJCMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
bGV0dGVyUlJBID0gMHgwQkIxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJMQSA9IDB4
MEJCMjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyTExBID0gMHgwQkIzOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJaSEEgPSAweDBCQjQ7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIGxldHRlclZBID0gMHgwQkI1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJTSEEg
PSAweDBCQjY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlclNTQSA9IDB4MEJCNzsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyU0EgPSAweDBCQjg7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGxldHRlckhBID0gMHgwQkI5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNu
QUEgPSAweDBCQkU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25JID0gMHgwQkJGOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuSUkgPSAweDBCQzA7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIHZvd2Vsc25VID0gMHgwQkMxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dl
bHNuVVUgPSAweDBCQzI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25FID0gMHgwQkM2
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuRUUgPSAweDBCQzc7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIHZvd2Vsc25BSSA9IDB4MEJDODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dm93ZWxzbk8gPSAweDBCQ0E7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25PTyA9IDB4
MEJDQjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbkFVID0gMHgwQkNDOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBtaXNjVklSQU1BID0gMHgwQkNEOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBtaXNjQVVMRU4gPSAweDBCRDc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0WkVS
TyA9IDB4MEJFNjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRPTkUgPSAweDBCRTc7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0VFdPID0gMHgwQkU4OworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBkaWdpdFRIUkVFID0gMHgwQkU5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdp
dEZPVVIgPSAweDBCRUE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0RklWRSA9IDB4MEJF
QjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRTSVggPSAweDBCRUM7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGRpZ2l0U0VWRU4gPSAweDBCRUQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGRpZ2l0RUlHSFQgPSAweDBCRUU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0TklORSA9
IDB4MEJFRjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRURU4gPSAweDBCRjA7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0SFVORFJFRCA9IDB4MEJGMTsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgZGlnaXRUSE9VU0FORCA9IDB4MEJGMjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
c2lnbkRBWSA9IDB4MEJGMzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgc2lnbk1PTlRIID0gMHgw
QkY0OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzaWduWUVBUiA9IDB4MEJGNTsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgc2lnbkRFQklUID0gMHgwQkY2OworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBzaWduQ1JFRElUID0gMHgwQkY3OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzaWduQVNBQk9W
RSA9IDB4MEJGODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgc2lnblJVUEVFID0gMHgwQkY5Owor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzaWduTlVNQkVSID0gMHgwQkZBOworCisgICAgVGFtaWxD
b252ZXJ0ZXIoKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0cmFuc2NvZGUoVUNoYXIpOworCitwcml2
YXRlOgorICAgIFN0cmluZyBtX2xvb2t1cFRhYmxlWzM2MV07Cit9OworfQorCisjZW5kaWYKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvVGFtaWxDb252
ZXJ0ZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvVHJhbnNjb2Rlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9UcmFuc2NvZGVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvVHJhbnNjb2Rlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVHJhbnNjb2Rlci5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2Ug
V2ViQ29yZQoreworCitjb25zdCBTeWxsYWJsZVR5cGUgVHJhbnNjb2Rlcjo6dHlwZVtdID0geyBU
eXBlQWNjdU1vZCwgVHlwZUFjY3VNb2QsIFR5cGVVbmtub3duLCBUeXBlVW5rbm93bgorICAgICwg
VHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVV
bmtub3duLCBUeXBlVW5rbm93bgorICAgICwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBl
VW5rbm93biwgVHlwZUhhbGx1TW9kLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24KKyAgICAsIFR5
cGVEaWdpdCwgVHlwZURpZ2l0LCBUeXBlRGlnaXQsIFR5cGVEaWdpdCwgVHlwZURpZ2l0LCBUeXBl
RGlnaXQsIFR5cGVEaWdpdAorICAgICwgVHlwZURpZ2l0LCBUeXBlRGlnaXQsIFR5cGVEaWdpdCwg
VHlwZUd1bmludGFtLCBUeXBlR3VuaW50YW0sIFR5cGVHdW5pbnRhbSwgVHlwZUd1bmludGFtCisg
ICAgLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVBY2N1LCBUeXBlQWNjdSwgVHlwZUFj
Y3UsIFR5cGVBY2N1LCBUeXBlQWNjdSwgVHlwZUFjY3UKKyAgICAsIFR5cGVBY2N1LCBUeXBlQWNj
dSwgVHlwZUFjY3UsIFR5cGVBY2N1LCBUeXBlQWNjdSwgVHlwZUFjY3UsIFR5cGVBY2N1LCBUeXBl
QWNjdQorICAgICwgVHlwZUFjY3UsIFR5cGVBY2N1LCBUeXBlQWNjdSwgVHlwZUFjY3UsIFR5cGVB
Y2N1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1CisgICAgLCBUeXBlSGFsbHUsIFR5
cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBl
SGFsbHUKKyAgICAsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwg
VHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdQorICAgICwgVHlwZUhhbGx1LCBUeXBlSGFs
bHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1
CisgICAgLCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVI
YWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUKKyAgICAsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBU
eXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdQorICAg
ICwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUs
IFR5cGVIYWxsdSwgVHlwZUhhbGx1CisgICAgLCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhh
bGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUKKyAgICAsIFR5
cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3du
LCBUeXBlVW5rbm93biwgVHlwZVVua25vd24KKyAgICAsIFR5cGVVbmtub3duLCBUeXBlVW5rbm93
biwgVHlwZURpZ2l0LCBUeXBlRGlnaXQsIFR5cGVEaWdpdCwgVHlwZVVua25vd24sIFR5cGVVbmtu
b3duCisgICAgLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5r
bm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duCisgICAgLCBUeXBlSGFsbHVNb2QsIFR5cGVI
YWxsdU1vZCwgVHlwZUFjY3VNb2QsIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25v
d24KKyAgICAsIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtu
b3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24KKyAgICAsIFR5cGVVbmtub3duLCBUeXBlVW5r
bm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24K
KyAgICAsIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3du
LCBUeXBlVW5rbm93biwgVHlwZVVua25vd24KKyAgICAsIFR5cGVVbmtub3duLCBUeXBlVW5rbm93
biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24KKyAg
ICAsIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBU
eXBlVW5rbm93biwgVHlwZVVua25vd24KKyAgICAsIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwg
VHlwZVVua25vd24sIFR5cGVHdW5pbnRhbSwgVHlwZUd1bmludGFtLCBUeXBlR3VuaW50YW0KKyAg
ICAsIFR5cGVHdW5pbnRhbSwgVHlwZUd1bmludGFtLCBUeXBlR3VuaW50YW0sIFR5cGVHdW5pbnRh
bSwgVHlwZUd1bmludGFtLCBUeXBlR3VuaW50YW0KKyAgICAsIFR5cGVHdW5pbnRhbSwgVHlwZUd1
bmludGFtLCBUeXBlR3VuaW50YW0sIFR5cGVHdW5pbnRhbSwgVHlwZUd1bmludGFtLCBUeXBlR3Vu
aW50YW0KKyAgICAsIFR5cGVHdW5pbnRhbSwgVHlwZUd1bmludGFtLCBUeXBlVmF0dHUsIFR5cGVI
YWxsdSwgVHlwZVZhdHR1LCBUeXBlSGFsbHUsIFR5cGVWYXR0dQorICAgICwgVHlwZVZhdHR1LCBU
eXBlSGFsbHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlw
ZUhhbGx1CisgICAgLCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUs
IFR5cGVWYXR0dSwgVHlwZUhhbGx1LCBUeXBlVmF0dHUKKyAgICAsIFR5cGVIYWxsdSwgVHlwZVZh
dHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0
dQorICAgICwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVIYWxsdSwgVHlwZVZhdHR1LCBUeXBl
VmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1CisgICAgLCBUeXBlVmF0dHUsIFR5cGVIYWxsdSwg
VHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUKKyAg
ICAsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1
LCBUeXBlVmF0dHUsIFR5cGVWYXR0dQorICAgICwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVW
YXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1CisgICAgLCBU
eXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVu
a25vd24sIFR5cGVVbmtub3duCisgICAgLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVV
bmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duCisgICAgLCBUeXBl
VW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25v
d24sIFR5cGVVbmtub3duCisgICAgLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtu
b3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duCisgICAgLCBUeXBlVW5r
bm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24s
IFR5cGVVbmtub3duCisgICAgLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3du
LCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duCisgICAgLCBUeXBlVW5rbm93
biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5
cGVVbmtub3duCisgICAgLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBU
eXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duCisgICAgLCBUeXBlVW5rbm93biwg
VHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVV
bmtub3duCisgICAgLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBl
VW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duCisgICAgLCBUeXBlVW5rbm93biwgVHlw
ZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtu
b3duCisgICAgLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5r
bm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duCisgICAgLCBUeXBlVW5rbm93biwgVHlwZVVu
a25vd24sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxm
Rm9ybQorICAgICwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlw
ZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybQorICAgICwgVHlwZUhhbGZGb3Jt
LCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0s
IFR5cGVIYWxmRm9ybQorICAgICwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxm
Rm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybQorICAgICwgVHlw
ZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBl
SGFsZkZvcm0sIFR5cGVIYWxmRm9ybQorICAgICwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0s
IFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybQor
ICAgICwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZG
b3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybQorICAgICwgVHlwZUhhbGZGb3JtLCBUeXBl
SGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVI
YWxmRm9ybQorICAgICwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwg
VHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybQorICAgICwgVHlwZUhhbGZG
b3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVVbmtub3duIH07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rl
ci9UcmFuc2NvZGVyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvVHJhbnNjb2Rlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5zY29kZXIvVHJhbnNjb2Rlci5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9UcmFuc2NvZGVyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUcmFuc2NvZGVyX2gK
KyNkZWZpbmUgVHJhbnNjb2Rlcl9oCisKKyNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJT
eWxsYWJsZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgVHJhbnNjb2RlciB7Citwcml2YXRlOgorICAgIFRyYW5zY29kZXIoKSB7
fQorcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBpbnQgYmFzZUluZGV4ID0gMHhFQzAwOworICAg
IHN0YXRpYyBjb25zdCBpbnQgYmFzZVN0YXJ0ID0gMHhFQzIyOworICAgIHN0YXRpYyBjb25zdCBp
bnQgYmFzZUVuZCAgID0gMHhFQzY4OworICAgIHN0YXRpYyBjb25zdCBpbnQgZGVwZW5kZW50U3Rh
cnQgPSAweEVDQTI7CisgICAgc3RhdGljIGNvbnN0IGludCBkZXBlbmRlbnRFbmQgICA9IDB4RUNF
ODsKKyAgICBzdGF0aWMgY29uc3QgaW50IGhhbGZTdGFydCA9IDB4RUQzMzsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IGhhbGZFbmQgICA9IDB4RUQ2ODsKKyAgICBzdGF0aWMgY29uc3QgaW50IHZhdHR1
U3RhcnQgPSAweEVDQjM7CisgICAgc3RhdGljIGNvbnN0IGludCB2YXR0dUVuZCAgID0gMHhFQ0U4
OworCisgICAgLy8gQ29uc3RhbnRzIGRlZmluaXRpb25zCisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGFudXN2YXJhID0gMHhFQzAwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2aXNhcmdhID0gMHhF
QzAxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBwb2xsdSA9IDB4RUMwMjsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgY2hpbGx1ID0gMHhFQzBEOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzeWxs
YnJlYWsgPSAweEVDN0I7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIG51a3RhID0gMHhFQzdDOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBhcmRoYXZpc2FyZ2EgPSAweEVDN0Q7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIHRpcHBpID0gMHhFQzdFOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBhZGRh
ayA9IDB4RUM3RjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZWtvbmthciA9IDB4RUM4MDsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgdmlyYW1hID0gMHhFQzAyOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBjaGFuZHJha2thbGEgPSAweEVDMDI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHB1bGxp
ID0gMHhFQzAyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxhbnQgPSAweEVDMDI7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGhhc2FudCA9IDB4RUMwMjsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgY2FuZHJhYmluZHUgPSAweEVDMDM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGF2YWdyYWhh
ID0gMHhFQzA0OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB5YXRpID0gMHhFQzA1OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciB1ZEF0dGEgPSAweEVDMDY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGFudWRBdHRhID0gMHhFQzA3OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzdmFyaXRhID0gMHhF
QzA4OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBndXJ1ID0gMHhFQzA5OworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBsYWdodSA9IDB4RUMwQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGFuZGEg
PSAweEVDMEI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRkYW5kYSA9IDB4RUMwQzsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgYWJicmV2ID0gMHhFQzBFOworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBvbSA9IDB4RUMwRjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRaRVJPID0gMHhFQzEw
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdE9ORSA9IDB4RUMxMTsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgZGlnaXRUV08gPSAweEVDMTI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRp
Z2l0VEhSRUUgPSAweEVDMTM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0Rk9VUiA9IDB4
RUMxNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRGSVZFID0gMHhFQzE1OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBkaWdpdFNJWCA9IDB4RUMxNjsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgZGlnaXRTRVZFTiA9IDB4RUMxNzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRFSUdI
VCA9IDB4RUMxODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXROSU5FID0gMHhFQzE5Owor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbEEgPSAweEVDMjA7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIHZvd2VsU0hUQSA9IDB4RUMyMTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxB
QSA9IDB4RUMyMjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxJID0gMHhFQzIzOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbElJID0gMHhFQzI0OworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciB2b3dlbFUgPSAweEVDMjU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsVVUgPSAw
eEVDMjY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsUiA9IDB4RUMyNzsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgdm93ZWxSUiA9IDB4RUMyODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dm93ZWxMID0gMHhFQzI5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbExMID0gMHhFQzJB
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbENEUkUgPSAweEVDMkI7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIHZvd2VsRSA9IDB4RUMyQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93
ZWxFRSA9IDB4RUMyRDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxBSSA9IDB4RUMyRTsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxDRFJPID0gMHhFQzJGOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciB2b3dlbE8gPSAweEVDMzA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vs
T08gPSAweEVDMzE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsQVUgPSAweEVDMzI7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudEtBID0gMHhFQzMzOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBjb25zbnRRQSA9IDB4RUMzNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250
S0hBID0gMHhFQzM1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRLSEhBID0gMHhFQzM2
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRHQSA9IDB4RUMzNzsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgY29uc250R0hBID0gMHhFQzM4OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBj
b25zbnRHSEhBID0gMHhFQzM5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnROR0EgPSAw
eEVDM0E7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudENBID0gMHhFQzNCOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBjb25zbnRDSEEgPSAweEVDM0M7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIGNvbnNudEpBID0gMHhFQzNEOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRaQSA9
IDB4RUMzRTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250SkhBID0gMHhFQzNGOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnROWUEgPSAweEVDNDA7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGNvbnNudFRUQSA9IDB4RUM0MTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250
VFRIQSA9IDB4RUM0MjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250RERBID0gMHhFQzQz
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRERERIQSA9IDB4RUM0NDsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgY29uc250RERIQSA9IDB4RUM0NTsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgY29uc250UkhBID0gMHhFQzQ2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnROTkEg
PSAweEVDNDc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudFRBID0gMHhFQzQ4OworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRUSEEgPSAweEVDNDk7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGNvbnNudERBID0gMHhFQzRBOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRE
SEEgPSAweEVDNEI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudE5BID0gMHhFQzRDOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnROTk5BID0gMHhFQzREOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBjb25zbnRQQSA9IDB4RUM0RTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29u
c250RkEgPSAweEVDNEY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudFBIQSA9IDB4RUM1
MDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250QkEgPSAweEVDNTE7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGNvbnNudEJIQSA9IDB4RUM1MjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
Y29uc250TUEgPSAweEVDNTM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudFlBID0gMHhF
QzU0OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRZWUEgPSAweEVDNTU7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIGNvbnNudFJBID0gMHhFQzU2OworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBjb25zbnRSUkEgPSAweEVDNTc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudExBID0g
MHhFQzU4OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRMTEEgPSAweEVDNTk7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudFpIQSA9IDB4RUM1QTsKKyAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgY29uc250VkEgPSAweEVDNUI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudFNI
QSA9IDB4RUM1QzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250U1NBID0gMHhFQzVEOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRTQSA9IDB4RUM1RTsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgY29uc250SEEgPSAweEVDNUY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNu
dFRTQSA9IDB4RUM2MDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250REpBID0gMHhFQzYx
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRHR0EgPSAweEVDNjI7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGNvbnNudEpKQSA9IDB4RUM2MzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
Y29uc250REREQSA9IDB4RUM2NDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250QkJBID0g
MHhFQzY1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRSQU1EID0gMHhFQzY2OworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRSQUxEID0gMHhFQzY3OworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBjb25zbnRLSEFOREFUQSA9IDB4RUM2ODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dm93ZWxzbkFBID0gMHhFQ0EyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuSSA9IDB4
RUNBMzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbklJID0gMHhFQ0E0OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuVSA9IDB4RUNBNTsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgdm93ZWxzblVVID0gMHhFQ0E2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuUiA9
IDB4RUNBNzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzblJSID0gMHhFQ0E4OworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuTCA9IDB4RUNBOTsKKyAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgdm93ZWxzbkxMID0gMHhFQ0FBOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNu
Q0RSRSA9IDB4RUNBQjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbkUgPSAweEVDQUM7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25FRSA9IDB4RUNBRDsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgdm93ZWxzbkFJID0gMHhFQ0FFOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2
b3dlbHNuQ0RSTyA9IDB4RUNBRjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbk8gPSAw
eEVDQjA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25PTyA9IDB4RUNCMTsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbkFVID0gMHhFQ0IyOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciB2b3dlbHNuRUVMRU4gPSAweEVDMUE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vs
c25BSUxFTiA9IDB4RUMxQjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbkFVTEVOID0g
MHhFQzFDOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuSUlMRU4gPSAweEVDMUQ7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1S0EgPSAweEVDQjM7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIHZhdHR1UUEgPSAweEVDQjQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1S0hB
ID0gMHhFQ0I1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dUtISEEgPSAweEVDQjY7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1R0EgPSAweEVDQjc7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIHZhdHR1R0hBID0gMHhFQ0I4OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dUdI
SEEgPSAweEVDQjk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1TkdBID0gMHhFQ0JBOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dUNBID0gMHhFQ0JCOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciB2YXR0dUNIQSA9IDB4RUNCQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVK
QSA9IDB4RUNCRDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVaQSA9IDB4RUNCRTsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVKSEEgPSAweEVDQkY7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIHZhdHR1TllBID0gMHhFQ0MwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVRU
QSA9IDB4RUNDMTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVUVEhBID0gMHhFQ0MyOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dUREQSA9IDB4RUNDMzsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgdmF0dHVERERIQSA9IDB4RUNDNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0
dHVEREhBID0gMHhFQ0M1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVJIQSA9IDB4RUND
NjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVOTkEgPSAweEVDQzc7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIHZhdHR1VEEgPSAweEVDQzg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZh
dHR1VEhBID0gMHhFQ0M5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dURBID0gMHhFQ0NB
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dURIQSA9IDB4RUNDQjsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgdmF0dHVOQSA9IDB4RUNDQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0
dHVOTk5BID0gMHhFQ0NEOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVBBID0gMHhFQ0NF
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dUZBID0gMHhFQ0NGOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciB2YXR0dVBIQSA9IDB4RUNEMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0
dHVCQSA9IDB4RUNEMTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVCSEEgPSAweEVDRDI7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1TUEgPSAweEVDRDM7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIHZhdHR1WUEgPSAweEVDRDQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1
WVlBID0gMHhFQ0Q1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVJBID0gMHhFQ0Q2Owor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVJSQSA9IDB4RUNENzsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgdmF0dHVMQSA9IDB4RUNEODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVM
TEEgPSAweEVDRDk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1WkhBID0gMHhFQ0RBOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVZBID0gMHhFQ0RCOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciB2YXR0dVNIQSA9IDB4RUNEQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVT
U0EgPSAweEVDREQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1U0EgPSAweEVDREU7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1SEEgPSAweEVDREY7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIHZhdHR1VFNBID0gMHhFQ0UwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dURK
QSA9IDB4RUNFMTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVHR0EgPSAweEVDRTI7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1SkpBID0gMHhFQ0UzOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciB2YXR0dUREREEgPSAweEVDRTQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1
QkJBID0gMHhFQ0U1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVJBTUQgPSAweEVDRTY7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1UkFMRCA9IDB4RUNFNzsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgdmF0dHVLSEFOREFUQSA9IDB4RUNFODsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgaGFsZmZtS0EgPSAweEVEMzM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbVFBID0g
MHhFRDM0OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1LSEEgPSAweEVEMzU7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbUtISEEgPSAweEVEMzY7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGhhbGZmbUdBID0gMHhFRDM3OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1H
SEEgPSAweEVEMzg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbUdISEEgPSAweEVEMzk7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbU5HQSA9IDB4RUQzQTsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgaGFsZmZtQ0EgPSAweEVEM0I7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhh
bGZmbUNIQSA9IDB4RUQzQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtSkEgPSAweEVE
M0Q7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbVpBID0gMHhFRDNFOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBoYWxmZm1KSEEgPSAweEVEM0Y7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGhhbGZmbU5ZQSA9IDB4RUQ0MDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtVFRBID0g
MHhFRDQxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1UVEhBID0gMHhFRDQyOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1EREEgPSAweEVENDM7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGhhbGZmbUREREhBID0gMHhFRDQ0OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxm
Zm1EREhBID0gMHhFRDQ1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1SSEEgPSAweEVE
NDY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbU5OQSA9IDB4RUQ0NzsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgaGFsZmZtVEEgPSAweEVENDg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGhhbGZmbVRIQSA9IDB4RUQ0OTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtREEgPSAw
eEVENEE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbURIQSA9IDB4RUQ0QjsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtTkEgPSAweEVENEM7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIGhhbGZmbU5OTkEgPSAweEVENEQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbVBB
ID0gMHhFRDRFOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1GQSA9IDB4RUQ0RjsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtUEhBID0gMHhFRDUwOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBoYWxmZm1CQSA9IDB4RUQ1MTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZt
QkhBID0gMHhFRDUyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1NQSA9IDB4RUQ1MzsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtWUEgPSAweEVENTQ7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIGhhbGZmbVlZQSA9IDB4RUQ1NTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFs
ZmZtUkEgPSAweEVENTY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbVJSQSA9IDB4RUQ1
NzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtTEEgPSAweEVENTg7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGhhbGZmbUxMQSA9IDB4RUQ1OTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
aGFsZmZtWkhBID0gMHhFRDVBOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1WQSA9IDB4
RUQ1QjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtU0hBID0gMHhFRDVDOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1TU0EgPSAweEVENUQ7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIGhhbGZmbVNBID0gMHhFRDVFOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1IQSA9
IDB4RUQ1RjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtVFNBID0gMHhFRDYwOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1ESkEgPSAweEVENjE7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGhhbGZmbUdHQSA9IDB4RUQ2MjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZt
SkpBID0gMHhFRDYzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1ERERBID0gMHhFRDY0
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1CQkEgPSAweEVENjU7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGhhbGZmbVJBTUQgPSAweEVENjY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGhhbGZmbVJBTEQgPSAweEVENjc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbUtIQU5E
QVRBID0gMHhFRDY4OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdFRFTiA9IDB4RUM3MDsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRIVU5EUkVEID0gMHhFQzcxOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBkaWdpdFRIT1VTQU5EID0gMHhFQzcyOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBzaWduREFZID0gMHhFQzczOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzaWduTU9OVEgg
PSAweEVDNzQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNpZ25ZRUFSID0gMHhFQzc1OworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBzaWduREVCSVQgPSAweEVDNzY7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIHNpZ25DUkVESVQgPSAweEVDNzc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNpZ25B
U0FCT1ZFID0gMHhFQzc4OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzaWduUlVQRUUgPSAweEVD
Nzk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNpZ25OVU1CRVIgPSAweEVDN0E7CisKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgVW5pQ29kZVNoYXJlZE5VS1RBICAgID0gMHgwOTNDOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBVbmlDb2RlU2hhcmVkQVZBR1JBSEEgPSAweDA5M0Q7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIFVuaUNvZGVTaGFyZWRPTSAgICAgICA9IDB4MDk1MDsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgVW5pQ29kZVNoYXJlZFVEQVRUQSAgID0gMHgwOTUxOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBVbmlDb2RlU2hhcmVkQU5VREFUVEEgPSAweDA5NTI7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIFVuaUNvZGVTaGFyZWRTVkFSSVRBICA9IDB4MDk1MTsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgVW5pQ29kZVNoYXJlZERBTkRBICAgID0gMHgwOTY0OworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBVbmlDb2RlU2hhcmVkRERBTkRBICAgPSAweDA5NjU7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIFVuaUNvZGVTaGFyZWRhYmJyZXYgICA9IDB4MDk3MDsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgVW5pQ29kZVNoYXJlZFpXTkogICAgID0gMHgyMDBDOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBVbmlDb2RlU2hhcmVkWldKICAgICAgPSAweDIwMEQ7CisKKyAgICBzdGF0aWMgY29u
c3QgU3lsbGFibGVUeXBlIHR5cGVbXTsgCisKK3N0YXRpYyBib29sIGlzVm93ZWwoVUNoYXIgY29k
ZSkKK3sKKyAgICByZXR1cm4gdHlwZVtjb2RlIC0gYmFzZUluZGV4XSA9PSBUeXBlQWNjdTsKK30K
Kworc3RhdGljIGJvb2wgaXNTcGVjaWFsKFVDaGFyIGNvZGUpCit7CisgICAgcmV0dXJuIHR5cGVb
Y29kZSAtIGJhc2VJbmRleF0gPT0gVHlwZVVua25vd247Cit9CisKK3N0YXRpYyBib29sIGlzQ29u
c29uYW50KFVDaGFyIGNvZGUpCit7CisgICAgcmV0dXJuIHR5cGVbY29kZSAtIGJhc2VJbmRleF0g
PT0gVHlwZUhhbGx1OworfQorCitzdGF0aWMgYm9vbCBpc0RpZ2l0KFVDaGFyIGNvZGUpCit7Cisg
ICAgcmV0dXJuIHR5cGVbY29kZSAtIGJhc2VJbmRleF0gPT0gVHlwZURpZ2l0OworfQorCitzdGF0
aWMgYm9vbCBpc0d1bmludGFtKFVDaGFyIGNvZGUpCit7CisgICAgcmV0dXJuIHR5cGVbY29kZSAt
IGJhc2VJbmRleF0gPT0gVHlwZUd1bmludGFtOworfQorCitzdGF0aWMgYm9vbCBpc1ZhdHR1KFVD
aGFyIGNvZGUpCit7CisgICAgcmV0dXJuIHR5cGVbY29kZSAtIGJhc2VJbmRleF0gPT0gVHlwZVZh
dHR1OworfQorCitzdGF0aWMgYm9vbCBpc0hhbGZGb3JtKFVDaGFyIGNvZGUpCit7CisgICAgcmV0
dXJuIHR5cGVbY29kZSAtIGJhc2VJbmRleF0gPT0gVHlwZUhhbGZGb3JtOworfQorCitzdGF0aWMg
U3lsbGFibGVUeXBlIGdldFR5cGUoVUNoYXIgY29kZSkKK3sKKyAgICByZXR1cm4gdHlwZVtjb2Rl
IC0gYmFzZUluZGV4XTsKK30KKworc3RhdGljIFN0cmluZyBmYXN0VmF0dHUoVUNoYXIgY29kZSkK
K3sKKyAgICBTdHJpbmcgcmVzcG9uc2UgPSAiIjsKKyAgICByZXNwb25zZS5hcHBlbmQoc3RhdGlj
X2Nhc3Q8VUNoYXI+KGNvZGUgKyAweDgwKSk7CisgICAgcmV0dXJuIHJlc3BvbnNlOworfQorCitz
dGF0aWMgU3RyaW5nIGZhc3RIYWxmRm9ybShVQ2hhciBjb2RlKQoreworICAgIFN0cmluZyByZXNw
b25zZSA9ICIiOworICAgIHJlc3BvbnNlLmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oY29kZSAr
IDB4MTAwKSk7CisgICAgcmV0dXJuIHJlc3BvbnNlOworfQorCitzdGF0aWMgU3RyaW5nIGJhc2VG
b3JtRnJvbVZhdHR1KFVDaGFyIGNvZGUpCit7CisgICAgU3RyaW5nIHJlc3BvbnNlID0gIiI7Cisg
ICAgcmVzcG9uc2UuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjb2RlIC0gMHg4MCkpOworICAg
IHJldHVybiByZXNwb25zZTsKK30KKworc3RhdGljIFN0cmluZyBiYXNlRm9ybUZyb21IYWxmRm9y
bShVQ2hhciBjb2RlKQoreworICAgIFN0cmluZyByZXNwb25zZSA9ICIiOworICAgIHJlc3BvbnNl
LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oY29kZSAtIDB4MTAwKSk7CisgICAgcmV0dXJuIHJl
c3BvbnNlOworfQorCitzdGF0aWMgU3RyaW5nIGRlcGVuZGVudEZvcm0oU3RyaW5nIGlucHV0KQor
eworICAgIFN0cmluZyByZXNwb25zZSA9ICIiOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5w
dXQubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBVQ2hhciBjb2RlID0gaW5wdXRbaV07CisgICAg
ICAgIGlmIChjb2RlID49IGJhc2VTdGFydCAmJiBjb2RlIDw9IGJhc2VFbmQpCisgICAgICAgICAg
ICByZXNwb25zZS5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGNvZGUgKyAweDgwKSk7CisgICAg
fQorICAgIHJldHVybiByZXNwb25zZTsKK30KKworc3RhdGljIFN0cmluZyBoYWxmRm9ybShTdHJp
bmcgaW5wdXQpIAoreworICAgIFN0cmluZyByZXNwb25zZSA9ICIiOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgaW5wdXQubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBVQ2hhciBjb2RlID0gaW5w
dXRbaV07CisgICAgICAgIGlmIChjb2RlID49IGJhc2VTdGFydCAmJiBjb2RlIDw9IGJhc2VFbmQp
CisgICAgICAgICAgICByZXNwb25zZS5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGNvZGUgKyAw
eDEwMCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzcG9uc2U7Cit9CisKK3N0YXRpYyBTdHJpbmcg
YmFzZUZvcm0oU3RyaW5nIGlucHV0KSAKK3sKKyAgICBTdHJpbmcgcmVzcG9uc2UgPSAiIjsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgVUNo
YXIgY29kZSA9IGlucHV0W2ldOworICAgICAgICBpZiAoY29kZSA+PSBkZXBlbmRlbnRTdGFydCAm
JiBjb2RlIDw9IGRlcGVuZGVudEVuZCkKKyAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChzdGF0
aWNfY2FzdDxVQ2hhcj4oY29kZSAtIDB4ODApKTsKKyAgICAgICAgaWYgKGNvZGUgPj0gaGFsZlN0
YXJ0ICYmIGNvZGUgPD0gaGFsZkVuZCkKKyAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChzdGF0
aWNfY2FzdDxVQ2hhcj4oY29kZSAtIDB4MTAwKSk7CisgICAgfQorICAgIHJldHVybiByZXNwb25z
ZTsKK30KKworCit9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29y
ZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9UcmFuc2NvZGVyLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2NvZGVyL1Ry
YW5zZm9ybWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy90cmFuc2NvZGVy
L1RyYW5zZm9ybWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3RyYW5z
Y29kZXIvVHJhbnNmb3JtZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRhbWlsQ29udmVydGVyLmgiCisj
aW5jbHVkZSAiVHJhbnNmb3JtZXIuaCIKKyNpbmNsdWRlICJEeW5hbWljUGFyc2VyLmgiCisjaW5j
bHVkZSAiVFNDSUlFbmNvZGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFj
ZSBXZWJDb3JlCit7CisKK1RyYW5zZm9ybWVyOjpUcmFuc2Zvcm1lcigpCit7CisgICAgbV9lbmNv
ZGVyc1swXSA9IG5ldyBUU0NJSUVuY29kZXIoKTsKKyAgICBtX2NvbnZlcnRlcnNbMF0gPSBuZXcg
VGFtaWxDb252ZXJ0ZXIoKTsKKworICAgIC8vIEFzc2lnbiBpbmRleCB0byBmb250cworICAgIG1f
ZW5jb2RlckluZGV4LnNldCgiSW5haU1hdGhpTmV3VFNDIiwwKTsKKworICAgIG1fY29udmVydGVy
SW5kZXguc2V0KCJJbmFpTWF0aGlOZXdUU0MiLDApOworCisgICAgbV90cmFuc2NvZGFibGVTaXRl
cy5hZGQoInd3dy5rYWxraXdlZWtseS5jb20iKTsKK30KKworVHJhbnNmb3JtZXI6On5UcmFuc2Zv
cm1lcigpCit7CisgICAgZGVsZXRlIG1fZW5jb2RlcnNbMF07CisgICAgZGVsZXRlIG1fY29udmVy
dGVyc1swXTsKK30KKworYm9vbCBUcmFuc2Zvcm1lcjo6aXNTdXBwb3J0ZWRGb250KFN0cmluZyBm
b250KSBjb25zdAoreworICAgIHJldHVybiBtX2VuY29kZXJJbmRleC5jb250YWlucyhmb250KTsK
K30KKworYm9vbCBUcmFuc2Zvcm1lcjo6aXNUcmFuc2NvZGFibGVTaXRlKFN0cmluZyBvcmlnaW4p
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNjb2RhYmxlU2l0ZXMuY29udGFpbnMob3JpZ2lu
KTsKK30KKworU3RyaW5nIFRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0oU3RyaW5nIHRleHQsIENvbnZl
cnRlciogY29udmVydGVyKQoreworICAgIFN0cmluZyBvdXRwdXQgPSAiIjsKKyAgICBmb3IgKGlu
dCBpID0gMDtpIDwgdGV4dC5sZW5ndGgoKTtpKyspIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9
IGNvbnZlcnRlci0+dHJhbnNjb2RlKHRleHRbaV0pOworICAgICAgICBpZiAoIXJlc3VsdC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBvdXRwdXQgKz0gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4g
b3V0cHV0OworfQorCitTdHJpbmcgVHJhbnNmb3JtZXI6OmNvbnZlcnQoU3RyaW5nIHRleHQsIFN0
cmluZyBmb250KQoreworICAgIGlmICghbV9lbmNvZGVySW5kZXguY29udGFpbnMoZm9udCkgfHwg
IW1fY29udmVydGVySW5kZXguY29udGFpbnMoZm9udCkpCisgICAgICAgIHJldHVybiB0ZXh0Owor
ICAgIGludCBlbmNvZGVySW5kZXggPSBtX2VuY29kZXJJbmRleC5nZXQoZm9udCk7CisgICAgaW50
IGNvbnZlcnRlckluZGV4ID0gbV9jb252ZXJ0ZXJJbmRleC5nZXQoZm9udCk7CisgICAgUGFyc2Vy
KiBwYXJzZXIgPSBuZXcgRHluYW1pY1BhcnNlcih0ZXh0LCBtX2VuY29kZXJzW2VuY29kZXJJbmRl
eF0pOworICAgIFN0cmluZyBvdXRwdXQgPSAiIjsKKyAgICB3aGlsZSAocGFyc2VyLT5tb3JlKCkp
IHsKKyAgICAgICAgb3V0cHV0ICs9IHRyYW5zZm9ybShwYXJzZXItPm5leHQoKSwgbV9jb252ZXJ0
ZXJzW2NvbnZlcnRlckluZGV4XSk7CisgICAgfQorICAgIGRlbGV0ZSBwYXJzZXI7CisgICAgcmV0
dXJuIG91dHB1dDsKK30KKworVHJhbnNmb3JtZXIqIHRyYW5zZm9ybWVyKCkKK3sKKyAgICBzdGF0
aWMgVHJhbnNmb3JtZXIqIHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybWVyKCk7CisgICAgcmV0
dXJuIHRyYW5zZm9ybWVyOworfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9UcmFuc2Zvcm1l
ci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy90cmFuc2NvZGVyL1RyYW5zZm9ybWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9UcmFuc2Zvcm1lci5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvdHJhbnNjb2Rlci9UcmFuc2Zvcm1lci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUcmFuc2Zvcm1lcl9oCisjZGVmaW5l
IFRyYW5zZm9ybWVyX2gKKworI2luY2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgIkVuY29kZXIu
aCIKKyNpbmNsdWRlICJDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVHJhbnNmb3JtZXIgeworcHVibGljOgorICAgIGZyaWVu
ZCBUcmFuc2Zvcm1lciogdHJhbnNmb3JtZXIoKTsKKworICAgIFN0cmluZyBjb252ZXJ0KFN0cmlu
ZyB0ZXh0LCBTdHJpbmcgZm9udCk7CisgICAgU3RyaW5nIHRyYW5zZm9ybShTdHJpbmcgdGV4dCwg
Q29udmVydGVyKiBjb252ZXJ0ZXIpOworICAgIGJvb2wgaXNTdXBwb3J0ZWRGb250KFN0cmluZyBm
b250KSBjb25zdDsKKyAgICBib29sIGlzVHJhbnNjb2RhYmxlU2l0ZShTdHJpbmcgb3JpZ2luKSBj
b25zdDsKK3ByaXZhdGU6CisgICAgVHJhbnNmb3JtZXIoKTsgLy8gU2luZ2xldG9uLCBwcml2YXRl
IGNvbnN0cnVjdG9yCisgICAgflRyYW5zZm9ybWVyKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIGlu
dD4gbV9lbmNvZGVySW5kZXg7CisgICAgSGFzaE1hcDxTdHJpbmcsIGludD4gbV9jb252ZXJ0ZXJJ
bmRleDsKKyAgICBDb252ZXJ0ZXIqIG1fY29udmVydGVyc1sxXTsKKyAgICBFbmNvZGVyKiBtX2Vu
Y29kZXJzWzFdOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3RyYW5zY29kYWJsZVNpdGVzOworfTsK
KworfQorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcmVuZGVyaW5nL3Ry
YW5zY29kZXIvVHJhbnNmb3JtZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAg
ICsgKgoKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NTQ1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOSBAQAorMjAwOS0wMS0wMiAgcHJ1bnRoYWJhbiAg
PHNldCBFTUFJTF9BRERSRVNTIGVudmlyb25tZW50IHZhcmlhYmxlPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9jc3MvZm9udC1mYWNlLXRy
YW5zY29kZXIuaHRtbDogQWRkZWQuCisKIDIwMDktMDEtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBvbmUgbW9yZSBTdHJpbmcucmVwbGFjZSB0ZXN0IGNh
c2UgdGhhdCBJIHNob3VsZCBoYXZlIGluY2x1ZGVkIGluIHRoYXQgbGFzdCBjaGVjay1pbi4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2ZvbnQtZmFjZS10cmFuc2NvZGVyLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvZm9udC1mYWNlLXRyYW5zY29kZXIuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2ZvbnQtZmFjZS10cmFuc2NvZGVy
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzxodG1sPgorPGhlYWQ+CisgICAg
PHN0eWxlPgorICAgICAgICBkaXYgeyBmb250LXNpemU6IDMwcHQ7IH0KKyAgICA8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHk+CisgICAgVGhlIHR3byBsaW5lcyBiZWxvdyBzaG91bGQgYmUgcmVuZGVy
ZWQgZGlmZmVyZW50bHkgKEZpcnN0IGxpbmUgaW4gVGFtaWwgdW5pY29kZSBhbmQgU2Vjb25kIGxp
bmUgaW4gQVNDSUkpCisgICAgPGhyIC8+CisgICAgPGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IElu
YWlNYXRoaU5ld1RTQzsiPgorICAgICAgICCswqLD8r6i+CC01cX9ICAgICAgICAKKyAgICA8L2Rp
dj4KKyAgICA8ZGl2PgorICAgICAgICCswqLD8r6i+CC01cX9ICAgICAgICAKKyAgICA8L2Rpdj4g
ICAgCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jc3MvZm9udC1mYWNlLXRyYW5zY29kZXIu
aHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
</data>
<flag name="review"
          id="12499"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26892</attachid>
            <date>2009-01-21 03:57:39 -0800</date>
            <delta_ts>2010-06-10 20:20:33 -0700</delta_ts>
            <desc>Patch to support on-the-fly transcoding for one font (new version)</desc>
            <filename>Transcoder.txt</filename>
            <type>text/plain</type>
            <size>114241</size>
            <attacher name="Prunthaban">prunthaban</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDA1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE4IEBACisyMDA5LTAxLTIwICBQcnVudGhhYmFuIEsgIDxwcnVudGhhYmFuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzMzkK
KyAgICAgICAgCisgICAgICAgIEEgbmV3IGZyYW1ld29yayAoYmFzZWQgb2YgUGFkbWEgcGFkbWEu
bW96ZGV2Lm9yZykgdG8KKyAgICAgICAgcGVyZm9ybSBvbi10aGUtZmx5IHRyYW5zY29kaW5nIG9u
IGNlcnRhaW4gSW5kaWMgZm9udHMKKyAgICAgICAgaGFzIGJlZW4gYWRkZWQuCisgICAgICAgIEN1
cnJlbnRseSB0aGlzIHBhdGNoIGNvbnRhaW5zIHRoZSBmcmFtZXdvcmsgYW5kIG9uZSBlbmNvZGVy
CisgICAgICAgIGFuZCBvbmUgY29udmVydGVyLiBJbiBmdXR1cmUgbmV3IGVuY29kZXJzIChmb3Ig
ZWFjaCBmb250IHdlCisgICAgICAgIGludGVuZCB0byBzdXBwb3J0KSBhbmQgbmV3IGNvbnZlcnRl
cnMgKGZvciBlYWNoIGxhbmd1YWdlIHdlIAorICAgICAgICB3YW50IHRvIHN1cHBvcnQpIHdpbGwg
YmUgYWRkZWQuCisgICAgICAgIFRoaXMgY2FuIGJlIHR1cm5lZCBvbi9vZmYgdXNpbmcgRU5BQkxF
X1RFWFRfVFJBTlNDT0RFUiBvcHRpb24uCisgICAgICAgIAorICAgICAgICBUZXN0OiBmYXN0L2Nz
cy9mb250LWZhY2UtdHJhbnNjb2Rlci5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmNwcDogQWRkZWQgYSBuZXcgdmFyaWFibGUgdG8gdHJhY2sKKyAgICAgICAgd2hldGhl
ciB0aGUgZm9udCBuZWVkcyB0cmFuc2NvZGluZworICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9u
dCk6IEluaXRpYWxpemUgdGhlIGlzVHJhbnNjb2RhYmxlRm9udCBtZW1iZXIKKyAgICAgICAgdmFy
aWFibGUgaW4gYWxsIHRoZSBjb25zdHJ1Y3RvcnMKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9w
ZXJhdG9yPSk6IAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmlzVHJhbnNjb2RhYmxlRm9udCk6CisgICAgICAgICogcGxhdGZvcm0v
dGV4dC90cmFuc2NvZGVyOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L3RyYW5zY29k
ZXIvRHluYW1pY1BhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1Bh
cnNlcjo6RHluYW1pY1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljUGFyc2VyOjpy
ZW1vdmVSZWR1bmRhbnRTeW1ib2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNQYXJzZXI6
Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1BhcnNlcjo6aGFuZGxlQ29uc29uYW50
VGVybWluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1BhcnNlcjo6aXNDdXJyZW50
U3lsbGFibGVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0R5
bmFtaWNQYXJzZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVy
L0ZvbnRDb252ZXJ0ZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC90cmFuc2Nv
ZGVyL0ZvbnRFbmNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RW5jb2Rl
cjo6Rm9udEVuY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEVuY29kZXI6Om1heGltdW1M
b29rdXBMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEVuY29kZXI6OmlzUmVkdW5kYW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRFbmNvZGVyOjpwcmVwcm9jZXNzTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RW5jb2Rlcjo6aXNQcmVwcm9jZXNzUmVxdWlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEVuY29kZXI6Omhhc1N1ZmZpeGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRFbmNvZGVyOjppc092ZXJsb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEVu
Y29kZXI6OmlzU3VmZml4U3ltYm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRFbmNvZGVyOjpp
c1ByZWZpeFN5bWJvbCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRF
bmNvZGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250
VHJhbnNjb2Rlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRUcmFuc2NvZGVyOjpGb250VHJhbnNjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpGb250VHJhbnNjb2Rlcjo6fkZvbnRUcmFuc2NvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRUcmFuc2NvZGVyOjppc1N1cHBvcnRlZEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFRy
YW5zY29kZXI6OmlzVHJhbnNjb2RhYmxlU2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJh
bnNjb2Rlcjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2NvZGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6aXNWb3dlbCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250VHJhbnNjb2Rlcjo6aXNTcGVjaWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRU
cmFuc2NvZGVyOjppc0NvbnNvbmFudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rl
cjo6aXNEaWdpdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6aXNHdW5pbnRh
bSk6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6aXNWYXR0dSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6aXNIYWxmRm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250VHJhbnNjb2Rlcjo6Z2V0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNj
b2Rlcjo6ZmFzdFZhdHR1KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRUcmFuc2NvZGVyOjpmYXN0
SGFsZkZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFRyYW5zY29kZXI6OmJhc2VGb3JtRnJv
bVZhdHR1KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRUcmFuc2NvZGVyOjpiYXNlRm9ybUZyb21I
YWxmRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6ZGVwZW5kZW50Rm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpGb250VHJhbnNjb2Rlcjo6aGFsZkZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFRyYW5zY29kZXI6OmJhc2VGb3JtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L3RyYW5zY29kZXIvUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXJzZXI6OlBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpQYXJzZXI6Om5leHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFyc2VyOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlcjo6
bW9yZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJzZXI6OmhhbmRsZUNvbnNvbmFudFRlcm1pbmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlcjo6aXNDdXJyZW50U3lsbGFibGVDb21wbGV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJzZXI6OnVwZGF0ZVN5bWJvbFR5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9TeWxsYWJsZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3lsbGFibGU6OnVwZGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTeWxsYWJsZTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlN5bGxhYmxl
Ojpmb2xkR3VuaW50YW0pOgorICAgICAgICAoV2ViQ29yZTo6U3lsbGFibGU6OmZvbGRDb25zb25h
bnRNb2RpZmllcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3lsbGFibGU6OmdldFN5bGxhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN5bGxhYmxlOjpndW5pbnRhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTeWxsYWJsZTo6c2V0R3VuaW50YW0pOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJhbnNj
b2Rlci9TeWxsYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChX
ZWJDb3JlOjpTeWxsYWJsZTo6U3lsbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJh
bnNjb2Rlci9UU0NJSUVuY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRTQ0lJ
RW5jb2Rlcjo6VFNDSUlFbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRTQ0lJRW5jb2Rlcjo6
aXNSZWR1bmRhbnQpOgorICAgICAgICAoV2ViQ29yZTo6VFNDSUlFbmNvZGVyOjpwcmVwcm9jZXNz
TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpUU0NJSUVuY29kZXI6OmlzUHJlcHJvY2Vzc1Jl
cXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRTQ0lJRW5jb2Rlcjo6aGFzU3VmZml4ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VFNDSUlFbmNvZGVyOjppc092ZXJsb2FkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6VFNDSUlFbmNvZGVyOjppc1N1ZmZpeFN5bWJvbCk6CisgICAgICAgIChXZWJDb3Jl
OjpUU0NJSUVuY29kZXI6OmlzUHJlZml4U3ltYm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlRTQ0lJ
RW5jb2Rlcjo6aGFuZGxlVHdvUGFydFZvd2VsU2lnbnMpOgorICAgICAgICAoV2ViQ29yZTo6VFND
SUlFbmNvZGVyOjpsb29rdXApOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9U
U0NJSUVuY29kZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVy
L1RhbWlsQ29udmVydGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUYW1pbENvbnZl
cnRlcjo6VGFtaWxDb252ZXJ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGFtaWxDb252ZXJ0ZXI6
OnRyYW5zY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL1RhbWlsQ29u
dmVydGVyLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKTogVGV4dCB0cmFuc2Zv
cm1hdGlvbiBzaG91bGQKKyAgICAgICAgYmUgYXBwbGllZCBpZiB0aGUgY3VycmVudCBmb250IGlz
ICd0cmFuc2NvZGFibGUnLiBBZGRlZCB0aGUgbmVjZXNzYXJ5CisgICAgICAgIGNvbmRpdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnNldFRleHRJbnRlcm5hbCk6IElmIHRoZSBj
dXJyZW50IGZvbnQgaXMKKyAgICAgICAgdHJhbnNjb2RhYmxlIHRoZW4gdGV4dCBzaG91bGQgYmUg
dHJhbnNjb2RlZCB1c2luZyB0aGUgVHJhbnNjb2RlciBBUEkKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHQ6OnRyYW5zY29kZSk6IE5ldyBtZXRob2QgcmVzcG9uc2libGUKKyAgICAgICAgZm9y
IGNhbGxpbmcgdGhlIFRyYW5zY29kZXIgQVBJIHRvIGRvIHRoZSB0cmFuc2NvZGluZworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisKIDIwMDktMDEtMTkgIFN0ZXZlIEZhbGtlbmJ1
cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggV2luZG93cyByZWxlYXNlIGJ1
aWxkLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiA0MDA1MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKICNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCisjaW5jbHVkZSAiRm9udFRyYW5z
Y29kZXIuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CiAjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgpAQCAtNjMsNiArNjQsOSBAQCBGb250OjpGb250
KCkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQogICAg
ICwgbV9pc1BsYXRmb3JtRm9udChmYWxzZSkKKyNpZiBFTkFCTEUoVEVYVF9UUkFOU0NPREVSKQor
ICAgICwgbV9pc1RyYW5zY29kYWJsZUZvbnQoZmFsc2UpCisjZW5kaWYKIHsKIH0KIApAQCAtNzMs
NiArNzcsOSBAQCBGb250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIHNoCiAgICAg
LCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZykKICAgICAsIG1fd29yZFNwYWNpbmcod29y
ZFNwYWNpbmcpCiAgICAgLCBtX2lzUGxhdGZvcm1Gb250KGZhbHNlKQorI2lmIEVOQUJMRShURVhU
X1RSQU5TQ09ERVIpCisgICAgLCBtX2lzVHJhbnNjb2RhYmxlRm9udCh0cmFuc2NvZGVyKCktPmlz
U3VwcG9ydGVkRm9udChmYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmcoKSkpCisjZW5kaWYKIHsKIH0K
IApAQCAtODUsNiArOTIsOSBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZv
bnRECiAgICAgLCBtX2lzUGxhdGZvcm1Gb250KHRydWUpCiB7CiAgICAgbV9mb250RGVzY3JpcHRp
b24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCk7CisjaWYgRU5BQkxFKFRFWFRfVFJB
TlNDT0RFUikKKyAgICBtX2lzVHJhbnNjb2RhYmxlRm9udCA9IHRyYW5zY29kZXIoKS0+aXNTdXBw
b3J0ZWRGb250KGZhbWlseSgpLmZhbWlseSgpLnN0cmluZygpKTsKKyNlbmRpZgogICAgIG1fZm9u
dExpc3QtPnNldFBsYXRmb3JtRm9udChmb250RGF0YSk7CiB9CiAKQEAgLTk3LDYgKzEwNyw5IEBA
IEZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiAgICAgLCBtX2xldHRlclNwYWNpbmcob3Ro
ZXIubV9sZXR0ZXJTcGFjaW5nKQogICAgICwgbV93b3JkU3BhY2luZyhvdGhlci5tX3dvcmRTcGFj
aW5nKQogICAgICwgbV9pc1BsYXRmb3JtRm9udChvdGhlci5tX2lzUGxhdGZvcm1Gb250KQorI2lm
IEVOQUJMRShURVhUX1RSQU5TQ09ERVIpCisgICAgLCBtX2lzVHJhbnNjb2RhYmxlRm9udCh0cmFu
c2NvZGVyKCktPmlzU3VwcG9ydGVkRm9udChmYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmcoKSkpCisj
ZW5kaWYKIHsKIH0KIApAQCAtMTEwLDYgKzEyMyw5IEBAIEZvbnQmIEZvbnQ6Om9wZXJhdG9yPShj
b25zdCBGb250JiBvdGhlcikKICAgICBtX2xldHRlclNwYWNpbmcgPSBvdGhlci5tX2xldHRlclNw
YWNpbmc7CiAgICAgbV93b3JkU3BhY2luZyA9IG90aGVyLm1fd29yZFNwYWNpbmc7CiAgICAgbV9p
c1BsYXRmb3JtRm9udCA9IG90aGVyLm1faXNQbGF0Zm9ybUZvbnQ7CisjaWYgRU5BQkxFKFRFWFRf
VFJBTlNDT0RFUikKKyAgICBtX2lzVHJhbnNjb2RhYmxlRm9udCA9IG90aGVyLm1faXNUcmFuc2Nv
ZGFibGVGb250OworI2VuZGlmCiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gNDAwNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUg
PFFGb250PgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2lu
dDsKQEAgLTkzLDYgKzk1LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGV0dGVyU3BhY2luZyhz
aG9ydCBzKSB7IG1fbGV0dGVyU3BhY2luZyA9IHM7IH0KICAgICBib29sIGlzRml4ZWRQaXRjaCgp
IGNvbnN0OwogICAgIGJvb2wgaXNQcmludGVyRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERl
c2NyaXB0aW9uLnVzZVByaW50ZXJGb250KCk7IH0KKyNpZiBFTkFCTEUoVEVYVF9UUkFOU0NPREVS
KQorICAgIGJvb2wgaXNUcmFuc2NvZGFibGVGb250KCkgY29uc3QgeyByZXR1cm4gbV9pc1RyYW5z
Y29kYWJsZUZvbnQ7IH0KKyNlbmRpZgogICAgIAogICAgIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2Rl
KCk7IH0KIApAQCAtMTkwLDYgKzE5NSwxMCBAQCBwcml2YXRlOgogICAgIHNob3J0IG1fbGV0dGVy
U3BhY2luZzsKICAgICBzaG9ydCBtX3dvcmRTcGFjaW5nOwogICAgIGJvb2wgbV9pc1BsYXRmb3Jt
Rm9udDsKKworI2lmIEVOQUJMRShURVhUX1RSQU5TQ09ERVIpCisgICAgYm9vbCBtX2lzVHJhbnNj
b2RhYmxlRm9udDsKKyNlbmRpZgogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L3RyYW5zY29kZXIvRHluYW1pY1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L3RyYW5zY29kZXIvRHluYW1pY1BhcnNlci5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9EeW5hbWljUGFyc2VyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRHluYW1pY1BhcnNlci5oIgorCisjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIK
KyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiU3lsbGFibGUuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKK0R5bmFtaWNQYXJzZXI6OkR5bmFt
aWNQYXJzZXIoY29uc3QgU3RyaW5nJiBpbnB1dCwgRm9udEVuY29kZXIqIGVuY29kZXIpCisgICAg
OiBQYXJzZXIoaW5wdXQsIGVuY29kZXIpCit7CisgICAgaWYgKGVuY29kZXItPmlzUHJlcHJvY2Vz
c1JlcXVpcmVkKCkpCisgICAgICAgIG1fdGV4dCA9IGVuY29kZXItPnByZXByb2Nlc3NNZXNzYWdl
KG1fdGV4dCk7CisgICAgZWxzZQorICAgICAgICBtX3RleHQgPSByZW1vdmVSZWR1bmRhbnRTeW1i
b2xzKCk7CisgICAgbV9sZW5ndGggPSBtX3RleHQubGVuZ3RoKCk7CisgICAgbV9oYXNTdWZmaXhl
cyA9IG1fZW5jb2Rlci0+aGFzU3VmZml4ZXMoKTsKK30KKworU3RyaW5nIER5bmFtaWNQYXJzZXI6
OnJlbW92ZVJlZHVuZGFudFN5bWJvbHMoKQoreworICAgIFZlY3RvcjxVQ2hhcj4gcmVzcG9uc2U7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3RleHQubGVuZ3RoKCk7IGkrKykgeworICAgICAg
ICBVQ2hhciBjID0gbV90ZXh0W2ldOworICAgICAgICBpZiAoIW1fZW5jb2Rlci0+aXNSZWR1bmRh
bnQoYykpCisgICAgICAgICAgICByZXNwb25zZS5hcHBlbmQoYyk7CisgICAgfQorICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KHJlc3BvbnNlKTsKK30KKworU3RyaW5nIER5bmFtaWNQYXJzZXI6Om5l
eHQoKQoreworICAgIFN5bGxhYmxlIHJlc3BvbnNlOworICAgIGludCByZW1haW5pbmcgPSBtX2xl
bmd0aCAtIG1faW5kZXg7CisgICAgZm9yICg7IHJlbWFpbmluZyA+IDA7IHJlbWFpbmluZyA9IG1f
bGVuZ3RoIC0gbV9pbmRleCkgeworICAgICAgICBTdHJpbmcga2V5OworICAgICAgICBTdHJpbmcg
dmFsdWU7CisKKyAgICAgICAgaWYgKG1fa2V5LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaW50
IG1heCA9IG1fZW5jb2Rlci0+bWF4aW11bUxvb2t1cExlbmd0aCgpOworICAgICAgICAgICAgaW50
IG1heExvb2t1cExlbmd0aCA9IHJlbWFpbmluZyA+IG1heCA/IG1heCA6IHJlbWFpbmluZzsKKwor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1heExvb2t1cExlbmd0aDsgaSA+IDA7IGktLSkgewor
ICAgICAgICAgICAgICAgIFN0cmluZyBsb29rdXBLZXkgPSBtX3RleHQuc3Vic3RyaW5nKG1faW5k
ZXgsIGkpOworICAgICAgICAgICAgICAgIFN0cmluZyBsb29rdXBWYWx1ZSA9IG1fZW5jb2Rlci0+
bG9va3VwKGxvb2t1cEtleSk7CisgICAgICAgICAgICAgICAgaWYgKGxvb2t1cFZhbHVlLmlzTnVs
bCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAga2V5ID0gbG9va3VwS2V5OworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGxvb2t1cEtleTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBsb29rdXBWYWx1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoIW1fZW5jb2Rlci0+aXNPdmVybG9hZGVkKGxvb2t1cEtleSkpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdmFsdWUgPSBtX3ZhbHVlOworICAgICAgICAgICAga2V5ID0gbV9rZXk7CisgICAgICAg
ICAgICBtX2tleSA9ICIiOworICAgICAgICAgICAgbV92YWx1ZSA9ICIiOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIHN1ZmZpeCA9IGZhbHNlOworICAgICAgICBpZiAobV9oYXNT
dWZmaXhlcykKKyAgICAgICAgICAgIHN1ZmZpeCA9IG1fZW5jb2Rlci0+aXNTdWZmaXhTeW1ib2wo
a2V5KTsKKyAgICAgICAgcHJvY2Vzcyh2YWx1ZSwga2V5LCByZXNwb25zZSwgbV9lbmNvZGVyLT5p
c1ByZWZpeFN5bWJvbChrZXkpLHN1ZmZpeCk7CisgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZSA9
PSBQYXJzZXJTdGF0ZVN0YXJ0KSAKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5nZXRTeWxs
YWJsZSgpOworICAgIH0KKworICAgIGlmICghcmVzcG9uc2UubGVuZ3RoKCkpCisgICAgICAgIGhh
bmRsZUNvbnNvbmFudFRlcm1pbmF0aW9uKHJlc3BvbnNlKTsKKyAgICByZXR1cm4gcmVzcG9uc2Uu
Z2V0U3lsbGFibGUoKTsKK30KKworYm9vbCBEeW5hbWljUGFyc2VyOjpoYW5kbGVDb25zb25hbnRU
ZXJtaW5hdGlvbihTeWxsYWJsZSYgc3lsbGFibGUpCit7CisgICAgc3lsbGFibGUuZm9sZEd1bmlu
dGFtKCk7CisgICAgc3lsbGFibGUuZm9sZENvbnNvbmFudE1vZGlmaWVycygpOworCisgICAgU3Ry
aW5nIGd1bmludGFtID0gc3lsbGFibGUuZ3VuaW50YW0oKTsKKyAgICBpZiAoZ3VuaW50YW0ubGVu
Z3RoKCkgPT0gMikKKyAgICAgICAgc3lsbGFibGUuc2V0R3VuaW50YW0obV9lbmNvZGVyLT5oYW5k
bGVUd29QYXJ0Vm93ZWxTaWducyhndW5pbnRhbVswXSwgZ3VuaW50YW1bMV0pKTsKKyAgICByZXR1
cm4gdHJ1ZTsKKworfQorCitib29sIER5bmFtaWNQYXJzZXI6OmlzQ3VycmVudFN5bGxhYmxlQ29t
cGxldGUoU3lsbGFibGVUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9EeW5h
bWljUGFyc2VyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0R5bmFtaWNQYXJzZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9EeW5hbWljUGFyc2Vy
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9EeW5h
bWljUGFyc2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIER5bmFtaWNQYXJzZXJfaAorI2RlZmluZSBEeW5hbWljUGFyc2VyX2gKKworI2luY2x1ZGUg
IkZvbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTeWxsYWJsZS5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRHluYW1pY1BhcnNlciA6IHB1YmxpYyBQYXJzZXIgeworcHVibGljOgorICAgIER5
bmFtaWNQYXJzZXIoY29uc3QgU3RyaW5nJiBpbnB1dCwgRm9udEVuY29kZXIqIGVuY29kZXIpOwor
ICAgIHZpcnR1YWwgU3RyaW5nIG5leHQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ29uc29u
YW50VGVybWluYXRpb24oU3lsbGFibGUmIHN5bGxhYmxlKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXND
dXJyZW50U3lsbGFibGVDb21wbGV0ZShTeWxsYWJsZVR5cGUgdHlwZSk7CisKK3ByaXZhdGU6Cisg
ICAgU3RyaW5nIHJlbW92ZVJlZHVuZGFudFN5bWJvbHMoKTsKKworICAgIGJvb2wgbV9oYXNTdWZm
aXhlczsKK307CisKK30KKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvdHJhbnNjb2Rlci9EeW5hbWljUGFyc2VyLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNj
b2Rlci9Gb250Q29udmVydGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L3RyYW5zY29kZXIvRm9udENvbnZlcnRlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udENvbnZlcnRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGb250Q29udmVydGVyX2gKKyNkZWZpbmUgRm9u
dENvbnZlcnRlcl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEZvbnRDb252ZXJ0ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwg
VmVjdG9yPFVDaGFyPiB0cmFuc2NvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpID0gMDsKK307Cit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udENvbnZlcnRlci5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5z
Y29kZXIvRm9udEVuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC90cmFuc2NvZGVyL0ZvbnRFbmNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRFbmNvZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250
RW5jb2Rlci5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZQor
eworCitGb250RW5jb2Rlcjo6Rm9udEVuY29kZXIoaW50IG1heExvb2t1cExlbmd0aCkKKyAgICA6
IG1fbWF4TG9va3VwTGVuZ3RoKG1heExvb2t1cExlbmd0aCkKK3sKK30KKworaW50IEZvbnRFbmNv
ZGVyOjptYXhpbXVtTG9va3VwTGVuZ3RoKCkKK3sKKyAgICByZXR1cm4gbV9tYXhMb29rdXBMZW5n
dGg7Cit9CisKK2Jvb2wgRm9udEVuY29kZXI6OmlzUmVkdW5kYW50KFVDaGFyKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworU3RyaW5nIEZvbnRFbmNvZGVyOjpwcmVwcm9jZXNzTWVzc2FnZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK2Jvb2wg
Rm9udEVuY29kZXI6OmlzUHJlcHJvY2Vzc1JlcXVpcmVkKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgRm9udEVuY29kZXI6Omhhc1N1ZmZpeGVzKCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgRm9udEVuY29kZXI6OmlzT3ZlcmxvYWRlZChjb25zdCBTdHJpbmcmKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250RW5jb2Rlcjo6aXNTdWZmaXhTeW1i
b2woY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udEVu
Y29kZXI6OmlzUHJlZml4U3ltYm9sKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5z
Y29kZXIvRm9udEVuY29kZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmV4ZWN1dGFibGUKICAg
KyAqCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udEVuY29kZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250RW5j
b2Rlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIv
Rm9udEVuY29kZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRm9udEVuY29kZXJfaAorI2RlZmluZSBGb250RW5jb2Rlcl9oCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRFbmNv
ZGVyIHsKK3B1YmxpYzoKKyAgICBGb250RW5jb2RlcihpbnQgbWF4TG9va3VwTGVuZ3RoKTsKKwor
ICAgIHZpcnR1YWwgaW50IG1heGltdW1Mb29rdXBMZW5ndGgoKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNSZWR1bmRhbnQoVUNoYXIpOworICAgIHZpcnR1YWwgU3RyaW5nIHByZXByb2Nlc3NNZXNzYWdl
KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBpc1ByZXByb2Nlc3NSZXF1aXJlZCgp
OworICAgIHZpcnR1YWwgYm9vbCBoYXNTdWZmaXhlcygpOworICAgIHZpcnR1YWwgYm9vbCBpc092
ZXJsb2FkZWQoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIGlzU3VmZml4U3ltYm9s
KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBpc1ByZWZpeFN5bWJvbChjb25zdCBT
dHJpbmcmKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIGxvb2t1cChjb25zdCBTdHJpbmcmIGtleSkg
PSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGhhbmRsZVR3b1BhcnRWb3dlbFNpZ25zKFVDaGFyIGEs
IFVDaGFyIGIpID0gMDsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9tYXhMb29rdXBMZW5ndGg7Cit9
OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L3RyYW5zY29kZXIvRm9udEVuY29kZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRh
YmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL0ZvbnRU
cmFuc2NvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNj
b2Rlci9Gb250VHJhbnNjb2Rlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvdHJhbnNjb2Rlci9Gb250VHJhbnNjb2Rlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRU
cmFuc2NvZGVyLmgiCisKKyNpbmNsdWRlICJEeW5hbWljUGFyc2VyLmgiCisjaW5jbHVkZSAiVGFt
aWxDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJUU0NJSUVuY29kZXIuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKworY29uc3QgU3lsbGFibGVUeXBlIEZv
bnRUcmFuc2NvZGVyOjp0eXBlW10gPSB7VHlwZUFjY3VNb2QsIFR5cGVBY2N1TW9kLCAKKyAgICBU
eXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVu
a25vd24sIAorICAgIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVV
bmtub3duLCBUeXBlVW5rbm93biwgCisgICAgVHlwZVVua25vd24sIFR5cGVIYWxsdU1vZCwgVHlw
ZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlRGlnaXQsIFR5cGVEaWdpdCwgCisgICAgVHlwZURp
Z2l0LCBUeXBlRGlnaXQsIFR5cGVEaWdpdCwgVHlwZURpZ2l0LCBUeXBlRGlnaXQsIFR5cGVEaWdp
dCwgVHlwZURpZ2l0LCAKKyAgICBUeXBlRGlnaXQsIFR5cGVHdW5pbnRhbSwgVHlwZUd1bmludGFt
LCBUeXBlR3VuaW50YW0sIFR5cGVHdW5pbnRhbSwgCisgICAgVHlwZVVua25vd24sIFR5cGVVbmtu
b3duLCBUeXBlQWNjdSwgVHlwZUFjY3UsIFR5cGVBY2N1LCBUeXBlQWNjdSwgVHlwZUFjY3UsIAor
ICAgIFR5cGVBY2N1LCBUeXBlQWNjdSwgVHlwZUFjY3UsIFR5cGVBY2N1LCBUeXBlQWNjdSwgVHlw
ZUFjY3UsIFR5cGVBY2N1LCAKKyAgICBUeXBlQWNjdSwgVHlwZUFjY3UsIFR5cGVBY2N1LCBUeXBl
QWNjdSwgVHlwZUFjY3UsIFR5cGVBY2N1LCBUeXBlQWNjdSwgCisgICAgVHlwZUhhbGx1LCBUeXBl
SGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhh
bGx1LCAKKyAgICBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5
cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIAorICAgIFR5cGVIYWxsdSwgVHlwZUhhbGx1
LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwg
CisgICAgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFs
bHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCAKKyAgICBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlw
ZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIAorICAg
IFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBU
eXBlSGFsbHUsIFR5cGVIYWxsdSwgCisgICAgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxs
dSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCAKKyAgICBUeXBl
SGFsbHUsIFR5cGVIYWxsdSwgVHlwZUhhbGx1LCBUeXBlSGFsbHUsIFR5cGVIYWxsdSwgVHlwZVVu
a25vd24sIAorICAgIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVV
bmtub3duLCBUeXBlVW5rbm93biwgCisgICAgVHlwZVVua25vd24sIFR5cGVEaWdpdCwgVHlwZURp
Z2l0LCBUeXBlRGlnaXQsIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgCisgICAgVHlwZVVua25v
d24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCAK
KyAgICBUeXBlVW5rbm93biwgVHlwZUhhbGx1TW9kLCBUeXBlSGFsbHVNb2QsIFR5cGVBY2N1TW9k
LCBUeXBlVW5rbm93biwgCisgICAgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93
biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCAKKyAgICBUeXBlVW5rbm93biwgVHlwZVVua25v
d24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIAorICAgIFR5cGVVbmtu
b3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwg
CisgICAgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24s
IFR5cGVVbmtub3duLCAKKyAgICBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3du
LCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIAorICAgIFR5cGVVbmtub3duLCBUeXBlVW5rbm93
biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgCisgICAgVHlwZVVua25v
d24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCAK
KyAgICBUeXBlR3VuaW50YW0sIFR5cGVHdW5pbnRhbSwgVHlwZUd1bmludGFtLCBUeXBlR3VuaW50
YW0sIFR5cGVHdW5pbnRhbSwgCisgICAgVHlwZUd1bmludGFtLCBUeXBlR3VuaW50YW0sIFR5cGVH
dW5pbnRhbSwgVHlwZUd1bmludGFtLCBUeXBlR3VuaW50YW0sIAorICAgIFR5cGVHdW5pbnRhbSwg
VHlwZUd1bmludGFtLCBUeXBlR3VuaW50YW0sIFR5cGVHdW5pbnRhbSwgVHlwZUd1bmludGFtLCAK
KyAgICBUeXBlR3VuaW50YW0sIFR5cGVHdW5pbnRhbSwgVHlwZVZhdHR1LCBUeXBlSGFsbHUsIFR5
cGVWYXR0dSwgVHlwZUhhbGx1LCAKKyAgICBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZUhhbGx1
LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIAorICAgIFR5cGVI
YWxsdSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0
dHUsIFR5cGVIYWxsdSwgCisgICAgVHlwZVZhdHR1LCBUeXBlSGFsbHUsIFR5cGVWYXR0dSwgVHlw
ZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCAKKyAgICBUeXBlVmF0dHUs
IFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlSGFsbHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBU
eXBlVmF0dHUsIAorICAgIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlSGFsbHUsIFR5cGVWYXR0
dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgCisgICAgVHlwZVZhdHR1LCBUeXBl
VmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZh
dHR1LCAKKyAgICBUeXBlVmF0dHUsIFR5cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIFR5
cGVWYXR0dSwgVHlwZVZhdHR1LCBUeXBlVmF0dHUsIAorICAgIFR5cGVWYXR0dSwgVHlwZVVua25v
d24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCAK
KyAgICBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwg
VHlwZVVua25vd24sIAorICAgIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24s
IFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgCisgICAgVHlwZVVua25vd24sIFR5cGVVbmtub3du
LCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCAKKyAgICBUeXBlVW5rbm93
biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIAor
ICAgIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBU
eXBlVW5rbm93biwgCisgICAgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwg
VHlwZVVua25vd24sIFR5cGVVbmtub3duLCAKKyAgICBUeXBlVW5rbm93biwgVHlwZVVua25vd24s
IFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIAorICAgIFR5cGVVbmtub3du
LCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgCisg
ICAgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5
cGVVbmtub3duLCAKKyAgICBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBU
eXBlVW5rbm93biwgVHlwZVVua25vd24sIAorICAgIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwg
VHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgCisgICAgVHlwZVVua25vd24s
IFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCAKKyAg
ICBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlw
ZVVua25vd24sIAorICAgIFR5cGVVbmtub3duLCBUeXBlVW5rbm93biwgVHlwZVVua25vd24sIFR5
cGVVbmtub3duLCBUeXBlSGFsZkZvcm0sIAorICAgIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3Jt
LCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCAKKyAgICBUeXBlSGFs
ZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxm
Rm9ybSwgCisgICAgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlw
ZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIAorICAgIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3Jt
LCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCAKKyAgICBUeXBlSGFs
ZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxm
Rm9ybSwgCisgICAgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlw
ZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIAorICAgIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3Jt
LCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCAKKyAgICBUeXBlSGFs
ZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxm
Rm9ybSwgCisgICAgVHlwZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlw
ZUhhbGZGb3JtLCBUeXBlSGFsZkZvcm0sIAorICAgIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3Jt
LCBUeXBlSGFsZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCAKKyAgICBUeXBlSGFs
ZkZvcm0sIFR5cGVIYWxmRm9ybSwgVHlwZUhhbGZGb3JtLCBUeXBlVW5rbm93biB9OworCitGb250
VHJhbnNjb2Rlcjo6Rm9udFRyYW5zY29kZXIoKQoreworICAgIG1fZW5jb2RlcnNbMF0gPSBuZXcg
VFNDSUlFbmNvZGVyKCk7CisgICAgbV9jb252ZXJ0ZXJzWzBdID0gbmV3IFRhbWlsQ29udmVydGVy
KCk7CisKKyAgICAvLyBBc3NpZ24gaW5kZXggdG8gZm9udHMKKyAgICBtX2VuY29kZXJJbmRleC5z
ZXQoIkluYWlNYXRoaU5ld1RTQyIsMCk7CisKKyAgICBtX2NvbnZlcnRlckluZGV4LnNldCgiSW5h
aU1hdGhpTmV3VFNDIiwwKTsKKworICAgIG1fdHJhbnNjb2RhYmxlU2l0ZXMuYWRkKCJ3d3cua2Fs
a2l3ZWVrbHkuY29tIik7Cit9CisKK0ZvbnRUcmFuc2NvZGVyOjp+Rm9udFRyYW5zY29kZXIoKQor
eworICAgIGRlbGV0ZSBtX2VuY29kZXJzWzBdOworICAgIGRlbGV0ZSBtX2NvbnZlcnRlcnNbMF07
Cit9CisKK2Jvb2wgRm9udFRyYW5zY29kZXI6OmlzU3VwcG9ydGVkRm9udChjb25zdCBTdHJpbmcm
IGZvbnQpIGNvbnN0Cit7CisgICAgaWYgKGZvbnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIG1fZW5jb2RlckluZGV4LmNvbnRhaW5zKGZvbnQpOworfQorCiti
b29sIEZvbnRUcmFuc2NvZGVyOjppc1RyYW5zY29kYWJsZVNpdGUoY29uc3QgU3RyaW5nJiBvcmln
aW4pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNjb2RhYmxlU2l0ZXMuY29udGFpbnMob3Jp
Z2luKTsKK30KKworU3RyaW5nIEZvbnRUcmFuc2NvZGVyOjpjb252ZXJ0KGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgU3RyaW5nJiBmb250KQoreworICAgIGlmICghbV9lbmNvZGVySW5kZXguY29u
dGFpbnMoZm9udCkgfHwgIW1fY29udmVydGVySW5kZXguY29udGFpbnMoZm9udCkpCisgICAgICAg
IHJldHVybiB0ZXh0OworICAgIGludCBlbmNvZGVySW5kZXggPSBtX2VuY29kZXJJbmRleC5nZXQo
Zm9udCk7CisgICAgaW50IGNvbnZlcnRlckluZGV4ID0gbV9jb252ZXJ0ZXJJbmRleC5nZXQoZm9u
dCk7CisgICAgUGFyc2VyKiBwYXJzZXIgPSBuZXcgRHluYW1pY1BhcnNlcih0ZXh0LCBtX2VuY29k
ZXJzW2VuY29kZXJJbmRleF0pOworICAgIFZlY3RvcjxVQ2hhcj4gb3V0cHV0OworICAgIHdoaWxl
IChwYXJzZXItPm1vcmUoKSkgeworICAgICAgICBTdHJpbmcgbmV4dCA9IHBhcnNlci0+bmV4dCgp
OworICAgICAgICBvdXRwdXQuYXBwZW5kKG1fY29udmVydGVyc1tjb252ZXJ0ZXJJbmRleF0tPnRy
YW5zY29kZShuZXh0LmNoYXJhY3RlcnMoKSwgbmV4dC5sZW5ndGgoKSkpOworICAgIH0KKyAgICBk
ZWxldGUgcGFyc2VyOworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG91dHB1dCk7Cit9CisKK0Zv
bnRUcmFuc2NvZGVyKiB0cmFuc2NvZGVyKCkKK3sKKyAgICBzdGF0aWMgRm9udFRyYW5zY29kZXIq
IHRyYW5zY29kZXIgPSBuZXcgRm9udFRyYW5zY29kZXIoKTsKKyAgICByZXR1cm4gdHJhbnNjb2Rl
cjsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3Ry
YW5zY29kZXIvRm9udFRyYW5zY29kZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmV4ZWN1dGFi
bGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRy
YW5zY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rl
ci9Gb250VHJhbnNjb2Rlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L3RyYW5zY29kZXIvRm9udFRyYW5zY29kZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0Mzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZvbnRUcmFuc2NvZGVyX2gKKyNkZWZpbmUgRm9udFRyYW5z
Y29kZXJfaAorCisjaW5jbHVkZSAiRm9udENvbnZlcnRlci5oIgorI2luY2x1ZGUgIkZvbnRFbmNv
ZGVyLmgiCisjaW5jbHVkZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZTx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGU8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRUcmFu
c2NvZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgaW50IGJhc2VJbmRleCA9IDB4RUMw
MDsKKyAgICBzdGF0aWMgY29uc3QgaW50IGJhc2VTdGFydCA9IDB4RUMyMjsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IGJhc2VFbmQgICA9IDB4RUM2ODsKKyAgICBzdGF0aWMgY29uc3QgaW50IGRlcGVu
ZGVudFN0YXJ0ID0gMHhFQ0EyOworICAgIHN0YXRpYyBjb25zdCBpbnQgZGVwZW5kZW50RW5kICAg
PSAweEVDRTg7CisgICAgc3RhdGljIGNvbnN0IGludCBoYWxmU3RhcnQgPSAweEVEMzM7CisgICAg
c3RhdGljIGNvbnN0IGludCBoYWxmRW5kICAgPSAweEVENjg7CisgICAgc3RhdGljIGNvbnN0IGlu
dCB2YXR0dVN0YXJ0ID0gMHhFQ0IzOworICAgIHN0YXRpYyBjb25zdCBpbnQgdmF0dHVFbmQgICA9
IDB4RUNFODsKKworICAgIC8vIENvbnN0YW50cyBkZWZpbml0aW9ucworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBhbnVzdmFyYSA9IDB4RUMwMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmlzYXJn
YSA9IDB4RUMwMTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgcG9sbHUgPSAweEVDMDI7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGNoaWxsdSA9IDB4RUMwRDsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgc3lsbGJyZWFrID0gMHhFQzdCOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBudWt0YSA9IDB4
RUM3QzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgYXJkaGF2aXNhcmdhID0gMHhFQzdEOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciB0aXBwaSA9IDB4RUM3RTsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgYWRkYWsgPSAweEVDN0Y7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGVrb25rYXIgPSAweEVD
ODA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZpcmFtYSA9IDB4RUMwMjsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgY2hhbmRyYWtrYWxhID0gMHhFQzAyOworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBwdWxsaSA9IDB4RUMwMjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsYW50ID0gMHhFQzAy
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYXNhbnQgPSAweEVDMDI7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIGNhbmRyYWJpbmR1ID0gMHhFQzAzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBh
dmFncmFoYSA9IDB4RUMwNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgeWF0aSA9IDB4RUMwNTsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdWRBdHRhID0gMHhFQzA2OworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBhbnVkQXR0YSA9IDB4RUMwNzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgc3Zhcml0
YSA9IDB4RUMwODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZ3VydSA9IDB4RUMwOTsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgbGFnaHUgPSAweEVDMEE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGRhbmRhID0gMHhFQzBCOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkZGFuZGEgPSAweEVDMEM7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGFiYnJldiA9IDB4RUMwRTsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgb20gPSAweEVDMEY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0WkVSTyA9
IDB4RUMxMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRPTkUgPSAweEVDMTE7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0VFdPID0gMHhFQzEyOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBkaWdpdFRIUkVFID0gMHhFQzEzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdEZP
VVIgPSAweEVDMTQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0RklWRSA9IDB4RUMxNTsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRTSVggPSAweEVDMTY7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIGRpZ2l0U0VWRU4gPSAweEVDMTc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRp
Z2l0RUlHSFQgPSAweEVDMTg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0TklORSA9IDB4
RUMxOTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxBID0gMHhFQzIwOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciB2b3dlbFNIVEEgPSAweEVDMjE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IHZvd2VsQUEgPSAweEVDMjI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsSSA9IDB4RUMy
MzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxJSSA9IDB4RUMyNDsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgdm93ZWxVID0gMHhFQzI1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dl
bFVVID0gMHhFQzI2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbFIgPSAweEVDMjc7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsUlIgPSAweEVDMjg7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIHZvd2VsTCA9IDB4RUMyOTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxMTCA9
IDB4RUMyQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxDRFJFID0gMHhFQzJCOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbEUgPSAweEVDMkM7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHZvd2VsRUUgPSAweEVDMkQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsQUkgPSAw
eEVDMkU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsQ0RSTyA9IDB4RUMyRjsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgdm93ZWxPID0gMHhFQzMwOworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciB2b3dlbE9PID0gMHhFQzMxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbEFVID0gMHhF
QzMyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRLQSA9IDB4RUMzMzsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgY29uc250UUEgPSAweEVDMzQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGNvbnNudEtIQSA9IDB4RUMzNTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250S0hIQSA9
IDB4RUMzNjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250R0EgPSAweEVDMzc7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudEdIQSA9IDB4RUMzODsKKyAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgY29uc250R0hIQSA9IDB4RUMzOTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250
TkdBID0gMHhFQzNBOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRDQSA9IDB4RUMzQjsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250Q0hBID0gMHhFQzNDOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBjb25zbnRKQSA9IDB4RUMzRDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29u
c250WkEgPSAweEVDM0U7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudEpIQSA9IDB4RUMz
RjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250TllBID0gMHhFQzQwOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBjb25zbnRUVEEgPSAweEVDNDE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGNvbnNudFRUSEEgPSAweEVDNDI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudEREQSA9
IDB4RUM0MzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250RERESEEgPSAweEVDNDQ7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudERESEEgPSAweEVDNDU7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIGNvbnNudFJIQSA9IDB4RUM0NjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29u
c250Tk5BID0gMHhFQzQ3OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRUQSA9IDB4RUM0
ODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250VEhBID0gMHhFQzQ5OworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBjb25zbnREQSA9IDB4RUM0QTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
Y29uc250REhBID0gMHhFQzRCOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnROQSA9IDB4
RUM0QzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250Tk5OQSA9IDB4RUM0RDsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgY29uc250UEEgPSAweEVDNEU7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIGNvbnNudEZBID0gMHhFQzRGOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRQSEEg
PSAweEVDNTA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudEJBID0gMHhFQzUxOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRCSEEgPSAweEVDNTI7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGNvbnNudE1BID0gMHhFQzUzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRZ
QSA9IDB4RUM1NDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250WVlBID0gMHhFQzU1Owor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRSQSA9IDB4RUM1NjsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgY29uc250UlJBID0gMHhFQzU3OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25z
bnRMQSA9IDB4RUM1ODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250TExBID0gMHhFQzU5
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRaSEEgPSAweEVDNUE7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGNvbnNudFZBID0gMHhFQzVCOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBj
b25zbnRTSEEgPSAweEVDNUM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudFNTQSA9IDB4
RUM1RDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250U0EgPSAweEVDNUU7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIGNvbnNudEhBID0gMHhFQzVGOworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBjb25zbnRUU0EgPSAweEVDNjA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudERKQSA9
IDB4RUM2MTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250R0dBID0gMHhFQzYyOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRKSkEgPSAweEVDNjM7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGNvbnNudEREREEgPSAweEVDNjQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNu
dEJCQSA9IDB4RUM2NTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250UkFNRCA9IDB4RUM2
NjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250UkFMRCA9IDB4RUM2NzsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgY29uc250S0hBTkRBVEEgPSAweEVDNjg7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIHZvd2Vsc25BQSA9IDB4RUNBMjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxz
bkkgPSAweEVDQTM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25JSSA9IDB4RUNBNDsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzblUgPSAweEVDQTU7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIHZvd2Vsc25VVSA9IDB4RUNBNjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93
ZWxzblIgPSAweEVDQTc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25SUiA9IDB4RUNB
ODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbkwgPSAweEVDQTk7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIHZvd2Vsc25MTCA9IDB4RUNBQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dm93ZWxzbkNEUkUgPSAweEVDQUI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25FID0g
MHhFQ0FDOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuRUUgPSAweEVDQUQ7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25BSSA9IDB4RUNBRTsKKyAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgdm93ZWxzbkNEUk8gPSAweEVDQUY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vs
c25PID0gMHhFQ0IwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuT08gPSAweEVDQjE7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25BVSA9IDB4RUNCMjsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgdm93ZWxzbkVFTEVOID0gMHhFQzFBOworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciB2b3dlbHNuQUlMRU4gPSAweEVDMUI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25B
VUxFTiA9IDB4RUMxQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbklJTEVOID0gMHhF
QzFEOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dUtBID0gMHhFQ0IzOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciB2YXR0dVFBID0gMHhFQ0I0OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2
YXR0dUtIQSA9IDB4RUNCNTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVLSEhBID0gMHhF
Q0I2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dUdBID0gMHhFQ0I3OworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciB2YXR0dUdIQSA9IDB4RUNCODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dmF0dHVHSEhBID0gMHhFQ0I5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dU5HQSA9IDB4
RUNCQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVDQSA9IDB4RUNCQjsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgdmF0dHVDSEEgPSAweEVDQkM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IHZhdHR1SkEgPSAweEVDQkQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1WkEgPSAweEVD
QkU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1SkhBID0gMHhFQ0JGOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciB2YXR0dU5ZQSA9IDB4RUNDMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dmF0dHVUVEEgPSAweEVDQzE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1VFRIQSA9IDB4
RUNDMjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVEREEgPSAweEVDQzM7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIHZhdHR1RERESEEgPSAweEVDQzQ7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHZhdHR1RERIQSA9IDB4RUNDNTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVSSEEg
PSAweEVDQzY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1Tk5BID0gMHhFQ0M3OworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVRBID0gMHhFQ0M4OworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciB2YXR0dVRIQSA9IDB4RUNDOTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVEQSA9
IDB4RUNDQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVESEEgPSAweEVDQ0I7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1TkEgPSAweEVDQ0M7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHZhdHR1Tk5OQSA9IDB4RUNDRDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVQQSA9
IDB4RUNDRTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVGQSA9IDB4RUNDRjsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgdmF0dHVQSEEgPSAweEVDRDA7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHZhdHR1QkEgPSAweEVDRDE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1QkhBID0g
MHhFQ0QyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dU1BID0gMHhFQ0QzOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciB2YXR0dVlBID0gMHhFQ0Q0OworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciB2YXR0dVlZQSA9IDB4RUNENTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVSQSA9IDB4
RUNENjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVSUkEgPSAweEVDRDc7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIHZhdHR1TEEgPSAweEVDRDg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IHZhdHR1TExBID0gMHhFQ0Q5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVpIQSA9IDB4
RUNEQTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVWQSA9IDB4RUNEQjsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgdmF0dHVTSEEgPSAweEVDREM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IHZhdHR1U1NBID0gMHhFQ0REOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVNBID0gMHhF
Q0RFOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dUhBID0gMHhFQ0RGOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciB2YXR0dVRTQSA9IDB4RUNFMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dmF0dHVESkEgPSAweEVDRTE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1R0dBID0gMHhF
Q0UyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dUpKQSA9IDB4RUNFMzsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgdmF0dHVERERBID0gMHhFQ0U0OworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciB2YXR0dUJCQSA9IDB4RUNFNTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdmF0dHVSQU1EID0g
MHhFQ0U2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2YXR0dVJBTEQgPSAweEVDRTc7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIHZhdHR1S0hBTkRBVEEgPSAweEVDRTg7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIGhhbGZmbUtBID0gMHhFRDMzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxm
Zm1RQSA9IDB4RUQzNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtS0hBID0gMHhFRDM1
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1LSEhBID0gMHhFRDM2OworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBoYWxmZm1HQSA9IDB4RUQzNzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
aGFsZmZtR0hBID0gMHhFRDM4OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1HSEhBID0g
MHhFRDM5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1OR0EgPSAweEVEM0E7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbUNBID0gMHhFRDNCOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBoYWxmZm1DSEEgPSAweEVEM0M7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbUpB
ID0gMHhFRDNEOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1aQSA9IDB4RUQzRTsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtSkhBID0gMHhFRDNGOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBoYWxmZm1OWUEgPSAweEVENDA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZm
bVRUQSA9IDB4RUQ0MTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtVFRIQSA9IDB4RUQ0
MjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtRERBID0gMHhFRDQzOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBoYWxmZm1ERERIQSA9IDB4RUQ0NDsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgaGFsZmZtRERIQSA9IDB4RUQ0NTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtUkhB
ID0gMHhFRDQ2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1OTkEgPSAweEVENDc7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbVRBID0gMHhFRDQ4OworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBoYWxmZm1USEEgPSAweEVENDk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZm
bURBID0gMHhFRDRBOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1ESEEgPSAweEVENEI7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbU5BID0gMHhFRDRDOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBoYWxmZm1OTk5BID0gMHhFRDREOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBo
YWxmZm1QQSA9IDB4RUQ0RTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtRkEgPSAweEVE
NEY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbVBIQSA9IDB4RUQ1MDsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgaGFsZmZtQkEgPSAweEVENTE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGhhbGZmbUJIQSA9IDB4RUQ1MjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtTUEgPSAw
eEVENTM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbVlBID0gMHhFRDU0OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1ZWUEgPSAweEVENTU7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIGhhbGZmbVJBID0gMHhFRDU2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1SUkEg
PSAweEVENTc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbUxBID0gMHhFRDU4OworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1MTEEgPSAweEVENTk7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGhhbGZmbVpIQSA9IDB4RUQ1QTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZt
VkEgPSAweEVENUI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbVNIQSA9IDB4RUQ1QzsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtU1NBID0gMHhFRDVEOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBoYWxmZm1TQSA9IDB4RUQ1RTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFs
ZmZtSEEgPSAweEVENUY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhhbGZmbVRTQSA9IDB4RUQ2
MDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtREpBID0gMHhFRDYxOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBoYWxmZm1HR0EgPSAweEVENjI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGhhbGZmbUpKQSA9IDB4RUQ2MzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtREREQSA9
IDB4RUQ2NDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGFsZmZtQkJBID0gMHhFRDY1OworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBoYWxmZm1SQU1EID0gMHhFRDY2OworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBoYWxmZm1SQUxEID0gMHhFRDY3OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoYWxm
Zm1LSEFOREFUQSA9IDB4RUQ2ODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRURU4gPSAw
eEVDNzA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0SFVORFJFRCA9IDB4RUM3MTsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRUSE9VU0FORCA9IDB4RUM3MjsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgc2lnbkRBWSA9IDB4RUM3MzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgc2ln
bk1PTlRIID0gMHhFQzc0OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzaWduWUVBUiA9IDB4RUM3
NTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgc2lnbkRFQklUID0gMHhFQzc2OworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBzaWduQ1JFRElUID0gMHhFQzc3OworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBzaWduQVNBQk9WRSA9IDB4RUM3ODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgc2lnblJVUEVF
ID0gMHhFQzc5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzaWduTlVNQkVSID0gMHhFQzdBOwor
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIFVuaUNvZGVTaGFyZWROVUtUQSAgICA9IDB4MDkzQzsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgVW5pQ29kZVNoYXJlZEFWQUdSQUhBID0gMHgwOTNEOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBVbmlDb2RlU2hhcmVkT00gICAgICAgPSAweDA5NTA7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIFVuaUNvZGVTaGFyZWRVREFUVEEgICA9IDB4MDk1MTsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgVW5pQ29kZVNoYXJlZEFOVURBVFRBID0gMHgwOTUyOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBVbmlDb2RlU2hhcmVkU1ZBUklUQSAgPSAweDA5NTE7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIFVuaUNvZGVTaGFyZWREQU5EQSAgICA9IDB4MDk2NDsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgVW5pQ29kZVNoYXJlZEREQU5EQSAgID0gMHgwOTY1OworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBVbmlDb2RlU2hhcmVkYWJicmV2ICAgPSAweDA5NzA7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIFVuaUNvZGVTaGFyZWRaV05KICAgICA9IDB4MjAwQzsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgVW5pQ29kZVNoYXJlZFpXSiAgICAgID0gMHgyMDBEOworCisgICAgc3Rh
dGljIGNvbnN0IFN5bGxhYmxlVHlwZSB0eXBlW107IAorCisgICAgZnJpZW5kIEZvbnRUcmFuc2Nv
ZGVyKiB0cmFuc2NvZGVyKCk7CisKKyAgICBTdHJpbmcgY29udmVydChjb25zdCBTdHJpbmcmIHRl
eHQsIGNvbnN0IFN0cmluZyYgZm9udCk7CisgICAgYm9vbCBpc1N1cHBvcnRlZEZvbnQoY29uc3Qg
U3RyaW5nJiBmb250KSBjb25zdDsKKyAgICBib29sIGlzVHJhbnNjb2RhYmxlU2l0ZShjb25zdCBT
dHJpbmcmIG9yaWdpbikgY29uc3Q7CisKKyAgICBzdGF0aWMgYm9vbCBpc1Zvd2VsKFVDaGFyIGNv
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gdHlwZVtjb2RlIC0gYmFzZUluZGV4XSA9PSBUeXBl
QWNjdTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1NwZWNpYWwoVUNoYXIgY29kZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0eXBlW2NvZGUgLSBiYXNlSW5kZXhdID09IFR5cGVVbmtub3du
OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzQ29uc29uYW50KFVDaGFyIGNvZGUpCisgICAg
eworICAgICAgICByZXR1cm4gdHlwZVtjb2RlIC0gYmFzZUluZGV4XSA9PSBUeXBlSGFsbHU7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNEaWdpdChVQ2hhciBjb2RlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHR5cGVbY29kZSAtIGJhc2VJbmRleF0gPT0gVHlwZURpZ2l0OworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGlzR3VuaW50YW0oVUNoYXIgY29kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0eXBlW2NvZGUgLSBiYXNlSW5kZXhdID09IFR5cGVHdW5pbnRhbTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhdHR1KFVDaGFyIGNvZGUpCisgICAgeworICAgICAgICByZXR1cm4g
dHlwZVtjb2RlIC0gYmFzZUluZGV4XSA9PSBUeXBlVmF0dHU7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgaXNIYWxmRm9ybShVQ2hhciBjb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVb
Y29kZSAtIGJhc2VJbmRleF0gPT0gVHlwZUhhbGZGb3JtOworICAgIH0KKworICAgIHN0YXRpYyBT
eWxsYWJsZVR5cGUgZ2V0VHlwZShVQ2hhciBjb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5
cGVbY29kZSAtIGJhc2VJbmRleF07CisgICAgfQorCisgICAgc3RhdGljIFN0cmluZyBmYXN0VmF0
dHUoVUNoYXIgY29kZSkKKyAgICB7CisgICAgICAgIFN0cmluZyByZXNwb25zZSA9ICIiOworICAg
ICAgICByZXNwb25zZS5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGNvZGUgKyAweDgwKSk7Cisg
ICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RyaW5nIGZhc3RI
YWxmRm9ybShVQ2hhciBjb2RlKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gIiI7
CisgICAgICAgIHJlc3BvbnNlLmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oY29kZSArIDB4MTAw
KSk7CisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RyaW5n
IGJhc2VGb3JtRnJvbVZhdHR1KFVDaGFyIGNvZGUpCisgICAgeworICAgICAgICBTdHJpbmcgcmVz
cG9uc2UgPSAiIjsKKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihj
b2RlIC0gMHg4MCkpOworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgfQorCisgICAgc3Rh
dGljIFN0cmluZyBiYXNlRm9ybUZyb21IYWxmRm9ybShVQ2hhciBjb2RlKQorICAgIHsKKyAgICAg
ICAgU3RyaW5nIHJlc3BvbnNlID0gIiI7CisgICAgICAgIHJlc3BvbnNlLmFwcGVuZChzdGF0aWNf
Y2FzdDxVQ2hhcj4oY29kZSAtIDB4MTAwKSk7CisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgU3RyaW5nIGRlcGVuZGVudEZvcm0oY29uc3QgU3RyaW5nJiBpbnB1
dCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gcmVzcG9uc2U7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgVUNoYXIg
Y29kZSA9IGlucHV0W2ldOworICAgICAgICAgICAgaWYgKGNvZGUgPj0gYmFzZVN0YXJ0ICYmIGNv
ZGUgPD0gYmFzZUVuZCkKKyAgICAgICAgICAgICAgICByZXNwb25zZS5hcHBlbmQoc3RhdGljX2Nh
c3Q8VUNoYXI+KGNvZGUgKyAweDgwKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6YWRvcHQocmVzcG9uc2UpOworICAgIH0KKworICAgIHN0YXRpYyBTdHJpbmcgaGFsZkZvcm0o
Y29uc3QgU3RyaW5nJiBpbnB1dCkgCisgICAgeworICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3Bv
bnNlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCgpOyBpKyspIHsK
KyAgICAgICAgICAgIFVDaGFyIGNvZGUgPSBpbnB1dFtpXTsKKyAgICAgICAgICAgIGlmIChjb2Rl
ID49IGJhc2VTdGFydCAmJiBjb2RlIDw9IGJhc2VFbmQpCisgICAgICAgICAgICAgICAgcmVzcG9u
c2UuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihjb2RlICsgMHgxMDApKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXNwb25zZSk7CisgICAgfQorCisgICAgc3Rh
dGljIFN0cmluZyBiYXNlRm9ybShjb25zdCBTdHJpbmcmIGlucHV0KSAKKyAgICB7CisgICAgICAg
IFZlY3RvcjxVQ2hhcj4gcmVzcG9uc2U7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5w
dXQubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgVUNoYXIgY29kZSA9IGlucHV0W2ldOwor
ICAgICAgICAgICAgaWYgKGNvZGUgPj0gZGVwZW5kZW50U3RhcnQgJiYgY29kZSA8PSBkZXBlbmRl
bnRFbmQpCisgICAgICAgICAgICAgICAgcmVzcG9uc2UuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFy
Pihjb2RlIC0gMHg4MCkpOworICAgICAgICAgICAgaWYgKGNvZGUgPj0gaGFsZlN0YXJ0ICYmIGNv
ZGUgPD0gaGFsZkVuZCkKKyAgICAgICAgICAgICAgICByZXNwb25zZS5hcHBlbmQoc3RhdGljX2Nh
c3Q8VUNoYXI+KGNvZGUgLSAweDEwMCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KHJlc3BvbnNlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRm9udFRyYW5zY29k
ZXIoKTsgLy8gU2luZ2xldG9uLCBwcml2YXRlIGNvbnN0cnVjdG9yCisgICAgfkZvbnRUcmFuc2Nv
ZGVyKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIGludD4gbV9lbmNvZGVySW5kZXg7CisgICAgSGFz
aE1hcDxTdHJpbmcsIGludD4gbV9jb252ZXJ0ZXJJbmRleDsKKyAgICBGb250Q29udmVydGVyKiBt
X2NvbnZlcnRlcnNbMV07CisgICAgRm9udEVuY29kZXIqIG1fZW5jb2RlcnNbMV07CisgICAgSGFz
aFNldDxTdHJpbmc+IG1fdHJhbnNjb2RhYmxlU2l0ZXM7Cit9OworCit9CisKKyNlbmRpZgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvRm9udFRy
YW5zY29kZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvUGFyc2VyLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL1BhcnNlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBhcnNlci5oIgorCisjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIKKyNpbmNs
dWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiU3lsbGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJD
b3JlCit7CitQYXJzZXI6OlBhcnNlcihjb25zdCBTdHJpbmcmIGlucHV0LCBGb250RW5jb2Rlciog
ZW5jb2RlcikKKyAgICA6IG1faW5kZXgoMCkKKyAgICAsIG1fdGV4dChpbnB1dCkKKyAgICAsIG1f
bGVuZ3RoKGlucHV0Lmxlbmd0aCgpKQorICAgICwgbV9lbmNvZGVyKGVuY29kZXIpCisgICAgLCBt
X2N1cnJlbnRTdGF0ZShQYXJzZXJTdGF0ZVN0YXJ0KQorICAgICwgbV9rZXkoIiIpCisgICAgLCBt
X3ZhbHVlKCIiKQoreworCit9CisKK1N0cmluZyBQYXJzZXI6Om5leHQoKQoreworICAgIFN5bGxh
YmxlIHJlc3BvbnNlOworICAgIGludCByZW1haW5pbmcgPSBtX2xlbmd0aCAtIG1faW5kZXg7Cisg
ICAgZm9yICg7IHJlbWFpbmluZyA+IDA7IHJlbWFpbmluZyA9IG1fbGVuZ3RoIC0gbV9pbmRleCkg
eworICAgICAgICBTdHJpbmcga2V5OworICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAg
aWYgKCFtX2tleS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGludCBtYXggPSBtX2VuY29kZXIt
Pm1heGltdW1Mb29rdXBMZW5ndGgoKTsKKyAgICAgICAgICAgIGludCBtYXhMb29rdXBMZW5ndGgg
PSByZW1haW5pbmcgPiBtYXggPyBtYXggOiByZW1haW5pbmc7CisKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSBtYXhMb29rdXBMZW5ndGg7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBr
ZXkgPSBtX3RleHQuc3Vic3RyaW5nKG1faW5kZXgsIGkpOworICAgICAgICAgICAgICAgIHZhbHVl
ID0gbV9lbmNvZGVyLT5sb29rdXAoa2V5KTsKKyAgICAgICAgICAgICAgICBpZighdmFsdWUuaXNO
dWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlOworICAgICAgICAgICAga2V5
ID0gbV9rZXk7CisgICAgICAgICAgICBtX2tleSA9ICIiOworICAgICAgICAgICAgbV92YWx1ZSA9
ICIiOworICAgICAgICB9CisKKyAgICAgICAgcHJvY2Vzcyh2YWx1ZSwga2V5LCByZXNwb25zZSk7
CisKKyAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlID09IFBhcnNlclN0YXRlU3RhcnQpIAorICAg
ICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmdldFN5bGxhYmxlKCk7CisgICAgfQorCisgICAgaWYg
KG1fY3VycmVudFN0YXRlID09IFBhcnNlclN0YXRlQ29uc29uYW50KSAKKyAgICAgICAgaGFuZGxl
Q29uc29uYW50VGVybWluYXRpb24ocmVzcG9uc2UpOworICAgIHJldHVybiByZXNwb25zZS5nZXRT
eWxsYWJsZSgpOworfQorCit2b2lkIFBhcnNlcjo6cHJvY2Vzcyhjb25zdCBTdHJpbmcmIHZhbHVl
LCBjb25zdCBTdHJpbmcmIGtleSwgU3lsbGFibGUmIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAg
ICAgICxib29sIHByZWZpeCwgYm9vbCBzdWZmaXgpCit7CisgICAgU3lsbGFibGVUeXBlIG9sZFR5
cGUgPSBUeXBlVW5rbm93bjsKKyAgICBTdHJpbmcgc3ltYm9sID0gdmFsdWU7CisgICAgaWYgKCF2
YWx1ZS5pc0VtcHR5KCkpIAorICAgICAgICBvbGRUeXBlID0gRm9udFRyYW5zY29kZXI6OmdldFR5
cGUoc3ltYm9sWzBdKTsKKyAgICBlbHNlCisgICAgICAgIHN5bWJvbCA9IGtleTsKKworICAgIFN5
bGxhYmxlVHlwZSB0eXBlID0gdXBkYXRlU3ltYm9sVHlwZShvbGRUeXBlKTsKKyAgICBpZiAodHlw
ZSAhPSBvbGRUeXBlKSAKKyAgICAgICAgc3ltYm9sID0gRm9udFRyYW5zY29kZXI6OmRlcGVuZGVu
dEZvcm0oc3ltYm9sKTsKKworICAgIHN3aXRjaCAobV9jdXJyZW50U3RhdGUpIHsKKyAgICBjYXNl
IFBhcnNlclN0YXRlU3RhcnQ6CisgICAgY2FzZSBQYXJzZXJTdGF0ZVByZWZpeDoKKyAgICAgICAg
bV9pbmRleCArPSBrZXkubGVuZ3RoKCk7CisgICAgICAgIGN1cnJlbnQudXBkYXRlKHN5bWJvbCwg
dHlwZSwgcHJlZml4LCBzdWZmaXgpOworICAgICAgICBpZiAocHJlZml4KQorICAgICAgICAgICAg
bV9jdXJyZW50U3RhdGUgPSBQYXJzZXJTdGF0ZVByZWZpeDsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpZiAodHlwZSA9PSBUeXBlQWNjdSB8fCB0eXBlID09IFR5cGVEaWdpdCB8fCB0eXBl
ID09IFR5cGVVbmtub3duKQorICAgICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gUGFyc2Vy
U3RhdGVTdGFydDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVHlwZUhhbGx1KQorICAg
ICAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gUGFyc2VyU3RhdGVDb25zb25hbnQ7CisgICAg
ICAgICAgICBlbHNlIGlmICh0eXBlID09IFR5cGVIYWxmRm9ybSkKKyAgICAgICAgICAgICAgICBt
X2N1cnJlbnRTdGF0ZSA9IFBhcnNlclN0YXRlSGFsZkZvcm07CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSBQYXJzZXJTdGF0ZVN0YXJ0OworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgUGFyc2VyU3RhdGVDb25zb25hbnQ6Cisg
ICAgY2FzZSBQYXJzZXJTdGF0ZUhhbGZGb3JtOgorICAgICAgICBpbnQgbmV4dFR5cGVzID0gVHlw
ZUFjY3UgfCBUeXBlRGlnaXQgfCBUeXBlVW5rbm93bjsKKyAgICAgICAgaWYgKG1fY3VycmVudFN0
YXRlID09IFBhcnNlclN0YXRlQ29uc29uYW50KQorICAgICAgICAgICAgbmV4dFR5cGVzIHw9IFR5
cGVIYWxsdSB8IFR5cGVIYWxmRm9ybTsKKyAgICAgICAgaWYgKCgodHlwZSAmIG5leHRUeXBlcykg
fHwgcHJlZml4KSAmJiAhc3VmZml4KSB7CisgICAgICAgICAgICBtX2tleSA9IGtleTsKKyAgICAg
ICAgICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIG1fY3VycmVudFN0YXRlID0gUGFy
c2VyU3RhdGVTdGFydDsKKyAgICAgICAgICAgIGhhbmRsZUNvbnNvbmFudFRlcm1pbmF0aW9uKGN1
cnJlbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1f
Y3VycmVudFN0YXRlID09IFBhcnNlclN0YXRlSGFsZkZvcm0gJiYgdHlwZSA9PSBUeXBlSGFsbHUp
CisgICAgICAgICAgICBtX2N1cnJlbnRTdGF0ZSA9IFBhcnNlclN0YXRlQ29uc29uYW50OworICAg
ICAgICBtX2luZGV4ICs9IGtleS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGlzQ3VycmVudFN5bGxh
YmxlQ29tcGxldGUodHlwZSkpIAorICAgICAgICAgICAgbV9jdXJyZW50U3RhdGUgPSBQYXJzZXJT
dGF0ZVN0YXJ0OworICAgICAgICBjdXJyZW50LnVwZGF0ZShzeW1ib2wsIHR5cGUsIHByZWZpeCwg
c3VmZml4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBQYXJzZXI6Om1vcmUo
KQoreworICAgIHJldHVybiBtX2luZGV4IDwgbV9sZW5ndGg7Cit9CisKK2Jvb2wgUGFyc2VyOjpo
YW5kbGVDb25zb25hbnRUZXJtaW5hdGlvbihTeWxsYWJsZSYgc3lsbGFibGUpCit7CisgICAgcmV0
dXJuIGZhbHNlOworCit9CisKK2Jvb2wgUGFyc2VyOjppc0N1cnJlbnRTeWxsYWJsZUNvbXBsZXRl
KFN5bGxhYmxlVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IFR5cGVBY2N1TW9kIHx8
IHR5cGUgPT0gVHlwZUd1bmludGFtIHx8IHR5cGUgPT0gVHlwZUhhbGx1TW9kOworfQorCitTeWxs
YWJsZVR5cGUgUGFyc2VyOjp1cGRhdGVTeW1ib2xUeXBlKFN5bGxhYmxlVHlwZSB0eXBlKQorewor
ICAgIHJldHVybiB0eXBlOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvdHJhbnNjb2Rlci9QYXJzZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmV4
ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIv
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIv
UGFyc2VyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rl
ci9QYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgUGFyc2VyX2gKKyNkZWZpbmUgUGFyc2VyX2gKKworI2luY2x1ZGUgIkZvbnRFbmNvZGVyLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisj
aW5jbHVkZSAiU3lsbGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBUcmFuc2Zvcm1lclVuaWNv
ZGUsCisgICAgVHJhbnNmb3JtZXJJU0NJSSwKKyAgICBUcmFuc2Zvcm1lcklUcmFucywKKyAgICBU
cmFuc2Zvcm1lclRTQ0lJLAorICAgIFRyYW5zZm9ybWVyVEFCLAorICAgIFRyYW5zZm9ybWVyVEFN
LAorICAgIFRyYW5zZm9ybWVyRHluYW1pY0ZvbnRzCit9IFRyYW5zZm9ybWVyVHlwZTsKKwordHlw
ZWRlZiBlbnVtCit7CisgICAgUGFyc2VyU3RhdGVTdGFydCwKKyAgICBQYXJzZXJTdGF0ZUNvbnNv
bmFudCwKKyAgICBQYXJzZXJTdGF0ZVByZWZpeCwKKyAgICBQYXJzZXJTdGF0ZUhhbGZGb3JtCit9
IFBhcnNlclN0YXRlOworCisKK2NsYXNzIFBhcnNlciB7CitwdWJsaWM6CisgICAgUGFyc2VyKGNv
bnN0IFN0cmluZyYgaW5wdXQsIEZvbnRFbmNvZGVyKiBlbmNvZGVyKTsKKyAgICB2b2lkIHByb2Nl
c3MoY29uc3QgU3RyaW5nJiB2YWx1ZQorICAgICAgICAgICAgLGNvbnN0IFN0cmluZyYga2V5Cisg
ICAgICAgICAgICAsU3lsbGFibGUmIHN5bGxhYmxlCisgICAgICAgICAgICAsYm9vbCBwcmVmaXgg
PSBmYWxzZQorICAgICAgICAgICAgLGJvb2wgc3VmZml4ID0gZmFsc2UpOworICAgIHZpcnR1YWwg
U3RyaW5nIG5leHQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBtb3JlKCk7CisgICAgdmlydHVhbCBi
b29sIGhhbmRsZUNvbnNvbmFudFRlcm1pbmF0aW9uKFN5bGxhYmxlJiBzeWxsYWJsZSk7CisgICAg
dmlydHVhbCBib29sIGlzQ3VycmVudFN5bGxhYmxlQ29tcGxldGUoU3lsbGFibGVUeXBlIHR5cGUp
OworICAgIHZpcnR1YWwgU3lsbGFibGVUeXBlIHVwZGF0ZVN5bWJvbFR5cGUoU3lsbGFibGVUeXBl
IHR5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgRm9udEVuY29kZXIqIG1fZW5jb2RlcjsKKyAgICBT
dHJpbmcgbV9rZXk7CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAgaW50IG1faW5kZXg7CisgICAg
aW50IG1fbGVuZ3RoOworICAgIFN0cmluZyBtX3RleHQ7CisgICAgUGFyc2VyU3RhdGUgbV9jdXJy
ZW50U3RhdGU7Cit9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvUGFyc2VyLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rl
ci9TeWxsYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5z
Y29kZXIvU3lsbGFibGUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L3RyYW5zY29kZXIvU3lsbGFibGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeWxsYWJsZS5oIgorCisj
aW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUKK3sKKwordm9pZCBTeWxsYWJsZTo6dXBkYXRlKGNvbnN0IFN0cmluZyYg
aW5wdXQsIFN5bGxhYmxlVHlwZSB0eXBlCisgICAgICAgICxib29sIHByZWZpeCwgYm9vbCBzdWZm
aXgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGgoKTsgaSsrKSB7Cisg
ICAgICAgIGlmIChpICE9IDApCisgICAgICAgICAgICB0eXBlID0gRm9udFRyYW5zY29kZXI6Omdl
dFR5cGUoaW5wdXRbaV0pOworICAgICAgICBpZiAodHlwZSA9PSBUeXBlQWNjdSB8fCB0eXBlID09
IFR5cGVEaWdpdCB8fCB0eXBlID09IFR5cGVIYWxsdSAKKyAgICAgICAgICAgIHx8IHR5cGUgPT0g
VHlwZVVua25vd24pCisgICAgICAgICAgICBtX2JvZHkuYXBwZW5kKGlucHV0W2ldKTsKKyAgICAg
ICAgZWxzZSBpZiAodHlwZSA9PSBUeXBlSGFsZkZvcm0pIHsKKyAgICAgICAgICAgIGlmIChzdWZm
aXgpCisgICAgICAgICAgICAgICAgbV9ib2R5Lmluc2VydChpbnB1dC5jaGFyYWN0ZXJzKCkgKyBp
LDEsMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9ib2R5LmFwcGVuZChp
bnB1dFtpXSk7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBUeXBlR3VuaW50YW0pIHsKKyAg
ICAgICAgICAgIGlmIChwcmVmaXgpCisgICAgICAgICAgICAgICAgbV9wcmVmaXhHdW5pbnRhbS5h
cHBlbmQoaW5wdXRbaV0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ3Vu
aW50YW0uYXBwZW5kKGlucHV0W2ldKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFR5cGVW
YXR0dSkgeworICAgICAgICAgICAgaWYgKHByZWZpeCkKKyAgICAgICAgICAgICAgICBtX3ByZWZp
eFZhdHR1LmFwcGVuZChpbnB1dFtpXSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9ib2R5LmFwcGVuZChpbnB1dFtpXSk7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBU
eXBlQWNjdU1vZCkKKyAgICAgICAgICAgIG1fdm93ZWxNb2RpZmllci5hcHBlbmQoaW5wdXRbaV0p
OworICAgICAgICBlbHNlIGlmICh0eXBlID09IFR5cGVIYWxsdU1vZCkKKyAgICAgICAgICAgIG1f
Y29uc29uYW50TW9kaWZpZXIuYXBwZW5kKGlucHV0W2ldKTsKKyAgICB9Cit9CisKK2ludCBTeWxs
YWJsZTo6bGVuZ3RoKCkKK3sKKyAgICByZXR1cm4gbV9ib2R5Lmxlbmd0aCgpICsgbV9wcmVmaXhH
dW5pbnRhbS5sZW5ndGgoKSAKKyAgICAgICAgKyBtX2d1bmludGFtLmxlbmd0aCgpICsgbV9wcmVm
aXhWYXR0dS5sZW5ndGgoKQorICAgICAgICArIG1fdm93ZWxNb2RpZmllci5sZW5ndGgoKSArIG1f
Y29uc29uYW50TW9kaWZpZXIubGVuZ3RoKCk7Cit9CisKK3ZvaWQgU3lsbGFibGU6OmZvbGRHdW5p
bnRhbSgpCit7CisgICAgbV9ndW5pbnRhbSArPSBtX3ByZWZpeEd1bmludGFtOworICAgIG1fcHJl
Zml4R3VuaW50YW0gPSAiIjsKK30KKwordm9pZCBTeWxsYWJsZTo6Zm9sZENvbnNvbmFudE1vZGlm
aWVycygpCit7CisgICAgbV9ib2R5ICs9IG1fcHJlZml4VmF0dHU7CisgICAgbV9wcmVmaXhWYXR0
dSA9ICIiOworfQorCitTdHJpbmcgU3lsbGFibGU6OmdldFN5bGxhYmxlKCkKK3sKKyAgICByZXR1
cm4gbV9ib2R5ICsgbV9jb25zb25hbnRNb2RpZmllciArIG1fZ3VuaW50YW0gKyBtX3Zvd2VsTW9k
aWZpZXI7Cit9CisKK1N0cmluZyBTeWxsYWJsZTo6Z3VuaW50YW0oKQoreworICAgIHJldHVybiBt
X2d1bmludGFtOworfQorCit2b2lkIFN5bGxhYmxlOjpzZXRHdW5pbnRhbShjb25zdCBTdHJpbmcm
IGd1bmludGFtKSAKK3sKKyAgICBtX2d1bmludGFtID0gZ3VuaW50YW07Cit9CisKK30KClByb3Bl
cnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL1N5bGxhYmxl
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL1N5bGxhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvU3lsbGFibGUuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL1N5bGxhYmxlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFN5bGxhYmxlX2gKKyNkZWZpbmUg
U3lsbGFibGVfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJp
bmdJbXBsLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0eXBlZGVmIGVudW0KK3sKKyAgICBUeXBlQWNjdSA9IDB4MDAwMSwKKyAgICBUeXBl
R3VuaW50YW0gPSAweDAwMDIsCisgICAgVHlwZUFjY3VNb2QgPSAweDAwMDQsCisgICAgVHlwZURp
Z2l0ID0gMHgwMDA4LAorICAgIFR5cGVWYXR0dSA9IDB4MDAxMCwKKyAgICBUeXBlSGFsbHUgPSAw
eDAwMjAsCisgICAgVHlwZUhhbGx1TW9kID0gMHgwMDQwLAorICAgIFR5cGVIYWxmRm9ybSA9IDB4
MDA4MCwKKyAgICBUeXBlVW5rbm93biA9IDB4MDEwMAorfSBTeWxsYWJsZVR5cGU7CisKK2NsYXNz
IFN5bGxhYmxlIHsKK3B1YmxpYzoKKyAgICBTeWxsYWJsZSgpCisgICAgICAgIDogbV9ib2R5KCIi
KQorICAgICAgICAsIG1fcHJlZml4R3VuaW50YW0oIiIpCisgICAgICAgICwgbV9ndW5pbnRhbSgi
IikKKyAgICAgICAgLCBtX3ByZWZpeFZhdHR1KCIiKQorICAgICAgICAsIG1fdm93ZWxNb2RpZmll
cigiIikKKyAgICAgICAgLCBtX2NvbnNvbmFudE1vZGlmaWVyKCIiKQorICAgIHsKKyAgICB9Cisg
ICAgU3RyaW5nIGd1bmludGFtKCk7CisgICAgdm9pZCBzZXRHdW5pbnRhbShjb25zdCBTdHJpbmcm
IGd1bmludGFtKTsKKyAgICB2b2lkIHVwZGF0ZShjb25zdCBTdHJpbmcmIGlucHV0CisgICAgICAg
ICxTeWxsYWJsZVR5cGUgdHlwZQorICAgICAgICAsYm9vbCBwcmVmaXgKKyAgICAgICAgLGJvb2wg
c3VmZml4KTsKKyAgICBpbnQgbGVuZ3RoKCk7CisgICAgdm9pZCBmb2xkR3VuaW50YW0oKTsKKyAg
ICB2b2lkIGZvbGRDb25zb25hbnRNb2RpZmllcnMoKTsKKyAgICBTdHJpbmcgZ2V0U3lsbGFibGUo
KTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9ib2R5OworICAgIFN0cmluZyBtX3ByZWZpeEd1
bmludGFtOworICAgIFN0cmluZyBtX2d1bmludGFtOworICAgIFN0cmluZyBtX3ByZWZpeFZhdHR1
OworICAgIFN0cmluZyBtX3Zvd2VsTW9kaWZpZXI7CisgICAgU3RyaW5nIG1fY29uc29uYW50TW9k
aWZpZXI7Cit9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvU3lsbGFibGUuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpl
eGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVy
L1RTQ0lJRW5jb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3Ry
YW5zY29kZXIvVFNDSUlFbmNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC90cmFuc2NvZGVyL1RTQ0lJRW5jb2Rlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRTQ0lJ
RW5jb2Rlci5oIgorCisjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKworVFNDSUlFbmNvZGVyOjpUU0NJSUVu
Y29kZXIoKQorICAgIDogRm9udEVuY29kZXIoMSkKK3sKKyAgICBVQ2hhciBpbltdID0ge3Zpc2Fy
Z2EsIHZvd2VsQSwgdm93ZWxBQSwgdm93ZWxJMSwgdm93ZWxJMiwgdm93ZWxJSSwgdm93ZWxVLCAK
KyAgICAgICAgdm93ZWxVVSwgdm93ZWxFLCB2b3dlbEVFLCB2b3dlbEFJLCB2b3dlbE8sIHZvd2Vs
T08sIHZvd2VsQVUsIGNvbnNudEtBLCAKKyAgICAgICAgY29uc250TkdBLCBjb25zbnRDQSwgY29u
c250SkEsIGNvbnNudE5ZQSwgY29uc250VFRBLCBjb25zbnROTkEsIGNvbnNudFRBLCAKKyAgICAg
ICAgY29uc250TkEsIGNvbnNudE5OTkEsIGNvbnNudFBBLCBjb25zbnRNQSwgY29uc250WUEsIGNv
bnNudFJBLCBjb25zbnRMQSwgCisgICAgICAgIGNvbnNudFZBLCBjb25zbnRTU0EsIGNvbnNudFNB
LCBjb25zbnRIQSwgY29uc250TExBLCBjb25zbnRaSEEsIGNvbnNudFJSQSwgCisgICAgICAgIGNv
bmpjdEtTSCwgY29uamN0U1JJSSwgdm93ZWxzbkFBLCB2b3dlbHNuSSwgdm93ZWxzbklJLCB2b3dl
bHNuVSwgCisgICAgICAgIHZvd2Vsc25VVSwgdm93ZWxzbkUsIHZvd2Vsc25FRSwgdm93ZWxzbkFJ
LCB2b3dlbHNuQVVMRU4sIGNvbWJvS1UsIAorICAgICAgICBjb21ib0tVVSwgY29tYm9LUFVMTEks
IGNvbWJvTkdVLCBjb21ib05HVVUsIGNvbWJvTkdQVUxMSSwgY29tYm9DVSwgCisgICAgICAgIGNv
bWJvQ1VVLCBjb21ib0NQVUxMSSwgY29tYm9KUFVMTEksIGNvbWJvTllVLCBjb21ib05ZVVUsIGNv
bWJvTllQVUxMSSwgCisgICAgICAgIGNvbWJvVFRJLCBjb21ib1RUSUksIGNvbWJvVFRVLCBjb21i
b1RUVVUsIGNvbWJvVFRQVUxMSSwgY29tYm9OTlUsIAorICAgICAgICBjb21ib05OVVUsIGNvbWJv
Tk5QVUxMSSwgY29tYm9UVSwgY29tYm9UVVUsIGNvbWJvVFBVTExJLCBjb21ib05VLCAKKyAgICAg
ICAgY29tYm9OVVUsIGNvbWJvTlBVTExJLCBjb21ib05OTlUsIGNvbWJvTk5OVVUsIGNvbWJvTk5O
UFVMTEksIGNvbWJvUFUsIAorICAgICAgICBjb21ib1BVVSwgY29tYm9QUFVMTEksIGNvbWJvTVUs
IGNvbWJvTVVVLCBjb21ib01QVUxMSSwgY29tYm9ZVSwgY29tYm9ZVVUsIAorICAgICAgICBjb21i
b1lQVUxMSSwgY29tYm9SVSwgY29tYm9SVVUsIGNvbWJvUlBVTExJLCBjb21ib0xVLCBjb21ib0xV
VSwgCisgICAgICAgIGNvbWJvTFBVTExJLCBjb21ib1ZVLCBjb21ib1ZVVSwgY29tYm9WUFVMTEks
IGNvbWJvU1NQVUxMSSwgY29tYm9TUFVMTEksIAorICAgICAgICBjb21ib0hQVUxMSSwgY29tYm9M
TFUsIGNvbWJvTExVVSwgY29tYm9MTFBVTExJLCBjb21ib1pIVSwgY29tYm9aSFVVLCAKKyAgICAg
ICAgY29tYm9aSFBVTExJLCBjb21ib1JSVSwgY29tYm9SUlVVLCBjb21ib1JSUFVMTEksIGNvbWJv
S1NIUFVMTEksIAorICAgICAgICBMUVRTSU5HTEUsIFJRVFNJTkdMRSwgTFFURE9VQkxFLCBSUVRE
T1VCTEUsIGRpZ2l0WkVSTywgZGlnaXRPTkUsIAorICAgICAgICBkaWdpdFRXTywgZGlnaXRUSFJF
RSwgZGlnaXRGT1VSLCBkaWdpdEZJVkUsIGRpZ2l0U0lYLCBkaWdpdFNFVkVOLCAKKyAgICAgICAg
ZGlnaXRFSUdIVCwgZGlnaXROSU5FLCBkaWdpdFRFTiwgZGlnaXRIVU5EUkVELCBkaWdpdFRIT1VT
QU5EIH07IAorCisgICAgVUNoYXIgb3V0W10gPSB7Rm9udFRyYW5zY29kZXI6OnZpc2FyZ2EsIEZv
bnRUcmFuc2NvZGVyOjp2b3dlbEEsIEZvbnRUcmFuc2NvZGVyOjp2b3dlbEFBLCAKKyAgICAgICAg
Rm9udFRyYW5zY29kZXI6OnZvd2VsSSwgRm9udFRyYW5zY29kZXI6OnZvd2VsSSwgRm9udFRyYW5z
Y29kZXI6OnZvd2VsSUksIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6dm93ZWxVLCBGb250VHJh
bnNjb2Rlcjo6dm93ZWxVVSwgRm9udFRyYW5zY29kZXI6OnZvd2VsRSwgCisgICAgICAgIEZvbnRU
cmFuc2NvZGVyOjp2b3dlbEVFLCBGb250VHJhbnNjb2Rlcjo6dm93ZWxBSSwgRm9udFRyYW5zY29k
ZXI6OnZvd2VsTywgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjp2b3dlbE9PLCBGb250VHJhbnNj
b2Rlcjo6dm93ZWxBVSwgRm9udFRyYW5zY29kZXI6OmNvbnNudEtBLCAKKyAgICAgICAgRm9udFRy
YW5zY29kZXI6OmNvbnNudE5HQSwgRm9udFRyYW5zY29kZXI6OmNvbnNudENBLCBGb250VHJhbnNj
b2Rlcjo6Y29uc250SkEsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6Y29uc250TllBLCBGb250
VHJhbnNjb2Rlcjo6Y29uc250VFRBLCBGb250VHJhbnNjb2Rlcjo6Y29uc250Tk5BLCAKKyAgICAg
ICAgRm9udFRyYW5zY29kZXI6OmNvbnNudFRBLCBGb250VHJhbnNjb2Rlcjo6Y29uc250TkEsIEZv
bnRUcmFuc2NvZGVyOjpjb25zbnROTk5BLCAKKyAgICAgICAgRm9udFRyYW5zY29kZXI6OmNvbnNu
dFBBLCBGb250VHJhbnNjb2Rlcjo6Y29uc250TUEsIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRZQSwg
CisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRSQSwgRm9udFRyYW5zY29kZXI6OmNvbnNu
dExBLCBGb250VHJhbnNjb2Rlcjo6Y29uc250VkEsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6
Y29uc250U1NBLCBGb250VHJhbnNjb2Rlcjo6Y29uc250U0EsIEZvbnRUcmFuc2NvZGVyOjpjb25z
bnRIQSwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRMTEEsIEZvbnRUcmFuc2NvZGVy
Ojpjb25zbnRaSEEsIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRSUkEsIAorICAgICAgICBGb250VHJh
bnNjb2Rlcjo6Y29uc250S0EgLCBGb250VHJhbnNjb2Rlcjo6dmF0dHVTU0EsIEZvbnRUcmFuc2Nv
ZGVyOjpjb25zbnRTQSAsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6dmF0dHVSQSAsIEZvbnRU
cmFuc2NvZGVyOjp2b3dlbHNuSUksIEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuQUEsIAorICAgICAg
ICBGb250VHJhbnNjb2Rlcjo6dm93ZWxzbkksIEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuSUksIEZv
bnRUcmFuc2NvZGVyOjp2b3dlbHNuVSwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNu
VVUsIEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuRSwgRm9udFRyYW5zY29kZXI6OnZvd2Vsc25FRSwg
CisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuQUksIEZvbnRUcmFuc2NvZGVyOjp2b3dl
bHNuQVVMRU4sIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRLQSAsIAorICAgICAgICBGb250VHJhbnNj
b2Rlcjo6dm93ZWxzblUsIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRLQSAsIEZvbnRUcmFuc2NvZGVy
Ojp2b3dlbHNuVVUsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6Y29uc250S0EgLCBGb250VHJh
bnNjb2Rlcjo6cHVsbGksIEZvbnRUcmFuc2NvZGVyOjpjb25zbnROR0EgLCAKKyAgICAgICAgRm9u
dFRyYW5zY29kZXI6OnZvd2Vsc25VLCBGb250VHJhbnNjb2Rlcjo6Y29uc250TkdBICwgRm9udFRy
YW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpjb25zbnROR0Eg
LCBGb250VHJhbnNjb2Rlcjo6cHVsbGksIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRDQSAsIAorICAg
ICAgICBGb250VHJhbnNjb2Rlcjo6dm93ZWxzblUsIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRDQSAs
IEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuVVUsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6Y29u
c250Q0EgLCBGb250VHJhbnNjb2Rlcjo6cHVsbGksIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRKQSAs
IAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6cHVsbGksIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRO
WUEgLCBGb250VHJhbnNjb2Rlcjo6dm93ZWxzblUsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6
Y29uc250TllBICwgRm9udFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgRm9udFRyYW5zY29kZXI6OmNv
bnNudE5ZQSAsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6cHVsbGksIEZvbnRUcmFuc2NvZGVy
Ojpjb25zbnRUVEEgLCBGb250VHJhbnNjb2Rlcjo6dm93ZWxzbkksIAorICAgICAgICBGb250VHJh
bnNjb2Rlcjo6Y29uc250VFRBICwgRm9udFRyYW5zY29kZXI6OnZvd2Vsc25JSSwgRm9udFRyYW5z
Y29kZXI6OmNvbnNudFRUQSAsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6dm93ZWxzblUsIEZv
bnRUcmFuc2NvZGVyOjpjb25zbnRUVEEgLCBGb250VHJhbnNjb2Rlcjo6dm93ZWxzblVVLCAKKyAg
ICAgICAgRm9udFRyYW5zY29kZXI6OmNvbnNudFRUQSAsIEZvbnRUcmFuc2NvZGVyOjpwdWxsaSwg
Rm9udFRyYW5zY29kZXI6OmNvbnNudE5OQSAsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6dm93
ZWxzblUsIEZvbnRUcmFuc2NvZGVyOjpjb25zbnROTkEgLCBGb250VHJhbnNjb2Rlcjo6dm93ZWxz
blVVLCAKKyAgICAgICAgRm9udFRyYW5zY29kZXI6OmNvbnNudE5OQSAsIEZvbnRUcmFuc2NvZGVy
OjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNvbnNudFRBICwgCisgICAgICAgIEZvbnRUcmFuc2Nv
ZGVyOjp2b3dlbHNuVSwgRm9udFRyYW5zY29kZXI6OmNvbnNudFRBICwgRm9udFRyYW5zY29kZXI6
OnZvd2Vsc25VVSwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRUQSAsIEZvbnRUcmFu
c2NvZGVyOjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNvbnNudE5BICwgCisgICAgICAgIEZvbnRU
cmFuc2NvZGVyOjp2b3dlbHNuVSwgRm9udFRyYW5zY29kZXI6OmNvbnNudE5BICwgRm9udFRyYW5z
Y29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpjb25zbnROQSAsIEZv
bnRUcmFuc2NvZGVyOjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNvbnNudE5OTkEgLCAKKyAgICAg
ICAgRm9udFRyYW5zY29kZXI6OnZvd2Vsc25VLCBGb250VHJhbnNjb2Rlcjo6Y29uc250Tk5OQSAs
IEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuVVUsIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6Y29u
c250Tk5OQSAsIEZvbnRUcmFuc2NvZGVyOjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNvbnNudFBB
ICwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuVSwgRm9udFRyYW5zY29kZXI6OmNv
bnNudFBBICwgRm9udFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAgIEZvbnRUcmFuc2Nv
ZGVyOjpjb25zbnRQQSAsIEZvbnRUcmFuc2NvZGVyOjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNv
bnNudE1BICwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuVSwgRm9udFRyYW5zY29k
ZXI6OmNvbnNudE1BICwgRm9udFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAgIEZvbnRU
cmFuc2NvZGVyOjpjb25zbnRNQSAsIEZvbnRUcmFuc2NvZGVyOjpwdWxsaSwgRm9udFRyYW5zY29k
ZXI6OmNvbnNudFlBICwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuVSwgRm9udFRy
YW5zY29kZXI6OmNvbnNudFlBICwgRm9udFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisgICAgICAg
IEZvbnRUcmFuc2NvZGVyOjpjb25zbnRZQSAsIEZvbnRUcmFuc2NvZGVyOjpwdWxsaSwgRm9udFRy
YW5zY29kZXI6OmNvbnNudFJBICwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuVSwg
Rm9udFRyYW5zY29kZXI6OmNvbnNudFJBICwgRm9udFRyYW5zY29kZXI6OnZvd2Vsc25VVSwgCisg
ICAgICAgIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRSQSAsIEZvbnRUcmFuc2NvZGVyOjpwdWxsaSwg
Rm9udFRyYW5zY29kZXI6OmNvbnNudExBICwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjp2b3dl
bHNuVSwgRm9udFRyYW5zY29kZXI6OmNvbnNudExBICwgRm9udFRyYW5zY29kZXI6OnZvd2Vsc25V
VSwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRMQSAsIEZvbnRUcmFuc2NvZGVyOjpw
dWxsaSwgRm9udFRyYW5zY29kZXI6OmNvbnNudFZBICwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVy
Ojp2b3dlbHNuVSwgRm9udFRyYW5zY29kZXI6OmNvbnNudFZBICwgRm9udFRyYW5zY29kZXI6OnZv
d2Vsc25VVSwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRWQSAsIEZvbnRUcmFuc2Nv
ZGVyOjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNvbnNudFNTQSAsIAorICAgICAgICBGb250VHJh
bnNjb2Rlcjo6cHVsbGksIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRTQSAsIEZvbnRUcmFuc2NvZGVy
OjpwdWxsaSwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRIQSAsIEZvbnRUcmFuc2Nv
ZGVyOjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNvbnNudExMQSAsIAorICAgICAgICBGb250VHJh
bnNjb2Rlcjo6dm93ZWxzblUsIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRMTEEgLCBGb250VHJhbnNj
b2Rlcjo6dm93ZWxzblVVLCAKKyAgICAgICAgRm9udFRyYW5zY29kZXI6OmNvbnNudExMQSAsIEZv
bnRUcmFuc2NvZGVyOjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNvbnNudFpIQSAsIAorICAgICAg
ICBGb250VHJhbnNjb2Rlcjo6dm93ZWxzblUsIEZvbnRUcmFuc2NvZGVyOjpjb25zbnRaSEEgLCBG
b250VHJhbnNjb2Rlcjo6dm93ZWxzblVVLCAKKyAgICAgICAgRm9udFRyYW5zY29kZXI6OmNvbnNu
dFpIQSAsIEZvbnRUcmFuc2NvZGVyOjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNvbnNudFJSQSAs
IAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6dm93ZWxzblUsIEZvbnRUcmFuc2NvZGVyOjpjb25z
bnRSUkEgLCBGb250VHJhbnNjb2Rlcjo6dm93ZWxzblVVLCAKKyAgICAgICAgRm9udFRyYW5zY29k
ZXI6OmNvbnNudFJSQSAsIEZvbnRUcmFuc2NvZGVyOjpwdWxsaSwgRm9udFRyYW5zY29kZXI6OmNv
bnNudEtBICwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjp2YXR0dVNTQSAsIEZvbnRUcmFuc2Nv
ZGVyOjpwdWxsaSwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAKKyAgICAgICAgRm9u
dFRyYW5zY29kZXI6OmRpZ2l0WkVSTywgRm9udFRyYW5zY29kZXI6OmRpZ2l0T05FLCBGb250VHJh
bnNjb2Rlcjo6ZGlnaXRUV08sIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6ZGlnaXRUSFJFRSwg
Rm9udFRyYW5zY29kZXI6OmRpZ2l0Rk9VUiwgRm9udFRyYW5zY29kZXI6OmRpZ2l0RklWRSwgCisg
ICAgICAgIEZvbnRUcmFuc2NvZGVyOjpkaWdpdFNJWCwgRm9udFRyYW5zY29kZXI6OmRpZ2l0U0VW
RU4sIEZvbnRUcmFuc2NvZGVyOjpkaWdpdEVJR0hULCAKKyAgICAgICAgRm9udFRyYW5zY29kZXI6
OmRpZ2l0TklORSwgRm9udFRyYW5zY29kZXI6OmRpZ2l0VEVOLCBGb250VHJhbnNjb2Rlcjo6ZGln
aXRIVU5EUkVELCAKKyAgICAgICAgRm9udFRyYW5zY29kZXI6OmRpZ2l0VEhPVVNBTkQgfTsKKwor
ICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDAsIDEpLCBTdHJpbmcob3V0ICsgMCwg
MSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDEsIDEpLCBTdHJpbmcob3V0
ICsgMSwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDIsIDEpLCBTdHJp
bmcob3V0ICsgMiwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDMsIDEp
LCBTdHJpbmcob3V0ICsgMywgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiAr
IDQsIDEpLCBTdHJpbmcob3V0ICsgNCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmlu
ZyhpbiArIDUsIDEpLCBTdHJpbmcob3V0ICsgNSwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0
KFN0cmluZyhpbiArIDYsIDEpLCBTdHJpbmcob3V0ICsgNiwgMSkpOworICAgIG1fbG9va3VwVGFi
bGUuc2V0KFN0cmluZyhpbiArIDcsIDEpLCBTdHJpbmcob3V0ICsgNywgMSkpOworICAgIG1fbG9v
a3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDgsIDEpLCBTdHJpbmcob3V0ICsgOCwgMSkpOworICAg
IG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDksIDEpLCBTdHJpbmcob3V0ICsgOSwgMSkp
OworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDEwLCAxKSwgU3RyaW5nKG91dCAr
IDEwLCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTEsIDEpLCBTdHJp
bmcob3V0ICsgMTEsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMiwg
MSksIFN0cmluZyhvdXQgKyAxMiwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhp
biArIDEzLCAxKSwgU3RyaW5nKG91dCArIDEzLCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQo
U3RyaW5nKGluICsgMTQsIDEpLCBTdHJpbmcob3V0ICsgMTQsIDEpKTsKKyAgICBtX2xvb2t1cFRh
YmxlLnNldChTdHJpbmcoaW4gKyAxNSwgMSksIFN0cmluZyhvdXQgKyAxNSwgMSkpOworICAgIG1f
bG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDE2LCAxKSwgU3RyaW5nKG91dCArIDE2LCAxKSk7
CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTcsIDEpLCBTdHJpbmcob3V0ICsg
MTcsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxOCwgMSksIFN0cmlu
ZyhvdXQgKyAxOCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDE5LCAx
KSwgU3RyaW5nKG91dCArIDE5LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGlu
ICsgMjAsIDEpLCBTdHJpbmcob3V0ICsgMjAsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChT
dHJpbmcoaW4gKyAyMSwgMSksIFN0cmluZyhvdXQgKyAyMSwgMSkpOworICAgIG1fbG9va3VwVGFi
bGUuc2V0KFN0cmluZyhpbiArIDIyLCAxKSwgU3RyaW5nKG91dCArIDIyLCAxKSk7CisgICAgbV9s
b29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMjMsIDEpLCBTdHJpbmcob3V0ICsgMjMsIDEpKTsK
KyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAyNCwgMSksIFN0cmluZyhvdXQgKyAy
NCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDI1LCAxKSwgU3RyaW5n
KG91dCArIDI1LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMjYsIDEp
LCBTdHJpbmcob3V0ICsgMjYsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4g
KyAyNywgMSksIFN0cmluZyhvdXQgKyAyNywgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0
cmluZyhpbiArIDI4LCAxKSwgU3RyaW5nKG91dCArIDI4LCAxKSk7CisgICAgbV9sb29rdXBUYWJs
ZS5zZXQoU3RyaW5nKGluICsgMjksIDEpLCBTdHJpbmcob3V0ICsgMjksIDEpKTsKKyAgICBtX2xv
b2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAzMCwgMSksIFN0cmluZyhvdXQgKyAzMCwgMSkpOwor
ICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDMxLCAxKSwgU3RyaW5nKG91dCArIDMx
LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMzIsIDEpLCBTdHJpbmco
b3V0ICsgMzIsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAzMywgMSks
IFN0cmluZyhvdXQgKyAzMywgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiAr
IDM0LCAxKSwgU3RyaW5nKG91dCArIDM0LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3Ry
aW5nKGluICsgMzUsIDEpLCBTdHJpbmcob3V0ICsgMzUsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxl
LnNldChTdHJpbmcoaW4gKyAzNiwgMSksIFN0cmluZyhvdXQgKyAzNiwgMikpOworICAgIG1fbG9v
a3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDM3LCAxKSwgU3RyaW5nKG91dCArIDM4LCAzKSk7Cisg
ICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMzgsIDEpLCBTdHJpbmcob3V0ICsgNDEs
IDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAzOSwgMSksIFN0cmluZyhv
dXQgKyA0MiwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDQwLCAxKSwg
U3RyaW5nKG91dCArIDQzLCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsg
NDEsIDEpLCBTdHJpbmcob3V0ICsgNDQsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJp
bmcoaW4gKyA0MiwgMSksIFN0cmluZyhvdXQgKyA0NSwgMSkpOworICAgIG1fbG9va3VwVGFibGUu
c2V0KFN0cmluZyhpbiArIDQzLCAxKSwgU3RyaW5nKG91dCArIDQ2LCAxKSk7CisgICAgbV9sb29r
dXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNDQsIDEpLCBTdHJpbmcob3V0ICsgNDcsIDEpKTsKKyAg
ICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA0NSwgMSksIFN0cmluZyhvdXQgKyA0OCwg
MSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDQ2LCAxKSwgU3RyaW5nKG91
dCArIDQ5LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNDcsIDEpLCBT
dHJpbmcob3V0ICsgNTAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA0
OCwgMSksIFN0cmluZyhvdXQgKyA1MiwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmlu
ZyhpbiArIDQ5LCAxKSwgU3RyaW5nKG91dCArIDU0LCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5z
ZXQoU3RyaW5nKGluICsgNTAsIDEpLCBTdHJpbmcob3V0ICsgNTYsIDIpKTsKKyAgICBtX2xvb2t1
cFRhYmxlLnNldChTdHJpbmcoaW4gKyA1MSwgMSksIFN0cmluZyhvdXQgKyA1OCwgMikpOworICAg
IG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDUyLCAxKSwgU3RyaW5nKG91dCArIDYwLCAy
KSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNTMsIDEpLCBTdHJpbmcob3V0
ICsgNjIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA1NCwgMSksIFN0
cmluZyhvdXQgKyA2NCwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDU1
LCAxKSwgU3RyaW5nKG91dCArIDY2LCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5n
KGluICsgNTYsIDEpLCBTdHJpbmcob3V0ICsgNjgsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNl
dChTdHJpbmcoaW4gKyA1NywgMSksIFN0cmluZyhvdXQgKyA3MCwgMikpOworICAgIG1fbG9va3Vw
VGFibGUuc2V0KFN0cmluZyhpbiArIDU4LCAxKSwgU3RyaW5nKG91dCArIDcyLCAyKSk7CisgICAg
bV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNTksIDEpLCBTdHJpbmcob3V0ICsgNzQsIDIp
KTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA2MCwgMSksIFN0cmluZyhvdXQg
KyA3NiwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDYxLCAxKSwgU3Ry
aW5nKG91dCArIDc4LCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNjIs
IDEpLCBTdHJpbmcob3V0ICsgODAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmco
aW4gKyA2MywgMSksIFN0cmluZyhvdXQgKyA4MiwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0
KFN0cmluZyhpbiArIDY0LCAxKSwgU3RyaW5nKG91dCArIDg0LCAyKSk7CisgICAgbV9sb29rdXBU
YWJsZS5zZXQoU3RyaW5nKGluICsgNjUsIDEpLCBTdHJpbmcob3V0ICsgODYsIDIpKTsKKyAgICBt
X2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA2NiwgMSksIFN0cmluZyhvdXQgKyA4OCwgMikp
OworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDY3LCAxKSwgU3RyaW5nKG91dCAr
IDkwLCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgNjgsIDEpLCBTdHJp
bmcob3V0ICsgOTIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA2OSwg
MSksIFN0cmluZyhvdXQgKyA5NCwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhp
biArIDcwLCAxKSwgU3RyaW5nKG91dCArIDk2LCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQo
U3RyaW5nKGluICsgNzEsIDEpLCBTdHJpbmcob3V0ICsgOTgsIDIpKTsKKyAgICBtX2xvb2t1cFRh
YmxlLnNldChTdHJpbmcoaW4gKyA3MiwgMSksIFN0cmluZyhvdXQgKyAxMDAsIDIpKTsKKyAgICBt
X2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3MywgMSksIFN0cmluZyhvdXQgKyAxMDIsIDIp
KTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3NCwgMSksIFN0cmluZyhvdXQg
KyAxMDQsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3NSwgMSksIFN0
cmluZyhvdXQgKyAxMDYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3
NiwgMSksIFN0cmluZyhvdXQgKyAxMDgsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJp
bmcoaW4gKyA3NywgMSksIFN0cmluZyhvdXQgKyAxMTAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxl
LnNldChTdHJpbmcoaW4gKyA3OCwgMSksIFN0cmluZyhvdXQgKyAxMTIsIDIpKTsKKyAgICBtX2xv
b2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA3OSwgMSksIFN0cmluZyhvdXQgKyAxMTQsIDIpKTsK
KyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4MCwgMSksIFN0cmluZyhvdXQgKyAx
MTYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4MSwgMSksIFN0cmlu
ZyhvdXQgKyAxMTgsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4Miwg
MSksIFN0cmluZyhvdXQgKyAxMjAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmco
aW4gKyA4MywgMSksIFN0cmluZyhvdXQgKyAxMjIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNl
dChTdHJpbmcoaW4gKyA4NCwgMSksIFN0cmluZyhvdXQgKyAxMjQsIDIpKTsKKyAgICBtX2xvb2t1
cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4NSwgMSksIFN0cmluZyhvdXQgKyAxMjYsIDIpKTsKKyAg
ICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4NiwgMSksIFN0cmluZyhvdXQgKyAxMjgs
IDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4NywgMSksIFN0cmluZyhv
dXQgKyAxMzAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA4OCwgMSks
IFN0cmluZyhvdXQgKyAxMzIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4g
KyA4OSwgMSksIFN0cmluZyhvdXQgKyAxMzQsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChT
dHJpbmcoaW4gKyA5MCwgMSksIFN0cmluZyhvdXQgKyAxMzYsIDIpKTsKKyAgICBtX2xvb2t1cFRh
YmxlLnNldChTdHJpbmcoaW4gKyA5MSwgMSksIFN0cmluZyhvdXQgKyAxMzgsIDIpKTsKKyAgICBt
X2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5MiwgMSksIFN0cmluZyhvdXQgKyAxNDAsIDIp
KTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5MywgMSksIFN0cmluZyhvdXQg
KyAxNDIsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5NCwgMSksIFN0
cmluZyhvdXQgKyAxNDQsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5
NSwgMSksIFN0cmluZyhvdXQgKyAxNDYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJp
bmcoaW4gKyA5NiwgMSksIFN0cmluZyhvdXQgKyAxNDgsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxl
LnNldChTdHJpbmcoaW4gKyA5NywgMSksIFN0cmluZyhvdXQgKyAxNTAsIDIpKTsKKyAgICBtX2xv
b2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5OCwgMSksIFN0cmluZyhvdXQgKyAxNTIsIDIpKTsK
KyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyA5OSwgMSksIFN0cmluZyhvdXQgKyAx
NTQsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMDAsIDEpLCBTdHJp
bmcob3V0ICsgMTU2LCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTAx
LCAxKSwgU3RyaW5nKG91dCArIDE1OCwgMikpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmlu
ZyhpbiArIDEwMiwgMSksIFN0cmluZyhvdXQgKyAxNjAsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxl
LnNldChTdHJpbmcoaW4gKyAxMDMsIDEpLCBTdHJpbmcob3V0ICsgMTYyLCAyKSk7CisgICAgbV9s
b29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTA0LCAxKSwgU3RyaW5nKG91dCArIDE2NCwgMikp
OworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDEwNSwgMSksIFN0cmluZyhvdXQg
KyAxNjYsIDIpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMDYsIDEpLCBT
dHJpbmcob3V0ICsgMTY4LCAyKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsg
MTA3LCAxKSwgU3RyaW5nKG91dCArIDE3MCwgMykpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0
cmluZyhpbiArIDEwOCwgMSksIFN0cmluZyhvdXQgKyAxNzMsIDEpKTsKKyAgICBtX2xvb2t1cFRh
YmxlLnNldChTdHJpbmcoaW4gKyAxMDksIDEpLCBTdHJpbmcob3V0ICsgMTc0LCAxKSk7CisgICAg
bV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTEwLCAxKSwgU3RyaW5nKG91dCArIDE3NSwg
MSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDExMSwgMSksIFN0cmluZyhv
dXQgKyAxNzYsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMTIsIDEp
LCBTdHJpbmcob3V0ICsgMTc3LCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGlu
ICsgMTEzLCAxKSwgU3RyaW5nKG91dCArIDE3OCwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0
KFN0cmluZyhpbiArIDExNCwgMSksIFN0cmluZyhvdXQgKyAxNzksIDEpKTsKKyAgICBtX2xvb2t1
cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMTUsIDEpLCBTdHJpbmcob3V0ICsgMTgwLCAxKSk7Cisg
ICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTE2LCAxKSwgU3RyaW5nKG91dCArIDE4
MSwgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDExNywgMSksIFN0cmlu
ZyhvdXQgKyAxODIsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMTgs
IDEpLCBTdHJpbmcob3V0ICsgMTgzLCAxKSk7CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5n
KGluICsgMTE5LCAxKSwgU3RyaW5nKG91dCArIDE4NCwgMSkpOworICAgIG1fbG9va3VwVGFibGUu
c2V0KFN0cmluZyhpbiArIDEyMCwgMSksIFN0cmluZyhvdXQgKyAxODUsIDEpKTsKKyAgICBtX2xv
b2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAxMjEsIDEpLCBTdHJpbmcob3V0ICsgMTg2LCAxKSk7
CisgICAgbV9sb29rdXBUYWJsZS5zZXQoU3RyaW5nKGluICsgMTIyLCAxKSwgU3RyaW5nKG91dCAr
IDE4NywgMSkpOworICAgIG1fbG9va3VwVGFibGUuc2V0KFN0cmluZyhpbiArIDEyMywgMSksIFN0
cmluZyhvdXQgKyAxODgsIDEpKTsKKyAgICBtX2xvb2t1cFRhYmxlLnNldChTdHJpbmcoaW4gKyAx
MjQsIDEpLCBTdHJpbmcob3V0ICsgMTg5LCAxKSk7Cit9CisKK2Jvb2wgVFNDSUlFbmNvZGVyOjpp
c1JlZHVuZGFudChVQ2hhcikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBUU0NJ
SUVuY29kZXI6OnByZXByb2Nlc3NNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICByZXR1cm4gbWVzc2FnZTsKK30KKworYm9vbCBUU0NJSUVuY29kZXI6OmlzUHJlcHJvY2Vzc1Jl
cXVpcmVkKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUU0NJSUVuY29kZXI6Omhh
c1N1ZmZpeGVzKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFNDSUlFbmNvZGVy
Ojppc092ZXJsb2FkZWQoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgVFNDSUlFbmNvZGVyOjppc1N1ZmZpeFN5bWJvbChjb25zdCBTdHJpbmcmKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUU0NJSUVuY29kZXI6OmlzUHJlZml4U3ltYm9sKGNv
bnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBVQ2hhciBjb2RlID0gdGV4dFswXTsKKyAgICByZXR1
cm4gKGNvZGUgPT0gdm93ZWxzbkUgfHwgY29kZSA9PSB2b3dlbHNuRUUgfHwgY29kZSA9PSB2b3dl
bHNuQUkpOworfQorCitTdHJpbmcgVFNDSUlFbmNvZGVyOjpoYW5kbGVUd29QYXJ0Vm93ZWxTaWdu
cyhVQ2hhciBhLCBVQ2hhciBiKQoreworICAgIFVDaGFyIGNvZGVzWzJdOworICAgIGludCBzaXpl
ID0gMTsKKworICAgIGlmIChiID09IEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuRSAmJiBhID09IEZv
bnRUcmFuc2NvZGVyOjp2b3dlbHNuQUEpCisgICAgICAgIGNvZGVzWzBdID0gRm9udFRyYW5zY29k
ZXI6OnZvd2Vsc25POworICAgIGVsc2UgaWYgKGIgPT0gRm9udFRyYW5zY29kZXI6OnZvd2Vsc25F
RSAmJiBhID09IEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuQUEpCisgICAgICAgIGNvZGVzWzBdID0g
Rm9udFRyYW5zY29kZXI6OnZvd2Vsc25PTzsKKyAgICBlbHNlIGlmIChiID09IEZvbnRUcmFuc2Nv
ZGVyOjp2b3dlbHNuRSAmJiBhID09IEZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuQVVMRU4pCisgICAg
ICAgIGNvZGVzWzFdID0gRm9udFRyYW5zY29kZXI6OnZvd2Vsc25BVTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgY29kZXNbMF0gPSBhOworICAgICAgICBjb2Rlc1sxXSA9IGI7CisgICAgICAgIHNpemUg
PSAyOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKGNvZGVzLCBzaXplKTsKK30KKworU3RyaW5n
IFRTQ0lJRW5jb2Rlcjo6bG9va3VwKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmIChtX2xv
b2t1cFRhYmxlLmNvbnRhaW5zKGtleSkpCisgICAgICAgIHJldHVybiBtX2xvb2t1cFRhYmxlLmdl
dChrZXkpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvVFNDSUlFbmNvZGVyLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC90cmFuc2NvZGVyL1RTQ0lJRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyL1RTQ0lJRW5jb2Rlci5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvVFNDSUlFbmNvZGVyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUU0NJSUVuY29kZXJfaAor
I2RlZmluZSBUU0NJSUVuY29kZXJfaAorCisjaW5jbHVkZSAiRm9udEVuY29kZXIuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRTQ0lJRW5j
b2RlciA6IHB1YmxpYyBGb250RW5jb2RlciB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHZpc2FyZ2EgPSAweDAwQjc7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsQSA9IDB4
MDBBQjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxBQSA9IDB4MDBBQzsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgdm93ZWxJMSA9IDB4MDBBRDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dm93ZWxJMiA9IDB4MDBGRTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxJSSA9IDB4MDBB
RTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxVID0gMHgwMEFGOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciB2b3dlbFVVID0gMHgwMEIwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dl
bEUgPSAweDAwQjE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsRUUgPSAweDAwQjI7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2VsQUkgPSAweDAwQjM7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIHZvd2VsTyA9IDB4MDBCNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxPTyA9
IDB4MDBCNTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxBVSA9IDB4MDBCNjsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgY29uc250S0EgPSAweDAwQjg7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIGNvbnNudE5HQSA9IDB4MDBCOTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250Q0Eg
PSAweDAwQkE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudEpBID0gMHgwMTkyOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnROWUEgPSAweDAwQkI7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGNvbnNudFRUQSA9IDB4MDBCQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250
Tk5BID0gMHgwMEJEOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRUQSA9IDB4MDBCRTsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250TkEgPSAweDAwQkY7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIGNvbnNudE5OTkEgPSAweDAwQzk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNv
bnNudFBBID0gMHgwMEMwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb25zbnRNQSA9IDB4MDBD
MTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250WUEgPSAweDAwQzI7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGNvbnNudFJBID0gMHgwMEMzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBj
b25zbnRMQSA9IDB4MDBDNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250VkEgPSAweDAw
QzU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudFpIQSA9IDB4MDBDNjsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgY29uc250TExBID0gMHgwMEM3OworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBjb25zbnRSUkEgPSAweDAwQzg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudFNTQSA9
IDB4MjAxRTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29uc250U0EgPSAweDIwMjY7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGNvbnNudEhBID0gMHgyMDIwOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBjb25qY3RLU0ggPSAweDIwMjE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbmpjdFNS
SUkgPSAweDIwMUE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25BQSA9IDB4MDBBMTsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbkkgPSAweDAwQTI7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIHZvd2Vsc25JSSA9IDB4MDBBMzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93
ZWxzblUgPSAweDAwQTQ7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25VVSA9IDB4MDBB
NTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbkUgPSAweDAwQTY7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIHZvd2Vsc25FRSA9IDB4MDBBNzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
dm93ZWxzbkFJID0gMHgwMEE4OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuQVVMRU4g
PSAweDAwQUE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvS1BVTExJID0gMHgwMEVDOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib05HUFVMTEkgPSAweDAwRUQ7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGNvbWJvQ1BVTExJID0gMHgwMEVFOworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBjb21ib0pQVUxMSSA9IDB4MDJDNjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9OWVBV
TExJID0gMHgwMEVGOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1RUUFVMTEkgPSAweDAw
RjA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTk5QVUxMSSA9IDB4MDBGMTsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgY29tYm9UUFVMTEkgPSAweDAwRjI7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGNvbWJvTlBVTExJID0gMHgwMEYzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21i
b05OTlBVTExJID0gMHgwMEZEOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1BQVUxMSSA9
IDB4MDBGNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9NUFVMTEkgPSAweDAwRjU7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvWVBVTExJID0gMHgwMEY2OworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBjb21ib1JQVUxMSSA9IDB4MDBGNzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
Y29tYm9MUFVMTEkgPSAweDAwRjg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvVlBVTExJ
ID0gMHgwMEY5OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1pIUFVMTEkgPSAweDAwRkE7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTExQVUxMSSA9IDB4MDBGQjsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgY29tYm9TU1BVTExJID0gMHgyMDMwOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBjb21ib1NQVUxMSSA9IDB4MDE2MDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9I
UFVMTEkgPSAweDIwMzk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvUlJQVUxMSSA9IDB4
MDBGQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9LU0hQVUxMSSA9IDB4MDE1MjsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9UVEkgPSAweDAwQ0E7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGNvbWJvVFRJSSA9IDB4MDBDQjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9L
VSA9IDB4MDBDQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9LVVUgPSAweDAwREM7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTkdVID0gMHgyMTIyOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBjb21ib05HVVUgPSAweDIwM0E7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJv
Q1UgPSAweDAwQ0Q7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvQ1VVID0gMHgwMEREOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib05ZVSA9IDB4MDE2MTsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgY29tYm9OWVVVID0gMHgwMTUzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21i
b1RUVSA9IDB4MDBDRTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9UVFVVID0gMHgwMERF
OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib05OVSA9IDB4MDBDRjsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgY29tYm9OTlVVID0gMHgwMERGOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBj
b21ib1RVID0gMHgwMEQwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1RVVSA9IDB4MDBF
MDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9OVSA9IDB4MDBEMTsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgY29tYm9OVVUgPSAweDAwRTE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNv
bWJvTk5OVSA9IDB4MDBEQjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9OTk5VVSA9IDB4
MDBFQjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9QVSA9IDB4MDBEMjsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgY29tYm9QVVUgPSAweDAwRTI7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGNvbWJvTVUgPSAweDAwRDM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTVVVID0gMHgw
MEUzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1lVID0gMHgwMEQ0OworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBjb21ib1lVVSA9IDB4MDBFNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
Y29tYm9SVSA9IDB4MDBENTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9SVVUgPSAweDAw
RTU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTFUgPSAweDAwRDY7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGNvbWJvTFVVID0gMHgwMEU2OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBj
b21ib1ZVID0gMHgwMEQ3OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBjb21ib1ZVVSA9IDB4MDBF
NzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9aSFUgPSAweDAwRDg7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGNvbWJvWkhVVSA9IDB4MDBFODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
Y29tYm9MTFUgPSAweDAwRDk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGNvbWJvTExVVSA9IDB4
MDBFOTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgY29tYm9SUlUgPSAweDAwREE7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIGNvbWJvUlJVVSA9IDB4MDBFQTsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgZGlnaXRaRVJPID0gMHgyMEFDOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdE9ORSA9
IDB4MDA4MTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRUV08gPSAweDAwOEQ7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0VEhSRUUgPSAweDAxN0Q7CisgICAgc3RhdGljIGNvbnN0
IFVDaGFyIGRpZ2l0Rk9VUiA9IDB4MDA4RjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRG
SVZFID0gMHgwMDkwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdFNJWCA9IDB4MjAyMjsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRTRVZFTiA9IDB4MjAxMzsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgZGlnaXRFSUdIVCA9IDB4MjAxNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
ZGlnaXROSU5FID0gMHgwMkRDOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdFRFTiA9IDB4
MDA5RDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRIVU5EUkVEID0gMHgwMTdFOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdFRIT1VTQU5EID0gMHgwMTc4OworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBMUVRTSU5HTEUgPSAweDIwMTg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIFJR
VFNJTkdMRSA9IDB4MjAxOTsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgTFFURE9VQkxFID0gMHgy
MDFDOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBSUVRET1VCTEUgPSAweDIwMUQ7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIENPUFlSSUdHSFQgPSAweDAwQTk7CisKKyAgICBUU0NJSUVuY29kZXIo
KTsKKyAgICB2aXJ0dWFsIFN0cmluZyBsb29rdXAoY29uc3QgU3RyaW5nJiBrZXkpOworICAgIHZp
cnR1YWwgYm9vbCBpc1JlZHVuZGFudChVQ2hhcik7CisgICAgdmlydHVhbCBTdHJpbmcgcHJlcHJv
Y2Vzc01lc3NhZ2UoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIGlzUHJlcHJvY2Vz
c1JlcXVpcmVkKCk7CisgICAgdmlydHVhbCBib29sIGhhc1N1ZmZpeGVzKCk7CisgICAgdmlydHVh
bCBib29sIGlzT3ZlcmxvYWRlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNT
dWZmaXhTeW1ib2woY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIGlzUHJlZml4U3lt
Ym9sKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgU3RyaW5nIGhhbmRsZVR3b1BhcnRWb3dl
bFNpZ25zKFVDaGFyIGEsIFVDaGFyIGIpOworCitwcml2YXRlOgorICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IG1fbG9va3VwVGFibGU7Cit9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvVFNDSUlFbmNvZGVyLmgK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvdHJhbnNjb2Rlci9UYW1pbENvbnZlcnRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvVGFtaWxDb252ZXJ0ZXIuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvVGFtaWxDb252ZXJ0
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUYW1pbENvbnZlcnRlci5oIgorCisjaW5jbHVkZSAiRm9u
dFRyYW5zY29kZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNv
cmUKK3sKKworVGFtaWxDb252ZXJ0ZXI6OlRhbWlsQ29udmVydGVyKCkKK3sKKyAgICBVQ2hhciBv
dXRbXSA9IHthbnVzdmFyYSwgdmlzYXJnYSwgbWlzY1ZJUkFNQSwgbWlzY1ZJUkFNQSwgCisgICAg
ICAgIEZvbnRUcmFuc2NvZGVyOjpVbmlDb2RlU2hhcmVkWldKLCBtaXNjVklSQU1BLCBGb250VHJh
bnNjb2Rlcjo6VW5pQ29kZVNoYXJlZFpXTkosIAorICAgICAgICBGb250VHJhbnNjb2Rlcjo6VW5p
Q29kZVNoYXJlZEFWQUdSQUhBLCBGb250VHJhbnNjb2Rlcjo6VW5pQ29kZVNoYXJlZFVEQVRUQSwg
CisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpVbmlDb2RlU2hhcmVkQU5VREFUVEEsIEZvbnRUcmFu
c2NvZGVyOjpVbmlDb2RlU2hhcmVkU1ZBUklUQSwgCisgICAgICAgIEZvbnRUcmFuc2NvZGVyOjpV
bmlDb2RlU2hhcmVkREFOREEsIEZvbnRUcmFuc2NvZGVyOjpVbmlDb2RlU2hhcmVkRERBTkRBLCAK
KyAgICAgICAgRm9udFRyYW5zY29kZXI6OlVuaUNvZGVTaGFyZWRhYmJyZXYsIEZvbnRUcmFuc2Nv
ZGVyOjpVbmlDb2RlU2hhcmVkT00sIGRpZ2l0WkVSTywgCisgICAgICAgIGRpZ2l0T05FLCBkaWdp
dFRXTywgZGlnaXRUSFJFRSwgZGlnaXRGT1VSLCBkaWdpdEZJVkUsIGRpZ2l0U0lYLCAKKyAgICAg
ICAgZGlnaXRTRVZFTiwgZGlnaXRFSUdIVCwgZGlnaXROSU5FLCBkaWdpdFRFTiwgZGlnaXRIVU5E
UkVELCBkaWdpdFRIT1VTQU5ELCAKKyAgICAgICAgbGV0dGVyQSwgbGV0dGVyQUEsIGxldHRlckks
IGxldHRlcklJLCBsZXR0ZXJVLCBsZXR0ZXJVVSwgbGV0dGVyRSwgCisgICAgICAgIGxldHRlckVF
LCBsZXR0ZXJBSSwgbGV0dGVyTywgbGV0dGVyT08sIGxldHRlckFVLCBsZXR0ZXJLQSwgbGV0dGVy
TkdBLCAKKyAgICAgICAgbGV0dGVyQ0EsIGxldHRlckpBLCBsZXR0ZXJOWUEsIGxldHRlclRUQSwg
bGV0dGVyTk5BLCBsZXR0ZXJUQSwgbGV0dGVyTkEsIAorICAgICAgICBsZXR0ZXJOTk5BLCBsZXR0
ZXJQQSwgbGV0dGVyTUEsIGxldHRlcllBLCBsZXR0ZXJSQSwgbGV0dGVyTEEsIGxldHRlclZBLCAK
KyAgICAgICAgbGV0dGVyU0hBLCBsZXR0ZXJTU0EsIGxldHRlclNBLCBsZXR0ZXJIQSwgbGV0dGVy
TExBLCBsZXR0ZXJaSEEsIAorICAgICAgICBsZXR0ZXJSUkEsIHZvd2Vsc25BQSwgdm93ZWxzbkks
IHZvd2Vsc25JSSwgdm93ZWxzblUsIHZvd2Vsc25VVSwgdm93ZWxzbkUsIAorICAgICAgICB2b3dl
bHNuRUUsIHZvd2Vsc25BSSwgdm93ZWxzbk8sIHZvd2Vsc25PTywgdm93ZWxzbkFVLCBtaXNjQVVM
RU4sIHNpZ25EQVksIAorICAgICAgICBzaWduTU9OVEgsIHNpZ25ZRUFSLCBzaWduREVCSVQsIHNp
Z25DUkVESVQsIHNpZ25BU0FCT1ZFLCBzaWduUlVQRUUsIAorICAgICAgICBzaWduTlVNQkVSLCBs
ZXR0ZXJBLCBsZXR0ZXJFLCBsZXR0ZXJPLCBsZXR0ZXJLQSwgbGV0dGVyS0EsIGxldHRlcktBLCAK
KyAgICAgICAgbGV0dGVyS0EsIGxldHRlcktBLCBsZXR0ZXJLQSwgbGV0dGVyQ0EsIGxldHRlckpB
LCBsZXR0ZXJKQSwgbGV0dGVyVFRBLCAKKyAgICAgICAgbGV0dGVyVFRBLCBsZXR0ZXJUVEEsIGxl
dHRlclRUQSwgbGV0dGVyVFRBLCBsZXR0ZXJUQSwgbGV0dGVyVEEsIGxldHRlclRBLCAKKyAgICAg
ICAgbGV0dGVyUEEsIGxldHRlclBBLCBsZXR0ZXJQQSwgbGV0dGVyUEEsIGxldHRlcllBLCB2b3dl
bHNuRSwgdm93ZWxzbk8gfTsKKworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmFu
dXN2YXJhIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMCwgMSk7
CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6dmlzYXJnYSAtIEZvbnRUcmFuc2Nv
ZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDEsIDEpOworICAgIG1fbG9va3VwVGFibGVb
Rm9udFRyYW5zY29kZXI6OnB1bGxpIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJp
bmcob3V0ICsgMiwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y2hpbGx1
IC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMywgMik7CisgICAg
bV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6c3lsbGJyZWFrIC0gRm9udFRyYW5zY29kZXI6
OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNSwgMik7CisgICAgbV9sb29rdXBUYWJsZVtGb250
VHJhbnNjb2Rlcjo6YXZhZ3JhaGEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmlu
ZyhvdXQgKyA3LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjp1ZEF0dGEg
LSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA4LCAxKTsKKyAgICBt
X2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjphbnVkQXR0YSAtIEZvbnRUcmFuc2NvZGVyOjpi
YXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDksIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRy
YW5zY29kZXI6OnN2YXJpdGEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhv
dXQgKyAxMCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6ZGFuZGEgLSBG
b250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAxMSwgMSk7CisgICAgbV9s
b29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6ZGRhbmRhIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgMTIsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5z
Y29kZXI6OmFiYnJldiAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCAr
IDEzLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpvbSAtIEZvbnRUcmFu
c2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDE0LCAxKTsKKyAgICBtX2xvb2t1cFRh
YmxlW0ZvbnRUcmFuc2NvZGVyOjpkaWdpdFpFUk8gLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4
XSA9IFN0cmluZyhvdXQgKyAxNSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rl
cjo6ZGlnaXRPTkUgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAx
NiwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6ZGlnaXRUV08gLSBGb250
VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAxNywgMSk7CisgICAgbV9sb29r
dXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6ZGlnaXRUSFJFRSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNl
SW5kZXhdID0gU3RyaW5nKG91dCArIDE4LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFu
c2NvZGVyOjpkaWdpdEZPVVIgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhv
dXQgKyAxOSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6ZGlnaXRGSVZF
IC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMjAsIDEpOworICAg
IG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmRpZ2l0U0lYIC0gRm9udFRyYW5zY29kZXI6
OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMjEsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9u
dFRyYW5zY29kZXI6OmRpZ2l0U0VWRU4gLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0
cmluZyhvdXQgKyAyMiwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6ZGln
aXRFSUdIVCAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDIzLCAx
KTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpkaWdpdE5JTkUgLSBGb250VHJh
bnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAyNCwgMSk7CisgICAgbV9sb29rdXBU
YWJsZVtGb250VHJhbnNjb2Rlcjo6ZGlnaXRURU4gLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4
XSA9IFN0cmluZyhvdXQgKyAyNSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rl
cjo6ZGlnaXRIVU5EUkVEIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0
ICsgMjYsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmRpZ2l0VEhPVVNB
TkQgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAyNywgMSk7Cisg
ICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6dm93ZWxBIC0gRm9udFRyYW5zY29kZXI6
OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMjgsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9u
dFRyYW5zY29kZXI6OnZvd2VsQUEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmlu
ZyhvdXQgKyAyOSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6dm93ZWxJ
IC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMzAsIDEpOworICAg
IG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OnZvd2VsSUkgLSBGb250VHJhbnNjb2Rlcjo6
YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAzMSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250
VHJhbnNjb2Rlcjo6dm93ZWxVIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmco
b3V0ICsgMzIsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OnZvd2VsVVUg
LSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAzMywgMSk7CisgICAg
bV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6dm93ZWxFIC0gRm9udFRyYW5zY29kZXI6OmJh
c2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMzQsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRy
YW5zY29kZXI6OnZvd2VsRUUgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhv
dXQgKyAzNSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6dm93ZWxBSSAt
IEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDM2LCAxKTsKKyAgICBt
X2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjp2b3dlbE8gLSBGb250VHJhbnNjb2Rlcjo6YmFz
ZUluZGV4XSA9IFN0cmluZyhvdXQgKyAzNywgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJh
bnNjb2Rlcjo6dm93ZWxPTyAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91
dCArIDM4LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjp2b3dlbEFVIC0g
Rm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgMzksIDEpOworICAgIG1f
bG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudEtBIC0gRm9udFRyYW5zY29kZXI6OmJh
c2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNDAsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRy
YW5zY29kZXI6OmNvbnNudE5HQSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5n
KG91dCArIDQxLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpjb25zbnRD
QSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDQyLCAxKTsKKyAg
ICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpjb25zbnRKQSAtIEZvbnRUcmFuc2NvZGVy
OjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDQzLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0Zv
bnRUcmFuc2NvZGVyOjpjb25zbnROWUEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0
cmluZyhvdXQgKyA0NCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y29u
c250VFRBIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNDUsIDEp
OworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudE5OQSAtIEZvbnRUcmFu
c2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDQ2LCAxKTsKKyAgICBtX2xvb2t1cFRh
YmxlW0ZvbnRUcmFuc2NvZGVyOjpjb25zbnRUQSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhd
ID0gU3RyaW5nKG91dCArIDQ3LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVy
Ojpjb25zbnROQSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDQ4
LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpjb25zbnROTk5BIC0gRm9u
dFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNDksIDEpOworICAgIG1fbG9v
a3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudFBBIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgNTAsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5z
Y29kZXI6OmNvbnNudE1BIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0
ICsgNTEsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudFlBIC0g
Rm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNTIsIDEpOworICAgIG1f
bG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudFJBIC0gRm9udFRyYW5zY29kZXI6OmJh
c2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNTMsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRy
YW5zY29kZXI6OmNvbnNudExBIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmco
b3V0ICsgNTQsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudFZB
IC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNTUsIDEpOworICAg
IG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudFNIQSAtIEZvbnRUcmFuc2NvZGVy
OjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDU2LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0Zv
bnRUcmFuc2NvZGVyOjpjb25zbnRTU0EgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0
cmluZyhvdXQgKyA1NywgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y29u
c250U0EgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA1OCwgMSk7
CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y29uc250SEEgLSBGb250VHJhbnNj
b2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA1OSwgMSk7CisgICAgbV9sb29rdXBUYWJs
ZVtGb250VHJhbnNjb2Rlcjo6Y29uc250TExBIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0g
PSBTdHJpbmcob3V0ICsgNjAsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6
OmNvbnNudFpIQSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDYx
LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpjb25zbnRSUkEgLSBGb250
VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA2MiwgMSk7CisgICAgbV9sb29r
dXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6dm93ZWxzbkFBIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgNjMsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5z
Y29kZXI6OnZvd2Vsc25JIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0
ICsgNjQsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OnZvd2Vsc25JSSAt
IEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDY1LCAxKTsKKyAgICBt
X2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuVSAtIEZvbnRUcmFuc2NvZGVyOjpi
YXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDY2LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRU
cmFuc2NvZGVyOjp2b3dlbHNuVVUgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmlu
ZyhvdXQgKyA2NywgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6dm93ZWxz
bkUgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA2OCwgMSk7Cisg
ICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6dm93ZWxzbkVFIC0gRm9udFRyYW5zY29k
ZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNjksIDEpOworICAgIG1fbG9va3VwVGFibGVb
Rm9udFRyYW5zY29kZXI6OnZvd2Vsc25BSSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0g
U3RyaW5nKG91dCArIDcwLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjp2
b3dlbHNuTyAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDcxLCAx
KTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjp2b3dlbHNuT08gLSBGb250VHJh
bnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA3MiwgMSk7CisgICAgbV9sb29rdXBU
YWJsZVtGb250VHJhbnNjb2Rlcjo6dm93ZWxzbkFVIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRl
eF0gPSBTdHJpbmcob3V0ICsgNzMsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29k
ZXI6OnZvd2Vsc25BVUxFTiAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91
dCArIDc0LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpzaWduREFZIC0g
Rm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgNzUsIDEpOworICAgIG1f
bG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OnNpZ25NT05USCAtIEZvbnRUcmFuc2NvZGVyOjpi
YXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDc2LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRU
cmFuc2NvZGVyOjpzaWduWUVBUiAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5n
KG91dCArIDc3LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpzaWduREVC
SVQgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA3OCwgMSk7Cisg
ICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6c2lnbkNSRURJVCAtIEZvbnRUcmFuc2Nv
ZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDc5LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxl
W0ZvbnRUcmFuc2NvZGVyOjpzaWduQVNBQk9WRSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhd
ID0gU3RyaW5nKG91dCArIDgwLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVy
OjpzaWduUlVQRUUgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA4
MSwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6c2lnbk5VTUJFUiAtIEZv
bnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDgyLCAxKTsKKyAgICBtX2xv
b2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjp2b3dlbFNIVEEgLSBGb250VHJhbnNjb2Rlcjo6YmFz
ZUluZGV4XSA9IFN0cmluZyhvdXQgKyA4MywgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJh
bnNjb2Rlcjo6dm93ZWxDRFJFIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmco
b3V0ICsgODQsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OnZvd2VsQ0RS
TyAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDg1LCAxKTsKKyAg
ICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpjb25zbnRRQSAtIEZvbnRUcmFuc2NvZGVy
OjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDg2LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0Zv
bnRUcmFuc2NvZGVyOjpjb25zbnRLSEEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0
cmluZyhvdXQgKyA4NywgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y29u
c250S0hIQSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDg4LCAx
KTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpjb25zbnRHQSAtIEZvbnRUcmFu
c2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDg5LCAxKTsKKyAgICBtX2xvb2t1cFRh
YmxlW0ZvbnRUcmFuc2NvZGVyOjpjb25zbnRHSEEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4
XSA9IFN0cmluZyhvdXQgKyA5MCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rl
cjo6Y29uc250R0hIQSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCAr
IDkxLCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFuc2NvZGVyOjpjb25zbnRDSEEgLSBG
b250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA5MiwgMSk7CisgICAgbV9s
b29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y29uc250WkEgLSBGb250VHJhbnNjb2Rlcjo6YmFz
ZUluZGV4XSA9IFN0cmluZyhvdXQgKyA5MywgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJh
bnNjb2Rlcjo6Y29uc250SkhBIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmco
b3V0ICsgOTQsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudFRU
SEEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA5NSwgMSk7Cisg
ICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y29uc250RERBIC0gRm9udFRyYW5zY29k
ZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgOTYsIDEpOworICAgIG1fbG9va3VwVGFibGVb
Rm9udFRyYW5zY29kZXI6OmNvbnNudERESEEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9
IFN0cmluZyhvdXQgKyA5NywgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6
Y29uc250RERESEEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyA5
OCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y29uc250UkhBIC0gRm9u
dFRyYW5zY29kZXI6OmJhc2VJbmRleF0gPSBTdHJpbmcob3V0ICsgOTksIDEpOworICAgIG1fbG9v
a3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudFRIQSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNl
SW5kZXhdID0gU3RyaW5nKG91dCArIDEwMCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJh
bnNjb2Rlcjo6Y29uc250REEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhv
dXQgKyAxMDEsIDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudERI
QSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDEwMiwgMSk7Cisg
ICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y29uc250RkEgLSBGb250VHJhbnNjb2Rl
cjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAxMDMsIDEpOworICAgIG1fbG9va3VwVGFibGVb
Rm9udFRyYW5zY29kZXI6OmNvbnNudFBIQSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0g
U3RyaW5nKG91dCArIDEwNCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6
Y29uc250QkEgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAxMDUs
IDEpOworICAgIG1fbG9va3VwVGFibGVbRm9udFRyYW5zY29kZXI6OmNvbnNudEJIQSAtIEZvbnRU
cmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5nKG91dCArIDEwNiwgMSk7CisgICAgbV9sb29r
dXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6Y29uc250WVlBIC0gRm9udFRyYW5zY29kZXI6OmJhc2VJ
bmRleF0gPSBTdHJpbmcob3V0ICsgMTA3LCAxKTsKKyAgICBtX2xvb2t1cFRhYmxlW0ZvbnRUcmFu
c2NvZGVyOjp2b3dlbHNuQ0RSRSAtIEZvbnRUcmFuc2NvZGVyOjpiYXNlSW5kZXhdID0gU3RyaW5n
KG91dCArIDEwOCwgMSk7CisgICAgbV9sb29rdXBUYWJsZVtGb250VHJhbnNjb2Rlcjo6dm93ZWxz
bkNEUk8gLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XSA9IFN0cmluZyhvdXQgKyAxMDksIDEp
OworCit9CisKK1ZlY3RvcjxVQ2hhcj4gVGFtaWxDb252ZXJ0ZXI6OnRyYW5zY29kZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3Bv
bnNlOworCisgICAgZm9yIChpbnQgaSA9IDA7aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFVD
aGFyIGNvZGUgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICBpZiAoY29kZSA8IEZvbnRUcmFuc2Nv
ZGVyOjpiYXNlSW5kZXgpIAorICAgICAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGNvZGUpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBsb29rdXAgPSBtX2xvb2t1cFRhYmxlW2Nv
ZGUgLSBGb250VHJhbnNjb2Rlcjo6YmFzZUluZGV4XTsKKyAgICAgICAgICAgIHJlc3BvbnNlLmFw
cGVuZChsb29rdXAuY2hhcmFjdGVycygpLCBsb29rdXAubGVuZ3RoKCkpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiByZXNwb25zZTsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvVGFtaWxDb252ZXJ0ZXIuY3BwCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTmFtZTogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L3RyYW5zY29kZXIvVGFtaWxDb252ZXJ0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9UYW1pbENvbnZlcnRlci5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIvVGFtaWxDb252ZXJ0ZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRhbWlsQ29udmVy
dGVyX2gKKyNkZWZpbmUgVGFtaWxDb252ZXJ0ZXJfaAorCisjaW5jbHVkZSAiRm9udENvbnZlcnRl
ci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgVGFtaWxDb252ZXJ0ZXIgOiBwdWJsaWMgRm9udENvbnZlcnRlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGFudXN2YXJhID0gMHgwQjgyOworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciB2aXNhcmdhID0gMHgwQjgzOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0
ZXJBID0gMHgwQjg1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJBQSA9IDB4MEI4NjsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVySSA9IDB4MEI4NzsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgbGV0dGVySUkgPSAweDBCODg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRl
clUgPSAweDBCODk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlclVVID0gMHgwQjhBOwor
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJFID0gMHgwQjhFOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBsZXR0ZXJFRSA9IDB4MEI4RjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVy
QUkgPSAweDBCOTA7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlck8gPSAweDBCOTI7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlck9PID0gMHgwQjkzOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBsZXR0ZXJBVSA9IDB4MEI5NDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVy
S0EgPSAweDBCOTU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlck5HQSA9IDB4MEI5OTsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyQ0EgPSAweDBCOUE7CisgICAgc3RhdGljIGNv
bnN0IFVDaGFyIGxldHRlckpBID0gMHgwQjlDOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0
ZXJOWUEgPSAweDBCOUU7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlclRUQSA9IDB4MEI5
RjsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyTk5BID0gMHgwQkEzOworICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBsZXR0ZXJUQSA9IDB4MEJBNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIg
bGV0dGVyTkEgPSAweDBCQTg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlck5OTkEgPSAw
eDBCQTk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlclBBID0gMHgwQkFBOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJNQSA9IDB4MEJBRTsKKyAgICBzdGF0aWMgY29uc3QgVUNo
YXIgbGV0dGVyWUEgPSAweDBCQUY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlclJBID0g
MHgwQkIwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0ZXJSUkEgPSAweDBCQjE7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGxldHRlckxBID0gMHgwQkIyOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBsZXR0ZXJMTEEgPSAweDBCQjM7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlclpI
QSA9IDB4MEJCNDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVyVkEgPSAweDBCQjU7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIGxldHRlclNIQSA9IDB4MEJCNjsKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgbGV0dGVyU1NBID0gMHgwQkI3OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBsZXR0
ZXJTQSA9IDB4MEJCODsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgbGV0dGVySEEgPSAweDBCQjk7
CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25BQSA9IDB4MEJCRTsKKyAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgdm93ZWxzbkkgPSAweDBCQkY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZv
d2Vsc25JSSA9IDB4MEJDMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzblUgPSAweDBC
QzE7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHZvd2Vsc25VVSA9IDB4MEJDMjsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgdm93ZWxzbkUgPSAweDBCQzY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFy
IHZvd2Vsc25FRSA9IDB4MEJDNzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbkFJID0g
MHgwQkM4OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciB2b3dlbHNuTyA9IDB4MEJDQTsKKyAgICBz
dGF0aWMgY29uc3QgVUNoYXIgdm93ZWxzbk9PID0gMHgwQkNCOworICAgIHN0YXRpYyBjb25zdCBV
Q2hhciB2b3dlbHNuQVUgPSAweDBCQ0M7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIG1pc2NWSVJB
TUEgPSAweDBCQ0Q7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIG1pc2NBVUxFTiA9IDB4MEJENzsK
KyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRaRVJPID0gMHgwQkU2OworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBkaWdpdE9ORSA9IDB4MEJFNzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGln
aXRUV08gPSAweDBCRTg7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0VEhSRUUgPSAweDBC
RTk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpZ2l0Rk9VUiA9IDB4MEJFQTsKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgZGlnaXRGSVZFID0gMHgwQkVCOworICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBkaWdpdFNJWCA9IDB4MEJFQzsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRTRVZFTiA9
IDB4MEJFRDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRFSUdIVCA9IDB4MEJFRTsKKyAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXROSU5FID0gMHgwQkVGOworICAgIHN0YXRpYyBjb25z
dCBVQ2hhciBkaWdpdFRFTiA9IDB4MEJGMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlnaXRI
VU5EUkVEID0gMHgwQkYxOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaWdpdFRIT1VTQU5EID0g
MHgwQkYyOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzaWduREFZID0gMHgwQkYzOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBzaWduTU9OVEggPSAweDBCRjQ7CisgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHNpZ25ZRUFSID0gMHgwQkY1OworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzaWduREVCSVQg
PSAweDBCRjY7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNpZ25DUkVESVQgPSAweDBCRjc7Cisg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHNpZ25BU0FCT1ZFID0gMHgwQkY4OworICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBzaWduUlVQRUUgPSAweDBCRjk7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNp
Z25OVU1CRVIgPSAweDBCRkE7CisKKyAgICBUYW1pbENvbnZlcnRlcigpOworICAgIHZpcnR1YWwg
VmVjdG9yPFVDaGFyPiB0cmFuc2NvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX2xvb2t1cFRhYmxlWzM2MV07Cit9OworfQor
CisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFu
c2NvZGVyL1RhbWlsQ29udmVydGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQog
ICArICoKCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gNDAwNTEpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKIAogI2luY2x1ZGUgIkNoYXJhY3Rl
ck5hbWVzLmgiCisjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKQEAg
LTEwOSw3ICsxMTAsMTEgQEAgdm9pZCBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShSZW5kZXJT
dAogICAgIEVUZXh0VHJhbnNmb3JtIG9sZFRyYW5zZm9ybSA9IG9sZFN0eWxlID8gb2xkU3R5bGUt
PnRleHRUcmFuc2Zvcm0oKSA6IFRUTk9ORTsKICAgICBFVGV4dFNlY3VyaXR5IG9sZFNlY3VyaXR5
ID0gb2xkU3R5bGUgPyBvbGRTdHlsZS0+dGV4dFNlY3VyaXR5KCkgOiBUU05PTkU7CiAKLSAgICBp
ZiAob2xkVHJhbnNmb3JtICE9IHN0eWxlKCktPnRleHRUcmFuc2Zvcm0oKSB8fCBvbGRTZWN1cml0
eSAhPSBzdHlsZSgpLT50ZXh0U2VjdXJpdHkoKSkgeworICAgIGlmIChvbGRUcmFuc2Zvcm0gIT0g
c3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgpIHx8IG9sZFNlY3VyaXR5ICE9IHN0eWxlKCktPnRleHRT
ZWN1cml0eSgpCisjaWYgRU5BQkxFKFRFWFRfVFJBTlNDT0RFUikKKyAgICAgICAgfHwgc3R5bGUo
KS0+Zm9udCgpLmlzVHJhbnNjb2RhYmxlRm9udCgpCisjZW5kaWYKKyAgICAgICAgKSB7CiAgICAg
ICAgIGlmIChSZWZQdHI8U3RyaW5nSW1wbD4gdGV4dFRvVHJhbnNmb3JtID0gb3JpZ2luYWxUZXh0
KCkpCiAgICAgICAgICAgICBzZXRUZXh0KHRleHRUb1RyYW5zZm9ybS5yZWxlYXNlKCksIHRydWUp
OwogICAgIH0KQEAgLTg5NSw2ICs5MDAsMTIgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50
ZXJuYWwoUGFzc1JlZgogICAgIEFTU0VSVChtX3RleHQpOwogCiAgICAgbV90ZXh0ID0gZG9jdW1l
bnQoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+KG1fdGV4dCkpOworCisjaWYgRU5BQkxFKFRFWFRfVFJBTlNDT0RFUikKKyAgICBpZiAoc3R5
bGUoKS0+Zm9udCgpLmlzVHJhbnNjb2RhYmxlRm9udCgpKQorICAgICAgICBtX3RleHQgPSB0cmFu
c2NvZGUoU3RyaW5nKG1fdGV4dC0+Y2hhcmFjdGVycygpLCBtX3RleHQtPmxlbmd0aCgpKSk7Cisj
ZW5kaWYKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGlzU1ZHVGV4dCgpKSB7CiAgICAgICAg
IGlmIChzdHlsZSgpICYmIHN0eWxlKCktPndoaXRlU3BhY2UoKSA9PSBQUkUpIHsKQEAgLTEyMTIs
NiArMTIyMywxNyBAQCB2b2lkIFJlbmRlclRleHQ6OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zCiAj
ZW5kaWYKIH0KIAorI2lmIEVOQUJMRShURVhUX1RSQU5TQ09ERVIpCisKK1Bhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gUmVuZGVyVGV4dDo6dHJhbnNjb2RlKFN0cmluZyB0ZXh0KQoreworICAgIFN0cmlu
ZyBmYW1pbHkgPSBzdHlsZSgpLT5mb250KCkuZmFtaWx5KCkuZmFtaWx5KCkuc3RyaW5nKCk7Cisg
ICAgU3RyaW5nIHRyYW5zZm9ybWVkID0gdHJhbnNjb2RlcigpLT5jb252ZXJ0KHRleHQsIGZhbWls
eSk7CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkLmltcGwoKTsKK30KKworI2VuZGlmCisKICNlbmRp
ZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShy
ZXZpc2lvbiA0MDA1MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNiArMjQsMTAgQEAKICNkZWZpbmUgUmVuZGVyVGV4dF9oCiAKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTQ3LDYgKzE1MSw5
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbikgY29uc3Q7CiAgICAgaW50IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZv
bnQmLCBpbnQgc3RhcnQsIGludCBsZW4sIGludCB4UG9zKSBjb25zdDsKICAgICBib29sIGlzQWxs
QVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lzQWxsQVNDSUk7IH0KKyNpZiBFTkFCTEUoVEVYVF9U
UkFOU0NPREVSKQorICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJhbnNjb2RlKFN0cmluZyB0
ZXh0KTsKKyNlbmRpZgogCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fdGV4dDsKIApJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNDAwNTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMSBAQAorMjAwOS0wMS0yMCAgUHJ1bnRoYWJhbiBLICA8cHJ1bnRoYWJh
bkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgTmV3IHRlc3RjYXNlIHRvIHRlc3QgZm9udCB0cmFuc2NvZGluZy4KKwor
ICAgICAgICAqIGZhc3QvY3NzL2ZvbnQtZmFjZS10cmFuc2NvZGVyLmh0bWw6IEFkZGVkLgorCiAy
MDA5LTAxLTE5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA3OApJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jc3MvZm9udC1mYWNlLXRyYW5zY29kZXIuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9mb250LWZhY2UtdHJhbnNjb2Rlci5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvZm9udC1mYWNlLXRyYW5zY29kZXIuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c3R5
bGU+CisgICAgICAgIGRpdiB7IGZvbnQtc2l6ZTogMzBwdDsgfQorICAgIDwvc3R5bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKyAgICBUaGUgdHdvIGxpbmVzIGJlbG93IHNob3VsZCBiZSByZW5kZXJlZCBk
aWZmZXJlbnRseSAoRmlyc3QgbGluZSBpbiBUYW1pbCB1bmljb2RlIGFuZCBTZWNvbmQgbGluZSBp
biBBU0NJSSkKKyAgICA8aHIgLz4KKyAgICA8ZGl2IHN0eWxlPSJmb250LWZhbWlseTogSW5haU1h
dGhpTmV3VFNDOyI+CisgICAgICAgIKzCosPyvqL4ILTVxf0gICAgICAgIAorICAgIDwvZGl2Pgor
ICAgIDxkaXY+CisgICAgICAgIKzCosPyvqL4ILTVxf0gICAgICAgIAorICAgIDwvZGl2PiAgICAK
KzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2ZvbnQtZmFjZS10cmFuc2NvZGVyLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCg==
</data>
<flag name="review"
          id="12867"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>