<?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>149237</bug_id>
          
          <creation_ts>2015-09-16 16:16:17 -0700</creation_ts>
          <short_desc>Create a font which can be used for testing font features</short_desc>
          <delta_ts>2015-09-21 08:55:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1126506</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-09-16 16:16:17 -0700</bug_when>
    <thetext>Create a font which can be used for testing font features</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126513</commentid>
    <comment_count>1</comment_count>
      <attachid>261336</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-09-16 16:37:48 -0700</bug_when>
    <thetext>Created attachment 261336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126515</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 16:40:47 -0700</bug_when>
    <thetext>Attachment 261336 did not pass style-queue:


ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:9:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:12:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:20:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:27:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:80:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:82:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:149:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:161:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:171:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:173:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:179:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:180:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:189:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:226:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:275:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:309:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:429:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:443:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:502:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:505:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:607:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:630:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:653:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:673:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:674:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:680:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:698:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:716:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:742:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:765:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:767:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
ERROR: Tools/FontWithFeatures/FontWithFeatures/main.cpp:10:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/main.cpp:14:  Streams are highly discouraged.  [readability/streams] [3]
ERROR: Tools/FontWithFeatures/FontWithFeatures/main.cpp:16:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/main.cpp:18:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/main.cpp:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/FontWithFeatures/FontWithFeatures/main.cpp:100:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
Total errors found: 38 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126522</commentid>
    <comment_count>3</comment_count>
      <attachid>261336</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-09-16 17:04:40 -0700</bug_when>
    <thetext>Comment on attachment 261336
Patch

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

&gt; Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:140
&gt; +std::vector&lt;uint8_t&gt; generateBoxCharString() {
&gt; +    CFFBuilder builder(unitsPerEm, std::make_pair(0.f, 0.f));

WebKit style is brace on new line. Needs fixing all over this file.

&gt; Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:267
&gt; +        bool active = { true };

no =

&gt; Tools/FontWithFeatures/FontWithFeatures/main.cpp:37
&gt; +    CGFloat fontSize = 25;
&gt; +    CGContextSetTextMatrix(context, CGAffineTransformScale(CGAffineTransformIdentity, 1, 1));
&gt; +    CGContextSetTextPosition(context, location.x, location.y);
&gt; +    CFNumberRef featureValue = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;value);
&gt; +    CFTypeRef featureDictionaryKeys[] = { kCTFontOpenTypeFeatureTag, kCTFontOpenTypeFeatureValue };
&gt; +    CFTypeRef featureDictionaryValues[] = { feature, featureValue };
&gt; +    CFDictionaryRef featureDictionary = CFDictionaryCreate(kCFAllocatorDefault, featureDictionaryKeys, featureDictionaryValues, 2, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks);
&gt; +    CFRelease(featureValue);
&gt; +    CFTypeRef featureSettingsValues[] = { featureDictionary };
&gt; +    CFArrayRef fontFeatureSettings = CFArrayCreate(kCFAllocatorDefault, featureSettingsValues, 1, &amp;kCFTypeArrayCallBacks);
&gt; +    CFRelease(featureDictionary);
&gt; +    CFTypeRef fontDescriptorKeys[] = { kCTFontFeatureSettingsAttribute };
&gt; +    CFTypeRef fontDescriptorValues[] = { fontFeatureSettings };
&gt; +    CFDictionaryRef fontDescriptorAttributes = CFDictionaryCreate(kCFAllocatorDefault, fontDescriptorKeys, fontDescriptorValues, 1, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks);
&gt; +    CFRelease(fontFeatureSettings);
&gt; +    CTFontDescriptorRef modifiedFontDescriptor = CTFontDescriptorCreateCopyWithAttributes(fontDescriptor, fontDescriptorAttributes);
&gt; +    CFRelease(fontDescriptorAttributes);
&gt; +    CTFontRef font = CTFontCreateWithFontDescriptor(modifiedFontDescriptor, fontSize, nullptr);
&gt; +    CFRelease(modifiedFontDescriptor);

Such a wall of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126533</commentid>
    <comment_count>4</comment_count>
      <attachid>261336</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-09-16 17:33:16 -0700</bug_when>
    <thetext>Comment on attachment 261336
Patch

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

&gt; Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:17
&gt; +static const uint16_t unitsPerEm = 1024;

This should be int16_t.

&gt; Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:534
&gt; +        append16(clampTo&lt;int16_t&gt;(unitsPerEm)); // Typographical descender

Might as well make is 1.

&gt; Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:537
&gt; +        append16(clampTo&lt;uint16_t&gt;(unitsPerEm)); // Windows-specific descent

Ditto.

&gt; Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp:656
&gt; +        append16(clampTo&lt;int16_t&gt;(unitsPerEm)); // descent

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126546</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-09-16 18:15:48 -0700</bug_when>
    <thetext>Committed r189890: &lt;http://trac.webkit.org/changeset/189890&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126606</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-16 22:17:11 -0700</bug_when>
    <thetext>The test added by this patch has been failing on Yosemite: https://bugs.webkit.org/show_bug.cgi?id=149246</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127645</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-09-21 08:55:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/22781974&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261336</attachid>
            <date>2015-09-16 16:37:48 -0700</date>
            <delta_ts>2015-09-16 17:04:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149237-20150916163736.patch</filename>
            <type>text/plain</type>
            <size>54209</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5ODgyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTFkZmY1YzViMjQ1MzE3YTc4ZmFlNTA5MGQyZWY4NTI1
MDMwYzMyNy4uZWM1YTRhYTI4YTI5ZmMyNDY3NTg4NmJjZDUxZWIzNzBlODVmNTI5NSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEx
NCBAQAorMjAxNS0wOS0xNiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgorCisgICAgICAgIENyZWF0ZSBhIGZvbnQgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRlc3Rpbmcg
Zm9udCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ5MjM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IHByb2plY3QgaW4gdGhlIFRvb2xzLyBkaXJlY3Rv
cnkgd2hpY2ggZ2VuZXJhdGVzIGEgZm9udCB3aGljaCBjYW4KKyAgICAgICAgYmUgdXNlZCBmb3Ig
dGVzdGluZyBmb250IGZlYXR1cmVzLiBUaGlzIGlzIGEgc3RhbmRhbG9uZSBwcm9qZWN0IGNvbnNp
c3Rpbmcgb2YgdHdvIGZpbGVzOgorICAgICAgICAxLiBBIGZpbGUgd2hpY2ggYWN0dWFsbHkgZ2Vu
ZXJhdGVzIHRoZSBieXRlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGZvbnQuIFRoaXMgZmlsZSBo
YXMKKyAgICAgICAgYSBzaW5nbGUgcHVibGljIGZ1bmN0aW9uOiBzdGQ6OnZlY3Rvcjx1aW50OF90
PiBnZW5lcmF0ZUZvbnQoKS4gVGhpcyBmaWxlIGlzIG5vdCBwbGF0Zm9ybQorICAgICAgICBzcGVj
aWZpYywgYW5kIG9ubHkgcmVsaWVzIG9uIHRoZSBDKysgU1RMLgorICAgICAgICAyLiBBIGZpbGUg
d2l0aCBhIG1haW4oKSB3aGljaCBjYWxscyBnZW5lcmF0ZUZvbnQoKSBhbmQgd3JpdGVzIG91dCB0
aGUgZm9udCwgYXMgd2VsbCBhcworICAgICAgICB1c2VzIHRoZSBmb250IHRvIHJlbmRlciBzb21l
IGRlbW9uc3RyYXRpb24gdGV4dCBpbnRvIGEgLnBuZyBmaWxlLiBUaGlzIGZpbGUgaXMgcGxhdGZv
cm0KKyAgICAgICAgc3BlY2lmaWMuCisKKyAgICAgICAgVGhlIGZvbnQgaXRzZWxmIG9ubHkgc3Vw
cG9ydHMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOgorICAgICAgICBBQkNERUZHSElKS0xNTk9Q
UVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CisgICAgICAgIEhvd2V2ZXIsIHRo
ZSBzaGFwZSBvZiB0aGVzZSBsZXR0ZXJzIGFyZSBlaXRoZXIgYW4gWCBvciBhIGNoZWNrIG1hcmsu
CisKKyAgICAgICAgVGhlIGxldHRlciAiQSIgYWx3YXlzIGlzIGEgY2hlY2sgbWFyay4KKyAgICAg
ICAgVGhlIGxldHRlciAiQiIgYWx3YXlzIGlzIGFuIFguCisgICAgICAgIFdpdGhvdXQgYW55IGZv
bnQgZmVhdHVyZXMgdHVybmVkIG9uLCB0aGUgcmVzdCBvZiB0aGUgbGV0dGVycyBhcmUgc2hvd24g
YXMgWC4KKworICAgICAgICBFYWNoIGZvbnQgZmVhdHVyZSBoYXMgYW4gbGV0dGVyIGFzc29jaWF0
ZWQgd2l0aCBpdC4gV2hlbiB0aGUgZm9udCBmZWF0dXJlIGlzIGVuYWJsZWQsCisgICAgICAgIHRo
YXQgbGV0dGVyIGlzIHNob3duIGFzIGEgY2hlY2sgbWFyay4gRm9yIGV4YW1wbGUsIHdoZW4gInNt
Y3AiIGlzIGVuYWJsZWQsICJKIiBpcyBzaG93bgorICAgICAgICBhcyBhIGNoZWNrIG1hcmsuCisK
KyAgICAgICAgSGVyZSBhcmUgdGhlIG1hcHBpbmdzIG9mIGZvbnQgZmVhdHVyZXMgdG8gbGV0dGVy
czoKKyAgICAgICAgbGlnYTogQworICAgICAgICBjbGlnOiBECisgICAgICAgIGRsaWc6IEUKKyAg
ICAgICAgaGxpZzogRgorICAgICAgICBjYWx0OiBHCisgICAgICAgIHN1YnM6IEgKKyAgICAgICAg
c3VwczogSQorICAgICAgICBzbWNwOiBKCisgICAgICAgIGMyc2M6IEsKKyAgICAgICAgcGNhcDog
TAorICAgICAgICBjMnBjOiBNCisgICAgICAgIHVuaWM6IE4KKyAgICAgICAgdGl0bDogTworICAg
ICAgICBvbnVtOiBQCisgICAgICAgIHBudW06IFEKKyAgICAgICAgdG51bTogUgorICAgICAgICBm
cmFjOiBTCisgICAgICAgIGFmcmM6IFQKKyAgICAgICAgb3JkbjogVQorICAgICAgICB6ZXJvOiBW
CisgICAgICAgIGhpc3Q6IFcKKyAgICAgICAganA3ODogWAorICAgICAgICBqcDgzOiBZCisgICAg
ICAgIGpwOTA6IFoKKyAgICAgICAganAwNDogYQorICAgICAgICBzbXBsOiBiCisgICAgICAgIHRy
YWQ6IGMKKyAgICAgICAgZndpZDogZAorICAgICAgICBwd2lkOiBlCisgICAgICAgIHJ1Ynk6IGYK
KworICAgICAgICAqIEZvbnRXaXRoRmVhdHVyZXMvRm9udFdpdGhGZWF0dXJlcy54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGRlZC4KKyAgICAgICAgKiBGb250V2l0aEZlYXR1cmVzL0ZvbnRX
aXRoRmVhdHVyZXMvRm9udENyZWF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKGludGVncmFsTG9n
Mik6CisgICAgICAgIChyb3VuZERvd25Ub1Bvd2VyT2ZUd28pOgorICAgICAgICAoaXNGb3VyQnl0
ZUFsaWduZWQpOgorICAgICAgICAoY2xhbXBUbyk6CisgICAgICAgIChhcHBlbmQzMik6CisgICAg
ICAgICh3cml0ZUNGRkVuY29kZWROdW1iZXIpOgorICAgICAgICAoQ0ZGQnVpbGRlcjo6Q0ZGQnVp
bGRlcik6CisgICAgICAgIChDRkZCdWlsZGVyOjp0YWtlUmVzdWx0KToKKyAgICAgICAgKENGRkJ1
aWxkZXI6Om1vdmVUbyk6CisgICAgICAgIChDRkZCdWlsZGVyOjpsaW5lVG8pOgorICAgICAgICAo
Q0ZGQnVpbGRlcjo6Y3VydmVUb0N1YmljKToKKyAgICAgICAgKENGRkJ1aWxkZXI6OmNsb3NlUGF0
aCk6CisgICAgICAgIChDRkZCdWlsZGVyOjp3cml0ZVBvaW50KToKKyAgICAgICAgKGdlbmVyYXRl
Qm94Q2hhclN0cmluZyk6CisgICAgICAgIChnZW5lcmF0ZUNoZWNrQ2hhclN0cmluZyk6CisgICAg
ICAgIChnZW5lcmF0ZVhDaGFyU3RyaW5nKToKKyAgICAgICAgKGNoYXJTdHJpbmdGb3JHbHlwaCk6
CisgICAgICAgIChHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKEdlbmVyYXRvcjo6UGxh
Y2Vob2xkZXI6OlBsYWNlaG9sZGVyKToKKyAgICAgICAgKEdlbmVyYXRvcjo6UGxhY2Vob2xkZXI6
OnBvcHVsYXRlKToKKyAgICAgICAgKEdlbmVyYXRvcjo6UGxhY2Vob2xkZXI6On5QbGFjZWhvbGRl
cik6CisgICAgICAgIChHZW5lcmF0b3I6OnBsYWNlaG9sZGVyKToKKyAgICAgICAgKEdlbmVyYXRv
cjo6YXBwZW5kMTYpOgorICAgICAgICAoR2VuZXJhdG9yOjphcHBlbmQzMik6CisgICAgICAgIChH
ZW5lcmF0b3I6OmFwcGVuZDMyQml0Q29kZSk6CisgICAgICAgIChHZW5lcmF0b3I6Om92ZXJ3cml0
ZTE2KToKKyAgICAgICAgKEdlbmVyYXRvcjo6b3ZlcndyaXRlMzIpOgorICAgICAgICAoR2VuZXJh
dG9yOjphcHBlbmRDRkZUYWJsZSk6CisgICAgICAgIChHZW5lcmF0b3I6OmFwcGVuZFN1YnN0aXR1
dGlvblN1YnRhYmxlKToKKyAgICAgICAgKEdlbmVyYXRvcjo6YXBwZW5kU2NyaXB0U3VidGFibGUp
OgorICAgICAgICAoR2VuZXJhdG9yOjphcHBlbmRHU1VCVGFibGUpOgorICAgICAgICAoR2VuZXJh
dG9yOjphcHBlbmRPUzJUYWJsZSk6CisgICAgICAgIChHZW5lcmF0b3I6OmFwcGVuZEZvcm1hdDEy
Q01BUFRhYmxlKToKKyAgICAgICAgKEdlbmVyYXRvcjo6YXBwZW5kRm9ybWF0NENNQVBUYWJsZSk6
CisgICAgICAgIChHZW5lcmF0b3I6OmFwcGVuZENNQVBUYWJsZSk6CisgICAgICAgIChHZW5lcmF0
b3I6OmFwcGVuZEhFQURUYWJsZSk6CisgICAgICAgIChHZW5lcmF0b3I6OmFwcGVuZEhIRUFUYWJs
ZSk6CisgICAgICAgIChHZW5lcmF0b3I6OmFwcGVuZEhNVFhUYWJsZSk6CisgICAgICAgIChHZW5l
cmF0b3I6OmFwcGVuZE1BWFBUYWJsZSk6CisgICAgICAgIChHZW5lcmF0b3I6OmFwcGVuZE5BTUVU
YWJsZSk6CisgICAgICAgIChHZW5lcmF0b3I6OmFwcGVuZFBPU1RUYWJsZSk6CisgICAgICAgIChH
ZW5lcmF0b3I6OmNhbGN1bGF0ZUNoZWNrc3VtKToKKyAgICAgICAgKEdlbmVyYXRvcjo6YXBwZW5k
VGFibGUpOgorICAgICAgICAoZ2VuZXJhdGVGb250KToKKyAgICAgICAgKiBGb250V2l0aEZlYXR1
cmVzL0ZvbnRXaXRoRmVhdHVyZXMvRm9udENyZWF0b3IuaDogQWRkZWQuCisgICAgICAgICogRm9u
dFdpdGhGZWF0dXJlcy9Gb250V2l0aEZlYXR1cmVzL21haW4uY3BwOiBBZGRlZC4KKyAgICAgICAg
KGRyYXdUZXh0V2l0aEZlYXR1cmUpOgorICAgICAgICAobWFpbik6CisKIDIwMTUtMDktMTYgIENv
bW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIxODk4NzUgYW5kIHIxODk4NzguCmRpZmYgLS1naXQgYS9Ub29scy9G
b250V2l0aEZlYXR1cmVzL0ZvbnRXaXRoRmVhdHVyZXMueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1Rvb2xzL0ZvbnRXaXRoRmVhdHVyZXMvRm9udFdpdGhGZWF0dXJlcy54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1ZmY1NzBlMzkyYTFhZDEwNzJhY2MzMTE2NmRmYWUz
NWU3MDI5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9Gb250V2l0aEZlYXR1cmVzL0ZvbnRX
aXRoRmVhdHVyZXMueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMCwwICsxLDI2OCBAQAor
Ly8gISQqVVRGOCokIQoreworCWFyY2hpdmVWZXJzaW9uID0gMTsKKwljbGFzc2VzID0geworCX07
CisJb2JqZWN0VmVyc2lvbiA9IDQ2OworCW9iamVjdHMgPSB7CisKKy8qIEJlZ2luIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCisJCUMyODYyNkE2MUJBOTAyQjkwMDE5NjFENiAvKiBtYWluLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyODYyNkE1MUJB
OTAyQjkwMDE5NjFENiAvKiBtYWluLmNwcCAqLzsgfTsKKwkJQzI4NjI2QUQxQkE5MDRGMTAwMTk2
MUQ2IC8qIENvcmVHcmFwaGljcy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjg2MjZBQzFCQTkwNEYxMDAxOTYxRDYgLyogQ29yZUdy
YXBoaWNzLmZyYW1ld29yayAqLzsgfTsKKwkJQzI4NjI2QUYxQkE5MDYyQzAwMTk2MUQ2IC8qIElt
YWdlSU8uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzI4NjI2QUUxQkE5MDYyQzAwMTk2MUQ2IC8qIEltYWdlSU8uZnJhbWV3b3JrICov
OyB9OworCQlDMjg2MjZCMTFCQTkwNkMxMDAxOTYxRDYgLyogQ29yZUZvdW5kYXRpb24uZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI4
NjI2QjAxQkE5MDZDMTAwMTk2MUQ2IC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsK
KwkJQzI4NjI2QjMxQkE5MDZEMTAwMTk2MUQ2IC8qIENvcmVTZXJ2aWNlcy5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjg2MjZCMjFC
QTkwNkQxMDAxOTYxRDYgLyogQ29yZVNlcnZpY2VzLmZyYW1ld29yayAqLzsgfTsKKwkJQzI4NjI2
QjUxQkE5MDdBRTAwMTk2MUQ2IC8qIENvcmVUZXh0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyODYyNkI0MUJBOTA3QUUwMDE5NjFE
NiAvKiBDb3JlVGV4dC5mcmFtZXdvcmsgKi87IH07CisJCUMyODYyNkI4MUJBOTE3NjIwMDE5NjFE
NiAvKiBGb250Q3JlYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMjg2MjZCNjFCQTkxNzYyMDAxOTYxRDYgLyogRm9udENyZWF0b3IuY3BwICov
OyBzZXR0aW5ncyA9IHtBU1NFVF9UQUdTID0gKCk7IH07IH07CisvKiBFbmQgUEJYQnVpbGRGaWxl
IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICov
CisJCUMyODYyNkEwMUJBOTAyQjkwMDE5NjFENiAvKiBDb3B5RmlsZXMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWRzdFBhdGggPSAvdXNyL3NoYXJlL21hbi9tYW4xLzsKKwkJCWRzdFN1YmZvbGRlclNw
ZWMgPSAwOworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDE7CisJCX07CisvKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0
aW9uICovCisKKy8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQlDMjg2MjZB
MjFCQTkwMkI5MDAxOTYxRDYgLyogRm9udFdpdGhGZWF0dXJlcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxl
IjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gRm9udFdpdGhGZWF0dXJlczsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJQzI4NjI2QTUxQkE5MDJCOTAwMTk2MUQ2IC8q
IG1haW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gbWFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyODYyNkFDMUJBOTA0RjEwMDE5NjFENiAvKiBDb3JlR3JhcGhpY3MuZnJh
bWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
d3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrOyBwYXRoID0g
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlR3JhcGhpY3MuZnJhbWV3b3JrOyBzb3VyY2VU
cmVlID0gU0RLUk9PVDsgfTsKKwkJQzI4NjI2QUUxQkE5MDYyQzAwMTk2MUQ2IC8qIEltYWdlSU8u
ZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBJbWFnZUlPLmZyYW1ld29yazsgcGF0aCA9IFN5
c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSW1hZ2VJTy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBT
REtST09UOyB9OworCQlDMjg2MjZCMDFCQTkwNkMxMDAxOTYxRDYgLyogQ29yZUZvdW5kYXRpb24u
ZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcms7IHBh
dGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1ld29yazsg
c291cmNlVHJlZSA9IFNES1JPT1Q7IH07CisJCUMyODYyNkIyMUJBOTA2RDEwMDE5NjFENiAvKiBD
b3JlU2VydmljZXMuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDb3JlU2VydmljZXMuZnJh
bWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJh
bWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJQzI4NjI2QjQxQkE5MDdBRTAwMTk2
MUQ2IC8qIENvcmVUZXh0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29yZVRleHQuZnJh
bWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlVGV4dC5mcmFtZXdv
cms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQlDMjg2MjZCNjFCQTkxNzYyMDAxOTYxRDYg
LyogRm9udENyZWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9udENyZWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjg2MjZCNzFC
QTkxNzYyMDAxOTYxRDYgLyogRm9udENyZWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRm9udENyZWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKy8qIEVu
ZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlDMjg2MjY5RjFCQTkwMkI5MDAxOTYxRDYgLyogRnJhbWV3
b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUMyODYyNkI1MUJBOTA3
QUUwMDE5NjFENiAvKiBDb3JlVGV4dC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlD
Mjg2MjZCMzFCQTkwNkQxMDAxOTYxRDYgLyogQ29yZVNlcnZpY2VzLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovLAorCQkJCUMyODYyNkIxMUJBOTA2QzEwMDE5NjFENiAvKiBDb3JlRm91bmRhdGlv
bi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlDMjg2MjZBRjFCQTkwNjJDMDAxOTYx
RDYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlDMjg2MjZBRDFC
QTkwNEYxMDAxOTYxRDYgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
LAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9
OworLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4g
UEJYR3JvdXAgc2VjdGlvbiAqLworCQlDMjg2MjY5OTFCQTkwMkI5MDAxOTYxRDYgPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUMyODYyNkI0MUJBOTA3QUUwMDE5
NjFENiAvKiBDb3JlVGV4dC5mcmFtZXdvcmsgKi8sCisJCQkJQzI4NjI2QjIxQkE5MDZEMTAwMTk2
MUQ2IC8qIENvcmVTZXJ2aWNlcy5mcmFtZXdvcmsgKi8sCisJCQkJQzI4NjI2QjAxQkE5MDZDMTAw
MTk2MUQ2IC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayAqLywKKwkJCQlDMjg2MjZBRTFCQTkw
NjJDMDAxOTYxRDYgLyogSW1hZ2VJTy5mcmFtZXdvcmsgKi8sCisJCQkJQzI4NjI2QUMxQkE5MDRG
MTAwMTk2MUQ2IC8qIENvcmVHcmFwaGljcy5mcmFtZXdvcmsgKi8sCisJCQkJQzI4NjI2QTQxQkE5
MDJCOTAwMTk2MUQ2IC8qIEZvbnRXaXRoRmVhdHVyZXMgKi8sCisJCQkJQzI4NjI2QTMxQkE5MDJC
OTAwMTk2MUQ2IC8qIFByb2R1Y3RzICovLAorCQkJKTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CisJCUMyODYyNkEzMUJBOTAyQjkwMDE5NjFENiAvKiBQcm9kdWN0cyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQzI4NjI2QTIxQkE5MDJC
OTAwMTk2MUQ2IC8qIEZvbnRXaXRoRmVhdHVyZXMgKi8sCisJCQkpOworCQkJbmFtZSA9IFByb2R1
Y3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQzI4NjI2QTQxQkE5MDJC
OTAwMTk2MUQ2IC8qIEZvbnRXaXRoRmVhdHVyZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUMyODYyNkE1MUJBOTAyQjkwMDE5NjFENiAvKiBtYWluLmNw
cCAqLywKKwkJCQlDMjg2MjZCNjFCQTkxNzYyMDAxOTYxRDYgLyogRm9udENyZWF0b3IuY3BwICov
LAorCQkJCUMyODYyNkI3MUJBOTE3NjIwMDE5NjFENiAvKiBGb250Q3JlYXRvci5oICovLAorCQkJ
KTsKKwkJCXBhdGggPSBGb250V2l0aEZlYXR1cmVzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKy8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWE5hdGl2
ZVRhcmdldCBzZWN0aW9uICovCisJCUMyODYyNkExMUJBOTAyQjkwMDE5NjFENiAvKiBGb250V2l0
aEZlYXR1cmVzICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25m
aWd1cmF0aW9uTGlzdCA9IEMyODYyNkE5MUJBOTAyQjkwMDE5NjFENiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiRm9udFdpdGhGZWF0dXJlcyIgKi87CisJ
CQlidWlsZFBoYXNlcyA9ICgKKwkJCQlDMjg2MjY5RTFCQTkwMkI5MDAxOTYxRDYgLyogU291cmNl
cyAqLywKKwkJCQlDMjg2MjY5RjFCQTkwMkI5MDAxOTYxRDYgLyogRnJhbWV3b3JrcyAqLywKKwkJ
CQlDMjg2MjZBMDFCQTkwMkI5MDAxOTYxRDYgLyogQ29weUZpbGVzICovLAorCQkJKTsKKwkJCWJ1
aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUg
PSBGb250V2l0aEZlYXR1cmVzOworCQkJcHJvZHVjdE5hbWUgPSBGb250V2l0aEZlYXR1cmVzOwor
CQkJcHJvZHVjdFJlZmVyZW5jZSA9IEMyODYyNkEyMUJBOTAyQjkwMDE5NjFENiAvKiBGb250V2l0
aEZlYXR1cmVzICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50
b29sIjsKKwkJfTsKKy8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCisvKiBCZWdp
biBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKwkJQzI4NjI2OUExQkE5MDJCOTAwMTk2MUQ2IC8qIFBy
b2plY3Qgb2JqZWN0ICovID0geworCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWF0dHJpYnV0ZXMg
PSB7CisJCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA3MDA7CisJCQkJT1JHQU5JWkFUSU9OTkFNRSA9
IExpdGhlcnVtOworCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7CisJCQkJCUMyODYyNkExMUJBOTAy
QjkwMDE5NjFENiA9IHsKKwkJCQkJCUNyZWF0ZWRPblRvb2xzVmVyc2lvbiA9IDcuMDsKKwkJCQkJ
fTsKKwkJCQl9OworCQkJfTsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBDMjg2MjY5RDFC
QTkwMkI5MDAxOTYxRDYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJGb250V2l0aEZlYXR1cmVzIiAqLzsKKwkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2Rl
IDMuMiI7CisJCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CisJCQloYXNTY2FubmVkRm9y
RW5jb2RpbmdzID0gMDsKKwkJCWtub3duUmVnaW9ucyA9ICgKKwkJCQllbiwKKwkJCSk7CisJCQlt
YWluR3JvdXAgPSBDMjg2MjY5OTFCQTkwMkI5MDAxOTYxRDY7CisJCQlwcm9kdWN0UmVmR3JvdXAg
PSBDMjg2MjZBMzFCQTkwMkI5MDAxOTYxRDYgLyogUHJvZHVjdHMgKi87CisJCQlwcm9qZWN0RGly
UGF0aCA9ICIiOworCQkJcHJvamVjdFJvb3QgPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJQzI4
NjI2QTExQkE5MDJCOTAwMTk2MUQ2IC8qIEZvbnRXaXRoRmVhdHVyZXMgKi8sCisJCQkpOworCQl9
OworLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTb3VyY2VzQnVp
bGRQaGFzZSBzZWN0aW9uICovCisJCUMyODYyNjlFMUJBOTAyQjkwMDE5NjFENiAvKiBTb3VyY2Vz
ICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJQzI4NjI2QTYxQkE5MDJCOTAwMTk2
MUQ2IC8qIG1haW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzI4NjI2QjgxQkE5MTc2MjAwMTk2
MUQ2IC8qIEZvbnRDcmVhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2Vj
dGlvbiAqLworCQlDMjg2MjZBNzFCQTkwMkI5MDAxOTYxRDYgLyogRGVidWcgKi8gPSB7CisJCQlp
c2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQUxX
QVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5E
QVJEID0gImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7CisJCQkJ
Q0xBTkdfRU5BQkxFX01PRFVMRVMgPSBZRVM7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0g
WUVTOworCQkJCUNMQU5HX1dBUk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dB
Uk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpD
X0lTQV9VU0FHRSA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX0VNUFRZX0JPRFkgPSBZRVM7
CisJCQkJQ0xBTkdfV0FSTl9FTlVNX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9J
TlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX09CSkNfUk9PVF9DTEFTUyA9IFlF
U19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX1VOUkVBQ0hBQkxFX0NPREUgPSBZRVM7CisJCQkJQ0xB
TkdfV0FSTl9fRFVQTElDQVRFX01FVEhPRF9NQVRDSCA9IFlFUzsKKwkJCQlDT1BZX1BIQVNFX1NU
UklQID0gTk87CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gZHdhcmY7CisJCQkJRU5B
QkxFX1NUUklDVF9PQkpDX01TR1NFTkQgPSBZRVM7CisJCQkJRU5BQkxFX1RFU1RBQklMSVRZID0g
WUVTOworCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CisJCQkJR0NDX0RZTkFN
SUNfTk9fUElDID0gTk87CisJCQkJR0NDX05PX0NPTU1PTl9CTE9DS1MgPSBZRVM7CisJCQkJR0ND
X09QVElNSVpBVElPTl9MRVZFTCA9IDA7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9O
UyA9ICgKKwkJCQkJIkRFQlVHPTEiLAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkpOworCQkJ
CUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX0FC
T1VUX1JFVFVSTl9UWVBFID0gWUVTX0VSUk9SOworCQkJCUdDQ19XQVJOX1VOREVDTEFSRURfU0VM
RUNUT1IgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFU19BR0dS
RVNTSVZFOworCQkJCUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUzsKKwkJCQlHQ0NfV0FS
Tl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7CisJCQkJTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0g
MTAuMTE7CisJCQkJTVRMX0VOQUJMRV9ERUJVR19JTkZPID0gWUVTOworCQkJCU9OTFlfQUNUSVZF
X0FSQ0ggPSBZRVM7CisJCQkJU0RLUk9PVCA9IG1hY29zeDsKKwkJCX07CisJCQluYW1lID0gRGVi
dWc7CisJCX07CisJCUMyODYyNkE4MUJBOTAyQjkwMDE5NjFENiAvKiBSZWxlYXNlICovID0gewor
CQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJ
CUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNMQU5HX0NYWF9MQU5HVUFHRV9T
VEFOREFSRCA9ICJnbnUrKzB4IjsKKwkJCQlDTEFOR19DWFhfTElCUkFSWSA9ICJsaWJjKysiOwor
CQkJCUNMQU5HX0VOQUJMRV9NT0RVTEVTID0gWUVTOworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FS
QyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0JPT0xfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFO
R19XQVJOX0NPTlNUQU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9ESVJFQ1Rf
T0JKQ19JU0FfVVNBR0UgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZID0g
WUVTOworCQkJCUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dB
Uk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9PQkpDX1JPT1RfQ0xBU1Mg
PSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9VTlJFQUNIQUJMRV9DT0RFID0gWUVTOworCQkJ
CUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CisJCQkJQ09QWV9QSEFT
RV9TVFJJUCA9IE5POworCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRo
LWRzeW0iOworCQkJCUVOQUJMRV9OU19BU1NFUlRJT05TID0gTk87CisJCQkJRU5BQkxFX1NUUklD
VF9PQkpDX01TR1NFTkQgPSBZRVM7CisJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5
OTsKKwkJCQlHQ0NfTk9fQ09NTU9OX0JMT0NLUyA9IFlFUzsKKwkJCQlHQ0NfV0FSTl82NF9UT18z
Ml9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9
IFlFU19FUlJPUjsKKwkJCQlHQ0NfV0FSTl9VTkRFQ0xBUkVEX1NFTEVDVE9SID0gWUVTOworCQkJ
CUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVNfQUdHUkVTU0lWRTsKKwkJCQlHQ0Nf
V0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxF
ID0gWUVTOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjExOworCQkJCU1UTF9F
TkFCTEVfREVCVUdfSU5GTyA9IE5POworCQkJCVNES1JPT1QgPSBtYWNvc3g7CisJCQl9OworCQkJ
bmFtZSA9IFJlbGVhc2U7CisJCX07CisJCUMyODYyNkFBMUJBOTAyQjkwMDE5NjFENiAvKiBEZWJ1
ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOworCQkJfTsKKwkJCW5h
bWUgPSBEZWJ1ZzsKKwkJfTsKKwkJQzI4NjI2QUIxQkE5MDJCOTAwMTk2MUQ2IC8qIFJlbGVhc2Ug
Ki8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3Mg
PSB7CisJCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKKwkJCX07CisJCQluYW1l
ID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICov
CisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCQlDMjg2MjY5RDFC
QTkwMkI5MDAxOTYxRDYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJGb250V2l0aEZlYXR1cmVzIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7
CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUMyODYyNkE3MUJBOTAyQjkwMDE5NjFE
NiAvKiBEZWJ1ZyAqLywKKwkJCQlDMjg2MjZBODFCQTkwMkI5MDAxOTYxRDYgLyogUmVsZWFzZSAq
LywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworCQlDMjg2MjZBOTFCQTkwMkI5
MDAxOTYxRDYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQg
IkZvbnRXaXRoRmVhdHVyZXMiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsK
KwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQzI4NjI2QUExQkE5MDJCOTAwMTk2MUQ2
IC8qIERlYnVnICovLAorCQkJCUMyODYyNkFCMUJBOTAyQjkwMDE5NjFENiAvKiBSZWxlYXNlICov
LAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJfTsKKy8q
IEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwl9OworCXJvb3RPYmplY3QgPSBD
Mjg2MjY5QTFCQTkwMkI5MDAxOTYxRDYgLyogUHJvamVjdCBvYmplY3QgKi87Cit9CmRpZmYgLS1n
aXQgYS9Ub29scy9Gb250V2l0aEZlYXR1cmVzL0ZvbnRXaXRoRmVhdHVyZXMvRm9udENyZWF0b3Iu
Y3BwIGIvVG9vbHMvRm9udFdpdGhGZWF0dXJlcy9Gb250V2l0aEZlYXR1cmVzL0ZvbnRDcmVhdG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hNDdhOTQ5NWJhYmRlOTI3NWFkMmI0ZTkxMDAxZDJkNTNlOTAzOTYx
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRm9udFdpdGhGZWF0dXJlcy9Gb250V2l0aEZlYXR1
cmVzL0ZvbnRDcmVhdG9yLmNwcApAQCAtMCwwICsxLDc2NyBAQAorLy8KKy8vICBGb250Q3JlYXRv
ci5jcHAKKy8vICBGb250V2l0aEZlYXR1cmVzCisvLworLy8gIENyZWF0ZWQgYnkgTGl0aGVydW0g
b24gOS8xNS8xNS4KKy8vICBDb3B5cmlnaHQgwqkgMjAxNSBMaXRoZXJ1bS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vCisKKyNpbmNsdWRlICJGb250Q3JlYXRvci5oIgorCisjaW5jbHVkZSA8Y2Fz
c2VydD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8YXJyYXk+CisKK3N0YXRpYyBjb25z
dCBzaXplX3QgaGVhZGVyU2l6ZSA9IDEyOworc3RhdGljIGNvbnN0IHNpemVfdCBkaXJlY3RvcnlF
bnRyeVNpemUgPSAxNjsKK3N0YXRpYyBjb25zdCB1aW50MTZfdCB1bml0c1BlckVtID0gMTAyNDsK
K3N0YXRpYyBjb25zdCB1aW50MTZfdCBudW1HbHlwaHMgPSAyNiAqIDIgKyAxOworCitzdGF0aWMg
aW5saW5lIHVpbnQxNl90IGludGVncmFsTG9nMih1aW50MTZfdCB4KSB7CisgICAgdWludDE2X3Qg
cmVzdWx0ID0gMDsKKyAgICB3aGlsZSAoeCA+Pj0gMSkKKyAgICAgICAgKytyZXN1bHQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB1aW50MTZfdCByb3VuZERvd25Ub1Bv
d2VyT2ZUd28odWludDE2X3QgeCkgeworICAgIHggfD0geCA+PiAxOworICAgIHggfD0geCA+PiAy
OworICAgIHggfD0geCA+PiA0OworICAgIHggfD0geCA+PiA4OworICAgIHJldHVybiAoeCA+PiAx
KSArIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvdXJCeXRlQWxpZ25lZChzaXplX3Qg
eCkKK3sKKyAgICByZXR1cm4gISh4ICYgMyk7Cit9CisKKy8vIEFzc3VtcHRpb246IFQyIGNhbiBo
b2xkIGV2ZXJ5IHZhbHVlIHRoYXQgYSBUMSBjYW4gaG9sZC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMj4gc3RhdGljIGlubGluZSBUMSBjbGFtcFRvKFQyIHgpCit7CisgICAgeCA9
IHN0ZDo6bWluKHgsIHN0YXRpY19jYXN0PFQyPihzdGQ6Om51bWVyaWNfbGltaXRzPFQxPjo6bWF4
KCkpKTsKKyAgICB4ID0gc3RkOjptYXgoeCwgc3RhdGljX2Nhc3Q8VDI+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8VDE+OjptaW4oKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUMT4oeCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBWPgorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZDMyKFYmIHJl
c3VsdCwgdWludDMyX3QgdmFsdWUpCit7CisgICAgcmVzdWx0LnB1c2hfYmFjayh2YWx1ZSA+PiAy
NCk7CisgICAgcmVzdWx0LnB1c2hfYmFjayh2YWx1ZSA+PiAxNik7CisgICAgcmVzdWx0LnB1c2hf
YmFjayh2YWx1ZSA+PiA4KTsKKyAgICByZXN1bHQucHVzaF9iYWNrKHZhbHVlKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFY+CitzdGF0aWMgdm9pZCB3cml0ZUNGRkVuY29kZWROdW1iZXIoViYg
dmVjdG9yLCBmbG9hdCBudW1iZXIpCit7CisgICAgdmVjdG9yLnB1c2hfYmFjaygweEZGKTsKKyAg
ICAvLyBDb252ZXJ0IHRvIDE2LjE2IGZpeGVkLXBvaW50CisgICAgYXBwZW5kMzIodmVjdG9yLCBj
bGFtcFRvPGludDMyX3Q+KG51bWJlciAqIDB4MTAwMDApKTsKK30KKworc3RhdGljIGNvbnN0IGNo
YXIgckxpbmVUbyA9IDB4MDU7CitzdGF0aWMgY29uc3QgY2hhciByckN1cnZlVG8gPSAweDA4Owor
c3RhdGljIGNvbnN0IGNoYXIgZW5kQ2hhciA9IDB4MGU7CitzdGF0aWMgY29uc3QgY2hhciByTW92
ZVRvID0gMHgxNTsKKworY2xhc3MgQ0ZGQnVpbGRlciB7CitwdWJsaWM6CisgICAgQ0ZGQnVpbGRl
cihmbG9hdCB3aWR0aCwgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gb3JpZ2luKQorICAgIHsKKyAg
ICAgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKHJlc3VsdCwgd2lkdGgpOworICAgICAgICB3cml0
ZUNGRkVuY29kZWROdW1iZXIocmVzdWx0LCBvcmlnaW4uZmlyc3QpOworICAgICAgICB3cml0ZUNG
RkVuY29kZWROdW1iZXIocmVzdWx0LCBvcmlnaW4uc2Vjb25kKTsKKyAgICAgICAgcmVzdWx0LnB1
c2hfYmFjayhyTW92ZVRvKTsKKyAgICB9CisKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiB0YWtl
UmVzdWx0KCkgeworICAgICAgICByZXN1bHQucHVzaF9iYWNrKGVuZENoYXIpOworICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlVG8oc3RkOjpw
YWlyPGZsb2F0LCBmbG9hdD4gdGFyZ2V0UG9pbnQsIGJvb2wgY2xvc2VkKQorICAgIHsKKyAgICAg
ICAgaWYgKGNsb3NlZCAmJiAhcmVzdWx0LmVtcHR5KCkpCisgICAgICAgICAgICBjbG9zZVBhdGgo
KTsKKworICAgICAgICBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBkZXN0aW5hdGlvbiA9IHRhcmdl
dFBvaW50OworCisgICAgICAgIHdyaXRlUG9pbnQoZGVzdGluYXRpb24pOworICAgICAgICByZXN1
bHQucHVzaF9iYWNrKHJNb3ZlVG8pOworCisgICAgICAgIHN0YXJ0aW5nUG9pbnQgPSBjdXJyZW50
OworICAgIH0KKworICAgIHZvaWQgbGluZVRvKHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IHRhcmdl
dFBvaW50KQorICAgIHsKKyAgICAgICAgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gZGVzdGluYXRp
b24gPSB0YXJnZXRQb2ludDsKKworICAgICAgICB3cml0ZVBvaW50KGRlc3RpbmF0aW9uKTsKKyAg
ICAgICAgcmVzdWx0LnB1c2hfYmFjayhyTGluZVRvKTsKKyAgICB9CisKKyAgICB2b2lkIGN1cnZl
VG9DdWJpYyhzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBwb2ludDEsIHN0ZDo6cGFpcjxmbG9hdCwg
ZmxvYXQ+IHBvaW50Miwgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gdGFyZ2V0UG9pbnQpCisgICAg
eworICAgICAgICBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBkZXN0aW5hdGlvbjEgPSBwb2ludDE7
CisgICAgICAgIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGRlc3RpbmF0aW9uMiA9IHBvaW50MjsK
KyAgICAgICAgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gZGVzdGluYXRpb24zID0gdGFyZ2V0UG9p
bnQ7CisKKyAgICAgICAgd3JpdGVQb2ludChkZXN0aW5hdGlvbjEpOworICAgICAgICB3cml0ZVBv
aW50KGRlc3RpbmF0aW9uMik7CisgICAgICAgIHdyaXRlUG9pbnQoZGVzdGluYXRpb24zKTsKKyAg
ICAgICAgcmVzdWx0LnB1c2hfYmFjayhyckN1cnZlVG8pOworICAgIH0KKworICAgIHZvaWQgY2xv
c2VQYXRoKCkKKyAgICB7CisgICAgICAgIGlmIChjdXJyZW50ICE9IHN0YXJ0aW5nUG9pbnQpCisg
ICAgICAgICAgICBsaW5lVG8oc3RhcnRpbmdQb2ludCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IHZvaWQgd3JpdGVQb2ludChzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBkZXN0aW5hdGlvbikKKyAg
ICB7CisgICAgICAgIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGRlbHRhID0gc3RkOjptYWtlX3Bh
aXIoZGVzdGluYXRpb24uZmlyc3QgLSBjdXJyZW50LmZpcnN0LCBkZXN0aW5hdGlvbi5zZWNvbmQg
LSBjdXJyZW50LnNlY29uZCk7CisgICAgICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihyZXN1bHQs
IGRlbHRhLmZpcnN0KTsKKyAgICAgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKHJlc3VsdCwgZGVs
dGEuc2Vjb25kKTsKKworICAgICAgICBjdXJyZW50ID0gZGVzdGluYXRpb247CisgICAgfQorCisg
ICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHN0ZDo6cGFpcjxmbG9hdCwgZmxv
YXQ+IHN0YXJ0aW5nUG9pbnQ7CisgICAgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gY3VycmVudDsK
K307CisKK3N0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGdlbmVyYXRlQm94Q2hhclN0cmluZygpIHsKKyAg
ICBDRkZCdWlsZGVyIGJ1aWxkZXIodW5pdHNQZXJFbSwgc3RkOjptYWtlX3BhaXIoMC5mLCAwLmYp
KTsKKyAgICBidWlsZGVyLm1vdmVUbyhzdGQ6Om1ha2VfcGFpcigyMDAuZiwgMjAwLmYpLCBmYWxz
ZSk7CisgICAgYnVpbGRlci5saW5lVG8oc3RkOjptYWtlX3BhaXIoMjAwLmYsIDgwMC5mKSk7Cisg
ICAgYnVpbGRlci5saW5lVG8oc3RkOjptYWtlX3BhaXIoODAwLmYsIDgwMC5mKSk7CisgICAgYnVp
bGRlci5saW5lVG8oc3RkOjptYWtlX3BhaXIoODAwLmYsIDIwMC5mKSk7CisgICAgYnVpbGRlci5j
bG9zZVBhdGgoKTsKKyAgICByZXR1cm4gYnVpbGRlci50YWtlUmVzdWx0KCk7Cit9CisKK3N0ZDo6
dmVjdG9yPHVpbnQ4X3Q+IGdlbmVyYXRlQ2hlY2tDaGFyU3RyaW5nKCkgeworICAgIENGRkJ1aWxk
ZXIgYnVpbGRlcih1bml0c1BlckVtLCBzdGQ6Om1ha2VfcGFpcigwLmYsIDAuZikpOworICAgIGJ1
aWxkZXIubW92ZVRvKHN0ZDo6bWFrZV9wYWlyKDIwMC5mLCA1MDAuZiksIGZhbHNlKTsKKyAgICBi
dWlsZGVyLmxpbmVUbyhzdGQ6Om1ha2VfcGFpcigyNTAuZiwgNTUwLmYpKTsKKyAgICBidWlsZGVy
LmxpbmVUbyhzdGQ6Om1ha2VfcGFpcig1MDAuZiwgMzAwLmYpKTsKKyAgICBidWlsZGVyLmxpbmVU
byhzdGQ6Om1ha2VfcGFpcig5MDAuZiwgNzAwLmYpKTsKKyAgICBidWlsZGVyLmxpbmVUbyhzdGQ6
Om1ha2VfcGFpcig5NTAuZiwgNjUwLmYpKTsKKyAgICBidWlsZGVyLmxpbmVUbyhzdGQ6Om1ha2Vf
cGFpcig1MDAuZiwgMjAwLmYpKTsKKyAgICBidWlsZGVyLmNsb3NlUGF0aCgpOworICAgIHJldHVy
biBidWlsZGVyLnRha2VSZXN1bHQoKTsKK30KKworc3RkOjp2ZWN0b3I8dWludDhfdD4gZ2VuZXJh
dGVYQ2hhclN0cmluZygpIHsKKyAgICBDRkZCdWlsZGVyIGJ1aWxkZXIodW5pdHNQZXJFbSwgc3Rk
OjptYWtlX3BhaXIoMC5mLCAwLmYpKTsKKyAgICBidWlsZGVyLm1vdmVUbyhzdGQ6Om1ha2VfcGFp
cig1MDAuMGYsIDU1MC4wZiksIGZhbHNlKTsKKyAgICBidWlsZGVyLmxpbmVUbyhzdGQ6Om1ha2Vf
cGFpcig5MDAuZiwgOTUwLmYpKTsKKyAgICBidWlsZGVyLmxpbmVUbyhzdGQ6Om1ha2VfcGFpcig5
NTAuZiwgOTAwLmYpKTsKKyAgICBidWlsZGVyLmxpbmVUbyhzdGQ6Om1ha2VfcGFpcig1NTAuZiwg
NTAwLmYpKTsKKyAgICBidWlsZGVyLmxpbmVUbyhzdGQ6Om1ha2VfcGFpcig5NTAuZiwgMTAwLmYp
KTsKKyAgICBidWlsZGVyLmxpbmVUbyhzdGQ6Om1ha2VfcGFpcig5MDAuZiwgIDUwLmYpKTsKKyAg
ICBidWlsZGVyLmxpbmVUbyhzdGQ6Om1ha2VfcGFpcig1MDAuZiwgNDUwLmYpKTsKKyAgICBidWls
ZGVyLmxpbmVUbyhzdGQ6Om1ha2VfcGFpcigxMDAuZiwgIDUwLmYpKTsKKyAgICBidWlsZGVyLmxp
bmVUbyhzdGQ6Om1ha2VfcGFpciggNTAuZiwgMTAwLmYpKTsKKyAgICBidWlsZGVyLmxpbmVUbyhz
dGQ6Om1ha2VfcGFpcig0NTAuZiwgNTAwLmYpKTsKKyAgICBidWlsZGVyLmxpbmVUbyhzdGQ6Om1h
a2VfcGFpciggNTAuZiwgOTAwLmYpKTsKKyAgICBidWlsZGVyLmxpbmVUbyhzdGQ6Om1ha2VfcGFp
cigxMDAuZiwgOTUwLmYpKTsKKyAgICBidWlsZGVyLmNsb3NlUGF0aCgpOworICAgIHJldHVybiBi
dWlsZGVyLnRha2VSZXN1bHQoKTsKK30KKworc3RkOjp2ZWN0b3I8dWludDhfdD4mIGNoYXJTdHJp
bmdGb3JHbHlwaCh1aW50MTZfdCBnbHlwaCwgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGJveENoYXJT
dHJpbmcsIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBjaGVja0NoYXJTdHJpbmcsIHN0ZDo6dmVjdG9y
PHVpbnQ4X3Q+JiB4Q2hhclN0cmluZykgeworICAgIGlmIChnbHlwaCA9PSAwKQorICAgICAgICBy
ZXR1cm4gYm94Q2hhclN0cmluZzsKKyAgICBpZiAoZ2x5cGggPT0gMSkKKyAgICAgICAgcmV0dXJu
IGNoZWNrQ2hhclN0cmluZzsKKyAgICByZXR1cm4geENoYXJTdHJpbmc7Cit9CisKK2NsYXNzIEdl
bmVyYXRvciB7CitwdWJsaWM6CisgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZ2VuZXJhdGUoKSB7
CisgICAgICAgIHVpbnQxNl90IG51bVRhYmxlcyA9IDEwOworICAgICAgICB1aW50MTZfdCByb3Vu
ZGVkTnVtVGFibGVzID0gcm91bmREb3duVG9Qb3dlck9mVHdvKG51bVRhYmxlcyk7CisgICAgICAg
IHVpbnQxNl90IHNlYXJjaFJhbmdlID0gcm91bmRlZE51bVRhYmxlcyAqIDE2OyAvLyBzZWFyY2hS
YW5nZTogIihNYXhpbXVtIHBvd2VyIG9mIDIgPD0gbnVtVGFibGVzKSB4IDE2LiIKKworICAgICAg
ICByZXN1bHQucHVzaF9iYWNrKCdPJyk7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soJ1QnKTsK
KyAgICAgICAgcmVzdWx0LnB1c2hfYmFjaygnVCcpOworICAgICAgICByZXN1bHQucHVzaF9iYWNr
KCdPJyk7CisgICAgICAgIGFwcGVuZDE2KG51bVRhYmxlcyk7CisgICAgICAgIGFwcGVuZDE2KHNl
YXJjaFJhbmdlKTsKKyAgICAgICAgYXBwZW5kMTYoaW50ZWdyYWxMb2cyKHJvdW5kZWROdW1UYWJs
ZXMpKTsgLy8gZW50cnlTZWxlY3RvcjogIkxvZzIobWF4aW11bSBwb3dlciBvZiAyIDw9IG51bVRh
YmxlcykuIgorICAgICAgICBhcHBlbmQxNihudW1UYWJsZXMgKiAxNiAtIHNlYXJjaFJhbmdlKTsg
Ly8gcmFuZ2VTaGlmdDogIk51bVRhYmxlcyB4IDE2LXNlYXJjaFJhbmdlLiIKKworICAgICAgICBh
c3NlcnQocmVzdWx0LnNpemUoKSA9PSBoZWFkZXJTaXplKTsKKworICAgICAgICAvLyBMZWF2ZSBz
cGFjZSBmb3IgdGhlIGRpcmVjdG9yeSBlbnRyaWVzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRpcmVjdG9yeUVudHJ5U2l6ZSAqIG51bVRhYmxlczsgKytpKQorICAgICAgICAgICAg
cmVzdWx0LnB1c2hfYmFjaygwKTsKKworICAgICAgICBhcHBlbmRUYWJsZSgiQ0ZGICIsICZHZW5l
cmF0b3I6OmFwcGVuZENGRlRhYmxlKTsKKyAgICAgICAgYXBwZW5kVGFibGUoIkdTVUIiLCAmR2Vu
ZXJhdG9yOjphcHBlbmRHU1VCVGFibGUpOworICAgICAgICBhcHBlbmRUYWJsZSgiT1MvMiIsICZH
ZW5lcmF0b3I6OmFwcGVuZE9TMlRhYmxlKTsKKyAgICAgICAgYXBwZW5kVGFibGUoImNtYXAiLCAm
R2VuZXJhdG9yOjphcHBlbmRDTUFQVGFibGUpOworICAgICAgICBhdXRvIGhlYWRUYWJsZU9mZnNl
dCA9IHJlc3VsdC5zaXplKCk7CisgICAgICAgIGFwcGVuZFRhYmxlKCJoZWFkIiwgJkdlbmVyYXRv
cjo6YXBwZW5kSEVBRFRhYmxlKTsKKyAgICAgICAgYXBwZW5kVGFibGUoImhoZWEiLCAmR2VuZXJh
dG9yOjphcHBlbmRISEVBVGFibGUpOworICAgICAgICBhcHBlbmRUYWJsZSgiaG10eCIsICZHZW5l
cmF0b3I6OmFwcGVuZEhNVFhUYWJsZSk7CisgICAgICAgIGFwcGVuZFRhYmxlKCJtYXhwIiwgJkdl
bmVyYXRvcjo6YXBwZW5kTUFYUFRhYmxlKTsKKyAgICAgICAgYXBwZW5kVGFibGUoIm5hbWUiLCAm
R2VuZXJhdG9yOjphcHBlbmROQU1FVGFibGUpOworICAgICAgICBhcHBlbmRUYWJsZSgicG9zdCIs
ICZHZW5lcmF0b3I6OmFwcGVuZFBPU1RUYWJsZSk7CisKKyAgICAgICAgYXNzZXJ0KG51bVRhYmxl
cyA9PSBtX3RhYmxlc0FwcGVuZGVkQ291bnQpOworCisgICAgICAgIC8vIGNoZWNrc3VtQWRqdXN0
bWVudDogIlRvIGNvbXB1dGU6IHNldCBpdCB0byAwLCBjYWxjdWxhdGUgdGhlIGNoZWNrc3VtIGZv
ciB0aGUgJ2hlYWQnIHRhYmxlIGFuZCBwdXQgaXQgaW4gdGhlIHRhYmxlIGRpcmVjdG9yeSwKKyAg
ICAgICAgLy8gc3VtIHRoZSBlbnRpcmUgZm9udCBhcyB1aW50MzIsIHRoZW4gc3RvcmUgQjFCMEFG
QkEgLSBzdW0uIFRoZSBjaGVja3N1bSBmb3IgdGhlICdoZWFkJyB0YWJsZSB3aWxsIG5vdyBiZSB3
cm9uZy4gVGhhdCBpcyBPSy4iCisgICAgICAgIG92ZXJ3cml0ZTMyKGhlYWRUYWJsZU9mZnNldCAr
IDgsIDB4QjFCMEFGQkFVIC0gY2FsY3VsYXRlQ2hlY2tzdW0oMCwgcmVzdWx0LnNpemUoKSkpOwor
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IGNsYXNzIFBsYWNlaG9sZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBsYWNlaG9sZGVyKEdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBzaXplX3QgYmFzZU9mT2Zmc2V0KQorICAgICAgICAgICAgOiBn
ZW5lcmF0b3IoZ2VuZXJhdG9yKQorICAgICAgICAgICAgLCBiYXNlT2ZPZmZzZXQoYmFzZU9mT2Zm
c2V0KQorICAgICAgICAgICAgLCBsb2NhdGlvbihnZW5lcmF0b3IucmVzdWx0LnNpemUoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZ2VuZXJhdG9yLmFwcGVuZDE2KDApOworICAgICAgICB9CisK
KyAgICAgICAgUGxhY2Vob2xkZXIoUGxhY2Vob2xkZXImJiBvdGhlcikKKyAgICAgICAgICAgIDog
Z2VuZXJhdG9yKG90aGVyLmdlbmVyYXRvcikKKyAgICAgICAgICAgICwgYmFzZU9mT2Zmc2V0KG90
aGVyLmJhc2VPZk9mZnNldCkKKyAgICAgICAgICAgICwgbG9jYXRpb24ob3RoZXIubG9jYXRpb24p
CisgICAgICAgICAgICAsIGFjdGl2ZShvdGhlci5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG90aGVyLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBwb3B1
bGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChhY3RpdmUpOworICAgICAgICAg
ICAgc2l6ZV90IGRlbHRhID0gZ2VuZXJhdG9yLnJlc3VsdC5zaXplKCkgLSBiYXNlT2ZPZmZzZXQ7
CisgICAgICAgICAgICBhc3NlcnQoZGVsdGEgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90
Pjo6bWF4KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLm92ZXJ3cml0ZTE2KGxvY2F0aW9uLCBk
ZWx0YSk7CisgICAgICAgICAgICBhY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IH5QbGFjZWhvbGRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydCghYWN0aXZlKTsK
KyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgR2VuZXJhdG9yJiBnZW5lcmF0b3I7
CisgICAgICAgIGNvbnN0IHNpemVfdCBiYXNlT2ZPZmZzZXQ7CisgICAgICAgIGNvbnN0IHNpemVf
dCBsb2NhdGlvbjsKKyAgICAgICAgYm9vbCBhY3RpdmUgPSB7IHRydWUgfTsKKyAgICB9OworCisg
ICAgUGxhY2Vob2xkZXIgcGxhY2Vob2xkZXIoc2l6ZV90IGJhc2VPZk9mZnNldCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBQbGFjZWhvbGRlcigqdGhpcywgYmFzZU9mT2Zmc2V0KTsKKyAgICB9CisK
KyAgICB2b2lkIGFwcGVuZDE2KHVpbnQxNl90IHZhbHVlKSB7CisgICAgICAgIHJlc3VsdC5wdXNo
X2JhY2sodmFsdWUgPj4gOCk7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2sodmFsdWUpOworICAg
IH0KKworICAgIHZvaWQgYXBwZW5kMzIodWludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICA6
OmFwcGVuZDMyKHJlc3VsdCwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kMzJCaXRD
b2RlKGNvbnN0IGNoYXIgY29kZVs0XSkKKyAgICB7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2so
Y29kZVswXSk7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soY29kZVsxXSk7CisgICAgICAgIHJl
c3VsdC5wdXNoX2JhY2soY29kZVsyXSk7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soY29kZVsz
XSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyd3JpdGUxNihzaXplX3QgbG9jYXRpb24sIHVpbnQx
Nl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdC5zaXplKCkgPj0gbG9jYXRp
b24gKyAyKTsKKyAgICAgICAgcmVzdWx0W2xvY2F0aW9uXSA9IHZhbHVlID4+IDg7CisgICAgICAg
IHJlc3VsdFtsb2NhdGlvbiArIDFdID0gdmFsdWU7CisgICAgfQorCisgICAgdm9pZCBvdmVyd3Jp
dGUzMihzaXplX3QgbG9jYXRpb24sIHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgYXNz
ZXJ0KHJlc3VsdC5zaXplKCkgPj0gbG9jYXRpb24gKyA0KTsKKyAgICAgICAgcmVzdWx0W2xvY2F0
aW9uXSA9IHZhbHVlID4+IDI0OworICAgICAgICByZXN1bHRbbG9jYXRpb24gKyAxXSA9IHZhbHVl
ID4+IDE2OworICAgICAgICByZXN1bHRbbG9jYXRpb24gKyAyXSA9IHZhbHVlID4+IDg7CisgICAg
ICAgIHJlc3VsdFtsb2NhdGlvbiArIDNdID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQg
YXBwZW5kQ0ZGVGFibGUoKSB7CisgICAgICAgIGF1dG8gc3RhcnRpbmdPZmZzZXQgPSByZXN1bHQu
c2l6ZSgpOworCisgICAgICAgIC8vIEhlYWRlcgorICAgICAgICByZXN1bHQucHVzaF9iYWNrKDEp
OyAvLyBNYWpvciB2ZXJzaW9uCisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soMCk7IC8vIE1pbm9y
IHZlcnNpb24KKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayg0KTsgLy8gSGVhZGVyIHNpemUKKyAg
ICAgICAgcmVzdWx0LnB1c2hfYmFjayg0KTsgLy8gT2Zmc2V0cyB3aXRoaW4gQ0ZGIHRhYmxlIGFy
ZSA0IGJ5dGVzIGxvbmcKKworICAgICAgICAvLyBOYW1lIElOREVYCisgICAgICAgIHN0ZDo6c3Ry
aW5nIGZvbnROYW1lID0gIk15bGVzRm9udCI7CisgICAgICAgIGFwcGVuZDE2KDEpOyAvLyBJTkRF
WCBjb250YWlucyAxIGVsZW1lbnQKKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayg0KTsgLy8gT2Zm
c2V0cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVzIGxvbmcKKyAgICAgICAgYXBwZW5kMzIoMSk7
IC8vIDEtaW5kZXggb2Zmc2V0IG9mIG5hbWUgZGF0YQorICAgICAgICBhcHBlbmQzMihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oZm9udE5hbWUubGVuZ3RoKCkgKyAxKSk7IC8vIDEtaW5kZXggb2Zmc2V0
IGp1c3QgcGFzdCBlbmQgb2YgbmFtZSBkYXRhCisgICAgICAgIGZvciAoY2hhciBjIDogZm9udE5h
bWUpCisgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKGMpOworCisgICAgICAgIGNvbnN0IGNo
YXIgb3BlcmFuZDMyQml0ID0gMjk7CisgICAgICAgIGNvbnN0IGNoYXIgZnVsbE5hbWVLZXkgPSAy
OworICAgICAgICBjb25zdCBjaGFyIGZhbWlseU5hbWVLZXkgPSAzOworICAgICAgICBjb25zdCBj
aGFyIGZvbnRCQm94S2V5ID0gNTsKKyAgICAgICAgY29uc3QgY2hhciBjaGFyc2V0SW5kZXhLZXkg
PSAxNTsKKyAgICAgICAgY29uc3QgY2hhciBjaGFyc3RyaW5nc0luZGV4S2V5ID0gMTc7CisgICAg
ICAgIGNvbnN0IGNoYXIgcHJpdmF0ZURpY3RJbmRleEtleSA9IDE4OworICAgICAgICBjb25zdCB1
aW50MzJfdCB1c2VyRGVmaW5lZFN0cmluZ1N0YXJ0SW5kZXggPSAzOTE7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNpemVPZlRvcEluZGV4ID0gNTY7CisKKyAgICAgICAgLy8gVG9wIERJQ1QgSU5E
RVguCisgICAgICAgIGFwcGVuZDE2KDEpOyAvLyBJTkRFWCBjb250YWlucyAxIGVsZW1lbnQKKyAg
ICAgICAgcmVzdWx0LnB1c2hfYmFjayg0KTsgLy8gT2Zmc2V0cyBpbiB0aGlzIElOREVYIGFyZSA0
IGJ5dGVzIGxvbmcKKyAgICAgICAgYXBwZW5kMzIoMSk7IC8vIDEtaW5kZXggb2Zmc2V0IG9mIERJ
Q1QgZGF0YQorICAgICAgICBhcHBlbmQzMigxICsgc2l6ZU9mVG9wSW5kZXgpOyAvLyAxLWluZGV4
IG9mZnNldCBqdXN0IHBhc3QgZW5kIG9mIERJQ1QgZGF0YQorCisgICAgICAgIC8vIERJQ1QgaW5m
b3JtYXRpb24KKyAgICAgICAgc2l6ZV90IHRvcERpY3RTdGFydCA9IHJlc3VsdC5zaXplKCk7Cisg
ICAgICAgIHJlc3VsdC5wdXNoX2JhY2sob3BlcmFuZDMyQml0KTsKKyAgICAgICAgYXBwZW5kMzIo
dXNlckRlZmluZWRTdHJpbmdTdGFydEluZGV4KTsKKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhm
dWxsTmFtZUtleSk7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2sob3BlcmFuZDMyQml0KTsKKyAg
ICAgICAgYXBwZW5kMzIodXNlckRlZmluZWRTdHJpbmdTdGFydEluZGV4KTsKKyAgICAgICAgcmVz
dWx0LnB1c2hfYmFjayhmYW1pbHlOYW1lS2V5KTsKKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhv
cGVyYW5kMzJCaXQpOworICAgICAgICBhcHBlbmQzMihjbGFtcFRvPGludDMyX3Q+KDApKTsgLy8g
Qm91bmRpbmcgYm94IHgKKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhvcGVyYW5kMzJCaXQpOwor
ICAgICAgICBhcHBlbmQzMihjbGFtcFRvPGludDMyX3Q+KDApKTsgLy8gQm91bmRpbmcgYm94IHkK
KyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhvcGVyYW5kMzJCaXQpOworICAgICAgICBhcHBlbmQz
MihjbGFtcFRvPGludDMyX3Q+KHVuaXRzUGVyRW0pKTsgLy8gQm91bmRpbmcgYm94IG1heCB4Cisg
ICAgICAgIHJlc3VsdC5wdXNoX2JhY2sob3BlcmFuZDMyQml0KTsKKyAgICAgICAgYXBwZW5kMzIo
Y2xhbXBUbzxpbnQzMl90Pih1bml0c1BlckVtKSk7IC8vIEJvdW5kaW5nIGJveCBtYXggeQorICAg
ICAgICByZXN1bHQucHVzaF9iYWNrKGZvbnRCQm94S2V5KTsKKyAgICAgICAgcmVzdWx0LnB1c2hf
YmFjayhvcGVyYW5kMzJCaXQpOworICAgICAgICBzaXplX3QgY2hhcnNldE9mZnNldExvY2F0aW9u
ID0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAgYXBwZW5kMzIoMCk7IC8vIE9mZnNldCBvZiBDaGFy
c2V0IGluZm8uIFdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAgICAgIHJlc3VsdC5wdXNo
X2JhY2soY2hhcnNldEluZGV4S2V5KTsKKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhvcGVyYW5k
MzJCaXQpOworICAgICAgICBzaXplX3QgY2hhcnN0cmluZ3NPZmZzZXRMb2NhdGlvbiA9IHJlc3Vs
dC5zaXplKCk7CisgICAgICAgIGFwcGVuZDMyKDApOyAvLyBPZmZzZXQgb2YgQ2hhclN0cmluZ3Mg
SU5ERVguIFdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAgICAgIHJlc3VsdC5wdXNoX2Jh
Y2soY2hhcnN0cmluZ3NJbmRleEtleSk7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2sob3BlcmFu
ZDMyQml0KTsKKyAgICAgICAgYXBwZW5kMzIoMCk7IC8vIDAtc2l6ZWQgcHJpdmF0ZSBkaWN0Cisg
ICAgICAgIHJlc3VsdC5wdXNoX2JhY2sob3BlcmFuZDMyQml0KTsKKyAgICAgICAgYXBwZW5kMzIo
MCk7IC8vIG5vIGxvY2F0aW9uIGZvciBwcml2YXRlIGRpY3QKKyAgICAgICAgcmVzdWx0LnB1c2hf
YmFjayhwcml2YXRlRGljdEluZGV4S2V5KTsgLy8gUHJpdmF0ZSBkaWN0IHNpemUgYW5kIG9mZnNl
dAorICAgICAgICBhc3NlcnQocmVzdWx0LnNpemUoKSA9PSB0b3BEaWN0U3RhcnQgKyBzaXplT2ZU
b3BJbmRleCk7CisKKyAgICAgICAgLy8gU3RyaW5nIElOREVYCisgICAgICAgIGFwcGVuZDE2KDEp
OyAvLyBOdW1iZXIgb2YgZWxlbWVudHMgaW4gSU5ERVgKKyAgICAgICAgcmVzdWx0LnB1c2hfYmFj
ayg0KTsgLy8gT2Zmc2V0cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVzIGxvbmcKKyAgICAgICAg
dWludDMyX3Qgb2Zmc2V0ID0gMTsKKyAgICAgICAgYXBwZW5kMzIob2Zmc2V0KTsKKyAgICAgICAg
b2Zmc2V0ICs9IGZvbnROYW1lLmxlbmd0aCgpOworICAgICAgICBhcHBlbmQzMihvZmZzZXQpOwor
ICAgICAgICBmb3IgKGNoYXIgYyA6IGZvbnROYW1lKQorICAgICAgICAgICAgcmVzdWx0LnB1c2hf
YmFjayhjKTsKKworICAgICAgICBhcHBlbmQxNigwKTsgLy8gRW1wdHkgc3Vicm91dGluZSBJTkRF
WAorICAgIAorICAgICAgICAvLyBDaGFyc2V0IGluZm8KKyAgICAgICAgb3ZlcndyaXRlMzIoY2hh
cnNldE9mZnNldExvY2F0aW9uLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmVzdWx0LnNpemUoKSAt
IHN0YXJ0aW5nT2Zmc2V0KSk7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soMCk7CisgICAgICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgbnVtR2x5cGhzOyArK2kpCisgICAgICAgICAgICBhcHBlbmQx
NihpKTsKKworICAgICAgICAvLyBDaGFyU3RyaW5ncyBJTkRFWAorICAgICAgICBzdGQ6OnZlY3Rv
cjx1aW50OF90PiBib3hDaGFyU3RyaW5nID0gZ2VuZXJhdGVCb3hDaGFyU3RyaW5nKCk7CisgICAg
ICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGNoZWNrQ2hhclN0cmluZyA9IGdlbmVyYXRlQ2hlY2tD
aGFyU3RyaW5nKCk7CisgICAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHhDaGFyU3RyaW5nID0g
Z2VuZXJhdGVYQ2hhclN0cmluZygpOworICAgICAgICBhc3NlcnQobnVtR2x5cGhzID4gMjYpOwor
ICAgICAgICBvdmVyd3JpdGUzMihjaGFyc3RyaW5nc09mZnNldExvY2F0aW9uLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4ocmVzdWx0LnNpemUoKSAtIHN0YXJ0aW5nT2Zmc2V0KSk7CisgICAgICAgIGFw
cGVuZDE2KG51bUdseXBocyk7CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soNCk7IC8vIE9mZnNl
dHMgaW4gdGhpcyBJTkRFWCBhcmUgNCBieXRlcyBsb25nCisgICAgICAgIG9mZnNldCA9IDE7Cisg
ICAgICAgIGFwcGVuZDMyKG9mZnNldCk7CisgICAgICAgIGZvciAodWludDE2X3QgZ2x5cGggPSAw
OyBnbHlwaCA8IG51bUdseXBoczsgKytnbHlwaCkgeworICAgICAgICAgICAgb2Zmc2V0ICs9IGNo
YXJTdHJpbmdGb3JHbHlwaChnbHlwaCwgYm94Q2hhclN0cmluZywgY2hlY2tDaGFyU3RyaW5nLCB4
Q2hhclN0cmluZykuc2l6ZSgpOworICAgICAgICAgICAgYXBwZW5kMzIob2Zmc2V0KTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHVpbnQxNl90IGdseXBoID0gMDsgZ2x5cGggPCBudW1HbHlwaHM7
ICsrZ2x5cGgpIHsKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBjaGFyU3RyaW5n
ID0gY2hhclN0cmluZ0ZvckdseXBoKGdseXBoLCBib3hDaGFyU3RyaW5nLCBjaGVja0NoYXJTdHJp
bmcsIHhDaGFyU3RyaW5nKTsKKyAgICAgICAgICAgIHJlc3VsdC5pbnNlcnQocmVzdWx0LmVuZCgp
LCBjaGFyU3RyaW5nLmJlZ2luKCksIGNoYXJTdHJpbmcuZW5kKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBhcHBlbmRTdWJzdGl0dXRpb25TdWJ0YWJsZShzaXplX3Qgc3VidGFibGVS
ZWNvcmRMb2NhdGlvbiwgdWludDE2X3QgaUdldFJlcGxhY2VkLCB1aW50MTZfdCByZXBsYWNlZFdp
dGhNZSkKKyAgICB7CisgICAgICAgIG92ZXJ3cml0ZTE2KHN1YnRhYmxlUmVjb3JkTG9jYXRpb24g
KyA2LCByZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVSZWNvcmRMb2NhdGlvbik7CisgICAgICAgIGF1
dG8gc3VidGFibGVMb2NhdGlvbiA9IHJlc3VsdC5zaXplKCk7CisgICAgICAgIGFwcGVuZDE2KDIp
OyAvLyBGb3JtYXQgMgorICAgICAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9m
ZnNldCB0byBjb3ZlcmFnZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIHN1YnN0aXR1
dGlvbiB0YWJsZQorICAgICAgICBhcHBlbmQxNigxKTsgLy8gR2x5cGhDb3VudAorICAgICAgICBh
cHBlbmQxNihyZXBsYWNlZFdpdGhNZSk7IC8vIFN1YnN0aXR1dGUgd2l0aCB0aGlzIGdseXBoLgor
CisgICAgICAgIC8vIENvdmVyYWdlIHRhYmxlCisgICAgICAgIG92ZXJ3cml0ZTE2KHN1YnRhYmxl
TG9jYXRpb24gKyAyLCByZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVMb2NhdGlvbik7CisgICAgICAg
IGFwcGVuZDE2KDEpOyAvLyBDb3ZlcmFnZUZvcm1hdAorICAgICAgICBhcHBlbmQxNigxKTsgLy8g
R2x5cGhDb3VudAorICAgICAgICBhcHBlbmQxNihpR2V0UmVwbGFjZWQpOyAvLyBUaGlzIGdseXBo
IGlzIGNvdmVyZWQgaW4gdGhlIGNvdmVyYWdlLgorICAgIH0KKworICAgIHZvaWQgYXBwZW5kU2Ny
aXB0U3VidGFibGUodWludDE2X3QgZmVhdHVyZUNvdW50KSB7CisgICAgICAgIGF1dG8gZGZsdFNj
cmlwdFRhYmxlTG9jYXRpb24gPSByZXN1bHQuc2l6ZSgpOworICAgICAgICBhcHBlbmQxNigwKTsg
Ly8gUGxhY2Vob2xkZXIgZm9yIG9mZnNldCBvZiBkZWZhdWx0IGxhbmd1YWdlIHN5c3RlbSB0YWJs
ZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIFNjcmlwdCB0YWJsZQorICAgICAgICBhcHBlbmQx
NigwKTsgLy8gTnVtYmVyIG9mIGZvbGxvd2luZyBsYW5ndWFnZSBzeXN0ZW0gdGFibGVzCisKKyAg
ICAgICAgLy8gTGFuZ1N5cyB0YWJsZQorICAgICAgICBvdmVyd3JpdGUxNihkZmx0U2NyaXB0VGFi
bGVMb2NhdGlvbiwgcmVzdWx0LnNpemUoKSAtIGRmbHRTY3JpcHRUYWJsZUxvY2F0aW9uKTsKKyAg
ICAgICAgYXBwZW5kMTYoMCk7IC8vIExvb2t1cE9yZGVyICI9IE5VTEwgLi4uIHJlc2VydmVkIgor
ICAgICAgICBhcHBlbmQxNigweEZGRkYpOyAvLyBObyBmZWF0dXJlcyBhcmUgcmVxdWlyZWQKKyAg
ICAgICAgYXBwZW5kMTYoZmVhdHVyZUNvdW50KTsgLy8gTnVtYmVyIG9mIEZlYXR1cmVJbmRleCB2
YWx1ZXMKKyAgICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGZlYXR1cmVDb3VudDsgKytp
KQorICAgICAgICAgICAgYXBwZW5kMTYoaSk7IC8vIEZlYXR1cmVzIGluZGljZXMKKyAgICB9CisK
KyAgICB2b2lkIGFwcGVuZEdTVUJUYWJsZSgpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjph
cnJheTxjaGFyLCA1Pj4gZmVhdHVyZXMge3sibGlnYSJ9LCB7ImNsaWcifSwgeyJkbGlnIn0sIHsi
aGxpZyJ9LCB7ImNhbHQifSwgeyJzdWJzIn0sIHsic3VwcyJ9LCB7InNtY3AifSwgeyJjMnNjIn0s
IHsicGNhcCJ9LCB7ImMycGMifSwgeyJ1bmljIn0sIHsidGl0bCJ9LCB7Im9udW0ifSwgeyJwbnVt
In0sIHsidG51bSJ9LCB7ImZyYWMifSwgeyJhZnJjIn0sIHsib3JkbiJ9LCB7Inplcm8ifSwgeyJo
aXN0In0sIHsianA3OCJ9LCB7ImpwODMifSwgeyJqcDkwIn0sIHsianAwNCJ9LCB7InNtcGwifSwg
eyJ0cmFkIn0sIHsiZndpZCJ9LCB7InB3aWQifSwgeyJydWJ5In19OworICAgICAgICBhdXRvIHRh
YmxlTG9jYXRpb24gPSByZXN1bHQuc2l6ZSgpOworICAgICAgICBhdXRvIGhlYWRlclNpemUgPSAx
MDsKKworICAgICAgICBhcHBlbmQzMigweDAwMDEwMDAwKTsgLy8gVmVyc2lvbgorICAgICAgICBh
cHBlbmQxNihoZWFkZXJTaXplKTsgLy8gT2Zmc2V0IHRvIFNjcmlwdExpc3QKKyAgICAgICAgUGxh
Y2Vob2xkZXIgdG9GZWF0dXJlTGlzdCA9IHBsYWNlaG9sZGVyKHRhYmxlTG9jYXRpb24pOworICAg
ICAgICBQbGFjZWhvbGRlciB0b0xvb2t1cExpc3QgPSBwbGFjZWhvbGRlcih0YWJsZUxvY2F0aW9u
KTsKKyAgICAgICAgYXNzZXJ0KHRhYmxlTG9jYXRpb24gKyBoZWFkZXJTaXplID09IHJlc3VsdC5z
aXplKCkpOworCisgICAgICAgIC8vIFNjcmlwdExpc3QKKyAgICAgICAgYXV0byBzY3JpcHRMaXN0
TG9jYXRpb24gPSByZXN1bHQuc2l6ZSgpOworICAgICAgICBhcHBlbmQxNigxKTsgLy8gTnVtYmVy
IG9mIFNjcmlwdFJlY29yZHMKKyAgICAgICAgYXBwZW5kMzJCaXRDb2RlKCJERkxUIik7CisgICAg
ICAgIGFwcGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0IG9mIFNjcmlwdCB0YWJs
ZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIFNjcmlwdExpc3QKKworICAgICAgICBvdmVyd3Jp
dGUxNihzY3JpcHRMaXN0TG9jYXRpb24gKyA2LCByZXN1bHQuc2l6ZSgpIC0gc2NyaXB0TGlzdExv
Y2F0aW9uKTsKKyAgICAgICAgYXBwZW5kU2NyaXB0U3VidGFibGUoc3RhdGljX2Nhc3Q8dWludDE2
X3Q+KGZlYXR1cmVzLnNpemUoKSkpOworCisgICAgICAgIC8vIEZlYXR1cmVMaXN0CisgICAgICAg
IHRvRmVhdHVyZUxpc3QucG9wdWxhdGUoKTsKKyAgICAgICAgYXV0byBmZWF0dXJlTGlzdExvY2F0
aW9uID0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAgc2l6ZV90IGZlYXR1cmVMaXN0U2l6ZSA9IDIg
KyA2ICogZmVhdHVyZXMuc2l6ZSgpOworICAgICAgICBzaXplX3QgZmVhdHVyZVRhYmxlU2l6ZSA9
IDY7CisgICAgICAgIGFwcGVuZDE2KGZlYXR1cmVzLnNpemUoKSk7IC8vIEZlYXR1cmVDb3VudAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmVhdHVyZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGF1dG8mIGNvZGUgPSBmZWF0dXJlc1tpXTsKKyAgICAgICAgICAgIGFwcGVu
ZDMyQml0Q29kZShjb2RlLmRhdGEoKSk7IC8vIEZlYXR1cmUgbmFtZQorICAgICAgICAgICAgYXBw
ZW5kMTYoZmVhdHVyZUxpc3RTaXplICsgZmVhdHVyZVRhYmxlU2l6ZSAqIGkpOyAvLyBPZmZzZXQg
b2YgZmVhdHVyZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIEZlYXR1cmVMaXN0IHRh
YmxlCisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KGZlYXR1cmVMaXN0TG9jYXRpb24gKyBmZWF0
dXJlTGlzdFNpemUgPT0gcmVzdWx0LnNpemUoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZlYXR1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGZlYXR1
cmVUYWJsZVN0YXJ0ID0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAgICAgIGFwcGVuZDE2KDApOyAv
LyBGZWF0dXJlUGFyYW1zICI9IE5VTEwgLi4uIHJlc2VydmVkIgorICAgICAgICAgICAgYXBwZW5k
MTYoMSk7IC8vIExvb2t1cENvdW50CisgICAgICAgICAgICBhcHBlbmQxNihpKTsgLy8gTG9va3Vw
TGlzdEluZGV4CisgICAgICAgICAgICBhc3NlcnQoZmVhdHVyZVRhYmxlU3RhcnQgKyBmZWF0dXJl
VGFibGVTaXplID09IHJlc3VsdC5zaXplKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTG9v
a3VwTGlzdAorICAgICAgICB0b0xvb2t1cExpc3QucG9wdWxhdGUoKTsKKyAgICAgICAgYXV0byBs
b29rdXBMaXN0TG9jYXRpb24gPSByZXN1bHQuc2l6ZSgpOworICAgICAgICBhcHBlbmQxNihmZWF0
dXJlcy5zaXplKCkpOyAvLyBMb29rdXBDb3VudAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZmVhdHVyZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBhcHBlbmQxNigwKTsgLy8g
UGxhY2Vob2xkZXIgZm9yIG9mZnNldCB0byBsb29rdXAgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lu
bmluZyBvZiBMb29rdXBMaXN0CisgICAgICAgIHNpemVfdCBzdWJ0YWJsZVJlY29yZExvY2F0aW9u
c1tmZWF0dXJlcy5zaXplKCldOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmVh
dHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHN1YnRhYmxlUmVjb3JkTG9jYXRpb25z
W2ldID0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAgICAgIG92ZXJ3cml0ZTE2KGxvb2t1cExpc3RM
b2NhdGlvbiArIDIgKyAyICogaSwgcmVzdWx0LnNpemUoKSAtIGxvb2t1cExpc3RMb2NhdGlvbik7
CisgICAgICAgICAgICBhcHBlbmQxNigxKTsgLy8gVHlwZSAxOiAiUmVwbGFjZSBvbmUgZ2x5cGgg
d2l0aCBvbmUgZ2x5cGgiCisgICAgICAgICAgICBhcHBlbmQxNigwKTsgLy8gTG9va3VwRmxhZwor
ICAgICAgICAgICAgYXBwZW5kMTYoMSk7IC8vIFN1YlRhYmxlQ291bnQKKyAgICAgICAgICAgIGFw
cGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0IHRvIHN1YnRhYmxlLCByZWxhdGl2
ZSB0byBiZWdpbm5pbmcgb2YgTG9va3VwIHRhYmxlCisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmVhdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGFwcGVuZFN1YnN0aXR1dGlvblN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zW2ldLCAz
ICsgaSwgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZE9TMlRhYmxlKCkg
eworICAgICAgICBhcHBlbmQxNigyKTsgLy8gVmVyc2lvbgorICAgICAgICBhcHBlbmQxNihjbGFt
cFRvPGludDE2X3Q+KHVuaXRzUGVyRW0pKTsgLy8gQXZlcmFnZSBhZHZhbmNlCisgICAgICAgIGFw
cGVuZDE2KGNsYW1wVG88dWludDE2X3Q+KDUwMCkpOyAvLyBXZWlnaHQgY2xhc3MKKyAgICAgICAg
YXBwZW5kMTYoNSk7IC8vIFdpZHRoIGNsYXNzCisgICAgICAgIGFwcGVuZDE2KDApOyAvLyBQcm90
ZWN0ZWQgZm9udAorICAgICAgICAvLyBXZWJLaXQgaGFuZGxlcyB0aGVzZSBzdXBlcnNjcmlwdHMg
YW5kIHN1YnNjcmlwdHMKKyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIFN1YnNjcmlwdCBYIFNpemUK
KyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIFN1YnNjcmlwdCBZIFNpemUKKyAgICAgICAgYXBwZW5k
MTYoMCk7IC8vIFN1YnNjcmlwdCBYIE9mZnNldAorICAgICAgICBhcHBlbmQxNigwKTsgLy8gU3Vi
c2NyaXB0IFkgT2Zmc2V0CisgICAgICAgIGFwcGVuZDE2KDApOyAvLyBTdXBlcnNjcmlwdCBYIFNp
emUKKyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIFN1cGVyc2NyaXB0IFkgU2l6ZQorICAgICAgICBh
cHBlbmQxNigwKTsgLy8gU3VwZXJzY3JpcHQgWCBPZmZzZXQKKyAgICAgICAgYXBwZW5kMTYoMCk7
IC8vIFN1cGVyc2NyaXB0IFkgT2Zmc2V0CisgICAgICAgIGFwcGVuZDE2KDApOyAvLyBTdHJpa2Vv
dXQgd2lkdGgKKyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIFN0cmlrZW91dCBQb3NpdGlvbgorICAg
ICAgICBhcHBlbmQxNigwKTsgLy8gTm8gY2xhc3NpZmljYXRpb24KKworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDEwOyArK2kpCisgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKDApOwor
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgYXBwZW5k
MzIoMCk7IC8vICJCaXQgYXNzaWdubWVudHMgYXJlIHBlbmRpbmcuIFNldCB0byAwIgorICAgICAg
ICBhcHBlbmQzMigweDU0NEI0MjU3KTsgLy8gRm9udCBWZW5kb3IuICJXQktUIgorICAgICAgICBh
cHBlbmQxNigwKTsgLy8gRm9udCBQYXR0ZXJucy4KKyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIEZp
cnN0IHVuaWNvZGUgaW5kZXgKKyAgICAgICAgYXBwZW5kMTYoMHhGRkZGKTsgLy8gTGFzdCB1bmlj
b2RlIGluZGV4CisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4odW5pdHNQZXJFbSkp
OyAvLyBUeXBvZ3JhcGhpY2FsIGFzY2VuZGVyCisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88aW50
MTZfdD4odW5pdHNQZXJFbSkpOyAvLyBUeXBvZ3JhcGhpY2FsIGRlc2NlbmRlcgorICAgICAgICBh
cHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KHVuaXRzUGVyRW0gLyAxMCkpOyAvLyBUeXBvZ3JhcGhp
Y2FsIGxpbmUgZ2FwCisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88dWludDE2X3Q+KHVuaXRzUGVy
RW0pKTsgLy8gV2luZG93cy1zcGVjaWZpYyBhc2NlbnQKKyAgICAgICAgYXBwZW5kMTYoY2xhbXBU
bzx1aW50MTZfdD4odW5pdHNQZXJFbSkpOyAvLyBXaW5kb3dzLXNwZWNpZmljIGRlc2NlbnQKKyAg
ICAgICAgYXBwZW5kMzIoMHhGRjEwRkMwNyk7IC8vIEJpdG1hc2sgZm9yIHN1cHBvcnRlZCBjb2Rl
cGFnZXMgKFBhcnQgMSkuIFJlcG9ydCBhbGwgcGFnZXMgYXMgc3VwcG9ydGVkLgorICAgICAgICBh
cHBlbmQzMigweDAwMDBGRkZGKTsgLy8gQml0bWFzayBmb3Igc3VwcG9ydGVkIGNvZGVwYWdlcyAo
UGFydCAyKS4gUmVwb3J0IGFsbCBwYWdlcyBhcyBzdXBwb3J0ZWQuCisgICAgICAgIGFwcGVuZDE2
KGNsYW1wVG88aW50MTZfdD4odW5pdHNQZXJFbSAvIDIpKTsgLy8geC1oZWlnaHQKKyAgICAgICAg
YXBwZW5kMTYoY2xhbXBUbzxpbnQxNl90Pih1bml0c1BlckVtKSk7IC8vIENhcC1oZWlnaHQKKyAg
ICAgICAgYXBwZW5kMTYoMCk7IC8vIERlZmF1bHQgY2hhcgorICAgICAgICBhcHBlbmQxNignICcp
OyAvLyBCcmVhayBjaGFyYWN0ZXIKKyAgICAgICAgYXBwZW5kMTYoMyk7IC8vIE1heGltdW0gY29u
dGV4dCBuZWVkZWQgdG8gcGVyZm9ybSBmb250IGZlYXR1cmVzCisgICAgICAgIGFwcGVuZDE2KDMp
OyAvLyBTbWFsbGVzdCBvcHRpY2FsIHBvaW50IHNpemUKKyAgICAgICAgYXBwZW5kMTYoMHhGRkZG
KTsgLy8gTGFyZ2VzdCBvcHRpY2FsIHBvaW50IHNpemUKKyAgICB9CisKKyAgICB2b2lkIGFwcGVu
ZEZvcm1hdDEyQ01BUFRhYmxlKCkKKyAgICB7CisgICAgICAgIC8vIEJyYWluZGVhZCBzY2hlbWU6
IE9uZSBzZWdtZW50IGZvciBlYWNoIGNoYXJhY3RlcgorICAgICAgICBhdXRvIHN1YnRhYmxlTG9j
YXRpb24gPSByZXN1bHQuc2l6ZSgpOworICAgICAgICBhcHBlbmQzMigxMiA8PCAxNik7IC8vIEZv
cm1hdCAxMgorICAgICAgICBhcHBlbmQzMigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIGJ5dGUgbGVu
Z3RoCisgICAgICAgIGFwcGVuZDMyKDApOyAvLyBMYW5ndWFnZSBpbmRlcGVuZGVudAorICAgICAg
ICBhcHBlbmQzMigyKTsgLy8gIG5Hcm91cHMKKyAgICAgICAgYXBwZW5kMzIoJ0EnKTsgLy8gc3Rh
cnRDaGFyQ29kZQorICAgICAgICBhcHBlbmQzMignWicpOyAvLyBlbmRDaGFyQ29kZQorICAgICAg
ICBhcHBlbmQzMigxKTsgLy8gc3RhcnRHbHlwaENvZGUKKyAgICAgICAgYXBwZW5kMzIoJ2EnKTsg
Ly8gc3RhcnRDaGFyQ29kZQorICAgICAgICBhcHBlbmQzMigneicpOyAvLyBlbmRDaGFyQ29kZQor
ICAgICAgICBhcHBlbmQzMigyNyk7IC8vIHN0YXJ0R2x5cGhDb2RlCisgICAgICAgIG92ZXJ3cml0
ZTMyKHN1YnRhYmxlTG9jYXRpb24gKyA0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmVzdWx0LnNp
emUoKSAtIHN1YnRhYmxlTG9jYXRpb24pKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEZvcm1h
dDRDTUFQVGFibGUoKQorICAgIHsKKyAgICAgICAgYXV0byBzdWJ0YWJsZUxvY2F0aW9uID0gcmVz
dWx0LnNpemUoKTsKKyAgICAgICAgYXBwZW5kMTYoNCk7IC8vIEZvcm1hdCA0CisgICAgICAgIGFw
cGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3IgbGVuZ3RoIGluIGJ5dGVzCisgICAgICAgIGFw
cGVuZDE2KDApOyAvLyBMYW5ndWFnZSBpbmRlcGVuZGVudAorICAgICAgICB1aW50MTZfdCBzZWdD
b3VudCA9IDM7CisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88dWludDE2X3Q+KDIgKiBzZWdDb3Vu
dCkpOyAvLyBzZWdDb3VudFgyOiAiMiB4IHNlZ0NvdW50IgorICAgICAgICB1aW50MTZfdCBvcmln
aW5hbFNlYXJjaFJhbmdlID0gcm91bmREb3duVG9Qb3dlck9mVHdvKHNlZ0NvdW50KTsKKyAgICAg
ICAgdWludDE2X3Qgc2VhcmNoUmFuZ2UgPSBjbGFtcFRvPHVpbnQxNl90PigyICogb3JpZ2luYWxT
ZWFyY2hSYW5nZSk7IC8vIHNlYXJjaFJhbmdlOiAiMiB4ICgyKipmbG9vcihsb2cyKHNlZ0NvdW50
KSkpIgorICAgICAgICBhcHBlbmQxNihzZWFyY2hSYW5nZSk7CisgICAgICAgIGFwcGVuZDE2KGlu
dGVncmFsTG9nMihvcmlnaW5hbFNlYXJjaFJhbmdlKSk7IC8vIGVudHJ5U2VsZWN0b3I6ICJsb2cy
KHNlYXJjaFJhbmdlLzIpIgorICAgICAgICBhcHBlbmQxNihjbGFtcFRvPHVpbnQxNl90PigoMiAq
IHNlZ0NvdW50KSAtIHNlYXJjaFJhbmdlKSk7IC8vIHJhbmdlU2hpZnQ6ICIyIHggc2VnQ291bnQg
LSBzZWFyY2hSYW5nZSIKKworICAgICAgICAvLyBFbmRpbmcgY2hhcmFjdGVyIGNvZGVzCisgICAg
ICAgIGFwcGVuZDE2KCdaJyk7CisgICAgICAgIGFwcGVuZDE2KCd6Jyk7CisgICAgICAgIGFwcGVu
ZDE2KDB4RkZGRik7CisKKyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIHJlc2VydmVkCisKKyAgICAg
ICAgLy8gU3RhcnRpbmcgY2hhcmFjdGVyIGNvZGVzCisgICAgICAgIGFwcGVuZDE2KCdBJyk7Cisg
ICAgICAgIGFwcGVuZDE2KCdhJyk7CisgICAgICAgIGFwcGVuZDE2KDB4RkZGRik7CisKKyAgICAg
ICAgLy8gaWREZWx0YQorICAgICAgICBhcHBlbmQxNihzdGF0aWNfY2FzdDx1aW50MTZfdD4oMjcp
IC0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KCdBJykpOworICAgICAgICBhcHBlbmQxNihzdGF0aWNf
Y2FzdDx1aW50MTZfdD4oMSkgLSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oJ2EnKSk7CisgICAgICAg
IGFwcGVuZDE2KDB4MDAwMSk7CisKKyAgICAgICAgLy8gaWRSYW5nZU9mZnNldAorICAgICAgICBh
cHBlbmQxNigwKTsgLy8gaWRSYW5nZU9mZnNldAorICAgICAgICBhcHBlbmQxNigwKTsKKworICAg
ICAgICAvLyBGb250cyBzdHJpdmUgdG8gaG9sZCAyXjE2IGdseXBocywgYnV0IHdpdGggdGhlIGN1
cnJlbnQgZW5jb2Rpbmcgc2NoZW1lLCB3ZSB3cml0ZSA4IGJ5dGVzIHBlciBjb2RlcG9pbnQgaW50
byB0aGlzIHN1YnRhYmxlLgorICAgICAgICAvLyBCZWNhdXNlIHRoZSBzaXplIG9mIHRoaXMgc3Vi
dGFibGUgbXVzdCBiZSByZXByZXNlbnRlZCBhcyBhIDE2LWJpdCBudW1iZXIsIHdlIGFyZSBsaW1p
dGluZyB0aGUgbnVtYmVyIG9mIGdseXBocyB3ZSBzdXBwb3J0IHRvIDJeMTMuCisgICAgICAgIC8v
IEZJWE1FOiBJZiB3ZSBoaXQgdGhpcyBsaW1pdCBpbiB0aGUgd2lsZCwgdXNlIGEgbW9yZSBjb21w
YWN0IGVuY29kaW5nIHNjaGVtZSBmb3IgdGhpcyBzdWJ0YWJsZS4KKyAgICAgICAgb3ZlcndyaXRl
MTYoc3VidGFibGVMb2NhdGlvbiArIDIsIGNsYW1wVG88dWludDE2X3Q+KHJlc3VsdC5zaXplKCkg
LSBzdWJ0YWJsZUxvY2F0aW9uKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kQ01BUFRh
YmxlKCkgeworICAgICAgICBhdXRvIHN0YXJ0aW5nT2Zmc2V0ID0gcmVzdWx0LnNpemUoKTsKKyAg
ICAgICAgYXBwZW5kMTYoMCk7CisgICAgICAgIGFwcGVuZDE2KDMpOyAvLyBOdW1iZXIgb2Ygc3Vi
dGFibGVzCisKKyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIFVuaWNvZGUKKyAgICAgICAgYXBwZW5k
MTYoMyk7IC8vIFVuaWNvZGUgdmVyc2lvbiAyLjIrCisgICAgICAgIGFwcGVuZDMyKDI4KTsgLy8g
Qnl0ZSBvZmZzZXQgb2Ygc3VidGFibGUKKworICAgICAgICBhcHBlbmQxNigzKTsgLy8gTWljcm9z
b2Z0CisgICAgICAgIGFwcGVuZDE2KDEpOyAvLyBVbmljb2RlIEJNUAorICAgICAgICBhdXRvIGZv
cm1hdDRPZmZzZXRMb2NhdGlvbiA9IHJlc3VsdC5zaXplKCk7CisgICAgICAgIGFwcGVuZDMyKDAp
OyAvLyBCeXRlIG9mZnNldCBvZiBzdWJ0YWJsZQorCisgICAgICAgIGFwcGVuZDE2KDMpOyAvLyBN
aWNyb3NvZnQKKyAgICAgICAgYXBwZW5kMTYoMTApOyAvLyBVbmljb2RlCisgICAgICAgIGFwcGVu
ZDMyKDI4KTsgLy8gQnl0ZSBvZmZzZXQgb2Ygc3VidGFibGUKKworICAgICAgICBhcHBlbmRGb3Jt
YXQxMkNNQVBUYWJsZSgpOworICAgICAgICBvdmVyd3JpdGUzMihmb3JtYXQ0T2Zmc2V0TG9jYXRp
b24sIHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXN1bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQp
KTsKKyAgICAgICAgYXBwZW5kRm9ybWF0NENNQVBUYWJsZSgpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGFwcGVuZEhFQURUYWJsZSgpIHsKKyAgICAgICAgYXBwZW5kMzIoMHgwMDAxMDAwMCk7IC8v
IFZlcnNpb24KKyAgICAgICAgYXBwZW5kMzIoMHgwMDAxMDAwMCk7IC8vIFJldmlzaW9uCisgICAg
ICAgIGFwcGVuZDMyKDApOyAvLyBDaGVja3N1bSBwbGFjZWhvbGRlcjsgdG8gYmUgb3ZlcndyaXR0
ZW4gYnkgdGhlIGNhbGxlci4KKyAgICAgICAgYXBwZW5kMzIoMHg1RjBGM0NGNSk7IC8vIE1hZ2lj
IG51bWJlci4KKyAgICAgICAgYXBwZW5kMTYoKDEgPDwgOSkgfCAxKTsKKworICAgICAgICBhcHBl
bmQxNih1bml0c1BlckVtKTsKKyAgICAgICAgYXBwZW5kMzIoMCk7IC8vIEZpcnN0IGhhbGYgb2Yg
Y3JlYXRpb24gZGF0ZQorICAgICAgICBhcHBlbmQzMigwKTsgLy8gTGFzdCBoYWxmIG9mIGNyZWF0
aW9uIGRhdGUKKyAgICAgICAgYXBwZW5kMzIoMCk7IC8vIEZpcnN0IGhhbGYgb2YgbW9kaWZpY2F0
aW9uIGRhdGUKKyAgICAgICAgYXBwZW5kMzIoMCk7IC8vIExhc3QgaGFsZiBvZiBtb2RpZmljYXRp
b24gZGF0ZQorICAgICAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KDApKTsgLy8gYm91bmRp
bmcgYm94IHgKKyAgICAgICAgYXBwZW5kMTYoY2xhbXBUbzxpbnQxNl90PigwKSk7IC8vIGJvdW5k
aW5nIGJveCB5CisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4odW5pdHNQZXJFbSkp
OyAvLyBib3VuZGluZyBib3ggbWF4IHgKKyAgICAgICAgYXBwZW5kMTYoY2xhbXBUbzxpbnQxNl90
Pih1bml0c1BlckVtKSk7IC8vIGJvdW5kaW5nIGJveCBtYXggeQorICAgICAgICBhcHBlbmQxNigw
KTsgLy8gVHJhaXRzCisgICAgICAgIGFwcGVuZDE2KDMpOyAvLyBTbWFsbGVzdCByZWFkYWJsZSBz
aXplIGluIHBpeGVscworICAgICAgICBhcHBlbmQxNigwKTsgLy8gTWlnaHQgY29udGFpbiBMVFIg
b3IgUlRMIGdseXBocworICAgICAgICBhcHBlbmQxNigwKTsgLy8gU2hvcnQgb2Zmc2V0cyBpbiB0
aGUgJ2xvY2EnIHRhYmxlLiBIb3dldmVyLCBPVEYgZm9udHMgZG9uJ3QgaGF2ZSBhICdsb2NhJyB0
YWJsZSBzbyB0aGlzIGlzIGlycmVsZXZhbnQKKyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIEdseXBo
IGRhdGEgZm9ybWF0CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kSEhFQVRhYmxlKCkgewor
ICAgICAgICBhcHBlbmQzMigweDAwMDEwMDAwKTsgLy8gVmVyc2lvbgorICAgICAgICBhcHBlbmQx
NihjbGFtcFRvPGludDE2X3Q+KHVuaXRzUGVyRW0pKTsgLy8gYXNjZW50CisgICAgICAgIGFwcGVu
ZDE2KGNsYW1wVG88aW50MTZfdD4odW5pdHNQZXJFbSkpOyAvLyBkZXNjZW50CisgICAgICAgIC8v
IFdlYktpdCBTVkcgZm9udCByZW5kZXJpbmcgaGFzIGhhcmQgY29kZWQgdGhlIGxpbmUgZ2FwIHRv
IGJlIDEvMTB0aCBvZiB0aGUgZm9udCBzaXplIHNpbmNlIDIwMDggKHNlZSByMjk3MTkpLgorICAg
ICAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KHVuaXRzUGVyRW0gLyAxMCkpOyAvLyBsaW5l
IGdhcAorICAgICAgICBhcHBlbmQxNihjbGFtcFRvPHVpbnQxNl90Pih1bml0c1BlckVtKSk7IC8v
IGFkdmFuY2Ugd2lkdGggbWF4CisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4oMCkp
OyAvLyBNaW5pbXVtIGxlZnQgc2lkZSBiZWFyaW5nCisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88
aW50MTZfdD4oMCkpOyAvLyBNaW5pbXVtIHJpZ2h0IHNpZGUgYmVhcmluZworICAgICAgICBhcHBl
bmQxNihjbGFtcFRvPGludDE2X3Q+KHVuaXRzUGVyRW0pKTsgLy8gWCBtYXhpbXVtIGV4dGVudAor
ICAgICAgICAvLyBTaW5jZSBXZWJLaXQgZHJhd3MgdGhlIGNhcmV0IGFuZCBpZ25vcmVzIHRoZSBm
b2xsb3dpbmcgdmFsdWVzLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHNldCB0aGVtIHRvLgor
ICAgICAgICBhcHBlbmQxNigxKTsgLy8gVmVydGljYWwgY2FyZXQKKyAgICAgICAgYXBwZW5kMTYo
MCk7IC8vIFZlcnRpY2FsIGNhcmV0CisgICAgICAgIGFwcGVuZDE2KDApOyAvLyAiU2V0IHZhbHVl
IHRvIDAgZm9yIG5vbi1zbGFudGVkIGZvbnRzIgorICAgICAgICBhcHBlbmQzMigwKTsgLy8gUmVz
ZXJ2ZWQKKyAgICAgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2VydmVkCisgICAgICAgIGFwcGVuZDE2
KDApOyAvLyBDdXJyZW50IGZvcm1hdAorICAgICAgICBhcHBlbmQxNihudW1HbHlwaHMpOyAvLyBO
dW1iZXIgb2YgYWR2YW5jZSB3aWR0aHMgaW4gSE1UWCB0YWJsZQorICAgIH0KKyAgICAKKyAgICB2
b2lkIGFwcGVuZEhNVFhUYWJsZSgpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgYXBwZW5kMTYoY2xhbXBUbzx1aW50
MTZfdD4odW5pdHNQZXJFbSkpOyAvLyBob3Jpem9udGFsIGFkdmFuY2UKKyAgICAgICAgICAgIGFw
cGVuZDE2KGNsYW1wVG88aW50MTZfdD4oMCkpOyAvLyBsZWZ0IHNpZGUgYmVhcmluZworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kTUFYUFRhYmxlKCkgeworICAgICAgICBh
cHBlbmQzMigweDAwMDEwMDAwKTsgLy8gVmVyc2lvbgorICAgICAgICBhcHBlbmQxNihudW1HbHlw
aHMpOyAvLyBOdW1iZXIgb2YgZ2x5cGhzCisgICAgICAgIGFwcGVuZDE2KDB4RkZGRik7IC8vIE1h
eGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBub24tY29tcG91bmQgZ2x5cGgKKyAgICAgICAgYXBw
ZW5kMTYoMHhGRkZGKTsgLy8gTWF4aW11bSBudW1iZXIgb2YgY29udG91cnMgaW4gbm9uLWNvbXBv
dW5kIGdseXBoCisgICAgICAgIGFwcGVuZDE2KDB4RkZGRik7IC8vIE1heGltdW0gbnVtYmVyIG9m
IHBvaW50cyBpbiBjb21wb3VuZCBnbHlwaAorICAgICAgICBhcHBlbmQxNigweEZGRkYpOyAvLyBN
YXhpbXVtIG51bWJlciBvZiBjb250b3VycyBpbiBjb21wb3VuZCBnbHlwaAorICAgICAgICBhcHBl
bmQxNigyKTsgLy8gTWF4aW11bSBudW1iZXIgb2Ygem9uZXMKKyAgICAgICAgYXBwZW5kMTYoMCk7
IC8vIE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyB1c2VkIGluIHpvbmUgMAorICAgICAgICBhcHBl
bmQxNigwKTsgLy8gTWF4aW11bSBudW1iZXIgb2Ygc3RvcmFnZSBhcmVhIGxvY2F0aW9ucworICAg
ICAgICBhcHBlbmQxNigwKTsgLy8gTWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gZGVmaW5pdGlv
bnMKKyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9u
IGRlZmluaXRpb25zCisgICAgICAgIGFwcGVuZDE2KDApOyAvLyBNYXhpbXVtIHN0YWNrIGRlcHRo
CisgICAgICAgIGFwcGVuZDE2KDApOyAvLyBNYXhpbXVtIHNpemUgb2YgaW5zdHJ1Y3Rpb25zCisg
ICAgICAgIGFwcGVuZDE2KG51bUdseXBocyk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGdseXBocyBy
ZWZlcmVuY2VkIGF0IHRvcCBsZXZlbAorICAgICAgICBhcHBlbmQxNigwKTsgLy8gTm8gY29tcG91
bmQgZ2x5cGhzCisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kTkFNRVRhYmxlKCkgeworICAg
ICAgICBzdGQ6OnN0cmluZyBmb250TmFtZSA9ICJNeWxlc0ZvbnQiOworCisgICAgICAgIGFwcGVu
ZDE2KDApOyAvLyBGb3JtYXQgc2VsZWN0b3IKKyAgICAgICAgYXBwZW5kMTYoMSk7IC8vIE51bWJl
ciBvZiBuYW1lIHJlY29yZHMgaW4gdGFibGUKKyAgICAgICAgYXBwZW5kMTYoMTgpOyAvLyBPZmZz
ZXQgaW4gYnl0ZXMgdG8gdGhlIGJlZ2lubmluZyBvZiBuYW1lIGNoYXJhY3RlciBzdHJpbmdzCisK
KyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIFVuaWNvZGUKKyAgICAgICAgYXBwZW5kMTYoMyk7IC8v
IFVuaWNvZGUgdmVyc2lvbiAyLjAgb3IgbGF0ZXIKKyAgICAgICAgYXBwZW5kMTYoMCk7IC8vIExh
bmd1YWdlCisgICAgICAgIGFwcGVuZDE2KDEpOyAvLyBOYW1lIGlkZW50aWZpZXIuIDEgPSBGb250
IGZhbWlseQorICAgICAgICBhcHBlbmQxNihmb250TmFtZS5sZW5ndGgoKSk7CisgICAgICAgIGFw
cGVuZDE2KDApOyAvLyBPZmZzZXQgaW50byBuYW1lIGRhdGEKKworICAgICAgICBmb3IgKGF1dG8g
Y29kZVVuaXQgOiBmb250TmFtZSkKKyAgICAgICAgICAgIGFwcGVuZDE2KGNvZGVVbml0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRQT1NUVGFibGUoKSB7CisgICAgICAgIGFwcGVuZDMy
KDB4MDAwMzAwMDApOyAvLyBGb3JtYXQuIFByaW50aW5nIGlzIHVuZGVmaW5lZAorICAgICAgICBh
cHBlbmQzMigwKTsgLy8gSXRhbGljIGFuZ2xlIGluIGRlZ3JlZXMKKyAgICAgICAgYXBwZW5kMTYo
MCk7IC8vIFVuZGVybGluZSBwb3NpdGlvbgorICAgICAgICBhcHBlbmQxNigwKTsgLy8gVW5kZXJs
aW5lIHRoaWNrbmVzcworICAgICAgICBhcHBlbmQzMigwKTsgLy8gTW9ub3NwYWNlZAorICAgICAg
ICBhcHBlbmQzMigwKTsgLy8gIk1pbmltdW0gbWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlwZSBm
b250IGlzIGRvd25sb2FkZWQgYXMgYSBUeXBlIDQyIGZvbnQiCisgICAgICAgIGFwcGVuZDMyKDAp
OyAvLyAiTWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxv
YWRlZCBhcyBhIFR5cGUgNDIgZm9udCIKKyAgICAgICAgYXBwZW5kMzIoMCk7IC8vICJNaW5pbXVt
IG1lbW9yeSB1c2FnZSB3aGVuIGEgVHJ1ZVR5cGUgZm9udCBpcyBkb3dubG9hZGVkIGFzIGEgVHlw
ZSAxIGZvbnQiCisgICAgICAgIGFwcGVuZDMyKDApOyAvLyAiTWF4aW11bSBtZW1vcnkgdXNhZ2Ug
d2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgMSBmb250IgorICAg
IH0KKworICAgIHVpbnQzMl90IGNhbGN1bGF0ZUNoZWNrc3VtKHNpemVfdCBzdGFydGluZ09mZnNl
dCwgc2l6ZV90IGVuZGluZ09mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGFzc2VydChpc0Zv
dXJCeXRlQWxpZ25lZChlbmRpbmdPZmZzZXQgLSBzdGFydGluZ09mZnNldCkpOworICAgICAgICB1
aW50MzJfdCBzdW0gPSAwOworICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBzdGFydGluZ09m
ZnNldDsgb2Zmc2V0IDwgZW5kaW5nT2Zmc2V0OyBvZmZzZXQgKz0gNCkgeworICAgICAgICAgICAg
c3VtICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHJlc3VsdFtvZmZzZXQgKyAzXSkKKyAg
ICAgICAgICAgICAgICB8IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihyZXN1bHRbb2Zmc2V0
ICsgMl0pIDw8IDgpCisgICAgICAgICAgICAgICAgfCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4ocmVzdWx0W29mZnNldCArIDFdKSA8PCAxNikKKyAgICAgICAgICAgICAgICB8IChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihyZXN1bHRbb2Zmc2V0XSkgPDwgMjQpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBzdW07CisgICAgfQorCisgICAgdHlwZWRlZiB2b2lkIChHZW5lcmF0b3I6
OipGb250QXBwZW5kaW5nRnVuY3Rpb24pKCk7CisgICAgdm9pZCBhcHBlbmRUYWJsZShjb25zdCBj
aGFyIGlkZW50aWZpZXJbNF0sIEZvbnRBcHBlbmRpbmdGdW5jdGlvbiBhcHBlbmRpbmdGdW5jdGlv
bikgeworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAgYXNz
ZXJ0KGlzRm91ckJ5dGVBbGlnbmVkKG9mZnNldCkpOworICAgICAgICAodGhpcy0+KmFwcGVuZGlu
Z0Z1bmN0aW9uKSgpOworICAgICAgICBzaXplX3QgdW5wYWRkZWRTaXplID0gcmVzdWx0LnNpemUo
KSAtIG9mZnNldDsKKyAgICAgICAgd2hpbGUgKCFpc0ZvdXJCeXRlQWxpZ25lZChyZXN1bHQuc2l6
ZSgpKSkKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soMCk7CisgICAgICAgIGFzc2VydChp
c0ZvdXJCeXRlQWxpZ25lZChyZXN1bHQuc2l6ZSgpKSk7CisgICAgICAgIHNpemVfdCBkaXJlY3Rv
cnlFbnRyeU9mZnNldCA9IGhlYWRlclNpemUgKyBtX3RhYmxlc0FwcGVuZGVkQ291bnQgKiBkaXJl
Y3RvcnlFbnRyeVNpemU7CisgICAgICAgIHJlc3VsdFtkaXJlY3RvcnlFbnRyeU9mZnNldF0gPSBp
ZGVudGlmaWVyWzBdOworICAgICAgICByZXN1bHRbZGlyZWN0b3J5RW50cnlPZmZzZXQgKyAxXSA9
IGlkZW50aWZpZXJbMV07CisgICAgICAgIHJlc3VsdFtkaXJlY3RvcnlFbnRyeU9mZnNldCArIDJd
ID0gaWRlbnRpZmllclsyXTsKKyAgICAgICAgcmVzdWx0W2RpcmVjdG9yeUVudHJ5T2Zmc2V0ICsg
M10gPSBpZGVudGlmaWVyWzNdOworICAgICAgICBvdmVyd3JpdGUzMihkaXJlY3RvcnlFbnRyeU9m
ZnNldCArIDQsIGNhbGN1bGF0ZUNoZWNrc3VtKG9mZnNldCwgcmVzdWx0LnNpemUoKSkpOworICAg
ICAgICBvdmVyd3JpdGUzMihkaXJlY3RvcnlFbnRyeU9mZnNldCArIDgsIHN0YXRpY19jYXN0PHVp
bnQzMl90PihvZmZzZXQpKTsKKyAgICAgICAgb3ZlcndyaXRlMzIoZGlyZWN0b3J5RW50cnlPZmZz
ZXQgKyAxMiwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHVucGFkZGVkU2l6ZSkpOworICAgICAgICAr
K21fdGFibGVzQXBwZW5kZWRDb3VudDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX3RhYmxlc0Fw
cGVuZGVkQ291bnQgeyAwIH07CisgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gcmVzdWx0OworfTsK
Kworc3RkOjp2ZWN0b3I8dWludDhfdD4gZ2VuZXJhdGVGb250KCkgeworICAgIHJldHVybiBHZW5l
cmF0b3IoKS5nZW5lcmF0ZSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1Rvb2xzL0ZvbnRXaXRoRmVhdHVyZXMvRm9udFdpdGhGZWF0dXJlcy9Gb250Q3JlYXRv
ci5oIGIvVG9vbHMvRm9udFdpdGhGZWF0dXJlcy9Gb250V2l0aEZlYXR1cmVzL0ZvbnRDcmVhdG9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWFiZTVmN2EyYjdjZDM1MzBjM2UwODUwYzAxZjJiZWFjOTcyYzg2Nwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0ZvbnRXaXRoRmVhdHVyZXMvRm9udFdpdGhGZWF0dXJl
cy9Gb250Q3JlYXRvci5oCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyAgRm9udENyZWF0b3IuaHBw
CisvLyAgRm9udFdpdGhGZWF0dXJlcworLy8KKy8vICBDcmVhdGVkIGJ5IExpdGhlcnVtIG9uIDkv
MTUvMTUuCisvLyAgQ29weXJpZ2h0IMKpIDIwMTUgTGl0aGVydW0uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLworCisjaWZuZGVmIEZvbnRDcmVhdG9yX2gKKyNkZWZpbmUgRm9udENyZWF0b3JfaAor
CisjaW5jbHVkZSA8dmVjdG9yPgorCitzdGQ6OnZlY3Rvcjx1aW50OF90PiBnZW5lcmF0ZUZvbnQo
KTsKKworI2VuZGlmIC8qIEZvbnRDcmVhdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1Rvb2xzL0ZvbnRX
aXRoRmVhdHVyZXMvRm9udFdpdGhGZWF0dXJlcy9tYWluLmNwcCBiL1Rvb2xzL0ZvbnRXaXRoRmVh
dHVyZXMvRm9udFdpdGhGZWF0dXJlcy9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmY1YWY1YTg5NTAx
MmM2NzJlZjVjYzQwNWE4YzBmYmM2MzhhNTE3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRm9u
dFdpdGhGZWF0dXJlcy9Gb250V2l0aEZlYXR1cmVzL21haW4uY3BwCkBAIC0wLDAgKzEsMTAwIEBA
CisvLworLy8gIG1haW4uY3BwCisvLyAgRm9udFdpdGhGZWF0dXJlcworLy8KKy8vICBDcmVhdGVk
IGJ5IExpdGhlcnVtIG9uIDkvMTUvMTUuCisvLyAgQ29weXJpZ2h0IMKpIDIwMTUgTGl0aGVydW0u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2luY2x1ZGUgPENvcmVG
b3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVT
ZXJ2aWNlcy5oPgorI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjaW5jbHVkZSA8ZnN0
cmVhbT4KKworI2luY2x1ZGUgIkZvbnRDcmVhdG9yLmgiCisKK3ZvaWQgZHJhd1RleHRXaXRoRmVh
dHVyZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3Jp
cHRvciwgQ0ZTdHJpbmdSZWYgZmVhdHVyZSwgaW50IHZhbHVlLCBDR1BvaW50IGxvY2F0aW9uKSB7
CisgICAgQ0dGbG9hdCBmb250U2l6ZSA9IDI1OworICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgo
Y29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5
LCAxLCAxKSk7CisgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNvbnRleHQsIGxvY2F0aW9u
LngsIGxvY2F0aW9uLnkpOworICAgIENGTnVtYmVyUmVmIGZlYXR1cmVWYWx1ZSA9IENGTnVtYmVy
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZ2YWx1ZSk7Cisg
ICAgQ0ZUeXBlUmVmIGZlYXR1cmVEaWN0aW9uYXJ5S2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVG
ZWF0dXJlVGFnLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUgfTsKKyAgICBDRlR5cGVSZWYg
ZmVhdHVyZURpY3Rpb25hcnlWYWx1ZXNbXSA9IHsgZmVhdHVyZSwgZmVhdHVyZVZhbHVlIH07Cisg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVEaWN0aW9uYXJ5ID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGZlYXR1cmVEaWN0aW9uYXJ5S2V5cywgZmVhdHVyZURpY3Rp
b25hcnlWYWx1ZXMsIDIsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgIENGUmVsZWFzZShmZWF0dXJlVmFsdWUpOwor
ICAgIENGVHlwZVJlZiBmZWF0dXJlU2V0dGluZ3NWYWx1ZXNbXSA9IHsgZmVhdHVyZURpY3Rpb25h
cnkgfTsKKyAgICBDRkFycmF5UmVmIGZvbnRGZWF0dXJlU2V0dGluZ3MgPSBDRkFycmF5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGZlYXR1cmVTZXR0aW5nc1ZhbHVlcywgMSwgJmtDRlR5cGVB
cnJheUNhbGxCYWNrcyk7CisgICAgQ0ZSZWxlYXNlKGZlYXR1cmVEaWN0aW9uYXJ5KTsKKyAgICBD
RlR5cGVSZWYgZm9udERlc2NyaXB0b3JLZXlzW10gPSB7IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NB
dHRyaWJ1dGUgfTsKKyAgICBDRlR5cGVSZWYgZm9udERlc2NyaXB0b3JWYWx1ZXNbXSA9IHsgZm9u
dEZlYXR1cmVTZXR0aW5ncyB9OworICAgIENGRGljdGlvbmFyeVJlZiBmb250RGVzY3JpcHRvckF0
dHJpYnV0ZXMgPSBDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZm9udERl
c2NyaXB0b3JLZXlzLCBmb250RGVzY3JpcHRvclZhbHVlcywgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgQ0ZS
ZWxlYXNlKGZvbnRGZWF0dXJlU2V0dGluZ3MpOworICAgIENURm9udERlc2NyaXB0b3JSZWYgbW9k
aWZpZWRGb250RGVzY3JpcHRvciA9IENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aEF0dHJp
YnV0ZXMoZm9udERlc2NyaXB0b3IsIGZvbnREZXNjcmlwdG9yQXR0cmlidXRlcyk7CisgICAgQ0ZS
ZWxlYXNlKGZvbnREZXNjcmlwdG9yQXR0cmlidXRlcyk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBD
VEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IobW9kaWZpZWRGb250RGVzY3JpcHRvciwgZm9u
dFNpemUsIG51bGxwdHIpOworICAgIENGUmVsZWFzZShtb2RpZmllZEZvbnREZXNjcmlwdG9yKTsK
KworICAgIENGTXV0YWJsZVN0cmluZ1JlZiBzdHJpbmcgPSBDRlN0cmluZ0NyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCk7CisgICAgQ0ZTdHJpbmdBcHBlbmQoc3RyaW5nLCBmZWF0
dXJlKTsKKyAgICBDRlN0cmluZ0FwcGVuZChzdHJpbmcsIHZhbHVlID8gQ0ZTVFIoIiAgKG9uKSIp
IDogQ0ZTVFIoIiAob2ZmKSIpKTsKKyAgICBDRlN0cmluZ0FwcGVuZChzdHJpbmcsIENGU1RSKCI6
IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKSk7
CisgICAgQ0dDb2xvclJlZiByZWQgPSBDR0NvbG9yQ3JlYXRlR2VuZXJpY1JHQigxLCAwLCAwLCAx
KTsKKyAgICBDRlR5cGVSZWYgbGluZUtleXNbXSA9IHsga0NURm9yZWdyb3VuZENvbG9yQXR0cmli
dXRlTmFtZSB9OworICAgIENGVHlwZVJlZiBsaW5lVmFsdWVzW10gPSB7IHJlZCB9OworICAgIENG
RGljdGlvbmFyeVJlZiBsaW5lQXR0cmlidXRlcyA9IENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBsaW5lS2V5cywgbGluZVZhbHVlcywgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgQ0dD
b2xvclJlbGVhc2UocmVkKTsKKyAgICBDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0
cmluZyA9IENGQXR0cmlidXRlZFN0cmluZ0NyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdHJp
bmcsIGxpbmVBdHRyaWJ1dGVzKTsKKyAgICBDRlJlbGVhc2UobGluZUF0dHJpYnV0ZXMpOworICAg
IENGUmVsZWFzZShzdHJpbmcpOworICAgIENGTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmdSZWYgbXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgPSBDRkF0dHJpYnV0ZWRTdHJpbmdDcmVhdGVNdXRhYmxlQ29w
eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBhdHRyaWJ1dGVkU3RyaW5nKTsKKyAgICBDRlJlbGVh
c2UoYXR0cmlidXRlZFN0cmluZyk7CisgICAgQ1RGb250UmVmIG1vbm9zcGFjZUZvbnQgPSBDVEZv
bnRDcmVhdGVXaXRoTmFtZShDRlNUUigiQ291cmllciIpLCBmb250U2l6ZSwgbnVsbHB0cik7Cisg
ICAgQ0ZBdHRyaWJ1dGVkU3RyaW5nU2V0QXR0cmlidXRlKG11dGFibGVBdHRyaWJ1dGVkU3RyaW5n
LCBDRlJhbmdlTWFrZSgwLCAxMiksIGtDVEZvbnRBdHRyaWJ1dGVOYW1lLCBtb25vc3BhY2VGb250
KTsKKyAgICBDRlJlbGVhc2UobW9ub3NwYWNlRm9udCk7CisgICAgQ0ZBdHRyaWJ1dGVkU3RyaW5n
U2V0QXR0cmlidXRlKG11dGFibGVBdHRyaWJ1dGVkU3RyaW5nLCBDRlJhbmdlTWFrZSgxMiwgNTIp
LCBrQ1RGb250QXR0cmlidXRlTmFtZSwgZm9udCk7CisgICAgQ0ZSZWxlYXNlKGZvbnQpOworICAg
IENUTGluZVJlZiBsaW5lID0gQ1RMaW5lQ3JlYXRlV2l0aEF0dHJpYnV0ZWRTdHJpbmcobXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcpOworICAgIENGUmVsZWFzZShtdXRhYmxlQXR0cmlidXRlZFN0cmlu
Zyk7CisgICAgQ1RMaW5lRHJhdyhsaW5lLCBjb250ZXh0KTsKKyAgICBDRlJlbGVhc2UobGluZSk7
Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKSB7CisgICAgc2l6
ZV90IHdpZHRoID0gMjAwMDsKKyAgICBzaXplX3QgaGVpZ2h0ID0gMjAwMDsKKyAgICBDR0NvbG9y
U3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIHdp
ZHRoLCBoZWlnaHQsIDgsIHdpZHRoICogNCwgY29sb3JTcGFjZSwga0NHSW1hZ2VBbHBoYU5vbmVT
a2lwTGFzdCk7CisgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKKyAgICBjb25z
dCBzdGQ6OnZlY3Rvcjx1aW50OF90PiBmb250VmVjdG9yID0gZ2VuZXJhdGVGb250KCk7CisgICAg
c3RkOjpvZnN0cmVhbSBvdXRwdXRGaWxlKCIvVm9sdW1lcy9EYXRhL2hvbWUvbW1heGZpZWxkL3Rt
cC9vdXRwdXQub3RmIiwgc3RkOjppb3M6Om91dCB8IHN0ZDo6aW9zOjpiaW5hcnkpOworICAgIGZv
ciAodWludDhfdCBiIDogZm9udFZlY3RvcikKKyAgICAgICAgb3V0cHV0RmlsZSA8PCBiOworICAg
IG91dHB1dEZpbGUuY2xvc2UoKTsKKyAgICAKKyAgICBDRkRhdGFSZWYgZm9udERhdGEgPSBDRkRh
dGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZm9udFZlY3Rvci5kYXRhKCksIGZvbnRWZWN0
b3Iuc2l6ZSgpKTsKKyAgICBDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yID0gQ1RG
b250TWFuYWdlckNyZWF0ZUZvbnREZXNjcmlwdG9yRnJvbURhdGEoZm9udERhdGEpOworICAgIENG
UmVsZWFzZShmb250RGF0YSk7CisKKyAgICBDRlR5cGVSZWYgZmVhdHVyZVZhbHVlc1tdID0geyBD
RlNUUigibGlnYSIpLCBDRlNUUigiY2xpZyIpLCBDRlNUUigiZGxpZyIpLCBDRlNUUigiaGxpZyIp
LCBDRlNUUigiY2FsdCIpLCBDRlNUUigic3VicyIpLCBDRlNUUigic3VwcyIpLCBDRlNUUigic21j
cCIpLCBDRlNUUigiYzJzYyIpLCBDRlNUUigicGNhcCIpLCBDRlNUUigiYzJwYyIpLCBDRlNUUigi
dW5pYyIpLCBDRlNUUigidGl0bCIpLCBDRlNUUigib251bSIpLCBDRlNUUigicG51bSIpLCBDRlNU
UigidG51bSIpLCBDRlNUUigiZnJhYyIpLCBDRlNUUigiYWZyYyIpLCBDRlNUUigib3JkbiIpLCBD
RlNUUigiemVybyIpLCBDRlNUUigiaGlzdCIpLCBDRlNUUigianA3OCIpLCBDRlNUUigianA4MyIp
LCBDRlNUUigianA5MCIpLCBDRlNUUigianAwNCIpLCBDRlNUUigic21wbCIpLCBDRlNUUigidHJh
ZCIpLCBDRlNUUigiZndpZCIpLCBDRlNUUigicHdpZCIpLCBDRlNUUigicnVieSIpIH07CisgICAg
Q0ZBcnJheVJlZiBmZWF0dXJlcyA9IENGQXJyYXlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
ZmVhdHVyZVZhbHVlcywgMzAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOworCisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KGZlYXR1cmVzKTsgKytpKSB7CisgICAg
ICAgIGRyYXdUZXh0V2l0aEZlYXR1cmUoY29udGV4dCwgZm9udERlc2NyaXB0b3IsIHN0YXRpY19j
YXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLCBpKSksIDEs
IENHUG9pbnRNYWtlKDI1LCAxOTUwIC0gNTAgKiBpKSk7CisgICAgICAgIGRyYXdUZXh0V2l0aEZl
YXR1cmUoY29udGV4dCwgZm9udERlc2NyaXB0b3IsIHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihD
RkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLCBpKSksIDAsIENHUG9pbnRNYWtlKDI1LCAx
OTI1IC0gNTAgKiBpKSk7CisgICAgfQorCisgICAgQ0ZSZWxlYXNlKGZlYXR1cmVzKTsKKyAgICBD
RlJlbGVhc2UoZm9udERlc2NyaXB0b3IpOworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDR0JpdG1h
cENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KTsKKyAgICBDR0NvbnRleHRSZWxlYXNlKGNvbnRl
eHQpOworICAgIENGVVJMUmVmIHVybCA9IENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKGtD
RkFsbG9jYXRvckRlZmF1bHQsIENGU1RSKCIvVm9sdW1lcy9EYXRhL2hvbWUvbW1heGZpZWxkL3Rt
cC9vdXRwdXQucG5nIiksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBGQUxTRSk7CisgICAgQ0dJbWFn
ZURlc3RpbmF0aW9uUmVmIGltYWdlRGVzdGluYXRpb24gPSBDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoVVJMKHVybCwga1VUVHlwZVBORywgMSwgbnVsbHB0cik7CisgICAgQ0ZSZWxlYXNlKHVy
bCk7CisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoaW1hZ2VEZXN0aW5hdGlvbiwgaW1h
Z2UsIG51bGxwdHIpOworICAgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsKKyAgICBDR0ltYWdlRGVz
dGluYXRpb25GaW5hbGl6ZShpbWFnZURlc3RpbmF0aW9uKTsKKyAgICBDRlJlbGVhc2UoaW1hZ2VE
ZXN0aW5hdGlvbik7CisgICAgcmV0dXJuIDA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQo=
</data>
<flag name="review"
          id="286544"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>